You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Three sync events (#2298, #2360) shipped this class. Manual review and acceptance-criteria unit tests have not been sufficient at fork-sync scale (sync PRs touch 700-2,500 commits).
Architecture decision
Per /suggest + /evaluate analysis on 2026-04-19:
The actual lever is mock/real divergence detection, not "more tests"
The strongest interventions are CI gates / lint rules / declarative attestation, not new test files
Problem
RemoteClaw has experienced a recurring class of fork-sync regression where:
Documented instances:
resolveAgentRuntimeOrThrowunconditional throw → every Slack auto-reply,/agentCLI, cron isolated agent crashesmodelSupportsVisionreturningfalse→ Telegram vision silently disabledskillsHandlersreturning empty map → node-host skills silently brokenmodelsHandlersreturning empty map → TUI listModels failsThree sync events (#2298, #2360) shipped this class. Manual review and acceptance-criteria unit tests have not been sufficient at fork-sync scale (sync PRs touch 700-2,500 commits).
Architecture decision
Per
/suggest+/evaluateanalysis on 2026-04-19:Phase 0 — Foundational
docs(adr): author ADR 0005 — fork-sync hardening architecturePhase 1 — NOW (within 2 weeks of #2408 fix)
: nevercalibration signal (H7) #2435 —ci(fork-sync): AST gate — fail on throwing-stub exports with live callers (Option 1)— 1-2 days, would have caught fix(agents): restore resolveAgentRuntimeOrThrow body — regression stub crashed every agent dispatch #2408ci(fork-sync): generalize check-stub-debt.mjs with 3 new counters (Option 5)— 1-2 daysPhase 2 — within 6 weeks
ci(fork-sync): MODULE_ATTESTATIONS manifest for src/agents/* (Option 6)— 3-5 days, semantic-stub coveragePhase 3 — within 8 weeks
ci(fork-sync): sync-PR composite gate workflow (Option 7)— 0.5 day, depends on ci(fork-sync): extend check-throwing-stub-callers.mjs with: nevercalibration signal (H7) #2435, ci(fork-sync): fork-boundary mock baseline in check-stub-debt.mjs (H8) #2436, ci(fork-sync): MODULE_ATTESTATIONS manifest for src/agents/* (Option 6) #2437Deferred (with revisit triggers in child issues)
test(fork-sync): mock ablation suite (Option 2 — DEFERRED)test(fork-sync): reflective mock factory (Option 3 — DEFERRED)ci(fork-sync): mock-allowlist (Option 4 — DEFERRED)Success criteria
: nevercalibration signal (H7) #2435) would have caught fix(agents): restore resolveAgentRuntimeOrThrow body — regression stub crashed every agent dispatch #2408 at PR time (verified via dry-run on the introducing commitfc2cefeeab)Dependency graph
Deferred items (#2438, #2439, #2440) are tracked under this epic but not on the active path.
References
check-stub-debt.mjs), chore(ci): drive stub debt baseline to zero and remove it #2354 (drives baseline to zero)