@dzhechkov/harness-core 0.8.11 → 0.8.21
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/.dz-manifest.json +399 -139
- package/LICENSE +13 -0
- package/README.md +420 -6
- package/dist/agents-policy.d.ts +15 -1
- package/dist/agents-policy.d.ts.map +1 -1
- package/dist/agents-policy.js +27 -1
- package/dist/agents-policy.js.map +1 -1
- package/dist/amendment-trace.d.ts +72 -0
- package/dist/amendment-trace.d.ts.map +1 -1
- package/dist/amendment-trace.js +385 -17
- package/dist/amendment-trace.js.map +1 -1
- package/dist/backlog-public.d.ts +153 -0
- package/dist/backlog-public.d.ts.map +1 -0
- package/dist/backlog-public.js +415 -0
- package/dist/backlog-public.js.map +1 -0
- package/dist/backlog-transitions.d.ts +48 -0
- package/dist/backlog-transitions.d.ts.map +1 -0
- package/dist/backlog-transitions.js +64 -0
- package/dist/backlog-transitions.js.map +1 -0
- package/dist/backlog.d.ts.map +1 -1
- package/dist/backlog.js +13 -0
- package/dist/backlog.js.map +1 -1
- package/dist/claim-check.d.ts.map +1 -1
- package/dist/claim-check.js +24 -2
- package/dist/claim-check.js.map +1 -1
- package/dist/claude-hooks-assets.d.ts +93 -0
- package/dist/claude-hooks-assets.d.ts.map +1 -0
- package/dist/claude-hooks-assets.js +208 -0
- package/dist/claude-hooks-assets.js.map +1 -0
- package/dist/clean-room-smoke.d.ts +83 -0
- package/dist/clean-room-smoke.d.ts.map +1 -0
- package/dist/clean-room-smoke.js +138 -0
- package/dist/clean-room-smoke.js.map +1 -0
- package/dist/cmd-usage.d.ts.map +1 -1
- package/dist/cmd-usage.js +36 -6
- package/dist/cmd-usage.js.map +1 -1
- package/dist/codex-hooks-assets.d.ts +25 -7
- package/dist/codex-hooks-assets.d.ts.map +1 -1
- package/dist/codex-hooks-assets.js +138 -30
- package/dist/codex-hooks-assets.js.map +1 -1
- package/dist/codex-hooks.d.ts +21 -1
- package/dist/codex-hooks.d.ts.map +1 -1
- package/dist/codex-hooks.js +21 -1
- package/dist/codex-hooks.js.map +1 -1
- package/dist/course-staleness.d.ts +19 -0
- package/dist/course-staleness.d.ts.map +1 -0
- package/dist/course-staleness.js +95 -0
- package/dist/course-staleness.js.map +1 -0
- package/dist/destructive-guard-hook.d.ts +40 -0
- package/dist/destructive-guard-hook.d.ts.map +1 -0
- package/dist/destructive-guard-hook.js +109 -0
- package/dist/destructive-guard-hook.js.map +1 -0
- package/dist/destructive-guard.d.ts +27 -0
- package/dist/destructive-guard.d.ts.map +1 -0
- package/dist/destructive-guard.js +2808 -0
- package/dist/destructive-guard.js.map +1 -0
- package/dist/discrimination-gate.d.ts +28 -3
- package/dist/discrimination-gate.d.ts.map +1 -1
- package/dist/discrimination-gate.js +76 -16
- package/dist/discrimination-gate.js.map +1 -1
- package/dist/feature-adr-routing.d.ts +95 -1
- package/dist/feature-adr-routing.d.ts.map +1 -1
- package/dist/feature-adr-routing.js +193 -27
- package/dist/feature-adr-routing.js.map +1 -1
- package/dist/guard.d.ts +90 -0
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +271 -0
- package/dist/guard.js.map +1 -1
- package/dist/harness-core-location.d.ts +18 -0
- package/dist/harness-core-location.d.ts.map +1 -0
- package/dist/harness-core-location.js +42 -0
- package/dist/harness-core-location.js.map +1 -0
- package/dist/index.d.ts +24 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -3
- package/dist/index.js.map +1 -1
- package/dist/lead-shift-gate.d.ts +95 -0
- package/dist/lead-shift-gate.d.ts.map +1 -0
- package/dist/lead-shift-gate.js +100 -0
- package/dist/lead-shift-gate.js.map +1 -0
- package/dist/ledger-backfill.d.ts +11 -1
- package/dist/ledger-backfill.d.ts.map +1 -1
- package/dist/ledger-backfill.js +19 -0
- package/dist/ledger-backfill.js.map +1 -1
- package/dist/loop-blobs.generated.d.ts +1 -1
- package/dist/loop-blobs.generated.d.ts.map +1 -1
- package/dist/loop-blobs.generated.js +12 -3
- package/dist/loop-blobs.generated.js.map +1 -1
- package/dist/loop-lint.d.ts.map +1 -1
- package/dist/loop-lint.js +56 -7
- package/dist/loop-lint.js.map +1 -1
- package/dist/loop-plan-graph.d.ts +1 -3
- package/dist/loop-plan-graph.d.ts.map +1 -1
- package/dist/loop-plan-graph.js +70 -1
- package/dist/loop-plan-graph.js.map +1 -1
- package/dist/loop-trace.d.ts.map +1 -1
- package/dist/loop-trace.js +16 -2
- package/dist/loop-trace.js.map +1 -1
- package/dist/managed-hooks.d.ts +5 -6
- package/dist/managed-hooks.d.ts.map +1 -1
- package/dist/managed-hooks.js +2 -2
- package/dist/managed-hooks.js.map +1 -1
- package/dist/model-recommender.d.ts.map +1 -1
- package/dist/model-recommender.js +14 -3
- package/dist/model-recommender.js.map +1 -1
- package/dist/operations.d.ts.map +1 -1
- package/dist/operations.js +82 -0
- package/dist/operations.js.map +1 -1
- package/dist/patterns.d.ts +23 -0
- package/dist/patterns.d.ts.map +1 -1
- package/dist/patterns.js +10 -0
- package/dist/patterns.js.map +1 -1
- package/dist/publish.d.ts +11 -0
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +16 -2
- package/dist/publish.js.map +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +3 -2
- package/dist/registry.js.map +1 -1
- package/dist/score.d.ts.map +1 -1
- package/dist/score.js +15 -4
- package/dist/score.js.map +1 -1
- package/dist/session-retro.d.ts +121 -2
- package/dist/session-retro.d.ts.map +1 -1
- package/dist/session-retro.js +454 -11
- package/dist/session-retro.js.map +1 -1
- package/dist/setup.d.ts +28 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +223 -6
- package/dist/setup.js.map +1 -1
- package/dist/sign.d.ts.map +1 -1
- package/dist/sign.js +18 -1
- package/dist/sign.js.map +1 -1
- package/dist/skills-verify.d.ts +34 -1
- package/dist/skills-verify.d.ts.map +1 -1
- package/dist/skills-verify.js +82 -0
- package/dist/skills-verify.js.map +1 -1
- package/dist/stage-line.d.ts +68 -0
- package/dist/stage-line.d.ts.map +1 -0
- package/dist/stage-line.js +129 -0
- package/dist/stage-line.js.map +1 -0
- package/dist/statusline.d.ts +99 -0
- package/dist/statusline.d.ts.map +1 -1
- package/dist/statusline.js +310 -44
- package/dist/statusline.js.map +1 -1
- package/dist/store-counts.d.ts +26 -0
- package/dist/store-counts.d.ts.map +1 -0
- package/dist/store-counts.js +125 -0
- package/dist/store-counts.js.map +1 -0
- package/dist/store-guard.d.ts +106 -0
- package/dist/store-guard.d.ts.map +1 -0
- package/dist/store-guard.js +294 -0
- package/dist/store-guard.js.map +1 -0
- package/dist/swarm-brief.d.ts +95 -0
- package/dist/swarm-brief.d.ts.map +1 -0
- package/dist/swarm-brief.js +660 -0
- package/dist/swarm-brief.js.map +1 -0
- package/dist/trace-bundle.d.ts +8 -0
- package/dist/trace-bundle.d.ts.map +1 -1
- package/dist/trace-bundle.js +11 -0
- package/dist/trace-bundle.js.map +1 -1
- package/package.json +12 -11
- package/sbom.json +804 -154
- package/src/agents-policy.ts +46 -2
- package/src/amendment-trace.ts +441 -19
- package/src/backlog-public.ts +503 -0
- package/src/backlog-transitions.ts +77 -0
- package/src/backlog.ts +12 -0
- package/src/claim-check.ts +25 -2
- package/src/claude-hooks-assets.ts +227 -0
- package/src/clean-room-smoke.ts +195 -0
- package/src/cmd-usage.ts +29 -5
- package/src/codex-hooks-assets.ts +140 -30
- package/src/codex-hooks.ts +21 -1
- package/src/course-staleness.ts +125 -0
- package/src/destructive-guard-hook.ts +151 -0
- package/src/destructive-guard.ts +3027 -0
- package/src/discrimination-gate.ts +98 -19
- package/src/feature-adr-routing.ts +220 -22
- package/src/guard.ts +318 -0
- package/src/harness-core-location.ts +44 -0
- package/src/index.ts +111 -3
- package/src/lead-shift-gate.ts +145 -0
- package/src/ledger-backfill.ts +20 -1
- package/src/loop-blobs.generated.ts +12 -3
- package/src/loop-lint.ts +52 -7
- package/src/loop-plan-graph.ts +66 -1
- package/src/loop-trace.ts +13 -1
- package/src/managed-hooks.ts +5 -6
- package/src/model-recommender.ts +14 -3
- package/src/operations.ts +75 -0
- package/src/patterns.ts +33 -0
- package/src/publish.ts +27 -2
- package/src/registry.ts +3 -2
- package/src/score.ts +16 -4
- package/src/session-retro.ts +466 -11
- package/src/setup.ts +246 -9
- package/src/sign.ts +18 -1
- package/src/skills-verify.ts +99 -1
- package/src/stage-line.ts +151 -0
- package/src/statusline.ts +396 -47
- package/src/store-counts.ts +154 -0
- package/src/store-guard.ts +388 -0
- package/src/swarm-brief.ts +661 -0
- package/src/trace-bundle.ts +10 -0
package/dist/statusline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusline.js","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"statusline.js","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface LearningStoreRowCounts {
|
|
2
|
+
readonly lexicalRows: number | 'unreadable';
|
|
3
|
+
/** Exact active quarantine labels in the selected lexical SQLite tier; absent for fallback/error paths. */
|
|
4
|
+
readonly lexicalQuarantinedRows?: number;
|
|
5
|
+
/** Physical lexical population counted; jsonl and SQLite maxima are not comparable. */
|
|
6
|
+
readonly lexicalSource: 'jsonl' | 'sqlite';
|
|
7
|
+
/** Exact selected physical source. SQLite wins when both stores coexist, matching runtime reads. */
|
|
8
|
+
readonly lexicalSourcePath: string;
|
|
9
|
+
/** Coexisting JSONL is deliberately excluded from the selected SQLite population. */
|
|
10
|
+
readonly lexicalIgnoredRows?: number | 'unreadable';
|
|
11
|
+
readonly lexicalIgnoredSourcePath?: string;
|
|
12
|
+
readonly vectorRows: number | 'unreadable';
|
|
13
|
+
/** Exact active quarantine labels on mirrored lesson rows; absent when the vector tier is missing/unreadable. */
|
|
14
|
+
readonly vectorQuarantinedRows?: number;
|
|
15
|
+
/** Present when the vector store file exists, including when its count is unreadable. */
|
|
16
|
+
readonly vectorSourcePath?: string;
|
|
17
|
+
}
|
|
18
|
+
/** Best-effort readonly SQLite count with a short busy timeout. */
|
|
19
|
+
export declare function countSqliteRowsReadonly(sqlitePath: string, table: 'memory_records' | 'reasoning_patterns'): number | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Count both protected store populations without opening either store writable.
|
|
22
|
+
* Missing tiers count as zero; an existing tier that cannot be counted is
|
|
23
|
+
* explicitly `unreadable`.
|
|
24
|
+
*/
|
|
25
|
+
export declare function countLearningStoreRowsReadonly(projectRoot: string): LearningStoreRowCounts;
|
|
26
|
+
//# sourceMappingURL=store-counts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-counts.d.ts","sourceRoot":"","sources":["../src/store-counts.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CAAC;IAC5C,2GAA2G;IAC3G,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IACzC,uFAAuF;IACvF,QAAQ,CAAC,aAAa,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC3C,oGAAoG;IACpG,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,qFAAqF;IACrF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IACpD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAAC;IAC3C,iHAAiH;IACjH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,yFAAyF;IACzF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAWD,mEAAmE;AACnE,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,gBAAgB,GAAG,oBAAoB,GAC7C,MAAM,GAAG,SAAS,CAepB;AAoDD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,sBAAsB,CAuC1F"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/** Fast, readonly row counts for the two learning-store tiers. */
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
4
|
+
import { join, resolve } from 'node:path';
|
|
5
|
+
function countJsonlRowsReadonly(path) {
|
|
6
|
+
if (!existsSync(path))
|
|
7
|
+
return 0;
|
|
8
|
+
try {
|
|
9
|
+
return readFileSync(path, 'utf-8').split('\n').filter((line) => line.trim() !== '').length;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return 'unreadable';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/** Best-effort readonly SQLite count with a short busy timeout. */
|
|
16
|
+
export function countSqliteRowsReadonly(sqlitePath, table) {
|
|
17
|
+
try {
|
|
18
|
+
const require = createRequire(import.meta.url);
|
|
19
|
+
const Database = require('better-sqlite3');
|
|
20
|
+
const db = new Database(sqlitePath, { readonly: true });
|
|
21
|
+
try {
|
|
22
|
+
db.pragma('busy_timeout = 100');
|
|
23
|
+
const row = db.prepare(`SELECT COUNT(*) as cnt FROM ${table}`).get();
|
|
24
|
+
return typeof row?.cnt === 'number' ? row.cnt : undefined;
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
db.close();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/** One aggregate query on the healthy path; an unsupported metadata shape falls back to total-only. */
|
|
35
|
+
function countSqliteRowsWithQuarantineReadonly(sqlitePath, table) {
|
|
36
|
+
try {
|
|
37
|
+
const require = createRequire(import.meta.url);
|
|
38
|
+
const Database = require('better-sqlite3');
|
|
39
|
+
const db = new Database(sqlitePath, { readonly: true });
|
|
40
|
+
try {
|
|
41
|
+
db.pragma('busy_timeout = 100');
|
|
42
|
+
try {
|
|
43
|
+
const sql = table === 'memory_records'
|
|
44
|
+
? `SELECT COALESCE(SUM(n), 0) AS cnt,
|
|
45
|
+
COALESCE(SUM(CASE WHEN q_status = 'quarantined' THEN n ELSE 0 END), 0) AS quarantined
|
|
46
|
+
FROM (
|
|
47
|
+
SELECT CASE WHEN json_valid(metadata) THEN json_extract(metadata, '$.qStatus') END AS q_status,
|
|
48
|
+
COUNT(*) AS n
|
|
49
|
+
FROM memory_records GROUP BY 1
|
|
50
|
+
)`
|
|
51
|
+
: `WITH lesson_statuses AS (
|
|
52
|
+
SELECT CASE WHEN json_valid(metadata) THEN json_extract(metadata, '$.qStatus') END AS q_status,
|
|
53
|
+
COUNT(*) AS n
|
|
54
|
+
FROM reasoning_patterns
|
|
55
|
+
WHERE task_type IN ('dz-teach', 'dz-learning')
|
|
56
|
+
GROUP BY 1
|
|
57
|
+
)
|
|
58
|
+
SELECT (SELECT COUNT(*) FROM reasoning_patterns) AS cnt,
|
|
59
|
+
COALESCE(SUM(CASE WHEN q_status = 'quarantined' THEN n ELSE 0 END), 0) AS quarantined
|
|
60
|
+
FROM lesson_statuses`;
|
|
61
|
+
const row = db.prepare(sql).get();
|
|
62
|
+
if (typeof row?.cnt !== 'number' || typeof row.quarantined !== 'number')
|
|
63
|
+
return undefined;
|
|
64
|
+
return { rows: row.cnt, quarantinedRows: row.quarantined };
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
const row = db.prepare(`SELECT COUNT(*) AS cnt FROM ${table}`).get();
|
|
68
|
+
return typeof row?.cnt === 'number' ? { rows: row.cnt } : undefined;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
db.close();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Count both protected store populations without opening either store writable.
|
|
81
|
+
* Missing tiers count as zero; an existing tier that cannot be counted is
|
|
82
|
+
* explicitly `unreadable`.
|
|
83
|
+
*/
|
|
84
|
+
export function countLearningStoreRowsReadonly(projectRoot) {
|
|
85
|
+
const root = resolve(projectRoot);
|
|
86
|
+
const lexicalPath = join(root, '.dz', 'memory', 'patterns.sqlite');
|
|
87
|
+
const jsonlPath = join(root, '.dz', 'patterns.jsonl');
|
|
88
|
+
const vectorPath = join(root, '.dz', 'agentdb.db');
|
|
89
|
+
const vectorExists = existsSync(vectorPath);
|
|
90
|
+
const lexicalSource = existsSync(lexicalPath) ? 'sqlite' : 'jsonl';
|
|
91
|
+
const lexicalSqlite = lexicalSource === 'sqlite'
|
|
92
|
+
? countSqliteRowsWithQuarantineReadonly(lexicalPath, 'memory_records')
|
|
93
|
+
: undefined;
|
|
94
|
+
let lexicalRows;
|
|
95
|
+
if (lexicalSource === 'sqlite') {
|
|
96
|
+
lexicalRows = lexicalSqlite?.rows ?? 'unreadable';
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
lexicalRows = countJsonlRowsReadonly(jsonlPath);
|
|
100
|
+
}
|
|
101
|
+
const vectorSqlite = vectorExists
|
|
102
|
+
? countSqliteRowsWithQuarantineReadonly(vectorPath, 'reasoning_patterns')
|
|
103
|
+
: undefined;
|
|
104
|
+
const ignoredJsonl = lexicalSource === 'sqlite' && existsSync(jsonlPath)
|
|
105
|
+
? countJsonlRowsReadonly(jsonlPath)
|
|
106
|
+
: undefined;
|
|
107
|
+
return {
|
|
108
|
+
lexicalRows,
|
|
109
|
+
...(lexicalSqlite?.quarantinedRows === undefined ? {} : {
|
|
110
|
+
lexicalQuarantinedRows: lexicalSqlite.quarantinedRows,
|
|
111
|
+
}),
|
|
112
|
+
lexicalSource,
|
|
113
|
+
lexicalSourcePath: lexicalSource === 'sqlite' ? lexicalPath : jsonlPath,
|
|
114
|
+
...(ignoredJsonl === undefined ? {} : {
|
|
115
|
+
lexicalIgnoredRows: ignoredJsonl,
|
|
116
|
+
lexicalIgnoredSourcePath: jsonlPath,
|
|
117
|
+
}),
|
|
118
|
+
vectorRows: vectorExists ? (vectorSqlite?.rows ?? 'unreadable') : 0,
|
|
119
|
+
...(vectorSqlite?.quarantinedRows === undefined ? {} : {
|
|
120
|
+
vectorQuarantinedRows: vectorSqlite.quarantinedRows,
|
|
121
|
+
}),
|
|
122
|
+
...(vectorExists ? { vectorSourcePath: vectorPath } : {}),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=store-counts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-counts.js","sourceRoot":"","sources":["../src/store-counts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable high-water mark for the two dz learning stores.
|
|
3
|
+
*
|
|
4
|
+
* The mark deliberately lives under the user's home directory, outside the
|
|
5
|
+
* project: deleting `<project>/.dz` must not delete the evidence that a store
|
|
6
|
+
* existed there.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
export declare const STORE_GUARD_VERSION: 1;
|
|
11
|
+
/**
|
|
12
|
+
* A fall of more than 10% from the lifetime maximum is anomalous. A second,
|
|
13
|
+
* absolute threshold below catches a sharp recent loss before it reaches 10%.
|
|
14
|
+
* Basis: across 55 days and 9 measured snapshots the counter never decreased
|
|
15
|
+
* (190 -> 1385), measured 2026-09-06.
|
|
16
|
+
*/
|
|
17
|
+
export declare const STORE_COLLAPSE_MAX_FRACTION = 0.1;
|
|
18
|
+
/** See {@link STORE_COLLAPSE_MAX_FRACTION} for the measured basis. */
|
|
19
|
+
export declare const STORE_COLLAPSE_LAST_ROWS = 50;
|
|
20
|
+
/** Fractional collapse detection is too noisy below this observed population. */
|
|
21
|
+
export declare const STORE_COLLAPSE_MIN_ROWS = 10;
|
|
22
|
+
export interface AcceptedStoreShrink {
|
|
23
|
+
readonly at: string;
|
|
24
|
+
readonly reason: string;
|
|
25
|
+
/** Required on every receipt written by the source-aware guard; absent only on legacy marks. */
|
|
26
|
+
readonly command?: string;
|
|
27
|
+
readonly kind?: 'measured-deletion' | 'source-transition' | 'operator-reset' | 'cold-start-override';
|
|
28
|
+
readonly before?: StoreCountSnapshot;
|
|
29
|
+
readonly after?: StoreCountSnapshot;
|
|
30
|
+
}
|
|
31
|
+
export interface StoreResetReceipt {
|
|
32
|
+
readonly at: string;
|
|
33
|
+
readonly command: string;
|
|
34
|
+
readonly decision: 'manual operator decision';
|
|
35
|
+
readonly before: StoreCountSnapshot;
|
|
36
|
+
readonly after: StoreCountSnapshot;
|
|
37
|
+
readonly reason: string;
|
|
38
|
+
}
|
|
39
|
+
export type StoreCountSource = 'jsonl' | 'sqlite';
|
|
40
|
+
export interface StoreCountSnapshot {
|
|
41
|
+
readonly lexicalRows: number;
|
|
42
|
+
readonly vectorRows: number;
|
|
43
|
+
readonly lexicalSource: StoreCountSource;
|
|
44
|
+
}
|
|
45
|
+
export interface StoreMark {
|
|
46
|
+
readonly project: string;
|
|
47
|
+
/** `unknown` is read-only compatibility for marks written before source tracking existed. */
|
|
48
|
+
readonly lexicalSource: StoreCountSource | 'unknown';
|
|
49
|
+
readonly lexicalMax: number;
|
|
50
|
+
readonly vectorMax: number;
|
|
51
|
+
readonly lexicalLast: number;
|
|
52
|
+
readonly vectorLast: number;
|
|
53
|
+
/** First lexical backend transition since the last explicit reset. */
|
|
54
|
+
readonly sourceChangedAt?: string;
|
|
55
|
+
/** Most recent explicit operator reset. */
|
|
56
|
+
readonly resetAt?: StoreResetReceipt;
|
|
57
|
+
/** Legacy v1 audit field. Readable for compatibility, never re-emitted or treated as authorization. */
|
|
58
|
+
readonly acceptedShrinkAt?: AcceptedStoreShrink;
|
|
59
|
+
readonly updatedAt: string;
|
|
60
|
+
readonly version: number;
|
|
61
|
+
}
|
|
62
|
+
export interface StoreMarkObservation {
|
|
63
|
+
readonly lexicalRows: number;
|
|
64
|
+
readonly vectorRows: number;
|
|
65
|
+
readonly lexicalSource: StoreCountSource;
|
|
66
|
+
readonly observedAt: string;
|
|
67
|
+
/** Command that produced the observation; diagnostic only, never authorization. */
|
|
68
|
+
readonly command?: string;
|
|
69
|
+
}
|
|
70
|
+
export interface StoreMarkWriteOptions {
|
|
71
|
+
/** Zero makes a reader's opportunistic mark refresh a single non-blocking acquisition attempt. */
|
|
72
|
+
readonly timeoutMs?: number;
|
|
73
|
+
/** Writer-preflight compare-and-set used to consume a source transition exactly once. */
|
|
74
|
+
readonly expectedPreviousLexicalSource?: StoreCountSource | 'unknown';
|
|
75
|
+
}
|
|
76
|
+
export type StoreRowCount = number | 'unreadable';
|
|
77
|
+
export type StoreHealthVerdict = 'ok' | 'collapsed' | 'cold-start-over-existing' | 'source-changed' | 'unreadable' | 'no-mark';
|
|
78
|
+
export interface StoreHealth {
|
|
79
|
+
readonly verdict: StoreHealthVerdict;
|
|
80
|
+
readonly reason: string;
|
|
81
|
+
}
|
|
82
|
+
export interface StoreHealthInput {
|
|
83
|
+
readonly projectRoot: string;
|
|
84
|
+
readonly lexicalRows: StoreRowCount;
|
|
85
|
+
readonly lexicalSource: StoreCountSource;
|
|
86
|
+
readonly vectorRows: StoreRowCount;
|
|
87
|
+
readonly mark: StoreMark | undefined;
|
|
88
|
+
}
|
|
89
|
+
/** External high-water-mark path for one canonical project root. */
|
|
90
|
+
export declare function storeGuardPath(projectRoot: string): string;
|
|
91
|
+
/** External directory populated by `scripts/dz-store-snapshot.sh` for this project. */
|
|
92
|
+
export declare function storeSnapshotPath(projectRoot: string): string;
|
|
93
|
+
/** Read the external mark; absence is the only condition represented by `undefined`. */
|
|
94
|
+
export declare function readStoreMark(projectRoot: string): StoreMark | undefined;
|
|
95
|
+
/**
|
|
96
|
+
* Atomically record an ordinary observation. Both maxima are monotonic by
|
|
97
|
+
* construction: no command label, measured deletion, override, or source
|
|
98
|
+
* transition can lower them. A first source transition is recorded as
|
|
99
|
+
* metadata only; a later low-population transition requires an explicit reset.
|
|
100
|
+
*/
|
|
101
|
+
export declare function writeStoreMark(projectRoot: string, observation: StoreMarkObservation, options?: StoreMarkWriteOptions): StoreMark;
|
|
102
|
+
/** Explicit lowering primitive. Callers must obtain operator confirmation first. */
|
|
103
|
+
export declare function resetStoreMark(projectRoot: string, observation: StoreMarkObservation): StoreMark;
|
|
104
|
+
/** Pure classification of current row counts against the external mark. */
|
|
105
|
+
export declare function checkStoreHealth(input: StoreHealthInput): StoreHealth;
|
|
106
|
+
//# sourceMappingURL=store-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-guard.d.ts","sourceRoot":"","sources":["../src/store-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable high-water mark for the two dz learning stores.
|
|
3
|
+
*
|
|
4
|
+
* The mark deliberately lives under the user's home directory, outside the
|
|
5
|
+
* project: deleting `<project>/.dz` must not delete the evidence that a store
|
|
6
|
+
* existed there.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
import { createHash } from 'node:crypto';
|
|
11
|
+
import { existsSync, mkdirSync, readFileSync, realpathSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
12
|
+
import { homedir } from 'node:os';
|
|
13
|
+
import { basename, dirname, join, resolve } from 'node:path';
|
|
14
|
+
import { withNamedLockSync } from './named-lock.js';
|
|
15
|
+
export const STORE_GUARD_VERSION = 1;
|
|
16
|
+
/**
|
|
17
|
+
* A fall of more than 10% from the lifetime maximum is anomalous. A second,
|
|
18
|
+
* absolute threshold below catches a sharp recent loss before it reaches 10%.
|
|
19
|
+
* Basis: across 55 days and 9 measured snapshots the counter never decreased
|
|
20
|
+
* (190 -> 1385), measured 2026-09-06.
|
|
21
|
+
*/
|
|
22
|
+
export const STORE_COLLAPSE_MAX_FRACTION = 0.10;
|
|
23
|
+
/** See {@link STORE_COLLAPSE_MAX_FRACTION} for the measured basis. */
|
|
24
|
+
export const STORE_COLLAPSE_LAST_ROWS = 50;
|
|
25
|
+
/** Fractional collapse detection is too noisy below this observed population. */
|
|
26
|
+
export const STORE_COLLAPSE_MIN_ROWS = 10;
|
|
27
|
+
function canonicalProjectRoot(projectRoot) {
|
|
28
|
+
const absolute = resolve(projectRoot);
|
|
29
|
+
return existsSync(absolute) ? realpathSync(absolute) : absolute;
|
|
30
|
+
}
|
|
31
|
+
function projectHash(projectRoot) {
|
|
32
|
+
return createHash('sha256').update(canonicalProjectRoot(projectRoot)).digest('hex').slice(0, 16);
|
|
33
|
+
}
|
|
34
|
+
/** External high-water-mark path for one canonical project root. */
|
|
35
|
+
export function storeGuardPath(projectRoot) {
|
|
36
|
+
return join(homedir(), '.dz-store-guard', `${projectHash(projectRoot)}.json`);
|
|
37
|
+
}
|
|
38
|
+
/** External directory populated by `scripts/dz-store-snapshot.sh` for this project. */
|
|
39
|
+
export function storeSnapshotPath(projectRoot) {
|
|
40
|
+
return join(homedir(), '.dz-store-snapshots', projectHash(projectRoot));
|
|
41
|
+
}
|
|
42
|
+
function isCount(value) {
|
|
43
|
+
return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;
|
|
44
|
+
}
|
|
45
|
+
function isStoreCountSource(value) {
|
|
46
|
+
return value === 'jsonl' || value === 'sqlite';
|
|
47
|
+
}
|
|
48
|
+
function isStoreCountSnapshot(value) {
|
|
49
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
50
|
+
return false;
|
|
51
|
+
const candidate = value;
|
|
52
|
+
return isCount(candidate.lexicalRows) && isCount(candidate.vectorRows)
|
|
53
|
+
&& isStoreCountSource(candidate.lexicalSource);
|
|
54
|
+
}
|
|
55
|
+
function parseStoreMark(raw, path, projectRoot) {
|
|
56
|
+
let value;
|
|
57
|
+
try {
|
|
58
|
+
value = JSON.parse(raw);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
throw new Error(`store guard mark is not valid JSON: ${path}`);
|
|
62
|
+
}
|
|
63
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
64
|
+
throw new Error(`store guard mark is not an object: ${path}`);
|
|
65
|
+
}
|
|
66
|
+
const candidate = value;
|
|
67
|
+
const canonical = canonicalProjectRoot(projectRoot);
|
|
68
|
+
if (candidate.project !== canonical)
|
|
69
|
+
throw new Error(`store guard project mismatch in ${path}`);
|
|
70
|
+
if (!isCount(candidate.lexicalMax) || !isCount(candidate.vectorMax)
|
|
71
|
+
|| !isCount(candidate.lexicalLast) || !isCount(candidate.vectorLast)) {
|
|
72
|
+
throw new Error(`store guard mark has invalid row counts: ${path}`);
|
|
73
|
+
}
|
|
74
|
+
if (typeof candidate.updatedAt !== 'string' || Number.isNaN(Date.parse(candidate.updatedAt))) {
|
|
75
|
+
throw new Error(`store guard mark has invalid updatedAt: ${path}`);
|
|
76
|
+
}
|
|
77
|
+
if (candidate.version !== STORE_GUARD_VERSION) {
|
|
78
|
+
throw new Error(`unsupported store guard version ${String(candidate.version)} in ${path}`);
|
|
79
|
+
}
|
|
80
|
+
if (candidate.lexicalSource !== undefined
|
|
81
|
+
&& candidate.lexicalSource !== 'jsonl' && candidate.lexicalSource !== 'sqlite') {
|
|
82
|
+
throw new Error(`store guard mark has invalid lexicalSource: ${path}`);
|
|
83
|
+
}
|
|
84
|
+
if (candidate.acceptedShrinkAt !== undefined) {
|
|
85
|
+
const accepted = candidate.acceptedShrinkAt;
|
|
86
|
+
if (typeof accepted !== 'object' || accepted === null || Array.isArray(accepted)
|
|
87
|
+
|| typeof accepted.at !== 'string' || Number.isNaN(Date.parse(accepted.at))
|
|
88
|
+
|| typeof accepted.reason !== 'string' || accepted.reason.trim() === '') {
|
|
89
|
+
throw new Error(`store guard mark has invalid acceptedShrinkAt: ${path}`);
|
|
90
|
+
}
|
|
91
|
+
const structured = accepted.command !== undefined || accepted.kind !== undefined
|
|
92
|
+
|| accepted.before !== undefined || accepted.after !== undefined;
|
|
93
|
+
if (structured && (typeof accepted.command !== 'string' || accepted.command.trim() === ''
|
|
94
|
+
|| !['measured-deletion', 'source-transition', 'operator-reset', 'cold-start-override'].includes(accepted.kind ?? '')
|
|
95
|
+
|| !isStoreCountSnapshot(accepted.before) || !isStoreCountSnapshot(accepted.after))) {
|
|
96
|
+
throw new Error(`store guard mark has invalid reconciliation receipt: ${path}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (candidate.sourceChangedAt !== undefined
|
|
100
|
+
&& (typeof candidate.sourceChangedAt !== 'string' || Number.isNaN(Date.parse(candidate.sourceChangedAt)))) {
|
|
101
|
+
throw new Error(`store guard mark has invalid sourceChangedAt: ${path}`);
|
|
102
|
+
}
|
|
103
|
+
if (candidate.resetAt !== undefined) {
|
|
104
|
+
const reset = candidate.resetAt;
|
|
105
|
+
if (typeof reset !== 'object' || reset === null || Array.isArray(reset)
|
|
106
|
+
|| typeof reset.at !== 'string' || Number.isNaN(Date.parse(reset.at))
|
|
107
|
+
|| typeof reset.command !== 'string' || reset.command.trim() === ''
|
|
108
|
+
|| reset.decision !== 'manual operator decision'
|
|
109
|
+
|| !isStoreCountSnapshot(reset.before) || !isStoreCountSnapshot(reset.after)
|
|
110
|
+
|| typeof reset.reason !== 'string' || reset.reason.trim() === '') {
|
|
111
|
+
throw new Error(`store guard mark has invalid resetAt receipt: ${path}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
...candidate,
|
|
116
|
+
lexicalSource: candidate.lexicalSource ?? 'unknown',
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/** Read the external mark; absence is the only condition represented by `undefined`. */
|
|
120
|
+
export function readStoreMark(projectRoot) {
|
|
121
|
+
const path = storeGuardPath(projectRoot);
|
|
122
|
+
if (!existsSync(path))
|
|
123
|
+
return undefined;
|
|
124
|
+
return parseStoreMark(readFileSync(path, 'utf8'), path, projectRoot);
|
|
125
|
+
}
|
|
126
|
+
function validateObservation(observation) {
|
|
127
|
+
if (!isCount(observation.lexicalRows) || !isCount(observation.vectorRows)) {
|
|
128
|
+
throw new Error('store guard observation has invalid row counts');
|
|
129
|
+
}
|
|
130
|
+
if (typeof observation.observedAt !== 'string' || Number.isNaN(Date.parse(observation.observedAt))) {
|
|
131
|
+
throw new Error('store guard observation has invalid observedAt');
|
|
132
|
+
}
|
|
133
|
+
if (observation.lexicalSource !== 'jsonl' && observation.lexicalSource !== 'sqlite') {
|
|
134
|
+
throw new Error('store guard observation has invalid lexical source');
|
|
135
|
+
}
|
|
136
|
+
if (observation.command !== undefined && observation.command.trim() === '') {
|
|
137
|
+
throw new Error('store guard observation command must not be empty');
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function persistStoreMark(path, mark) {
|
|
141
|
+
const temp = `${path}.${process.pid}.${Date.now()}.tmp`;
|
|
142
|
+
try {
|
|
143
|
+
writeFileSync(temp, `${JSON.stringify(mark, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 });
|
|
144
|
+
renameSync(temp, path);
|
|
145
|
+
}
|
|
146
|
+
finally {
|
|
147
|
+
try {
|
|
148
|
+
unlinkSync(temp);
|
|
149
|
+
}
|
|
150
|
+
catch { /* renamed or never created */ }
|
|
151
|
+
}
|
|
152
|
+
return mark;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Atomically record an ordinary observation. Both maxima are monotonic by
|
|
156
|
+
* construction: no command label, measured deletion, override, or source
|
|
157
|
+
* transition can lower them. A first source transition is recorded as
|
|
158
|
+
* metadata only; a later low-population transition requires an explicit reset.
|
|
159
|
+
*/
|
|
160
|
+
export function writeStoreMark(projectRoot, observation, options = {}) {
|
|
161
|
+
const project = canonicalProjectRoot(projectRoot);
|
|
162
|
+
const path = storeGuardPath(project);
|
|
163
|
+
const guardRoot = dirname(path);
|
|
164
|
+
validateObservation(observation);
|
|
165
|
+
mkdirSync(guardRoot, { recursive: true, mode: 0o700 });
|
|
166
|
+
return withNamedLockSync(guardRoot, `store-guard-${basename(path, '.json')}`, () => {
|
|
167
|
+
const previous = readStoreMark(project);
|
|
168
|
+
if (options.expectedPreviousLexicalSource !== undefined
|
|
169
|
+
&& previous?.lexicalSource !== options.expectedPreviousLexicalSource) {
|
|
170
|
+
throw new Error(`lexical source-change allowance was already consumed; expected ${options.expectedPreviousLexicalSource}, found ${previous?.lexicalSource ?? 'no mark'}`);
|
|
171
|
+
}
|
|
172
|
+
const sourceChanged = previous !== undefined && previous.lexicalSource !== 'unknown'
|
|
173
|
+
&& previous.lexicalSource !== observation.lexicalSource;
|
|
174
|
+
if (sourceChanged && previous.sourceChangedAt !== undefined
|
|
175
|
+
&& observation.lexicalRows < previous.lexicalMax) {
|
|
176
|
+
throw new Error('lexical source changed again below the recorded maximum; run dz store-guard --reset');
|
|
177
|
+
}
|
|
178
|
+
const next = {
|
|
179
|
+
project,
|
|
180
|
+
lexicalSource: observation.lexicalSource,
|
|
181
|
+
lexicalMax: Math.max(previous?.lexicalMax ?? 0, observation.lexicalRows),
|
|
182
|
+
vectorMax: Math.max(previous?.vectorMax ?? 0, observation.vectorRows),
|
|
183
|
+
lexicalLast: observation.lexicalRows,
|
|
184
|
+
vectorLast: observation.vectorRows,
|
|
185
|
+
...(sourceChanged ? { sourceChangedAt: previous?.sourceChangedAt ?? observation.observedAt }
|
|
186
|
+
: previous?.sourceChangedAt === undefined ? {} : { sourceChangedAt: previous.sourceChangedAt }),
|
|
187
|
+
...(previous?.resetAt === undefined ? {} : { resetAt: previous.resetAt }),
|
|
188
|
+
updatedAt: observation.observedAt,
|
|
189
|
+
version: STORE_GUARD_VERSION,
|
|
190
|
+
};
|
|
191
|
+
return persistStoreMark(path, next);
|
|
192
|
+
}, { ...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }) });
|
|
193
|
+
}
|
|
194
|
+
/** Explicit lowering primitive. Callers must obtain operator confirmation first. */
|
|
195
|
+
export function resetStoreMark(projectRoot, observation) {
|
|
196
|
+
const project = canonicalProjectRoot(projectRoot);
|
|
197
|
+
const path = storeGuardPath(project);
|
|
198
|
+
const guardRoot = dirname(path);
|
|
199
|
+
validateObservation(observation);
|
|
200
|
+
if (observation.command?.trim() !== 'dz store-guard --reset') {
|
|
201
|
+
throw new Error('store guard reset requires command dz store-guard --reset');
|
|
202
|
+
}
|
|
203
|
+
mkdirSync(guardRoot, { recursive: true, mode: 0o700 });
|
|
204
|
+
return withNamedLockSync(guardRoot, `store-guard-${basename(path, '.json')}`, () => {
|
|
205
|
+
const previous = readStoreMark(project);
|
|
206
|
+
const before = {
|
|
207
|
+
lexicalRows: previous?.lexicalMax ?? observation.lexicalRows,
|
|
208
|
+
vectorRows: previous?.vectorMax ?? observation.vectorRows,
|
|
209
|
+
lexicalSource: previous?.lexicalSource === 'jsonl' || previous?.lexicalSource === 'sqlite'
|
|
210
|
+
? previous.lexicalSource
|
|
211
|
+
: observation.lexicalSource,
|
|
212
|
+
};
|
|
213
|
+
const after = {
|
|
214
|
+
lexicalRows: observation.lexicalRows,
|
|
215
|
+
vectorRows: observation.vectorRows,
|
|
216
|
+
lexicalSource: observation.lexicalSource,
|
|
217
|
+
};
|
|
218
|
+
const resetAt = {
|
|
219
|
+
at: observation.observedAt,
|
|
220
|
+
command: 'dz store-guard --reset',
|
|
221
|
+
decision: 'manual operator decision',
|
|
222
|
+
before,
|
|
223
|
+
after,
|
|
224
|
+
reason: `dz store-guard --reset: manual operator decision; before lexical=${before.lexicalRows}, vector=${before.vectorRows}; after lexical=${after.lexicalRows}, vector=${after.vectorRows}`,
|
|
225
|
+
};
|
|
226
|
+
return persistStoreMark(path, {
|
|
227
|
+
project,
|
|
228
|
+
lexicalSource: observation.lexicalSource,
|
|
229
|
+
lexicalMax: observation.lexicalRows,
|
|
230
|
+
vectorMax: observation.vectorRows,
|
|
231
|
+
lexicalLast: observation.lexicalRows,
|
|
232
|
+
vectorLast: observation.vectorRows,
|
|
233
|
+
resetAt,
|
|
234
|
+
updatedAt: observation.observedAt,
|
|
235
|
+
version: STORE_GUARD_VERSION,
|
|
236
|
+
});
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
function collapsedTier(name, rows, maximum, last) {
|
|
240
|
+
if (maximum >= STORE_COLLAPSE_MIN_ROWS && rows < maximum * (1 - STORE_COLLAPSE_MAX_FRACTION)) {
|
|
241
|
+
return `${name} rows ${rows} are more than ${STORE_COLLAPSE_MAX_FRACTION * 100}% below maximum ${maximum}`;
|
|
242
|
+
}
|
|
243
|
+
if (last - rows > STORE_COLLAPSE_LAST_ROWS) {
|
|
244
|
+
return `${name} rows ${rows} are more than ${STORE_COLLAPSE_LAST_ROWS} below previous ${last}`;
|
|
245
|
+
}
|
|
246
|
+
return undefined;
|
|
247
|
+
}
|
|
248
|
+
/** Pure classification of current row counts against the external mark. */
|
|
249
|
+
export function checkStoreHealth(input) {
|
|
250
|
+
const { projectRoot, lexicalRows, lexicalSource, vectorRows, mark } = input;
|
|
251
|
+
const unreadable = [
|
|
252
|
+
...(lexicalRows === 'unreadable' ? ['lexical'] : []),
|
|
253
|
+
...(vectorRows === 'unreadable' ? ['vector'] : []),
|
|
254
|
+
];
|
|
255
|
+
if (unreadable.length > 0) {
|
|
256
|
+
return {
|
|
257
|
+
verdict: 'unreadable',
|
|
258
|
+
reason: `${unreadable.join(' and ')} store${unreadable.length > 1 ? 's are' : ' is'} unreadable`,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
if (mark === undefined)
|
|
262
|
+
return { verdict: 'no-mark', reason: 'no store mark exists for this project' };
|
|
263
|
+
const lexicalCount = lexicalRows;
|
|
264
|
+
const vectorCount = vectorRows;
|
|
265
|
+
const sourceChanged = mark.lexicalSource !== lexicalSource;
|
|
266
|
+
const cold = [];
|
|
267
|
+
if (mark.lexicalMax > 0 && lexicalCount === 0)
|
|
268
|
+
cold.push(`lexical had ${mark.lexicalMax}`);
|
|
269
|
+
if (mark.vectorMax > 0 && vectorCount === 0)
|
|
270
|
+
cold.push(`vector had ${mark.vectorMax}`);
|
|
271
|
+
if (cold.length > 0) {
|
|
272
|
+
return {
|
|
273
|
+
verdict: 'cold-start-over-existing',
|
|
274
|
+
reason: `${resolve(projectRoot)} is empty over an existing mark (${cold.join(', ')})`,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
const repeatedLowSourceChange = sourceChanged && mark.sourceChangedAt !== undefined
|
|
278
|
+
&& lexicalCount < mark.lexicalMax
|
|
279
|
+
? `lexical source changed again after ${mark.sourceChangedAt} with rows ${lexicalCount} below maximum ${mark.lexicalMax}`
|
|
280
|
+
: undefined;
|
|
281
|
+
const collapse = repeatedLowSourceChange
|
|
282
|
+
?? (sourceChanged ? undefined : collapsedTier('lexical', lexicalCount, mark.lexicalMax, mark.lexicalLast))
|
|
283
|
+
?? collapsedTier('vector', vectorCount, mark.vectorMax, mark.vectorLast);
|
|
284
|
+
if (collapse !== undefined)
|
|
285
|
+
return { verdict: 'collapsed', reason: collapse };
|
|
286
|
+
if (sourceChanged) {
|
|
287
|
+
return {
|
|
288
|
+
verdict: 'source-changed',
|
|
289
|
+
reason: `lexical source changed from ${mark.lexicalSource} to ${lexicalSource}; one writer may record the migration without lowering maximum ${mark.lexicalMax}, then use dz store-guard --reset if the new baseline is intentional`,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
return { verdict: 'ok', reason: 'row counts are within the recorded high-water bounds' };
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=store-guard.js.map
|