- Pipeline_Schema_Installer: run_stages gains human_modified + stale
(stale is a COLUMN not a status: rows stay 'done' so resume code can
never silently re-run them — CPO guardrail 3 by construction);
run_decisions gains human_modified; new INSERT-only stage_inputs table
(edit forks as immutable versions + idea seeds for re-run-from-here).
All dbDelta-idempotent; PRAUTOBLOGGER_DB_VERSION 1.1.0 -> 1.3.0 (the
constant never carried the documented 1.2.0) so the existing
admin_init/cron self-healing migration path fires everywhere.
- Run_Stage_State split (M2 pattern, was 313 lines): pipeline write
bodies moved verbatim to Run_Stage_Writes (public API unchanged via
thin proxies); done() now clears stale on fresh output with a
half-migrated-schema retry (Cost_Tracker v0.18.0 pattern); new
item-scoped read stages_for_item(). Operator-action mutations
(restart/mark_stale/demote_to_pending) isolated in
Run_Stage_Rerun_State — the only code allowed to demote a done row.
- Audit_Writer::flag_decisions_human_modified() (guardrail 2 on
run_decisions). Run_Reaper retention prunes human fork bodies (seeds
kept). Uninstall covers the new table + rerun cron hooks.
Agent-Session: engineer-prab-m3-20260612
Pipeline v2 Phase 1, commit 4/4. Run_Stage_State persists per-run
per-stage state keyed run_id + stage + agent_role + item_key (item_key
scopes articles because one run_id spans a whole batch; agent_role is
the Phase-2 quorum dimension, schema-only). Done stages snapshot output
and are reused on re-entry — writer stages via
Content_Generator::set_run_item, the review via its stored verdict, a
published item skipped outright — never re-run, never re-charged. Post
creation is keyed by _prautoblogger_run_id + new _prautoblogger_idea_hash
(check-before-insert in Publisher) so retries cannot duplicate posts.
Run-level research/analysis checkpoints + done/failed lifecycle marks
ride Pipeline_Runner/Executor (incl. orphan-abort + budget-abort paths).
Run_Reaper rides the EXISTING #19 daily cron: stages stuck running >2x
expected stage wall-clock and runs silent >2x expected run wall-clock ->
failed (filterable), open stages reaped, queryable as 'incomplete'.
Retention: request_json + stage output payloads NULLed after R days, R
from the new Audit Payload Retention setting (default constant 14,
0 = keep forever, no literal at point of use). Audit_Writer records
editorial verdicts (run_decisions) and per-article kept sources
(run_sources) for new runs.
Under-300: status-transient/summary helpers extracted verbatim to
Pipeline_Status (Pipeline_Runner 271; removed the worker's duplicate).
Agent-Session: pipeline-v2-phase1-engineer-20260612