Repository navigation
fix: the review findings on v0.11.1..HEAD (guard, review state, backlog, docs) - #51
Merged
Merged
Conversation
…mal pull request A review of the seven skills, references/review.md and the three reviewer agents fixed what was wrong and cut what restated a reference. An independent audit of the cuts then restored every sentence that carried a rule, a definition or an example an agent needs, and reverted the trims that had changed a rule. Fixed: `/.sdd/` paths pointed at the filesystem root; a --since-last review handed reviewers the whole branch's hunks; --panel and a pass with nothing reported left the pass note behind; the review ran the plugin's gate instead of the vendored one; /sdd-triage --backlog did nothing with forge: none; sdd-specify told agents to write status values the map owns; sdd-scaffold skipped wiring the gate when a spec-check target already existed; the router routed to agents it cannot dispatch. Changed: /sdd-deliver opens a pull request ready for review, a draft only when the maintainer asks; the close-out runs when nothing blocks but a draft; the panel prompts print before the maintainer's review. The definitions shrink from 11972 to 10685 words. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the maintainer guard refuses a path outside the repository (an absolute one under the root is made relative), an --expect not found exactly once on the line, and a PYTHONPATH or NODE_PATH that reaches the file in the checkout, all before the unchanged run. It reads and writes the file as bytes, cleans what a run leaves behind, kills a run past --timeout (600 s) and counts it as a failure, and shares its lock with record and --cleanup, which also prunes a folder deleted by hand. pull reads a trailing "· outside" and records a thread with no By: line as the maintainer's review; status steers to --since-last only after that review and counts the pass budget from it, and points a draft with nothing else open at the close-out. scope --since-last diffs from a conflicted merge's tree and says when git cannot write one; scope --start refuses with pass: running (exit 2) and keeps its note as JSON. harvest runs without a forge to name the lines to re-check, and its re-check reads merge commits and renames. add folds one defect graded twice, keeping the higher severity; a "- [ ] suggestion" line reads as a suggestion; flip --suggestions --deferred takes the outside lines; carry re-sorts the whole Unsorted section; record keeps its line when the cleanup fails. Each fix has a test that fails without it, and the coverage gaps the review found are pinned. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…view fixes sdd-review --panel runs step 2, which decides the lane it reads. The close-out runs when nothing blocks, a draft aside, and drops the lines left in one batch; sdd-triage --backlog runs harvest on every forge, so the lines a branch settled are re-checked with forge: none too, and step 6 says how the maintainer's review is recorded. sdd-spec-conformance-reviewer grades a MUST with no test untested and writes suggestion when unsure only about what is not code behaviour. The review request asks a reviewer on the pull request for an outside defect in the review body, and ai-workflow.md § Review states code first. Methodology §9 holds the close-out after merge, and its register the outside marker. The session-start hook creates .sdd/ for the skills' redirects and names the plugin root, which the sdd-pr permission rule in install.md needs. The remaining draft and suggestions-only wording, the status sample in examples.md and the CHANGELOG are corrected. Word budgets grow for sdd-review (+6), review.md (+121), the conformance reviewer (+15) and ai-workflow.md (+48). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 tasks done
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
Fixes what a whole-range review of
v0.11.1..HEADfound:The branch is stacked on #50 and targets
main. Until #50 merges, the diff here also shows #50's commit; merging #50 first leaves only the two commits below.Critical.
sdd-pr guardbuilt the target withos.path.join(tree, path). An absolute path, or a../one, therefore edited the user's checkout instead of the scratch worktree. The restore then failed and left the guard removed. Now:guard.--expectmust appear exactly once on the line, and that is checked before the unchanged run. An ambiguous--expectused to remove the wrong guard.--timeout(600 s) is killed and counts as a failure.PYTHONPATHorNODE_PATHentry in the checkout would load the unchanged file.recordand--cleanupwait on guard's lock, and--cleanupprunes a worktree whose folder was deleted by hand.Review state.
pullrecords a thread with noBy:line as the maintainer's review, amaintainerline at HEAD. It also reads a trailing· outside, which the panel prompt asks for.statussteers to--since-lastonly after the maintainer's review, and counts the pass budget from it. Before, the first triage could spend the one re-review before the maintainer had looked./sdd-deliver --close-outinstead of "mark the pull request ready", which skipped the close-out.Scope.
--since-lastafter a merge of the base that had conflicts uses the treemerge-treestill writes (exit 1). On git older than 2.38 it now says that the base's changes are in the range, instead of including them silently.scope --startrefuses withpass: running(exit 2), and its note is JSON, so an agent name containing a space no longer breaks it.Backlog.
harvestruns withforge: noneand only names the lines to re-check. Before, nothing deleted the lines a branch settled there, since the close-out no longer deletes them.--first-parent -m) and renames (--name-status).carryre-sorts the whole Unsorted section, so a defect carried later still leads.Findings file.
addfolds one defect graded twice into one line: the higher severity, andoutsideonly when both reports say so.- [ ] suggestionreads as a suggestion. Before, it was posted as an inline thread, a regression from v0.11.1.flip --suggestions --deferredtakes theoutsidelines too.recordkeeps its line when the cleanup fails.Instructions.
/sdd-review --panelruns step 2, which decides the lane it reads.untested(critical), and falls back to suggestion when unsure only about what isn't code behaviour.outsidedefect in the review body; GitHub can't anchor an inline comment outside the diff.ai-workflow.md§ Review states code first.outside..sdd/for the skills' output redirects (git ignores it while empty) and names the plugin root, which the newsdd-prpermission rule ininstall.mdneeds.Declined:
pinned. A language-agnostic tool can't tell a compile error from a failing test; the output says so, and the reviewer is told to use--replaceso the code still builds.Next. The tool can't tell it from the close-out's own commit.outsideline. It counts lines; the summary counts the open ones.Docs
review.md(§ The findings file, § The forge mirror, § The backlog, § Passes, § The tool) andsdd-methodology.md(§9, the rules table).sdd-review: steps 5 and 6;sdd-deliver: step 10;sdd-triage: step 6 and--backlog.sdd-spec-conformance-reviewer.ai-workflow.md.session-start.sh.install.md,examples.md(thestatussample now matches the tool's real output),quick-start.md,testing.md, README, AGENTS.md and CHANGELOG.Word budgets grow:
sdd-reviewreview.mdai-workflow.mdVerification
./scripts/validate.sh: OK (word budgets, forge-neutral text, versions); hooks-test OK, including two new checks (the plugin root,.sdd/).python3 -m unittest discover -s tools/tests: 540 tests OK (was 512).python3 tools/sdd-check.py selftest: OK, 26 cases.claude plugin validate .: passed.../../etc/hostsis refused (exit 2);--since-lastlists the branch's fix and the conflict resolution and leaves out the base's new file.Notes for review
Look hardest at:
cmd_pullandcmd_status;diff_start's handling of exit 1.A decision for you. Methodology §13's merge gate asks for a guard-removal test on every binding sentence the change touches. The conformance reviewer proves only MUST and MUST NOT. Either extend
guardto SHOULD and SHOULD NOT (more test runs per pass), or narrow §13's wording. Not changed here.Known gap: the
remove_scratchlock is not pinned by a test.Checklist
hooks/session-start.shsynced; no component added or renamed🤖 Generated with Claude Code