Skip to content

feat(megarepo): cold named-branch worktree GC (#771)#780

Draft
schickling-assistant wants to merge 12 commits into
mainfrom
schickling/2026-06-10-771
Draft

feat(megarepo): cold named-branch worktree GC (#771)#780
schickling-assistant wants to merge 12 commits into
mainfrom
schickling/2026-06-10-771

Conversation

@schickling-assistant

Copy link
Copy Markdown
Collaborator

Refs #771 — reframes the epic from artifact-pruning to safely deleting cold named-branch worktrees from the store (the dominant accumulation default GC can't reclaim today, since it blanket-protects every named ref).

This PR is design only (VRS docs); implementation pending.

What's here

  • docs/decisions/0001–0008 — the layered-gate model, one decision per file
  • docs/glossary.md — domain language (cold, live set, lossless floor, staleness, archive-as-trash, reap…)
  • docs/spec.md — a "Cold named-branch reclamation (designed, not yet implemented)" subsection

Agreed model (gates, in order, folded into default mr store gc)

  1. Cross-megarepo live-set veto (hard) — never delete a worktree any registered workspace consumes
  2. Lossless floor — commits reachable on a remote + capture-first
  3. Staleness — GitHub PR merged (git-ancestor is unusable under squash-merge)
  4. Grace windows — three timers: absence / post-merge / archive retention
  5. Capture = archive → reap on TTL — unified with the <repo>/.archive/ worktree convention

Evidence

  • Read-only survey of the real store (323 named-branch worktrees; 122 in this repo; 72 merged PRs) — proved squash-merge breaks the git "merged" signal and that path-based generated-vs-source classification is unreliable.
  • Isolated-store, real-mr-binary end-to-end experiments proved cross-megarepo protection works only when the consumer is registered (a repos/ symlink alone gives zero protection), and surfaced a latent pre-existing bug: a repinned-but-unre-registered workspace's live worktree can be deleted by a concurrent GC.
  • No real store was mutated.

Open (tuning, captured in docs)

Timer defaults, closed-PR tier, and which mr commands must refresh the liveness record (the latent bug).

🤖 Generated with Claude Code

Posted on behalf of @schickling
field value
agent_name 💓 cl1-pulse
agent_session_id e08c6de8-96a5-4855-992d-3d660b68a0e3
agent_tool Claude Code
agent_tool_version 2.1.165
agent_runtime Claude Code 2.1.165
agent_model claude-opus-4-8
runtime_profile /nix/store/h2fzkx1acfyaidg5bmdamarf7856a2s8-coding-agent-runtime-profile/share/coding-agents/profile.json
skills_manifest /nix/store/3v899lwjyzgkr7x7h4m5hlbbpn1jkbds-agent-skills-corpus/share/agent-skills/manifest.json
worktree effect-utils/schickling/2026-06-10-771
machine dev3
tooling_profile dotfiles@unknown-dirty

Reframe #771 from artifact-pruning to safely deleting cold named-branch
worktrees from the store (the dominant store accumulation that default GC
cannot currently reclaim, since it blanket-protects every named ref).

Captures the agreed layered-gate model as decision records 0001-0008, a
glossary, and a design subsection in spec.md:
- cross-megarepo live-set veto (hard) — verified end-to-end in an isolated store
- lossless floor (commit reachable on remote + capture-first)
- merged-PR as the primary staleness signal (git-ancestor is unusable under
  squash-merge)
- three reclamation timers (absence / post-merge / archive retention)
- capture-then-delete unified with the .archive/ worktree convention

Backed by a read-only real-store survey and isolated-store experiments
(no real store mutated). Implementation pending.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jun 11, 2026

Copy link
Copy Markdown

Storybook Previews

No storybooks were deployed.

github-actions Bot added a commit that referenced this pull request Jun 11, 2026
github-actions Bot added a commit that referenced this pull request Jun 11, 2026
@github-actions

github-actions Bot commented Jun 11, 2026

Copy link
Copy Markdown

CI Measurements

partial - advisory gate - readiness partial (17/26 enabled observations gateable) - commit 9604d77 - protocol devenv-perf-warm-median-v2

No regressions. 1 probe got faster; 23 neutral or ungated rows are collapsed below.

Measurement change vs baseline chart

SVG source

devenv / quality gates

What changed? Group Probe Baseline -> current Raw change Impact Confidence
faster devenv / quality gates Warm cached check:quick 3.632 s -> 3.248 s -0.384 s / -10.6% -0.61x paired n=5, 25-75% delta -4.212 s..-0.221 s

nix / closures / packages

What changed? Group Probe Baseline -> current Raw change Impact Confidence
unchanged nix / closures / packages Nix sources closure size 0 B -> 0 B +0 B / n/a n/a unknown, baseline n=23, current n=1
unchanged nix / closures / packages Nix sources closure size 0 B -> 0 B +0 B / n/a n/a unknown, baseline n=23, current n=1
unchanged nix / closures / packages Nix sources closure size 0 B -> 0 B +0 B / n/a n/a unknown, baseline n=23, current n=1
unchanged nix / closures / packages Node / pnpm closure size 0 B -> 0 B +0 B / n/a n/a unknown, baseline n=23, current n=1
unchanged nix / closures / packages Node / pnpm closure size 0 B -> 0 B +0 B / n/a n/a unknown, baseline n=23, current n=1
unchanged nix / closures / packages Node / pnpm closure size 0 B -> 0 B +0 B / n/a n/a unknown, baseline n=23, current n=1
unchanged nix / closures / packages Rust closure size 0 B -> 0 B +0 B / n/a n/a unknown, baseline n=23, current n=1
unchanged nix / closures / packages Rust closure size 0 B -> 0 B +0 B / n/a n/a unknown, baseline n=23, current n=1
unchanged nix / closures / packages Rust closure size 0 B -> 0 B +0 B / n/a n/a unknown, baseline n=23, current n=1
Unchanged / 0-impact measurements (16)

These rows had compatible baseline data, but their semantic impact rounded to 0.00x because the movement was below the configured budget, below the noise floor, or inside the robust noise band.

devenv / devenv cli

Group Probe Baseline -> current Raw change Impact Gate Evidence Why hidden
devenv / devenv cli devenv processes --help 0.019 s -> 0.02 s +0.001 s / 5.3% 0.00x yes paired n=9, 25-75% delta 0 s..0.003 s Too small to matter
devenv / devenv cli devenv tasks list 0.042 s -> 0.041 s -0.001 s / -2.4% 0.00x yes paired n=9, 25-75% delta -0.003 s..0 s Too small to matter

devenv / devenv shell

Group Probe Baseline -> current Raw change Impact Gate Evidence Why hidden
devenv / devenv shell Warm shell eval 2.043 s -> 2.004 s -0.039 s / -1.9% 0.00x yes paired n=5, 25-75% delta -0.084 s..-0.02 s Too small to matter

devenv / genie

Group Probe Baseline -> current Raw change Impact Gate Evidence Why hidden
devenv / genie Genie check direct 6.654 s -> 6.356 s -0.298 s / -4.5% 0.00x yes paired n=5, 25-75% delta -0.502 s..0.02 s Unchanged
devenv / genie Genie run task 1.274 s -> 1.267 s -0.007 s / -0.5% 0.00x yes paired n=5, 25-75% delta -0.028 s..0.034 s Too small to matter

devenv / quality gates

Group Probe Baseline -> current Raw change Impact Gate Evidence Why hidden
devenv / quality gates Forced check:quick 10.85 s -> 10.86 s +0.01 s / 0.1% 0.00x yes paired n=3, 25-75% delta -0.169 s..0.829 s Too small to matter

devenv / workspace setup

Group Probe Baseline -> current Raw change Impact Gate Evidence Why hidden
devenv / workspace setup pnpm install task 0.703 s -> 0.699 s -0.004 s / -0.6% 0.00x yes paired n=5, 25-75% delta -0.006 s..0.001 s Too small to matter

nix / closures / packages

Group Probe Baseline -> current Raw change Impact Gate Evidence Why hidden
nix / closures / packages Total closure size 535.4 MiB -> 535.8 MiB +487.7 KiB / 0.1% 0.00x yes noise_floor, baseline n=23, current n=1 Too small to matter
nix / closures / packages Total serialized NAR size 535.4 MiB -> 535.8 MiB +487.7 KiB / 0.1% 0.00x yes within_budget, baseline n=22, current n=1 Slightly higher, ok
nix / closures / packages Total closure size 156.3 MiB -> 156.3 MiB +4.9 KiB / 0% 0.00x yes noise_floor, baseline n=23, current n=1 Too small to matter
nix / closures / packages Total serialized NAR size 156.3 MiB -> 156.3 MiB +4.9 KiB / 0% 0.00x yes within_budget, baseline n=22, current n=1 Slightly higher, ok
nix / closures / packages Total closure path count 79 count -> 79 count +0 count / 0% 0.00x yes noise_floor, baseline n=23, current n=1 Too small to matter
nix / closures / packages Total closure path count 5 count -> 5 count +0 count / 0% 0.00x yes noise_floor, baseline n=23, current n=1 Too small to matter
nix / closures / packages Total closure path count 8 count -> 8 count +0 count / 0% 0.00x yes noise_floor, baseline n=23, current n=1 Too small to matter
nix / closures / packages Total closure size 144.4 MiB -> 144.4 MiB +0 B / 0% 0.00x yes noise_floor, baseline n=23, current n=1 Too small to matter
nix / closures / packages Total serialized NAR size 144.4 MiB -> 144.4 MiB +0 B / 0% 0.00x yes noise_floor, baseline n=22, current n=1 Too small to matter
Diagnostic / ungated measurements (7)

source / effect-utils

Group Probe Current Baseline Impact Gate Reason Evidence
source / effect-utils Genie runtime lines 19809 lines 19423 lines diagnostic disabled Diagnostic only diagnostic, baseline n=24, current n=66
source / effect-utils Genie CI workflow helpers lines 7418 lines 7318 lines diagnostic disabled Diagnostic only diagnostic, baseline n=24, current n=9
source / effect-utils Genie runtime files 66 count 64 count diagnostic disabled Diagnostic only diagnostic, baseline n=24, current n=66
source / effect-utils Nix workspace tools lines 3632 lines 3631 lines diagnostic disabled Diagnostic only diagnostic, baseline n=24, current n=14
source / effect-utils Genie CI workflow helpers files 9 count 9 count diagnostic disabled Diagnostic only diagnostic, baseline n=24, current n=9
source / effect-utils Nix workspace tools files 14 count 14 count diagnostic disabled Diagnostic only diagnostic, baseline n=24, current n=14

devenv / devenv shell

Group Probe Current Baseline Impact Gate Reason Evidence
devenv / devenv shell Shell eval with OTEL trace 27.271 s n/a n/a missing_baseline No baseline yet missing_baseline, baseline n=0, current n=1
All measurements
Status Gate Target Observation Dimensions Baseline Current Delta Ratio Impact
pass yes Dev shell Warm cached check:quick aggregation=median
devenvRev=2cf62a010000b70f15c78a72761fad7c9e6fb47a
measuredSampleCount=5
measurementProtocol=devenv-perf-warm-median-v2
otelServiceName=devenv-perf-ci
pairedOrderProtocol=balanced-seeded-alternating-v1
pairedOrderSeed=27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4
pairedSampleCount=5
phase=warm
probe=task_check_quick_warm
probeLabel=Warm cached check:quick
sampleCount=11
status=0
taskCacheMode=warm
warmupCount=1
workload=cached-no-op
3.632 s 3.248 s -0.384 s -10.6% -0.61x
pass yes Genie package Total closure size bucket=total 535.4 MiB 535.8 MiB +487.7 KiB 0.1% 0.00x
pass yes Genie package Total serialized NAR size bucket=total
sizeKind=nar
535.4 MiB 535.8 MiB +487.7 KiB 0.1% 0.00x
pass yes oxlint npm package Total closure size bucket=total 156.3 MiB 156.3 MiB +4.9 KiB 0% 0.00x
pass yes oxlint npm package Total serialized NAR size bucket=total
sizeKind=nar
156.3 MiB 156.3 MiB +4.9 KiB 0% 0.00x
pass disabled effect-utils repository Genie runtime lines scope=genie_runtime 19423 lines 19809 lines +386 lines 2% diagnostic
pass disabled effect-utils repository Genie CI workflow helpers lines scope=genie_ci_workflow 7318 lines 7418 lines +100 lines 1.4% diagnostic
pass disabled effect-utils repository Genie runtime files scope=genie_runtime 64 count 66 count +2 count 3.1% diagnostic
pass disabled effect-utils repository Nix workspace tools lines scope=nix_workspace_tools 3631 lines 3632 lines +1 lines 0% diagnostic
pass yes Dev shell Genie check direct aggregation=median
devenvRev=2cf62a010000b70f15c78a72761fad7c9e6fb47a
measuredSampleCount=5
measurementProtocol=devenv-perf-warm-median-v2
otelServiceName=devenv-perf-ci
pairedOrderProtocol=balanced-seeded-alternating-v1
pairedOrderSeed=27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4
pairedSampleCount=5
phase=warm
probe=genie_check_direct
probeLabel=Genie check direct
sampleCount=11
status=0
warmupCount=1
6.654 s 6.356 s -0.298 s -4.5% 0.00x
pass yes Dev shell Warm shell eval aggregation=median
devenvRev=2cf62a010000b70f15c78a72761fad7c9e6fb47a
measuredSampleCount=5
measurementProtocol=devenv-perf-warm-median-v2
otelServiceName=devenv-perf-ci
pairedOrderProtocol=balanced-seeded-alternating-v1
pairedOrderSeed=27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4
pairedSampleCount=5
phase=warm
probe=shell_eval_warm
probeLabel=Warm shell eval
sampleCount=11
status=0
warmupCount=1
2.043 s 2.004 s -0.039 s -1.9% 0.00x
pass yes Dev shell Forced check:quick aggregation=median
devenvRev=2cf62a010000b70f15c78a72761fad7c9e6fb47a
measuredSampleCount=3
measurementProtocol=devenv-perf-warm-median-v2
otelServiceName=devenv-perf-ci
pairedOrderProtocol=balanced-seeded-alternating-v1
pairedOrderSeed=27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4
pairedSampleCount=3
phase=warm
probe=task_check_quick_forced
probeLabel=Forced check:quick
sampleCount=6
status=0
taskCacheMode=refresh
warmupCount=0
workload=forced-task-cache
10.85 s 10.86 s +0.01 s 0.1% 0.00x
pass yes Dev shell Genie run task aggregation=median
devenvRev=2cf62a010000b70f15c78a72761fad7c9e6fb47a
measuredSampleCount=5
measurementProtocol=devenv-perf-warm-median-v2
otelServiceName=devenv-perf-ci
pairedOrderProtocol=balanced-seeded-alternating-v1
pairedOrderSeed=27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4
pairedSampleCount=5
phase=warm
probe=task_genie_run
probeLabel=Genie run task
sampleCount=11
status=0
warmupCount=1
1.274 s 1.267 s -0.007 s -0.5% 0.00x
pass yes Dev shell pnpm install task aggregation=median
devenvRev=2cf62a010000b70f15c78a72761fad7c9e6fb47a
measuredSampleCount=5
measurementProtocol=devenv-perf-warm-median-v2
otelServiceName=devenv-perf-ci
pairedOrderProtocol=balanced-seeded-alternating-v1
pairedOrderSeed=27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4
pairedSampleCount=5
phase=warm
probe=task_pnpm_install
probeLabel=pnpm install task
sampleCount=11
status=0
warmupCount=1
0.703 s 0.699 s -0.004 s -0.6% 0.00x
pass yes Dev shell devenv processes --help aggregation=median
devenvRev=2cf62a010000b70f15c78a72761fad7c9e6fb47a
measuredSampleCount=9
measurementProtocol=devenv-perf-warm-median-v2
otelServiceName=devenv-perf-ci
pairedOrderProtocol=balanced-seeded-alternating-v1
pairedOrderSeed=27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4
pairedSampleCount=9
phase=warm
probe=processes_help
probeLabel=devenv processes --help
sampleCount=19
status=0
warmupCount=1
0.019 s 0.02 s +0.001 s 5.3% 0.00x
pass yes Dev shell devenv tasks list aggregation=median
devenvRev=2cf62a010000b70f15c78a72761fad7c9e6fb47a
measuredSampleCount=9
measurementProtocol=devenv-perf-warm-median-v2
otelServiceName=devenv-perf-ci
pairedOrderProtocol=balanced-seeded-alternating-v1
pairedOrderSeed=27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4
pairedSampleCount=9
phase=warm
probe=tasks_list
probeLabel=devenv tasks list
sampleCount=19
status=0
warmupCount=1
0.042 s 0.041 s -0.001 s -2.4% 0.00x
pass disabled effect-utils repository Genie CI workflow helpers files scope=genie_ci_workflow 9 count 9 count +0 count 0% diagnostic
unknown missing_baseline Genie package Nix sources closure size bucket=nix-sources 0 B 0 B +0 B n/a n/a
unknown missing_baseline Megarepo package Nix sources closure size bucket=nix-sources 0 B 0 B +0 B n/a n/a
unknown missing_baseline oxlint npm package Nix sources closure size bucket=nix-sources 0 B 0 B +0 B n/a n/a
pass disabled effect-utils repository Nix workspace tools files scope=nix_workspace_tools 14 count 14 count +0 count 0% diagnostic
unknown missing_baseline Genie package Node / pnpm closure size bucket=node 0 B 0 B +0 B n/a n/a
unknown missing_baseline Megarepo package Node / pnpm closure size bucket=node 0 B 0 B +0 B n/a n/a
unknown missing_baseline oxlint npm package Node / pnpm closure size bucket=node 0 B 0 B +0 B n/a n/a
unknown missing_baseline Genie package Rust closure size bucket=rust 0 B 0 B +0 B n/a n/a
unknown missing_baseline Megarepo package Rust closure size bucket=rust 0 B 0 B +0 B n/a n/a
unknown missing_baseline oxlint npm package Rust closure size bucket=rust 0 B 0 B +0 B n/a n/a
pass yes Genie package Total closure path count bucket=total 79 count 79 count +0 count 0% 0.00x
pass yes Megarepo package Total closure path count bucket=total 5 count 5 count +0 count 0% 0.00x
pass yes oxlint npm package Total closure path count bucket=total 8 count 8 count +0 count 0% 0.00x
pass yes Megarepo package Total closure size bucket=total 144.4 MiB 144.4 MiB +0 B 0% 0.00x
pass yes Megarepo package Total serialized NAR size bucket=total
sizeKind=nar
144.4 MiB 144.4 MiB +0 B 0% 0.00x
missing_baseline missing_baseline Dev shell Shell eval with OTEL trace aggregation=median
devenvRev=2cf62a010000b70f15c78a72761fad7c9e6fb47a
measuredSampleCount=1
measurementProtocol=devenv-perf-warm-median-v2
otelServiceName=devenv-perf-ci
pairedOrderProtocol=balanced-seeded-alternating-v1
pairedOrderSeed=27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4
pairedSampleCount=1
phase=warm
probe=shell_eval_traced
probeLabel=Shell eval with OTEL trace
sampleCount=2
status=0
warmupCount=0
n/a 27.271 s n/a n/a n/a
Previous runs
Commit Status Gate Top changes
0d2fb3c partial advisory Slightly lower, ok Dev shell pnpm install task -0.143 s / -13.1%
Too small to matter Dev shell Warm shell eval +0.017 s / 0.8%
Too small to matter Genie package Total closure size +487.7 KiB / 0.1%
06030a8 partial advisory Slightly lower, ok Dev shell Genie check direct -0.214 s / -3.5%
Too small to matter Genie package Total closure size +487.7 KiB / 0.1%
Slightly higher, ok Genie package Total serialized NAR size +487.7 KiB / 0.1%
Source-of-truth JSON
{
  "schemaVersion": 1,
  "title": "CI Measurements",
  "status": "partial",
  "gate": "advisory",
  "readiness": "partial (17/26 enabled observations gateable)",
  "commit": {
    "shortSha": "9604d77",
    "sha": "9604d776fc4c4b51b93607c76703f1329232d40a"
  },
  "run": {
    "id": "27352713377",
    "attempt": "1",
    "url": "https://github.com/overengineeringstudio/effect-utils/actions/runs/27352713377"
  },
  "baseline": null,
  "protocol": "devenv-perf-warm-median-v2",
  "chart": {
    "meaning": "semantic-impact",
    "zeroImpactMeaning": "no actionable PR impact after budgets, noise floor, and robust evidence checks",
    "svg": "https://raw.githubusercontent.com/overengineeringstudio/effect-utils/ci-measurement-assets/ci-measurements/pr-780/9604d776fc4c4b51b93607c76703f1329232d40a/run-27352713377-attempt-1/ci-measurements.svg",
    "lightPng": "https://raw.githubusercontent.com/overengineeringstudio/effect-utils/ci-measurement-assets/ci-measurements/pr-780/9604d776fc4c4b51b93607c76703f1329232d40a/run-27352713377-attempt-1/ci-measurements.png",
    "darkPng": "https://raw.githubusercontent.com/overengineeringstudio/effect-utils/ci-measurement-assets/ci-measurements/pr-780/9604d776fc4c4b51b93607c76703f1329232d40a/run-27352713377-attempt-1/ci-measurements-dark.png"
  },
  "measurements": [
    {
      "id": "task_check_quick_warm",
      "label": "Warm cached check:quick",
      "group": "devenv / quality gates",
      "path": [
        "devenv",
        "quality gates",
        "check:quick"
      ],
      "groupPath": [
        "devenv",
        "quality gates"
      ],
      "status": "pass",
      "direction": "improved",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "within_budget",
      "comparisonMode": "paired",
      "unit": "seconds",
      "baseline": 3.632,
      "current": 3.248,
      "delta": -0.3839999999999999,
      "ratio": 0.894273127753304,
      "semanticImpactScore": -0.6084801762114531,
      "semanticImpactKind": "improvement",
      "baselineSources": 5,
      "currentSamples": 5,
      "pairedSamples": 5,
      "evidenceDeltaLower": -4.212,
      "evidenceDeltaUpper": -0.221,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "workload": "cached-no-op",
        "taskCacheMode": "warm",
        "probe": "task_check_quick_warm",
        "probeLabel": "Warm cached check:quick",
        "status": 0,
        "sampleCount": 11,
        "warmupCount": 1,
        "measuredSampleCount": 5,
        "pairedSampleCount": 5,
        "pairedOrderProtocol": "balanced-seeded-alternating-v1",
        "pairedOrderSeed": "27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4",
        "measurementProtocol": "devenv-perf-warm-median-v2",
        "aggregation": "median",
        "phase": "warm",
        "devenvRev": "2cf62a010000b70f15c78a72761fad7c9e6fb47a",
        "otelServiceName": "devenv-perf-ci"
      }
    },
    {
      "id": "nix.closure.nar_size",
      "label": "Total closure size",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "genie",
        "total",
        "closure-size",
        "nix closure"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "pass",
      "direction": "unchanged",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "noise_floor",
      "comparisonMode": "budget",
      "unit": "bytes",
      "baseline": 561373688,
      "current": 561873128,
      "delta": 499440,
      "ratio": 1.0008896747579663,
      "semanticImpactScore": 0,
      "semanticImpactKind": "neutral",
      "baselineSources": 23,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -10728033.76,
      "evidenceDeltaUpper": 11726913.76,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "total"
      }
    },
    {
      "id": "nix.closure.serialized_nar_size",
      "label": "Total serialized NAR size",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "genie",
        "total",
        "serialized-nar-size",
        "nix closure diagnostics"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "pass",
      "direction": "regressed",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "within_budget",
      "comparisonMode": "diagnostic",
      "unit": "bytes",
      "baseline": 561373688,
      "current": 561873128,
      "delta": 499440,
      "ratio": 1.0008896747579663,
      "semanticImpactScore": 0,
      "semanticImpactKind": "neutral",
      "baselineSources": 22,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -55637928.800000004,
      "evidenceDeltaUpper": 56636808.800000004,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "total",
        "sizeKind": "nar"
      }
    },
    {
      "id": "nix.closure.nar_size",
      "label": "Total closure size",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "oxlint-npm",
        "total",
        "closure-size",
        "nix closure"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "pass",
      "direction": "unchanged",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "noise_floor",
      "comparisonMode": "budget",
      "unit": "bytes",
      "baseline": 163874192,
      "current": 163879208,
      "delta": 5016,
      "ratio": 1.0000306088465718,
      "semanticImpactScore": 0,
      "semanticImpactKind": "neutral",
      "baselineSources": 23,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -10480744,
      "evidenceDeltaUpper": 10490776,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "total"
      }
    },
    {
      "id": "nix.closure.serialized_nar_size",
      "label": "Total serialized NAR size",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "oxlint-npm",
        "total",
        "serialized-nar-size",
        "nix closure diagnostics"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "pass",
      "direction": "regressed",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "within_budget",
      "comparisonMode": "diagnostic",
      "unit": "bytes",
      "baseline": 163874192,
      "current": 163879208,
      "delta": 5016,
      "ratio": 1.0000306088465718,
      "semanticImpactScore": 0,
      "semanticImpactKind": "neutral",
      "baselineSources": 22,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -16382403.200000001,
      "evidenceDeltaUpper": 16392435.200000001,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "total",
        "sizeKind": "nar"
      }
    },
    {
      "id": "source.lines",
      "label": "Genie runtime lines",
      "group": "source / effect-utils",
      "path": [
        "source",
        "effect-utils",
        "packages",
        "genie",
        "source / genie"
      ],
      "groupPath": [
        "source",
        "effect-utils"
      ],
      "status": "pass",
      "direction": "regressed",
      "gateable": false,
      "gateReason": "disabled",
      "confidence": "diagnostic",
      "comparisonMode": "budget",
      "unit": "lines",
      "baseline": 19423,
      "current": 19809,
      "delta": 386,
      "ratio": 1.0198733460330536,
      "semanticImpactScore": null,
      "semanticImpactKind": "diagnostic",
      "baselineSources": 24,
      "currentSamples": 66,
      "pairedSamples": 0,
      "evidenceDeltaLower": -1556.3000000000002,
      "evidenceDeltaUpper": 2328.3,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "scope": "genie_runtime"
      }
    },
    {
      "id": "source.lines",
      "label": "Genie CI workflow helpers lines",
      "group": "source / effect-utils",
      "path": [
        "source",
        "effect-utils",
        "genie",
        "ci-workflow",
        "source / ci"
      ],
      "groupPath": [
        "source",
        "effect-utils"
      ],
      "status": "pass",
      "direction": "regressed",
      "gateable": false,
      "gateReason": "disabled",
      "confidence": "diagnostic",
      "comparisonMode": "budget",
      "unit": "lines",
      "baseline": 7318,
      "current": 7418,
      "delta": 100,
      "ratio": 1.0136649357748018,
      "semanticImpactScore": null,
      "semanticImpactKind": "diagnostic",
      "baselineSources": 24,
      "currentSamples": 9,
      "pairedSamples": 0,
      "evidenceDeltaLower": -631.8000000000001,
      "evidenceDeltaUpper": 831.8000000000001,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "scope": "genie_ci_workflow"
      }
    },
    {
      "id": "source.files",
      "label": "Genie runtime files",
      "group": "source / effect-utils",
      "path": [
        "source",
        "effect-utils",
        "packages",
        "genie",
        "source / genie"
      ],
      "groupPath": [
        "source",
        "effect-utils"
      ],
      "status": "pass",
      "direction": "regressed",
      "gateable": false,
      "gateReason": "disabled",
      "confidence": "diagnostic",
      "comparisonMode": "budget",
      "unit": "count",
      "baseline": 64,
      "current": 66,
      "delta": 2,
      "ratio": 1.03125,
      "semanticImpactScore": null,
      "semanticImpactKind": "diagnostic",
      "baselineSources": 24,
      "currentSamples": 66,
      "pairedSamples": 0,
      "evidenceDeltaLower": -4.4,
      "evidenceDeltaUpper": 8.4,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "scope": "genie_runtime"
      }
    },
    {
      "id": "source.lines",
      "label": "Nix workspace tools lines",
      "group": "source / effect-utils",
      "path": [
        "source",
        "effect-utils",
        "nix",
        "workspace-tools",
        "source / nix"
      ],
      "groupPath": [
        "source",
        "effect-utils"
      ],
      "status": "pass",
      "direction": "regressed",
      "gateable": false,
      "gateReason": "disabled",
      "confidence": "diagnostic",
      "comparisonMode": "budget",
      "unit": "lines",
      "baseline": 3631,
      "current": 3632,
      "delta": 1,
      "ratio": 1.0002754062241808,
      "semanticImpactScore": null,
      "semanticImpactKind": "diagnostic",
      "baselineSources": 24,
      "currentSamples": 14,
      "pairedSamples": 0,
      "evidenceDeltaLower": -362.1,
      "evidenceDeltaUpper": 364.1,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "scope": "nix_workspace_tools"
      }
    },
    {
      "id": "genie_check_direct",
      "label": "Genie check direct",
      "group": "devenv / genie",
      "path": [
        "devenv",
        "genie"
      ],
      "groupPath": [
        "devenv",
        "genie"
      ],
      "status": "pass",
      "direction": "unchanged",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "within_budget",
      "comparisonMode": "paired",
      "unit": "seconds",
      "baseline": 6.654,
      "current": 6.356,
      "delta": -0.29800000000000004,
      "ratio": 0.955214908325819,
      "semanticImpactScore": 0,
      "semanticImpactKind": "neutral",
      "baselineSources": 5,
      "currentSamples": 5,
      "pairedSamples": 5,
      "evidenceDeltaLower": -0.502,
      "evidenceDeltaUpper": 0.02,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "probe": "genie_check_direct",
        "probeLabel": "Genie check direct",
        "status": 0,
        "sampleCount": 11,
        "warmupCount": 1,
        "measuredSampleCount": 5,
        "pairedSampleCount": 5,
        "pairedOrderProtocol": "balanced-seeded-alternating-v1",
        "pairedOrderSeed": "27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4",
        "measurementProtocol": "devenv-perf-warm-median-v2",
        "aggregation": "median",
        "phase": "warm",
        "devenvRev": "2cf62a010000b70f15c78a72761fad7c9e6fb47a",
        "otelServiceName": "devenv-perf-ci"
      }
    },
    {
      "id": "shell_eval_warm",
      "label": "Warm shell eval",
      "group": "devenv / devenv shell",
      "path": [
        "devenv",
        "devenv shell"
      ],
      "groupPath": [
        "devenv",
        "devenv shell"
      ],
      "status": "pass",
      "direction": "unchanged",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "noise_floor",
      "comparisonMode": "paired",
      "unit": "seconds",
      "baseline": 2.043,
      "current": 2.004,
      "delta": -0.039000000000000146,
      "ratio": 0.9809104258443465,
      "semanticImpactScore": 0,
      "semanticImpactKind": "neutral",
      "baselineSources": 5,
      "currentSamples": 5,
      "pairedSamples": 5,
      "evidenceDeltaLower": -0.084,
      "evidenceDeltaUpper": -0.02,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "probe": "shell_eval_warm",
        "probeLabel": "Warm shell eval",
        "status": 0,
        "sampleCount": 11,
        "warmupCount": 1,
        "measuredSampleCount": 5,
        "pairedSampleCount": 5,
        "pairedOrderProtocol": "balanced-seeded-alternating-v1",
        "pairedOrderSeed": "27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4",
        "measurementProtocol": "devenv-perf-warm-median-v2",
        "aggregation": "median",
        "phase": "warm",
        "devenvRev": "2cf62a010000b70f15c78a72761fad7c9e6fb47a",
        "otelServiceName": "devenv-perf-ci"
      }
    },
    {
      "id": "task_check_quick_forced",
      "label": "Forced check:quick",
      "group": "devenv / quality gates",
      "path": [
        "devenv",
        "quality gates",
        "check:quick"
      ],
      "groupPath": [
        "devenv",
        "quality gates"
      ],
      "status": "pass",
      "direction": "unchanged",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "noise_floor",
      "comparisonMode": "paired",
      "unit": "seconds",
      "baseline": 10.85,
      "current": 10.86,
      "delta": 0.009999999999999787,
      "ratio": 1.0009216589861751,
      "semanticImpactScore": 0,
      "semanticImpactKind": "neutral",
      "baselineSources": 3,
      "currentSamples": 3,
      "pairedSamples": 3,
      "evidenceDeltaLower": -0.169,
      "evidenceDeltaUpper": 0.829,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "workload": "forced-task-cache",
        "taskCacheMode": "refresh",
        "probe": "task_check_quick_forced",
        "probeLabel": "Forced check:quick",
        "status": 0,
        "sampleCount": 6,
        "warmupCount": 0,
        "measuredSampleCount": 3,
        "pairedSampleCount": 3,
        "pairedOrderProtocol": "balanced-seeded-alternating-v1",
        "pairedOrderSeed": "27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4",
        "measurementProtocol": "devenv-perf-warm-median-v2",
        "aggregation": "median",
        "phase": "warm",
        "devenvRev": "2cf62a010000b70f15c78a72761fad7c9e6fb47a",
        "otelServiceName": "devenv-perf-ci"
      }
    },
    {
      "id": "task_genie_run",
      "label": "Genie run task",
      "group": "devenv / genie",
      "path": [
        "devenv",
        "genie"
      ],
      "groupPath": [
        "devenv",
        "genie"
      ],
      "status": "pass",
      "direction": "unchanged",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "noise_floor",
      "comparisonMode": "paired",
      "unit": "seconds",
      "baseline": 1.274,
      "current": 1.267,
      "delta": -0.007000000000000117,
      "ratio": 0.9945054945054944,
      "semanticImpactScore": 0,
      "semanticImpactKind": "neutral",
      "baselineSources": 5,
      "currentSamples": 5,
      "pairedSamples": 5,
      "evidenceDeltaLower": -0.028,
      "evidenceDeltaUpper": 0.034,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "probe": "task_genie_run",
        "probeLabel": "Genie run task",
        "status": 0,
        "sampleCount": 11,
        "warmupCount": 1,
        "measuredSampleCount": 5,
        "pairedSampleCount": 5,
        "pairedOrderProtocol": "balanced-seeded-alternating-v1",
        "pairedOrderSeed": "27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4",
        "measurementProtocol": "devenv-perf-warm-median-v2",
        "aggregation": "median",
        "phase": "warm",
        "devenvRev": "2cf62a010000b70f15c78a72761fad7c9e6fb47a",
        "otelServiceName": "devenv-perf-ci"
      }
    },
    {
      "id": "task_pnpm_install",
      "label": "pnpm install task",
      "group": "devenv / workspace setup",
      "path": [
        "devenv",
        "workspace setup"
      ],
      "groupPath": [
        "devenv",
        "workspace setup"
      ],
      "status": "pass",
      "direction": "unchanged",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "noise_floor",
      "comparisonMode": "paired",
      "unit": "seconds",
      "baseline": 0.703,
      "current": 0.699,
      "delta": -0.0040000000000000036,
      "ratio": 0.9943100995732574,
      "semanticImpactScore": 0,
      "semanticImpactKind": "neutral",
      "baselineSources": 5,
      "currentSamples": 5,
      "pairedSamples": 5,
      "evidenceDeltaLower": -0.006,
      "evidenceDeltaUpper": 0.001,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "probe": "task_pnpm_install",
        "probeLabel": "pnpm install task",
        "status": 0,
        "sampleCount": 11,
        "warmupCount": 1,
        "measuredSampleCount": 5,
        "pairedSampleCount": 5,
        "pairedOrderProtocol": "balanced-seeded-alternating-v1",
        "pairedOrderSeed": "27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4",
        "measurementProtocol": "devenv-perf-warm-median-v2",
        "aggregation": "median",
        "phase": "warm",
        "devenvRev": "2cf62a010000b70f15c78a72761fad7c9e6fb47a",
        "otelServiceName": "devenv-perf-ci"
      }
    },
    {
      "id": "processes_help",
      "label": "devenv processes --help",
      "group": "devenv / devenv cli",
      "path": [
        "devenv",
        "devenv cli"
      ],
      "groupPath": [
        "devenv",
        "devenv cli"
      ],
      "status": "pass",
      "direction": "unchanged",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "noise_floor",
      "comparisonMode": "paired",
      "unit": "seconds",
      "baseline": 0.019,
      "current": 0.02,
      "delta": 0.0010000000000000009,
      "ratio": 1.0526315789473684,
      "semanticImpactScore": 0,
      "semanticImpactKind": "neutral",
      "baselineSources": 9,
      "currentSamples": 9,
      "pairedSamples": 9,
      "evidenceDeltaLower": 0,
      "evidenceDeltaUpper": 0.003,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "probe": "processes_help",
        "probeLabel": "devenv processes --help",
        "status": 0,
        "sampleCount": 19,
        "warmupCount": 1,
        "measuredSampleCount": 9,
        "pairedSampleCount": 9,
        "pairedOrderProtocol": "balanced-seeded-alternating-v1",
        "pairedOrderSeed": "27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4",
        "measurementProtocol": "devenv-perf-warm-median-v2",
        "aggregation": "median",
        "phase": "warm",
        "devenvRev": "2cf62a010000b70f15c78a72761fad7c9e6fb47a",
        "otelServiceName": "devenv-perf-ci"
      }
    },
    {
      "id": "tasks_list",
      "label": "devenv tasks list",
      "group": "devenv / devenv cli",
      "path": [
        "devenv",
        "devenv cli"
      ],
      "groupPath": [
        "devenv",
        "devenv cli"
      ],
      "status": "pass",
      "direction": "unchanged",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "noise_floor",
      "comparisonMode": "paired",
      "unit": "seconds",
      "baseline": 0.042,
      "current": 0.041,
      "delta": -0.0010000000000000009,
      "ratio": 0.9761904761904762,
      "semanticImpactScore": 0,
      "semanticImpactKind": "neutral",
      "baselineSources": 9,
      "currentSamples": 9,
      "pairedSamples": 9,
      "evidenceDeltaLower": -0.003,
      "evidenceDeltaUpper": 0,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "probe": "tasks_list",
        "probeLabel": "devenv tasks list",
        "status": 0,
        "sampleCount": 19,
        "warmupCount": 1,
        "measuredSampleCount": 9,
        "pairedSampleCount": 9,
        "pairedOrderProtocol": "balanced-seeded-alternating-v1",
        "pairedOrderSeed": "27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4",
        "measurementProtocol": "devenv-perf-warm-median-v2",
        "aggregation": "median",
        "phase": "warm",
        "devenvRev": "2cf62a010000b70f15c78a72761fad7c9e6fb47a",
        "otelServiceName": "devenv-perf-ci"
      }
    },
    {
      "id": "source.files",
      "label": "Genie CI workflow helpers files",
      "group": "source / effect-utils",
      "path": [
        "source",
        "effect-utils",
        "genie",
        "ci-workflow",
        "source / ci"
      ],
      "groupPath": [
        "source",
        "effect-utils"
      ],
      "status": "pass",
      "direction": "unchanged",
      "gateable": false,
      "gateReason": "disabled",
      "confidence": "diagnostic",
      "comparisonMode": "budget",
      "unit": "count",
      "baseline": 9,
      "current": 9,
      "delta": 0,
      "ratio": 1,
      "semanticImpactScore": null,
      "semanticImpactKind": "diagnostic",
      "baselineSources": 24,
      "currentSamples": 9,
      "pairedSamples": 0,
      "evidenceDeltaLower": -1,
      "evidenceDeltaUpper": 1,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "scope": "genie_ci_workflow"
      }
    },
    {
      "id": "nix.closure.bucket.nar_size",
      "label": "Nix sources closure size",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "genie",
        "buckets",
        "nix-sources",
        "nix closure buckets"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "unknown",
      "direction": "unknown",
      "gateable": false,
      "gateReason": "missing_baseline",
      "confidence": "unknown",
      "comparisonMode": "budget",
      "unit": "bytes",
      "baseline": 0,
      "current": 0,
      "delta": 0,
      "ratio": null,
      "semanticImpactScore": null,
      "semanticImpactKind": "unknown",
      "baselineSources": 23,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -10485760,
      "evidenceDeltaUpper": 10485760,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "nix-sources"
      }
    },
    {
      "id": "nix.closure.bucket.nar_size",
      "label": "Nix sources closure size",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "megarepo",
        "buckets",
        "nix-sources",
        "nix closure buckets"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "unknown",
      "direction": "unknown",
      "gateable": false,
      "gateReason": "missing_baseline",
      "confidence": "unknown",
      "comparisonMode": "budget",
      "unit": "bytes",
      "baseline": 0,
      "current": 0,
      "delta": 0,
      "ratio": null,
      "semanticImpactScore": null,
      "semanticImpactKind": "unknown",
      "baselineSources": 23,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -10485760,
      "evidenceDeltaUpper": 10485760,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "nix-sources"
      }
    },
    {
      "id": "nix.closure.bucket.nar_size",
      "label": "Nix sources closure size",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "oxlint-npm",
        "buckets",
        "nix-sources",
        "nix closure buckets"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "unknown",
      "direction": "unknown",
      "gateable": false,
      "gateReason": "missing_baseline",
      "confidence": "unknown",
      "comparisonMode": "budget",
      "unit": "bytes",
      "baseline": 0,
      "current": 0,
      "delta": 0,
      "ratio": null,
      "semanticImpactScore": null,
      "semanticImpactKind": "unknown",
      "baselineSources": 23,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -10485760,
      "evidenceDeltaUpper": 10485760,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "nix-sources"
      }
    },
    {
      "id": "source.files",
      "label": "Nix workspace tools files",
      "group": "source / effect-utils",
      "path": [
        "source",
        "effect-utils",
        "nix",
        "workspace-tools",
        "source / nix"
      ],
      "groupPath": [
        "source",
        "effect-utils"
      ],
      "status": "pass",
      "direction": "unchanged",
      "gateable": false,
      "gateReason": "disabled",
      "confidence": "diagnostic",
      "comparisonMode": "budget",
      "unit": "count",
      "baseline": 14,
      "current": 14,
      "delta": 0,
      "ratio": 1,
      "semanticImpactScore": null,
      "semanticImpactKind": "diagnostic",
      "baselineSources": 24,
      "currentSamples": 14,
      "pairedSamples": 0,
      "evidenceDeltaLower": -1.4000000000000001,
      "evidenceDeltaUpper": 1.4000000000000001,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "scope": "nix_workspace_tools"
      }
    },
    {
      "id": "nix.closure.bucket.nar_size",
      "label": "Node / pnpm closure size",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "genie",
        "buckets",
        "node",
        "nix closure buckets"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "unknown",
      "direction": "unknown",
      "gateable": false,
      "gateReason": "missing_baseline",
      "confidence": "unknown",
      "comparisonMode": "budget",
      "unit": "bytes",
      "baseline": 0,
      "current": 0,
      "delta": 0,
      "ratio": null,
      "semanticImpactScore": null,
      "semanticImpactKind": "unknown",
      "baselineSources": 23,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -10485760,
      "evidenceDeltaUpper": 10485760,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "node"
      }
    },
    {
      "id": "nix.closure.bucket.nar_size",
      "label": "Node / pnpm closure size",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "megarepo",
        "buckets",
        "node",
        "nix closure buckets"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "unknown",
      "direction": "unknown",
      "gateable": false,
      "gateReason": "missing_baseline",
      "confidence": "unknown",
      "comparisonMode": "budget",
      "unit": "bytes",
      "baseline": 0,
      "current": 0,
      "delta": 0,
      "ratio": null,
      "semanticImpactScore": null,
      "semanticImpactKind": "unknown",
      "baselineSources": 23,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -10485760,
      "evidenceDeltaUpper": 10485760,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "node"
      }
    },
    {
      "id": "nix.closure.bucket.nar_size",
      "label": "Node / pnpm closure size",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "oxlint-npm",
        "buckets",
        "node",
        "nix closure buckets"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "unknown",
      "direction": "unknown",
      "gateable": false,
      "gateReason": "missing_baseline",
      "confidence": "unknown",
      "comparisonMode": "budget",
      "unit": "bytes",
      "baseline": 0,
      "current": 0,
      "delta": 0,
      "ratio": null,
      "semanticImpactScore": null,
      "semanticImpactKind": "unknown",
      "baselineSources": 23,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -10485760,
      "evidenceDeltaUpper": 10485760,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "node"
      }
    },
    {
      "id": "nix.closure.bucket.nar_size",
      "label": "Rust closure size",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "genie",
        "buckets",
        "rust",
        "nix closure buckets"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "unknown",
      "direction": "unknown",
      "gateable": false,
      "gateReason": "missing_baseline",
      "confidence": "unknown",
      "comparisonMode": "budget",
      "unit": "bytes",
      "baseline": 0,
      "current": 0,
      "delta": 0,
      "ratio": null,
      "semanticImpactScore": null,
      "semanticImpactKind": "unknown",
      "baselineSources": 23,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -10485760,
      "evidenceDeltaUpper": 10485760,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "rust"
      }
    },
    {
      "id": "nix.closure.bucket.nar_size",
      "label": "Rust closure size",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "megarepo",
        "buckets",
        "rust",
        "nix closure buckets"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "unknown",
      "direction": "unknown",
      "gateable": false,
      "gateReason": "missing_baseline",
      "confidence": "unknown",
      "comparisonMode": "budget",
      "unit": "bytes",
      "baseline": 0,
      "current": 0,
      "delta": 0,
      "ratio": null,
      "semanticImpactScore": null,
      "semanticImpactKind": "unknown",
      "baselineSources": 23,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -10485760,
      "evidenceDeltaUpper": 10485760,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "rust"
      }
    },
    {
      "id": "nix.closure.bucket.nar_size",
      "label": "Rust closure size",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "oxlint-npm",
        "buckets",
        "rust",
        "nix closure buckets"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "unknown",
      "direction": "unknown",
      "gateable": false,
      "gateReason": "missing_baseline",
      "confidence": "unknown",
      "comparisonMode": "budget",
      "unit": "bytes",
      "baseline": 0,
      "current": 0,
      "delta": 0,
      "ratio": null,
      "semanticImpactScore": null,
      "semanticImpactKind": "unknown",
      "baselineSources": 23,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -10485760,
      "evidenceDeltaUpper": 10485760,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "rust"
      }
    },
    {
      "id": "nix.closure.path_count",
      "label": "Total closure path count",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "genie",
        "total",
        "path-count",
        "nix closure"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "pass",
      "direction": "unchanged",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "noise_floor",
      "comparisonMode": "budget",
      "unit": "count",
      "baseline": 79,
      "current": 79,
      "delta": 0,
      "ratio": 1,
      "semanticImpactScore": 0,
      "semanticImpactKind": "neutral",
      "baselineSources": 23,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -10,
      "evidenceDeltaUpper": 10,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "total"
      }
    },
    {
      "id": "nix.closure.path_count",
      "label": "Total closure path count",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "megarepo",
        "total",
        "path-count",
        "nix closure"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "pass",
      "direction": "unchanged",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "noise_floor",
      "comparisonMode": "budget",
      "unit": "count",
      "baseline": 5,
      "current": 5,
      "delta": 0,
      "ratio": 1,
      "semanticImpactScore": 0,
      "semanticImpactKind": "neutral",
      "baselineSources": 23,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -10,
      "evidenceDeltaUpper": 10,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "total"
      }
    },
    {
      "id": "nix.closure.path_count",
      "label": "Total closure path count",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "oxlint-npm",
        "total",
        "path-count",
        "nix closure"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "pass",
      "direction": "unchanged",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "noise_floor",
      "comparisonMode": "budget",
      "unit": "count",
      "baseline": 8,
      "current": 8,
      "delta": 0,
      "ratio": 1,
      "semanticImpactScore": 0,
      "semanticImpactKind": "neutral",
      "baselineSources": 23,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -10,
      "evidenceDeltaUpper": 10,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "total"
      }
    },
    {
      "id": "nix.closure.nar_size",
      "label": "Total closure size",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "megarepo",
        "total",
        "closure-size",
        "nix closure"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "pass",
      "direction": "unchanged",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "noise_floor",
      "comparisonMode": "budget",
      "unit": "bytes",
      "baseline": 151364760,
      "current": 151364760,
      "delta": 0,
      "ratio": 1,
      "semanticImpactScore": 0,
      "semanticImpactKind": "neutral",
      "baselineSources": 23,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -10485760,
      "evidenceDeltaUpper": 10485760,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "total"
      }
    },
    {
      "id": "nix.closure.serialized_nar_size",
      "label": "Total serialized NAR size",
      "group": "nix / closures / packages",
      "path": [
        "nix",
        "closures",
        "packages",
        "megarepo",
        "total",
        "serialized-nar-size",
        "nix closure diagnostics"
      ],
      "groupPath": [
        "nix",
        "closures",
        "packages"
      ],
      "status": "pass",
      "direction": "unchanged",
      "gateable": true,
      "gateReason": "eligible",
      "confidence": "noise_floor",
      "comparisonMode": "diagnostic",
      "unit": "bytes",
      "baseline": 151364760,
      "current": 151364760,
      "delta": 0,
      "ratio": 1,
      "semanticImpactScore": 0,
      "semanticImpactKind": "neutral",
      "baselineSources": 22,
      "currentSamples": 1,
      "pairedSamples": 0,
      "evidenceDeltaLower": -15136476,
      "evidenceDeltaUpper": 15136476,
      "pairedEvidenceQuantile": 0.25,
      "dimensions": {
        "bucket": "total",
        "sizeKind": "nar"
      }
    },
    {
      "id": "shell_eval_traced",
      "label": "Shell eval with OTEL trace",
      "group": "devenv / devenv shell",
      "path": [
        "devenv",
        "devenv shell"
      ],
      "groupPath": [
        "devenv",
        "devenv shell"
      ],
      "status": "missing_baseline",
      "direction": "unknown",
      "gateable": false,
      "gateReason": "missing_baseline",
      "confidence": "missing_baseline",
      "comparisonMode": "historical",
      "unit": "seconds",
      "baseline": null,
      "current": 27.271,
      "delta": null,
      "ratio": null,
      "semanticImpactScore": null,
      "semanticImpactKind": null,
      "baselineSources": 0,
      "currentSamples": 1,
      "pairedSamples": null,
      "evidenceDeltaLower": null,
      "evidenceDeltaUpper": null,
      "pairedEvidenceQuantile": null,
      "dimensions": {
        "probe": "shell_eval_traced",
        "probeLabel": "Shell eval with OTEL trace",
        "status": 0,
        "sampleCount": 2,
        "warmupCount": 0,
        "measuredSampleCount": 1,
        "pairedSampleCount": 1,
        "pairedOrderProtocol": "balanced-seeded-alternating-v1",
        "pairedOrderSeed": "27352713377-1-4500d61c416fec3f07f971a798e691976453e1d4",
        "measurementProtocol": "devenv-perf-warm-median-v2",
        "aggregation": "median",
        "phase": "warm",
        "devenvRev": "2cf62a010000b70f15c78a72761fad7c9e6fb47a",
        "otelServiceName": "devenv-perf-ci"
      }
    }
  ]
}

github-actions Bot added a commit that referenced this pull request Jun 11, 2026
- 0008 already added three timers (absence/post-merge/retention)
- 0009: closed-unmerged PRs count as a staleness signal (the lossless floor
  self-protects branches whose commits aren't reachable on a remote)
- 0010: reconcile ALL registered workspaces before a destructive gc + broaden
  which mr commands refresh the liveness record — folding in the fix for the
  verified repin-without-reregister deletion bug
- spec/glossary updated to match

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
github-actions Bot added a commit that referenced this pull request Jun 11, 2026
github-actions Bot added a commit that referenced this pull request Jun 11, 2026
github-actions Bot added a commit that referenced this pull request Jun 11, 2026
…view (#771)

- 0011: deterministic test seams (injected `now`, PrStateResolver service layer)
  + four-layer test strategy (pure / property / integration / gated e2e)
- annotate 0004: capture location superseded by 0007's <repo>/.archive/

A 5-lens review of the implementation plan surfaced safety holes (wrong
reachability predicate, fail-open reconcile, lost stash, archived branch blocks
re-apply); these are folded into the refined plan (tmp/gc-impl/plan.md) and 0011.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
github-actions Bot added a commit that referenced this pull request Jun 11, 2026
github-actions Bot added a commit that referenced this pull request Jun 11, 2026
github-actions Bot added a commit that referenced this pull request Jun 11, 2026
schickling-assistant and others added 8 commits June 11, 2026 16:19
…ion ledger (#771)

U1 of the cold named-branch worktree GC feature:

- store-gc-config.ts: three-timer reclamation config (absence grace 14d,
  post-merge grace 7d, archive retention 30d) as exported defaults, with an
  optional `$STORE/.state/gc-config.json` merged over them; invalid/absent
  override falls back to defaults so the GC path never fails on a bad file.
- store-fs-atomic.ts: writeFileAtomic (write-temp-then-rename) so state files
  are never observed half-written by a concurrent reader.
- store-gc-observations.ts: cold-observation ledger
  (`$STORE/.state/gc-observations.json`) recording firstSeenColdAtMs per path.
  Newly-cold starts the clock; still-cold advances grace; no-longer-cold is
  dropped (no continuity laundering); unclean-reconcile paths skip
  grace-advance and re-arm. Atomic write, store-lock-guarded read-modify-write
  by the caller, corrupt file => empty (conservative re-arm). All decision
  + persistence paths take an explicit `now` (epoch ms); no ambient clock.

Test fixtures (store-setup.ts) extended for the integration layer:
- withRemote: store bare cloned/fetched from a separate upstream bare so it
  has real `refs/remotes/origin/*` (reachability + prune testable).
- repinWorkspace: repoint a member symlink/lock WITHOUT re-registering
  (decision-0010 repin-bug regression seam).
- createArchiveEntry: valid `.archive/<branch>--<ISO8601>/` worktree with a
  real gitlink for retention/reap tests.

Tests: config merge, ledger transitions (incl. corrupt-file and
cold->not->cold no-laundering), and fixture-primitive integration checks.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add U2 of the cold named-branch reclamation pipeline: a branch -> GitHub
PR-state resolver that supplies the primary staleness signal (decision 0005).

- PrStateResolver as Context.Tag + Layer.effect; live layer shells one batched
  `gh pr list` per repo (Schema-validated JSON), cached per gc run.
- owner/repo/host parsed from the store-relative path; non-github host, gh
  failure, non-JSON, or timeout all degrade to `none` (keep — absence of
  evidence never licenses deletion).
- Branches joined to headRefName VERBATIM (names contain `/`); multi-PR per
  branch resolves any-open => open, else most-recent merged/closed.
- Stub layer for deterministic classification tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add the lossless check (U3) used to decide whether a cold named-branch
worktree can be archived without losing recoverable work:

- unpushedCommitCount via `git rev-list <head> --not --remotes` (not
  `branch -r --contains`), so a local commit stacked on a parent that
  lives on an unrelated remote ref still counts as unpushed (the B1
  case). Requires fresh remote-tracking refs (caller fetches --prune).
- hasStash via presence of the repo-global `refs/stash` ref (stashes do
  not travel with a worktree directory move).
- assessLossless combines unpushed + dirt (Git.getWorktreeStatus) + stash
  into the shape the cold classifier consumes.

New git helpers (revListUnpushed, hasStashRef) follow GitCommandError.
Integration tests cover B1, squash-merge/deleted-remote-branch
reachability, no-remote-tracking-refs conservatism, and stash detection.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
U4 of cold named-branch GC. Adds fail-safe reconcile-all to the liveness
registry so a destructive gc re-derives every present workspace's live
paths fresh from disk before deleting anything (decision 0010).

- collectWorkspaceLivePathsStrict: surfaces read errors instead of
  degrading an unreadable workspace to an empty set.
- collectStoreLiveSet({ reconcileAllWorkspaces, now }): on success rewrites
  each record (with explicit now as updatedAt); on read error KEEPS the
  existing record (never overwrites a non-empty record with empty, B2) and
  flags it via StoreLiveSet.uncleanReconcilePaths so grace is not advanced;
  prunes a record only when the workspace dir is gone.
- refreshWorkspaceRegistry.updatedAt is now an explicit `now` (epoch ms)
  seam; the wall clock is read only at the CLI edge.
- Broaden refresh: pin (both repin and pin-to-commit paths) now refreshes
  the workspace registry, closing the verified repin-without-reregister
  bug; apply already refreshed via the sync engine.

Tests: repin-without-reregister regression, present-but-unreadable
workspace keeps its live paths, gone-workspace pruning.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#771)

U6 of the cold named-branch reclamation work. Adds src/lib/store-archive.ts:

- archiveWorktree: mkdir the .archive parent first, then `git worktree move`
  (dirty + untracked work travels intact, gitlink fixed), FREE the branch via
  `git branch -D` so re-apply can re-materialize it (invariant 4), and append a
  metadata line to .archive/README.md. `now` is an explicit epoch-ms param.
- scanArchives: enumerate via Git.listWorktrees filtered to .archive/ paths,
  parsing archivedAtMs from a strict anchored trailing `--<ISO8601>` segment
  (branch names contain -/--//, parsed relative to .archive/).
- reapArchive: `git worktree remove --force`, then ensure the dir is gone.

Adds a Git.deleteBranch helper (`branch -d/-D`). Integration tests cover:
archive preserves dirty+untracked; branch freed + re-add succeeds; scan/
retention split; reap removes dir + unregisters from the worktree registry.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add classifyColdWorktree (pure) to store-worktree-policy: a tagged
keep/archive decision over a fixed gate order — liveness veto, staleness
evidence, lossless floor, absence grace, merged-only post-merge grace,
then archive (closed has no post-close grace). Explicit now epoch-ms;
classifyStoreWorktreePolicy left untouched.

Tests: gate-precedence table + near-misses, and FastCheck property
invariants (live never archives; open/none keep; unpushed>0 keeps;
hasStash keeps).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Integrate the cold reclamation path (U7/U7b, decisions 0001–0010) into the
default `mr store gc` flow. Additive third path; `--all` semantics unchanged.

- reconcile-all the live set ONCE and thread it; re-check the liveness veto
  under `withWorktreeLock` against a fresh reconcile immediately before BOTH
  archive and reap (invariant 1)
- per repo: fetchBare first (failure => keep all its named worktrees); resolve
  PR state adjacent to classification; record cold observations once (store-
  global ledger, under lock); classify each named worktree; ref_mismatch (HEAD
  on a different branch) => keep
- archive decisions: archive => verify => free branch; failure => keep + error
- scan archives and reap entries past the retention TTL, each under lock + veto
- PrStateResolver is injected when present (stub layer in tests), else the live
  gh-shelling layer is built in the command

Extend StoreGcResult.status with archived/reaped/kept plus reason and an
optional recoverPath (intentional, documented JSON contract change) across the
schema, view renderer, fixtures, and stories.

Add an end-to-end integration suite covering the full matrix: registered vs
unregistered, repin-without-reregister, present-but-unreadable workspace,
merged+clean=>archived (branch freed, re-add works), merged+dirty, merged+stash,
merged+unpushed, open, squash+remote-deleted, grace cases, retention reap,
veto-at-reap, dry-run, and --all unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…elog (#771)

Flip the spec's cold named-branch reclamation subsection from
designed-not-implemented to the shipped behavior: layered gate order
(live-set veto, staleness, lossless floor, three grace timers, archive
then reap), config override path, reconcile-all-before-delete fail-safe
semantics, and the new --json statuses (archived/reaped/kept + reason +
recoverPath). Add an [Unreleased] CHANGELOG entry for the feature.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@schickling-assistant schickling-assistant changed the title docs(megarepo): design for cold named-branch worktree GC (#771) feat(megarepo): cold named-branch worktree GC (#771) Jun 11, 2026
@schickling-assistant

Copy link
Copy Markdown
Collaborator Author

Implementation landed (verified)

The design (decisions 0001–0011) is now implemented across 8 milestone commits (~4.7k insertions, 31 files).

New libs: store-gc-config, store-fs-atomic, store-gc-observations, store-pr-state (PrStateResolver service), store-lossless, store-archive; reconcile-all + broaden-refresh in store-liveness; classifyColdWorktree in store-worktree-policy; gc wiring + new output statuses (archived/reaped/kept) in store gc.

Independently verified (not just the agents' word):

  • dt ts:check green (repo-wide); 582/582 megarepo tests pass; oxlint 0 errors; oxfmt clean.
  • Named regression tests present & passing for every blocker the plan review caught:
    • B1 rev-list --not --remotes (local commit on unrelated-remote-contained parent ⇒ unpushed)
    • B2 reconcile-all fail-safe (present-but-unreadable workspace keeps last-known) + repin regression (0010)
    • B3 stash guard ⇒ keep
    • B4 archive frees the branch ⇒ mr apply-equivalent re-add succeeds
  • Archive and reap run under withWorktreeLock with a fresh re-reconciled live-set veto re-check (TOCTOU); dry-run mutates nothing; archive failure leaves the original intact.

Folded into default mr store gc (decision 0006); --all semantics unchanged. An adversarial review over the implementation diff is running next.

Posted on behalf of @schickling
field value
agent_name 💓 cl1-pulse
agent_session_id e08c6de8-96a5-4855-992d-3d660b68a0e3
agent_tool Claude Code
agent_tool_version 2.1.165
agent_runtime Claude Code 2.1.165
agent_model claude-opus-4-8
runtime_profile /nix/store/h2fzkx1acfyaidg5bmdamarf7856a2s8-coding-agent-runtime-profile/share/coding-agents/profile.json
skills_manifest /nix/store/3v899lwjyzgkr7x7h4m5hlbbpn1jkbds-agent-skills-corpus/share/agent-skills/manifest.json
worktree effect-utils/schickling/2026-06-10-771
machine dev3
tooling_profile dotfiles@unknown-dirty

…#771)

Fix findings from an adversarial review of the cold named-branch worktree
GC reclamation path in `mr store gc`.

- B1 (blocker): `archiveWorktree` freed no branch for production worktrees.
  A production `refs/heads/*` worktree is non-detached, so after
  `git worktree move` the moved worktree still has the branch checked out and
  `git branch -D` is refused (`cannot delete branch used by worktree`),
  leaving the branch unfreed and a later `mr apply` re-add broken
  (invariant 4). Detach the moved worktree's HEAD (new
  `Git.detachWorktreeHead`) before freeing the ref. Added an integration test
  using a non-detached worktree (prior fixtures only used `--detach`, masking
  the defect) — it fails before the fix, passes after.

- M1 (major): route both liveness-registry writes
  (`refreshWorkspaceRegistry`, under-lock reconcile rewrite) through
  `writeFileAtomic` so a torn read during a concurrent gc reconcile can't drop
  a workspace's live-set veto (decision 0010 hard veto).

- B1-followup (major): once the move succeeds, report `archived` with the
  real `recoverPath`; post-move branch-free + README steps are
  best-effort-but-reported via a warning (no false `error`/"left intact").
  The `.archive/README.md` append is now an atomic write.

- n1: drop the unreachable `winner === undefined` branch in
  `resolvePrStateForBranch`.

New tests: archive-time live-set veto re-check; `loadStoreGcConfig` valid +
corrupt-file degradation; CLOSED-PR archive (reason `closed`, no post-close
grace); dry-run reap intent; unclean-reconcile grace withholding/restart;
`writeFileAtomic` temp-cleanup on a rename failure.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@schickling-assistant

Copy link
Copy Markdown
Collaborator Author

Adversarial implementation review + hardening (round 2)

A 3-lens review over the implementation diff found one real bug the tests masked, plus atomicity/coverage gaps. All fixed in 5f4fcb3c:

  • B1 (blocker)git branch -D is refused after git worktree move for non-detached (i.e. production) refs/heads worktrees, so the branch was never freed and mr apply couldn't re-materialize it. The whole fixture suite used --detach, masking it. Fix: detach the moved worktree's HEAD before deleting the branch; added a non-detached production-shape regression test (fails before, passes after).
  • M1 — liveness registry writes routed through writeFileAtomic (a torn read during concurrent reconcile could drop a workspace's veto).
  • Reporting — once the move succeeds the result is archived + recoverPath, not a misleading error.
  • Coverage added — archive-time veto re-check, config load/corrupt-degradation, closed-PR→archive, dry-run reap intent, unclean-reconcile grace withhold/restart, atomic-write cleanup.

The review positively verified the core logic (gate ordering, PrStateResolver R-channel closure, single-clock discipline, strict-vs-lenient reconcile, reap-veto, fetch-fail→keep).

Independently re-verified: dt ts:check green; megarepo vitest green (29 files); oxlint 0 errors; oxfmt clean.

Posted on behalf of @schickling
field value
agent_name 💓 cl1-pulse
agent_session_id e08c6de8-96a5-4855-992d-3d660b68a0e3
agent_tool Claude Code
agent_tool_version 2.1.165
agent_runtime Claude Code 2.1.165
agent_model claude-opus-4-8
runtime_profile /nix/store/h2fzkx1acfyaidg5bmdamarf7856a2s8-coding-agent-runtime-profile/share/coding-agents/profile.json
skills_manifest /nix/store/3v899lwjyzgkr7x7h4m5hlbbpn1jkbds-agent-skills-corpus/share/agent-skills/manifest.json
worktree effect-utils/schickling/2026-06-10-771
machine dev3
tooling_profile dotfiles@unknown-dirty

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant