Skip to content

Releases

dsh-drill v0.8.6 — proof gates read the latest run

Choose a tag to compare

@EnRaiha EnRaiha released this 25 Sep 17:30

Found live on a real drill, not by reading the code.

A passing fix run was recorded at 15:57, the fix was then corrected, and the corrected run at 16:19 failed — expected the CRDT admission failure's SQLSTATE, got: 23514 where the test wants 42501. drill_gate still reported pass:green, and the turn-stopping reminder listed only hygiene and review as open.

Why. red, green and hygiene asked whether any run of their kind had ever passed:

const green = entries.filter(e => e.exit === 0 && e.sha256)   // any pass, ever

The review gate has had the correct rule since v0.8.0 — a later failing review reopens it — but the three proof gates did not. So the drill could report a tree as ready while its fix did not pass in its current state, which is the one failure the gates exist to catch.

Fix. All three read the latest run of their kind:

  • red — newest test/arm=base run is non-zero, with a hashed log
  • green — newest test/arm=fix run is zero, with a hashed log
  • hygiene — newest hygiene run is zero, with a hashed log

Each detail line names the run it read, so a reopened gate explains itself:

green: the latest fix run exited 100 — a pass recorded before the last edit is stale; re-run the fix arm

Six two-sided assertions in test/core.test.js: every gate opens when the newer run fails and closes when the newer run passes.

107 tests, 0 failures.

dsh-drill v0.8.5 — refuse a missing PR core, say when a body was not linted

Choose a tag to compare

@EnRaiha EnRaiha released this 25 Sep 17:27

Two defects fixed, plus README corrections — found by a review of the published README and by the suite going red on a machine that had run drill_setup.

A configured-but-missing PR core recorded an unlinted body. drill_pr judged clean = !lint.available || (blockers === 0 && error === null), and lintPrBody answers available: false for both "lint disabled" and "the core at this path is not there". So prCore: /wrong/path did not fail — it recorded a pr record with no note, indistinguishable from a body that had passed the lint. A non-empty prCore that does not exist is now refused, with the path and the fix; a record made without lint says recorded without PR-craft lint (…).

A test that only passed on the author's machine. The role test asserted roleSource === 'bundled', but resolution is project → user → bundled: on any machine where ~/.dsh/roles/drill-auditor.md exists (anything that ran drill_setup) the same code returned user and the suite went red for a reason unrelated to the code. The test now isolates DSH_HOME; precedence stays covered by git-role.test.js.

README. requireLog was missing from the config table although its preamble promises every key is listed; prCore was documented as defaulting to ~/scripts/pr_craft.py when it has defaulted to auto (bundled core first) since v0.8.3; the peers sentence counted two of the three optional peers and dropped dsh-subagent; the installer one-liner now leads with --dry-run.

106 tests, 0 failures. Package: 20 files, core/pr_craft.py included.

dsh-drill v0.8.4 — quiet install

Choose a tag to compare

@EnRaiha EnRaiha released this 25 Sep 08:21

Packaging fix on top of v0.8.3 — same code, quieter and more portable install.

What the first publish proved. dsh-drill@0.8.3 installs by bare name from the registry: 20 files, core/pr_craft.py included, dsh plugin --profile <p> add dsh-drill works.

What it exposed. Every install printed

✕ missing peer @deepseek-ai/dsh-llm   ✕ missing peer @deepseek-ai/dsh-tools   ✕ missing peer @deepseek-ai/schemastery

Nothing was missing — the host supplies those modules through the profile's own resolution — but the manifest declared them as required peers, so users were told to install packages they must not install. schemastery was worse than noise: it is a runtime validator, which DSH's own cookbook puts in dependencies.

Fixed. @deepseek-ai/schemastery ships as a dependency (^3.18.0). dsh-tools, dsh-llm and dsh-subagent remain declared as optional peers: the runtime provides them, and a missing host still fails loudly at import. Verified by installing into a throwaway profile — no peer output at all.

104 tests, 0 failures.

dsh-drill v0.8.3 — self-contained package

Choose a tag to compare

@EnRaiha EnRaiha released this 25 Sep 08:00

Packaging fix on top of v0.8.2.

The defect. drill_pr scores the body it renders with the PR-craft core, resolved from ~/scripts/pr_craft.py. Correct on the machine this was written on, wrong for everyone else: an npm install has no ~/scripts, so the lint reported available: false, 'a missing core is not a blocker' made the body clean, and the pr record was written for a body nobody scored.

The fix. core/pr_craft.py ships inside the package and DEFAULT_PR_CORE resolves PR_CRAFT_CORE → the bundled copy → the ~/scripts fallback. Verified the way a user receives it: the tarball was extracted to a temporary directory and the lint ran from there with a real verdict, including with HOME pointed at an empty directory.

Package. 20 files, 71.7 KB — index.js, twelve lib/*.js, skills/, roles/, cordis.patch.yml, core/pr_craft.py, README, LICENSE, package.json. No tests, docs or tools.

Publish metadata. publishConfig.access, prepublishOnly = test, and .github/workflows/publish.yml for npm trusted publishing (OIDC) — with the first-publish caveat documented in the workflow: OIDC is configured per existing package, so 0.8.x goes up once by hand.

104 tests, 0 failures.

dsh-drill v0.8.2 — the drill kit

Choose a tag to compare

@EnRaiha EnRaiha released this 25 Sep 07:57

The drill is a bug fix run as a pipeline with gates: localize from the failure signal, map the blast radius, enumerate the edge cases, prove red (fails on base) then green (passes with the fix), pass hygiene, pass a fresh-context read-only Review 2, then produce the PR — with every claim backed by an artifact in a ledger. "Done" is not a sentence; it is a gate evaluation.

This is the first release of the kit. dsh-drill v0.8.2 — 16 tools, 103 tests, 0 failures, loads on DSH 0.1.6-alpha.2.

What is in the kit

Path What
index.js, lib/, test/, skills/, roles/, cordis.patch.yml the DSH plugin: 16 tools, the eight gate predicates, the append-only ledger, the failure-signal parser, the c2g resolver
core/c2g_tools.py, core/pr_craft.py the two stdlib-only cores the plugin and both frontends share
frontends/kilo/, frontends/hermes/ thin wrappers that expose those cores in those runtimes (core path overridable: C2G_CORE, PR_CRAFT_CORE)
docs/ the specification, both reviews, the historical spec, and a generated source bundle for reviewers
tools/build-source-bundle.mjs regenerates the bundle from the source revision — byte-stable

Install

dsh plugin --profile <profile> add github:EnRaiha/dsh-drill-kit#v0.8.2

Restart the runtime afterwards: host-side plugin rows are composed at boot.

Two reviews, every defect fixed with a regression test

  • Gate integrity — a review/pr record that named no commit could close a required gate; a hand-written test record could be a "proof" by pointing at any readable file.
  • Proofs that could vanish — a test killed by a signal reported a null exit and recorded nothing; the canonical red proof now records 128 + signo.
  • Rule 8 ("a miss is a note, not evidence") — closed on the text-search, backtrace and merged-store paths, and on the c2g scope read: active_snapshots is keyed by (tier, completeness), so the query now picks one deterministic, complete snapshot and labels a partial answer.
  • Honest labels — a fallback diff no longer prints a base it never compared; a crashed lint is no longer a clean PR body.

Everything the reviews could not settle is listed as unverified in the docs rather than assumed.

Verify

node --test test/*.test.js     # 103 tests
node tools/build-source-bundle.mjs

docs/DRILL-PLUGIN-SOURCE-BUNDLE-*.md carries every tracked file with per-file sha256, so the release can be audited without cloning.

Upstream

The graph layer is not this repository's work: NodeDB-Lab/code2graph (Rust extractor + c2g CLI) by farhan-syah, the NodeDB founder, with CLI fixes by EnRaiha. See docs/README.md for the full credits.