Summary
We have no good way to see, across eras, which ledger properties we want, which are stated, and which are proved — and the three places that information lives drift apart:
- the Agda (
src/**/Specification/**/Properties/**.lagda.md) — the only artifact that actually knows whether something is proved;
- GitHub issues
- our prose/mental model.
Concrete symptom: #413 (deposit-pot growth) is already proved (updatePropDeps≡ in Utxo.Properties.GenMinSpend, feeding the UTXO-minspend theorem) yet its issue is open and unlinked — while #414 (eventually refunded) is easy to mistake for done but has no statement at all yet. Several real claims/theorems have no tracking issue, and Dijkstra has none of these properties.
Goal
A single, version-controlled way to catalog every property and keep its status honest, where proof status is derived from the Agda (so it can't silently drift), surfaced in a human-readable roadmap, and gated by CI.
Approach
Three layers, one source of truth per concern:
- Agda = truth for "is it proved." A property module that still ends with
*Proof*. (coming soon) is stated; otherwise proved (the --safe typecheck guarantees no holes).
- A catalog in the repo (
docs/notes/properties.yaml) — the inventory: id, era, STS, Agda module, tracking issue, intended status. The property↔issue link lives here.
- GitHub issues = coordination — synced from the catalog.
A scanner (scripts/python/scan_properties.py) reconciles the catalog against the Agda, regenerates the roadmap (docs/notes/ledger-properties-roadmap.md), and runs in CI to fail on drift or a stale roadmap. Design write-up: docs/notes/0001-ledger-property-tracking.md.
Scope / tasks
Relationship to other issues
This issue builds the machinery. The properties it tracks live elsewhere: the Conway governance umbrella #45 and its sub-issues #412–#417 (including the in-flight statement PRs for #414 and #417), plus the untracked claims/theorems and Dijkstra ports that this machinery will enumerate and (via the sync script) turn into issues.
Acceptance criteria
- Catalog + scanner +
properties-check gate merged; scan_properties.py --check green on master, with status computed from the Agda.
- The roadmap renders the full Conway + Dijkstra inventory with correct statuses.
- The catalog↔issues sync has been run once (labels, per-era umbrella, and the initial issues seeded).
- A real-time, manager-friendly view (Projects board and/or the published roadmap) is live.
Summary
We have no good way to see, across eras, which ledger properties we want, which are stated, and which are proved — and the three places that information lives drift apart:
src/**/Specification/**/Properties/**.lagda.md) — the only artifact that actually knows whether something is proved;EnactStateonly changes when governance actions are enacted #412kproposals, the deposit pot for governance actions grows byk * govDeposit. #413allEnactableis an invariant ofCHAIN#419Concrete symptom: #413 (deposit-pot growth) is already proved (
updatePropDeps≡inUtxo.Properties.GenMinSpend, feeding theUTXO-minspendtheorem) yet its issue is open and unlinked — while #414 (eventually refunded) is easy to mistake for done but has no statement at all yet. Several real claims/theorems have no tracking issue, and Dijkstra has none of these properties.Goal
A single, version-controlled way to catalog every property and keep its status honest, where proof status is derived from the Agda (so it can't silently drift), surfaced in a human-readable roadmap, and gated by CI.
Approach
Three layers, one source of truth per concern:
*Proof*. (coming soon)is stated; otherwise proved (the--safetypecheck guarantees no holes).docs/notes/properties.yaml) — the inventory: id, era, STS, Agda module, tracking issue, intended status. The property↔issue link lives here.A scanner (
scripts/python/scan_properties.py) reconciles the catalog against the Agda, regenerates the roadmap (docs/notes/ledger-properties-roadmap.md), and runs in CI to fail on drift or a stale roadmap. Design write-up:docs/notes/0001-ledger-property-tracking.md.Scope / tasks
properties.yaml), ADR, generated roadmap, scanner, and theproperties-checkCI drift gate.gh_project_populate.py,gh_project_render.py).status:) so the roadmap/dashboard update automatically on every green CI run.Relationship to other issues
This issue builds the machinery. The properties it tracks live elsewhere: the Conway governance umbrella #45 and its sub-issues #412–#417 (including the in-flight statement PRs for #414 and #417), plus the untracked claims/theorems and Dijkstra ports that this machinery will enumerate and (via the sync script) turn into issues.
Acceptance criteria
properties-checkgate merged;scan_properties.py --checkgreen onmaster, with status computed from the Agda.