Skip to content

fix(mission-control): namespace the designer-rotation state key — one file was shared by every mission - #686

Merged
sunholo-voight-kampff merged 1 commit into
devfrom
sprint/iter188-designer-rotation-namespace
Aug 13, 2026
Merged

fix(mission-control): namespace the designer-rotation state key — one file was shared by every mission#686
sunholo-voight-kampff merged 1 commit into
devfrom
sprint/iter188-designer-rotation-namespace

Conversation

@sunholo-voight-kampff

Copy link
Copy Markdown
Collaborator

Gate-5 skill fix from V1 iteration 188. One file changed.

The skill prescribed ~/.ailang/state/mission-designer-rotationunnamespaced, so all three missions on the rig read and write one file and a sibling's designer run silently overwrites yours. The Repo Profile's claim that "namespaced state keys (M1) keep two missions on one rig from colliding" is true of the keys M1 covered and false of this one.

Two first-party frictions (the ≥2 bar):

  1. Iteration 187 recorded advancing V1's pointer claude → codex; iteration 188 read claude:claude-fable-5 back, mtime 01:10, while V1 was idle (23:42→01:12) and mission-world was mid-iteration with a fable designer. Consistent with a sibling write; certain either way that 187's recorded advance was lost.
  2. Iteration 188 then had to adjudicate between the state file and the mission log to pick a designer at all.

The failure is silent and self-concealing: a clobbered pointer still holds a valid rotation value, so the only tell is a disagreement between the file and the previous iteration's own record — and the natural reading ("trust the state file") is the wrong one.

Measured: ~/.ailang/state/ already holds mission-world-designer-rotation and mission-motoko-designer-rotation — namespaced files hand-created by careful sibling controllers — that the skill's literal path never reads.

Both call sites now use mission-${MISSION_NAME}-designer-rotation, with a one-line migration and the generalisation that any ~/.ailang/state/ key this skill names as a literal is shared by every mission.

🤖 Generated with Claude Code

… file was shared by every mission

The skill prescribed `~/.ailang/state/mission-designer-rotation`, an UNNAMESPACED path,
so all three missions on the rig read and write one file and a sibling's designer run
silently overwrites yours. The Repo Profile's claim that "namespaced state keys (M1) keep
two missions on one rig from colliding" is true of the keys M1 covered and false of this
one — which is why nobody re-checked it.

Two first-party frictions:

  1. Iteration 187 recorded advancing V1's pointer claude -> codex. Iteration 188 read
     `claude:claude-fable-5` back, mtime 01:10, while V1 was idle (23:42->01:12) and
     mission-world was mid-iteration with a fable designer — consistent with a sibling
     write, and certain either way that 187's recorded advance was lost.
  2. Iteration 188 then had to adjudicate between the state file and the mission log to
     pick a designer at all, a coin-flip no rule covered.

The failure is silent and self-concealing: a clobbered pointer still holds a valid
rotation value, so the only tell is a disagreement between the file and the previous
iteration's own record — and the natural reading ("trust the state file") is the wrong one.

Measured: `~/.ailang/state/` already holds `mission-world-designer-rotation` and
`mission-motoko-designer-rotation`, namespaced files hand-created by careful sibling
controllers, that the skill's literal path never reads.

Both call sites now use `mission-${MISSION_NAME}-designer-rotation`, with a one-line
migration (seed from the unnamespaced file if the namespaced one is absent, then never
write the unnamespaced one again) and a generalisation: any `~/.ailang/state/` key this
skill names as a literal is shared by every mission, so audit the whole path list rather
than one key at a time.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

@sunholo-voight-kampff
sunholo-voight-kampff merged commit 8fdccf0 into dev Aug 13, 2026
21 checks passed
@sunholo-voight-kampff
sunholo-voight-kampff deleted the sprint/iter188-designer-rotation-namespace branch August 13, 2026 00:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant