docs: six invented ticket IDs, and what the PR loop actually needs
Six improvise-* IDs cited in repo-map and ADR 001 never existed -- filed with output suppressed and then written into the docs from memory. A dead ID is worse than no ID, because it reads as a promise the follow-up exists. All six corrected to the real tickets, and AGENTS.md gains the audit loop. AGENTS.md also gains what PR #12 learned: requestReviews takes botIds and not userIds, gh is shell-aliased to a different tool here, a Copilot review takes about six minutes, and a finding can be CORRECT and still be wrong to fix in that PR -- #12 applied a truncate panic (byte-identical on ASCII, so it cost no evidence) and declined a padding bug in the same file that would have rewritten the characterization tests which were the PR's only evidence. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EoW5BB87ZZdm96SvBTWawH
This commit is contained in:
@@ -138,10 +138,39 @@ and watch the check fail.
|
||||
One PR per wave, built by a **dedicated PR agent in its own worktree**, so waves
|
||||
pipeline against it: the next wave runs while the PR absorbs review fixes.
|
||||
|
||||
Copilot review must be **re-requested after every fix push** (GraphQL
|
||||
`requestReviews`); it does not re-review on its own. Across three PRs it found
|
||||
five genuine bugs and zero false positives, so its findings are worth the loop.
|
||||
Merge only once it passes.
|
||||
Copilot review must be **re-requested after every fix push**; it does not
|
||||
re-review on its own. The mutation takes a **`botIds`** field — `userIds` fails
|
||||
with *"Could not resolve to User node"*:
|
||||
|
||||
```bash
|
||||
gh api graphql -f query='mutation($pr:ID!,$ids:[ID!]!){requestReviews(input:{pullRequestId:$pr,botIds:$ids,union:true}){clientMutationId}}' \
|
||||
-f pr="$(gh pr view <n> --json id -q .id)" -f ids=BOT_kgDOCnlnWA
|
||||
```
|
||||
|
||||
REST also works, with the login spelled `copilot-pull-request-reviewer[bot]` —
|
||||
without the `[bot]` suffix it 422s as "not a collaborator".
|
||||
|
||||
Two environment notes. **`gh` is not on `PATH` here** — the name is
|
||||
shell-aliased to `git-hub`, a different tool — so use
|
||||
`nix shell nixpkgs#gh --command gh …`. And **a Copilot review takes about six
|
||||
minutes**; tool calls return fast, which makes elapsed time easy to misjudge, so
|
||||
check `date -u` against the GitHub timeline before concluding a review is stuck.
|
||||
(One agent closed and reopened a PR to "unstick" a review that was proceeding
|
||||
normally.)
|
||||
|
||||
Across four PRs Copilot has found genuine bugs and no false positives, so its
|
||||
findings are worth the loop. **But judge each one against the repo's doctrine
|
||||
rather than applying it reflexively**, and when you decline, reply on the thread
|
||||
with the reason. The distinction that has mattered: a finding can be *correct*
|
||||
and still be wrong to fix in that PR. On #12, a non-ASCII `truncate` panic was
|
||||
applied (byte-identical on ASCII, so it cost no evidence) while a hint-line
|
||||
padding bug in the same file was declined — fixing it would have rewritten the
|
||||
exact-frame characterization tests that were the PR's only evidence the
|
||||
migration changed nothing. Two right findings, different costs. File the
|
||||
declined one.
|
||||
|
||||
Merge only once Copilot passes. Prefer a **merge commit** — `AGENTS.md` says
|
||||
merges over rebases, and a wave's commits are individually meaningful.
|
||||
|
||||
### Never hand-edit `.beads/issues.jsonl`
|
||||
|
||||
@@ -150,6 +179,23 @@ bd manipulates that file and auto-exports to it. Editing it — or even
|
||||
and desynchronises `export-state.json`. Use `bd` commands, let auto-export run,
|
||||
and commit whatever it leaves.
|
||||
|
||||
### Cite a ticket ID you have read back
|
||||
|
||||
`bd create` assigns the ID; it is not derivable from the title. An orchestrator
|
||||
that files with output suppressed and then writes the ticket into a gotcha or an
|
||||
ADR **will invent one** — six invented IDs survived into `context/` in a single
|
||||
session before an agent tried one and found nothing. Read the ID back after
|
||||
filing, and before pushing docs run the audit:
|
||||
|
||||
```bash
|
||||
for id in $(grep -ohE 'improvise-[a-z0-9]{3,4}\b' context/repo-map.md context/adr/*.md \
|
||||
| sort -u | grep -v 'improvise-core\|improvise-wasm'); do
|
||||
bd show "$id" >/dev/null 2>&1 || echo "MISSING: $id"
|
||||
done
|
||||
```
|
||||
|
||||
A dead ID is worse than no ID: it reads as a promise that the follow-up exists.
|
||||
|
||||
### Before filing a ticket, search
|
||||
|
||||
Agent-filed issues duplicate work that is already open, sometimes already
|
||||
|
||||
Reference in New Issue
Block a user