review-latest-feedback
/review-latest-feedback
Zbiera świeże zgłoszenia z feedbacku, błędów CI i logów, naprawia ile się da i zamyka każde zgłoszenie krótką odpowiedzią.
- Autor
- builderio ↗
- Repozytorium
- agent-native ↗
- Licencja
- MIT
- Ostatnia zmiana repozytorium
- 27.10.2026
Ocena i bezpieczeństwo
- Pliki w paczce
- 1
- Skrypty
- 0
- Komentarze HTML
- 0
- Adresy URL w SKILL.md
- 3
Brak sygnałów. Repozytorium zmienione 27.10.2026, bez odwołań do wycofanych modeli i API.
MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.
Co robi i kiedy
Zbiera świeże zgłoszenia z feedbacku, błędów CI i logów, naprawia ile się da i zamyka każde zgłoszenie krótką odpowiedzią.
Oryginalny opis (EN)
Sweep recent feedback (the Slack feedback channels, GitHub issues, CI on main, Sentry, Analytics errors, chat run health, deploys), fix as many real bugs as possible, ship them in one PR, then close the loop on every Slack report with 👀/✅/🎫 and one short plain-English reply. Use for scheduled or manual feedback sweeps, usually followed by /ship.
Jak działa
- The contract
- Boundaries
- 1. Collect (keep it under ~15 minutes)
- 2. Triage: lean toward fixing
- 3. Fix as many as you can
- 4. Ship
- 5. Close the loop
- 6. Recap
Podgląd SKILL.md
---
name: review-latest-feedback
description: >-
Sweep recent feedback (the Slack feedback channels, GitHub issues, CI on
main, Sentry, Analytics errors, chat run health, deploys), fix as many real
bugs as possible, ship them in one PR, then close the loop on every Slack
report with 👀/✅/🎫 and one short plain-English reply. Use for scheduled or
manual feedback sweeps, usually followed by /ship.
user-invocable: true
scope: dev
metadata:
internal: true
---
# Review Latest Feedback
The job: find what's broken, fix as much of it as you can, ship it, and tell
each reporter in one friendly sentence what happened. A sweep is judged by
bugs fixed and merged, and by every claimed report getting a clear answer. It is
not judged by ledgers, receipts, or checker output, so don't produce them.
## The contract
Slack reactions on a report's root message mean exactly this:
| Mark | Meaning | When to add |
| ---- | ----------------------------------------- | ------------------------------------------------------------------------------------------------ |
| 👀 | "I'm on this" | Before you investigate, and only on reports you will finish answering in this run |
| ✅ | "Fixed" | After the fix is merged to `main` (main deploys to beta automatically) |
| 🎫 | "Needs a person" | A product call, access or credentials, info from the reporter, or a fix you couldn't land |
Steve (`U0GCV21HC`) steers the sweep with his own reactions on a root:
| Steve adds | Meaning |
| ------------ | ---------------------------------------------------------------------------------------------- |
| `:mag:` | Don't work on this; someone else will. Wins over everything below |
| `:yes-party:`| Definitely do this, even if it looks ambiguous or like a UX change. Build the smallest version that does what was asked |
| `:upvote:` | Same as `:yes-party:` for a feature request |
| 👀 by hand | He's working on it himself; leave it (see "Open items first" for how to tell his 👀 from ours) |
Reactions can't be removed through the Slack connector, so never add one you
might need to take back. Every 👀 you add ends the run with a reply, plus
either ✅ or 🎫, or a fix PR that is still open and lists the report (its
merge adds the ✅). A 👀 with no follow-up is the most common complaint about this workflow.
Every claimed report gets **one** reply in its thread per outcome. People
have pushed back on replies that were long, technical, condescending, vague
about who does what next, or that handed them work. Each reply must be:
- **An answer first:** if they asked something ("is this expected?"),
answer it in the first words ("no, that's a bug"), not with a status.
- **Short:** one sentence, about 25 words at most, for someone who doesn't
read code.
- **About what they'll notice:** say what changes for them ("recordings no
longer get stuck on Saving"), not how it works ("cleanup now waits for the
transcript"). Leave out file, function, and service names, PR numbers,
ticket IDs, CI, logs, runs, "repro", "verified", "scope", "sweep", status
labels ("In progress:", "Skipped:", "Resolved elsewhere:", "Blocked on
human owner:", "Open - no question:"), and any mention of this workflow.
Never report your own progress ("unreproduced", "not traced yet",
"remains open"); say what happens next instead.
- **Clear on who does what next:** "I'll ..." or a named person ("Sid will
decide ..."). Never "the team", "product", "the framework team", "the
owner", or "someone". If no one else clearly owns it, say Steve will take
a look (or decide). Replies post from Steve's account, so never "I've passed
it to Steve". Never @-mention anyone.
- **Not a to-do list for them:** look things up yourself first (the
message's time and author, their account and recent activity, logs, the
linked page or screenshot). Ask only when nothing else can unblock it, and
then ask one small thing, in this one reply. Never send a list of
questions, never ask them to test, retry, re-record, pull, reinstall, or
gather logs, and never come back later asking for something you could have
asked the first time. If it needs access you don't have (credentials, admin
rights, account changes), say Steve will handle it; never hand it to the
reporter.
- **Plain, not preachy:** don't explain how the product works unless they
asked, don't tell them what they should do, and skip apologies, hedging,
"actually", "just", "simply", and "Great catch!!".
- **True:** "fixed" only for a merged fix, and "on beta shortly" only after
the merge. Before that, the fix is "in review". Never "fixed and verified"
on the strength of a local check.
- **Once:** never post the same reply twice, and never follow up with one
that adds nothing new.
- Link the PR on the word "fix" (`<url|fix>`), never by number.
- End with the bold line `**This was sent from a bot**` on its own line,
once.
Don't reply at all to jokes, venting, banter, a message meant for Steve
himself, or a thread a person is already handling. Once a person says they
have it, or asks the bot to stop, post nothing more in that thread. Before posting, reread the reply as the reporter: would they get it
in five seconds, know who does what next, and feel we did the legwork?
Good (each is the first line; the footer goes on the line below it):
- `thanks - the <https://github.com/BuilderIO/agent-native/pull/1234|fix> so the export keeps your column order is merged and will be on beta shortly.`
- `thanks - once this <https://github.com/BuilderIO/agent-native/pull/1234|fix> merges, the export will keep your column order; it's in review now.`
- `thanks - Steve will decide where that button should go.`
- `thanks - I couldn't find which deck this was; could you paste its link?`
So a full reply looks like:
```text
thanks - the <https://github.com/BuilderIO/agent-native/pull/1234|fix> so the export keeps your column order is merged and will be on beta shortly.
**This was sent from a bot**
```
Real replies that missed, and what to send instead:
| Sent | Instead |
| --- | --- |
| "Could you send the recording link, approximate time, and browser so we can trace whether the clip produced media before it tried to save?" | Find the recording from the reporter and message time first. If you still can't: "thanks - I couldn't find which recording this was; could you paste its link?" |
| "cleanup now waits for the transcript, and a fix is ready. It should be on beta shortly." (sent before the merge) | "thanks - recordings will keep their transcript once this <url\|fix> is merged; it's in review now." |
| "I've left moving it somewhere easier to find for product to decide." | "thanks - Steve will decide where the editor should live." |
| "The framework team needs to decide whether multi-step work should be gathered into one request or handled through the agent's usual back-and-forth." | "thanks - Steve will decide how this should work." |
| "Partially fixed - PR #7512 merged the project-instructions/context carryover fix", after she'd asked whether FullStory could be added for the whole org | Answer that question first: "yes - I'll add it for everyone" or "not yet - Steve will decide". |
| "All fixed and verified. Please try again!" plus instructions to pull main and reinstall | "thanks - this <url\|fix> is merged and will be on beta shortly." No homework. |
| "One-click clip duplication is a feature request; no change was made in this sweep." | "thanks - Steve will decide whether to build this." |
| "I have not reproduced it or separated model/project time from framework workflow time." | "thanks - I'll look into why that run took so long." Or, if you can't: "Steve will take a look." |
| More replies after Shawn wrote "bot please stop! I've got this all fixed and in flight" | Nothing. A person has it. |
| "Thanks for correcting me, Julia - I misread the replies. ... Open - no question: I don't have enough source evidence to claim a fix." | Nothing: the thread was a joke. |
| Asked for the app URL, what was clicked, and the time; then, in a second reply, for the time zone. | One reply, one question, only for what you can't look up. The message's own timestamp already says when. |
## Boundaries
- **Slack:** only `#product-agent-native-feedback` (`C0ATH3CCZT4`),
`#qa-agent-native` (`C0C4U4XRT6X`), and `#dev-agent-native-feedback`
(`C0AJ5QV0J03`), or the narrower set the invocation names. Never react or
reply anywhere else.
- **Leave a report alone** when:
- Steve put `:mag:` or his own 👀 on it (table above);
- someone in the thread asked a specific person to look, a teammate says
they're handling it, or Steve asked for a human on it;
- another person's 👀 sits on it and they've been active in the last 3
days;
- an earlier run's PR for it is still open. That PR's `/ship` closes the
report out when it merges.
- **PRs:** push to, comment on, or merge only PRs authored by the active
GitHub login (`gh api user --jq .login`). Never touch anyone else's PR unless
the invocation names that exact PR and action.
- **One run, one PR.** Work only on the PR this run opened. Every sweep PR is
authored by Steve's login, so the author check can't tell runs apart: an
open PR with a `Reports` section that this run didn't open belongs to
another run that may still be working on it. Don't push to, reply on, or
merge it; list it under "Still open from earlier runs".
- **Goals end with the run.** If you set a Codex goal, scope it to this run:
name its PR once you have one, and end it after step 6 ("merge PR #N,
close its Reports, append the recap"). Never set an open-ended goal such as
"review feedback" or "fix Steve's open PRs". Goals resume after restarts,
so an open-ended one keeps running into the next scheduled sweep and
collides with it.
- Use the connected Slack integration for every Slack read and write. Confirm
the connected profile is Steve before the first write.
## 1. Collect (keep it under ~15 minutes)
Work in a task-owned worktree on fresh `origin/main`. If you start in a shared
checkout, or the expected worktree is missing, create one
(`git worktree add <path> origin/main`) and carry on. That is never a reason
to stop.
Window: the last 5 days for new reports (or from the timestamp or permalink
the invocation gives), plus 14 days for open items.
- **Read the channels.** Use `slack_read_channel` with
`response_format: detailed` (paginate) back 14 days. Its output shows
reaction counts but not who added them, so call `slack_get_reactions` on any
root showing `eyes`, `white_check_mark`, `ticket`, `mag`, `yes-party`, or
`upvote`. Don't rely on
`hasmy:` searches, which have returned nothing for roots that do carry
Steve's marks.
- **Open items first.** Every run posts as Steve, and Steve also adds 👀 by
hand to things he is working on himself, so a 👀 from his account is not
enough to make a root this workflow's. Treat it as the workflow's only when
the thread already has a reply from Steve's account that ends with "This
was sent from a bot", ignoring case, `*`, punctuation, and whitespace. The
phrase may be on its own line or, in older replies, at the end of the
sentence (`... this was sent from a bot.`). Or when the root is listed under "Claimed, not
yet answered" in the automation's `memory.md`. Any other Steve 👀 means Steve
has it: leave it alone. Of the workflow's roots, any without ✅ or 🎫, or
with a human reply newer than our last reply, comes first in this run. A
reply like "still broken" after a ✅ means the earlier fix failed. Find what
that fix changed and why it didn't hold before trying again.
- **New reports:** roots from the last 5 days. React and reply on the root
message's own `ts`. A channel-history row whose `thread_ts` differs from its
`ts` is a reply that was also sent to the channel: use its `thread_ts`
parent instead. Read the thread for every root
that looks like a report. Open screenshots and attachments, since the error
text in a screenshot is often the whole diagnosis.
- **Other sources.** Unread or failing sources are reported as
**unavailable**, never as "nothing found".
- GitHub: open issues updated in the window
(`gh issue list --state open --search "updated:>=<date>"`). Skip ones
someone else has offered to fix.
- Sentry (frontend and backend projects) and Agent-Native Analytics
(`list-error-issues`, then `get-error-issue`): unresolved, recent, and
repo-owned.
## 2. Triage: lean toward fixing
Put each report in one bucket:
- **Fix:** anything objectively broken. This means errors, nothing happening
on click, lost or wrong data, regressions, slowness, jank, and visible
defects like clipped or overlapping text, unreadable contrast, or a broken
layout. A credible "nothing happens" counts as evidence.
- **Build:** a feature request or UX change carrying Steve's `:upvote:` or
`:yes-party:`.
- **Needs a person (🎫):** subjective product or UX changes Steve hasn't
endorsed (add, move, hide, or restyle controls; "hard to find"), work that needs access or settings only
a person has, a provider outage, or a report you can't act on without one
missing fact.
- **Not actionable:** praise, chatter, announcements, things a human already
answered, duplicates of something already in this run. These get no
reaction and no reply.
Then add 👀 to every Fix, Build, and Needs-a-person root in one pass, before you
investigate. In an automation run, immediately list those roots (channel and
ts) under "Claimed, not yet answered" in its `memory.md`, and remove each one
once it has its reply. That list is how the next run tells an unfinished claim
apart from Steve's own 👀.
## 3. Fix as many as you can
- Group related reports so one cause gets one fix. Give each independent
group a subagent on a cheaper model with disjoint files. The main thread
plans, reviews diffs, and integrates.
- For each group, reproduce first where you reasonably can (a test, the
action, or the flow in a local dev server), fix at the owning boundary
(`fix-at-the-boundary`), and search for the same pattern elsewhere and fix
those too.
- Verify the way `verifying-changes` describes: a test that fails before and
passes after, or the reported flow working in the running app. Reading the
code is not verification.
- Timebox one item to about 30 minutes. If it doesn't yield, it becomes 🎫
with one line on what you learned and who should look.
- Never tune agent instructions or prompts around one report's wording.
## 4. Ship
Put every fix in one PR. Don't open one PR per item. In the PR body, add a
`Reports` section listing the Slack link of every report the PR fixes. That
list is the only set of threads a later `/ship` may close out as fixed.
Merge it the way this repo merges PRs. In a Factory workspace, that means
the workflow's merge step after its merge gate, never a direct merge.
A sweep's PR contains product fixes only. Don't edit this skill, add checker
scripts, or add bookkeeping files in it. If the run taught something, propose
a one-line lesson in the recap and Steve will decide whether it goes in.
## 5. Close the loop
This step is the only place a claimed report gets its closing reply. Run it
after the merge for the threads in the PR's `Reports` section. If the merge
happened outside this run, the next sweep runs it: when you collect, check
each open item's sweep PR, and close out the reports of any that have merged.
Run it once per thread: if a reply in the thread already links this PR, just make sure ✅ is
there and move on.
Write only as the connected Slack profile (Steve), only in the feedback
channels, and in the reply format from the contract above. Re-read each thread
before writing. If Steve has since added `:mag:` or a person has taken it over,
leave it. If a newer human reply says it's still broken, leave the 👀 for the
next sweep. Otherwise:
- **Merged fix:** add ✅ and reply that it's fixed, with the PR linked, and
will be on beta shortly.
- **Fix ready but not merged yet** (for example CI is still running when the
run must end): reply that a fix (PR linked) is in review. Don't mention
beta yet. The next run adds ✅ once it's merged, with no second reply.
- **Needs a person:** add 🎫 and say in plain words what's needed and who has
it now, by name ("Steve will take a look" if no one else clearly owns it).
- **Couldn't reproduce:** add 🎫. If one small answer from the reporter would
unblock it and you couldn't find it yourself, ask for just that. Otherwise
say you couldn't reproduce it and that Steve will take a look. Never ask
for anything already in the thread.
GitHub issues fixed by the merged PR get a one-line thank-you comment linking
the PR, and then get closed.
Before ending, re-read each thread you touched and check:
- every 👀 from this run has a reply after the latest human message, plus
✅, 🎫, or an open fix PR that lists it under `Reports`;
- every ✅ corresponds to a merged fix;
- no reply is technical or duplicated.
## 6. Recap
Keep the recap short and written for Steve:
```md
## Feedback sweep - <date, Pacific>
Fixed and merged (N): <one line each, with Slack thread link> · PR <link>
Needs a person (N): <what's needed, who>
Still open from earlier runs (N): <why>
Sources unavailable: <list or "none">
Lesson (optional): <one line>
```
If the run came from an automation, append the same recap to that
automation's `memory.md`.
Wersje
| Repozytorium | Wynik | Licencja |
|---|---|---|
| Ta strona · builderio/agent-native | 100 | MIT |
| builderio/agent-native | 100 | MIT |
Identyczna treść występuje jeszcze w 1 innych folderach na GitHubie. Tu pokazujemy jedną, najlepiej ocenioną kopię.
Migawka bazy z 28.10.2026 · wersja paczki e2e49bf81152 (skrót SHA-256 całej paczki)
Pobrania w ostatnich 30 dniach: 0 · ranking
Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.
Podobne skille
- 100address-feedback-with-replies
Naprawia uwagi z wybranych wątków Slacka lub wskazanego zakresu i odpowiada każdemu zgłaszającemu w wątku. - 95sentry-code-review
Analizuje i naprawia komentarze Sentry w pull requestach na GitHubie, także wyszukuje PR z opiniami Sentry. - 100address-feedback
Przechodzi przez listę uwag (Notion, Google Doc, Linear, issue GitHub lub wklejone notatki), naprawia prawdziwe błędy, proponuje drobne zmiany UX i oznacza resztę do dalszej decyzji. - 90developer-feedback
Zapisuje uwagi z testów jako uporządkowane dowody i zgłoszenia GitHub, powiązane z kryteriami akceptacji. - 85sentry-workflow
Naprawia błędy produkcyjne z kontekstem Sentry: triage wyjątków, komentarze z przeglądów PR i debugowanie. - 100review-pr-comments
Pobiera nierozwiązane komentarze PR na GitHubie, bada każdy problem, naprawia zasadne i zamyka wątki odpowiedzią.