feat(megarepo): cold named-branch worktree GC (#771)#780
feat(megarepo): cold named-branch worktree GC (#771)#780schickling-assistant wants to merge 12 commits into
Conversation
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>
Storybook PreviewsNo storybooks were deployed. |
CI Measurementspartial - advisory gate - readiness
devenv / quality gates
nix / closures / packages
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
devenv / devenv shell
devenv / genie
devenv / quality gates
devenv / workspace setup
nix / closures / packages
Diagnostic / ungated measurements (7)source / effect-utils
devenv / devenv shell
All measurements
Previous runs
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"
}
}
]
} |
- 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>
…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>
…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>
Implementation landed (verified)The design (decisions 0001–0011) is now implemented across 8 milestone commits (~4.7k insertions, 31 files). New libs: Independently verified (not just the agents' word):
Folded into default Posted on behalf of @schickling
|
…#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>
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
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: Posted on behalf of @schickling
|
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 filedocs/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)" subsectionAgreed model (gates, in order, folded into default
mr store gc)<repo>/.archive/worktree conventionEvidence
mr-binary end-to-end experiments proved cross-megarepo protection works only when the consumer is registered (arepos/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.Open (tuning, captured in docs)
Timer defaults, closed-PR tier, and which
mrcommands must refresh the liveness record (the latent bug).🤖 Generated with Claude Code
Posted on behalf of @schickling
agent_nameagent_session_idagent_toolagent_tool_versionagent_runtimeagent_modelruntime_profileskills_manifestworktreemachinetooling_profile