Repository navigation
feat: faster review start, parallel passes, one PR comment per pass, fewer preventable findings - #54
Merged
Merged
Conversation
…run side by side `sdd-pr start --agent <a> [--pr N] [--since-last] [--lane] [--base]` pulls the pull request's threads, checks this checkout holds its head, notes the pass, settles the lane (the flag, the PR body's Lane: line, else a hint), writes each reviewer's hunks, the drift gate's new lines, the settled lines and one shared brief under .sdd/review/<head>/, and prints the dispatch plan. It never runs the gate; the brief names the gate log when one exists at HEAD. A pass note no longer stops another agent: scope --start and start report the passes running beside it, and record clears only its own agent's note (the scratch worktree goes when no pass is left). With --pr, a checkout whose local branch has another name works on the pull request's findings file, so review worktrees stop leaving stray files; a refusal while resolving the pull request releases the clone's lock. The PR record carries its body. `add --help` prints the line grammar, `--version` the plugin root, and every run warns when a newer sdd-pr sits beside this one in a plugin cache. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A pass is one comment: who reviewed (repeated reviewers counted), the blocking verdict, how many lines that do not block are new in the pass and how many are open on the branch, then those lines in one fold, defects first. A review is posted only for what sits on a line: the inline threads, and the lines that cannot be anchored, which now keep their evidence and fix. Lines posted between passes get a comment of their own; an edit keeps a pass comment's header. `unsummarised` finds a pass in a comment, or in a review for passes posted before; `pull` skips the plugin's own pass comments. Comments and inline threads show what was written: outside code spans, `<`, `>` and `&` are entities and `@` mentions nobody; a line's anchor is code. Both read back exactly, so harvest and pull get the original text; comments written by 0.12 still read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A subagent reads the brief and its patch from wherever it runs, so the plan's paths are absolute. The drift line is the gate's own verdict line, not its list of families; the doc reviewer's mode follows the lane when it is still undecided; the range is shown short. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…mmand, not a brief sdd-review runs `sdd-pr start` before reading anything, dispatches each plan line with "Read <brief>; your hunks: <patch>", never runs the gate, and lets passes run side by side. `--panel` and the end of sdd-deliver print `/sdd-review --pr N` per panel host; only a name in the new `agents.review_panel.external` gets the request block. Every skill takes the plugin root from its own path and never searches the disk for it. Delivery and triage prevent what reviewers kept finding: documents are reconciled on both profiles, the brief lists the sentences that describe changed behaviour, an in-session spec edit keeps sdd-specify's form, a pinning test is never deleted or weakened, code that does not meet a sentence is fixed rather than the sentence narrowed, and the close-out ticks the delivered acceptance criteria and writes the changelog line. A per-task review's findings and each triage fix round go to a new worker, not a resumed one. The reviewers ask for every file in one turn and do not rerun the suite; the doc reviewer files a form suggestion only where it changes how a sentence binds or reads, and neither files what the close-out writes. Questions to the maintainer come in plain words. references/review.md, the methodology's close-out, the schema and templates, README, AGENTS.md, docs and the CHANGELOG follow; upgrading.md covers 0.12.x to 0.13.0. Word budgets grow: sdd-deliver +166, sdd-triage +83, the four other skills +18 each for the root line (sdd-review shrinks 939 to 883), review.md +214, sdd-doc-reviewer +58, the conformance reviewer +40, brief.md +37, ai-workflow.md +17. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A post that published inline threads while the pass's comment had nothing new printed its thread count and then "post: nothing to post". The sentence now prints only when neither the review nor the comment sent anything, and the review's own "nothing new to post" is gone, so it prints once. docs/testing.md still described the 0.12 mirror (the pass summary as a review body, a second `scope --start` stopped by `pass: running`); it now checks one comment per pass, a review only for the lines that block, and passes side by side. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR acts on the 2026-10-13 analysis of every session since the 0.12 release. That analysis covered:
It implements the agreed plan, A to I. F is reshaped as the maintainer asked, G4 has no numeric cap, and D and H go in as proposed.
A.
sdd-pr startprepares a review pass in one call.Lane:line, else a hint);.sdd/review/<head>/each reviewer's hunks, the drift gate's new lines, the settled lines and one shared brief;.sdd/gate-<head>.logwhen one exists.B and C. The review no longer runs the gate, and needs no disk search.
add --helpprints the line grammar. Cursor had readsdd-pr.py's source 73 times to learn it.--versionnames the root, and every run names a newersdd-prinstalled beside this one. Two Cursor sessions had run stale 0.11.0 tools.D. Passes run side by side.
pass: runningno longer stops a pass: each names the others running beside it, andrecordclears only its own note.--pr, a review checkout whose local branch has another name works on the pull request's findings file. 0.12 left 10 straypr-N-review*.mdfiles this way.E. A command instead of a brief.
--paneland the end of/sdd-deliverprint<name>: /sdd-review --pr Nfor each panel host. Only a name in the newagents.review_panel.externalgets the paste block. 7 of 14 deliveries had ended with about 1k-character blocks for hosts that already load the plugin.F. One PR comment per pass (as you specified: not a sticky comment, not the PR body).
<,>,&and@are defused, the anchor is code, and everything reads back exactly. Comments from 0.12 still read.G. Prevent the preventable.
/sdd-specify's form.H. Cut the real token sink.
sdd-implementerinstead of a resumed one. Resumed implementers were 59% of subagent cost.I. Fixes from the friction log.
Docs
references/review.md:start, passes side by side, the--prkeying.traceability-schema.md: the newreview_panel.externalfield.sdd.yaml,ai-workflow.md,brief.md,task-review.mdanddevelopment-process.md.upgrading.mdgets From 0.12.x to 0.13.0.examples.md,quick-start.mdandtesting.mddescribe the new flow.Word budgets grow, as agreed. The table lists only the files that grew;
sdd-reviewshrinks from 939 to 883.review.mdsdd-deliversdd-triagesdd-doc-reviewerbrief.mdsdd-scaffold,sdd-specify,sdd-trace, routerai-workflow.mdVerification
./scripts/validate.sh: OK, including word budgets and forge-neutral text; hook tests OK.python3 -m unittest discover -s tools/tests: 559 OK (was 545). New tests cover:start: the plan, the files, the lane from the PR body, the drift gate, an empty range, a head missing from this checkout, a missing descriptor;--prkeying;add --helpgrammar and the newer-install warning;python3 tools/sdd-check.py selftest: OK, 26 cases.claude plugin validate .: passed.sdd-pr start:drift.txtand the brief;--prin the session constructor kept the clone's lock, which hung the next command in the same process.Notes for review
Look hardest at:
cmd_startandlane_of;sync_suggestions, now the carrier of a pass's comment, and how it keeps a pass header on edit;md_escapeandmd_unescape, which skip code spans.Not verified here:
Left as is:
Checklist
startis a newsdd-prsubcommand; the tables name it)🤖 Generated with Claude Code