67 lines
3.3 KiB
Markdown
67 lines
3.3 KiB
Markdown
|
|
# Daily brief durability audit
|
|||
|
|
|
|||
|
|
The verifier resolves the live `origin/main` commit with `git ls-remote` and
|
|||
|
|
reads that immutable Git tree. If necessary, it fetches missing objects. Local
|
|||
|
|
files, local commits and stale remote-tracking refs cannot establish completion.
|
|||
|
|
An unreachable remote or Hub is an error (exit 2), never a successful check.
|
|||
|
|
Hub progress reads are paginated; repeating/malformed pages fail closed.
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python3 scripts/verify_brief_durability.py --require-hub
|
|||
|
|
python3 scripts/verify_brief_durability.py --allow-reconciled --json
|
|||
|
|
python3 scripts/verify_brief_durability.py --allow-reconciled --require-date 2026-09-14
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
The last command is the acceptance check for the September 14 scheduled run.
|
|||
|
|
Before that run publishes, it must fail. A known historical gap cannot satisfy
|
|||
|
|
`--require-date`.
|
|||
|
|
|
|||
|
|
For events dated September 13, 2026 onward (or any event containing push
|
|||
|
|
attestation), the verifier requires `pushed=true`, the canonical date/path,
|
|||
|
|
and a full `origin_sha` that is an ancestor of the live remote head and contains
|
|||
|
|
the nonempty brief. The current remote tree must also contain the file.
|
|||
|
|
Earlier events with files on origin are reported separately as legacy evidence;
|
|||
|
|
the audit does not invent historical push attestations.
|
|||
|
|
|
|||
|
|
## September 7–11 reconciliation
|
|||
|
|
|
|||
|
|
The five original `fi_daily_brief` events remain intact in the append-only Hub
|
|||
|
|
log. The evidence file
|
|||
|
|
[`2026-09-14-brief-completion-reconciliation.json`](evidence/2026-09-14-brief-completion-reconciliation.json)
|
|||
|
|
records exact event IDs, original details and the audited remote commit. No
|
|||
|
|
missing brief is reconstructed or counted as successful.
|
|||
|
|
|
|||
|
|
After publishing this evidence to origin, append one correction per event:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python3 scripts/reconcile_brief_completions.py # review, read-only
|
|||
|
|
python3 scripts/reconcile_brief_completions.py --apply # append corrections
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
The helper validates every source event and missing path before writing. It
|
|||
|
|
uses stable idempotency keys and skips already recorded corrections. Correction
|
|||
|
|
events use `fi_daily_brief_reconciliation`, never the completion event type.
|
|||
|
|
|
|||
|
|
The verifier accepts a correction only when its event ID/date/path/disposition/
|
|||
|
|
reason matches the evidence JSON in a published ancestor commit. Default strict
|
|||
|
|
mode still fails on these missing dates. `--allow-reconciled` explicitly allows
|
|||
|
|
the acknowledged historical debt, prints every gap, and fails on any new gap or
|
|||
|
|
invalid attestation.
|
|||
|
|
|
|||
|
|
## Next-run readiness (2026-09-14 Berlin)
|
|||
|
|
|
|||
|
|
Temporal schedule `activity-schedule-3169ab1f-882b-59c7-9763-d014dc96f4fc` is
|
|||
|
|
unpaused; its next action is September 14 at 07:30 Europe/Berlin (05:30 UTC).
|
|||
|
|
The claim-loop service is active and was restarted after executor commit
|
|||
|
|
`11020e8` (push-before-completion). Keep its FI checkout synchronized before the
|
|||
|
|
run: the executor pushes its current branch and does not pull automatically.
|
|||
|
|
|
|||
|
|
The activity-core resolver also needs the publication contract: only an event
|
|||
|
|
with `pushed=true`, a full SHA, canonical path and matching `detail.date` may
|
|||
|
|
clear today's due bit. An event for yesterday delivered today must leave today
|
|||
|
|
due. The Git audit remains the authoritative check of actual origin objects;
|
|||
|
|
the resolver checks the executor's attestation.
|
|||
|
|
|
|||
|
|
This preflight is not evidence that the future scheduled run succeeded. Run
|
|||
|
|
the exact-date audit after publication and retain its result.
|