Skip to content

feat(brief): lead with how the PR was decided (0.24.0) - #60

Merged
taylorg009 merged 3 commits into
mainfrom
feat/decision-story
Oct 22, 2026
Merged

taylorg009 merged 3 commits into
mainfrom
feat/decision-story

Conversation

@taylorg009

@taylorg009 taylorg009 commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

Why

Reviewers of agent-written PRs want to know why the change looks the way it does. The brief's decisions section rarely said, for two reasons:

  • It saw almost nothing. On a real web-app PR, the agent fixed something in one worktree and committed it from a sibling worktree of the same checkout. Blastline treated the two as rival checkouts, and its decision window kept 3 of 410 transcript lines.
  • It only knew three kinds of decision: tests, reverts and design notes. Questions the agent asked the person and independent reviews never showed.

What changes

  • How this PR was decided leads the brief, as a table of what happened, the decision and the commit as evidence. It replaces the bullet list under the commit table.
  • Asked you: an AskUserQuestion call shows the option picked, by position only (e.g. "the recommended option 1 of 3", or "answered in their own words"). The question and labels are never quoted.
  • Independent review: a reviewer or critic subagent call, with its verdict reduced to fixed words. It comes from the result, a later task notification, or the reviewer's last message in Entire's tasks/ transcript; otherwise "verdict not recorded".
  • Carried work: a sibling checkout or worktree counts only where the change was carried from it as a patch (git diff > <file> there, git apply <file> where the commit was made), and only from after its own last commit. A parallel PR in another worktree never leaks in. Variables can build on earlier ones (NEW="$REPO/x"), and the "left the repo" and "back at the root" checks read them.
  • Probes: a test run counts as a probe when old code is written over the same path before it (git show <ref>:<path> > <path>, a bare git stash, git apply -R), or when the fix is copied back after it, including from a loop's do cp. Saving a copy elsewhere, git stash pop and 2> are ordinary steps.

No transcript text is quoted. Every cell is a fixed label, an outcome, a runner name, one of the change's own paths, or a commit link.

Evidence

The new lead section, rendered from a real replayed checkpoint: a failing-then-passing test and three check-lane reviews, whose verdicts were read from the stored subagent transcripts.

How this PR was decided, rendered

  • The real web-app PR: its fix was made in one worktree and carried to another as a patch. Its decision window now covers that hand-off (7 lines instead of 3), and the brief shows vitest failed → fixed, then it passed. That's the view-mode contract test that made the agent defer a fetch; its commit message confirms it.

  • Replay on 100 checkpointed web-app commits (checkpointFor, each commit's own files): briefs with a decision went from 21 to 22, plus review rows on three more, and every new or changed line was checked by hand against its transcript.

    • Three reviewer verdicts read from stored subagent transcripts (no findings, no findings, findings) match the reviewers' own final lines.
    • One false "failed, then passed" (a red check: old components written in, tests run, fix copied back in a loop) is now skipped.
  • Tests: 446 pass. Each review finding has a case that fails on the previous commit:

    • a sibling worktree's own PR is excluded;
    • real runs after git show … > /tmp, stash pop and 2> still count;
    • "not APPROVED" is not an approval;
    • "critical" and "preview" are not reviews;
    • a multi-select answer gives each position;
    • review rounds that read alike stay separate rows.

    The stored-subagent verdict path is now tested too.

An independent review requested changes (three blocking false-row bugs; privacy held). The second commit fixes all of them.

🤖 Generated with Claude Code

- The decisions section becomes "How this PR was decided": a table of
  what happened, the decision and the commit as evidence, first in the
  brief. Rows are fixed labels, outcomes and the change's own paths; no
  transcript text.
- New kinds: a question the agent asked (which option was picked, by
  position only) and an independent review (reviewer type and a verdict
  in fixed words, from the call's result, a later task notification, or
  the reviewer's last message in Entire's stored subagent transcript).
- A checkout and its worktrees count as one repo, so work carried from
  one worktree to another keeps its decisions; leaves/returns read a
  variable the command assigns.
- A test run against code swapped in before it (git show ref:path >,
  stash, apply -R) or put back after it in a loop is a probe.

Replay on 100 checkpointed commits: briefs with a decision 21 -> 24,
every changed line checked by hand.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

PR brief: 3 agent commits · 8 of 25 test files reach this diff

Run at least these. Selection is a safe superset; it never marks a test safe to skip.

Summary PR #60 at 8db87e3
Changed 11 files: 8 mapped to 32 symbols, 3 ignored by policy
Tests reached 8 of 25 ▮▮▮▮▮▮▯▯▯▯▯▯▯▯▯▯▯▯▯▯ 32% of the suite
Downstream code 6 files, 22 dependents · review effort high
Intent 3 of 3 commits attributed by trailer (claude-code)
Reviewed by no reviewer other than the author (taylorg009) so far · the 14 changed and reached files were last changed by Taylor Gagne (60 commits in 12 files), Taylor (17 commits in 12 files) · Taylor has no prior commit in 2 of the 14 files this change touches or reaches: src/checkpoint-write.ts, src/owners.ts
Symbols 18 changed, 15 added, 6 removed within the diff
Since push e2c78be 1 new commit, 0 changed files, 0 tests reached
Compared against base 1758f00

What each commit did

Commit Intent Files Reaches Ran before push
fceef06 feat(brief): lead with how the PR was decided (0.24.0) claude-code by Co-authored-by 9 files 6 files, 8 tests
e2c78be fix(decisions): no false rows from verdicts, probes or sibl… claude-code by Co-authored-by 9 files 6 files, 8 tests
8db87e3 fix(decisions): stored reviewers' APPROVE and CHANGES REQUE… claude-code by Co-authored-by 4 files 6 files, 8 tests

Claims checked

  • partial: type removed from src/decisions.ts. could not resolve it in the base graph (symbol-ambiguous).
  • partial: the narrative names the changed code. not named by the PR body or any commit message: src/comment.ts (DECISION_LABEL deleted, +4) (understated scope).
  • consistent: committed removed from src/checkpoint.ts. 1 static caller in the base graph, all in files this diff changes: Shell (src/checkpoint.ts:510).
  • consistent: DECISION_LABEL removed from src/comment.ts. no static callers in the base graph; dynamic dispatch, reflection and macros are invisible to it.
  • consistent: decisionsList removed from src/comment.ts. 1 static caller in the base graph, all in files this diff changes: renderBrief (src/comment.ts:838).
  • consistent: result removed from src/decisions.ts. 1 static caller in the base graph, all in files this diff changes: Block (src/decisions.ts:24).
  • consistent: at removed from src/decisions.ts. 1 static caller in the base graph, all in files this diff changes: Decision (src/decisions.ts:17).
  • consistent: PR body names 5 things in code font. every one is a changed symbol, a changed path, or in a changed line.

What each changed file reaches

Read Changed file Change Reaches Tests
1 decisions.ts Block changed, input changed, result removed, +15 6 files 8
with decisions.ts checkpoint.ts checkpointFor changed, leaves changed, repoRoot changed, +12 6 files 7
with checkpoint.ts brief.ts decisionsOf changed 3 files 3
with brief.ts comment.ts DECISION_LABEL removed, decisionsList removed, renderBrief changed, +2 3 files 2
2 brief.test.ts test code, selected directly 1
3 checkpoint.test.ts test code, selected directly 1
4 comment.test.ts test code, selected directly 1
5 decisions.test.ts test code, selected directly 1
3 files under the repo root ignored by policy 0

Paths above are under src/ unless shown in full.

Tests to run (8)

Blast radius by changed file: 22 dependents

blastline 0.24.0. Selection is advisory unless your workflow gates on it. How selection works. Graph 81ab773. change-context budget 45410: omitted 0 impacts, 977 context entries (truncated); symbols are classified within the diff only. Intent: 0 of 3 commits, 3 attributed by trailer.

taylorg009 and others added 2 commits October 21, 2026 18:02
Review of #60:
- A sibling worktree counts only where the change was carried from it
  as a patch (git diff > file there, git apply file here), and only
  from after its own last commit; the folder-name family rule leaked a
  parallel PR's tests into this brief and merged ~/.worktrees repos.
- The swap-in probe fires only when git show writes over the same path,
  on a bare git stash, or git apply -R; saving a copy elsewhere, stash
  pop and 2> no longer drop real runs.
- verdictOf reads a Verdict line, a line opening with a fixed word, or
  a check lane's result line; blocking words win, prose "not APPROVED"
  is nothing; READY TO MERGE and BLOCKED are mapped.
- Reviewer match needs a word (not "critical"/"preview"); multi-select
  answers report each position; alike labels claim none; questions and
  reviews dedupe by tool call; table cells escape "|".
- Tests for each, plus the stored-subagent verdict path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the brief

The spliced notification is written across lines like a real one, so
its verdict word opens a line; "not APPROVED" on a Verdict line is no
verdict. Stored-transcript tests for an approving and a blocking review.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@taylorg009
taylorg009 marked this pull request as ready for review October 22, 2026 01:06
@taylorg009
taylorg009 merged commit 8cf4e60 into main Oct 22, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant