@isaacriehm/cairn-core 0.13.2 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/attention/bulk-accept.js +19 -0
- package/dist/attention/bulk-accept.js.map +1 -1
- package/dist/gc/entity-orphan.d.ts +55 -0
- package/dist/gc/entity-orphan.js +171 -0
- package/dist/gc/entity-orphan.js.map +1 -0
- package/dist/gc/index.d.ts +4 -0
- package/dist/gc/index.js +2 -0
- package/dist/gc/index.js.map +1 -1
- package/dist/gc/retire.d.ts +57 -0
- package/dist/gc/retire.js +189 -0
- package/dist/gc/retire.js.map +1 -0
- package/dist/gc/sweep.js +11 -0
- package/dist/gc/sweep.js.map +1 -1
- package/dist/gc/types.d.ts +2 -2
- package/dist/hooks/ask-user-blocked.d.ts +8 -0
- package/dist/hooks/ask-user-blocked.js +13 -0
- package/dist/hooks/ask-user-blocked.js.map +1 -0
- package/dist/hooks/post-tool-use/ask-user-blocked.d.ts +18 -0
- package/dist/hooks/post-tool-use/ask-user-blocked.js +113 -0
- package/dist/hooks/post-tool-use/ask-user-blocked.js.map +1 -0
- package/dist/hooks/post-tool-use/index.d.ts +1 -0
- package/dist/hooks/post-tool-use/index.js +1 -0
- package/dist/hooks/post-tool-use/index.js.map +1 -1
- package/dist/hooks/runners/context-threshold.js +2 -2
- package/dist/hooks/runners/context-threshold.js.map +1 -1
- package/dist/hooks/runners/gc-autotrigger.d.ts +7 -4
- package/dist/hooks/runners/gc-autotrigger.js +7 -4
- package/dist/hooks/runners/gc-autotrigger.js.map +1 -1
- package/dist/hooks/runners/stop.js +260 -115
- package/dist/hooks/runners/stop.js.map +1 -1
- package/dist/init/ingest-docs.d.ts +2 -4
- package/dist/init/ingest-docs.js +2 -4
- package/dist/init/ingest-docs.js.map +1 -1
- package/dist/mcp/errors.d.ts +1 -1
- package/dist/mcp/errors.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.js +1 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/schemas.d.ts +16 -94
- package/dist/mcp/schemas.js +41 -89
- package/dist/mcp/schemas.js.map +1 -1
- package/dist/mcp/tools/decision-get.js +9 -0
- package/dist/mcp/tools/decision-get.js.map +1 -1
- package/dist/mcp/tools/index.js +8 -29
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/invariant-get.js +8 -0
- package/dist/mcp/tools/invariant-get.js.map +1 -1
- package/dist/mcp/tools/mission-advance.d.ts +15 -0
- package/dist/mcp/tools/mission-advance.js +36 -1
- package/dist/mcp/tools/mission-advance.js.map +1 -1
- package/dist/mcp/tools/record-decision.js +14 -1
- package/dist/mcp/tools/record-decision.js.map +1 -1
- package/dist/mcp/tools/retire-entity.d.ts +22 -0
- package/dist/mcp/tools/retire-entity.js +62 -0
- package/dist/mcp/tools/retire-entity.js.map +1 -0
- package/dist/mcp/tools/task-complete.js +28 -22
- package/dist/mcp/tools/task-complete.js.map +1 -1
- package/dist/mcp/tools/task-create.d.ts +0 -1
- package/dist/mcp/tools/task-create.js +41 -10
- package/dist/mcp/tools/task-create.js.map +1 -1
- package/dist/mcp/tools/task-journal-append.js +23 -2
- package/dist/mcp/tools/task-journal-append.js.map +1 -1
- package/dist/mcp/tools/task-reopen.d.ts +7 -0
- package/dist/mcp/tools/task-reopen.js +40 -0
- package/dist/mcp/tools/task-reopen.js.map +1 -0
- package/dist/tasks/index.d.ts +2 -2
- package/dist/tasks/index.js +1 -1
- package/dist/tasks/index.js.map +1 -1
- package/dist/tasks/lifecycle.d.ts +62 -19
- package/dist/tasks/lifecycle.js +147 -42
- package/dist/tasks/lifecycle.js.map +1 -1
- package/package.json +2 -2
- package/dist/mcp/tools/align-drain.d.ts +0 -7
- package/dist/mcp/tools/align-drain.js +0 -26
- package/dist/mcp/tools/align-drain.js.map +0 -1
- package/dist/mcp/tools/archive.d.ts +0 -8
- package/dist/mcp/tools/archive.js +0 -72
- package/dist/mcp/tools/archive.js.map +0 -1
- package/dist/mcp/tools/attention-restore.d.ts +0 -14
- package/dist/mcp/tools/attention-restore.js +0 -22
- package/dist/mcp/tools/attention-restore.js.map +0 -1
- package/dist/mcp/tools/decisions-for-symbol.d.ts +0 -7
- package/dist/mcp/tools/decisions-for-symbol.js +0 -42
- package/dist/mcp/tools/decisions-for-symbol.js.map +0 -1
- package/dist/mcp/tools/get-full.d.ts +0 -7
- package/dist/mcp/tools/get-full.js +0 -46
- package/dist/mcp/tools/get-full.js.map +0 -1
- package/dist/mcp/tools/ground-get.d.ts +0 -7
- package/dist/mcp/tools/ground-get.js +0 -77
- package/dist/mcp/tools/ground-get.js.map +0 -1
- package/dist/mcp/tools/mission-close.d.ts +0 -8
- package/dist/mcp/tools/mission-close.js +0 -48
- package/dist/mcp/tools/mission-close.js.map +0 -1
- package/dist/mcp/tools/mission-reopen.d.ts +0 -13
- package/dist/mcp/tools/mission-reopen.js +0 -56
- package/dist/mcp/tools/mission-reopen.js.map +0 -1
- package/dist/mcp/tools/reject-candidate.d.ts +0 -24
- package/dist/mcp/tools/reject-candidate.js +0 -71
- package/dist/mcp/tools/reject-candidate.js.map +0 -1
- package/dist/mcp/tools/search-candidates.d.ts +0 -20
- package/dist/mcp/tools/search-candidates.js +0 -93
- package/dist/mcp/tools/search-candidates.js.map +0 -1
- package/dist/mcp/tools/supersedes-chain.d.ts +0 -6
- package/dist/mcp/tools/supersedes-chain.js +0 -66
- package/dist/mcp/tools/supersedes-chain.js.map +0 -1
- package/dist/mcp/tools/timeline.d.ts +0 -9
- package/dist/mcp/tools/timeline.js +0 -61
- package/dist/mcp/tools/timeline.js.map +0 -1
|
@@ -35,6 +35,7 @@ import { decisionsDir, invariantsDir } from "@isaacriehm/cairn-state";
|
|
|
35
35
|
import { writeDecisionsLedger } from "@isaacriehm/cairn-state";
|
|
36
36
|
import { parseFrontmatterRecord } from "@isaacriehm/cairn-state";
|
|
37
37
|
import { withWriteLock } from "../lock.js";
|
|
38
|
+
import { writeInvalidationEvent } from "../events/index.js";
|
|
38
39
|
import { scoreDecDraft, scoreInvariant, } from "./scoring.js";
|
|
39
40
|
import { runDecSourceStrip } from "./source-strip.js";
|
|
40
41
|
/**
|
|
@@ -161,6 +162,24 @@ export async function bulkAcceptObvious(args) {
|
|
|
161
162
|
}
|
|
162
163
|
}
|
|
163
164
|
}
|
|
165
|
+
// Emit `decision_accepted` event per promoted draft so
|
|
166
|
+
// cross-session listeners (Stop hook, scope-index rebuild)
|
|
167
|
+
// see the new accepted DEC. Without this, bulk-accept's
|
|
168
|
+
// 21-DEC batches were invisible to the event ledger and
|
|
169
|
+
// downstream invalidation never fired.
|
|
170
|
+
if (!dry) {
|
|
171
|
+
try {
|
|
172
|
+
writeInvalidationEvent(args.repoRoot, {
|
|
173
|
+
kind: "decision_accepted",
|
|
174
|
+
refs: [{ kind: "decision", id }],
|
|
175
|
+
path: `.cairn/ground/decisions/${id}.md`,
|
|
176
|
+
source: { session_id: null, tool: "cairn_bulk_accept_attention" },
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
/* best-effort */
|
|
181
|
+
}
|
|
182
|
+
}
|
|
164
183
|
decsAccepted += 1;
|
|
165
184
|
acceptedIds.push(id);
|
|
166
185
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bulk-accept.js","sourceRoot":"","sources":["../../src/attention/bulk-accept.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bulk-accept.js","sourceRoot":"","sources":["../../src/attention/bulk-accept.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GC pass — entity-orphan (ledger → code).
|
|
3
|
+
*
|
|
4
|
+
* The inverse of citation-integrity. Where citation-integrity walks
|
|
5
|
+
* code → ledger ("this §cite points at a missing entity"), this pass
|
|
6
|
+
* walks ledger → code ("does this DEC/INV still have a live home, or
|
|
7
|
+
* has it rotted?"). It is the detection half of the retirement
|
|
8
|
+
* subsystem; `runEntityRetire` (retire.ts) is the apply half.
|
|
9
|
+
*
|
|
10
|
+
* Orphan predicate — split by `sot_kind`:
|
|
11
|
+
*
|
|
12
|
+
* - `ledger` (source-comment-derived) — the entity's home is a
|
|
13
|
+
* strip-replaced `// §DEC-/§INV-` cite in source. Orphan when ZERO
|
|
14
|
+
* live cites to its id remain anywhere in the tree. Classified:
|
|
15
|
+
* · source_file also gone → SAFE (clean orphan)
|
|
16
|
+
* · source_file still present → ambiguous (cite vanished but
|
|
17
|
+
* file remains — surface, don't
|
|
18
|
+
* auto-retire)
|
|
19
|
+
*
|
|
20
|
+
* - `path` (doc-backed) — the entity summarizes a doc section
|
|
21
|
+
* (`sot_path`). Orphan when that file no longer exists → SAFE.
|
|
22
|
+
* Body-vs-source drift while the file still exists is owned by the
|
|
23
|
+
* doc-source-drift pass, not this one.
|
|
24
|
+
*
|
|
25
|
+
* Grace window: an entity younger than GRACE_DAYS (by `generated`) is
|
|
26
|
+
* skipped — a freshly-emitted entity's cite or doc may not have landed
|
|
27
|
+
* yet. Undated entities fall through to the predicate (the cite/source
|
|
28
|
+
* signal is the real guard).
|
|
29
|
+
*
|
|
30
|
+
* Only SAFE orphans are eligible for autonomous retirement; ambiguous
|
|
31
|
+
* ones surface as `warn` findings for operator/agent triage.
|
|
32
|
+
*/
|
|
33
|
+
import type { GcFinding } from "./types.js";
|
|
34
|
+
export type OrphanClassification = "safe" | "ambiguous";
|
|
35
|
+
export interface OrphanCandidate {
|
|
36
|
+
id: string;
|
|
37
|
+
kind: "DEC" | "INV";
|
|
38
|
+
sotKind: string;
|
|
39
|
+
classification: OrphanClassification;
|
|
40
|
+
/** Human-readable retirement reason — stamped into archived frontmatter. */
|
|
41
|
+
reason: string;
|
|
42
|
+
/** Repo-relative path to the live entity file. */
|
|
43
|
+
entityPath: string;
|
|
44
|
+
}
|
|
45
|
+
export interface EntityOrphanOptions {
|
|
46
|
+
repoRoot: string;
|
|
47
|
+
/** Override "now" for the grace-window check (tests). */
|
|
48
|
+
now?: Date;
|
|
49
|
+
}
|
|
50
|
+
export interface EntityOrphanResult {
|
|
51
|
+
findings: GcFinding[];
|
|
52
|
+
/** Structured candidates for the retire apply path. */
|
|
53
|
+
orphans: OrphanCandidate[];
|
|
54
|
+
}
|
|
55
|
+
export declare function runEntityOrphan(opts: EntityOrphanOptions): EntityOrphanResult;
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GC pass — entity-orphan (ledger → code).
|
|
3
|
+
*
|
|
4
|
+
* The inverse of citation-integrity. Where citation-integrity walks
|
|
5
|
+
* code → ledger ("this §cite points at a missing entity"), this pass
|
|
6
|
+
* walks ledger → code ("does this DEC/INV still have a live home, or
|
|
7
|
+
* has it rotted?"). It is the detection half of the retirement
|
|
8
|
+
* subsystem; `runEntityRetire` (retire.ts) is the apply half.
|
|
9
|
+
*
|
|
10
|
+
* Orphan predicate — split by `sot_kind`:
|
|
11
|
+
*
|
|
12
|
+
* - `ledger` (source-comment-derived) — the entity's home is a
|
|
13
|
+
* strip-replaced `// §DEC-/§INV-` cite in source. Orphan when ZERO
|
|
14
|
+
* live cites to its id remain anywhere in the tree. Classified:
|
|
15
|
+
* · source_file also gone → SAFE (clean orphan)
|
|
16
|
+
* · source_file still present → ambiguous (cite vanished but
|
|
17
|
+
* file remains — surface, don't
|
|
18
|
+
* auto-retire)
|
|
19
|
+
*
|
|
20
|
+
* - `path` (doc-backed) — the entity summarizes a doc section
|
|
21
|
+
* (`sot_path`). Orphan when that file no longer exists → SAFE.
|
|
22
|
+
* Body-vs-source drift while the file still exists is owned by the
|
|
23
|
+
* doc-source-drift pass, not this one.
|
|
24
|
+
*
|
|
25
|
+
* Grace window: an entity younger than GRACE_DAYS (by `generated`) is
|
|
26
|
+
* skipped — a freshly-emitted entity's cite or doc may not have landed
|
|
27
|
+
* yet. Undated entities fall through to the predicate (the cite/source
|
|
28
|
+
* signal is the real guard).
|
|
29
|
+
*
|
|
30
|
+
* Only SAFE orphans are eligible for autonomous retirement; ambiguous
|
|
31
|
+
* ones surface as `warn` findings for operator/agent triage.
|
|
32
|
+
*/
|
|
33
|
+
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
34
|
+
import { join } from "node:path";
|
|
35
|
+
import { decisionsDir, invariantsDir, parseFrontmatterRecord, } from "@isaacriehm/cairn-state";
|
|
36
|
+
import { walkSourceTree } from "./walk-source.js";
|
|
37
|
+
const PASS_ID = "entity-orphan";
|
|
38
|
+
const GRACE_DAYS = 7;
|
|
39
|
+
const GRACE_MS = GRACE_DAYS * 86_400_000;
|
|
40
|
+
const INV_RE = /§INV-([0-9a-f]{7,})\b/g;
|
|
41
|
+
const DEC_RE = /§DEC-([0-9a-f]{7,})\b/g;
|
|
42
|
+
const SOURCE_EXTENSIONS = new Set([
|
|
43
|
+
".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
|
|
44
|
+
".py", ".rb", ".go", ".rs", ".java", ".c", ".cc", ".cpp", ".h", ".hpp",
|
|
45
|
+
".swift", ".kt", ".sh", ".bash", ".zsh",
|
|
46
|
+
".sql", ".html", ".vue", ".svelte", ".css", ".scss",
|
|
47
|
+
]);
|
|
48
|
+
function fileExt(path) {
|
|
49
|
+
const idx = path.lastIndexOf(".");
|
|
50
|
+
return idx === -1 ? "" : path.slice(idx).toLowerCase();
|
|
51
|
+
}
|
|
52
|
+
/** Set of every DEC/INV id cited by a `§` reference anywhere in the source tree. */
|
|
53
|
+
function collectCitedIds(repoRoot) {
|
|
54
|
+
const cited = new Set();
|
|
55
|
+
for (const rel of walkSourceTree(repoRoot)) {
|
|
56
|
+
if (!SOURCE_EXTENSIONS.has(fileExt(rel)))
|
|
57
|
+
continue;
|
|
58
|
+
let content;
|
|
59
|
+
try {
|
|
60
|
+
content = readFileSync(join(repoRoot, rel), "utf8");
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
for (const m of content.matchAll(INV_RE))
|
|
66
|
+
cited.add(`INV-${m[1]}`);
|
|
67
|
+
for (const m of content.matchAll(DEC_RE))
|
|
68
|
+
cited.add(`DEC-${m[1]}`);
|
|
69
|
+
}
|
|
70
|
+
return cited;
|
|
71
|
+
}
|
|
72
|
+
function listEntityFiles(dir) {
|
|
73
|
+
try {
|
|
74
|
+
return readdirSync(dir, { withFileTypes: true, encoding: "utf8" })
|
|
75
|
+
.filter((d) => d.isFile() && d.name.endsWith(".md") && !d.name.startsWith("_"))
|
|
76
|
+
.map((d) => d.name);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** True when `generated` is present and within the grace window. */
|
|
83
|
+
function withinGrace(generated, now) {
|
|
84
|
+
if (typeof generated !== "string" || generated.length === 0)
|
|
85
|
+
return false;
|
|
86
|
+
const ts = Date.parse(generated);
|
|
87
|
+
if (Number.isNaN(ts))
|
|
88
|
+
return false;
|
|
89
|
+
return now.getTime() - ts < GRACE_MS;
|
|
90
|
+
}
|
|
91
|
+
export function runEntityOrphan(opts) {
|
|
92
|
+
const now = opts.now ?? new Date();
|
|
93
|
+
const findings = [];
|
|
94
|
+
const orphans = [];
|
|
95
|
+
const cited = collectCitedIds(opts.repoRoot);
|
|
96
|
+
const groups = [
|
|
97
|
+
{ kind: "DEC", dir: decisionsDir(opts.repoRoot), rel: ".cairn/ground/decisions" },
|
|
98
|
+
{ kind: "INV", dir: invariantsDir(opts.repoRoot), rel: ".cairn/ground/invariants" },
|
|
99
|
+
];
|
|
100
|
+
for (const group of groups) {
|
|
101
|
+
for (const file of listEntityFiles(group.dir)) {
|
|
102
|
+
const abs = join(group.dir, file);
|
|
103
|
+
let fm;
|
|
104
|
+
try {
|
|
105
|
+
fm = parseFrontmatterRecord(readFileSync(abs, "utf8")).fm;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
const id = typeof fm["id"] === "string" ? fm["id"] : "";
|
|
111
|
+
if (id.length === 0)
|
|
112
|
+
continue;
|
|
113
|
+
// Skip entities already out of the active set.
|
|
114
|
+
const status = typeof fm["status"] === "string" ? fm["status"] : "";
|
|
115
|
+
if (status === "archived" || status === "superseded")
|
|
116
|
+
continue;
|
|
117
|
+
// Grace window — don't retire freshly-emitted entities.
|
|
118
|
+
if (withinGrace(fm["generated"], now))
|
|
119
|
+
continue;
|
|
120
|
+
const sotKind = typeof fm["sot_kind"] === "string" ? fm["sot_kind"] : "ledger";
|
|
121
|
+
const entityPath = `${group.rel}/${file}`;
|
|
122
|
+
let candidate = null;
|
|
123
|
+
if (sotKind === "path") {
|
|
124
|
+
const sotPath = typeof fm["sot_path"] === "string" ? fm["sot_path"] : "";
|
|
125
|
+
const filePart = sotPath.split("#")[0] ?? "";
|
|
126
|
+
if (filePart.length > 0 &&
|
|
127
|
+
filePart !== "ledger" &&
|
|
128
|
+
!existsSync(join(opts.repoRoot, filePart))) {
|
|
129
|
+
candidate = {
|
|
130
|
+
id,
|
|
131
|
+
kind: group.kind,
|
|
132
|
+
sotKind,
|
|
133
|
+
classification: "safe",
|
|
134
|
+
reason: `orphan-by-source: doc-backed source "${filePart}" no longer exists`,
|
|
135
|
+
entityPath,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// ledger-backed — keyed on live citation presence.
|
|
141
|
+
if (!cited.has(id)) {
|
|
142
|
+
const sourceFile = typeof fm["source_file"] === "string" ? fm["source_file"] : "";
|
|
143
|
+
const srcGone = sourceFile.length === 0 || !existsSync(join(opts.repoRoot, sourceFile));
|
|
144
|
+
candidate = {
|
|
145
|
+
id,
|
|
146
|
+
kind: group.kind,
|
|
147
|
+
sotKind,
|
|
148
|
+
classification: srcGone ? "safe" : "ambiguous",
|
|
149
|
+
reason: srcGone
|
|
150
|
+
? "orphan-by-source: source_file gone and zero live §cites remain"
|
|
151
|
+
: "orphan-by-source: zero live §cites remain (source_file still present — review)",
|
|
152
|
+
entityPath,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (candidate === null)
|
|
157
|
+
continue;
|
|
158
|
+
orphans.push(candidate);
|
|
159
|
+
findings.push({
|
|
160
|
+
pass: PASS_ID,
|
|
161
|
+
kind: "orphan_entity",
|
|
162
|
+
path: entityPath,
|
|
163
|
+
detail: `${id} (${candidate.classification}) — ${candidate.reason}`,
|
|
164
|
+
severity: "warn",
|
|
165
|
+
matched_text: id,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return { findings, orphans };
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=entity-orphan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-orphan.js","sourceRoot":"","sources":["../../src/gc/entity-orphan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,MAAM,OAAO,GAAG,eAAwB,CAAC;AACzC,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AAEzC,MAAM,MAAM,GAAG,wBAAwB,CAAC;AACxC,MAAM,MAAM,GAAG,wBAAwB,CAAC;AAExC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC5C,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IACtE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM;IACvC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO;CACpD,CAAC,CAAC;AA2BH,SAAS,OAAO,CAAC,IAAY;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACzD,CAAC;AAED,oFAAoF;AACpF,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAAE,SAAS;QACnD,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnE,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;aAC/D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aAC9E,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,SAAS,WAAW,CAAC,SAAkB,EAAE,GAAS;IAChD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1E,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAyB;IACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAgB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAwD;QAClE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,yBAAyB,EAAE;QACjF,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,0BAA0B,EAAE;KACpF,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAClC,IAAI,EAA2B,CAAC;YAChC,IAAI,CAAC;gBACH,EAAE,GAAG,sBAAsB,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,EAAE,CAAC,IAAI,CAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAE9B,+CAA+C;YAC/C,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,EAAE,CAAC,QAAQ,CAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,YAAY;gBAAE,SAAS;YAE/D,wDAAwD;YACxD,IAAI,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC;gBAAE,SAAS;YAEhD,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,EAAE,CAAC,UAAU,CAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC3F,MAAM,UAAU,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;YAE1C,IAAI,SAAS,GAA2B,IAAI,CAAC;YAE7C,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,EAAE,CAAC,UAAU,CAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrF,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7C,IACE,QAAQ,CAAC,MAAM,GAAG,CAAC;oBACnB,QAAQ,KAAK,QAAQ;oBACrB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAC1C,CAAC;oBACD,SAAS,GAAG;wBACV,EAAE;wBACF,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,OAAO;wBACP,cAAc,EAAE,MAAM;wBACtB,MAAM,EAAE,wCAAwC,QAAQ,oBAAoB;wBAC5E,UAAU;qBACX,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,mDAAmD;gBACnD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBACnB,MAAM,UAAU,GACd,OAAO,EAAE,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,EAAE,CAAC,aAAa,CAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7E,MAAM,OAAO,GACX,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;oBAC1E,SAAS,GAAG;wBACV,EAAE;wBACF,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,OAAO;wBACP,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW;wBAC9C,MAAM,EAAE,OAAO;4BACb,CAAC,CAAC,gEAAgE;4BAClE,CAAC,CAAC,gFAAgF;wBACpF,UAAU;qBACX,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,IAAI,SAAS,KAAK,IAAI;gBAAE,SAAS;YACjC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,GAAG,EAAE,KAAK,SAAS,CAAC,cAAc,OAAO,SAAS,CAAC,MAAM,EAAE;gBACnE,QAAQ,EAAE,MAAM;gBAChB,YAAY,EAAE,EAAE;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC"}
|
package/dist/gc/index.d.ts
CHANGED
|
@@ -30,6 +30,10 @@ export { runDocGardening } from "./doc-gardening.js";
|
|
|
30
30
|
export type { DocGardeningOptions, DocGardeningResult, } from "./doc-gardening.js";
|
|
31
31
|
export { extractSectionByAnchor, runDocSourceDrift, slugifyHeading, } from "./doc-source-drift.js";
|
|
32
32
|
export type { DocSourceDriftOptions, DocSourceDriftResult, } from "./doc-source-drift.js";
|
|
33
|
+
export { runEntityOrphan } from "./entity-orphan.js";
|
|
34
|
+
export type { EntityOrphanOptions, EntityOrphanResult, OrphanCandidate, OrphanClassification, } from "./entity-orphan.js";
|
|
35
|
+
export { runEntityRetire } from "./retire.js";
|
|
36
|
+
export type { EntityRetireOptions, EntityRetireResult, } from "./retire.js";
|
|
33
37
|
export { runFrontmatterFreshness, } from "./frontmatter.js";
|
|
34
38
|
export type { FrontmatterFreshnessOptions, FrontmatterFreshnessResult, } from "./frontmatter.js";
|
|
35
39
|
export { runGeneratorDrift } from "./generator-drift.js";
|
package/dist/gc/index.js
CHANGED
|
@@ -22,6 +22,8 @@ export { runCompletionIntegrity } from "./completion-integrity.js";
|
|
|
22
22
|
export { runDocClaimsVsRuntime } from "./doc-claims.js";
|
|
23
23
|
export { runDocGardening } from "./doc-gardening.js";
|
|
24
24
|
export { extractSectionByAnchor, runDocSourceDrift, slugifyHeading, } from "./doc-source-drift.js";
|
|
25
|
+
export { runEntityOrphan } from "./entity-orphan.js";
|
|
26
|
+
export { runEntityRetire } from "./retire.js";
|
|
25
27
|
export { runFrontmatterFreshness, } from "./frontmatter.js";
|
|
26
28
|
export { runGeneratorDrift } from "./generator-drift.js";
|
|
27
29
|
export { runQualityUpdate as runQualityGradesUpdate } from "./quality-update.js";
|
package/dist/gc/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gc/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAYH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAK/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAKnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAOxD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAKrD,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,GACf,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EACL,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAKzD,OAAO,EAAE,gBAAgB,IAAI,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAIjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAK7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAKvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAIpD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAKpD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gc/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAYH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAK/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAKnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAOxD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAKrD,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,GACf,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAOrD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAK9C,OAAO,EACL,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAKzD,OAAO,EAAE,gBAAgB,IAAI,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAIjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAK7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAKvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAIpD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAKpD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity retirement — apply half of the orphan subsystem.
|
|
3
|
+
*
|
|
4
|
+
* Runs the `entity-orphan` pass, then archives the SAFE subset
|
|
5
|
+
* (provably orphaned: doc source gone, or zero live §cites + source_file
|
|
6
|
+
* gone) via `archiveEntity`. Ambiguous orphans are never auto-retired —
|
|
7
|
+
* they surface for operator/agent triage through cairn-attention.
|
|
8
|
+
*
|
|
9
|
+
* The apply is wrapped in the same canary/rollback envelope the GC batch
|
|
10
|
+
* uses: after the archive commit lands, `runGcCanary` rebuilds the
|
|
11
|
+
* manifest and sanity-checks ground state; on failure the whole batch is
|
|
12
|
+
* `git reset --hard` back to the pre-batch SHA. Archiving never
|
|
13
|
+
* hard-deletes, so even a rolled-back run leaves no dangling references.
|
|
14
|
+
*
|
|
15
|
+
* `apply: false` (the default) is surface-only — it returns what *would*
|
|
16
|
+
* be retired without mutating anything. The Stop-hook autotrigger and
|
|
17
|
+
* `cairn gc retire --apply` opt into the mutating path.
|
|
18
|
+
*/
|
|
19
|
+
import { type OrphanCandidate } from "./entity-orphan.js";
|
|
20
|
+
import type { GcFinding } from "./types.js";
|
|
21
|
+
export interface EntityRetireOptions {
|
|
22
|
+
repoRoot: string;
|
|
23
|
+
/** When false (default) the run is surface-only — no archive, no commit. */
|
|
24
|
+
apply?: boolean;
|
|
25
|
+
/** Re-run the canary after the archive commit lands. Default true. */
|
|
26
|
+
canary?: boolean;
|
|
27
|
+
/** Override the commit author (smoke convenience). */
|
|
28
|
+
author?: {
|
|
29
|
+
name: string;
|
|
30
|
+
email: string;
|
|
31
|
+
};
|
|
32
|
+
/** Inject "now" for the grace window (tests). */
|
|
33
|
+
now?: Date;
|
|
34
|
+
}
|
|
35
|
+
export interface RetiredEntity {
|
|
36
|
+
id: string;
|
|
37
|
+
kind: "DEC" | "INV";
|
|
38
|
+
archivedPath: string;
|
|
39
|
+
reason: string;
|
|
40
|
+
}
|
|
41
|
+
export interface EntityRetireResult {
|
|
42
|
+
/** All orphan findings (safe + ambiguous) for the sweep surface. */
|
|
43
|
+
findings: GcFinding[];
|
|
44
|
+
/** Entities archived this run (empty when apply=false or rolled back). */
|
|
45
|
+
retired: RetiredEntity[];
|
|
46
|
+
/** Safe orphans not retired — surface-only mode, archive failure, or rollback. */
|
|
47
|
+
surfaced: OrphanCandidate[];
|
|
48
|
+
/** Ambiguous orphans — always surfaced, never auto-retired. */
|
|
49
|
+
ambiguous: OrphanCandidate[];
|
|
50
|
+
pre_sha: string | null;
|
|
51
|
+
post_sha: string | null;
|
|
52
|
+
commit_sha: string | null;
|
|
53
|
+
canary_ok: boolean;
|
|
54
|
+
canary_failures: string[];
|
|
55
|
+
rolled_back: boolean;
|
|
56
|
+
}
|
|
57
|
+
export declare function runEntityRetire(opts: EntityRetireOptions): Promise<EntityRetireResult>;
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity retirement — apply half of the orphan subsystem.
|
|
3
|
+
*
|
|
4
|
+
* Runs the `entity-orphan` pass, then archives the SAFE subset
|
|
5
|
+
* (provably orphaned: doc source gone, or zero live §cites + source_file
|
|
6
|
+
* gone) via `archiveEntity`. Ambiguous orphans are never auto-retired —
|
|
7
|
+
* they surface for operator/agent triage through cairn-attention.
|
|
8
|
+
*
|
|
9
|
+
* The apply is wrapped in the same canary/rollback envelope the GC batch
|
|
10
|
+
* uses: after the archive commit lands, `runGcCanary` rebuilds the
|
|
11
|
+
* manifest and sanity-checks ground state; on failure the whole batch is
|
|
12
|
+
* `git reset --hard` back to the pre-batch SHA. Archiving never
|
|
13
|
+
* hard-deletes, so even a rolled-back run leaves no dangling references.
|
|
14
|
+
*
|
|
15
|
+
* `apply: false` (the default) is surface-only — it returns what *would*
|
|
16
|
+
* be retired without mutating anything. The Stop-hook autotrigger and
|
|
17
|
+
* `cairn gc retire --apply` opt into the mutating path.
|
|
18
|
+
*/
|
|
19
|
+
import { simpleGit } from "simple-git";
|
|
20
|
+
import { archiveEntity, recordDriftEvent } from "@isaacriehm/cairn-state";
|
|
21
|
+
import { logger } from "../logger.js";
|
|
22
|
+
import { runGcCanary } from "./canary.js";
|
|
23
|
+
import { runEntityOrphan } from "./entity-orphan.js";
|
|
24
|
+
const log = logger("gc.retire");
|
|
25
|
+
function commitSubject(retired) {
|
|
26
|
+
const decs = retired.filter((r) => r.kind === "DEC").length;
|
|
27
|
+
const invs = retired.filter((r) => r.kind === "INV").length;
|
|
28
|
+
const parts = [];
|
|
29
|
+
if (decs > 0)
|
|
30
|
+
parts.push(`${decs} DEC`);
|
|
31
|
+
if (invs > 0)
|
|
32
|
+
parts.push(`${invs} INV`);
|
|
33
|
+
return `chore(gc): retire ${parts.join(" + ")} orphaned ${retired.length === 1 ? "entity" : "entities"}`;
|
|
34
|
+
}
|
|
35
|
+
function commitMessage(retired) {
|
|
36
|
+
const body = retired
|
|
37
|
+
.map((r) => `- ${r.id}: ${r.reason} → ${r.archivedPath}`)
|
|
38
|
+
.join("\n");
|
|
39
|
+
return `${commitSubject(retired)}\n\nArchived by the entity-orphan GC pass:\n${body}\n`;
|
|
40
|
+
}
|
|
41
|
+
export async function runEntityRetire(opts) {
|
|
42
|
+
const apply = opts.apply === true;
|
|
43
|
+
const canaryEnabled = opts.canary ?? true;
|
|
44
|
+
const orphanRun = runEntityOrphan({
|
|
45
|
+
repoRoot: opts.repoRoot,
|
|
46
|
+
...(opts.now !== undefined ? { now: opts.now } : {}),
|
|
47
|
+
});
|
|
48
|
+
const safe = orphanRun.orphans.filter((o) => o.classification === "safe");
|
|
49
|
+
const ambiguous = orphanRun.orphans.filter((o) => o.classification === "ambiguous");
|
|
50
|
+
// Ambiguous orphans are never auto-retired — surface them as drift events
|
|
51
|
+
// so cairn-attention can offer a one-tap retire (or prompt a fix). Recorded
|
|
52
|
+
// whether or not we apply, since this is the dedicated retirement entry
|
|
53
|
+
// point invoked by the autonomous daily tick.
|
|
54
|
+
const driftTs = (opts.now ?? new Date()).toISOString();
|
|
55
|
+
for (const a of ambiguous) {
|
|
56
|
+
try {
|
|
57
|
+
recordDriftEvent(opts.repoRoot, {
|
|
58
|
+
ts: driftTs,
|
|
59
|
+
kind: "orphan_entity",
|
|
60
|
+
path: a.entityPath,
|
|
61
|
+
detail: `${a.id} orphaned (${a.reason}). Retire via cairn_retire_${a.kind === "INV" ? "invariant" : "decision"}, or restore a live §cite.`,
|
|
62
|
+
severity: "soft",
|
|
63
|
+
dec_id: a.id,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
/* best-effort — drift log is advisory */
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const base = {
|
|
71
|
+
findings: orphanRun.findings,
|
|
72
|
+
retired: [],
|
|
73
|
+
surfaced: [...safe],
|
|
74
|
+
ambiguous,
|
|
75
|
+
pre_sha: null,
|
|
76
|
+
post_sha: null,
|
|
77
|
+
commit_sha: null,
|
|
78
|
+
canary_ok: true,
|
|
79
|
+
canary_failures: [],
|
|
80
|
+
rolled_back: false,
|
|
81
|
+
};
|
|
82
|
+
if (!apply || safe.length === 0) {
|
|
83
|
+
return base;
|
|
84
|
+
}
|
|
85
|
+
// Snapshot pre-batch SHA for rollback. Absent git (or a non-repo) still
|
|
86
|
+
// archives — the state change is the point — it just skips commit/canary.
|
|
87
|
+
const git = simpleGit({ baseDir: opts.repoRoot });
|
|
88
|
+
let preSha = null;
|
|
89
|
+
try {
|
|
90
|
+
preSha = (await git.revparse(["HEAD"])).trim();
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
preSha = null;
|
|
94
|
+
}
|
|
95
|
+
const retired = [];
|
|
96
|
+
const failedToArchive = [];
|
|
97
|
+
for (const cand of safe) {
|
|
98
|
+
const res = archiveEntity({
|
|
99
|
+
repoRoot: opts.repoRoot,
|
|
100
|
+
id: cand.id,
|
|
101
|
+
reason: cand.reason,
|
|
102
|
+
...(opts.now !== undefined ? { now: opts.now } : {}),
|
|
103
|
+
});
|
|
104
|
+
if (res.ok) {
|
|
105
|
+
retired.push({
|
|
106
|
+
id: res.id,
|
|
107
|
+
kind: res.kind,
|
|
108
|
+
archivedPath: res.archivedPath,
|
|
109
|
+
reason: cand.reason,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
failedToArchive.push(cand);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (retired.length === 0) {
|
|
117
|
+
return { ...base, retired: [], surfaced: failedToArchive, pre_sha: preSha };
|
|
118
|
+
}
|
|
119
|
+
// Commit the archive move + ledger rebuild + cache prune as one chore(gc).
|
|
120
|
+
let commitSha = null;
|
|
121
|
+
if (preSha !== null) {
|
|
122
|
+
try {
|
|
123
|
+
if (opts.author !== undefined) {
|
|
124
|
+
await git.addConfig("user.name", opts.author.name, false, "local");
|
|
125
|
+
await git.addConfig("user.email", opts.author.email, false, "local");
|
|
126
|
+
}
|
|
127
|
+
await git.raw(["add", "-A", ".cairn/ground"]);
|
|
128
|
+
await git.commit(commitMessage(retired));
|
|
129
|
+
commitSha = (await git.revparse(["HEAD"])).trim();
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
log.warn({ err: err instanceof Error ? err.message : String(err) }, "entity-retire commit failed; archive applied to working tree only");
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Canary — rebuild manifest + sanity-check ground state. Rollback on fail.
|
|
136
|
+
let canaryOk = true;
|
|
137
|
+
let canaryFailures = [];
|
|
138
|
+
let rolledBack = false;
|
|
139
|
+
if (canaryEnabled && commitSha !== null && preSha !== null) {
|
|
140
|
+
const canary = runGcCanary({ repoRoot: opts.repoRoot });
|
|
141
|
+
canaryOk = canary.ok;
|
|
142
|
+
canaryFailures = canary.failures;
|
|
143
|
+
if (!canary.ok) {
|
|
144
|
+
try {
|
|
145
|
+
await git.reset(["--hard", preSha]);
|
|
146
|
+
rolledBack = true;
|
|
147
|
+
log.warn({ repo: opts.repoRoot, pre_sha: preSha, retired: retired.length, failures: canary.failures }, "entity-retire rolled back — canary failed");
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
log.warn({ err: err instanceof Error ? err.message : String(err) }, "entity-retire rollback failed");
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (rolledBack) {
|
|
155
|
+
return {
|
|
156
|
+
...base,
|
|
157
|
+
retired: [],
|
|
158
|
+
surfaced: [...safe],
|
|
159
|
+
pre_sha: preSha,
|
|
160
|
+
post_sha: preSha,
|
|
161
|
+
commit_sha: null,
|
|
162
|
+
canary_ok: false,
|
|
163
|
+
canary_failures: canaryFailures,
|
|
164
|
+
rolled_back: true,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
let postSha = commitSha;
|
|
168
|
+
if (postSha === null && preSha !== null) {
|
|
169
|
+
try {
|
|
170
|
+
postSha = (await git.revparse(["HEAD"])).trim();
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
postSha = preSha;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
log.info({ repo: opts.repoRoot, retired: retired.length, ambiguous: ambiguous.length, commit: commitSha }, "entity-retire complete");
|
|
177
|
+
return {
|
|
178
|
+
...base,
|
|
179
|
+
retired,
|
|
180
|
+
surfaced: failedToArchive,
|
|
181
|
+
pre_sha: preSha,
|
|
182
|
+
post_sha: postSha,
|
|
183
|
+
commit_sha: commitSha,
|
|
184
|
+
canary_ok: canaryOk,
|
|
185
|
+
canary_failures: canaryFailures,
|
|
186
|
+
rolled_back: false,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=retire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retire.js","sourceRoot":"","sources":["../../src/gc/retire.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAwB,MAAM,oBAAoB,CAAC;AAG3E,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAsChC,SAAS,aAAa,CAAC,OAAwB;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC;IAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC;IAC5D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,IAAI,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC;IACxC,IAAI,IAAI,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC;IACxC,OAAO,qBAAqB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AAC3G,CAAC;AAED,SAAS,aAAa,CAAC,OAAwB;IAC7C,MAAM,IAAI,GAAG,OAAO;SACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC;SACxD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,+CAA+C,IAAI,IAAI,CAAC;AAC1F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAyB;IAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;IAClC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;IAE1C,MAAM,SAAS,GAAG,eAAe,CAAC;QAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrD,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,WAAW,CAAC,CAAC;IAEpF,0EAA0E;IAC1E,4EAA4E;IAC5E,wEAAwE;IACxE,8CAA8C;IAC9C,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC9B,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,CAAC,CAAC,UAAU;gBAClB,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,MAAM,8BAA8B,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,4BAA4B;gBAC1I,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,CAAC,CAAC,EAAE;aACb,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;QAC3C,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAuB;QAC/B,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;QACnB,SAAS;QACT,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,IAAI;QACf,eAAe,EAAE,EAAE;QACnB,WAAW,EAAE,KAAK;KACnB,CAAC;IAEF,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wEAAwE;IACxE,0EAA0E;IAC1E,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClD,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,MAAM,eAAe,GAAsB,EAAE,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,aAAa,CAAC;YACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrD,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC9E,CAAC;IAED,2EAA2E;IAC3E,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;gBACnE,MAAM,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;YAC9C,MAAM,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;YACzC,SAAS,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CACN,EAAE,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACzD,mEAAmE,CACpE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,IAAI,cAAc,GAAa,EAAE,CAAC;IAClC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,aAAa,IAAI,SAAS,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;QACrB,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;gBACpC,UAAU,GAAG,IAAI,CAAC;gBAClB,GAAG,CAAC,IAAI,CACN,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,EAC5F,2CAA2C,CAC5C,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,IAAI,CACN,EAAE,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACzD,+BAA+B,CAChC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO;YACL,GAAG,IAAI;YACP,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;YACnB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,MAAM;YAChB,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,KAAK;YAChB,eAAe,EAAE,cAAc;YAC/B,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,GAAkB,SAAS,CAAC;IACvC,IAAI,OAAO,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,MAAM,CAAC;QACnB,CAAC;IACH,CAAC;IAED,GAAG,CAAC,IAAI,CACN,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAChG,wBAAwB,CACzB,CAAC;IAEF,OAAO;QACL,GAAG,IAAI;QACP,OAAO;QACP,QAAQ,EAAE,eAAe;QACzB,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,QAAQ;QACnB,eAAe,EAAE,cAAc;QAC/B,WAAW,EAAE,KAAK;KACnB,CAAC;AACJ,CAAC"}
|
package/dist/gc/sweep.js
CHANGED
|
@@ -23,6 +23,7 @@ import { runCompletionIntegrity } from "./completion-integrity.js";
|
|
|
23
23
|
import { runDocClaimsVsRuntime } from "./doc-claims.js";
|
|
24
24
|
import { runDocGardening } from "./doc-gardening.js";
|
|
25
25
|
import { runDocSourceDrift } from "./doc-source-drift.js";
|
|
26
|
+
import { runEntityOrphan } from "./entity-orphan.js";
|
|
26
27
|
import { runFrontmatterFreshness } from "./frontmatter.js";
|
|
27
28
|
import { runGeneratorDrift } from "./generator-drift.js";
|
|
28
29
|
import { runQualityUpdate } from "./quality-update.js";
|
|
@@ -47,6 +48,7 @@ export async function runGcSweep(opts) {
|
|
|
47
48
|
"attested-commits-pruning": 0,
|
|
48
49
|
"doc-claims-vs-runtime": 0,
|
|
49
50
|
"doc-source-drift": 0,
|
|
51
|
+
"entity-orphan": 0,
|
|
50
52
|
};
|
|
51
53
|
// 1. Frontmatter freshness.
|
|
52
54
|
{
|
|
@@ -143,6 +145,15 @@ export async function runGcSweep(opts) {
|
|
|
143
145
|
findings.push(...r.findings);
|
|
144
146
|
passDurations["doc-source-drift"] = Date.now() - t0;
|
|
145
147
|
}
|
|
148
|
+
// 12. Entity-orphan — ledger → code; surface DEC/INV that no longer have
|
|
149
|
+
// a live home. Findings only; the safe subset is retired by the
|
|
150
|
+
// `cairn gc retire` apply path, not auto-merged as a Gc proposal.
|
|
151
|
+
{
|
|
152
|
+
const t0 = Date.now();
|
|
153
|
+
const r = runEntityOrphan({ repoRoot: opts.repoRoot });
|
|
154
|
+
findings.push(...r.findings);
|
|
155
|
+
passDurations["entity-orphan"] = Date.now() - t0;
|
|
156
|
+
}
|
|
146
157
|
// Re-classify proposals against project globs (passes set defaults; this
|
|
147
158
|
// ensures high-stakes hits dominate when a stale-frontmatter doc happens to
|
|
148
159
|
// live under a high-stakes glob).
|