Skip to content

Spec 146 phase 9: seven deliverables unmet after PR #177 #179

Description

@pseudoseed

PR #177 delivers phase 9's seam and three real fixes, but seven of the phase's deliverables and acceptance criteria are not met. Filing them so "phase 9 merged" is never mistaken for "phase 9 done".

What #177 does deliver

  • Per-row refusal for thread-backed rows in stop, attach and the list path, so one unsupported row no longer aborts a bulk command.
  • Thread delivery routed through the mailbox pipeline via writeMessage in DeliveryPorts, preserving the mailbox-first invariant, with resolveLiveSessionForAgent returning a thread session for builders and architects instead of throwing.
  • A reachable unmerged guard in cleanupThreadBackedBuilder, using the real isWorktreeMerged with force passed through.
  • The ThreadEngine seam itself.

What is not met

  1. No production path to a real engine. createPorchThreadEngine moves to a monorepo-only helper, because a production import of ../../../porch-driver/dist/thread.js cannot ship — @cluesmith/codev packs from packages/codev and porch-driver is private with a gitignored dist. So the only engine reachable in production is none.
  2. installThreadSpawnFactory has no production caller, deliberately. chooseSpawnPath still returns pty.
  3. "An architect is a thread whose worktree is the workspace root" — not true in production.
  4. "An architect thread survives a server restart and resumes with context" — untested. It cannot be tested against an in-memory engine, and the real engine is not reachable.
  5. "afx interrupt leaves activeTurnId: null and the interrupted command's side effect absent" — only the first half is asserted. The second half is the one the plan cares about and cites the SHOULD_NOT_FINISH spike for.
  6. "One architect and six builders run concurrently, measured, not asserted" — unrun. Blocked by Tower's session cap and by an explicit architect instruction not to risk it while Tower spawns the process before checking the 100-session cap, so every rejected create leaks one #171 was live.
  7. The architect cutover runbook is dry-run only. /arch-save was never executed, so the runbook's most valuable content — what /arch-save fails to capture, which the spec names as its rollback trigger — is still unknown. Blocked because the only architect in this workspace is the one running the program.

Consequence for phase 10

Phase 10 is "full protocol on a second driver" and depends on phase 9. "Second" presumes a first driver works in production. It does not. Phase 10 either wires the first one properly or its own premise is wrong.

Suggested shape for the follow-up

  • Decide how porch-driver reaches production: publish it as a real dependency, or vendor the needed surface into packages/codev/src the way the t3code contract was vendored in phase 1.
  • Then run the live criteria against the pinned harness (node tools/t3-server/t3-server.mjs start, loopback, port 3799). The checkout exists and matches the pin, so this is not blocked on infrastructure.
  • Run the concurrency measurement once Shellper leak: the spawn-gate test orphans one per spawn, and Tower leaks one per cap rejection #174's leak fix has been live long enough to trust the session headroom.
  • Perform the cutover on a workspace that is not hosting the architect running the program.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/towerTower, afx, terminals, messaging

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions