@dzhechkov/harness-cli 0.8.2 → 0.8.6

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 CHANGED
@@ -9,7 +9,7 @@
9
9
  },
10
10
  {
11
11
  "path": "README.md",
12
- "sha256": "346b65ccfd61e78f8988622475fe0389248cad80f3347eb1cd83656ff6a7dc1c"
12
+ "sha256": "4a54061280f2c8a3173a07e43492a73a927fdb98dccf6c1acd933735e5b9aca5"
13
13
  },
14
14
  {
15
15
  "path": "dist/bin.d.ts",
@@ -45,23 +45,23 @@
45
45
  },
46
46
  {
47
47
  "path": "dist/cli.d.ts",
48
- "sha256": "5aeeec8ab84e3922ce0c7b7ea711fd1cdff67b68e1ded0b66e920a907e6ac267"
48
+ "sha256": "aac58bbd870ae960365e085570635030bd4ef454e2326ac3d782c8e9f8116941"
49
49
  },
50
50
  {
51
51
  "path": "dist/cli.d.ts.map",
52
- "sha256": "890a0f9a6650d531045820ecd5501c26e69178f3123d54c6ff2afae8fd339348"
52
+ "sha256": "d02abab0b734f19ac7e75d7a28b25ae43cbfc025911128c5848f8e81ba2bf01f"
53
53
  },
54
54
  {
55
55
  "path": "dist/cli.js",
56
- "sha256": "c4cd799f718714e3c1cf835e7f5f6e533e819dd7348e04a5134fe62fe09efdbb"
56
+ "sha256": "3ac75ba951cac7ae985b2b7407ffb2645ef36d98f44897d9094b00f4db20517f"
57
57
  },
58
58
  {
59
59
  "path": "dist/cli.js.map",
60
- "sha256": "af1ec69d7191440d499321ffb7f0ab3fc77749422b0cca233f8af2b3fb69315e"
60
+ "sha256": "c7c308fbc3d596905c25760ba8fa337656f42de06d0565f73ad7c230979a514d"
61
61
  },
62
62
  {
63
63
  "path": "dist/core-compat.d.ts",
64
- "sha256": "4ab523bc0a5f777fd66b8ed44c07a8b240a4cf2ce32da779a3916e6ddc53fa33"
64
+ "sha256": "8635dba8bfdc635d44467a47ff693ec9f85b14c1d9c6dfa6d00e6e9ff5d2f7f1"
65
65
  },
66
66
  {
67
67
  "path": "dist/core-compat.d.ts.map",
@@ -69,7 +69,7 @@
69
69
  },
70
70
  {
71
71
  "path": "dist/core-compat.js",
72
- "sha256": "0c33ad728e7b3b25211d0b16d2803b9ca35d0aae6d3a570b57aa9b8377fcde1f"
72
+ "sha256": "570a6e1d7536890735e771888050c490bc1a2a239b2a2514d87248604e3354f0"
73
73
  },
74
74
  {
75
75
  "path": "dist/core-compat.js.map",
@@ -77,19 +77,19 @@
77
77
  },
78
78
  {
79
79
  "path": "dist/index.d.ts",
80
- "sha256": "936596fd99f3767ca0119a02f07dfabf22b5b1c30e7007c63c3ff21cfced3836"
80
+ "sha256": "4d80bdb7f6742b2f356b07688cda569ea2aaab55f9300626244d15862da8a14f"
81
81
  },
82
82
  {
83
83
  "path": "dist/index.d.ts.map",
84
- "sha256": "9096b181a0164cd59061bddcf9f4bee59123c1ab776e7a12da8b9808bd5b7936"
84
+ "sha256": "3bc53d2587335beb17c5bd4ffb88987f61328b164519714d198a94f893bd3ea9"
85
85
  },
86
86
  {
87
87
  "path": "dist/index.js",
88
- "sha256": "8225f1de31f005c0d883fa9cf9b3a106f5e244ebbe5b4b3d2375c8127ba821f8"
88
+ "sha256": "e2f5b6cb4291b002ec74891f666ab11e916d10455ae1ca2a88d41207c944b771"
89
89
  },
90
90
  {
91
91
  "path": "dist/index.js.map",
92
- "sha256": "02b6b6f1b17a53d652a75555d185a20ea5d3e3110aa915ab228bf5521b0ce5fb"
92
+ "sha256": "116828d2b6d8698b6a66291b0676e97c7cf0208a3591e8047462c70065b94bc1"
93
93
  },
94
94
  {
95
95
  "path": "dist/install-spec.d.ts",
@@ -113,15 +113,15 @@
113
113
  },
114
114
  {
115
115
  "path": "dist/known-flags.d.ts.map",
116
- "sha256": "e142475e7ead4abd8773d6e83bc3a1ebd693ef2c5a3418e2ad896ab9711cff51"
116
+ "sha256": "310b51c71ec9f0f2089ece6ff4f33c2baeae78d462b3bbdd702255bcf73fb726"
117
117
  },
118
118
  {
119
119
  "path": "dist/known-flags.js",
120
- "sha256": "302026471c90d6f6e99374b3735933bdae6dbcd0fd405fdac0950f6a161b575d"
120
+ "sha256": "8c457fd3408799ce075bb07a6a77a885141cbf8cd9d47ae8c124ad60e64fd7f3"
121
121
  },
122
122
  {
123
123
  "path": "dist/known-flags.js.map",
124
- "sha256": "87e001a15b8203a3ccc6dcaf12b5a2270217972109f3e357238a02f232fbfe28"
124
+ "sha256": "e6a349e6587f8dfa134c597328d09ac09755c321c23d1bab98fd6e6a3adff86a"
125
125
  },
126
126
  {
127
127
  "path": "keys/README.md",
@@ -133,7 +133,7 @@
133
133
  },
134
134
  {
135
135
  "path": "package.json",
136
- "sha256": "f59817daa10ea4812557c68865af931abbf7f2370e113b861fc6de389817ce18"
136
+ "sha256": "2549a7e988b7a04071319dbbad8917d4231cd648720e70485a594ee9e3bd4aa1"
137
137
  },
138
138
  {
139
139
  "path": "src/bin.ts",
@@ -145,15 +145,15 @@
145
145
  },
146
146
  {
147
147
  "path": "src/cli.ts",
148
- "sha256": "3c0c9e454344058a7802ec54eb3aaaea0ec8fed72f6c10038ea2fdb6d2ed3a3a"
148
+ "sha256": "5ff3270b1b82fe28e15d09f37d8099468102abc926512303c7ef76e6c75ecf0d"
149
149
  },
150
150
  {
151
151
  "path": "src/core-compat.ts",
152
- "sha256": "b6e2b8d73bb492afec8717f39ecfe3638c62b2f1d2479a9be43c493adebf89d6"
152
+ "sha256": "432d622419ea6a6cbb704ff9a6a1e305f2a3f920f253d31712a0566ab457db53"
153
153
  },
154
154
  {
155
155
  "path": "src/index.ts",
156
- "sha256": "d4258f3b183d03047aa07399ae96bdb2b3af83f0005127a24a39f8932982bf78"
156
+ "sha256": "0401f29a7a76e73e6f6654c7f05ef547bbd7fc180a127202255337f31c21454a"
157
157
  },
158
158
  {
159
159
  "path": "src/install-spec.ts",
@@ -161,9 +161,9 @@
161
161
  },
162
162
  {
163
163
  "path": "src/known-flags.ts",
164
- "sha256": "4a3f93b484a5a0d89baefdb68aa85b92d5c630e48774e6ee302078fce065e60f"
164
+ "sha256": "2956fd1c4720c3ccdd5b4ffd4edfa8c19ad034b5ff7fb418c5befb9cb3829644"
165
165
  }
166
166
  ]
167
167
  },
168
- "signature": "sTor/7zBbQXG7bKsBxXHAR9Aj3d/cfidAZ9XMKm/aOhPfGeN9NjsGMFuUQ32+1x5WTgxPSJMUF+iu6UjymuoBA=="
168
+ "signature": "Wy4woPmqLQEeqD66Hc6eyZZDUc9jyxDeSA9pKbsIZyMLu+d0VJELsfj4hOiC5bQXKRFZqyOACrHd/UBB2ugVDA=="
169
169
  }
package/README.md CHANGED
@@ -266,7 +266,7 @@ you know exactly which file is at fault, and you know whose defect it is.
266
266
 
267
267
  ## User Journey — from install to mastery
268
268
 
269
- All 79 commands (MEASURED — reproducer: `grep -c "^ case '" packages/@dzhechkov/harness-cli/src/cli.ts`, the dispatch cases which is also what the bounded `## All Commands` list enumerates) mapped to a real workflow:
269
+ All 83 commands (MEASURED — reproducer: `node --input-type=module -e "import('./dist/index.js').then(m=>console.log(m.DZ_COMMANDS.length))"` from this package; rendered help documents 80 unique top-level names, pinned by `test/command-count.test.ts`) mapped to a real workflow:
270
270
 
271
271
  ```
272
272
  DISCOVER → INSTALL → USE → CREATE → MAINTAIN → SHARE
@@ -425,6 +425,7 @@ dz roam --apply # sync agent state across machin
425
425
 
426
426
  # Is the self-learning loop actually paying off?
427
427
  dz compounding # readiness + payoff report (INSUFFICIENT_DATA is a real answer)
428
+ dz deadwood --weeks 8 # advisory deprecation candidates; shallow history → INSUFFICIENT_DATA
428
429
  dz epoch-replay --mock --n 24 --effect 0.9 # $0 dry run of the cold-vs-warm verdict math
429
430
  dz epoch-replay --emit # ready? emit the real cold-vs-warm work order
430
431
  ```
@@ -672,6 +673,12 @@ The prompt queries that make replay possible stay on your machine: `.dz/recall-u
672
673
  git-ignored, entries are truncated at 200 chars and flagged when truncated (a prefix is not a prompt,
673
674
  so flagged rows never count as replayable).
674
675
 
676
+ `dz deadwood --weeks 8` applies the same no-data discipline to harness maintenance: until command
677
+ history spans the requested window and sample floor, it prints `VERDICT: INSUFFICIENT_DATA`. Once
678
+ ready, it lists only human-review deprecation candidates, reports safety-net exclusions with their
679
+ written reasons, and labels skills `no-instrumentation` because no skill invocation signal exists.
680
+ It never deletes, disables, renames, or deprecates a command, skill, or rule.
681
+
675
682
  #### Is the evidence itself intact? — the event chain
676
683
 
677
684
  Every number above is computed from two JSONL files, and a compaction bug already inflated one of
@@ -1367,7 +1374,7 @@ Get the whole set with `dz init --target claude-code --preset meta`, or pick one
1367
1374
  | [@dzhechkov/p-replicator](https://www.npmjs.com/package/@dzhechkov/p-replicator) | `npx @dzhechkov/p-replicator init` | AI product development (/replicate pipeline) |
1368
1375
  | [@dzhechkov/health-advisor](https://www.npmjs.com/package/@dzhechkov/health-advisor) | `npx @dzhechkov/health-advisor init` | Medical AI (25 skills) |
1369
1376
  | [@dzhechkov/skills-bto](https://www.npmjs.com/package/@dzhechkov/skills-bto) | `npx @dzhechkov/skills-bto init` | BTO benchmarking (Build-Test-Optimize) |
1370
- | [@dzhechkov/skills-feature-adr](https://www.npmjs.com/package/@dzhechkov/skills-feature-adr) | `npx @dzhechkov/skills-feature-adr init` | 11-step feature pipeline |
1377
+ | [@dzhechkov/skills-feature-adr](https://www.npmjs.com/package/@dzhechkov/skills-feature-adr) | `npx @dzhechkov/skills-feature-adr init` | 11-step feature pipeline with two-axis `primary` + per-family `budget` routing (`normal`/`eco`/`hybrid`); explicit stage models keep precedence |
1371
1378
  | [@dzhechkov/skills-edu-site](https://www.npmjs.com/package/@dzhechkov/skills-edu-site) | `npx @dzhechkov/skills-edu-site init` | Gamified edu site generator |
1372
1379
  | [@dzhechkov/skills-transcript-site](https://www.npmjs.com/package/@dzhechkov/skills-transcript-site) | `npx @dzhechkov/skills-transcript-site init` | Transcript → interactive site |
1373
1380
  | [@dzhechkov/skills-analyst-manual](https://www.npmjs.com/package/@dzhechkov/skills-analyst-manual) | `npx @dzhechkov/skills-analyst-manual init` | 3-phase analyst composite |
@@ -1612,13 +1619,14 @@ run pkg-audit-1; sources: trace, ledger
1612
1619
  The gate passed, the inventory (52 directories = 49 canonical + 2 private + 1 non-package) was
1613
1620
  cross-checked deterministically against the filesystem, and the stale test was re-pinned to it.
1614
1621
 
1615
- **And the run surfaced a real defect kept here on purpose.** Read the trace again: the registry
1616
- names six chunks, but only `chunk-1..3` ever dispatched — `maxFanout: 3` **silently truncated** the
1617
- other three lanes, and the run stayed green only because the synthesize agent noticed the gap and
1618
- audited the missing chunks with its own tools. That is exactly what the trace is for: it shows what
1619
- your loop *did*, not what the plan promised. (Filed in this repo's backlog: over-registry items must
1620
- become a named failure or a loud trace event, never a silent drop. Until then: keep
1621
- `fanouts[].registry.length maxFanout`, and read the trace after the first run of any new plan.)
1622
+ **And this recorded run is now the regression proof for a fixed defect.** Read the trace again: the
1623
+ registry names six chunks, but only `chunk-1..3` dispatched — the old renderer treated
1624
+ `maxFanout: 3` as a prefix cap, and the run survived only because synthesize audited the missing
1625
+ chunks itself. Current plans treat `maxFanout` as concurrency: all six dispatch through a three-wide
1626
+ window. Deliberate sampling is explicit (`overflow: "truncate"` plus a non-blank
1627
+ `truncateReason`) and emits a banner, a `[fanout-truncated]` stderr line, and a trace receipt. The
1628
+ reader now grades this historical trace `region-dispatch-completeness:fan = FAIL` and names
1629
+ `chunk-4..6`; a legacy projection without registry evidence is `INCONCLUSIVE`, never a guessed pass.
1622
1630
 
1623
1631
  #### How to phrase the ASK — Claude Code vs Codex
1624
1632
 
@@ -1832,9 +1840,9 @@ runs a command that MEASURES the declared artifacts itself. It refuses a null re
1832
1840
  never recorded as done), an absent or partially-present artifact set, and a stage that declares nothing
1833
1841
  to witness — so a stage that did not happen can no longer be recorded, which the old mechanism allowed.
1834
1842
 
1835
- ## All Commands (79)
1843
+ ## All Commands (83)
1836
1844
 
1837
- *(79 MEASURED — reproducer: `grep -c "^ case '" packages/@dzhechkov/harness-cli/src/cli.ts`, the dispatch cases which is also what the bounded `## All Commands` list enumerates.)*
1845
+ *(83 MEASURED — reproducer: `node --input-type=module -e "import('./dist/index.js').then(m=>console.log(m.DZ_COMMANDS.length))"`; `dz --help` exposes 80 unique top-level names, pinned by `test/command-count.test.ts`.)*
1838
1846
 
1839
1847
  ```
1840
1848
  dz setup --target <name> [--preset <name>] [--select id,id,...] [--skills-dir <dir>] [--memory agentdb] [--no-memory] [--no-hooks] [--install-driver] [--force]
@@ -1858,6 +1866,7 @@ dz statusline [--json] [--install] # compact Claude Code statusline: li
1858
1866
  dz usage [--json] [--project <dir>] | --calibrate --session <pct> --weekly <pct> [--model fable=<pct>] # ESTIMATE Claude usage from fixed reset windows; optional per-model weekly binding; exit 0 ALWAYS
1859
1867
  --by-stage [--run <id> | --slug <s>] [--epsilon <0..1>] [--write <file.jsonl>] [--json] # per-stage cost ledger for ONE feature-adr run + reconciliation invariant (BALANCED | DEFECT | INSUFFICIENT_DATA)
1860
1868
  dz claim-check [paths...] [--json] [--fail-on high|medium|none] [--project <dir>] # enforce the Integrity Rule: flag untagged/overstated accuracy claims; default scan = READMEs + features' 08_qe_report.md; exit 1 only at/above --fail-on (default high)
1869
+ dz lint [paths...] [--json] [--config <file>] [--registry <file>] [--project <dir>] # advisory EN/RU prose-style lint; findings exit 0, incomplete input/policy exits 1, usage exits 2
1861
1870
  dz brain list [--json] # the durable cross-project knowledge brain
1862
1871
  dz brain query "<q>" [--source <slug>] [--limit <N>] [--any] [--rerank] [--json] # cross-source recall (--any = OR match; --rerank reorders on-point first). Auto-broadens: if strict all-terms match yields 0 hits, it retries once as OR and labels the result "broadened" (text note + broadened:true in --json) instead of returning empty. Explicit --any is OR from the start (never labeled broadened).
1863
1872
  dz brain add [--source <slug>] [--project <dir>] [--from-slice <f>|--from-pack <p>|--from-kus <f> --slug <s> --kind <k> --license <spdx> [--override]] [--json] # grow the brain
@@ -1891,11 +1900,13 @@ dz routing [--stage <s>] [--json] # inspect the learned cost-optimal routing s
1891
1900
  dz bto-optimize --split|--plan|--select|--scope-check|--diff [--json] # deterministic engine behind /bto-optimize: hold-out split + hard-capped budget + no-regress-on-holdout winner selection (defeats judge-gaming); prose-only, diff-confirmed, never auto-writes
1892
1901
  dz discrimination-check --test <f[,f]> [--base <ref>] [--name <filter>] [--runner <cmd>] [--timeout <ms>] [--json] # §42 test-discrimination gate for feature-adr Step-8: run the ADR's property test in an isolated git worktree at pre-feature base — it MUST go red without the fix. SEVEN verdicts, each gated on EXECUTION evidence: DISCRIMINATES · DISCRIMINATES_VIA_ERROR · NON_DISCRIMINATING (false green) · TEST_FILE_ABSENT · LOAD_ERROR_AT_BOTH_REVS · FAILS_AT_TIP · CANNOT_ISOLATE (+ typed reason). Advisory, never auto-aborts
1893
1902
  dz amendment-check --slug <slug> | --feature-dir <dir> | --all [--json] (every AM-N amendment row must resolve to a test found INSIDE the file the row names; the PLAN is authoritative when it carries rows, and an ideation amendment the plan drops is a failure; --all is a census that always exits 0; exit 0 pass/skip, 1 fail, 3 NOT-ESTABLISHED — a section that parsed ZERO rows is never a pass)
1903
+ dz contract-check --slug <s> [--json] (read-only retrospective feature contract gate: canonical AC-N + ADR Confirmation → CC-N; every item needs one artifact-anchored met|unmet|not-testable verdict; A/B with unmet is refused; exit 0 pass / 1 readable violation / 2 invalid invocation or unreadable/not-established artifacts)
1894
1904
  dz feature-adr-record --kind ledger|training-pair --stage <s> [--slug <s>] [--row|--pair <json>] [--mark <n>] [--once] [--json] (the witnessed writer: payload as an ARGUMENT never as shell, refused before any write, timestamp stamped before serialising, append verified by re-reading the tail; exit 0 written|duplicate|skipped, 2 refused, 3 not-verified, never blocking)
1895
1905
  dz mutation-gate [--package <dir>] [--registry <file>] [--test-cmd "<cmd>"] [--only <id[,id]>] [--timeout <ms>] [--rebaseline per-entry|final] [--keep-scratch] [--json] # the mutation gate: for each NAMED protection in a declarative registry, copy the package to a scratch dir (shadow-repo layout, node_modules symlinked, git-initialized), verify the baseline is green, apply the entry's exact {find, replace} mutation, run the suite, REQUIRE red, restore — and require the red to be ATTRIBUTABLE to the protection: a mutated file that no longer parses is MUTATION_UNPARSEABLE, a failing count far above the entry's bound (maxFailing, default from observed) is OVER_FAILING, and a restored tree that does not reproduce green makes the entry INCONCLUSIVE (flaky suite). A mutation that does not apply, a green suite, or an inconclusive run is a FAILURE — never a skip. exit 0 all proven / 1 gate failed / 2 setup error
1896
1906
  dz delivery-check --slug <slug> [--context-only] [--findings <f.json>] [--strict] [--author <model>] [--json] # portable Step-10 Delivery Gate: the `manual` form that travels to every shell target — prints the 4-plane review brief (regressions ‖ security ‖ code-quality ‖ product-honesty) + artifact probes; --findings classifies a fed-back review into a fail-closed ready|blocked hand-off (only cross-validated BLOCKER/HIGH count) and writes features/<slug>/10_delivery_review.md; --strict exits 1 on blocked
1897
1907
  dz skills-verify [--dir <project>] [--expect a,b] [--static] [--strict] [--timeout <s>] [--json] # does .claude/skills/ actually REGISTER? --static = instant layout scan (CI-safe, no session): flags dirs that can never register; default also starts a real session and reads the authoritative system/init listing. exit 0 pass / 1 fail / 2 inconclusive — an unobservable registration is NEVER a pass
1898
1908
  dz compounding [--project <dir>] [--json] # honest learning-loop payoff report: pool write-only ratio, guard repeat-violation trajectory (rate per audit-half), cold-vs-warm replay readiness over unique untruncated prompt events, apply-leg staleness, and EVENT-CHAIN health of the two evidence logs (verified / defects / uncovered pre-chain prefix) — a gate without enough data says INSUFFICIENT_DATA, never a verdict
1909
+ dz deadwood [--weeks <n>] [--json] # advisory zero-usage report for commands and guard-rule firings; safety-net exclusions carry written reasons, skills without an invocation signal are never candidates, and shallow history says INSUFFICIENT_DATA. Human deprecation review only — never deletes or modifies harness surface
1899
1910
  dz epoch-replay --mock [--n <N>] [--effect <-1..1>] [--tie-rate <0..1>] [--seed <N>] [--slice <name>] [--margin <0..0.5>] [--json] # $0 synthetic run through the REAL verdict math; labelled SYNTHETIC, same seed = byte-identical
1900
1911
  dz epoch-replay --emit [--project <dir>] [--limit <N>] [--seed <N>] [--margin <0..0.5>] [--out <file>] [--json] # cold-vs-warm work order: replayable instances + PRE-REGISTERED blind A/B assignment + the PRE-REGISTERED non-superiority margin + a sha256 integrity digest + emittedAt/corpus fingerprint (raw prompts — defaults into the git-ignored .dz/epoch-replay/)
1901
1912
  dz epoch-replay --judge <filled-work-order.json> [--out <file>] [--json] # blind judge prompts from the filled plans — the file carries {id, prompt} ONLY (no assignment, no arm names); refuses an order whose digest or seed-derived assignment does not check out; half-pairs skipped WITH A REASON, on stdout
@@ -1905,6 +1916,7 @@ dz recap [--day|--week|--month] [--at <ISO date>] [--refresh-publish
1905
1916
  dz cadence [--window day|week|month|quarter|halfyear|year] [--json] # the RHYTHM view of what shipped: graded-shipment counts bucketed by ISO week, npm-publish cadence (reads `dz recap`'s publish-times cache — run `dz recap --refresh-publishes` to warm it), guard repeat DECAY on the FIXED rule set (a rule joins only with pre-window history, so a newborn rule's zero is youth, not virtue — the no-stubs false-zero class excluded by construction), and recall reuse per week. A window deeper than 2× the record is REFUSED with the measured depth and the largest honest window named (a cadence from under two full windows is scale forgery). Sibling of `dz recap`: recap is the narrative what-was-done report over one window; cadence is the week-by-week rhythm across the window. exit 0 / 2 refused-window / 1 usage
1906
1917
  dz profile init | show | set <field> <value> | sync [--target claude] # WHO is being talked to. Per-USER store ~/.dz/profile.json (0600, never under a project root), delivered as a marked block in ~/.claude/CLAUDE.md so it loads in EVERY project on the machine, dz installed or not. Two axes: default register (pro | pro-lite | plain; RU aliases профи / профи лайт / просто) and named domains that move it — `deep` = full pro no scaffolding, `weak` = one plain sentence EVERY time unprompted, MANDATORY there. Three fixed rules ride along and the register cannot override them: an explanation is SELF-CONTAINED (every term glossed at first use in THIS passage), the register governs dialogue and owner-facing surfaces but NEVER ADRs / commits / QE reports / npm READMEs, and it changes FORM not FACTS. `show` always prints the store path and the profile's age; an unknown register value is REFUSED naming the accepted set, never silently defaulted; a hand-edited block is reported as drift and `sync` repairs it with a timestamped backup, foreign content preserved byte-for-byte. Redacted from training-pair capture (.dz/fa-training/ records the full prompt and is deliberately not gitignored)
1907
1918
  dz qe-rounds (--slug <feature> | --feature-dir <abs>) [--ceiling <n>] [--project <dir>] [--json] # how many Step-8 review rounds has this feature ALREADY had? The rule "Max iterations: 3" lived only as a sentence in a prose module, so every restart of the agent forgot it — MEASURED, one real slug reached 38 graded rounds. Reads what `dz qe-bridge` already wrote (signoff-<runId>.json / failed-*.json under features/<slug>/.fa-state/qe-bridge) and writes NOTHING itself, so it answers for runs already past. A round is a runId, not a file; an attempt with no verdict is counted separately and never merged; ONE directory, never a union across checkouts. FAILS CLOSED: if any record cannot be counted the verdict is NOT ESTABLISHED, never a smaller number presented as the answer. exit 0 under the ceiling / 1 at-or-over — the owner decides, this never judges whether the rounds were warranted / 2 NOT ESTABLISHED, which is never "zero rounds"
1919
+ dz restart-advisor --slug <feature> [--threshold C|D] [--rounds <n>] [--json] # manual, read-only advice over this feature's QE history. Defaults: threshold D, rounds 2. Reads only features/<slug>/.fa-state/checkpoints.jsonl and .dz/fa-training/<slug>/qe.jsonl; when both carry QE rounds they must normalize identically and are never unioned. RESTART_CODE_STAGE is a recommendation for the operator, not an action: autoAction is always false, and every firing result includes an explicit decision-log line. exit 0 established recommendation/no-recommendation / 2 invalid or not established / 1 unexpected runtime failure
1908
1920
  dz provenance-check --manifest <sources.json> [--project <dir>] [--json] # nothing goes out citing a source that may not leave this machine. Checks PROVENANCE, not words: every claim in a draft names its source, and a source is cleared only when it is a KNOWN kind that resolves safely. Repo paths are classified by `git -C <root> check-ignore` over the RESOLVED path — so a symlink into an ignored directory is refused, not cleared (MEASURED: git classifies the string and never dereferences), and the verdict does not change with your working directory. Store records need naming in the git-TRACKED `provenance-public.json`, so declaring one public is a reviewable commit rather than a field inside an ignored store. Anything else is refused: an undeclared kind is never inferred from the path's shape. exit 0 allowed / 1 blocked / 3 NOT ESTABLISHED — an empty manifest, an unreadable one, or an oracle that did not run is never a pass. **What it cannot do, said on the passing path too:** it proves what was CITED. It cannot see a paraphrase with no citation, nor confidential text pasted by hand into an allowed file. Read the draft.
1909
1921
  dz name-check [--command <n>] [--module <basename>] [--export <a,b>] [--project <dir>] [--json] # is this name free, BEFORE a line of code? Twice in one day a collision broke the build outright — `dz retro` was already a command, `decideProvenance` already an export — and both were answerable in advance. Scans workspace SOURCE and never `dist`, because a stale build answers 'free' confidently (MEASURED: half an hour of convincing live runs against a previous build while tsc was red). Checks a command name against the dispatcher AND the help block, a module basename against every package's src/, and exported identifiers against every declaration — naming the DECLARING file, not the barrel. exit 0 all free / 1 at least one taken / 2 nothing asked or the scan read nothing — an empty sweep is never a clean bill. **Honest limit, printed on the passing path:** it reads declarations, so a re-export under a different name stays the build's job.
1910
1922
  dz tg-post --draft <file.html> [--manifest <sources.json>] [--channel <@name>] [--send --yes] [--night] [--max-per-day <n>] [--json] # the sender for an APPROVED genai-tweets-channel post, held to the channel's own accepted ADRs: HTML mode only (never MarkdownV2 — 18 escapes against 3, one miss is a 400); link preview OFF by default (x.com previews in Telegram are broken since 2022); the 00:00-06:00 MSK quiet window refuses without an explicit --night. THE DEFAULT RUN IS A DRY-RUN: tag balance and allowed-tag checks, bare &/< detection, the 4096 visible-character limit with the overshoot counted — every issue named in one pass, not just the first. The provenance gate runs IN-PROCESS over --manifest, and a draft with no manifest is refused as unchecked when a send is asked. A real send needs --send AND --yes — ADR-004's standing order that publishing stays manual, stated out loud each time. Three autopublish guards run FAIL-CLOSED, in a fixed order: the **stop-cord** (`.dz/tg-post/HALT` exists ⇒ nothing publishes, checked FIRST so no bug in a later gate can route around it), **dedup** by the sha256 of the post's VISIBLE text (what the reader sees, not the bytes — a whitespace-different draft is the same post), and the **daily limit** (10 by default, `--max-per-day <n>` to change it), counted over the trailing 24h. The journal is two-phase: a `pending` row is written BEFORE the network call and a `sent` row after Telegram accepts, so a crash between the two is caught by dedup on the next run instead of double-publishing; only `sent` rows eat the daily ceiling. An UNREADABLE journal REFUSES — an unreadable counter does not prove the ceiling is unreached. The provenance gate also clears `kind: url`: a well-formed http(s) URL is public by construction so there is nothing local to protect, while a `file://`, a bare path or a non-URL is refused, never inferred. The bot token (TELEGRAM_BOT_TOKEN or telegram.tokenFile) is never printed, and the gates run BEFORE any secret is read. exit 0 sent or clean dry-run / 1 refused / 2 usage
@@ -2283,6 +2295,31 @@ Scan history deliberately by naming it: `dz claim-check features/my-feature/03_a
2283
2295
  The unsolved prerequisite for ever widening the default: the engine cannot tell a **quotation** of a
2284
2296
  forbidden claim from an **assertion** of one.
2285
2297
 
2298
+ ### Prose style lint (`dz lint`)
2299
+
2300
+ `dz lint` covers the lexical layer that claim-check and semantic voice review do not: dense clusters
2301
+ of registered stock wording in English or Russian, walls of short bullet items, and registered
2302
+ three-adjective stacks. Lexical density is `100 × markerCount / max(visibleWords, wordFloor)` within
2303
+ one paragraph; a single legitimate use such as `robust parser` stays below the two-distinct-marker
2304
+ floor. Under the default `4`/`2`/`25` policy, that floor decides paragraphs through 50 words and
2305
+ density rejects diffuse clusters from 51 words onward. Fenced/inline code, link targets, frontmatter,
2306
+ HTML tags, blockquotes, and explicitly labelled bad examples are excluded.
2307
+
2308
+ ```bash
2309
+ dz lint # root/package READMEs, sitedoc Markdown/MDX, recognized feature courses
2310
+ dz lint README.md docs/page.mdx # explicit deterministic scope
2311
+ dz lint --json # dz-slop-lint/1 envelope for CI
2312
+ dz lint --config policy.json --registry markers.json
2313
+ ```
2314
+
2315
+ Findings are advisory and exit `0`; a valid empty default/directory scope is a clean no-op. Malformed
2316
+ UTF-8, missing/unreadable policy data, unsupported explicit inputs, or a supported input file with no
2317
+ analyzable prose exit `1`; valued-flag usage errors exit `2`.
2318
+ This command does not call or change `claim-check`, `guard`, or `publish`. It catches literal wording
2319
+ and simple structure, not whether a voice sounds natural in context; semantic voice review remains a
2320
+ separate judgement layer. The bundled registry is intentionally small, versioned, bilingual, and
2321
+ repository-authored; `--registry` and `--config` replace it only after complete validation.
2322
+
2286
2323
  #### What is NOT a claim
2287
2324
 
2288
2325
  Four things are deliberately out of reach, so the gate flags authors who were dishonest rather than
@@ -2489,10 +2526,14 @@ dz routing recommend # per-stage args.models suggestion, printed
2489
2526
  # attributed run-level — an inference, and it says so), and every skipped
2490
2527
  # record with WHY. qe is FORCED to the cross-family of the code pick —
2491
2528
  # a same-family qe recommendation is unrepresentable, not filtered.
2529
+ # A `store:` line always says current / STALE / UNFED and names
2530
+ # the remedy; JSON carries basis.freshness + basis.unfed.
2492
2531
  dz routing recommend --apply # feed the samples into .dz/routing-outcomes.json (the store the
2493
2532
  # `auto-cost` plan spec reads) — idempotent by runId: a second apply
2494
2533
  # feeds 0 and names the skipped runs. Insufficient data is SAID
2495
2534
  # (cold-start pick + escalation chain), never dressed as a bar-met pick.
2535
+ # `dz guard --op publish` warns SOFT as routing-store-stale when
2536
+ # harvested runIds are still missing from that store.
2496
2537
  # (status, effort, goal, uses…) is preserved byte-for-byte,
2497
2538
  # the previous text lands in .dz/backlog/edits.jsonl, and the
2498
2539
  # dedup vector is re-embedded in the same bounded form.
@@ -3462,7 +3503,7 @@ invariants: HARD rules **block** the operation, SOFT rules warn. Zero config nee
3462
3503
  cover the known rakes; `.dz/guard.json` (via `dz guard --init`) exists only if you want to tune a severity
3463
3504
  or disable a rule.
3464
3505
  ```bash
3465
- dz guard check --op publish # no-workspace-star · no-skill-drift · no-secrets · readme-consistency · readme-first · skills-registrable · lockfile-in-sync · no-stubs · review-round · licence-hold
3506
+ dz guard check --op publish # no-workspace-star · no-skill-drift · no-secrets · readme-consistency · readme-first · skills-registrable · lockfile-in-sync · marketplace-parity · no-stubs · review-round · licence-hold
3466
3507
  dz guard check --op teach --text "the fix: export sk-abc..." # → BLOCK (exit 1): looks like a credential
3467
3508
  dz guard log # append-only audit: every verdict + every forced override
3468
3509
  ```
@@ -3497,6 +3538,13 @@ zero specifiers, and then report every real dependency as "not recorded". The ru
3497
3538
  `.dz/guard.json` cannot promote it to HARD, since a parser designed to admit "I may not understand this
3498
3539
  file" must never be able to block a publish.
3499
3540
 
3541
+ The SOFT, publish-only `marketplace-parity` rule regenerates `.claude-plugin/plugin.json` and
3542
+ `.claude-plugin/marketplace.json` from the live registry in an isolated temp directory and compares
3543
+ their composition with the published showcase. It deliberately excludes `version`, which remains an
3544
+ operator field, and never blocks publication; composition drift warns with the exact repair command
3545
+ `dz plugin --version <published>`. A repository with no complete `.claude-plugin/` showcase is out of
3546
+ scope: the rule records an informational skip reason and emits no violation.
3547
+
3500
3548
  **`review-round` (HARD, publish)** — a package that bumps its version AND changes source must bring a
3501
3549
  GRADED `features/*/08_qe_report.md` in the same change. The gate had eleven rules and not one asked
3502
3550
  whether anyone but the author had read the code; the cost is on the record (health-advisor slice H:
@@ -4015,7 +4063,7 @@ The self-learning loop is only compounding if every run reads and writes the **s
4015
4063
  dz vector harmonize --apply --project <brain> # optional: collapse near-dup paraphrases
4016
4064
  ```
4017
4065
 
4018
- - **Route each stage to an optimal model — `args.models`.** The `feature-adr` workflow takes an optional per-stage map (`{router, requirements, research, adr, ideation, ddd, architecture, plan, code, qe, fleet}`); each value a **spec** — Claude `fable|opus|sonnet|haiku` or Codex `codex[:id[:reasoning]]` (ids incl. `gpt-5.5`, `gpt-5.6`) — backed by a proven default table. The **load-bearing default**: when `models.qe` is unset, QE auto-routes to the *other family than the coder* (a model that writes code must not also self-QE — cross-model review catches what self-review misses), falling back to a Claude reviewer if Codex is absent (never blocks). `args.models[stage]` wins over the legacy `planner`/`coder`/`qeReviewer`/`codexModel` knobs; omitting it is byte-identical to today; the result reports `modelsUsed`. Adding a new Codex id is a data-only allowlist edit (gpt-5.6-ready).
4066
+ - **Route by primary family, budget, or stage.** The `feature-adr` workflow accepts `primary=claude|codex`, per-family `budget=normal|eco|hybrid`, and an optional per-stage `models` map over `{router, requirements, research, adr, ideation, ddd, architecture, plan, code, qe, fleet}`. Each stage value is a **spec** — Claude `fable|opus|sonnet|haiku` or Codex `codex[:id[:reasoning]]` (ids incl. `gpt-5.5`, `gpt-5.6`). The **load-bearing default** routes unset QE to the other family than the actual coder; Codex QE uses `sol:high` under normal/hybrid and `terra:medium` under eco, with a loud Claude fallback if the selected id is unavailable. Precedence is `models[stage]` > legacy `planner`/`coder`/`qeReviewer`/`codexModel` knobs > primary/budget defaults > session-inherited. Omitting every routing knob keeps the inherited session path; the result reports `modelsUsed`.
4019
4067
  ```js
4020
4068
  // Claude codes, Codex independently QEs (cross-model by construction):
4021
4069
  Workflow({ scriptPath: '.claude/workflows/feature-adr.js',
@@ -4212,9 +4260,74 @@ npx @dzhechkov/p-replicator init
4212
4260
 
4213
4261
  ---
4214
4262
 
4263
+ ### Retrospective contract checklist — `dz contract-check`
4264
+
4265
+ Audit a completed feature without starting or modifying the feature-ADR workflow:
4266
+
4267
+ ```bash
4268
+ dz contract-check --slug my-feature
4269
+ dz contract-check --slug my-feature --json
4270
+ ```
4271
+
4272
+ The read-only adapter discovers the repository root, then reads only
4273
+ `features/<slug>/01_requirements.md`, direct `features/<slug>/03_adr/*.md`, the QE report, and the
4274
+ repository-relative evidence paths declared by that report. It writes no feature artifact, command
4275
+ usage ledger, or checkpoint. Slug traversal, absolute/traversing evidence, symlink escape, and QE
4276
+ self-citation are refused.
4277
+
4278
+ The source vocabulary is exact: `## Acceptance criteria`, one-line `AC-N: ...`, `## Confirmation`,
4279
+ one-line `- Load-bearing property: ...`, and one-line `- Required automated check: ...`. The QE report
4280
+ keeps its holistic Grade and adds one `## Contract checklist` fenced JSON payload:
4281
+
4282
+ ```json
4283
+ {
4284
+ "schema": "contract-checklist-verdict/1",
4285
+ "overallGrade": "A",
4286
+ "items": [{
4287
+ "id": "CC-1",
4288
+ "verdict": "met",
4289
+ "evidence": {
4290
+ "artifact": "packages/example/test/example.test.ts",
4291
+ "quote": "rejects the invalid example",
4292
+ "observedOutcome": "pass"
4293
+ }
4294
+ }]
4295
+ }
4296
+ ```
4297
+
4298
+ Human output prints every `CC-N`, its verdict/evidence disposition, aggregate
4299
+ contract/verdict/met/unmet/not-testable/invalid-evidence counts, the holistic grade, and one final
4300
+ `contract-check: PASS|FAIL|NOT-ESTABLISHED` line. `--json` emits exactly one document carrying the
4301
+ contract, report, per-item decisions, diagnostics, counts, grade, outcome, and exit code. Exit `0`
4302
+ means every established item is `met`; `1` means readable contract/verdict/evidence violates policy;
4303
+ `2` means invalid invocation or required artifacts/verdict block are unreadable or not established.
4304
+
4305
+ The command checks structure and declared artifact anchors; it does not judge semantic sufficiency,
4306
+ run tests, replace the ADR Confirmation test, or replace independent cross-family QE.
4307
+
4308
+ The exact-vocabulary contract is fail-closed by design (ADR-001 D4 rejected a loose/heuristic
4309
+ parser), and the real-world consequence is narrow coverage today: MEASURED against the three
4310
+ features shipped the same night this command was built, it verified cleanly only against its own
4311
+ requirements (21/21 items, grade C) and refused both `dz-deadwood` (a Given/When/Then acceptance
4312
+ table, not the canonical `AC-N:` list) and `slop-lint` (a wrapped multi-line Confirmation field) with
4313
+ a named, structural diagnostic rather than a false pass. Adopting it on an existing feature means
4314
+ conforming that feature's `01_requirements.md`/ADR to the exact vocabulary above, or accepting the
4315
+ refusal as the honest answer.
4316
+
4317
+ ---
4318
+
4215
4319
  ## Status
4216
4320
 
4217
- `v0.8.1` — **`dz profile` (the 79th command), hardened by four cross-family review rounds until one came back clean.** Say once who you
4321
+ `v0.8.5` — **`dz restart-advisor`, the 83rd inventory command (80 documented top-level
4322
+ help names).** It returns an explicit `restart-advisor/1` recommendation from confined QE-history
4323
+ reads, never restarts or mutates the live pipeline, and reports not-established evidence with exit 2.
4324
+ Publication and pipeline auto-integration remain outside this implementation step.
4325
+
4326
+ `v0.8.3` — **`dz contract-check`, the 82nd inventory command (79 documented top-level help
4327
+ names), alongside `dz lint`.** Contract checking is read-only and structural; ADR Confirmation and
4328
+ independent QE remain separate. Publication remains outside this implementation step.
4329
+
4330
+ `v0.8.2` — **`dz profile` (the 79th command), hardened by four cross-family review rounds until one came back clean.** Say once who you
4218
4331
  are — register, language, deep and weak domains — and every Claude session on the machine loads it from a marked block in
4219
4332
  `~/.claude/CLAUDE.md`; the store lives at `~/.dz/profile.json` (0600, never inside a project, redacted from training-pair capture).
4220
4333
  The review ladder did what it exists to do, each round finding a hole in the previous round's fix: a marker literal could enter the
package/dist/cli.d.ts CHANGED
@@ -5,6 +5,8 @@
5
5
  */
6
6
  import { spawn, type ChildProcess } from 'node:child_process';
7
7
  import { runSyncCodexHooks, type CodexHooksSyncReport, type BridgeFamily } from '@dzhechkov/harness-core';
8
+ /** Literal command inventory, pinned against the main dispatch switch by a layer-1 test. */
9
+ export declare const DZ_COMMANDS: readonly string[];
8
10
  /** Output sink + working directory — injectable so the CLI is testable. */
9
11
  export interface CliIo {
10
12
  readonly cwd?: string;
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}