fix: harden forge-coordination skill against DCP compression - #56
Open
jflowers wants to merge 2 commits into
Open
fix: harden forge-coordination skill against DCP compression#56jflowers wants to merge 2 commits into
jflowers wants to merge 2 commits into
Conversation
sonupreetam
requested changes
Aug 6, 2026
sonupreetam
left a comment
Contributor
There was a problem hiding this comment.
Review Council
Ran the review council (6 Divisor agents). The role-scoped restructuring is a good pattern but needs structural tests, drift detection, and a spec accuracy fix.
Cross-PR note: comms_release_all() has no caller identity check at the tool level — the "Workers MUST NOT call" constraint is prompt-only. Please file a tracked follow-up issue for caller identity validation.
Restructure the forge-coordination skill to survive context compression by promoting safety-critical constraints to high-salience positions: - Replace flat "File Reservation Rules" section with role-scoped "Coordinator-Only Operations" and "Worker-Only Operations" sections - Inline conflict resolution at the "Reserve files" step instead of separate section - Make exclusive=true the documented default for comms_reserve - Place MUST/MUST NOT rules at section top, before protocol steps - Add explicit "Workers MUST NOT call comms_release_all()" constraint Both skill copies (agentkit embed + opencode runtime) updated identically. Includes OpenSpec artifacts (proposal, design, spec, tasks). Closes unbound-force#48 Assisted-by: claude-opus Generated with AI assistance (claude-opus)
jflowers
force-pushed
the
opsx/harden-forge-skill-compression
branch
from
August 7, 2026 18:48
89ff8fe to
1dd7943
Compare
- Add TestForgeCoordinationSkill_StructuralHardening test verifying: role-scoped section headers, MUST rules before protocol steps, exclusive=true in comms_reserve, removed sections absent, and both file copies byte-identical - Update design.md to acknowledge Worker Protocol 7→8 step change as intentional behavioral modification (new Decision unbound-force#5) - Amend Non-Goals to clarify structural tests are in scope - Filed unbound-force#64 for comms_release_all caller identity validation
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
Restructures the
forge-coordinationskill to survive DCP context compression. Critical access-control constraints were expressed as parenthetical asides and buried bullet items — exactly the constructs that context compression drops first.Addresses four specific fragilities identified in #48:
(coordinator only)parenthetical oncomms_release_all()— promoted to## Coordinator-Only Operationssection headerexclusive=trueas optional bullet — made the documented default incomms_reservecall signatureCloses #48
How to Test
Verify the following structural properties in the output:
## Coordinator-Only Operationssection exists with MUST NOT rules before protocol steps## Worker-Only Operationssection exists with MUST/MUST NOT rules before protocol stepscomms_release_all()appears only under Coordinator-Only OperationsWorkers MUST NOT call comms_release_all()is explicit in Worker-Only Operationscomms_reserve(paths=[...], exclusive=true, reason="...")is the documented callHow to Demo
Review the restructured skill document side-by-side with the original (via
git diff). The key observation is that safety constraints have moved from low-salience positions (parentheticals, buried bullets, separate sections) to high-salience positions (section headers, first-position MUST rules, inline at point of use).Key Files Changed
Skill files (implementation):
.opencode/skills/forge-coordination/SKILL.md— restructured with role-scoped sectionsinternal/agentkit/content/skills/forge-coordination/SKILL.md— identical copy (embedded in binary)OpenSpec artifacts (planning):
openspec/changes/harden-forge-skill-compression/proposal.md— motivation, impact, constitution alignmentopenspec/changes/harden-forge-skill-compression/design.md— 5 design decisions with rationaleopenspec/changes/harden-forge-skill-compression/specs/forge-coordination-hardening.md— delta spec with GIVEN/WHEN/THEN scenariosopenspec/changes/harden-forge-skill-compression/tasks.md— implementation checklist (all complete)Known Issues
The following findings from the review council were acknowledged but not resolved (out of scope for this change):
forge-globalskill uses weaker phrasing forcomms_release_allaccess control/handoffcommand callscomms_release_all()without role guardcomms_releasestepThis PR was generated by /uf.finale (AI-assisted).