Skip to content

v1.21.1 — the check that asked the wrong plane who hands out ids - #23

Merged
sshlg merged 1 commit into
mainfrom
fix/check-accepts-git-id-registers
Oct 1, 2026
Merged

sshlg merged 1 commit into
mainfrom
fix/check-accepts-git-id-registers

Conversation

@sshlg

@sshlg sshlg commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

check refused every idRegisters entry on backend: "fs" + leaseBackend: "git", while reserve DEC in that same repository allocated race-free through refs/agent-sync/ids/* at the remote. Repositories with a local record plane had to drop their DEC/OQ registers and take numbers by hand.

Root cause. reserve allocates when the record plane orders writes OR the lease is git. check asked only the record plane (probe.is_lease_authority).

Fix.

  • One predicate, id_allocator(cfg, adapter), answers for reserve, release_id, check and the generated snapshot (which now names the allocator).
  • Still refused, by both commands: a non-ordering plane (fs, or a cloud plane degraded to fs) with leaseBackend: "local"; leaseBackend: "git" pointed at a remote that does not exist.
  • A missing lease remote is refused by name in acquire and reserve. It used to read as "held by another run" / "another allocator is racing".

Tests. check_check_and_reserve_agree_on_who_allocates_ids drives all three configurations through both commands against a bare remote. It was written first and failed 4 ways on the old code. Two new self-test plants (the record-plane-only condition, the phantom contention) are caught, and so is the retargeted check blesses a register nobody can reserve plant, which had silently stopped applying.

Gate (local). npm test EXIT=0: validate PASS v1.21.1 (also on Python 3.9.6), SELF-TEST PASS (64 fixtures), claim cell 27, session hooks 13, installer 11. Audit regressions 13/13, evals OK, pinned house audit 0 GAP / 18 PASS, and claude plugin validate --strict passed for . and plugins/agent-sync.

🤖 Generated with Claude Code

`check` refused every `idRegisters` entry on `backend: fs` + `leaseBackend: git`,
while `reserve DEC` in the same repository allocated race-free through
refs/agent-sync/ids/* at the remote. Repositories with a local record plane
dropped their registers and took numbers by hand.

- one predicate, id_allocator(cfg, adapter), answers for reserve, release_id,
  check and the generated snapshot (which now names the allocator)
- still refused, by both commands: a non-ordering plane with leaseBackend
  local; leaseBackend git pointed at a remote that does not exist
- a missing lease remote is refused by name in acquire and reserve; it used to
  read as "held by another run" / "another allocator is racing"
- check_check_and_reserve_agree_on_who_allocates_ids drives all three
  configurations through both commands against a bare remote; two new
  self-test plants (record-plane-only condition, phantom contention) and the
  retargeted "check blesses a register nobody can reserve" plant are caught
- docs: lease-protocol.md configuration table, backend-fs.md, schema, README,
  SKILL.md

Gate: npm test EXIT=0 — validate PASS v1.21.1 (also on Python 3.9.6),
SELF-TEST PASS (64 fixtures), claim cell 27, session hooks 13, installer 11;
audit regressions 13/13; evals OK; pinned house audit 0 GAP / 18 PASS;
claude plugin validate --strict passed for . and plugins/agent-sync.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@sshlg
sshlg merged commit d8c27c4 into main Oct 1, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant