Build os-git end to end (orchestrator) #1610
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#1610
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 git logic in cc-os and the user's projects is spread over four wrappers, about ten policy classes, and 190 call sites (
docs/os-git/call-site-checklist.md). The user wants oneos-gitplugin with one gem inside it, built in one unattended session, with every call site checked off. The user starts this ticket after their GPU is ready.Design:
docs/os-git/use-cases-and-domain.md(design) anddocs/os-git/call-site-checklist.md(call sites).Settled by the user on 2026-11-06. Do not reopen these:
plugins/os-gitin cc-os now. Plugins load it by apath:source. It moves toruby-gemslater. No remote-gem work now.git-context(ruby-gems/git-contextandcc-plugins/git-context) andos:worktree(plugins/os) merge intoos-git.os-contextandos-vaultwill be Ruby. Their Python git sites are replaced by the port, not by a Python shim.os-git. It stays inforgejo-apiandoctokit.Reproduce
n/a: umbrella ticket.
Approach
Required work: none beyond the acceptance criteria.
Orchestrator work: run the tickets below in this order. A ticket starts only after the tickets it names as blockers have closed.
Independent tickets (run any time): #1608 (status line), #1609 (reset --hard check), and #857 (octokit port for os-backlog, GitHub only; it is not part of the os-git design).
Rules:
category/code-change). Use the fast path (/os-sdlc:fast-batch) for structure-only tickets (category/structure). Do not run an ad hoc plan.docs/os-git/call-site-checklist.mdas the site is replaced. Commit with explicit paths only. Never useadd -A,commit -a,checkout,restore, orstash.os-backlog close <number> --done ... --evidence ... --follow-ups .... Capture each follow-up through/os-backlog:capture, or write "none"./os-me:predict, apply them, and record each ruling and its reason in the design doc. Never stop to ask:plugins/os-context/prompts/session-start/40-decisions.mdis the authority. Q1:Syncmay stage everything. Q2: noreset --hardin os-git v1. Q3: no cache; measure first. Q4:commit --onlyonly. Q5: confirm ADR-0240 is dead, then supersede it through/os-adr:create. Q6: the base branch is an argument. Q7: defer the Python classes until the port. Q8: delete the stash handler. These are the recommendations in the design; the prediction may differ.bin/refresh-pluginswhen it changed aSKILL.md, a hook, or a CLI.nextlabel on any ticket.- [x]only when the site callsos-gitand no longer runs git itself. A row that stays is marked out of scope or deferred, with a reason.End state:
- [x], out of scope with a reason, or deferred with a reason and a ticket number.gitcall starts fromplugins/outsideOsGitadapters, except rows marked out of scope. Verify with this search overplugins/:Open3,system(,%x, backticks, andsubprocesscalls that startgit.docs/implementation-status/os-git.mdhas a History row,docs/implementation-status.mdhas theos-gitrow, andbin/refresh-pluginshas run.Rejected: one giant ticket for all call sites — each plugin has its own suite and its own review; the orchestrator needs a close gate per ticket.
Acceptance criteria
docs/os-git/call-site-checklist.mdis read, then no row remains unmarked.plugins/is searched for git calls outsideOsGit, then only rows marked out of scope remain.docs/adr/README.mdis read, then an Accepted ADR names theOsGitpublic interface.bin/refresh-plugins, when the plugins load, thenos-gitloads and the oldgit-contextandos:worktreeentries are absent.Blocking edges
Blocked by nothing. It runs the tickets above. The user starts it after their GPU is ready.
Origin
Orchestrator started, session 5b14a4ef-91b2-45c0-a729-baa17682a39a. Artifacts committed in
739824a9. All 26 tickets pass validate-template. First group: #1585, #1586, #1608, #1609.Final summary of the os-git build
Result:
plugins/os-gitis the one set of git objects.OsSdlc::Git,Worktree::Git, and thecommit_contextfork are deleted. No production Ruby inplugins/runs git outside the OsGit adapters, except row G-057 (deferred). Checklist: 177 rows done, 20 deferred with a reason, 4 waiting (G-079 to G-082).9370678789140417ea19631d177518eaed6d75ca, cc-plugins9df679431f29707, cc-plugins2125188dcfaf10, decision-modelb4090d16491d48ee19c4eb07bdb1e9cd21db7ticket-1601, 749 runs, 0 failuresddb53af1Rulings: docs/decisions/rulings.tsv rows 56, 57, 58, 75, 76, 77; batch files in docs/crc/os-sdlc/fast-batch-os-git-1592/, fast-batch-os-git-structure/, and fast-batch-os-git-final/.
Deferred rows: G-047 to G-050, G-063 to G-065, G-182, G-183, E-08, E-09 (Python, #1597, #1554); G-051 to G-057, G-187 (#1590, #1527); E-04 (#1631).
Open actions for Jared:
worktree finish ticket-1601. Then close #1601 and mark G-079 to G-082.Deviations:
base_branchedge: a project with no key that runs a feature branch in its primary checkout gets a vacuous unchanged check; a detached primary raises.git stash, against the rule, and popped it. The stack was checked and is intact.Resolution
Done: os-git built and migrated; old wrappers deleted; see the final summary comment
Evidence: Checklist 177 done, 20 deferred, 4 waiting on #1601; final summary comment on this ticket
Follow-ups: #1601 merge, #1631, #1590, #1597
Needs review: delta-refinery merge of ticket-1601 is blocked by uncommitted edits in that main checkout; #853 needs the #866 dependency removed
os-git integration track, 2026-11-09:
docs/os-git/os-sdlc-coverage.md(maincf551aa36). #1645 can start.~/dev/cc-os/plugins/os-gitin os-sdlc, os-me, os-backlog; no Ruby code reads~/.claude/plugins/os-git;bin/refresh-pluginsnames missing~/devcheckouts. ADR-0310 (main4b8f679c), ruling 95, mergef5303d531.os-git integration track, end of session 2026-11-09:
1177851e3, ADR-0311/os-git:worktree; agentsos-git:committer,os-git:repo-initializer; skills/os-git:commit,/os-git:repo-init).waitingon github jaredswanson/cc-plugins#94 to remove git-context.ticket-1601in delta-refinery is ready (a52ff41).waitingon Jared: four uncommitted edits from 2026-07-14 blockworktree finish.waitingon #1554 (ruling 96 confirms ruling 35: no CLI bridge, the Ruby port uses the gem).waitingon #1527 (Ruby port of the os-vault hooks).Update 2026-11-09: #1631 closed. git-context is removed from cc-plugins (e0d9700, cc-plugins#94 closed) and uninstalled. Still waiting: #1601 (Jared's delta-refinery edits), #1597 (#1554), #1590 (#1527).
New child for the os-git track: #1652, os_git ships an OsGit::Testing repository fake; os-sdlc moves FakeGit/FakeGitRepository/FreshGitRepository/GitMarker (test/support, from #1645 at
38b3284d) into it.