#534 B: Schema 21: project_config column; bind at open; Implementation#project #538
Labels
No labels
P0
P1
P2
P3
bug
create
delete
enhancement
filed-by/agent
filed-by/user
frozen
lint-rule
needs-info
needs-triage
next
plugin/cc-architect
plugin/os
plugin/os-adr
plugin/os-aidd-lint
plugin/os-backlog
plugin/os-context
plugin/os-doc-hygiene
plugin/os-sdlc
plugin/os-vault
project/cc-os
ready-for-agent
ready-for-human
recurring
review
update
waiting
wayfinder:grilling
wayfinder:map
wayfinder:map
wayfinder:research
wayfinder:task
wayfinder:task
wontfix
worklist/deviations
worklist/lint-rule
worklist/new-implement-build
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jared/cc-os#538
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
Child of #534 (ADR-0169). Parent design points and comments on #534. Lands after #535.
Tasks
Pseudo-Ruby:
Acceptance criteria
Blocking edges
Blocked by: #535 and #537
Origin
Work started via /os-sdlc:implement on branch ticket-538 (session d233a2f7-977a-419d-99ea-011b6e1e66f8). Deviation carried from #537: main's brief_facts.rb hot-patched with target: @implementation.target for the run so the SubagentStart hook can write dispatch rows (#534 gap); restored at finish.
Resolution
Done: SCHEMA_VERSION 21 adds implementations.project_config. implementation-open loads the project with the selected target and stores Project#to_json on the row; Implementation#project(root) rebuilds it via Project.from_json, so editing project.yaml after open does not change a running implementation. Implementation#owned_dispatch! raises StaleDispatch for a dispatch that belongs to another implementation; CompletionIntake::Lookup#dispatch_by_id! resolves the owning implementation from the dispatch row (or the session's active one when a session is given) and applies the guard, writing nothing on rejection.
Evidence: Pipeline /os-sdlc:implement 538, implementation 5, session d233a2f7-977a-419d-99ea-011b6e1e66f8, dispatches 99-119, ended implementation_complete. Commits
164227d(feat) and2d7f1c9(history row) on branch ticket-538, merged to main 2026-09-09. Suite 1093 runs green. New tests: plugins/os-sdlc/tests/runner/implementation_bound_project_test.rb and completion_intake_dispatch_ownership_test.rb. Deviations: (1) first guard resolved the implementation by session and broke session-less dispatch-id stops (5 cli_subagent_stop tests); one programmer-repair round fixed it in production; (2) that repair agent settled against foreign dispatch 5 of implementation 1 (#449) because main's runner had no guard yet, so dispatch 115 was gated and settled by hand; (3) main's brief_facts.rb hot-patched with target: @implementation.target for the run (#534 hook gap), restored at finish; (4) stale live implementation 1 (#449, 2026-09-04) stamped abandoned_at by hand so the schema-21 binary can recreate the shared pipeline.db.Follow-ups: none new; #539 (no Project.load outside open), #541 (BriefFacts reads the aggregate, removes the hot-patch need), #544 (test-side conflict routing) already cover the rest