Goal
Make a measurement say which setup produced it, and give the repository release tags.
Evidence
Between 2026-09-05 18:40Z and 2026-09-07 the loop ran under at least three different
setups: the three GitHub Apps went live, the per-run ceilings were raised in #213, and
#260 moves ownership of the verdict. Each makes the earlier numbers numbers about a
different system. None of the 330 records in the ledger says which setup it belongs to,
so comparing two days means trusting that nothing changed between them — which, over
the three days this loop has run, was never true. The boundary of the measured day
exists only in an operator's notes.
git tag is empty. The roadmap is versioned; the repository is not. What shipped at M0
is answerable only by reading merge history.
Scope
docs/zendev/schemes.json, scripts/schemes.py, scripts/tests/test_schemes.py
scripts/record_usage.py
.github/workflows/zendev-author.yml, .github/workflows/zendev-acceptor.yml
docs/zendev/milestones.json, scripts/release_tag.py,
scripts/tests/test_release_tag.py, .github/workflows/release-tag.yml
docs/spec/FEEDBACK_TO_RESEARCHER.md
Non-goals
Cutting any tag in the implementing pull request. Changing any model, ceiling, cadence
or gate — the descriptors record what is already true.
Acceptance criteria
- Filling in a scheme's commit or rewriting its note does not change its digest;
changing a ceiling, the verdict owner or a required check does.
- A run whose model contradicts the active scheme is recorded, warned about and
marked — never dropped.
- An unreadable descriptor costs the scheme block, never the telemetry record.
- The descriptor travels with the staged recorder, so a branch under review cannot
decide what the record says the setup was.
- A milestone with one PARTIAL or one missing row is not released.
- Identical coverage does not re-tag; different merge commits behind the same
milestone cut the next patch.
scheme/N tags are ignored by the release tagger.
- Every requirement in
REQUIREMENTS_REGISTRY.csv belongs to exactly one milestone,
or the build fails.
Verification
python -m unittest discover -s scripts/tests; python scripts/release_tag.py --dry-run; and the staged-recorder path exercised by running the recorder from a bare
directory holding only its copied files.
Open dependency on the researcher
REQUIREMENTS_REGISTRY.csv has no MILESTONE column, so M1 and M2 membership is
transcribed from prose in EXECUTION_ORDER.md. Requested in the feedback channel.
Goal
Make a measurement say which setup produced it, and give the repository release tags.
Evidence
Between 2026-09-05 18:40Z and 2026-09-07 the loop ran under at least three different
setups: the three GitHub Apps went live, the per-run ceilings were raised in #213, and
#260 moves ownership of the verdict. Each makes the earlier numbers numbers about a
different system. None of the 330 records in the ledger says which setup it belongs to,
so comparing two days means trusting that nothing changed between them — which, over
the three days this loop has run, was never true. The boundary of the measured day
exists only in an operator's notes.
git tagis empty. The roadmap is versioned; the repository is not. What shipped at M0is answerable only by reading merge history.
Scope
docs/zendev/schemes.json,scripts/schemes.py,scripts/tests/test_schemes.pyscripts/record_usage.py.github/workflows/zendev-author.yml,.github/workflows/zendev-acceptor.ymldocs/zendev/milestones.json,scripts/release_tag.py,scripts/tests/test_release_tag.py,.github/workflows/release-tag.ymldocs/spec/FEEDBACK_TO_RESEARCHER.mdNon-goals
Cutting any tag in the implementing pull request. Changing any model, ceiling, cadence
or gate — the descriptors record what is already true.
Acceptance criteria
changing a ceiling, the verdict owner or a required check does.
marked — never dropped.
decide what the record says the setup was.
milestone cut the next patch.
scheme/Ntags are ignored by the release tagger.REQUIREMENTS_REGISTRY.csvbelongs to exactly one milestone,or the build fails.
Verification
python -m unittest discover -s scripts/tests;python scripts/release_tag.py --dry-run; and the staged-recorder path exercised by running the recorder from a baredirectory holding only its copied files.
Open dependency on the researcher
REQUIREMENTS_REGISTRY.csvhas noMILESTONEcolumn, so M1 and M2 membership istranscribed from prose in
EXECUTION_ORDER.md. Requested in the feedback channel.