Conversation
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.
Refs #3
Summary
Folds the four
wontfix-or-folditems from ADR-1's 8-axis review intodocs/adr/agent-lifecycle.md. Docs-only: one file, +81/−10, no code touched.State.Pausednaming / enumRuntimeDrivercontract ADR, semantics fixed heresupersededsentenceStopping hard-loss edge
The diagram had
Stopping --> Stopped : state savedbut no hard-loss twin, whileprinciple 4 claimed a hard loss "jumps straight to
Stopped" from anywhere. AddedStopping --> Stopped : hard loss (OOM / crash / node death), no flush, andprinciple 4 now says a hard loss takes that shortcut from any live state,
including one already in
Stopping— the graceful edge is never taken, theflush is lost, and the recorded cause is
crash/reclaimed, nevernormal(same tightening in the §3
Stoppedcell).§9 lock-in / reversibility
New subsection separating what is cheap from what is expensive to reverse, with
the evidence each claim rests on: the 6-state set (
Debug-published bycrates/oab-mcp, mirrored as a TS union inconsole/src/types.ts+ badge map inconsole/src/render.ts), the single-field dispatch predicate (the silentmis-scheduling failure mode §7 rejected),
Stoppedas terminal at instancegranularity, the four-axis discriminator shape (
RuntimeDriver::project), and theidentity mechanism — which is explicitly flagged as a lock-in on the
specification, since only
IdentityLatchis written down in code and even thatis not yet wired (
crates/studio-cpstill threads a caller-suppliedverified_before).State.PausednamingRecorded as a follow-up of the
RuntimeDrivercontract ADR, with theconstraint that carries forward:
Pausedstays the value of one field whosesingle
Runningcase is the whole dispatch predicate, so turning it into a flagis the expensive move (§7) and even a rename is not free at the published
surface. The issue called the contract ADR "ADR-2"; in this repo ADR-2 is
deployment-control-plane.md, which only namesRuntimeDriverin its glossary —so the anchor points at the (unnumbered, unwritten) contract ADR instead.
supersededTightened to the load-bearing claims only: it is not a state, it rides the
same single field as a director cordon (so an instance that is both cordoned and
superseded is still exactly one
Paused), and the drain/replace ordering is afleet-level rollout question that this ADR decides nothing about.
Verification
Node profile (
npm test,npm run lint,npm run typecheck,npm run build) —all green, 117 console tests, plus a green detached clean-worktree replay. TDD is
not applicable: the diff contains no code path.
Note on existing PRs for this issue
#162 (
Reese-max:devin/issue-3) and two other fork branchesalready target this issue. This branch is
devin/issue-3-w13rather than a reuseof
devin/issue-3because its head does not fast-forward — that lineage alsocarries repo-wide rustfmt/clippy changes that this docs-only candidate does not,
and pushing over it would repoint someone else's open PR at different content.