Build os-git end to end (orchestrator) #1610

Open
opened 2026-11-06 16:54:49 +00:00 by jared · 7 comments
Owner

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 one os-git plugin 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) and docs/os-git/call-site-checklist.md (call sites).

Settled by the user on 2026-11-06. Do not reopen these:

  1. The gem lives inside plugins/os-git in cc-os now. Plugins load it by a path: source. It moves to ruby-gems later. No remote-gem work now.
  2. git-context (ruby-gems/git-context and cc-plugins/git-context) and os:worktree (plugins/os) merge into os-git.
  3. An old wrapper is removed only after every reference to it is updated and nothing breaks.
  4. The design order is: use-cases first, domain objects second, interfaces third. Write to an interface, not to an implementation.
  5. os-context and os-vault will be Ruby. Their Python git sites are replaced by the port, not by a Python shim.
  6. Ticket tracking stays out of os-git. It stays in forgejo-api and octokit.

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.

  1. #1585 (ADR for the OsGit public interface) and #1586 (ruby-git spike). Run both in parallel.
  2. #1587 (scaffold the plugin).
  3. #1588 (core objects).
  4. #1589 (Worktree, Integration, handoff).
  5. #1592 (os-sdlc), then #1593 (eval harness).
  6. #1594 (os-backlog, folds in #853), #1595 (os-aidd-lint), #1596 (os-me), #1598 (repo-root probes).
  7. #1591 (git-context merge).
  8. #1605 (skill and agent text).
  9. #1599, #1600, #1601, #1602, #1603, #1604 (other projects; each commits in its own repository with explicit paths).
  10. #1597 (os-doc-hygiene Python: ruling, probably a deferral) .
  11. #1590 (Sync and the os-vault hooks). It is blocked by #1527 (the Ruby port of the os-vault hooks). If #1527 has not shipped, mark rows G-051 to G-057 and G-187 deferred with that reason, leave #1590 open, and continue.
  12. #1606 (test and fixture sweep).
  13. #1607 (delete the old wrappers).

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:

  1. Dispatch a fresh agent for each ticket. Use the os-sdlc pipeline for tickets that change behavior (category/code-change). Use the fast path (/os-sdlc:fast-batch) for structure-only tickets (category/structure). Do not run an ad hoc plan.
  2. Mark each checklist row in docs/os-git/call-site-checklist.md as the site is replaced. Commit with explicit paths only. Never use add -A, commit -a, checkout, restore, or stash.
  3. Close each ticket with os-backlog close <number> --done ... --evidence ... --follow-ups .... Capture each follow-up through /os-backlog:capture, or write "none".
  4. Make the rulings on design section 8 Q1 to Q8 with /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.md is the authority. Q1: Sync may stage everything. Q2: no reset --hard in os-git v1. Q3: no cache; measure first. Q4: commit --only only. 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.
  5. Stop and report in a comment on this ticket when any suite is red and the agent cannot fix it, or when a migration would break a caller outside the listed sites. Do not widen the scope to fix it.
  6. After each ticket, run bin/refresh-plugins when it changed a SKILL.md, a hook, or a CLI.
  7. Do not apply or remove the next label on any ticket.
  8. Open worktree tickets #849, #1154, #1297, #1306, and #982 may be fixed or obsolete after #1589. Comment on each. Close #853 as folded into #1594 after that ticket ships.
  9. Keep the checklist honest: a row is marked - [x] only when the site calls os-git and no longer runs git itself. A row that stays is marked out of scope or deferred, with a reason.

End state:

  1. Every row in the checklist is - [x], out of scope with a reason, or deferred with a reason and a ticket number.
  2. The wrappers in section E are deleted (rows E-08 and E-09 may be deferred).
  3. No git call starts from plugins/ outside OsGit adapters, except rows marked out of scope. Verify with this search over plugins/: Open3, system(, %x, backticks, and subprocess calls that start git.
  4. docs/implementation-status/os-git.md has a History row, docs/implementation-status.md has the os-git row, and bin/refresh-plugins has run.
  5. A final summary comment on this ticket lists each ticket number, its result, the rulings made, and the rows still deferred.

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

  1. Given the end state, when docs/os-git/call-site-checklist.md is read, then no row remains unmarked.
  2. Given the repositories, when plugins/ is searched for git calls outside OsGit, then only rows marked out of scope remain.
  3. Given the touched plugins and projects, when their suites run, then they pass.
  4. Given each ticket in the order above, when this ticket closes, then each is closed or left open with a stated reason (#1527 for #1590, the Q7 ruling for #1597).
  5. Given design section 8, when it is read, then Q1 to Q8 each record a ruling and a reason.
  6. Given the ADR step, when docs/adr/README.md is read, then an Accepted ADR names the OsGit public interface.
  7. Given a new session after bin/refresh-plugins, when the plugins load, then os-git loads and the old git-context and os:worktree entries are absent.

Blocking edges

Blocked by nothing. It runs the tickets above. The user starts it after their GPU is ready.

Origin

  • Trigger: User request in session 1a5b2630-09c9-46cb-aee4-a5a98e2e7d24 on 2026-11-06: one os-git gem for all local git work in cc-os and the user's projects.
  • Improvised this session: none
  • Chain: git logic spread over many wrappers and call sites ← grown plugin by plugin ← DESIGN (docs/os-git/use-cases-and-domain.md, docs/os-git/call-site-checklist.md)
  • Root candidate: none found; searched open issues for git, worktree, octokit, ruby port, python, statusline, reset --hard. Related but not a match: #845, #853, #857, #1527, #1554.
  • Where: docs/os-git/, plugins/os-git
  • Session: 1a5b2630-09c9-46cb-aee4-a5a98e2e7d24
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/1a5b2630-09c9-46cb-aee4-a5a98e2e7d24.jsonl
## 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 one `os-git` plugin 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) and `docs/os-git/call-site-checklist.md` (call sites). Settled by the user on 2026-11-06. Do not reopen these: 1. The gem lives inside `plugins/os-git` in cc-os now. Plugins load it by a `path:` source. It moves to `ruby-gems` later. No remote-gem work now. 2. `git-context` (`ruby-gems/git-context` and `cc-plugins/git-context`) and `os:worktree` (`plugins/os`) merge into `os-git`. 3. An old wrapper is removed only after every reference to it is updated and nothing breaks. 4. The design order is: use-cases first, domain objects second, interfaces third. Write to an interface, not to an implementation. 5. `os-context` and `os-vault` will be Ruby. Their Python git sites are replaced by the port, not by a Python shim. 6. Ticket tracking stays out of `os-git`. It stays in `forgejo-api` and `octokit`. ## 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. 1. #1585 (ADR for the OsGit public interface) and #1586 (ruby-git spike). Run both in parallel. 2. #1587 (scaffold the plugin). 3. #1588 (core objects). 4. #1589 (Worktree, Integration, handoff). 5. #1592 (os-sdlc), then #1593 (eval harness). 6. #1594 (os-backlog, folds in #853), #1595 (os-aidd-lint), #1596 (os-me), #1598 (repo-root probes). 7. #1591 (git-context merge). 8. #1605 (skill and agent text). 9. #1599, #1600, #1601, #1602, #1603, #1604 (other projects; each commits in its own repository with explicit paths). 10. #1597 (os-doc-hygiene Python: ruling, probably a deferral) . 11. #1590 (Sync and the os-vault hooks). It is blocked by #1527 (the Ruby port of the os-vault hooks). If #1527 has not shipped, mark rows G-051 to G-057 and G-187 deferred with that reason, leave #1590 open, and continue. 12. #1606 (test and fixture sweep). 13. #1607 (delete the old wrappers). 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: 1. Dispatch a fresh agent for each ticket. Use the os-sdlc pipeline for tickets that change behavior (`category/code-change`). Use the fast path (`/os-sdlc:fast-batch`) for structure-only tickets (`category/structure`). Do not run an ad hoc plan. 2. Mark each checklist row in `docs/os-git/call-site-checklist.md` as the site is replaced. Commit with explicit paths only. Never use `add -A`, `commit -a`, `checkout`, `restore`, or `stash`. 3. Close each ticket with `os-backlog close <number> --done ... --evidence ... --follow-ups ...`. Capture each follow-up through `/os-backlog:capture`, or write "none". 4. Make the rulings on design section 8 Q1 to Q8 with `/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.md` is the authority. Q1: `Sync` may stage everything. Q2: no `reset --hard` in os-git v1. Q3: no cache; measure first. Q4: `commit --only` only. 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. 5. Stop and report in a comment on this ticket when any suite is red and the agent cannot fix it, or when a migration would break a caller outside the listed sites. Do not widen the scope to fix it. 6. After each ticket, run `bin/refresh-plugins` when it changed a `SKILL.md`, a hook, or a CLI. 7. Do not apply or remove the `next` label on any ticket. 8. Open worktree tickets #849, #1154, #1297, #1306, and #982 may be fixed or obsolete after #1589. Comment on each. Close #853 as folded into #1594 after that ticket ships. 9. Keep the checklist honest: a row is marked `- [x]` only when the site calls `os-git` and no longer runs git itself. A row that stays is marked out of scope or deferred, with a reason. End state: 1. Every row in the checklist is `- [x]`, out of scope with a reason, or deferred with a reason and a ticket number. 2. The wrappers in section E are deleted (rows E-08 and E-09 may be deferred). 3. No `git` call starts from `plugins/` outside `OsGit` adapters, except rows marked out of scope. Verify with this search over `plugins/`: `Open3`, `system(`, `%x`, backticks, and `subprocess` calls that start `git`. 4. `docs/implementation-status/os-git.md` has a History row, `docs/implementation-status.md` has the `os-git` row, and `bin/refresh-plugins` has run. 5. A final summary comment on this ticket lists each ticket number, its result, the rulings made, and the rows still deferred. 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 1. Given the end state, when `docs/os-git/call-site-checklist.md` is read, then no row remains unmarked. 2. Given the repositories, when `plugins/` is searched for git calls outside `OsGit`, then only rows marked out of scope remain. 3. Given the touched plugins and projects, when their suites run, then they pass. 4. Given each ticket in the order above, when this ticket closes, then each is closed or left open with a stated reason (#1527 for #1590, the Q7 ruling for #1597). 5. Given design section 8, when it is read, then Q1 to Q8 each record a ruling and a reason. 6. Given the ADR step, when `docs/adr/README.md` is read, then an Accepted ADR names the `OsGit` public interface. 7. Given a new session after `bin/refresh-plugins`, when the plugins load, then `os-git` loads and the old `git-context` and `os:worktree` entries are absent. ## Blocking edges Blocked by nothing. It runs the tickets above. The user starts it after their GPU is ready. ## Origin - Trigger: User request in session 1a5b2630-09c9-46cb-aee4-a5a98e2e7d24 on 2026-11-06: one os-git gem for all local git work in cc-os and the user's projects. - Improvised this session: none - Chain: git logic spread over many wrappers and call sites ← grown plugin by plugin ← DESIGN (docs/os-git/use-cases-and-domain.md, docs/os-git/call-site-checklist.md) - Root candidate: none found; searched open issues for git, worktree, octokit, ruby port, python, statusline, reset --hard. Related but not a match: #845, #853, #857, #1527, #1554. - Where: docs/os-git/, plugins/os-git - Session: 1a5b2630-09c9-46cb-aee4-a5a98e2e7d24 - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/1a5b2630-09c9-46cb-aee4-a5a98e2e7d24.jsonl
Author
Owner

Orchestrator started, session 5b14a4ef-91b2-45c0-a729-baa17682a39a. Artifacts committed in 739824a9. All 26 tickets pass validate-template. First group: #1585, #1586, #1608, #1609.

Orchestrator started, session 5b14a4ef-91b2-45c0-a729-baa17682a39a. Artifacts committed in 739824a9. All 26 tickets pass validate-template. First group: #1585, #1586, #1608, #1609.
Author
Owner

Final summary of the os-git build

Result: plugins/os-git is the one set of git objects. OsSdlc::Git, Worktree::Git, and the commit_context fork are deleted. No production Ruby in plugins/ 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).

Ticket Result Evidence
#1608, #1609 closed independent fixes
#1585, #1586 closed ADR, spike
#1587, #1588, #1589 closed, hand-finished #1589 93706787
#1592 closed 89140417
#1593, #1595, #1596, #1598 closed ea19631d
#1594 closed, hand-finished 177518ea
#1591 closed, hand-finished ed6d75ca, cc-plugins 9df6794
#1605 closed 31f29707, cc-plugins 2125188
#1599 closed pb-mirror dcfaf10, decision-model b4090d1
#1600 closed; G-075 to G-078 out of scope cc-plugins 6491d48
#1602 closed llf-schema ee19c4e
#1603, #1604 closed; out of scope b07bdb1e
#1606, #1607 closed; #1607 AC 5 moved to #1631 9cd21db7
#1601 OPEN; done on branch, merge blocked delta-refinery ticket-1601, 749 runs, 0 failures
#1597, #1590 OPEN; blocked by #1554, #1527 rows deferred, ddb53af1

Rulings: 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:

  1. delta-refinery: commit or set aside the edits in the main checkout, then run worktree finish ticket-1601. Then close #1601 and mark G-079 to G-082.
  2. #853 depends on open #866. Remove that dependency, or close #866, so #853 can close.
  3. #1631: retire the git-context and os:worktree names. It needs the os-git agents and PATH.

Deviations:

  • Hand-finishes on #1587, #1588, #1589, #1594, #1591. Reroutes on #1589, #1591. Owner sketch added to #1594.
  • #1599 to #1604 ran outside the pipeline: the tickets live in the cc-os tracker, and some repositories have no .sdlc setup.
  • #1607 did not remove the git-context plugin, the gem, or os:worktree (ruling 1 of the final batch).
  • base_branch edge: a project with no key that runs a feature branch in its primary checkout gets a vacuous unchanged check; a detached primary raises.
  • The commit_context fork was untracked, so git cannot restore it.
  • A batch builder used git stash, against the rule, and popped it. The stack was checked and is intact.
  • plugins/*/design/generated still name deleted classes.
  • An orchestrator grep printed lines from held-out eval cases, and the predictor printed part of held-out session 1a5b2630. Neither was used.
## Final summary of the os-git build Result: `plugins/os-git` is the one set of git objects. `OsSdlc::Git`, `Worktree::Git`, and the `commit_context` fork are deleted. No production Ruby in `plugins/` 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). | Ticket | Result | Evidence | |---|---|---| | #1608, #1609 | closed | independent fixes | | #1585, #1586 | closed | ADR, spike | | #1587, #1588, #1589 | closed, hand-finished | #1589 `93706787` | | #1592 | closed | `89140417` | | #1593, #1595, #1596, #1598 | closed | `ea19631d` | | #1594 | closed, hand-finished | `177518ea` | | #1591 | closed, hand-finished | `ed6d75ca`, cc-plugins `9df6794` | | #1605 | closed | `31f29707`, cc-plugins `2125188` | | #1599 | closed | pb-mirror `dcfaf10`, decision-model `b4090d1` | | #1600 | closed; G-075 to G-078 out of scope | cc-plugins `6491d48` | | #1602 | closed | llf-schema `ee19c4e` | | #1603, #1604 | closed; out of scope | `b07bdb1e` | | #1606, #1607 | closed; #1607 AC 5 moved to #1631 | `9cd21db7` | | #1601 | OPEN; done on branch, merge blocked | delta-refinery `ticket-1601`, 749 runs, 0 failures | | #1597, #1590 | OPEN; blocked by #1554, #1527 | rows deferred, `ddb53af1` | Rulings: 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: 1. delta-refinery: commit or set aside the edits in the main checkout, then run `worktree finish ticket-1601`. Then close #1601 and mark G-079 to G-082. 2. #853 depends on open #866. Remove that dependency, or close #866, so #853 can close. 3. #1631: retire the git-context and os:worktree names. It needs the os-git agents and PATH. Deviations: - Hand-finishes on #1587, #1588, #1589, #1594, #1591. Reroutes on #1589, #1591. Owner sketch added to #1594. - #1599 to #1604 ran outside the pipeline: the tickets live in the cc-os tracker, and some repositories have no .sdlc setup. - #1607 did not remove the git-context plugin, the gem, or os:worktree (ruling 1 of the final batch). - `base_branch` edge: a project with no key that runs a feature branch in its primary checkout gets a vacuous unchanged check; a detached primary raises. - The commit_context fork was untracked, so git cannot restore it. - A batch builder used `git stash`, against the rule, and popped it. The stack was checked and is intact. - plugins/*/design/generated still name deleted classes. - An orchestrator grep printed lines from held-out eval cases, and the predictor printed part of held-out session 1a5b2630. Neither was used.
Author
Owner

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

## 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
Author
Owner

os-git integration track, 2026-11-09:

  • os-sdlc coverage: every git call in os-sdlc lib/bin/hooks already uses OsGit; list in docs/os-git/os-sdlc-coverage.md (main cf551aa36). #1645 can start.
  • #1630 closed: os_git by path to ~/dev/cc-os/plugins/os-git in os-sdlc, os-me, os-backlog; no Ruby code reads ~/.claude/plugins/os-git; bin/refresh-plugins names missing ~/dev checkouts. ADR-0310 (main 4b8f679c), ruling 95, merge f5303d531.
  • New #1648: forgejo-api to the same path source.
  • Open in this track: #1631, #1613, #1629, #1627, #1601, #1597, #1590.
os-git integration track, 2026-11-09: - os-sdlc coverage: every git call in os-sdlc lib/bin/hooks already uses OsGit; list in `docs/os-git/os-sdlc-coverage.md` (main cf551aa36). #1645 can start. - #1630 closed: os_git by path to `~/dev/cc-os/plugins/os-git` in os-sdlc, os-me, os-backlog; no Ruby code reads `~/.claude/plugins/os-git`; `bin/refresh-plugins` names missing `~/dev` checkouts. ADR-0310 (main 4b8f679c), ruling 95, merge f5303d531. - New #1648: forgejo-api to the same path source. - Open in this track: #1631, #1613, #1629, #1627, #1601, #1597, #1590.
Author
Owner

os-git integration track, end of session 2026-11-09:

  • Closed: #1630 (ADR-0310, os_git by ~/dev path), #1629 (os-backlog tests pass fake runners), #1613 (ruling 97: unobserved hardening, no code).
  • #1631: cc-os side merged (main 1177851e3, ADR-0311 /os-git:worktree; agents os-git:committer, os-git:repo-initializer; skills /os-git:commit, /os-git:repo-init). waiting on github jaredswanson/cc-plugins#94 to remove git-context.
  • #1601: branch ticket-1601 in delta-refinery is ready (a52ff41). waiting on Jared: four uncommitted edits from 2026-07-14 block worktree finish.
  • #1597: waiting on #1554 (ruling 96 confirms ruling 35: no CLI bridge, the Ruby port uses the gem).
  • #1590: waiting on #1527 (Ruby port of the os-vault hooks).
  • #1627: the mutation track owns it, together with #1645.
  • New: #1648 (forgejo-api to the path source).
os-git integration track, end of session 2026-11-09: - Closed: #1630 (ADR-0310, os_git by ~/dev path), #1629 (os-backlog tests pass fake runners), #1613 (ruling 97: unobserved hardening, no code). - #1631: cc-os side merged (main 1177851e3, ADR-0311 `/os-git:worktree`; agents `os-git:committer`, `os-git:repo-initializer`; skills `/os-git:commit`, `/os-git:repo-init`). `waiting` on github jaredswanson/cc-plugins#94 to remove git-context. - #1601: branch `ticket-1601` in delta-refinery is ready (a52ff41). `waiting` on Jared: four uncommitted edits from 2026-07-14 block `worktree finish`. - #1597: `waiting` on #1554 (ruling 96 confirms ruling 35: no CLI bridge, the Ruby port uses the gem). - #1590: `waiting` on #1527 (Ruby port of the os-vault hooks). - #1627: the mutation track owns it, together with #1645. - New: #1648 (forgejo-api to the path source).
Author
Owner

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).

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).
Author
Owner

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.

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.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jared/cc-os#1610
No description provided.