Skip to content

I0301 — Define the execution record, including what an absence looks like

Define the durable shape of a task's execution facts: which fields exist, who reported each one, and how a provider that reported nothing is recorded, so that absence is a value with a reason rather than a missing key or a zero.

DONE wave 0 · p2 · deep-work profile · runs alone

Part of execution-telemetry — Execution telemetry, only from providers that expose it honestly.

Objective

Define the durable shape of a task's execution facts: which fields exist, who reported each one, and how a provider that reported nothing is recorded, so that absence is a value with a reason rather than a missing key or a zero.

Why

Every economic statement this repository could make rests on this record. If absence is representable only as a gap, the first report that reads it will treat a gap as a zero and the whole layer becomes an estimate wearing a measurement's clothes.

Current state

The record exists: share/schemas/majordomus/telemetry/telemetry.v1.schema.json (kind telemetry, under .ai/local/state/telemetry/) names a reporter for every fact and writes absence as not_reported with its reason (#1051, commit 4e6e7d765c2). Its milestone derived it BLOCKED only because execution-telemetry still depended on runtime-adapters; I3287 rescoped it from the shell era (share, lib) to where the record and its Rust reader live. The Option<u64> usage record the receiver writes is I3288's.

Desired state

One schema, with an allowlist like every other record here, in which each measured field names its reporter, and not_reported is a first-class value carrying why it is absent.

Scope

  • share/schemas
  • share/kinds.yaml
  • share/allow
  • apps/majordomus-cli/src/economics
  • apps/majordomus-cli/tests/metadata_contract.rs
  • docs

Out of scope

  • Collecting anything; this issue defines what would be stored
  • Any field the tool would have to estimate to populate

Dependencies

None. This issue is a root of the graph.

What waits on this

Acceptance criteria

  • Every field names the reporter it came from, and a record without a reporter is refused
  • not_reported is representable with a reason, and is distinguishable from zero everywhere it is read
  • Unknown keys are refused like every other record in this repository
  • The schema is documented where the other file formats are

Validation

  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test metadata_contract a_telemetry

Evidence required

  • telemetry_contract

Evidence

coverstypecommandresultat commit
telemetry_contracttestcargo test --manifest-path apps/majordomus-cli/Cargo.toml --test metadata_contract a_telemetry5 passed, 0 failed: a reporter on every fact, an absence with its reason and never also a value, an omitted fact refused rather than read as zero, an unknown key or number refused (the record landed in #1051, 4e6e7d765c2; docs/SCHEMAS.md documents it)8b28ca3

Risk

A schema designed around one provider's numbers becomes that provider's schema; the reporter field is what keeps a second provider from having to lie to fit.

Timeline

started
2026-10-22T18:29:29Z
verified
2026-10-22T18:29:42Z
completed
2026-10-22T18:30:02Z

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/I0301.yaml. Read it back with majordomus plan show I0301.

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