docs(spec-sessions-composition-pipeline): sessions composition pipeline — shared gate, split composers, single-round wire - #529
Conversation
sdd-validate — spec boundaryBoundary resolved: Spec — Gate 1 — Acceptance criteria testable ✅ PassAll R-ID statements describe observable behaviours that can be verified as pass/fail. Every criterion is tied to at least one named proof artifact (test name or file assertion). No vague aspirational statements were found among the R-IDs. Gate 2 — No implementation leakage
|
| # | Gate | Severity | Finding |
|---|---|---|---|
| 1 | Gate 2 — No implementation leakage | Warning | R-IDs throughout all five units name internal symbols where behavioural statements belong; "Repository Standards" section prescribes coding conventions rather than behavioural requirements |
| 2 | Gate 3 — Assumptions explicit | Info | Wire format stability assumption (R4.4, R4.6) not stated — reader cannot determine whether the serde_json shape is a stable API contract or a test-scope assertion |
Gates 1, 4, and 5 pass clean. No lifecycle label move: the spec boundary does not advance the tracking issue lifecycle.
Generated by sdd-validate for issue #529 · ◷
Rebuild the spec PR as docs-only. The sdd-spec derivation committed a large sessions-composition code refactor and several reverts alongside the spec document; a spec PR must change only the spec under docs/specs/. Reset every code and non-spec-doc file to current main (161b763), keeping just the derived spec so the PR no longer reverts merged work. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0143kv2BRrRqGxmVwwHskQtS
c39d194 to
5698f51
Compare
📝 WalkthroughWalkthroughA new retrospective specification document is added at ChangesSessions Composition Pipeline Specification
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~5 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@docs/specs/05-spec-sessions-composition-pipeline/05-spec-sessions-composition-pipeline.md`:
- Line 5: The status field is currently set to `planned`, but this specification
documents already-implemented work from PR `#528` that has already shipped on the
`evan/split03` branch. Change the `status` field value from `planned` to
`published` or `stable` to correctly reflect that this specification documents
shipped, published work with transparent gap analysis, rather than future
planned work.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 65bccdfc-cbe0-4513-aa09-87212073d306
📒 Files selected for processing (1)
docs/specs/05-spec-sessions-composition-pipeline/05-spec-sessions-composition-pipeline.md
| id: spec-sessions-composition-pipeline | ||
| title: "sessions composition pipeline — shared policy gate, split client/daemon composers, single-round wire" | ||
| kind: spec | ||
| status: planned |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Correct the status field — this spec documents already-implemented work, not planned work.
Per the PR objectives, this specification was derived retrospectively from PR #528, which shipped code on the evan/split03 branch. Setting status: planned misleads readers into thinking the spec describes future work. Since the pipeline is already implemented and the spec documents the shipped behavior (with transparent gap analysis for incomplete phases), use a status value that reflects published/documented work — published, stable, or similar.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@docs/specs/05-spec-sessions-composition-pipeline/05-spec-sessions-composition-pipeline.md`
at line 5, The status field is currently set to `planned`, but this
specification documents already-implemented work from PR `#528` that has already
shipped on the `evan/split03` branch. Change the `status` field value from
`planned` to `published` or `stable` to correctly reflect that this
specification documents shipped, published work with transparent gap analysis,
rather than future planned work.
|
Closing as deferred while @evanspearman completes loadouts |
) The pin was 9 days and 62 commits stale (c854d6b1, 2026-07-20). The motivating change is gominimal/pkgs#534, which rebuilds microvm-rootfs from Alpine and drops the glibc closure — but the pin is linear, so this necessarily carries everything before it too. Materially in range: - microvm-rootfs from Alpine (#534) — 186 MB -> 45 MB - two libkrun vsock fixes: RX descriptor fill (#506) and packet-count backpressure (#512), both on the path minvmd depends on - rust 1.97.1 (#502) and glibc 2.44 (#529) in the build stack The rest is routine package version bumps. Pinned at the branch tip rather than at #534's commit: pinning mid-history buys nothing here, and the three commits after it are a bottom bump, a graphviz bump, and a license-metadata fix. Verified on this host: `mip materialize --arch aarch64 minvmd-rootfs` resolves from cache and yields a 47,212,544-byte ext4 image whose only interpreter is /lib/ld-musl-aarch64.so.1 — no glibc. The same image has already been booted and driven through the session e2e (cold activate 4296 ms, warm ls 16 ms, sandbox proof 8030 ms), and A/B'd for cold-boot latency against the outgoing rootfs: median 129 ms vs 154 ms, n=10 each, non-overlapping. This changes the guest for macOS as well, which already ships the payload; the VM lanes are the gate. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Summary
Derived spec for PR #528, authored retrospectively from the implemented code.
The spec covers:
core::composegate pipeline (Contribution,Composable,gate_vars,gate_patches,compose_contribution)UserComposer(loadout accumulation →WireContribution)SessionComposer(seeded from wire, daemon composables,extend_from_wire)WireContribution,ContributionResponsewithout round/complete,SessionStep::Response,Abort/AbortReason)denybefore user-origin auto-allow,DenyOnceremoval, module restructuring,COMPOSITION.md)Each unit has 1–3 proof artifacts (test-based or file-based, all pass against the current tree).
Gap Analysis documents four gaps:
ContributionResponseand client Phase 3 verdict handler are absent)Contribution::mergeconflict detection absent (Conflictenum uninhabited)ItemDecision::DenyOnceremoval is a breaking hook-API change without a migration noteRefs #528
Summary by CodeRabbit