assembly-economics/checkpoints/EXECUTION_DECLARATION.md
tegwick 2521955749 Pin checkpoint runs to web-fetcher v0.2.0; add --cache/--replay
run_checkpoint.py refuses web-fetcher versions other than 0.2.0, records the
version in record and summary, and passes --cache/--replay through to
run_spec. Verified: live run with --cache and offline --replay give identical
observations. Execution declaration, AGENTS.md and ASSEMBLY-WP-0014 updated.
Requested by web-fetcher (WEBFETCH-WP-0003-T03).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 193986@bnt-lap001
Assistant-Session: 585bfbea-320e-47b3-8c0e-bc1513a53307
2026-10-19 14:47:15 +02:00

4.4 KiB

Execution declaration: assembly-checkpoint

Status: approved by the founder, 2026-10-13 (ASSEMBLY-WP-0014-T01). The open questions below still need rein-aharness and glas-harness answers. Purpose: the per-definition declaration that rein-aharness requires before a scheduled definition can leave legacy, profile-absent routing (rein-aharness/docs/legacy-runtime-inventory.md, migration step 2). It replaces the legacy route that is allowed until 2026-12-31 (AGENT_HARNESS_LEGACY_APPROACHES_UNTIL).

Approval: the founder approves this declaration. The approval is recorded as an addendum to docs/decisions/2026-10-12-checkpoint-origin-publication.md.

Definitions covered

activity-core: assembly-checkpoint-setup-daily (until 2026-12-31), assembly-checkpoint-monthly-2026 (until 2026-12-31), assembly-checkpoint-quarterly, assembly-checkpoint-annual. Executor today: the rein-aharness approach assembly-checkpoint (rein-aharness commit 06bd08c).

Nature of the work

Mostly deterministic: fetch, render and commit. One optional agentic step: drafting the assessment paragraph through llm-connect. The runner rejects any assessment that contains a number not present in the fetched data. Following migration step 3, the deterministic part fits a tenant-owned blueprint. The assessment can run without a Glas profile only if it stays this narrow; otherwise it belongs behind a versioned Glas profile. Decision for rein-aharness and glas-harness: see "Open questions".

Declaration

Field Value
Input schema --kind light|full, --date YYYY-MM-DD (Europe/Berlin day; default today). No other inputs.
Repository input coulomb/assembly-economics at a verified Forgejo commit (main); coulomb/web-fetcher at tag v0.2.0 (pinned 2026-10-19; the runner refuses any other version, WEB_FETCHER_VERSION in run_checkpoint.py).
Code executed checkpoints/run_checkpoint.py (standard library) and web_fetcher (standard library). No package installation.
Allowed write paths checkpoints/<year>/<date>-<kind>.md, checkpoints/data/<date>-<kind>.jsonl. Nothing outside checkpoints/. Optional --cache DIR (fetched bytes for offline --replay) must point to executor-local scratch outside the repository; it is not committed.
Network egress Hosts in checkpoints/sources.json (www.census.gov, ec.europa.eu, fred.stlouisfed.org, ghoapi.azureedge.net, api.worldbank.org, api.openalex.org) and the llm-connect endpoint. Nothing else.
Model route llm-connect, one request per run, prompt built only from fetched observations. Optional: --no-llm produces a valid record without it.
Credential route None for data sources (all public). llm-connect access per its own route (warden route find "llm-connect inference"). Forgejo push credential per the publish lane (below). No secrets in the repository or the record.
Completion event Exit 0 and a JSON summary line {"status": "ok"|"out-of-window", ...}. out-of-window is a successful no-op.
Commit policy One commit per run, message Checkpoint <date> (<kind>) — activity-core, author rein-aharness, containing only the allowed write paths.
Publication policy Push to coulomb/assembly-economics main: fast-forward only; on rejection rebase once if all unpublished commits stay within checkpoints/; never force. (Unchanged from the 2026-10-12 decision; to move into a path-scoped grant in the governed publish lane.)
Rollback Revert the checkpoint commit. Records are append-only by convention, so a revert is visible. Disable a definition by enabled: false in the activity-core projection.
Idempotency Same date and kind overwrite the same two files. A second run on one day produces no diff if the sources did not change.
Failure handling Source errors become not_found / error rows in the record; the run still succeeds. A rejected assessment is recorded as skipped.

Open questions for rein-aharness / glas-harness

  1. Should the deterministic part become a tenant-owned blueprint here, with the assessment step a separate Glas-profiled call, or should one profile cover both?
  2. Where does the path-scoped publish grant live (coulomb/assembly-economics, checkpoints/**)? Is the Freedom Intelligence brief grant the template?
  3. The legacy inventory lists four committed definitions. The assembly-checkpoint-* definitions were added on 2026-10-12. Are they in the inventory's migration sequence?