os-sdlc Runner always commits at implementation_complete: delete the commit_on_complete opt-in #837
Labels
No labels
P0
P1
P2
P3
bug
category/code-change
category/cross-repo
category/eval-run
category/investigation
category/no-test-target
category/owner-ruling
category/prose-artifact
category/recurring-chore
category/structure
category/umbrella
crc-refactor
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
rule-proposal
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#837
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?
Problem
The os-sdlc Runner commits at
implementation_completeonly when.sdlc/project.yamlsetscommit_on_complete: true(ADR-0171, defaultfalse). The implement skill then tells the orchestrator: "If the payload carries nocommit, the project has not opted in and the commit is the user's to make." No project sets the key, so every run stops before the commit and waits for the user.An agent added the opt-in and the sentence on 2026-09-09 (
f752e9b5, ADR-0171). The user did not ask for either. The defect that ADR-0171 answered was that the orchestrator read full diffs before it committed. The commit itself was not a defect. The user ruled on 2026-09-29: the Runner always commits.Observed
On 2026-09-29, implementation 78 (#827) returned
implementation_completewith nocommitfield. The orchestrator stopped and asked the user to approve the commit.Reproduce
Approach
Delete the opt-in.
Implementation::Commit#callcommits whenever it has a git runner. The deterministic commit of handoff-listed paths from ADR-0171 does not change:git add -- <paths>,git commit --only, never-a,-A,checkout,restoreorstash.OsSdlc::Projectloses itscommit_on_completemember.Project::Config::Documentlosescommit_on_complete?and the key inTARGET_KEYS.Project::SnapshotandImplementation::Targetinglosecommit_on_complete?..sdlc/project.yamlthat still sets the key fails implementation-open through the unknown-key check (#832). No project in ~/dev sets it today.Required work:
commit_on_complete— check:! grep -rq commit_on_complete plugins/os-sdlc/lib plugins/os-sdlc/bincommit_on_completeas a valid setting. The only test file that names the key isplugins/os-sdlc/tests/model/project/validation_retired_commit_key_test.rb, which proves acceptance criterion 2 — check:! grep -rq --exclude=validation_retired_commit_key_test.rb commit_on_complete plugins/os-sdlc/tests! grep -q "user's to make" plugins/os-sdlc/skills/implement/SKILL.mdcommit_on_completebullet from the setup-project skill — check:! grep -q commit_on_complete plugins/os-sdlc/skills/setup-project/SKILL.mdRejected: keep the key and set
commit_on_complete: truein cc-os — it keeps the agent-added opt-in, and every new project stops at the commit again.Rejected: the orchestrator commits when the Runner did not — it adds a second commit owner.
Acceptance criteria
.sdlc/project.yamlwith no commit key, when an implementation reachesimplementation_completewith handoff-listed paths, then the Runner commits those paths and the terminal payload carriescommit..sdlc/project.yamlthat setscommit_on_complete, when implementation-open validates the project, then it fails and names the unknown keycommit_on_complete.Owner sketch
Non-goals
implementation_complete, which the Runner's commit does not include.Retired tests
plugins/os-sdlc/tests/model/project_commit_on_complete_test.rb
plugins/os-sdlc/tests/command/implementation/commit_test.rb#test_it_does_nothing_without_the_key
plugins/os-sdlc/tests/model/implementation_empty_project_config_test.rb#test_both_readers_agree_when_config_omits_name_but_carries_commit_on_complete
Origin
1c5142c1by handcommit← Runner commits only on opt-in, default false ← DESIGN (ADR-0171,f752e9b5; agent-added, not user-requested)Work started on branch ticket-837 (worktree) via /os-sdlc:implement.
Resolution
Done: The os-sdlc Runner always commits at implementation_complete. commit_on_complete is removed from Project, Config::Document, Snapshot and Targeting; a project.yaml that sets it fails implementation-open as an unknown key. The implement skill sentence that handed the commit to the user and the setup-project bullet are deleted. ADR-0249 amends ADR-0171 decision 1.
Evidence: Commit
01f5edf9on ticket-837. os-sdlc implementation 2: 10 dispatches (2-11), implementation_complete in 8 min 24 s; suite-check gate required-work exit 0, suite exit 0; behavior-verifier pass on both acceptance criteria. Implementation 1 escalated at change-auditor (ticket R2 check conflicted with AC 2); ticket fixed and reopened.Follow-ups: none