@dzhechkov/harness-core 0.7.12 → 0.8.2
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 +210 -70
- package/README.md +34 -1
- package/dist/book-kb.d.ts.map +1 -1
- package/dist/book-kb.js +17 -0
- package/dist/book-kb.js.map +1 -1
- package/dist/feature-adr-checkpoints.d.ts +61 -0
- package/dist/feature-adr-checkpoints.d.ts.map +1 -1
- package/dist/feature-adr-checkpoints.js +116 -2
- package/dist/feature-adr-checkpoints.js.map +1 -1
- package/dist/index.d.ts +16 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/loop-blobs.generated.js +2 -2
- package/dist/loop-blobs.generated.js.map +1 -1
- package/dist/mutation-gate.d.ts +31 -8
- package/dist/mutation-gate.d.ts.map +1 -1
- package/dist/mutation-gate.js +57 -16
- package/dist/mutation-gate.js.map +1 -1
- package/dist/named-lock.d.ts.map +1 -1
- package/dist/named-lock.js +11 -9
- package/dist/named-lock.js.map +1 -1
- package/dist/native-dep-probe.d.ts +11 -0
- package/dist/native-dep-probe.d.ts.map +1 -0
- package/dist/native-dep-probe.js +100 -0
- package/dist/native-dep-probe.js.map +1 -0
- package/dist/operations.d.ts.map +1 -1
- package/dist/operations.js +82 -1
- package/dist/operations.js.map +1 -1
- package/dist/parser-safe-region.d.ts +47 -0
- package/dist/parser-safe-region.d.ts.map +1 -0
- package/dist/parser-safe-region.js +47 -0
- package/dist/parser-safe-region.js.map +1 -0
- package/dist/patterns.d.ts.map +1 -1
- package/dist/patterns.js +10 -1
- package/dist/patterns.js.map +1 -1
- package/dist/profile.d.ts +202 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +536 -0
- package/dist/profile.js.map +1 -0
- package/dist/publish.d.ts +5 -3
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +46 -8
- package/dist/publish.js.map +1 -1
- package/dist/qe-rounds.d.ts +75 -0
- package/dist/qe-rounds.d.ts.map +1 -0
- package/dist/qe-rounds.js +174 -0
- package/dist/qe-rounds.js.map +1 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +5 -1
- package/dist/registry.js.map +1 -1
- package/dist/run-records.d.ts.map +1 -1
- package/dist/run-records.js +8 -1
- package/dist/run-records.js.map +1 -1
- package/dist/setup.d.ts +35 -4
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +86 -23
- package/dist/setup.js.map +1 -1
- package/dist/sign.d.ts +29 -24
- package/dist/sign.d.ts.map +1 -1
- package/dist/sign.js +183 -61
- package/dist/sign.js.map +1 -1
- package/dist/store-location.d.ts +56 -0
- package/dist/store-location.d.ts.map +1 -0
- package/dist/store-location.js +56 -0
- package/dist/store-location.js.map +1 -0
- package/dist/store-lock.d.ts +1 -0
- package/dist/store-lock.d.ts.map +1 -1
- package/dist/store-lock.js +7 -1
- package/dist/store-lock.js.map +1 -1
- package/dist/store-merge.d.ts +55 -0
- package/dist/store-merge.d.ts.map +1 -0
- package/dist/store-merge.js +77 -0
- package/dist/store-merge.js.map +1 -0
- package/dist/teach-target.d.ts +61 -0
- package/dist/teach-target.d.ts.map +1 -0
- package/dist/teach-target.js +105 -0
- package/dist/teach-target.js.map +1 -0
- package/dist/vector-tier.d.ts.map +1 -1
- package/dist/vector-tier.js +63 -20
- package/dist/vector-tier.js.map +1 -1
- package/package.json +13 -13
- package/sbom.json +424 -70
- package/src/book-kb.ts +17 -0
- package/src/feature-adr-checkpoints.ts +111 -2
- package/src/index.ts +39 -1
- package/src/loop-blobs.generated.ts +2 -2
- package/src/mutation-gate.ts +74 -17
- package/src/named-lock.ts +10 -8
- package/src/native-dep-probe.ts +118 -0
- package/src/operations.ts +77 -1
- package/src/parser-safe-region.ts +65 -0
- package/src/patterns.ts +10 -1
- package/src/profile.ts +593 -0
- package/src/publish.ts +43 -7
- package/src/qe-rounds.ts +226 -0
- package/src/registry.ts +5 -1
- package/src/run-records.ts +9 -1
- package/src/setup.ts +87 -23
- package/src/sign.ts +180 -60
- package/src/store-location.ts +76 -0
- package/src/store-lock.ts +8 -1
- package/src/store-merge.ts +91 -0
- package/src/teach-target.ts +126 -0
- package/src/vector-tier.ts +58 -9
package/dist/sign.js
CHANGED
|
@@ -13,10 +13,19 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { createHash, sign as cryptoSign, verify as cryptoVerify, createPrivateKey, createPublicKey, generateKeyPairSync } from 'node:crypto';
|
|
15
15
|
import { readFileSync, existsSync, readdirSync, openSync, fstatSync, closeSync, constants as fsConstants } from 'node:fs';
|
|
16
|
-
import {
|
|
16
|
+
import { isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
17
17
|
export const MANIFEST_NAME = '.dz-manifest.json';
|
|
18
18
|
export const SBOM_NAME = 'sbom.json';
|
|
19
|
-
|
|
19
|
+
/** v3 preserves order-sensitive package.json condition maps while canonicalising packer noise. */
|
|
20
|
+
export const MANIFEST_VERSION = 3;
|
|
21
|
+
/** CycloneDX 1.5 JSON for current output. Canonical JSON digests are always explicitly labelled. */
|
|
22
|
+
export function buildSbom(manifest) {
|
|
23
|
+
return buildSbomEnvelope(manifest, false);
|
|
24
|
+
}
|
|
25
|
+
/** Compatibility-only decoder target for v1 packs that historically mislabeled package.json. */
|
|
26
|
+
function buildLegacySbomV1(manifest) {
|
|
27
|
+
return buildSbomEnvelope(manifest, true);
|
|
28
|
+
}
|
|
20
29
|
/**
|
|
21
30
|
* Files the PACKER REWRITES, so their bytes are not stable across two packs of the same unchanged
|
|
22
31
|
* tree — hashing them raw makes a signature that can never verify.
|
|
@@ -28,10 +37,12 @@ export const MANIFEST_VERSION = 1;
|
|
|
28
37
|
* the publisher packs again, and the consumer receives the second one.
|
|
29
38
|
*
|
|
30
39
|
* These files are therefore hashed in a CANONICAL form — parsed, keys sorted, stable separators.
|
|
31
|
-
* HONEST LIMIT:
|
|
32
|
-
*
|
|
40
|
+
* HONEST LIMIT: key order, insignificant whitespace, and negative-zero spelling become invisible to
|
|
41
|
+
* the signature. JavaScript can distinguish negative zero with `Object.is`, but JSON/pnpm round-trips
|
|
42
|
+
* normalize it to zero; tolerating that packer rewrite is explicit here. The alternative — excusing
|
|
43
|
+
* `package.json` from signing altogether — would
|
|
33
44
|
* leave the dependency pins and the bin map unsigned, which is the opposite of a fix. The two
|
|
34
|
-
* differences that
|
|
45
|
+
* differences that remain unsafe across parsers — duplicate keys and precision-losing/non-finite numbers — are
|
|
35
46
|
* refused canonicalisation outright; see `canonicalisationIsFaithful`.
|
|
36
47
|
*/
|
|
37
48
|
const CANONICALISED_PACK_FILES = new Set(['package.json']);
|
|
@@ -45,6 +56,29 @@ function stableJson(value) {
|
|
|
45
56
|
}
|
|
46
57
|
return JSON.stringify(value) ?? 'null';
|
|
47
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* v3 package.json canonical form. pnpm may reorder ordinary object keys, but Node's conditional
|
|
61
|
+
* `exports`/`imports` objects are first-match maps and TypeScript consumers can likewise observe
|
|
62
|
+
* `typesVersions` order. Preserve every descendant object order under those roots while sorting
|
|
63
|
+
* ordinary metadata keys. This authenticates entry-point semantics without reintroducing pnpm's
|
|
64
|
+
* nondeterministic dependency-key ordering.
|
|
65
|
+
*/
|
|
66
|
+
const ORDER_SENSITIVE_PACKAGE_ROOTS = new Set(['exports', 'imports', 'typesVersions']);
|
|
67
|
+
function stablePackageJsonV2(value, preserveOrder = false, atRoot = true) {
|
|
68
|
+
if (Array.isArray(value))
|
|
69
|
+
return '[' + value.map((item) => stablePackageJsonV2(item, preserveOrder, false)).join(',') + ']';
|
|
70
|
+
if (value !== null && typeof value === 'object') {
|
|
71
|
+
const record = value;
|
|
72
|
+
const keys = Object.keys(record);
|
|
73
|
+
if (!preserveOrder)
|
|
74
|
+
keys.sort();
|
|
75
|
+
return '{' + keys.map((key) => {
|
|
76
|
+
const childPreservesOrder = preserveOrder || (atRoot && ORDER_SENSITIVE_PACKAGE_ROOTS.has(key));
|
|
77
|
+
return JSON.stringify(key) + ':' + stablePackageJsonV2(record[key], childPreservesOrder, false);
|
|
78
|
+
}).join(',') + '}';
|
|
79
|
+
}
|
|
80
|
+
return JSON.stringify(value) ?? 'null';
|
|
81
|
+
}
|
|
48
82
|
/**
|
|
49
83
|
* Is this JSON text one whose PARSED value is a faithful stand-in for its BYTES?
|
|
50
84
|
*
|
|
@@ -55,13 +89,33 @@ function stableJson(value) {
|
|
|
55
89
|
* - DUPLICATE KEYS. `{"bin":"evil","bin":"signed"}` parses to the signed value in every JavaScript
|
|
56
90
|
* parser (last wins), so it would hash as clean — while a first-wins parser in another language
|
|
57
91
|
* reads `evil` from the same signed bytes.
|
|
58
|
-
* - LOSSY
|
|
59
|
-
*
|
|
92
|
+
* - LOSSY NUMBERS. `9007199254740993` parses to `...992`, a long decimal can collapse to a shorter
|
|
93
|
+
* value, and `1e999` becomes `Infinity` before JSON serialization turns it into `null`.
|
|
60
94
|
*
|
|
61
95
|
* Neither is reachable through `pnpm pack` — this is a guard against a hand-crafted artifact, not
|
|
62
|
-
* against the packer.
|
|
63
|
-
*
|
|
96
|
+
* against the packer. Current/v3 generation refuses either form instead of producing an SBOM that
|
|
97
|
+
* could mislabel a raw-byte fallback as a canonical digest. Consumer verification returns a mismatch
|
|
98
|
+
* for the same refusal because its no-follow hashing wrapper maps this throw to `null`.
|
|
64
99
|
*/
|
|
100
|
+
function normalizedJsonNumber(literal) {
|
|
101
|
+
const match = /^(-?)(\d+)(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/.exec(literal);
|
|
102
|
+
if (!match || !Number.isFinite(Number(literal)))
|
|
103
|
+
return null;
|
|
104
|
+
const negative = match[1] === '-';
|
|
105
|
+
const fraction = match[3] ?? '';
|
|
106
|
+
let digits = `${match[2]}${fraction}`.replace(/^0+/, '');
|
|
107
|
+
// pnpm/JSON round-trips collapse every mathematical negative zero spelling to `0`.
|
|
108
|
+
if (digits === '')
|
|
109
|
+
return '0';
|
|
110
|
+
let exponent = Number(match[4] ?? '0') - fraction.length;
|
|
111
|
+
if (!Number.isSafeInteger(exponent))
|
|
112
|
+
return null;
|
|
113
|
+
while (digits.endsWith('0')) {
|
|
114
|
+
digits = digits.slice(0, -1);
|
|
115
|
+
exponent += 1;
|
|
116
|
+
}
|
|
117
|
+
return `${negative ? '-' : ''}${digits}e${exponent}`;
|
|
118
|
+
}
|
|
65
119
|
function canonicalisationIsFaithful(text) {
|
|
66
120
|
const scopes = []; // Set = inside an object, null = inside an array
|
|
67
121
|
let i = 0;
|
|
@@ -112,9 +166,11 @@ function canonicalisationIsFaithful(text) {
|
|
|
112
166
|
while (i < text.length && /[-+0-9eE.]/.test(text.charAt(i)))
|
|
113
167
|
i++;
|
|
114
168
|
const lit = text.slice(start, i);
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
|
|
169
|
+
// Compare exact decimal values after removing insignificant spelling differences. This keeps
|
|
170
|
+
// `1`, `1.0`, and `1e0` equivalent while rejecting IEEE-754 rounding, overflow and underflow.
|
|
171
|
+
const exact = normalizedJsonNumber(lit);
|
|
172
|
+
const parsed = normalizedJsonNumber(String(Number(lit)));
|
|
173
|
+
if (exact === null || parsed === null || exact !== parsed)
|
|
118
174
|
return false;
|
|
119
175
|
continue;
|
|
120
176
|
}
|
|
@@ -124,27 +180,33 @@ function canonicalisationIsFaithful(text) {
|
|
|
124
180
|
}
|
|
125
181
|
/**
|
|
126
182
|
* Hash the bytes of one pack file. A packer-rewritten file is hashed canonically; everything else
|
|
127
|
-
* byte-for-byte. Unparseable
|
|
128
|
-
*
|
|
183
|
+
* byte-for-byte. Unparseable, ambiguous, or precision-losing root `package.json` bytes are refused:
|
|
184
|
+
* a current/v3 signer must never emit a raw digest under a canonical-digest SBOM label.
|
|
129
185
|
*/
|
|
130
|
-
export function hashPackBytes(relPath, bytes) {
|
|
186
|
+
export function hashPackBytes(relPath, bytes, manifestVersion = MANIFEST_VERSION) {
|
|
131
187
|
const rel = relPath.split(sep).join('/');
|
|
132
188
|
if (CANONICALISED_PACK_FILES.has(rel)) {
|
|
133
189
|
try {
|
|
134
190
|
const text = bytes.toString('utf-8');
|
|
135
191
|
if (!canonicalisationIsFaithful(text))
|
|
136
192
|
throw new Error('not canonicalisable');
|
|
137
|
-
|
|
193
|
+
const parsed = JSON.parse(text);
|
|
194
|
+
const canonical = manifestVersion >= 3 ? stablePackageJsonV2(parsed) : stableJson(parsed);
|
|
195
|
+
return createHash('sha256').update(Buffer.from(canonical, 'utf-8')).digest('hex');
|
|
138
196
|
}
|
|
139
|
-
catch {
|
|
140
|
-
|
|
197
|
+
catch (error) {
|
|
198
|
+
throw new Error(`refusing non-canonicalisable ${rel}: ${String(error?.message ?? error)}`);
|
|
141
199
|
}
|
|
142
200
|
}
|
|
143
201
|
return createHash('sha256').update(bytes).digest('hex');
|
|
144
202
|
}
|
|
145
|
-
/**
|
|
146
|
-
|
|
147
|
-
|
|
203
|
+
/**
|
|
204
|
+
* sha256 of a file's bytes, hex. Follows symlinks — used only when building a manifest we control.
|
|
205
|
+
* Canonical pack rewriting is opt-in through the explicit root-relative path. Omitting `relPath`
|
|
206
|
+
* hashes raw bytes, so an unrelated nested file merely named `package.json` is never relaxed.
|
|
207
|
+
*/
|
|
208
|
+
export function hashFile(absPath, relPath, manifestVersion = MANIFEST_VERSION) {
|
|
209
|
+
return hashPackBytes(relPath ?? '', readFileSync(absPath), manifestVersion);
|
|
148
210
|
}
|
|
149
211
|
/**
|
|
150
212
|
* Round-2 review (codex exec): `lstat` then `readFile` is a TOCTOU window — the path can be swapped
|
|
@@ -153,7 +215,7 @@ export function hashFile(absPath, relPath) {
|
|
|
153
215
|
*
|
|
154
216
|
* Returns `null` when the path is not a regular file, or is a symlink.
|
|
155
217
|
*/
|
|
156
|
-
export function hashRegularFileNoFollow(absPath, relPath) {
|
|
218
|
+
export function hashRegularFileNoFollow(absPath, relPath, manifestVersion = MANIFEST_VERSION) {
|
|
157
219
|
let fd;
|
|
158
220
|
try {
|
|
159
221
|
fd = openSync(absPath, fsConstants.O_RDONLY | fsConstants.O_NOFOLLOW);
|
|
@@ -161,7 +223,7 @@ export function hashRegularFileNoFollow(absPath, relPath) {
|
|
|
161
223
|
return null;
|
|
162
224
|
// Canonicalise the bytes ALREADY READ from this descriptor — never re-open, or the TOCTOU
|
|
163
225
|
// window this function exists to close would be reopened by the fix.
|
|
164
|
-
return hashPackBytes(relPath ??
|
|
226
|
+
return hashPackBytes(relPath ?? '', readFileSync(fd), manifestVersion);
|
|
165
227
|
}
|
|
166
228
|
catch {
|
|
167
229
|
return null; // ELOOP on a symlink, ENOENT, EACCES — all fail closed
|
|
@@ -171,6 +233,28 @@ export function hashRegularFileNoFollow(absPath, relPath) {
|
|
|
171
233
|
closeSync(fd);
|
|
172
234
|
}
|
|
173
235
|
}
|
|
236
|
+
/** Read one regular file through the same no-follow descriptor used by hashing. */
|
|
237
|
+
export function readRegularFileNoFollow(absPath, expectedLength) {
|
|
238
|
+
let fd;
|
|
239
|
+
try {
|
|
240
|
+
fd = openSync(absPath, fsConstants.O_RDONLY | fsConstants.O_NOFOLLOW);
|
|
241
|
+
const stat = fstatSync(fd);
|
|
242
|
+
const allowedLengths = Array.isArray(expectedLength) ? expectedLength : expectedLength === undefined ? null : [expectedLength];
|
|
243
|
+
if (!stat.isFile() || (allowedLengths !== null && !allowedLengths.includes(stat.size)))
|
|
244
|
+
return null;
|
|
245
|
+
const bytes = readFileSync(fd);
|
|
246
|
+
if (allowedLengths !== null && !allowedLengths.includes(bytes.length))
|
|
247
|
+
return null;
|
|
248
|
+
return bytes;
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
finally {
|
|
254
|
+
if (fd !== undefined)
|
|
255
|
+
closeSync(fd);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
174
258
|
/**
|
|
175
259
|
* Cross-model security review (codex exec, 2026-07-10) — a SIGNED manifest is not a TRUSTED manifest.
|
|
176
260
|
* Its own contents are attacker-controlled until the signature checks out, and even then they must be
|
|
@@ -219,33 +303,47 @@ export function checkManifestEntries(files) {
|
|
|
219
303
|
return null;
|
|
220
304
|
}
|
|
221
305
|
/**
|
|
222
|
-
*
|
|
223
|
-
* installed deps / VCS metadata. `.agentic-qe`/`.dz`: LOCAL RUNTIME STATE (learning DBs, RVF
|
|
306
|
+
* State-entry names that may be excluded from BOTH walks. node_modules/.git:
|
|
307
|
+
* installed deps / VCS metadata. `.agentic-qe`/`.dz`: LOCAL RUNTIME STATE entries (learning DBs, RVF
|
|
224
308
|
* stores, witness keys) that background workers create inside pack cwds — gitignored, machine-
|
|
225
309
|
* specific, never shipped. Signing them made 19 packs verify green LOCALLY (files present, hashes
|
|
226
310
|
* match) and TAMPERED in CI (clean checkout lacks the gitignored state) — found live on GH run
|
|
227
311
|
* #103, 2026-07-19. State is not content; the walks must never see it.
|
|
228
312
|
*/
|
|
229
|
-
const
|
|
313
|
+
const EXCLUDED_STATE_NAMES = new Set(['node_modules', '.git', '.agentic-qe', '.dz']);
|
|
314
|
+
function isExcludedStateEntry(entry) {
|
|
315
|
+
if (!EXCLUDED_STATE_NAMES.has(entry.name))
|
|
316
|
+
return false;
|
|
317
|
+
// A worktree's `.git` is commonly a regular pointer file, and workspace/local-state entries may be
|
|
318
|
+
// symlinks. They remain VCS/dependency/runtime state. A same-named ordinary file other than `.git`
|
|
319
|
+
// is package content and must stay visible.
|
|
320
|
+
if (entry.name === '.git')
|
|
321
|
+
return true;
|
|
322
|
+
return entry.isDirectory() || entry.isSymbolicLink();
|
|
323
|
+
}
|
|
324
|
+
/** Generated metadata FILES are self-excluded only at the pack root; directories remain content. */
|
|
325
|
+
function isRootGeneratedMetadata(relDir, name, isFile) {
|
|
326
|
+
return isFile && relDir === '' && (name === MANIFEST_NAME || name === SBOM_NAME);
|
|
327
|
+
}
|
|
230
328
|
/** Every file under `root`, POSIX-relative, excluding the manifest and the SBOM themselves. */
|
|
231
329
|
export function listPackFiles(root) {
|
|
232
330
|
const out = [];
|
|
233
331
|
const walk = (dir, rel) => {
|
|
234
332
|
for (const e of readdirSync(dir, { withFileTypes: true })) {
|
|
235
|
-
//
|
|
333
|
+
// Role-classified state entries are unsigned territory BY DESIGN (see EXCLUDED_STATE_NAMES). The SIGN and VERIFY
|
|
236
334
|
// walks MUST share these exclusions: an asymmetry here false-TAMPERs every pnpm workspace
|
|
237
335
|
// pack whose node_modules holds symlinks (found live arming task #36 — 10 of 23 packs).
|
|
238
|
-
if (
|
|
336
|
+
if (isExcludedStateEntry(e))
|
|
239
337
|
continue;
|
|
240
|
-
if (e.name
|
|
338
|
+
if (isRootGeneratedMetadata(rel, e.name, e.isFile()))
|
|
241
339
|
continue;
|
|
242
340
|
const abs = join(dir, e.name);
|
|
243
341
|
const r = rel ? rel + '/' + e.name : e.name;
|
|
244
342
|
if (e.isDirectory())
|
|
245
343
|
walk(abs, r);
|
|
246
|
-
// NOT else-isFile: a symlink (or other non-file) OUTSIDE
|
|
344
|
+
// NOT else-isFile: a symlink (or other non-file) OUTSIDE role-classified state must stay VISIBLE to the
|
|
247
345
|
// verify sweep — it fails as "present but not signed" / "is a symlink" (R3-4: a smuggled symlink is a
|
|
248
|
-
// finding, not something to silently ignore). Only
|
|
346
|
+
// finding, not something to silently ignore). Only EXCLUDED_STATE_NAMES entries are exempt territory.
|
|
249
347
|
else
|
|
250
348
|
out.push(r);
|
|
251
349
|
}
|
|
@@ -262,9 +360,9 @@ export function listSignablePackFiles(root) {
|
|
|
262
360
|
const out = [];
|
|
263
361
|
const walk = (dir, rel) => {
|
|
264
362
|
for (const e of readdirSync(dir, { withFileTypes: true })) {
|
|
265
|
-
if (
|
|
363
|
+
if (isExcludedStateEntry(e))
|
|
266
364
|
continue;
|
|
267
|
-
if (e.name
|
|
365
|
+
if (isRootGeneratedMetadata(rel, e.name, e.isFile()))
|
|
268
366
|
continue;
|
|
269
367
|
const abs = join(dir, e.name);
|
|
270
368
|
const r = rel ? rel + '/' + e.name : e.name;
|
|
@@ -342,20 +440,7 @@ export function signManifest(manifest, privateKeyPem) {
|
|
|
342
440
|
* silently allow an unsigned `evil.js` to sit in the pack. A safety option that a caller may disable
|
|
343
441
|
* is not a safety option. The pack is always scanned.
|
|
344
442
|
*/
|
|
345
|
-
export function verifyManifest(root, signed, pubKeyPem
|
|
346
|
-
/**
|
|
347
|
-
* The paths the pack actually SHIPS, when the caller can establish them (from `npm pack`). The
|
|
348
|
-
* added-file sweep is then scoped to those, because a working-tree file `files[]` excludes was
|
|
349
|
-
* never "added to the pack" — it simply is not part of it.
|
|
350
|
-
*
|
|
351
|
-
* Omit it and the sweep covers the whole tree, exactly as before. That is correct for the case that
|
|
352
|
-
* matters most: a consumer verifying an EXTRACTED tarball, where the tree IS the shipped set.
|
|
353
|
-
*
|
|
354
|
-
* This parameter exists because the signer and the sweep must never disagree about what a pack
|
|
355
|
-
* contains — the 10-false-TAMPERED lesson, recorded at `packFiles` and re-learned on 2026-08-21 the
|
|
356
|
-
* moment the signer started scoping and the sweep did not.
|
|
357
|
-
*/
|
|
358
|
-
shippedPaths) {
|
|
443
|
+
export function verifyManifest(root, signed, pubKeyPem) {
|
|
359
444
|
const fail = (path, reason) => ({ ok: false, failures: [{ path, reason }] });
|
|
360
445
|
if (!signed || typeof signed !== 'object')
|
|
361
446
|
return fail(MANIFEST_NAME, 'no manifest');
|
|
@@ -365,6 +450,9 @@ shippedPaths) {
|
|
|
365
450
|
if (typeof manifest.version !== 'number' || !Number.isInteger(manifest.version)) {
|
|
366
451
|
return fail(MANIFEST_NAME, 'manifest version is not an integer');
|
|
367
452
|
}
|
|
453
|
+
if (![1, 2, MANIFEST_VERSION].includes(manifest.version)) {
|
|
454
|
+
return fail(MANIFEST_NAME, `unsupported manifest version ${manifest.version}`);
|
|
455
|
+
}
|
|
368
456
|
if (!isSafeManifestPath(manifest.pack)) {
|
|
369
457
|
return fail(MANIFEST_NAME, 'manifest pack name is unsafe: ' + JSON.stringify(manifest.pack));
|
|
370
458
|
}
|
|
@@ -388,6 +476,9 @@ shippedPaths) {
|
|
|
388
476
|
if (!sigOk)
|
|
389
477
|
return fail(MANIFEST_NAME, 'signature does not verify against the pinned key');
|
|
390
478
|
const failures = [];
|
|
479
|
+
const sbomFailure = verifySbomAgainstManifest(root, manifest);
|
|
480
|
+
if (sbomFailure !== null)
|
|
481
|
+
failures.push({ path: SBOM_NAME, reason: sbomFailure });
|
|
391
482
|
for (const entry of manifest.files) {
|
|
392
483
|
const abs = join(root, entry.path);
|
|
393
484
|
if (!existsSync(abs)) {
|
|
@@ -395,9 +486,9 @@ shippedPaths) {
|
|
|
395
486
|
continue;
|
|
396
487
|
}
|
|
397
488
|
// One open, O_NOFOLLOW, fstat the descriptor, hash from it: no symlink follow, no TOCTOU window.
|
|
398
|
-
const digest = hashRegularFileNoFollow(abs, entry.path);
|
|
489
|
+
const digest = hashRegularFileNoFollow(abs, entry.path, manifest.version);
|
|
399
490
|
if (digest === null) {
|
|
400
|
-
failures.push({ path: entry.path, reason: 'is a symlink
|
|
491
|
+
failures.push({ path: entry.path, reason: 'is a symlink, not a regular file, unreadable, or outside the canonical JSON domain — refusing to hash it' });
|
|
401
492
|
continue;
|
|
402
493
|
}
|
|
403
494
|
if (digest !== entry.sha256) {
|
|
@@ -405,15 +496,10 @@ shippedPaths) {
|
|
|
405
496
|
}
|
|
406
497
|
}
|
|
407
498
|
// Bidirectional, always: hashing only what the manifest lists lets an attacker ADD a file.
|
|
408
|
-
const shipped = shippedPaths === undefined ? null : new Set(shippedPaths);
|
|
409
499
|
const present = listPackFiles(root);
|
|
410
500
|
const listed = new Set(manifest.files.map((f) => f.path));
|
|
411
501
|
for (const rel of present) {
|
|
412
502
|
const p = rel.split(sep).join('/');
|
|
413
|
-
// A file the pack does not ship is not an ADDED file; scoping here is what keeps the sweep and the
|
|
414
|
-
// signer describing the same object.
|
|
415
|
-
if (shipped !== null && !shipped.has(p))
|
|
416
|
-
continue;
|
|
417
503
|
if (!listed.has(p))
|
|
418
504
|
failures.push({ path: p, reason: 'present in the pack but not signed' });
|
|
419
505
|
}
|
|
@@ -446,20 +532,56 @@ export function assertKeyOutsideTree(keyPath, repoRoot) {
|
|
|
446
532
|
' (a leaked signing key cannot be reverted — it means a new key and re-signing every pack)');
|
|
447
533
|
}
|
|
448
534
|
}
|
|
449
|
-
|
|
450
|
-
export function buildSbom(manifest) {
|
|
535
|
+
function buildSbomEnvelope(manifest, legacyV1PackageHash) {
|
|
451
536
|
return {
|
|
452
537
|
bomFormat: 'CycloneDX',
|
|
453
538
|
specVersion: '1.5',
|
|
454
539
|
version: 1,
|
|
455
540
|
metadata: { component: { type: 'library', name: manifest.pack } },
|
|
456
|
-
components: manifest.files.map((f) => (
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
541
|
+
components: [...manifest.files].sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0)).map((f) => !legacyV1PackageHash && CANONICALISED_PACK_FILES.has(f.path)
|
|
542
|
+
? {
|
|
543
|
+
type: 'file',
|
|
544
|
+
name: f.path,
|
|
545
|
+
properties: [
|
|
546
|
+
{ name: 'dz:digest-basis', value: manifest.version >= 3
|
|
547
|
+
? 'package-json-ordered-conditions-v2' : 'recursive-key-sorted-json-v1' },
|
|
548
|
+
{ name: manifest.version >= 3
|
|
549
|
+
? 'dz:canonical-json-sha256-v2' : 'dz:canonical-json-sha256-v1', value: f.sha256 },
|
|
550
|
+
],
|
|
551
|
+
}
|
|
552
|
+
: {
|
|
553
|
+
type: 'file',
|
|
554
|
+
name: f.path,
|
|
555
|
+
hashes: [{ alg: 'SHA-256', content: f.sha256 }],
|
|
556
|
+
}),
|
|
461
557
|
};
|
|
462
558
|
}
|
|
559
|
+
/**
|
|
560
|
+
* ADR-003: SBOM authenticity is acyclic. The SBOM is not self-hashed; instead its sole canonical
|
|
561
|
+
* value is derived from the already signature-authenticated manifest and compared byte-for-byte.
|
|
562
|
+
*/
|
|
563
|
+
export function verifySbomAgainstManifest(root, manifest) {
|
|
564
|
+
if (![1, 2, MANIFEST_VERSION].includes(manifest.version)) {
|
|
565
|
+
return `unsupported manifest version ${manifest.version}`;
|
|
566
|
+
}
|
|
567
|
+
const expected = JSON.stringify(buildSbom(manifest), null, 2) + '\n';
|
|
568
|
+
const accepted = manifest.version === 1
|
|
569
|
+
? [expected, JSON.stringify(buildLegacySbomV1(manifest), null, 2) + '\n']
|
|
570
|
+
: [expected];
|
|
571
|
+
const bytes = readRegularFileNoFollow(join(root, SBOM_NAME), [...new Set(accepted.map((value) => Buffer.byteLength(value)))]);
|
|
572
|
+
if (bytes === null)
|
|
573
|
+
return 'missing, symlinked, not a regular file, or has a non-canonical byte length';
|
|
574
|
+
const actual = bytes.toString('utf8');
|
|
575
|
+
if (!canonicalisationIsFaithful(actual))
|
|
576
|
+
return 'JSON is malformed, ambiguous, or precision-losing';
|
|
577
|
+
try {
|
|
578
|
+
JSON.parse(actual);
|
|
579
|
+
}
|
|
580
|
+
catch {
|
|
581
|
+
return 'JSON is malformed';
|
|
582
|
+
}
|
|
583
|
+
return accepted.includes(actual) ? null : 'content does not equal canonical CycloneDX derived from the signed manifest';
|
|
584
|
+
}
|
|
463
585
|
export function decidePublishGate(input) {
|
|
464
586
|
if (!input.trustRootPresent) {
|
|
465
587
|
if (input.requireSigning) {
|
package/dist/sign.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sign.js","sourceRoot":"","sources":["../src/sign.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sign.js","sourceRoot":"","sources":["../src/sign.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* store-location — one sentence about WHERE a learning store lives, used by every command that
|
|
3
|
+
* touches one.
|
|
4
|
+
*
|
|
5
|
+
* MEASURED 2026-08-27: `dz teach` and `dz recall` both resolve their store as
|
|
6
|
+
* `resolve(cwd, --project ?? '.')` (`cli.ts:2882`, `:3450`) — plain cwd, no git-root walk, no
|
|
7
|
+
* upward search, and no config key or environment variable to pin a canonical root. Neither
|
|
8
|
+
* command printed the path.
|
|
9
|
+
*
|
|
10
|
+
* So a user who runs `dz teach` in eight project directories gets eight isolated stores and
|
|
11
|
+
* believes they are accumulating. The path alone does not reveal that: `/home/u/proj/.dz` looks
|
|
12
|
+
* equally deliberate whether it was chosen or defaulted into. **That difference is the defect**,
|
|
13
|
+
* so the line names the SOURCE, not only the location.
|
|
14
|
+
*
|
|
15
|
+
* This ships BEFORE the intended per-session mode on purpose. A mode set once and forgotten lies
|
|
16
|
+
* silently, and a mode is only safe when its effect is visible on every operation it governs.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Who decided this path. `global` is separate from `cwd`/`explicit` because the advice differs:
|
|
20
|
+
* "pass --project" is useful for a cwd-derived store and MISLEADING for the home store, which
|
|
21
|
+
* neither the cwd nor --project chose (cross-family QE, 2026-08-27: `--project /tmp/p --to global`
|
|
22
|
+
* printed the right path under the wrong explanation).
|
|
23
|
+
*/
|
|
24
|
+
export type StoreOrigin = 'explicit' | 'cwd' | 'global';
|
|
25
|
+
export interface StoreLocation {
|
|
26
|
+
/** Absolute path of the store directory — `<projectRoot>/.dz`. */
|
|
27
|
+
readonly path: string;
|
|
28
|
+
/** Where the project root came from: an explicit `--project`, or the current directory. */
|
|
29
|
+
readonly origin: StoreOrigin;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Describe the store a command is about to use.
|
|
33
|
+
*
|
|
34
|
+
* `projectOption` is the RAW `--project` value as the user typed it (or `undefined`), and
|
|
35
|
+
* `resolvedRoot` is what the command already computed. Both are taken rather than re-resolving,
|
|
36
|
+
* so this helper can never disagree with the command about which directory was chosen — a second,
|
|
37
|
+
* independent resolution is exactly how two lookalike code paths come to name different stores.
|
|
38
|
+
*/
|
|
39
|
+
export declare function describeStoreLocation(resolvedRoot: string, projectOption: string | undefined,
|
|
40
|
+
/**
|
|
41
|
+
* Overrides the derived origin when the caller KNOWS what chose the path — today only the
|
|
42
|
+
* cross-project home store, which neither the cwd nor `--project` selected. Omit it and the
|
|
43
|
+
* origin is derived exactly as before, so every existing call is unchanged.
|
|
44
|
+
*/
|
|
45
|
+
origin?: StoreOrigin): StoreLocation;
|
|
46
|
+
/**
|
|
47
|
+
* The one human line, shared by every command.
|
|
48
|
+
*
|
|
49
|
+
* Two commands writing this sentence independently is how they come to disagree about what a store
|
|
50
|
+
* is — the lookalike-normalisation class this repo has already paid for once.
|
|
51
|
+
*
|
|
52
|
+
* `verb` is what the command did with the store, so the line reads naturally in both directions:
|
|
53
|
+
* "store (written): …" and "store (read): …".
|
|
54
|
+
*/
|
|
55
|
+
export declare function storeLocationLine(loc: StoreLocation, verb: 'written' | 'read'): string;
|
|
56
|
+
//# sourceMappingURL=store-location.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-location.d.ts","sourceRoot":"","sources":["../src/store-location.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GAAG,SAAS;AACjC;;;;GAIG;AACH,MAAM,CAAC,EAAE,WAAW,GACnB,aAAa,CAKf;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAOtF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* store-location — one sentence about WHERE a learning store lives, used by every command that
|
|
3
|
+
* touches one.
|
|
4
|
+
*
|
|
5
|
+
* MEASURED 2026-08-27: `dz teach` and `dz recall` both resolve their store as
|
|
6
|
+
* `resolve(cwd, --project ?? '.')` (`cli.ts:2882`, `:3450`) — plain cwd, no git-root walk, no
|
|
7
|
+
* upward search, and no config key or environment variable to pin a canonical root. Neither
|
|
8
|
+
* command printed the path.
|
|
9
|
+
*
|
|
10
|
+
* So a user who runs `dz teach` in eight project directories gets eight isolated stores and
|
|
11
|
+
* believes they are accumulating. The path alone does not reveal that: `/home/u/proj/.dz` looks
|
|
12
|
+
* equally deliberate whether it was chosen or defaulted into. **That difference is the defect**,
|
|
13
|
+
* so the line names the SOURCE, not only the location.
|
|
14
|
+
*
|
|
15
|
+
* This ships BEFORE the intended per-session mode on purpose. A mode set once and forgotten lies
|
|
16
|
+
* silently, and a mode is only safe when its effect is visible on every operation it governs.
|
|
17
|
+
*/
|
|
18
|
+
import { join } from 'node:path';
|
|
19
|
+
/**
|
|
20
|
+
* Describe the store a command is about to use.
|
|
21
|
+
*
|
|
22
|
+
* `projectOption` is the RAW `--project` value as the user typed it (or `undefined`), and
|
|
23
|
+
* `resolvedRoot` is what the command already computed. Both are taken rather than re-resolving,
|
|
24
|
+
* so this helper can never disagree with the command about which directory was chosen — a second,
|
|
25
|
+
* independent resolution is exactly how two lookalike code paths come to name different stores.
|
|
26
|
+
*/
|
|
27
|
+
export function describeStoreLocation(resolvedRoot, projectOption,
|
|
28
|
+
/**
|
|
29
|
+
* Overrides the derived origin when the caller KNOWS what chose the path — today only the
|
|
30
|
+
* cross-project home store, which neither the cwd nor `--project` selected. Omit it and the
|
|
31
|
+
* origin is derived exactly as before, so every existing call is unchanged.
|
|
32
|
+
*/
|
|
33
|
+
origin) {
|
|
34
|
+
return {
|
|
35
|
+
path: join(resolvedRoot, '.dz'),
|
|
36
|
+
origin: origin ?? (projectOption === undefined ? 'cwd' : 'explicit'),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The one human line, shared by every command.
|
|
41
|
+
*
|
|
42
|
+
* Two commands writing this sentence independently is how they come to disagree about what a store
|
|
43
|
+
* is — the lookalike-normalisation class this repo has already paid for once.
|
|
44
|
+
*
|
|
45
|
+
* `verb` is what the command did with the store, so the line reads naturally in both directions:
|
|
46
|
+
* "store (written): …" and "store (read): …".
|
|
47
|
+
*/
|
|
48
|
+
export function storeLocationLine(loc, verb) {
|
|
49
|
+
const because = loc.origin === 'explicit'
|
|
50
|
+
? 'from --project'
|
|
51
|
+
: loc.origin === 'global'
|
|
52
|
+
? 'the cross-project store in your home directory'
|
|
53
|
+
: 'from the current directory — pass --project to choose deliberately';
|
|
54
|
+
return ` store (${verb}): ${loc.path} [${because}]`;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=store-location.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-location.js","sourceRoot":"","sources":["../src/store-location.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAiBjC;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,YAAoB,EACpB,aAAiC;AACjC;;;;GAIG;AACH,MAAoB;IAEpB,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC;QAC/B,MAAM,EAAE,MAAM,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;KACrE,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAkB,EAAE,IAAwB;IAC5E,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,KAAK,UAAU;QACvC,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ;YACvB,CAAC,CAAC,gDAAgD;YAClD,CAAC,CAAC,oEAAoE,CAAC;IAC3E,OAAO,YAAY,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,OAAO,GAAG,CAAC;AACxD,CAAC"}
|
package/dist/store-lock.d.ts
CHANGED
|
@@ -86,6 +86,7 @@ export declare class StoreLockCompromisedError extends Error {
|
|
|
86
86
|
readonly code = "ECOMPROMISED";
|
|
87
87
|
constructor(lockPath: string, cause: Error);
|
|
88
88
|
}
|
|
89
|
+
export declare function resolveStaleMs(): number;
|
|
89
90
|
/**
|
|
90
91
|
* Run `fn` while holding the store lock, releasing it however `fn` ends.
|
|
91
92
|
*
|
package/dist/store-lock.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-lock.d.ts","sourceRoot":"","sources":["../src/store-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAMH,2FAA2F;AAC3F,eAAO,MAAM,aAAa,QAAS,CAAC;AACpC,sFAAsF;AACtF,eAAO,MAAM,eAAe,QAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"store-lock.d.ts","sourceRoot":"","sources":["../src/store-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAMH,2FAA2F;AAC3F,eAAO,MAAM,aAAa,QAAS,CAAC;AACpC,sFAAsF;AACtF,eAAO,MAAM,eAAe,QAAS,CAAC;AAOtC,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,6EAA6E;AAC7E,MAAM,WAAW,gBAAgB;IAC/B,gGAAgG;IAChG,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,yFAAyF;IACzF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,8FAA8F;AAC9F,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,kBAAkB;gBACnB,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAO/C;AAED;;;;;GAKG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,kBAAkB;gBACnB,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAI3C;AAOD,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAqED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,CAAC,CAAC,CAuBZ;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,CAAC,EACX,IAAI,GAAE,gBAAqB,GAC1B,CAAC,CAuBH"}
|