Skip to content

fix(ci): reconcile actions.lock so the lockfile validates - #99

Merged
hyperpolymath merged 1 commit into
mainfrom
fix/lockfile-reconcile
Sep 21, 2026
Merged

hyperpolymath merged 1 commit into
mainfrom
fix/lockfile-reconcile

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Workflows fail at creation with The lockfile could not be validated. Regenerate it by running gh actions-lock / Workflow must use a lockfile. This regenerates the manifest with the official extension (github/gh-actions-lock), completes the workflows: map so every workflow file has an entry, and pins the SHA-form transitive deps reached via called reusables. Proof before push: every workflow re-parses, gh actions-lock --verify rc=0, and every uses: ref resolves to a pin.

…s here fail at creation with 'The lockfile could not be validated. Regenerate it by running gh actions-lock' (or 'Workflow must use a lockfile'). This runs the official extension, completes the workflows: map so every onboarded file has an entry (the shape healthy repos carry), and adds the SHA-form transitive pins reached through called reusables. Every workflow re-parses before commit; gh actions-lock --verify is rc=0.
@hyperpolymath
hyperpolymath merged commit dc210e9 into main Sep 21, 2026
1 check failed
@hyperpolymath
hyperpolymath deleted the fix/lockfile-reconcile branch September 21, 2026 12:41
hyperpolymath added a commit that referenced this pull request Oct 5, 2026
…plate shape (#102)

## Summary

First-run start point for proof-burrower: restore its identity, consume
echidna's shared prove-result contract, and move part of the way toward
the rsr-template-repo shape.

### Integration: `echidna.prove.result/1`

- `burrower attempt` runs `echidna prove ... --output json` when the
installed echidna lists `--output` in `prove --help`. It parses the
single stdout object and requires it to be byte-identical to its RFC
8785 canonical form, which also rejects duplicate keys and integers
beyond ±(2^53−1). Canonicalisation uses the published
`serde_json_canonicalizer` crate: the estate crate
`hyperpolymath/ijson-jcs` is private, so the earlier git dependency
could not be fetched by CI on this public repo (that was the cause of
the red Rust checks).
- A `verified` result produces `Succeeded { receipt: Some(ProofReceipt)
}`, and the receipt (prover, axioms, confidence, echidna version) is
written to the ledger's `extra.receipt`.
- Burrower falls back to the legacy text markers in two cases only:
  - the flag is missing from `prove --help`;
  - clap rejects `--output` (exit 2, `unexpected argument '--output'`).

A legacy success carries no receipt, and the ledger labels it "a
warrant, not a receipt".
- Malformed or non-canonical output counts as a contract violation and
fails the attempt. Burrower never re-reads it as text.
- Tests use fake echidna binaries to cover every status, a planted
non-canonical mutant, a binary that prints legacy text after advertising
the flag, a legacy binary, and a binary that advertises the flag and
then rejects it.
- The full contract and the mapping table are in
`docs/ECHIDNA-INTEGRATION.adoc`.
- **Horizon:** the live e2e test (`Burrower proof safety`) uses the
echidna build pinned in `proof-safety.yml`. That build predates the
flag, so CI exercises the **legacy** path live and the contract path
only through the fakes. The contract path is implemented and
unit-tested; it has not been tested against a real echidna.
- echidna corpus overlap: the recommendation is in
`docs/ECHIDNA-INTEGRATION.adoc#corpus-overlap`. Burrower keeps its own
indexer as the zero-dependency fallback and later gains an optional
`echidna corpus near` backend, once echidna defines a JSON contract for
it. That backend is not implemented here.

### Identity and template shape

- `affinescript/` (616 files) is removed. A search of Cargo members, the
Justfile, workflows, `crates/`, `src/`, `scripts/` and `tools/` found no
reference to it. It also held the last `.machine_readable/6a2/` in the
tree.
- README (previously "= PseudoScript") and ARCHITECTURE (the untouched
template) are rewritten. Root status and governance docs move under
`docs/` and `docs/status/`, and the files that referenced them are
updated.
- Adds `proof-burrower_chora.deed`. It passes `deed_lint` and the
deed-ecosystem validator.
- `mise.toml` no longer lists banned tools and now has a lockfile.
`dependabot.yml` and `settings.yml` are KYAML; `settings.yml` sets
squash-only merges and turns the wiki on.
- Fixes the Well-Known workflow, which failed on every scheduled run on
main because it never looked in `www/.well-known/`.
- Adds the wiki source in `docs/wikis/` and `scripts/sync-wiki.sh`.

### ID minting

`crates/burrower-core/src/ids.rs` is the only minting module (owner
policy 2026-10-05):

- `new_record_id()`: UUIDv7 from the `uuid` crate API. Used for ledger
record `id` through `ledger::new_id`, a thin alias. Callers:
`attempt::run_playbook`, `oracle::record_to_ledger`,
`ledger::record_reading`.
- `content_id(value)`: UUIDv8 per RFC 9562 Appendix B.2. It takes
SHA-256 over the JCS bytes, keeps the first 16 bytes and sets version 8
and variant `10`. `goal_content_id(text)` fills the new optional ledger
`goal_id`, and `ProofReceipt::from_result` fills the new optional
`result_id`.
- `goal_hash` is unchanged, because the wasm ABI (16-byte buffer) and
existing ledgers depend on it. Corpus entries carry no id yet.
- Tests cover three things: the same JCS content gives the same v8 id;
the version and variant bits are correct, with the rest equal to the
hash prefix; and v7 ids sort in minting order over 1000 mints.
- v7 is gated off `wasm32-unknown-unknown`, which has no clock or
entropy.
- Documented in `docs/ECHIDNA-INTEGRATION.adoc` § Identifiers.

### Stale local branches (folded or left)

- `chore/dependabot-pr-caps-2026-09-08`: the github-actions cap is
folded in. The other caps applied to ecosystems that no longer exist.
- `codex/live-proof-stack-20260907`, `codex/postmerge-mirror-20260907`:
already landed as #83 and #85.
- `fix/token-permissions-id-20260911`, `chore/bump-standards-pins`,
local `main` (+2): older pinning and ruleset attempts that main has
superseded (#99 actions.lock). Left untouched.

### Not done in this PR (reduced increment, §5b)

- Root-shape conformance is partial. These remain at the root:
`0-AI-MANIFEST.a2ml` (still read by rhodibot),
`Containerfile`/`container/`, `.gitlab-ci.yml`/`.pre-commit-config.yaml`
(moving them needs a GitLab project setting), `contractile.just`,
`coordination.k9`, `setup.sh`, `stapeln.toml`, `selur-compose.toml`,
`.guix-channel`, `agents/`, `audits/`, `tools/`, `.bot_directives/`.
Still missing: a generated `CLAUDE.md`, `launcher.sh`, `build/`, `ci/`.
No root-shape gate runs on this repo yet.
- The STATE/META/ECOSYSTEM descriptiles stay alongside the deed because
`openssf-compliance.yml`, the contractiles and `validate-template.sh`
still read them.
- No Creusot, SNIF or Zig-adapter work: there are no NIFs or Zig I/O
here, and Creusot has no estate convention yet.

## Test plan

- [x] `cargo fmt --all -- --check`, `cargo clippy --all-targets --locked
-- -D warnings`, `cargo test --locked --workspace` (all green locally;
25 repeated runs of the lib suite with no flakes)
- [x] `gh actions-lock --no-fix` clean
- [x] `kyaml-format.sh --check` on the edited YAML
- [x] `docstring-scan.sh --staged --check` (100%)
- [x] `deed_lint.py` OK; deed-ecosystem `validate-a2ml.sh`: 0 errors (8
pre-existing SPDX warnings)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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