Conversation
Step 4 said "Apply the requested edit" while step 5 said "Write only
after the user confirms" and the guardrails said "Confirm every edit
with the user before writing", with nothing stating which governs.
"Apply" reads as a write verb in this document: step 5 is itself titled
"Confirm and apply", and step 4's closing bullet ("say so and make no
edits") only parses if step 4 is the editing stage. So
`/opsx:update "the design now uses X"` either wrote immediately or
stopped and showed the revision first, depending on which passage the
agent weighed. Step 5 is the workflow's only write path, so its
confirmation guarantee was unenforceable whenever step 4 governed.
Step 4 now drafts and step 5 still owns the write. Both delivery
surfaces and the committed skill carry the same wording, and the
contract is pinned by tests on each surface.
Fixes Fission-AI#1836
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (5)
Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review. 📝 WalkthroughWalkthroughThe update-change workflow now drafts requested edits during step 4. Step 5 remains the write gate after user confirmation. Templates, skill instructions, parity hashes, regression tests, and the patch changeset reflect this contract. ChangesUpdate-change workflow
Priority: ➖ Normal Estimated code review effort: 2 (Simple) | ~10 minutes Severity of issue fixed: Medium Merge Risk: ⚪ Minimal · up to Step 4 now drafts edits and step 5 remains the confirmed write path across the delivered workflow surfaces. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 3 files. (2 skipped: 2 unsupported.)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Duplicate of #1840 — closing. I checked #1836's state (open, unassigned) but not its cross-references, so I missed that you'd already opened #1840 eight hours earlier. Entirely my error. #1840 is also the better patch. Nothing here to salvage. Sorry for the noise. |
Fixes #1836.
What was wrong
update-changestated its write gate twice and then contradicted it a step earlier, with nothing saying which governs.Step 5, "Confirm and apply, one artifact at a time":
Guardrails:
Step 4, "Read and reconcile":
"Apply" reads as a write verb in this document — step 5 is itself titled "Confirm and apply", and step 4's closing bullet ("If the change is already coherent, say so and make no edits") only parses if step 4 is the editing stage. So
/opsx:update "the design now uses X"either wrote immediately or stopped and showed the revision first, depending on which passage the agent weighed. Step 5 is the workflow's only write path, so its confirmation guarantee was unenforceable whenever step 4 governed.Same shape as #1828: a guarantee stated in one part of the body, contradicted by an instruction earlier in the same body.
The fix
Apply→Draftin step 4, on both delivery surfaces (update-change.ts:61skill,:152command) and the committed skill. Step 5 keeps the write. One word; the fix @clay-good named in the issue.I looked at also rewording step 4's
Revise only files that already existfor the same reason and left it alone: it constrains which files may ever be revised rather than telling the agent to revise now, and it is the scope rule step 5 applies. Widening the diff there would change guidance the issue did not report.Verification
Draft the requested edit.and notApply the requested edit, and the draft precedesWrite only after the user confirms.Draft→Applyinsrc/fails both new tests (2 failed | 7 passed) and passes again with the fix. The contract was unpinned before this PR.pnpm lintclean. Full suite: 4563 passed,test/core/completion-tip.test.ts2 failed — pre-existing, reproduced on cleanupstream/mainwith my changes stashed. Unrelated to this change.pnpm regen:parity-hashes;skills/regenerated viapnpm generate:skills.One correction to the issue
test/core/templates/update-change.test.tsdoes exist onmain(121 lines). The second half of the claim holds though — it assertsWrite only after the user confirmsbut never that step 4 is non-writing, so the contradiction passed its checks. The new cases are appended to that file rather than to a new one.Guidance-only; no CLI behavior changes.
Summary by CodeRabbit
Bug Fixes
Tests