Skip to content

I3353 — A trial is a typed record that carries its protocol's digest, refuses what the protocol does not declare, and redacts what its publication basis does not permit

Extend economics::proof with the trial record (schema proof-trial/v1) under .ai/repo/benchmarks/trials/<test-id>/: test id, protocol_digest, recorded_at, outcome, the fields the test's trials or window protocol declares (each number with its class, only observed, counted or derived), publication_basis (licence with its SPDX id, owner_consent with its date, or none) and friction entries as declared codes. When the basis is none, the loader refuses a repository name, a raw commit id (a salted digest is required), a path (only declared path classes) and any free-text field. The loader also refuses a missing declared field, an estimated or counterfactual number and an unknown test. Records whose digest or time does not count are kept and listed with their reason.

BLOCKED wave 1 · p0 · implementation profile · parallel safe

Part of the-proof-tests-are-registered-before-they-run — The six proof tests are registered as validated protocols, each frozen by its own digest, and every trial is a typed record that publishes only what its basis permits.

Blocked. This issue cannot start until I3351 is done. The status is derived from that, not declared.

Objective

Extend economics::proof with the trial record (schema proof-trial/v1) under .ai/repo/benchmarks/trials/<test-id>/: test id, protocol_digest, recorded_at, outcome, the fields the test's trials or window protocol declares (each number with its class, only observed, counted or derived), publication_basis (licence with its SPDX id, owner_consent with its date, or none) and friction entries as declared codes. When the basis is none, the loader refuses a repository name, a raw commit id (a salted digest is required), a path (only declared path classes) and any free-text field. The loader also refuses a missing declared field, an estimated or counterfactual number and an unknown test. Records whose digest or time does not count are kept and listed with their reason.

Why

T1, T3, T5 and T6 of the owner's report of 2026-10-19 are trials, not paired benchmark runs, and the critique of this plan found two designs inventing separate stores for them. One typed record serves all four and keeps a single counting rule. The critique also found that an adoption record with a commit id and a path list identifies a repository even with its name withheld, and that one of the owner's adopters belongs to the owner's employer, so the redaction is enforced by the loader rather than left to the worker.

Current state

apps/majordomus-cli/src/economics/mod.rs:328 load_runs and :438 load_context_runs are the only loaders and both read paired-benchmark runs. methodology.yaml:12-23 declares the number classes observed, counted, derived, estimated and counterfactual. No trials directory exists under .ai/repo/benchmarks.

Desired state

economics::proof::trials(root, test) returns counted and uncounted records with reasons; tests cover every refusal and every redaction.

Scope

  • apps/majordomus-cli/src/economics
  • apps/majordomus-cli/tests/economics.rs
  • docs/ECONOMICS.md
  • .ai/repo/benchmarks/README.md

Out of scope

  • Any protocol or record content (each experiment issue)
  • The outside-run form of I3129; reusing this type there is that issue's owner's call
  • Publishing (I3356)

Dependencies

What waits on this

Acceptance criteria

  • A record under basis none carrying a name, a raw 40-hex commit id, a path or a free-text field is refused, each with its own finding
  • A record missing a field its protocol declares, or carrying an estimated number, is refused
  • A record with another protocol's digest, or recorded before registered_at, is listed as not counted with its reason
  • Every new public item has a rustdoc example that runs

Validation

  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test economics
  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --doc economics::proof
  • cargo fmt --manifest-path apps/majordomus-cli/Cargo.toml --check

Evidence required

  • test_trial_record_refusals
  • test_trial_record_redaction

Evidence

None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.

Timeline

started
—
verified
—
completed
—

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I3353.yaml. Read it back with majordomus plan show I3353.

Searches the titles and descriptions of every page this site publishes.