Skip to content

fix(plugin): require VIBE check and user approval before every propose#488

Merged
peteski22 merged 2 commits into
mainfrom
fix/cq-skill-propose-approval-gate
Jul 8, 2026
Merged

fix(plugin): require VIBE check and user approval before every propose#488
peteski22 merged 2 commits into
mainfrom
fix/cq-skill-propose-approval-gate

Conversation

@peteski22

@peteski22 peteski22 commented Jul 7, 2026

Copy link
Copy Markdown
Collaborator

Why

An agent following the skill faithfully could call propose without ever showing the user a draft. The direct-propose branch of "Applying VIBE√" only had instructions for hard findings and soft concerns, so a clean check fell through to an ungated call. Core Protocol step 3, Examples 2 and 4, and the post-error flow all said "call propose now" with no mention of the check or approval.

What

  • State present-and-wait-for-approval as a precondition of every direct propose call, and add the missing clean-check branch alongside hard findings and soft concerns.
  • Defuse the urgency/gate tension: "immediately" means draft and present the moment the insight stabilizes rather than batching to end-of-session; it does not mean skip approval.
  • Wire the draft → VIBE√ → present → approve → propose sequence into Core Protocol steps 3 and 4, the rationalization check, Examples 2 and 4, and Post-Error Behaviour.
  • Add headless rules: with no user available, VIBE√ is the only gate — hard findings block the propose outright, soft concerns must be acknowledged in the candidate's own text, and uncertain candidates are held for review at the next interactive session, since a configured remote publishes proposes to the shared store immediately.

SDK prompt copies synced via make sync-prompts; make check-prompts-sync passes.

Summary by CodeRabbit

  • Bug Fixes
    • Tightened the cq knowledge-sharing flow so candidates are drafted and presented immediately once stable, then cleared by the VIBE√ safety gate, with submission only after user approval.
    • Strengthened unattended/headless handling: hard findings now block proposing, and soft concerns must be acknowledged to be surfaced for later review.
    • Updated post-error routing and examples to follow the same draft → VIBE√ → present → approval pattern.
  • Documentation
    • Updated the cq skill protocol text in shared prompt materials.
  • Tests
    • Adjusted prompt text expectations to match the new “draft and present” wording.

The skill's propose path had gaps that let an agent call propose
without presenting a draft to the user: the direct-propose branch of
'Applying VIBE√' only covered hard findings and soft concerns, so a
clean check fell through to an ungated call, and Core Protocol step 3,
both worked examples, and the post-error flow all said 'call propose
now' with no pointer to the check or the approval gate.

Restate the gate as a precondition of every direct propose call, add
the missing clean-check branch, clarify that 'immediately' means do
not batch to end-of-session rather than skip approval, and wire the
draft/check/present/approve sequence into step 3, the step 4 safety
net, the rationalization check, both examples, and post-error
behavior.

Add headless rules: with no user available to approve, the VIBE check
is the only gate. Hard findings block the propose outright, soft
concerns must be acknowledged in the candidate text, and uncertain
candidates are held for later review, because a configured remote
publishes proposes to the shared store immediately.

SDK prompt copies synced via 'make sync-prompts'.
@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 388ac014-399b-4627-9361-53a70c5c1270

📥 Commits

Reviewing files that changed from the base of the PR and between 6daeb34 and 90c282a.

📒 Files selected for processing (1)
  • sdk/python/tests/test_prompts.py

Walkthrough

This PR updates the cq SKILL.md prompt text in three locations to require drafting and presenting candidates before propose, tighten VIBE√ handling, adjust headless-run rules, update post-error behaviour, and align example text and one prompt test with the new wording.

Changes

Propose gate protocol update across SKILL.md variants

Layer / File(s) Summary
Core Protocol draft-present-approve requirement
plugins/cq/skills/cq/SKILL.md
Step 3/4 rewritten to require drafting and presenting a candidate immediately, running VIBE√, and calling propose only after user approval; step 4's safety net aligned to the same gate.
Rationalization check wording
plugins/cq/skills/cq/SKILL.md
“Propose now” language replaced with “draft and present now” instructions covering deferral/batching via /cq:reflect.
VIBE√ tiering and classification
plugins/cq/skills/cq/SKILL.md
Adds/clarifies user ownership and no-silent-drop behaviour for both direct propose and /cq:reflect review paths.
Applying VIBE√ and headless-run rules
plugins/cq/skills/cq/SKILL.md
Direct propose calls now require presentation + approval as a precondition; headless runs block hard findings, require acknowledgement of soft concerns, and clarify remote-store publish timing.
Post-error behaviour and examples
plugins/cq/skills/cq/SKILL.md
Post-error “no relevant knowledge” handling and Examples 2/4 now route through draft→VIBE√→present→approval rather than calling propose directly.
SDK Go SKILL.md propose gate updates
sdk/go/prompts/SKILL.md
Applies the same Core Protocol, rationalization check, VIBE√ tiering, headless-run rules, post-error behaviour, and examples changes to the Go prompt copy.
SDK Python SKILL.md propose gate updates and test
sdk/python/src/cq/prompts/SKILL.md, sdk/python/tests/test_prompts.py
Applies the same prompt updates to the Python copy and updates the core-protocol string assertion to match the new wording.

Suggested labels: skill

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: every direct propose now requires a VIBE check and user approval.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/cq-skill-propose-approval-gate

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@peteski22 peteski22 requested a review from dni138 July 7, 2026 10:44
@peteski22 peteski22 added plugin Claude Code plugin packaging sdk sdk-go For issues or PRs related to the Go SDK sdk-python For issues or PRs related to the Python SDK labels Jul 7, 2026
The propose-gate change renamed step 3 from 'Propose IMMEDIATELY...' to
'Draft and present IMMEDIATELY...'; update the prompt structure
assertion to the new canonical heading.
@dni138

dni138 commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Lgtm! I think this addresses a bigger quality point across some of our skills/prompts. I'll go through them over the next couple of weeks and see if we can improve.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

plugin Claude Code plugin packaging sdk sdk-go For issues or PRs related to the Go SDK sdk-python For issues or PRs related to the Python SDK

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants