Spike: confirm ruby-git v6 coverage and hook load cost #1586
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#1586
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 Backend table in design section 4.2 marks many ruby-git v6 operations "unconfirmed" or "absent". Version 6 also adds
activesupportas a dependency, which may slow hooks that start often. The choice between aBackend::Clidefault and aBackend::RubyGitdefault depends on these facts. Settled decisions are in design section 1 (docs/os-git/use-cases-and-domain.md): the gem lives inplugins/os-gitwith apath:source;git-contextandos:worktreemerge intoos-git; old wrappers go only after all references are updated; design order is use-cases, objects, interfaces;os-contextandos-vaultbecome Ruby; ticket tracking stays out ofos-git.Reproduce
n/a: this is a measurement task. Evidence base: design section 4.2 and Appendix B (
docs/os-git/use-cases-and-domain.md).Approach
Run the checks against the released
git6.x gem, not only against master. Use a scratch repository. Write results into Appendix B of the design doc under a headingSpike results.Required work:
Spike resultssection to Appendix B with one row per Backend table row that was "unconfirmed" or "absent": confirmed, absent, or works only through the rawcaptureescape hatch — check: presentSpike resultsindocs/os-git/use-cases-and-domain.mdOrchestrator work: run the timing measurements and record the Cli versus RubyGit default decision for the ADR ticket (#1585) and for the scaffold ticket.
Acceptance criteria
require "git"(withactivesupport) is timed against anOpen3call togit rev-parse --show-toplevel, then Appendix B lists the median of at least 10 runs for each.Git::Repositorymethods are compared, then Appendix B names any method that exists only on master.timeout:, when ruby-git kills it, then Appendix B states whether the child process ends (the README warns it may hang afterSIGKILL).commit --onlyandupdate-indexgo throughcapture, or names a native call.Non-goals
No production code. No change to any plugin.
Blocking edges
None. The ADR ticket (#1585) can run in parallel. Scaffold waits for this ticket.
Origin
Work started by the #1610 orchestrator, session 5b14a4ef-91b2-45c0-a729-baa17682a39a. Branch: ticket-1586.
Resolution
Done: Appendix B Spike results records every Backend-table cell, timings, master comparison, timeout result, and the adapter decision. Q3 records the default adapter and the per-prompt hook rule.
Evidence:
e53390b5. Medians over 21 cold starts: baseline 42.5 ms, Open3 rev-parse 45.0 ms, require git plus call 210.8 ms, .git walk 43.2 ms. 135 Repository methods identical on 6.0.0 and master. Timeout killed hook and child. 6 of 21 rows work through public methods.Follow-ups: Backend::RubyGit dropped; #1587 item 5 records why in the leaf. setsid and MERGE_HEAD-in-worktree checks go to Backend::Cli tests in #1587 and #1589. Bundler timing dropped: the gem is not used.