Development record
drain-drive-live-proof-and-key-route
specopenspc-2611051628562376
Summary
What spc-2610230813348813 did not deliver for itd-2610222215485265: the live proof of abcd drain --drive on the real harness, which needs a person's login and their own terminal, then the key route and the decision on a lane paused past the outage. The drive itself, its walls, its stop and resume, and its docs landed under that spec.
Footprint
- packages: internal/core/runner, internal/core/implement/loop, internal/surface/cli
- tests: internal/core/runner/profile_test.go, internal/surface/cli/drain_drive_test.go, internal/core/implement/loop/terminal_outage_test.go
Steps
- Live proof, on the one walled login (MUST, live)
- priority: MUST, Friday
- login: the person, once, into the one walled directory on the account the drive runs in
- needs: none
- packages: internal/core/runner/wall.go
- tests: the run's log and the three pull requests on the scratch remote; a dated receipt in the local tier
A real
abcd drain --driveon a scratch repository with three seeded minor issues, the real harness on this account's subscription, the cap at 3. The evidence is the run's log, the three pull requests, and the absence of any input after the yes, which is the mechanism's falsifier; one Ctrl-C mid-lane and a resuming drive are part of the run. A wall that does not hold in the real launch is fixed inwall.gohere or stops the route and goes back to the product thinker. Live; it asks its own yes, since it spends the person's usage and opens real pull requests on a scratch remote. The first proof's lab (dcn-2611031720003633) is the method.
- The key route, on a key profile (AFTER)
- priority: AFTER
- login: none
- needs: none
- packages: internal/core/runner/profile.go, internal/surface/cli/drain_drive.go
- tests: internal/core/runner/profile_test.go, internal/surface/cli/drain_drive_test.go Not before itd-2611011230226453 and itd-2611040344170206 ship: a drive whose configuration names a key runs on a key profile with abcd's hooks on, the key reaching the harness by a channel the agent's shell cannot read, under the budget's caps and its composing rule (dcn-2611041550126639, dcn-2611041550129278). Until then the refusal of spc-2610230813348813's step 3 stands.
- A lane paused past the outage (AFTER)
- priority: AFTER
- login: none
- needs: none
- packages: internal/core/implement/loop/terminal.go
- tests: internal/core/implement/loop/terminal_outage_test.go What the drive does with a lane still paused when its outage runs out: hand it back as stuck with the runner's reason and release it, as the intent's decision 7 was written, or leave it paused on its branch for the next drive, as a stop leaves a lane. Both are on the record; the product thinker settles it before this step is built, and the intent's decision 7 is amended to the answer.
Frontmatter
| id | spc-2611051628562376 |
|---|---|
| type | spec |
| lifecycle | open |
.abcd/development/specs/open/spc-2611051628562376-drain-drive-live-proof-and-key-route.md
open on GitHub ↗ · commit history ↗
References1
- itd-2610222215485265abcd drain --drive works through the ledger from a plain terminalimplements
mentions6
- dcn-26110317200036332026-11-03 — The product thinker said yes on 2026-11-03 to step 1 of spc-2610230813348813, the live proof that the walls of drain --drive's subscription route hold on their real machine; it runs as lab lab-261103171720-c0bdccf after they log a dedicated configuration directory into the subscription once (the lab chose ~/.abcd.noindex/claude-walled/, inside abcd's home, since the spec names no location), on the account the drive will run in.
- dcn-26110415501266392026-11-04 — The product thinker's rulings on the per-key budget draft itd-2611011230226453, at its planning interview. The API key a session names is a named credential, resolved through the credential store by name from whichever of its homes the person chose (adr-2609221017021499); the keychain is the suggested home, never a required one, so a machine without a keychain tool is offered the key route like any other, and the draft is reworded to say so. Spend never passing a cap admits the exceptions the record names: a response larger than any launch cost recorded on the key before it, a launch whose cost cannot be read, several launches sharing one key at once, and the same key used by abcd on a second machine; an overrun abcd can see is recorded against the key and named in the run's record, and the provider's own console limit is the outer stop past every one of them. On that ruling adr-2611011231015519 is accepted, and its refinement of decisions 17 and 34 of itd-2610161733316518 is no longer advisory. The key route and the subscription route compose by one rule: a key at its cap pauses or moves to a second key the person named and never falls to a subscription, a subscription at its usage mark never opens a route the person has not named, and both out at once is a wait, never a third route. The key reaches the harness by a channel the agent's own shell cannot read, proved to work with the harness first, and that proof is the plan's first step; this binds how the key is handed over and not what an agent spends through the harness, which the caps bound.
- dcn-26110415501292782026-11-04 — The product thinker's rulings on the profiles draft itd-2611040344170206, at its planning interview. Every agent abcd starts unattended carries abcd's guard whichever way its work is paid for: a stage on the key route runs on a profile with hooks on, and the bare launch adr-2610222222326104 names for the key route gives way for stages. Each way of paying, a subscription or a named key, is one profile with its own login and its own bare settings; a worktree is where the files are, a profile is who pays and what an agent can reach, and abcd pairs one of each per agent. A subscription's profile needs one login by the person; a key's profile needs none. A session the person starts that runs work unattended off a profile is warned in a line that cannot be missed, never refused. Whether an agent on a profile may reach the machine's other sessions is a setting, off by default. A profile's name is a readable one, never a random string: abcd ships a neutral list, a themed one such as a television series' characters is the person's own in their machine configuration, and a name is fixed at creation and retired once used; this replaces the random names of the draft's fourth decision, and the registry records the name, the tool and the date. abcd ships a sensible default allow-list of tools and a repository configures it within one bound: a repository file may narrow the list, only the person's own machine configuration may widen it, and an agent can never widen it. The same stance settles every open question of that kind, those of the ledger draft itd-2611031342011261 among them: abcd ships a sensible default and the person configures it per repository. The draft's title and scope widen to every way of paying, keys included.
- itd-2611011230226453Agents abcd starts on your API key stay within the budget you set
- itd-2611040344170206Unattended work runs on a named profile, one per way of paying
- spc-2610230813348813abcd-drain-run-from-a-plain-terminal