# E72.1 — Durable one-hour mission and endurance accounting

## Controller

`cain_workforce/e72/longrun.py` persists missions, tasks, events and checkpoints in SQLite (WAL,
`synchronous=FULL`). On restart it returns tasks left in `RUNNING` to `READY` and continues the same mission
(counters and checkpoints are untouched).

Features:

- strategic objective, per-task dependencies, scheduled `due_at` times
- budget (`max_tasks`), wall-clock deadline, stall detection (`stall_s`)
- per-task execution and verification, with a digest check for deterministic tasks and an explicitly labelled
  structural check for host samples
- hash-chained checkpoints (`checkpoint.body`, `prev_hash`, `hash`), re-verifiable offline
- explicit separation of elapsed, execution, verification, productive and idle time

## The one-hour mission

`scripts/evolution72/long_mission.py --hours 1` runs:

- 2 chains × 120 host samples, one sample every 30 s (3600 s of wall-clock coverage)
- 12 repository audit waves over real `cain_workforce/*.py` files, each independently recomputed

The mission is duty-cycled by design: between scheduled samples the controller is idle. The evidence therefore
reports elapsed time and productive time separately. A one-hour mission is **not** one productive worker-hour.

Artifacts: `artifacts/e72/longrun/longrun.json`, `status.json`, `mission.db`.

## Endurance campaign

`scripts/evolution72/endurance.py` runs a real E68 cluster (coordinator process → node process → forked workers),
with the E72 resource controller capping concurrent CPU-bound work.

- Work: cryptographic evidence-chain computation (`hash_compute`) seeded from file material, plus repository
  integrity audits (`repo_audit`) over this repository.
- Verification: every task is recomputed by a different worker before it counts.
- Restart: the whole cluster is stopped at the midpoint and restarted on the same durable root; the mission
  continues and completes.
- Accounting categories: process-alive, execute, verification, verified productive, idle. Productive is derived
  from intervals, and the verifier enforces `productive <= alive`.

Artifacts: `artifacts/e72/endurance/endurance.json` and the E68 evidence bundle under `evidence/`.

## Definition of a verified productive hour

> An interval during which a worker actually executed or verified a task, where the task's mission reached
> `COMPLETED` and the result was independently recomputed.

Excluded: process-alive time, waiting for `due_at`, idle polling, failed tasks, unverified model output, and
overlapping intervals of the same worker. E68's historical 1,018.29 h and E71's 5.3181 h are inherited and are not
re-earned by this campaign.

## Targets not reached

24/72/168 h wall-clock missions and 500/1,000/5,000/10,000 verified productive hours remain future targets. This
run reports only what it measured.
