Extract Feedback Rejection Flow into a lazy spacedock-owned skill#297
Merged
clkao merged 2 commits intoJun 4, 2026
Merged
Conversation
Move the 7-step feedback-rejection procedure body verbatim out of first-officer-shared-core.md into skills/feedback-rejection-flow/SKILL.md (name: feedback-rejection-flow, user-invocable: false). The rejection DETECTION stays always-on: the two ## Completion and Gates bullets now invoke Skill(skill="spacedock:feedback-rejection-flow") instead of re-stating the procedure. The ### Feedback Cycles write-scope rules, the reuse conditions, and the budget probe stay always-on (the procedure references them by name). Add skills/integration/feedback_rejection_flow_test.go (AC-1 a-d + AC-2: present-in-skill, absent-from-core, Skill() invocation + structural no-@-token ban, always-on machinery retained, faithfulness clauses, the Claude bare-mode adapter seam, and the hardened name==seam / user-invocable:false oracles). Add feedback-rejection-flow to userSkills. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…Cycle 1)
The @feedback-rejection-flow-include absence assertion in
TestFOCoreInvokesFeedbackRejectionSkill was region-scoped to
## Completion and Gates, so a stale include re-introduced in any other
core section was invisible. Replace the blanket region-scoped @\S
(feedbackAtToken) with a name-targeted whole-file regex
@(?:\.{1,2}/)*feedback-rejection-flow\b (feedbackAtInclude), scanned over
the whole first-officer-shared-core.md. The positive Skill() check stays
region-scoped to the detection point. Name-targeting (not bare @\S
whole-file) keeps a legitimate unrelated @references include from
false-firing.
Tests only — skill body and first-officer-shared-core.md untouched.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
clkao
added a commit
that referenced
this pull request
Jun 4, 2026
clkao
added a commit
that referenced
this pull request
Jun 4, 2026
clkao
added a commit
that referenced
this pull request
Jun 4, 2026
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.
The feedback-rejection procedure loaded on every FO boot but fires only when a gate rejects; this lifts it into a lazy skill.
What changed
skills/feedback-rejection-flow/SKILL.md, byte-identical.## Completion and Gatesdetection bullets to invokeSkill(skill="spacedock:feedback-rejection-flow"); keep### Feedback Cycles, reuse-conditions, and the bare-mode seam always-on.feedback_rejection_flow_test.gooracles: present-in-skill, whole-file absence, Skill()-seam, name-matches-seam, user-invocable, faithfulness clauses, bare-mode-seam-consistent.@-include ban to whole-file, name-targeted.Evidence
go test ./...: 14/14 packages passed; a live reject→route→re-review drive routed correctly through the lazy skill.next(sha1f24e1eb); the detached adversarial audit's one Material finding (region-scoped@-ban) is closed.a9