
Cotton
Translation workflow
Turning generated translations into reviewable results.
A translation workflow for game dialogue.
A race review found, stalled jobs returned by reason
One case whose policy and commit name Claude for implementation and Codex for review, and one that made stalled jobs diagnosable.
May 19, 2026
A change that halts on quota exhaustion was fixed in the same PR, including the race review found
PersonPerson
ActionStop spending on quota exhaustion · no automatic fallback
- handoffImplementation constraint→ Implement checkpoint · halt · manual resume (Claude)
Coding agentClaude
ActionImplement checkpoint · halt · manual resume
- handoffSame-PR review→ Finding: race · duplicate state transitions (Codex)
Review · verificationCodex
Observation · findingFinding: race · duplicate state transitions
- sent backRace · idempotency→ In the same PR: row lock · unique score key · atomic transition (Same PR)
ArtifactsSame PR
ArtifactIn the same PR: row lock · unique score key · atomic transition
- handoff→ Local fixture · DB integration check records (Same PR)
ArtifactsSame PR
ArtifactLocal fixture · DB integration check records
- not a recorded executionScope checked→ No new CI or production deployment results collected (Same PR)
ArtifactsSame PR
Rule · unverifiedNo new CI or production deployment results collected
- Context
- The condition a person set was to stop spending when quota runs out, with no automatic fallback. Claude implemented checkpoint, halt and manual resume, and a Codex review run through the project MCP found a race and duplication in the state transitions.
- Outcome
- Entry and resume transitions run inside a lock, judge scores carry a unique key against duplicates, and the transaction boundary was set. This does not mean every race was removed.
- Limit
- The commit states 140 checks and the later integration CHANGELOG states 160, so they are not merged into one run count. Under the policy, Codex review is an optional local step, so this does not mean every past PR went through it.
Sources and remaining limits
- The policy records the order: Claude implements, Codex reviews locally through the project MCP, the review is attached to the PR, and disagreements are investigated together with Claude’s review agent. Automatic Codex review in CI had been deferred.
- Development checks use fixtures and mocks, and real model calls need their own scope. Review findings are folded into the same PR and squash-merged feature → main.
May 26, 2026
Stalled jobs were made diagnosable and returned by reason
Under developmentTranslation worker · queue
Observation · findingJobs left in draft · attempts exhausted
- handoffObserved values→ Match failedReason · exit codes · draft state (Developer)
PersonDeveloper
ActionMatch failedReason · exit codes · draft state
- handoff→ Cause: inherited NODE_OPTIONS collide in subprocesses (Developer)
PersonDeveloper
Observation · findingCause: inherited NODE_OPTIONS collide in subprocesses
- sent backInherited option collision→ Strip NODE_OPTIONS · per-process concurrency cap (Code changes)
Work sessionCode changes
ActionStrip NODE_OPTIONS · per-process concurrency cap
- handoff→ Queue state: waiting · active · failed · stale (Code changes)
Work sessionCode changes
ActionQueue state: waiting · active · failed · stale
- handoff→ Stale sweep: missing from queue vs attempts used, branched on whether a result exists (Code changes)
Work sessionCode changes
ActionStale sweep: missing from queue vs attempts used, branched on whether a result exists
- handoffOne cycle→ Dev sweep: 200 candidates → 106 moved · 2 re-queued · 0 errors (Artifacts)
ArtifactsArtifacts
ArtifactDev sweep: 200 candidates → 106 moved · 2 re-queued · 0 errors
- not a recorded executionLimit of interpretation→ The 106 are not successful translations (Artifacts)
ArtifactsArtifacts
Rule · unverifiedThe 106 are not successful translations
- Context
- Matching BullMQ’s failedReason, subprocess exit codes and jobs left in draft found that inherited NODE_OPTIONS collided in subprocesses. After that, the same situation was made visible as queue state.
- Outcome
- Stalled jobs are split into those missing from the queue and those that used up their attempts; the latter move, with a reason, to needs_review or needs_credential depending on whether a result exists. Human review stays in place.
- Limit
- The concurrency cap is per process. Original run logs were not available in the reviewed material; latency figures are omitted because the requested models and effort were not recorded. Build and release code alone is not evidence of public deployment.
Sources and remaining limits
- The CHANGELOG records a proposal for parallel adapter branches, but it is not turned into a record of actual parallel execution.
- The rest of the 200 is not broken down in this record.