Generated-orientation drift gate
Status Type: Operational reference (not a canonical truth source)
Workflow: `.github/workflows/generated-truth.yml`
Purpose
ICN has generated orientation/reference artifacts that agents and developers use to navigate the repository. They are projections, not truth roots.
Their inputs/owners are resolved through `ops/state/truth/sources.json`, current repository content, and live Git/GitHub where appropriate. There is no universal canonical project-state document behind this gate.
Because generated artifacts can silently diverge from their inputs, this workflow makes that drift visible. It also retains one observational check over the legacy docs/STATE.md narrative so an existing sync block does not contradict merge history. That check protects historical/current narrative consistency; it does not make STATE.md a universal owner again.
What is checked
| Check | Artifact / invariant | Regenerate / response |
|---|---|---|
scripts/check-agent-context-spine.py |
Agent Context Spine is structurally valid and matches a fresh generation | python3 scripts/generate-agent-context-spine.py --write |
scripts/generate_repo_record.py --repo icn=. --check |
Periodic file-record snapshot matches the working tree | regenerate in a dedicated generated-only update |
scripts/check-claude-plugin.py |
Claude agent-pack skeleton remains portable | fix plugin source |
scripts/check-claude-plugin-root-resolution.py |
Plugin repo-root resolver works across supported layouts | fix resolver/tests |
scripts/generate-live-state-overlay.py --check --no-gh |
Owner-derived live-overlay generator is structurally valid and offline mode invents no GitHub state | fix generator; overlay output itself is never committed |
scripts/check-state-lag.py |
Legacy docs/STATE.md newest sync block does not assert "not merged/not on main" for work git history proves merged |
repair that narrative block; do not infer broader state ownership |
Generated artifact rule
Every committed generated orientation/reference artifact must either:
- have a reproducible freshness/validation check; or
- be explicitly declared on-demand with no committed snapshot.
The live-state overlay is in category 2. It is generated fresh, includes observation time, and labels its handoff pointer as memory-only.
Blocking versus observational
This workflow is an observational drift lane. Staleness normally emits warnings; a checker that cannot execute/parse its inputs is a real workflow failure.
Merge policy/branch protection is owned by ops/state/truth/policy.json plus live repository settings. Do not infer required-check status from this document.
Regenerating / validating
# Agent Context Spine
python3 scripts/generate-agent-context-spine.py --write
# Repo file-record snapshot
python3 scripts/generate_repo_record.py --repo icn=. --out docs/reference/project-index/generated
# Owner-derived live-state overlay: on demand, never commit the output
python3 scripts/generate-live-state-overlay.py
python3 scripts/generate-live-state-overlay.py --check --no-gh
# Historical STATE narrative consistency check
python3 scripts/check-state-lag.py
Interpretation
- Agent Context Spine / repo records tell you where things are, not what all facts mean.
- The live overlay tells you which owners/live sources to query, not a curated worldview.
- A green
check-state-lag.pysays only that the scannedSTATE.mdtext does not contradict known merge history in the narrow way the checker detects. - None of these checks upgrades a subsystem from implemented to integrated/deployed/production-ready.
Follow-up direction
As the modern owner model matures, prefer checks that compare generated projections directly with their registered inputs. Retain legacy narrative checks only while those narratives remain active enough that contradictory text would mislead readers.