holt ci
Version updated for https://github.com/Raed2180416/holt to version v0.3.1.
- This action is used across all versions by 1 repositories.
Go to the GitHub Marketplace to find the latest changes.
Action Summary
holt automates the process of inspecting and managing commits, staged edits, local files, and relationships across multiple Git repositories. It helps prevent duplicate work by ensuring that each worktree’s changes are coordinated and preserved before being merged into a shared decision surface. The action ensures that only verifiable work is destroyed, avoiding unintended deletions and preserving unique content.
What’s Changed
holt 0.3.1 — safety and correctness fixes
Safety and correctness fixes across the guard, integration, and analysis paths. If you are running 0.3.0, upgrade.
Install
npm install -g https://github.com/Raed2180416/holt/releases/download/v0.3.1/holt.tgz
One command — no clone, no build. This signed artifact was built from the immutable v0.3.1 tag,
package-audited, checksum-verified and installed on the Ubuntu Node 24 release runner before
publication. The public benchmark and broader platform matrix remain available for independent
evaluation and future release cycles. holt.tgz is a stable name, so this URL keeps working; the
versioned holt-0.3.1.tgz is attached alongside it.
Guard fixes
- The hooks
holt integrateinstalls disarmed the guard. For Claude Code, integrate wires the blocking guard and the brief. Both used one report cache keyed only on the repository root, so the brief’s analysis — computed without your own worktree — was served to the guard as though it were the guard’s own. Cold cache:git clean -fdwas refused, naming the symbol at risk. Run the brief hook first, and the identical command was allowed. Same forgit reset --hard,git checkout -- .andgit stash push -u. - A space in your path turned the guard off. Eight of nine destructive forms flipped from
refuse to allow.
C:\Users\First Last\projectand~/My Drive/projectare ordinary paths. - A newline in a worktree name turned it off too — and
holt risknamed that worktree as holding work found nowhere else in the same breath. rm -rf <repository root>was allowed. Correct by the guard’s own rule, since a clean tree holds no sole copy — and.gitis inside that path, so it takes every commit, branch, reflog, stash and rescue ref with it.git worktree removerefuses the main working tree;rmdoes not.- The hook could stall every tool call for as long as the host held stdin open. It now reads the bounded hook payload and returns without waiting for an unrelated end-of-stream signal.
Integration ownership fixes
holt integratedeleted third-party hooks. A fixture with seven foreign PreToolUse entries came back with one. A corporate guardrail was claimed because its command contained--host; an npm package because its name containedholt; a script because the username in its path did.holt uninstalldeleted config files in repositories holt had never been installed into — all sixteen project MCP targets, each printing “Only holt’s own entries were touched”.- A legal JSONC trailing comma cost a team both of their MCP servers.
.mcp.jsonis JSONC; holt read it with a parser that was not. The read failed, the failure was recorded as “no file”, and integrate then created the file it had just failed to read. - A hand-written
.git/hooks/pre-commitwas deleted for mentioning holt in a comment. holt integrate --dry-runwrote 21 files. It is now a real preview.
Ownership is now argv-shaped — the program being executed must actually be holt — and a config holt cannot parse is left byte-for-byte alone rather than replaced.
Correctness
- A repository with one worktree reported zero risk while holding real risk. Reported from the
field:
holt risksaidscanned 0/0, nothing at riskwhile the tree held 24 uncommitted changes and 9 symbols that existed nowhere else. The primary worktree is now scanned when it is the only one. It is still never a deletion candidate. - Duplicate detection reported false positives without ctags — a function’s “declared body” was its signature line alone, so any two functions sharing a name and an arity compared as identical.
holt autoannounced a lock git had already refused, andholt protectexited 0 having failed. Both now tell the truth, and an action that failed exits non-zero.holt discardprinted no ref while telling you the content was “recoverable from the ref above”. It now prints the ref, the commit and the exact restore command.- holt refused ordinary commands whose arguments came from shell substitutions. Over-refusal is a defect: a refusal you cannot act on teaches you to ignore the next one.
Test and supply-chain integrity
- A source-stripping bug meant substantial product code never reached the no-telemetry and path-comparison gates. The no-telemetry guarantee survived the widened scan; it was under-verified, not false.
- The static-analysis ratchet wrote a zero and passed when the type checker could not run, and its config meant nothing was really being type-checked. The ratchet now fails when the checker fails and proves it inspected real product code.
- Both benchmark harnesses reported “correct” for runs that graded nothing. §1’s headline result included ungraded verdicts and a summary line that divided the planted count by itself. The validators now refuse missing denominators and ungraded rows instead of turning unknowns into success.
Evidence status
The benchmark methods and validation rules are documented in BENCHMARKS.md. This release body does not publish a performance rate or agent-utility lift until the exact release artifact has a retained, checksum-bearing result that the release can link directly.
Coverage guide
Host coverage is graded rather than implied. Contract-tested integrations are separated from live host runs, and a host is not described as blocking until its real allow, deny and failure paths have been driven. HOSTS.md records the current level for each host from the generated manifest.
Holt is part of Contrare Research. Product and research queries: research.contrare@outlook.com.