@dzhechkov/harness-core 0.3.122 → 0.3.124

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/README.md CHANGED
@@ -10,6 +10,8 @@ and any other consumer.
10
10
  | `skills` | `loadSkillFromDir`, `listSkills`, `discoverSkillIds` | Read skill directories into `CanonicalSkill` objects |
11
11
  | `apply` | `applyEmitResult` | Write an adapter `EmitResult` to disk — **additively** |
12
12
  | `targets` | `TARGETS`, `TargetName`, `isTargetName` | `--target` name → platform adapter |
13
+ | `guard` | `evaluateGuard`, `resolveRules`, `scanSecrets`, `DEFAULT_RULES` | Declarative HARD/SOFT constraint engine behind `dz guard` (publish/teach/consolidate pre-flight; fail-closed) |
14
+ | `feature-adr-setup` (P3) | `renderGuardsConfig`, `renderGuardsRunner` | Scaffolds deterministic guard tests into a TARGET project: `guards.config.json` + a zero-dependency `check.mjs` runner (loc-cap, secret-scan, frozen-file sha256 pins, waivers-with-reasons) — `dz feature-adr-setup --guards` |
13
15
  | `operations` | `runInit`, `runSync`, `runVerify`, `runDoctor` | The harness operations, returning structured reports |
14
16
 
15
17
  ## The additive guarantee
@@ -34,6 +34,13 @@ export interface SetupSpec {
34
34
  /** scaffold a starter `architecture/degradations.md` — the accepted-degradations registry the R6
35
35
  * challenge panel (C1) reads so it does not re-flag debt you already own. Create-if-absent. */
36
36
  readonly degradations?: boolean;
37
+ /** P3 (fa-improvements): scaffold DETERMINISTIC guard tests into the project — a declarative
38
+ * `guards.config.json` + a zero-dependency Node runner `check.mjs` (LOC cap, secret scan, frozen-file
39
+ * sha256 pins, each with an explicit waiver mechanism). `true` for defaults, or `{ locCap }` to tune.
40
+ * Moves rules a reviewer "might notice" down to layer 1 of the cost-of-detection ladder. Create-if-absent. */
41
+ readonly guards?: boolean | {
42
+ readonly locCap?: number;
43
+ };
37
44
  }
38
45
  export interface SetupScan {
39
46
  readonly visionExists: boolean;
@@ -76,6 +83,8 @@ export interface ExistingScaffoldFiles {
76
83
  readonly projectSkills: ExistingFile;
77
84
  readonly testing: ExistingFile;
78
85
  readonly degradations?: ExistingFile;
86
+ readonly guardsConfig?: ExistingFile;
87
+ readonly guardsRunner?: ExistingFile;
79
88
  }
80
89
  export declare const P_VISION = "architecture/vision.md";
81
90
  export declare const P_TESTING = "architecture/testing.md";
@@ -83,6 +92,8 @@ export declare const P_MANIFEST = "architecture/subsystems.manifest.json";
83
92
  export declare const P_PROJECT_SKILLS = "architecture/project-skills.json";
84
93
  export declare const P_CRITIC = "architecture/project-critic/SKILL.md";
85
94
  export declare const P_DEGRADATIONS = "architecture/degradations.md";
95
+ export declare const P_GUARDS_CONFIG = "architecture/guards/guards.config.json";
96
+ export declare const P_GUARDS_RUNNER = "architecture/guards/check.mjs";
86
97
  /** What exists, what is discoverable, what is still missing — the read-only "which docs, and where?" answer (FR-2). PURE. */
87
98
  export declare function buildSetupPlan(scan: SetupScan): SetupPlan;
88
99
  /** Suggest a starter subsystem grouping from discovered packages (deterministic heuristic — user refines). PURE. */
@@ -104,6 +115,18 @@ export declare function buildProjectSkillsFromSpec(spec: SetupSpec): ProjectSkil
104
115
  * are append-only merged (existing content, order, and unknown keys preserved). A file only gets `create`
105
116
  * when it is genuinely ABSENT. Malformed existing content never crashes and never clobbers.
106
117
  */
118
+ /** Default LOC (lines of code) cap for the scaffolded guard — the classic god-object threshold. */
119
+ export declare const DEFAULT_GUARD_LOC_CAP = 700;
120
+ /** Render the declarative guard config. Data, not behavior — the owner edits caps/waivers here. */
121
+ export declare function renderGuardsConfig(opts?: {
122
+ locCap?: number;
123
+ }): string;
124
+ /**
125
+ * Render the ZERO-DEPENDENCY guard runner (plain Node ≥18, no framework, no install): LOC cap + high-signal
126
+ * secret scan + frozen-file sha256 pins, waivers with required reasons, `--json`, exit 1 on violation.
127
+ * Deliberately a portable .mjs, not a vitest/pytest file — it runs in ANY stack's CI with just Node.
128
+ */
129
+ export declare function renderGuardsRunner(): string;
107
130
  export declare function scaffoldFromSpec(spec: SetupSpec, existing: ExistingScaffoldFiles): ScaffoldResult;
108
131
  /** Human preview of the scaffold plan. Deterministic. */
109
132
  export declare function renderScaffoldPreview(result: ScaffoldResult): string;
@@ -1 +1 @@
1
- {"version":3,"file":"feature-adr-setup.d.ts","sourceRoot":"","sources":["../src/feature-adr-setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature-adr-setup.d.ts","sourceRoot":"","sources":["../src/feature-adr-setup.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,8 @@ export const P_MANIFEST = 'architecture/subsystems.manifest.json';
21
21
  export const P_PROJECT_SKILLS = 'architecture/project-skills.json';
22
22
  export const P_CRITIC = 'architecture/project-critic/SKILL.md';
23
23
  export const P_DEGRADATIONS = 'architecture/degradations.md';
24
+ export const P_GUARDS_CONFIG = 'architecture/guards/guards.config.json';
25
+ export const P_GUARDS_RUNNER = 'architecture/guards/check.mjs';
24
26
  const byStr = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
25
27
  const uniqSorted = (xs) => [...new Set(xs)].sort(byStr);
26
28
  /** What exists, what is discoverable, what is still missing — the read-only "which docs, and where?" answer (FR-2). PURE. */
@@ -236,6 +238,119 @@ function structuredFile(path, existing, render, merge) {
236
238
  * are append-only merged (existing content, order, and unknown keys preserved). A file only gets `create`
237
239
  * when it is genuinely ABSENT. Malformed existing content never crashes and never clobbers.
238
240
  */
241
+ /** Default LOC (lines of code) cap for the scaffolded guard — the classic god-object threshold. */
242
+ export const DEFAULT_GUARD_LOC_CAP = 700;
243
+ /** Render the declarative guard config. Data, not behavior — the owner edits caps/waivers here. */
244
+ export function renderGuardsConfig(opts = {}) {
245
+ const cap = typeof opts.locCap === 'number' && Number.isFinite(opts.locCap) && opts.locCap > 0 ? Math.floor(opts.locCap) : DEFAULT_GUARD_LOC_CAP;
246
+ return JSON.stringify({
247
+ $doc: 'Deterministic project guards (fa-improvements P3). Enforced by architecture/guards/check.mjs — wire `node architecture/guards/check.mjs` into your test/CI command. Every waiver REQUIRES a reason: a conscious exception is recorded, not silently allowed. The project-critic role must NOT re-flag rules enforced here — only waivers without a reason.',
248
+ locCap: {
249
+ limit: cap,
250
+ include: ['src/**', 'lib/**', 'app/**', 'test/**', 'tests/**'],
251
+ extensions: ['.ts', '.tsx', '.js', '.mjs', '.cjs', '.py', '.go', '.rs', '.java'],
252
+ waivers: [{ path: 'example/generated-file.ts', reason: 'generated code — delete this sample waiver' }],
253
+ },
254
+ secretScan: {
255
+ include: ['src/**', 'lib/**', 'app/**', 'test/**', 'tests/**', 'docs/**'],
256
+ waivers: [],
257
+ },
258
+ frozenFiles: [],
259
+ }, null, 2) + '\n';
260
+ }
261
+ /**
262
+ * Render the ZERO-DEPENDENCY guard runner (plain Node ≥18, no framework, no install): LOC cap + high-signal
263
+ * secret scan + frozen-file sha256 pins, waivers with required reasons, `--json`, exit 1 on violation.
264
+ * Deliberately a portable .mjs, not a vitest/pytest file — it runs in ANY stack's CI with just Node.
265
+ */
266
+ export function renderGuardsRunner() {
267
+ return [
268
+ '#!/usr/bin/env node',
269
+ "// architecture/guards/check.mjs — deterministic project guards (generated by dz feature-adr-setup --guards).",
270
+ '// Zero dependencies: plain Node >=18. Wire into CI/test: `node architecture/guards/check.mjs` (exit 1 = violation).',
271
+ '// Rules and waivers live in guards.config.json — a waiver without a reason is itself a violation.',
272
+ "import { readFileSync, readdirSync, statSync } from 'node:fs';",
273
+ "import { join, extname, sep } from 'node:path';",
274
+ "import { createHash } from 'node:crypto';",
275
+ '',
276
+ "const ROOT = process.cwd();",
277
+ "const CFG = JSON.parse(readFileSync(join(ROOT, 'architecture/guards/guards.config.json'), 'utf8'));",
278
+ "const JSON_MODE = process.argv.includes('--json');",
279
+ 'const violations = [];',
280
+ '',
281
+ "const SECRETS = [",
282
+ " { name: 'private-key-pem', re: /-----BEGIN (?:RSA |EC |OPENSSH |DSA |PGP |ENCRYPTED )?PRIVATE KEY-----/ },",
283
+ " { name: 'openai-key', re: /\\bsk-[A-Za-z0-9_-]{20,}\\b/ },",
284
+ " { name: 'stripe-key', re: /\\bsk_(?:live|test)_[A-Za-z0-9]{16,}\\b/ },",
285
+ " { name: 'github-token', re: /\\bgh[pousr]_[A-Za-z0-9]{36,}\\b/ },",
286
+ " { name: 'aws-access-key', re: /\\bAKIA[0-9A-Z]{16}\\b/ },",
287
+ " { name: 'slack-token', re: /\\bxox[baprs]-[A-Za-z0-9-]{10,}\\b/ },",
288
+ " { name: 'google-api-key', re: /\\bAIza[0-9A-Za-z_-]{35}\\b/ },",
289
+ '];',
290
+ "const SKIP_DIRS = new Set(['node_modules', '.git', 'dist', 'build', 'target', 'coverage', '.next', 'vendor', '__pycache__']);",
291
+ '',
292
+ '// include patterns are simple dir prefixes (the part before /**). Deterministic, no glob dependency.',
293
+ "const prefixes = (pats) => (pats || []).map((p) => String(p).split('/**')[0]).filter(Boolean);",
294
+ 'function walk(dir, out) {',
295
+ ' let entries = [];',
296
+ ' try { entries = readdirSync(dir, { withFileTypes: true }); } catch { return out; }',
297
+ ' for (const e of entries) {',
298
+ ' if (e.isDirectory()) { if (!SKIP_DIRS.has(e.name)) walk(join(dir, e.name), out); }',
299
+ ' else if (e.isFile()) out.push(join(dir, e.name));',
300
+ ' }',
301
+ ' return out;',
302
+ '}',
303
+ "const rel = (p) => p.slice(ROOT.length + 1).split(sep).join('/');",
304
+ 'function filesUnder(pats) {',
305
+ ' const out = [];',
306
+ ' for (const pre of prefixes(pats)) walk(join(ROOT, pre), out);',
307
+ ' return out;',
308
+ '}',
309
+ 'function waiverFor(list, relPath) {',
310
+ " for (const w of list || []) { if (w && w.path === relPath) return w; }",
311
+ ' return null;',
312
+ '}',
313
+ 'function applyWaiver(rule, relPath, list, detail) {',
314
+ ' const w = waiverFor(list, relPath);',
315
+ " if (!w) { violations.push({ rule, path: relPath, detail }); return; }",
316
+ " if (!w.reason || !String(w.reason).trim()) violations.push({ rule: rule + '-waiver', path: relPath, detail: 'waived WITHOUT a reason — a silent exception is a violation' });",
317
+ '}',
318
+ '',
319
+ '// 1) LOC cap (the god-object guard: deterministic wc -l, not reviewer judgment)',
320
+ 'if (CFG.locCap && CFG.locCap.limit > 0) {',
321
+ ' const exts = new Set(CFG.locCap.extensions || []);',
322
+ ' for (const f of filesUnder(CFG.locCap.include)) {',
323
+ ' if (exts.size && !exts.has(extname(f))) continue;',
324
+ " let n = 0; try { n = readFileSync(f, 'utf8').split('\\n').length; } catch { continue; }",
325
+ ' if (n > CFG.locCap.limit) applyWaiver(\'loc-cap\', rel(f), CFG.locCap.waivers, n + \' lines > cap \' + CFG.locCap.limit);',
326
+ ' }',
327
+ '}',
328
+ '',
329
+ '// 2) secret scan (high-signal shapes only — ordinary prose and hashes do not trip it)',
330
+ 'if (CFG.secretScan) {',
331
+ ' for (const f of filesUnder(CFG.secretScan.include)) {',
332
+ " let text = ''; try { text = readFileSync(f, 'utf8'); } catch { continue; }",
333
+ ' for (const s of SECRETS) { if (s.re.test(text)) applyWaiver(\'secret-scan\', rel(f), CFG.secretScan.waivers, \'looks like a \' + s.name); }',
334
+ ' }',
335
+ '}',
336
+ '',
337
+ '// 3) frozen-file sha256 pins (tamper/drift evidence for files that must not change silently)',
338
+ 'for (const fz of CFG.frozenFiles || []) {',
339
+ ' if (!fz || !fz.path || !fz.sha256) continue;',
340
+ ' let actual = null;',
341
+ " try { actual = createHash('sha256').update(readFileSync(join(ROOT, fz.path))).digest('hex'); } catch { /* missing counts as changed */ }",
342
+ " if (actual !== fz.sha256) violations.push({ rule: 'frozen-file', path: fz.path, detail: actual ? 'sha256 changed (pinned ' + fz.sha256.slice(0, 12) + '…, actual ' + actual.slice(0, 12) + '…)' : 'file missing/unreadable' });",
343
+ '}',
344
+ '',
345
+ 'if (JSON_MODE) { console.log(JSON.stringify({ ok: violations.length === 0, violations })); }',
346
+ 'else {',
347
+ " if (violations.length === 0) console.log('guards: ✓ all deterministic guards pass');",
348
+ " else { console.log('guards: ✗ ' + violations.length + ' violation(s)'); for (const v of violations) console.log(' [' + v.rule + '] ' + v.path + ' — ' + v.detail); }",
349
+ '}',
350
+ 'process.exit(violations.length === 0 ? 0 : 1);',
351
+ '',
352
+ ].join('\n');
353
+ }
239
354
  export function scaffoldFromSpec(spec, existing) {
240
355
  const files = [];
241
356
  if (spec.vision)
@@ -250,6 +365,13 @@ export function scaffoldFromSpec(spec, existing) {
250
365
  files.push(structuredFile(P_PROJECT_SKILLS, existing.projectSkills, () => JSON.stringify(nextPS, null, 2) + '\n', (parsed) => mergeProjectSkills(parsed, (nextPS.roles ?? {}), nextPS.extra ?? [])));
251
366
  if (spec.degradations)
252
367
  files.push(proseFile(P_DEGRADATIONS, existing.degradations ?? { exists: false }, renderDegradationsDoc));
368
+ if (spec.guards) {
369
+ const gOpts = typeof spec.guards === 'object' ? spec.guards : {};
370
+ // Both create-if-absent: the config is the owner's to edit after scaffolding; the runner is regenerable
371
+ // but never clobbered (a project may have patched it — treat like any owned file).
372
+ files.push(proseFile(P_GUARDS_CONFIG, existing.guardsConfig ?? { exists: false }, () => renderGuardsConfig(gOpts)));
373
+ files.push(proseFile(P_GUARDS_RUNNER, existing.guardsRunner ?? { exists: false }, renderGuardsRunner));
374
+ }
253
375
  return { files: [...files].sort((a, b) => byStr(a.path, b.path)) };
254
376
  }
255
377
  /** Human preview of the scaffold plan. Deterministic. */
@@ -314,6 +436,8 @@ export function readExistingForScaffold(repoRoot) {
314
436
  projectSkills: readExistingFile(join(repoRoot, P_PROJECT_SKILLS)),
315
437
  testing: readExistingFile(join(repoRoot, P_TESTING)),
316
438
  degradations: readExistingFile(join(repoRoot, P_DEGRADATIONS)),
439
+ guardsConfig: readExistingFile(join(repoRoot, P_GUARDS_CONFIG)),
440
+ guardsRunner: readExistingFile(join(repoRoot, P_GUARDS_RUNNER)),
317
441
  };
318
442
  }
319
443
  //# sourceMappingURL=feature-adr-setup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature-adr-setup.js","sourceRoot":"","sources":["../src/feature-adr-setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature-adr-setup.js","sourceRoot":"","sources":["../src/feature-adr-setup.ts"],"names":[],"mappings":"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"}
package/dist/guard.d.ts CHANGED
@@ -48,6 +48,12 @@ export interface GuardFacts {
48
48
  readonly count: number;
49
49
  readonly cap: number;
50
50
  };
51
+ /** for readme-first: per publishable package, is a version bump staged without a README change? */
52
+ readonly readmeFirst?: readonly {
53
+ readonly name: string;
54
+ readonly versionBumped: boolean;
55
+ readonly readmeChanged: boolean;
56
+ }[];
51
57
  }
52
58
  /** The built-in rule set (works with no config). Ops are the mutating operations each rule guards. */
53
59
  export declare const DEFAULT_RULES: readonly GuardRule[];
@@ -1 +1 @@
1
- {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"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"}
package/dist/guard.js CHANGED
@@ -16,6 +16,7 @@ export const DEFAULT_RULES = [
16
16
  { id: 'no-skill-drift', severity: 'hard', ops: ['publish', 'consolidate'], description: 'no unexpected byte-drift between shared skill copies' },
17
17
  { id: 'no-secrets', severity: 'hard', ops: ['teach', 'publish'], description: 'no private key or API token in lesson text or a published file' },
18
18
  { id: 'readme-consistency', severity: 'soft', ops: ['publish'], description: 'README counts agree (CJM header vs All Commands, etc.)' },
19
+ { id: 'readme-first', severity: 'soft', ops: ['publish'], description: 'a package with a staged version bump must update its own README.md in the same change (README-first)' },
19
20
  { id: 'store-bloat-cap', severity: 'soft', ops: ['teach', 'consolidate'], description: 'the learned store is within its size cap' },
20
21
  ];
21
22
  /**
@@ -76,6 +77,18 @@ const CHECKERS = {
76
77
  }
77
78
  return out;
78
79
  },
80
+ 'readme-first': (f, sev) => {
81
+ // The 2026-07-18 violation shape, mechanized: a package about to publish (version bumped in the diff)
82
+ // whose own README.md is untouched in the same diff. SOFT: some republishes legitimately need no doc
83
+ // change — the point is that skipping the README becomes a VISIBLE decision, not a silent lapse.
84
+ const out = [];
85
+ for (const p of f.readmeFirst ?? []) {
86
+ if (p && p.versionBumped === true && p.readmeChanged !== true) {
87
+ out.push({ rule: 'readme-first', severity: sev, detail: `${p.name}: version bumped but its README.md is untouched in this change — README-first: document the change (or consciously proceed; this warning is the record)` });
88
+ }
89
+ }
90
+ return out;
91
+ },
79
92
  'store-bloat-cap': (f, sev) => {
80
93
  const s = f.store;
81
94
  if (!s || !Number.isFinite(s.count) || !Number.isFinite(s.cap) || s.cap <= 0)
package/dist/guard.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"guard.js","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guard.js","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dzhechkov/harness-core",
3
- "version": "0.3.122",
3
+ "version": "0.3.124",
4
4
  "description": "Shared harness logic - skill loading, additive apply, and the init/sync/verify/doctor operations.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -30,13 +30,13 @@
30
30
  "@dzhechkov/adapter-openclaude": "^0.1.0",
31
31
  "@dzhechkov/adapter-opencode": "^0.2.0",
32
32
  "yaml": "^2.0.0",
33
- "@dzhechkov/adapter-agents-md": "0.1.1",
34
- "@dzhechkov/adapter-windsurf": "0.1.1",
35
- "@dzhechkov/adapter-cursor": "0.1.1",
36
33
  "@dzhechkov/adapter-copilot": "0.1.1",
34
+ "@dzhechkov/adapter-cursor": "0.1.1",
37
35
  "@dzhechkov/adapter-gemini": "0.1.1",
36
+ "@dzhechkov/adapter-agents-md": "0.1.1",
37
+ "@dzhechkov/memory": "0.2.9",
38
38
  "@dzhechkov/core": "0.2.14",
39
- "@dzhechkov/memory": "0.2.9"
39
+ "@dzhechkov/adapter-windsurf": "0.1.1"
40
40
  },
41
41
  "peerDependenciesMeta": {
42
42
  "@ruvector/rvf": {
@@ -32,6 +32,11 @@ export interface SetupSpec {
32
32
  /** scaffold a starter `architecture/degradations.md` — the accepted-degradations registry the R6
33
33
  * challenge panel (C1) reads so it does not re-flag debt you already own. Create-if-absent. */
34
34
  readonly degradations?: boolean;
35
+ /** P3 (fa-improvements): scaffold DETERMINISTIC guard tests into the project — a declarative
36
+ * `guards.config.json` + a zero-dependency Node runner `check.mjs` (LOC cap, secret scan, frozen-file
37
+ * sha256 pins, each with an explicit waiver mechanism). `true` for defaults, or `{ locCap }` to tune.
38
+ * Moves rules a reviewer "might notice" down to layer 1 of the cost-of-detection ladder. Create-if-absent. */
39
+ readonly guards?: boolean | { readonly locCap?: number };
35
40
  }
36
41
 
37
42
  export interface SetupScan {
@@ -57,7 +62,7 @@ export interface ScaffoldResult { readonly files: readonly ScaffoldFile[] }
57
62
  /** One existing on-disk file: `exists` distinguishes ABSENT from EXISTS-BUT-UNREADABLE (never clobber either). */
58
63
  export interface ExistingFile { readonly exists: boolean; readonly content?: string }
59
64
  /** The existing files the scaffold compares against. */
60
- export interface ExistingScaffoldFiles { readonly vision: ExistingFile; readonly manifest: ExistingFile; readonly projectSkills: ExistingFile; readonly testing: ExistingFile; readonly degradations?: ExistingFile }
65
+ export interface ExistingScaffoldFiles { readonly vision: ExistingFile; readonly manifest: ExistingFile; readonly projectSkills: ExistingFile; readonly testing: ExistingFile; readonly degradations?: ExistingFile; readonly guardsConfig?: ExistingFile; readonly guardsRunner?: ExistingFile }
61
66
 
62
67
  // Canonical committed paths (ADR: everything under architecture/).
63
68
  export const P_VISION = 'architecture/vision.md';
@@ -66,6 +71,8 @@ export const P_MANIFEST = 'architecture/subsystems.manifest.json';
66
71
  export const P_PROJECT_SKILLS = 'architecture/project-skills.json';
67
72
  export const P_CRITIC = 'architecture/project-critic/SKILL.md';
68
73
  export const P_DEGRADATIONS = 'architecture/degradations.md';
74
+ export const P_GUARDS_CONFIG = 'architecture/guards/guards.config.json';
75
+ export const P_GUARDS_RUNNER = 'architecture/guards/check.mjs';
69
76
 
70
77
  const byStr = (a: string, b: string): number => (a < b ? -1 : a > b ? 1 : 0);
71
78
  const uniqSorted = (xs: readonly string[]): string[] => [...new Set(xs)].sort(byStr);
@@ -235,6 +242,122 @@ function structuredFile(path: string, existing: ExistingFile, render: () => stri
235
242
  * are append-only merged (existing content, order, and unknown keys preserved). A file only gets `create`
236
243
  * when it is genuinely ABSENT. Malformed existing content never crashes and never clobbers.
237
244
  */
245
+ /** Default LOC (lines of code) cap for the scaffolded guard — the classic god-object threshold. */
246
+ export const DEFAULT_GUARD_LOC_CAP = 700;
247
+
248
+ /** Render the declarative guard config. Data, not behavior — the owner edits caps/waivers here. */
249
+ export function renderGuardsConfig(opts: { locCap?: number } = {}): string {
250
+ const cap = typeof opts.locCap === 'number' && Number.isFinite(opts.locCap) && opts.locCap > 0 ? Math.floor(opts.locCap) : DEFAULT_GUARD_LOC_CAP;
251
+ return JSON.stringify({
252
+ $doc: 'Deterministic project guards (fa-improvements P3). Enforced by architecture/guards/check.mjs — wire `node architecture/guards/check.mjs` into your test/CI command. Every waiver REQUIRES a reason: a conscious exception is recorded, not silently allowed. The project-critic role must NOT re-flag rules enforced here — only waivers without a reason.',
253
+ locCap: {
254
+ limit: cap,
255
+ include: ['src/**', 'lib/**', 'app/**', 'test/**', 'tests/**'],
256
+ extensions: ['.ts', '.tsx', '.js', '.mjs', '.cjs', '.py', '.go', '.rs', '.java'],
257
+ waivers: [{ path: 'example/generated-file.ts', reason: 'generated code — delete this sample waiver' }],
258
+ },
259
+ secretScan: {
260
+ include: ['src/**', 'lib/**', 'app/**', 'test/**', 'tests/**', 'docs/**'],
261
+ waivers: [],
262
+ },
263
+ frozenFiles: [] as { path: string; sha256: string; reason: string }[],
264
+ }, null, 2) + '\n';
265
+ }
266
+
267
+ /**
268
+ * Render the ZERO-DEPENDENCY guard runner (plain Node ≥18, no framework, no install): LOC cap + high-signal
269
+ * secret scan + frozen-file sha256 pins, waivers with required reasons, `--json`, exit 1 on violation.
270
+ * Deliberately a portable .mjs, not a vitest/pytest file — it runs in ANY stack's CI with just Node.
271
+ */
272
+ export function renderGuardsRunner(): string {
273
+ return [
274
+ '#!/usr/bin/env node',
275
+ "// architecture/guards/check.mjs — deterministic project guards (generated by dz feature-adr-setup --guards).",
276
+ '// Zero dependencies: plain Node >=18. Wire into CI/test: `node architecture/guards/check.mjs` (exit 1 = violation).',
277
+ '// Rules and waivers live in guards.config.json — a waiver without a reason is itself a violation.',
278
+ "import { readFileSync, readdirSync, statSync } from 'node:fs';",
279
+ "import { join, extname, sep } from 'node:path';",
280
+ "import { createHash } from 'node:crypto';",
281
+ '',
282
+ "const ROOT = process.cwd();",
283
+ "const CFG = JSON.parse(readFileSync(join(ROOT, 'architecture/guards/guards.config.json'), 'utf8'));",
284
+ "const JSON_MODE = process.argv.includes('--json');",
285
+ 'const violations = [];',
286
+ '',
287
+ "const SECRETS = [",
288
+ " { name: 'private-key-pem', re: /-----BEGIN (?:RSA |EC |OPENSSH |DSA |PGP |ENCRYPTED )?PRIVATE KEY-----/ },",
289
+ " { name: 'openai-key', re: /\\bsk-[A-Za-z0-9_-]{20,}\\b/ },",
290
+ " { name: 'stripe-key', re: /\\bsk_(?:live|test)_[A-Za-z0-9]{16,}\\b/ },",
291
+ " { name: 'github-token', re: /\\bgh[pousr]_[A-Za-z0-9]{36,}\\b/ },",
292
+ " { name: 'aws-access-key', re: /\\bAKIA[0-9A-Z]{16}\\b/ },",
293
+ " { name: 'slack-token', re: /\\bxox[baprs]-[A-Za-z0-9-]{10,}\\b/ },",
294
+ " { name: 'google-api-key', re: /\\bAIza[0-9A-Za-z_-]{35}\\b/ },",
295
+ '];',
296
+ "const SKIP_DIRS = new Set(['node_modules', '.git', 'dist', 'build', 'target', 'coverage', '.next', 'vendor', '__pycache__']);",
297
+ '',
298
+ '// include patterns are simple dir prefixes (the part before /**). Deterministic, no glob dependency.',
299
+ "const prefixes = (pats) => (pats || []).map((p) => String(p).split('/**')[0]).filter(Boolean);",
300
+ 'function walk(dir, out) {',
301
+ ' let entries = [];',
302
+ ' try { entries = readdirSync(dir, { withFileTypes: true }); } catch { return out; }',
303
+ ' for (const e of entries) {',
304
+ ' if (e.isDirectory()) { if (!SKIP_DIRS.has(e.name)) walk(join(dir, e.name), out); }',
305
+ ' else if (e.isFile()) out.push(join(dir, e.name));',
306
+ ' }',
307
+ ' return out;',
308
+ '}',
309
+ "const rel = (p) => p.slice(ROOT.length + 1).split(sep).join('/');",
310
+ 'function filesUnder(pats) {',
311
+ ' const out = [];',
312
+ ' for (const pre of prefixes(pats)) walk(join(ROOT, pre), out);',
313
+ ' return out;',
314
+ '}',
315
+ 'function waiverFor(list, relPath) {',
316
+ " for (const w of list || []) { if (w && w.path === relPath) return w; }",
317
+ ' return null;',
318
+ '}',
319
+ 'function applyWaiver(rule, relPath, list, detail) {',
320
+ ' const w = waiverFor(list, relPath);',
321
+ " if (!w) { violations.push({ rule, path: relPath, detail }); return; }",
322
+ " if (!w.reason || !String(w.reason).trim()) violations.push({ rule: rule + '-waiver', path: relPath, detail: 'waived WITHOUT a reason — a silent exception is a violation' });",
323
+ '}',
324
+ '',
325
+ '// 1) LOC cap (the god-object guard: deterministic wc -l, not reviewer judgment)',
326
+ 'if (CFG.locCap && CFG.locCap.limit > 0) {',
327
+ ' const exts = new Set(CFG.locCap.extensions || []);',
328
+ ' for (const f of filesUnder(CFG.locCap.include)) {',
329
+ ' if (exts.size && !exts.has(extname(f))) continue;',
330
+ " let n = 0; try { n = readFileSync(f, 'utf8').split('\\n').length; } catch { continue; }",
331
+ ' if (n > CFG.locCap.limit) applyWaiver(\'loc-cap\', rel(f), CFG.locCap.waivers, n + \' lines > cap \' + CFG.locCap.limit);',
332
+ ' }',
333
+ '}',
334
+ '',
335
+ '// 2) secret scan (high-signal shapes only — ordinary prose and hashes do not trip it)',
336
+ 'if (CFG.secretScan) {',
337
+ ' for (const f of filesUnder(CFG.secretScan.include)) {',
338
+ " let text = ''; try { text = readFileSync(f, 'utf8'); } catch { continue; }",
339
+ ' for (const s of SECRETS) { if (s.re.test(text)) applyWaiver(\'secret-scan\', rel(f), CFG.secretScan.waivers, \'looks like a \' + s.name); }',
340
+ ' }',
341
+ '}',
342
+ '',
343
+ '// 3) frozen-file sha256 pins (tamper/drift evidence for files that must not change silently)',
344
+ 'for (const fz of CFG.frozenFiles || []) {',
345
+ ' if (!fz || !fz.path || !fz.sha256) continue;',
346
+ ' let actual = null;',
347
+ " try { actual = createHash('sha256').update(readFileSync(join(ROOT, fz.path))).digest('hex'); } catch { /* missing counts as changed */ }",
348
+ " if (actual !== fz.sha256) violations.push({ rule: 'frozen-file', path: fz.path, detail: actual ? 'sha256 changed (pinned ' + fz.sha256.slice(0, 12) + '…, actual ' + actual.slice(0, 12) + '…)' : 'file missing/unreadable' });",
349
+ '}',
350
+ '',
351
+ 'if (JSON_MODE) { console.log(JSON.stringify({ ok: violations.length === 0, violations })); }',
352
+ 'else {',
353
+ " if (violations.length === 0) console.log('guards: ✓ all deterministic guards pass');",
354
+ " else { console.log('guards: ✗ ' + violations.length + ' violation(s)'); for (const v of violations) console.log(' [' + v.rule + '] ' + v.path + ' — ' + v.detail); }",
355
+ '}',
356
+ 'process.exit(violations.length === 0 ? 0 : 1);',
357
+ '',
358
+ ].join('\n');
359
+ }
360
+
238
361
  export function scaffoldFromSpec(spec: SetupSpec, existing: ExistingScaffoldFiles): ScaffoldResult {
239
362
  const files: ScaffoldFile[] = [];
240
363
  if (spec.vision) files.push(proseFile(P_VISION, existing.vision, () => renderVisionDoc(spec.vision!)));
@@ -246,6 +369,13 @@ export function scaffoldFromSpec(spec: SetupSpec, existing: ExistingScaffoldFile
246
369
  const nextPS = buildProjectSkillsFromSpec(spec);
247
370
  files.push(structuredFile(P_PROJECT_SKILLS, existing.projectSkills, () => JSON.stringify(nextPS, null, 2) + '\n', (parsed) => mergeProjectSkills(parsed, (nextPS.roles ?? {}) as Record<string, string>, nextPS.extra ?? [])));
248
371
  if (spec.degradations) files.push(proseFile(P_DEGRADATIONS, existing.degradations ?? { exists: false }, renderDegradationsDoc));
372
+ if (spec.guards) {
373
+ const gOpts = typeof spec.guards === 'object' ? spec.guards : {};
374
+ // Both create-if-absent: the config is the owner's to edit after scaffolding; the runner is regenerable
375
+ // but never clobbered (a project may have patched it — treat like any owned file).
376
+ files.push(proseFile(P_GUARDS_CONFIG, existing.guardsConfig ?? { exists: false }, () => renderGuardsConfig(gOpts)));
377
+ files.push(proseFile(P_GUARDS_RUNNER, existing.guardsRunner ?? { exists: false }, renderGuardsRunner));
378
+ }
249
379
  return { files: [...files].sort((a, b) => byStr(a.path, b.path)) };
250
380
  }
251
381
 
@@ -292,5 +422,7 @@ export function readExistingForScaffold(repoRoot: string): ExistingScaffoldFiles
292
422
  projectSkills: readExistingFile(join(repoRoot, P_PROJECT_SKILLS)),
293
423
  testing: readExistingFile(join(repoRoot, P_TESTING)),
294
424
  degradations: readExistingFile(join(repoRoot, P_DEGRADATIONS)),
425
+ guardsConfig: readExistingFile(join(repoRoot, P_GUARDS_CONFIG)),
426
+ guardsRunner: readExistingFile(join(repoRoot, P_GUARDS_RUNNER)),
295
427
  };
296
428
  }
package/src/guard.ts CHANGED
@@ -52,6 +52,8 @@ export interface GuardFacts {
52
52
  readonly counts?: readonly { readonly label: string; readonly a: number; readonly b: number }[];
53
53
  /** for store-bloat-cap: current learned-store size vs its cap. */
54
54
  readonly store?: { readonly count: number; readonly cap: number };
55
+ /** for readme-first: per publishable package, is a version bump staged without a README change? */
56
+ readonly readmeFirst?: readonly { readonly name: string; readonly versionBumped: boolean; readonly readmeChanged: boolean }[];
55
57
  }
56
58
 
57
59
  /** The built-in rule set (works with no config). Ops are the mutating operations each rule guards. */
@@ -60,6 +62,7 @@ export const DEFAULT_RULES: readonly GuardRule[] = [
60
62
  { id: 'no-skill-drift', severity: 'hard', ops: ['publish', 'consolidate'], description: 'no unexpected byte-drift between shared skill copies' },
61
63
  { id: 'no-secrets', severity: 'hard', ops: ['teach', 'publish'], description: 'no private key or API token in lesson text or a published file' },
62
64
  { id: 'readme-consistency', severity: 'soft', ops: ['publish'], description: 'README counts agree (CJM header vs All Commands, etc.)' },
65
+ { id: 'readme-first', severity: 'soft', ops: ['publish'], description: 'a package with a staged version bump must update its own README.md in the same change (README-first)' },
63
66
  { id: 'store-bloat-cap', severity: 'soft', ops: ['teach', 'consolidate'], description: 'the learned store is within its size cap' },
64
67
  ];
65
68
 
@@ -120,6 +123,18 @@ const CHECKERS: Record<string, (f: GuardFacts, sev: GuardSeverity) => Violation[
120
123
  }
121
124
  return out;
122
125
  },
126
+ 'readme-first': (f, sev) => {
127
+ // The 2026-07-18 violation shape, mechanized: a package about to publish (version bumped in the diff)
128
+ // whose own README.md is untouched in the same diff. SOFT: some republishes legitimately need no doc
129
+ // change — the point is that skipping the README becomes a VISIBLE decision, not a silent lapse.
130
+ const out: Violation[] = [];
131
+ for (const p of f.readmeFirst ?? []) {
132
+ if (p && p.versionBumped === true && p.readmeChanged !== true) {
133
+ out.push({ rule: 'readme-first', severity: sev, detail: `${p.name}: version bumped but its README.md is untouched in this change — README-first: document the change (or consciously proceed; this warning is the record)` });
134
+ }
135
+ }
136
+ return out;
137
+ },
123
138
  'store-bloat-cap': (f, sev) => {
124
139
  const s = f.store;
125
140
  if (!s || !Number.isFinite(s.count) || !Number.isFinite(s.cap) || s.cap <= 0) return [];