Skip to content

Releases

v1.1.8 — freshness latch on SessionEnd

Choose a tag to compare

@kikenandez kikenandez released this 11 Oct 22:33

The 1.1 spec is unchanged. This release fixes a bug in the Dispatch freshness gate that blocked an install's architect mid-session, twice.

What went wrong

The §6.2 gate checks the Dispatch once per session, then leaves a latch so later prompts pass. stop-cleanup released that latch on Claude Code's Stop event, on the assumption that Stop means the session ended. It doesn't: Stop fires at the end of every turn. So the gate re-ran before every prompt, and once the lanes had made more than three commits it blocked the architect, the one role whose job is to keep the Dispatch current. The workaround was ADP_DISPATCH_STALE_OK=1.

Fixed in this release

  • Latch released on SessionEnd. A new session-end-latch hook (bash and Node) is wired in both settings.json and settings.node.json. stop-cleanup keeps worktree pruning and wire sync only. The gate itself is unchanged: every new session is still checked against a fresh Dispatch.
  • A fresh install no longer blocks its first prompt. The installer copied the template's docs/tasks/current.md with the template's original date, so the gate's 24h check tripped immediately. The installers now stamp a newly added Dispatch with the install time.
  • verify-hooks checks that the latch is released at SessionEnd, and uninstall removes the new hook.

Upgrading

init --upgrade replaces the hook scripts but never edits your settings.json. If the ADP hooks are wired without a SessionEnd entry, the installer prints a note: copy that block from .claude/settings.json (bash) or .claude/settings.node.json (Node). Until you do, the gate still runs once per session.

Preprint: doi:10.5281/zenodo.21982389

v1.1.7 — hooks fail visible, bounds script, pathspec rule

Choose a tag to compare

@kikenandez kikenandez released this 10 Oct 18:10

The 1.1 spec is unchanged. This release fixes a documented enforcement gap, turns one piece of standing advice into a check, and folds in the one commit-hygiene delta that had cleared the n=2 gate.

A documented limit was a defect.

The README said it plainly: "jq — required by the default (bash) hooks; without it they silently no-op." A hygiene gate that quietly disables itself is worse than none, because the session believes it is enforced. The three bash hooks now say so — the hygiene gate asks on any git command, the freshness gate and the orphan check inject a context line — and test_git_hygiene.py runs them on a PATH without jq to prove it. The Node twins already failed safe; the bash twins did not.

New in this release

  • adp_bounds.py — mechanical caps on current.md (lines, bytes, Dispatch block) and the memory read layer; exit 1 on a breach, --strict for warnings. "Keep it small" is now a check a hook or CI can run. Installed by init.*, removed by uninstall.*, with its own tests
  • §6.4 rule 1, pathspec form — git commit -m "…" -- <paths>. A bare git commit snapshots the whole shared index, so a co-session's staged files are swept in however carefully you staged. Ratified at n=2 from sweep incidents on both installs; generalised into rule 1 in place rather than numbered as a sixth. Both hook twins note a commit that carries no pathspec
  • Four notations, no rules — Supersedes: on tasks and plans (how a decision retires the previous one); provenance tags [read: …] [calc: …] [hyp: …] on reused values; a three-part BLOCKED body (question · candidate answers · what each changes); a retro question on automations that run unattended
  • §5.3 "locate, don't extract" — a cheap tier may locate; a count, value or list it hands back is a pointer, not a fact. Indexes existing checks (review step 5, S6)
  • protocolreview.md v0.3 — the four homes of a fix, a dependency column for hooks, a supersession scan, and a standing rule to recheck any import scan adversarially before editing

What the recheck caught. The import scan behind this release was itself rechecked by a second agent before anything was edited. Of eight "ADP lacks X" claims in the first pass, two were wrong and four overstated — the shape already existed at review cadence. The one real defect the scan had missed, the silent jq no-op, was the most valuable item of the run. The protocol review now requires that recheck.

Nothing advanced an n-counter. The scan's material came from outside ADP installs. Four candidates entered at n=0 in proposals/ADP-1.2-candidates.md; the pathspec rule is the only change with install receipts behind it.

The fastest way to test this on your own work is still the six-class semantic checklist: run it against your team's next ten specifications and report what it caught. Zero catches is a result worth reporting.

Preprint: doi:10.5281/zenodo.21982389

v1.1.6 — measurement, evidence, citation

Choose a tag to compare

@kikenandez kikenandez released this 22 Aug 21:08

The 1.1 spec is unchanged. This release makes the protocol's claims about itself auditable — and corrects two that were not.

Two published numbers were wrong.

The scorecard read 529 accepted / 22 falsified. That pair had never been derived: the counting rule was documented in MEASUREMENT.md, and had never been executed. Running it gives 249 accepted / 43 falsified at commit d006a752 — accepted lower than published, falsified roughly double. The commit count read 1,768; it reconciles with no clean definition of the history. The reproducible figure is 3,618 non-merge commits at 1f79af15.

New in this release

  • adp_claims.py — executes the claim-counting procedure, reports a range rather than a point, emits receipts with file and line, prints its own blind spots
  • adp_history.py — derives an install's output mix from git history, excluding generated artifacts
  • evidence/ — 855 receipt rows, both installs, pinned commits, limits stated. Published so the figures can be audited rather than believed
  • CITATION.cff — DOI and ORCID; GitHub now renders "Cite this repository"
  • protocolreview.md — the protocol review as a recurring, portable ritual

Two defects published rather than repaired

Two of the four metrics in adp_metrics.py report false zeros — the parsers look for conventions this install does not write. And adp_claims.py was wrong on its first run: a malformed pattern returned 59 where the truth was 422, silently, caught only by an independent check. Both are in the record, because the protocol's argument applies to its own instruments.

The fastest way to test this on your own work is the six-class semantic checklist: run it against your team's next ten specifications and report what it caught. Zero catches is a result worth reporting — disconfirming reports are graded and published on the same scorecard as our own.

Preprint: doi:10.5281/zenodo.21982389