Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
a36d389
feat(engine): implementation runs follow the session binding
hlubek Sep 23, 2026
6bb3489
fix(engine): replay a session whose bound branch has no checkout
hlubek Sep 23, 2026
96bfa35
fix(engine): keep older implementation runs replayable
hlubek Sep 23, 2026
4903584
Merge branch 'main' into claude/d-cpt-9kv-landing-on-binding
hlubek Sep 23, 2026
6fa719b
sdd: capture 20260923-185316-d-cpt-5gk
hlubek Sep 23, 2026
f7f232e
sdd: capture 20260923-230301-d-cpt-rrt
hlubek Sep 23, 2026
09d2a7b
sdd: summarize 20260923-230301-d-cpt-rrt (manual)
hlubek Sep 23, 2026
6bc202c
sdd: capture 20260923-230855-d-cpt-34w
hlubek Sep 23, 2026
ed7d6b1
sdd: summarize 20260923-230855-d-cpt-34w (manual)
hlubek Sep 23, 2026
c91486e
sdd: capture 20260923-231440-s-tac-hz2
hlubek Sep 23, 2026
bb1e2c9
sdd: capture 20260923-233057-d-cpt-ekd
hlubek Sep 23, 2026
038f03a
sdd: summarize 20260923-233057-d-cpt-ekd (manual)
hlubek Sep 23, 2026
448892e
sdd: wip start 20260923-230855-d-cpt-34w (Christopher)
hlubek Sep 23, 2026
f68601b
feat(engine): replay reads the session log as history
hlubek Sep 23, 2026
b8a014d
fix(engine): replay drops retired start inputs too
hlubek Sep 23, 2026
0ffae5f
feat(engine): implementation runs hold no branch state and no landing…
hlubek Sep 23, 2026
9c03094
feat: an unbound session's base is derived by the composition
hlubek Sep 23, 2026
3b4e2cb
test: implementation run on a two-branch repository leaves no marker …
hlubek Sep 23, 2026
c768b80
sdd: capture 20260924-091433-s-tac-9bu
hlubek Sep 24, 2026
f67258a
sdd: summarize 20260924-091433-s-tac-9bu (manual)
hlubek Sep 24, 2026
876ff5d
sdd: wip done 20260923-233122-christopher
hlubek Sep 24, 2026
9b6f563
sdd: capture 20260924-091500-s-tac-ien
hlubek Sep 24, 2026
ec271f1
sdd: summarize 20260924-091500-s-tac-ien (manual)
hlubek Sep 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions .sdd/graph/2026/09/23-185316-d-cpt-5gk.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
type: decision
layer: conceptual
kind: directive
refs:
- id: 20260706-170000-d-prc-imp
kind: refines
desc: sharpens what the procedure may demand of agent and user; every change to it is tested against this
- id: 20260914-180822-d-cpt-9kv
kind: related
desc: the active mechanism directive this measures without fulfilling or replacing it
- id: 20260902-160151-s-tac-mtv
kind: grounded-in
desc: the landing failure, cited as evidence that mechanism-level fixes let the friction return
- id: 20260422-124325-d-stg-2wb
kind: grounded-in
desc: capture ambient to the work; the run must not pull the agent out of the work to serve the engine
- id: 20260422-123814-d-stg-7lu
kind: grounded-in
desc: a confirmation that restates an approval already given is the coordination overhead this aspiration pushes against
- id: 20260628-130403-d-cpt-h4l
kind: grounded-in
desc: branch and worktree operations are host work; the procedure performs none and now demands none
- id: 20260713-214050-d-cpt-65i
kind: related
desc: explicit authority stays; declared once when true, not re-reported; how far a local run follows the checkout is left to the mechanism decisions
participants:
- Christopher
confidence: high
intent: guiding
topics:
- engine/base-procedures
- collaboration/concurrent-work
- agent/ux
- reliability/discipline
summary: 'This conceptual directive commits implementation runs to demand nothing of agent or user beyond what the work itself needs: the agent works as it would in its host (branch, commit, pull request, merge) while SDD rides along, and the run must never require unneeded Git operations, redundant reports, or confirmations restating already-given approvals. It refines the implementation procedure (20260706-170000-d-prc-imp), which every change is tested against, and measures the active mechanism directive (20260914-180822-d-cpt-9kv) without replacing it. It is grounded in the landing failure that showed mechanism-level fixes let friction return (20260902-160151-s-tac-mtv), ambient capture, autonomy, host-owned branch operations, and explicit authority (20260422-124325-d-stg-2wb, 20260422-123814-d-stg-7lu, 20260628-130403-d-cpt-h4l, 20260713-214050-d-cpt-65i).'
---

An implementation run demands nothing of the agent or the user that the work itself does not need: the agent works the way it works in its host — branch, commit, pull request, merge, back to the main line — and SDD rides along, so that everyone sees the work is taken, its reasoning and its closing done land next to the code, and the commitment closes when the work ships. Those three outcomes are the whole purpose of the run. Markers, branches, bindings and landing are mechanism, and every change to the mechanism is measured against this experience, never against the mechanism it replaces.

What the run must never demand: a Git action the work does not need — a checkout, branch or worktree created to satisfy a validation; a report of something the host state already implies or the engine already holds; a word from the user that only confirms what has already happened. The user is asked for real decisions — what to build, whether the result is good, whether to merge — and nothing else. A coordination fact the engine needs and cannot observe is declared once by the agent, at the moment it becomes true, and is not re-reported at later steps. The observable violation is a served instruction that asks for a Git operation, a report, or a confirmation the work did not require; that is the test every change to 20260706-170000-d-prc-imp passes before it ships.

Why this is recorded now. Since the branch lifecycle moved into the engine, every correction was made at the level of the mechanism, and the friction returned in a new shape: the run demanded an explicit work-branch report even when it equalled base, then locked its reads to that branch until landing failed once the branch was gone (20260902-160151-s-tac-mtv); agents created checkouts only to satisfy branch validation; a session bound to a deleted branch could not be resumed; finished runs waited at the landing junction for the word "landed" after the pull request had already been approved; and in the run that built 20260914-180822-d-cpt-9kv the work was done before the setup was answered, because the setup stood in the work's way. Each is the procedure serving itself. That directive fixes real mechanism — one branch fact, reads and writes following the session binding — and stays active, but it keeps a user gate on marker removal and was judged against the previous lifecycle; from here it and its successors are judged against this directive.

Grounding. Ambient capture (20260422-124325-d-stg-2wb): participants stay in their natural activity and the graph grows from that motion — a run that pulls the agent out of the work to serve the engine is the mode-switch that aspiration pushes against. Autonomy (20260422-123814-d-stg-7lu): a blocking approval where shared context suffices is coordination overhead — a confirmation that only restates an approval already given on the pull request is exactly that. Host-owned branch operations (20260628-130403-d-cpt-h4l): the procedure performs none of them, and by this directive it demands none either. Explicit authority (20260713-214050-d-cpt-65i) is the standing context this must account for: where a write lands stays an explicit fact, but explicit means declared once when the host makes it true, not re-reported at every step — how far a local run may follow the host's checkout instead is left to the mechanism decisions that implement this directive.
61 changes: 61 additions & 0 deletions .sdd/graph/2026/09/23-230301-d-cpt-rrt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
type: decision
layer: conceptual
kind: directive
refs:
- id: 20260923-185316-d-cpt-5gk
kind: grounded-in
desc: the experience standard this mechanism is measured against
- id: 20260706-170000-d-prc-imp
kind: refines
desc: the procedure whose steps, fields and closing order change
- id: 20260902-160151-s-tac-mtv
kind: addresses
desc: the landing failure, answered by never reading a checkout the landing makes disposable
- id: 20260722-112853-d-tac-ln1
kind: grounded-in
desc: the session binding kept as the single declaration; its explicit baseBranch requirement on WIP writes is withdrawn
- id: 20260713-214050-d-cpt-65i
kind: grounded-in
desc: the never-ambient rule that rejects following the serving checkout's HEAD
- id: 20260628-130403-d-cpt-h4l
kind: grounded-in
desc: branch and worktree operations stay host work
- id: 20260923-182850-s-cpt-ct5
kind: grounded-in
desc: markers as the interim carrier of the event stream's coordination, not worth more machinery
- id: 20260914-113737-d-cpt-qst
kind: grounded-in
desc: the log is authoritative and the projection disposable, which is what replay-as-history rests on; accepted intents for remote branch delivery
- id: 20260827-232430-d-cpt-voa
kind: grounded-in
desc: the declared session property pattern the coding-host declaration follows, carried forward
- id: 20260715-113417-s-cpt-vxd
kind: related
desc: the remote logical-branch gap left open as a question, carried forward
supersedes:
- 20260914-180822-d-cpt-9kv
participants:
- Christopher
confidence: high
intent: pending
topics:
- engine/base-procedures
- collaboration/concurrent-work
- implementation/engine
- portability/mcp
- portability/runtime
summary: 'The implementation procedure holds no branch state and has no landing step: the WIP marker is written at setup on the session''s effective branch and deleted on the work branch right after the closing done, and the merge carries both to base, superseding 20260914-180822-d-cpt-9kv under the no-unneeded-demands standard (20260923-185316-d-cpt-5gk). One rule names the branch: the session binding (20260722-112853-d-tac-ln1) always names the agent''s current branch, declared through bind_branch whenever it changes, with served instructions naming the moments and the engine never reading the serving checkout''s HEAD (20260713-214050-d-cpt-65i). It refines 20260706-170000-d-prc-imp, answers the landing failure 20260902-160151-s-tac-mtv, treats markers as the interim carrier until the project event stream (20260923-182850-s-cpt-ct5), makes replay treat the session log as history (20260914-113737-d-cpt-qst), and carries forward capability reporting at session open (20260827-232430-d-cpt-voa), remote branch delivery, and the open question 20260715-113417-s-cpt-vxd.'
---

The implementation procedure holds no branch state and has no landing step: the WIP marker is written on the session's effective branch at setup, the closing done and the marker's deletion are written on the work branch right after the done is recorded, and the merge carries both to base. This supersedes 20260914-180822-d-cpt-9kv and is measured against 20260923-185316-d-cpt-5gk.

One rule for the branch: the session binding (20260722-112853-d-tac-ln1) always names the agent's current branch. The agent declares it through `bind_branch` whenever that branch changes: at session start when the checkout is not on the configured default branch, after entering a work branch, after returning to base. Without a declaration the engine assumes the configured default branch; it never reads the serving checkout's HEAD (20260713-214050-d-cpt-65i). Served instructions name these moments (the session shell at start, implementation setup and closeout), the framing says when no checkout has the default branch, and a write to a branch without a checkout fails naming the remedy. Branch operations stay host work (20260628-130403-d-cpt-h4l).

Why: 20260914-180822-d-cpt-9kv kept a reported `baseBranch` field and a user-guarded `landed` report. Both are demands the work does not need (20260923-185316-d-cpt-5gk), and in a pull-request flow the report duplicates the merge approval. Deleting the marker on the work branch needs no guard: base shows the work as taken until the branch merges. Markers are the interim carrier until the project event stream exists (20260923-182850-s-cpt-ct5), so no more machinery than this. This also answers 20260902-160151-s-tac-mtv: no read of the run depends on a checkout the landing makes disposable.

Retired fields and steps leave the procedure. Replay treats the session log as history, dropping reports of undeclared fields and passing through retired steps, following 20260914-113737-d-cpt-qst. Keeping a retired field declared as optional exposed it in every report schema (PR #19); rejected.

Carried forward from 20260914-180822-d-cpt-9kv, unchanged and still to build: the client reports its capabilities when opening a session, a coding host with a checkout being the first (following 20260827-232430-d-cpt-voa), and the implementation move is offered only then; the hosted engine delivers captures to a declared remote branch as accepted intents. 20260715-113417-s-cpt-vxd stays open as a question.

Fulfilled when the procedure, the WIP write rule, the replay tolerance and the instruction moments ship, with a test that runs a branch-mode run on a two-branch test repository, merges the branch and checks that the marker is gone from main.
64 changes: 64 additions & 0 deletions .sdd/graph/2026/09/23-230855-d-cpt-34w.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
type: decision
layer: conceptual
kind: directive
refs:
- id: 20260914-180822-d-cpt-9kv
kind: builds-on
desc: the superseded predecessor whose remaining points this carries forward in full
- id: 20260923-185316-d-cpt-5gk
kind: grounded-in
desc: the experience standard this mechanism is measured against
- id: 20260706-170000-d-prc-imp
kind: refines
desc: the procedure whose steps, fields and closing order change
- id: 20260902-160151-s-tac-mtv
kind: addresses
desc: the landing failure, answered by never reading a checkout the landing makes disposable
- id: 20260722-112853-d-tac-ln1
kind: grounded-in
desc: the session binding kept as the single declaration; its explicit baseBranch requirement on WIP writes is withdrawn
- id: 20260713-214050-d-cpt-65i
kind: grounded-in
desc: the never-ambient rule that rejects following the serving checkout's HEAD
- id: 20260628-130403-d-cpt-h4l
kind: grounded-in
desc: branch and worktree operations stay host work
- id: 20260923-182850-s-cpt-ct5
kind: grounded-in
desc: markers as the interim carrier of the event stream's coordination, not worth more machinery
- id: 20260914-113737-d-cpt-qst
kind: grounded-in
desc: the log is authoritative and the projection disposable, which is what replay-as-history rests on; accepted intents for remote branch delivery
- id: 20260827-232430-d-cpt-voa
kind: grounded-in
desc: the declared session property pattern the capability declaration follows, carried forward
- id: 20260715-113417-s-cpt-vxd
kind: related
desc: the remote logical-branch gap left open as a question, carried forward
supersedes:
- 20260923-230301-d-cpt-rrt
participants:
- Christopher
confidence: high
intent: pending
topics:
- engine/base-procedures
- collaboration/concurrent-work
- implementation/engine
- portability/mcp
- portability/runtime
summary: 'The implementation procedure holds no branch state and has no landing step: the WIP marker is written at setup on the session''s effective branch and deleted on the work branch right after the closing done, and the merge carries both to base; this supersedes 20260923-230301-d-cpt-rrt and carries forward in full the still-valid points of 20260914-180822-d-cpt-9kv, measured against 20260923-185316-d-cpt-5gk. One rule names the branch: the session binding (20260722-112853-d-tac-ln1) always names the agent''s current branch, declared through bind_branch whenever it changes, with served instructions naming the moments and the engine never reading the serving checkout''s HEAD (20260713-214050-d-cpt-65i). It refines 20260706-170000-d-prc-imp, answers the landing failure 20260902-160151-s-tac-mtv, keeps the abandon path, treats markers as the interim carrier until the project event stream (20260923-182850-s-cpt-ct5), makes replay treat the session log as history (20260914-113737-d-cpt-qst), and carries forward capability reporting at session open (20260827-232430-d-cpt-voa), remote branch delivery, the branchless remote store, and the open question 20260715-113417-s-cpt-vxd.'
---

The implementation procedure holds no branch state and has no landing step: the WIP marker is written on the session's effective branch at setup, the closing done and the marker's deletion are written on the work branch right after the done is recorded, and the merge carries both to base. This supersedes 20260923-230301-d-cpt-rrt, the same decision minus three points its compression dropped; 20260914-180822-d-cpt-9kv, which that entry superseded, stays superseded and is carried forward here in full. The decision is measured against 20260923-185316-d-cpt-5gk.

One rule for the branch: the session binding (20260722-112853-d-tac-ln1) always names the agent's current branch. The agent declares it through `bind_branch` whenever that branch changes: at session start when the checkout is not on the configured default branch, after entering a work branch, after returning to base. Without a declaration the engine assumes the configured default branch; it never reads the serving checkout's HEAD (20260713-214050-d-cpt-65i). Served instructions name these moments (the session shell at start, implementation setup and closeout), the session framing the engine serves at session start and on resume says when no checkout has the default branch, and a write to a branch without a checkout fails naming the remedy. Branch operations stay host work (20260628-130403-d-cpt-h4l).

Why: 20260914-180822-d-cpt-9kv kept a reported `baseBranch` field and a user-guarded `landed` report. Both are demands the work does not need (20260923-185316-d-cpt-5gk), and in a pull-request flow the report duplicates the merge approval. Deleting the marker on the work branch needs no guard: base shows the work as taken until the branch merges. Markers are the interim carrier until the project event stream exists (20260923-182850-s-cpt-ct5), so no more machinery than this. This also answers 20260902-160151-s-tac-mtv: no read of the run depends on a checkout the landing makes disposable.

The base-target and landing steps and the `baseBranch` and `workBranch` fields leave the procedure. The abandon path stays: the host returns to base, the binding is cleared, the marker is deleted there. Replay treats the session log as history, dropping reports of undeclared fields and passing through retired steps, following 20260914-113737-d-cpt-qst. Keeping a retired field declared as optional exposed it in every report schema (PR #19); rejected.

Carried forward from 20260914-180822-d-cpt-9kv unchanged: the engine acquires no graph for a command that declares no reads, and a failed read names the read and the state field that chose the branch (both delivered). Where no code branch exists, a remote store stays branchless: marker, captures and done on base, and an observation made during discarded work remains an observation. Still to build: the client reports its capabilities when opening a session, a coding host with a checkout being the first (following 20260827-232430-d-cpt-voa), and the implementation move is offered only then; the hosted engine delivers captures to a declared remote branch as accepted intents. 20260715-113417-s-cpt-vxd stays open as a question.

Fulfilled when the procedure, the WIP write rule, the replay tolerance and the instruction moments ship, with a test that runs a branch-mode run on a two-branch test repository, merges the branch and checks that the marker is gone from main.
21 changes: 21 additions & 0 deletions .sdd/graph/2026/09/23-231440-s-tac-hz2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
type: signal
layer: tactical
kind: gap
refs:
- id: 20260706-170000-d-prc-imp
kind: grounded-in
desc: the procedure whose work junction offers abandon as an agent choice without the user's words
- id: 20260923-230855-d-cpt-34w
kind: related
desc: keeps the abandon path; the fix belongs with its implementation
participants:
- Christopher
confidence: high
topics:
- engine/base-procedures
- reliability/discipline
summary: 'Signals a gap in the implementation procedure (20260706-170000-d-prc-imp): the `abandon` option sits in an agent chooser, so choosing it logs only the agent''s choice with no `userWords` field, unlike the user-chosen `abort` at setup which relays the user''s words verbatim. The directive decision (20260923-230855-d-cpt-34w) keeps the abandon path unchanged, so the fix belongs with the procedure''s implementation. Candidate remedy: the abandon answer should carry the user''s words.'
---

The implementation procedure's abandon option records no user words: the work junction of 20260706-170000-d-prc-imp is an agent chooser, so answering it with `abandon` logs the agent's choice only, while the step text demands the user's explicit word. Observed by reading the procedure spec as of PR #19 on 2026-09-23: the `abandon` option sits in the agent chooser `work`, whose answer schema has no `userWords` field; `abort` at setup, by contrast, is a user chooser and relays the words verbatim. Expected: a run dropped on the user's say-so shows that word in the session log, as every other user decision in the procedure does. 20260923-230855-d-cpt-34w keeps the abandon path unchanged. Candidate remedy from the dialogue, Christopher's preference: the abandon answer carries the user's words.
Loading
Loading