Skip to main content

Automations

The automation layer is the repo’s operating system. The repo is ownerless and self-governed – there is no single human responsible for keeping content fresh, links unbroken, navigation in sync, or generated artefacts aligned with their sources. The automation layer fills that role. It validates new contributions before they land, regenerates derived artefacts the moment a source changes, ingests live data from external services, repairs deterministic drift, and surfaces what it cannot fix as backlog. This page documents what’s live as of 2026-05-23. The canonical published framework is at docs-guide/frameworks/github-actions.mdx (with the internal working spec at .github/workspace/framework-canonical.md).

The 4-tier composable architecture (D-GOV-08, 2026-05-22)

A major refactor on 2026-05-22 consolidated 53 standalone workflows → 11 active workflows under a 4-tier composable model. Workflow YAML files are dispatchers only; the typed work lives in scripts. The type classification comes from what the script does, not the workflow filename. Smoke test passing 66/66 dispatchers per framework-canonical.md Status line. The refactor locked 18 decisions (D-ACT-01..10 + D-GOV-01..08) in .github/workspace/decisions-log.mdx.

The 11 active workflows

6 concern dispatchers (dispatch-{concern}.yml)

Each follows an identical 4-mode shape per D-ACT-08 + D-GOV-08:
  1. PR check (pull_request) – dispatch-{concern}-check.js --staged
  2. Post-merge (push to docs-v2) – dispatch-{concern}-generate.js --write (or -sync.js)
  3. Scheduled (cron) – dispatch-{concern}-update.js or -scan.js with FLAGS pattern (⚠️ see §The cron-is-dry-run bug)
  4. Manual repair (workflow_dispatch with mode=manual) – dispatch-{concern}-repair.js with FLAGS pattern
dispatch-governance.yml has an additional fifth job: pipeline-tests runs operations/tests/integration/pipeline-smoke-test.js (66/66 dispatcher smoke test) + pipeline-functional-tests.js (synthetic violation cycles per D-GOV-03). dispatch-health.yml and dispatch-brand.yml open a PR on manual repair via peter-evans/create-pull-request@v7.

5 governance interfaces (interface-governance-*.yml)

All 5 interfaces are tagged # pipeline: P7 in their header comment – distinct from the P2-P6 dispatcher taxonomy.

Pipeline patterns (A–G)

Every pipeline follows one of these shapes. Source: .github/workspace/framework-canonical.md. The gold standard implementation is the contracts pipeline (Pattern A with shadow verification) – daily cron + verification-only shadow + bytecode auth against Arbitrum + Ethereum + health-check artefacts + incident issue creation + publish gate requiring --check rerun.

Operations scripts taxonomy

321 active scripts under operations/scripts/, 38 in archive. Every script declares @type / @concern / @niche via an 11-tag JSDoc header. JSDoc compliance (sampled 2026-05-23):
  • 327 of 321 active scripts have @purpose (canonical) – basically 100%
  • 81% have @type, 81% have @concern (sampled 100)
  • 45 scripts repo-wide still use retired @category
  • 4 scripts use retired @domain
  • The retired tags (@category, @domain, @needs, @purpose-statement, @owner) are explicitly banned per docs-guide/policies/script-governance.mdx lines 195-205
The previously documented “218 non-compliant scripts” figure (from gap-analysis.mdx as of 2026-05-14) is stale. Actual non-compliance as of 2026-05-23 is ~45-50 scripts with retired tags – a 4× improvement from the documented baseline.

Hook pipeline (.githooks/)

5 active hooks + 4 docs + 4 utility files in .githooks/. Hard gates run on every commit, scoped to a 60-second runtime budget. Bypass policy in .githooks/BYPASS.md. Pre-commit has an undocumented carve-out: allows deletion without --trailer "allow-deletions=true" if the blob hash matches a v2/x-archived/ follow-up.

Gate layers

Ownerless automation contract

Each production automation must declare (per docs-guide/policies/ownerless-governance.mdx): Post-D-ACT-10 (2026-04-05): the canonical registry is operations/governance/config/repo-governance-surfaces.json with 5 unified surfaces, 4 ownerless-ready, 1 advisory (github-workspace-governance). The file’s bridge_mode is "retired" and legacy_bridge_inventory is empty – migration complete. The legacy 8-entry ownerless-governance-surfaces.json remains on disk for reference but is superseded.

Locked decisions (18)

10 D-ACT decisions + 8 D-GOV decisions, split across two logs by date: Pipeline tag taxonomy (8 tags): P2 (PR required), P3 (PR advisory), P4 (post-merge), P5 (scheduled read-only), P5-auto (scheduled writes), P6 (self-heal), manual, event-driven. Concern taxonomy (7): integrations, copy, maintenance, health, discoverability, governance, brand. Type taxonomy (7): integrator, generator, validator, audit, remediator, dispatch, interface.

Recently shipped (May 2026)

Veracity dispatcher tranche

Three new dispatchers under operations/scripts/dispatch/content/veracity/ (type dispatch, concern health, niche veracity) close the long-standing “veracity-pass DRAFT blocks Phase 6” gap noted in the Checks Framework: These are manual-pipeline (not yet on cron); inputs/outputs registered under workspace/research/claims/ + workspace/reports/. Unit-tested under operations/tests/unit/.

Local social-feed dispatcher

operations/scripts/dispatch/content/data/run-solutions-social-fetch.js (type dispatch, concern integrations, niche social-feeds) mirrors dispatch-social-feeds.yml for local workstation use: loads .env, supports --mode forum,youtube, --dry-run, --skip discord. Iterates the 7 fetchers under operations/scripts/integrators/copy/social-feeds/. Local-only, not in any GitHub Actions workflow (a deliberate contributor tool, not a duplicate CI surface). Closes the gap where contributors couldn’t fetch live forum/discord/blog/YouTube/GitHub data on their workstation before pushing snippets that depended on freshly-generated outputs.

Known gaps

Cron-is-dry-run-by-default bug – FIXED 2026-05-25

Status: Fixed in commit e42946cdf on docs-v2-dev-draft. Pending merge to docs-v2. Every dispatch-{concern}.yml scheduled job previously had this pattern:
The schedule event did not pass inputs.dry_run – it was empty, never the literal string "false". So FLAGS stayed empty and the script ran with no --write --verify. Cron physically could not trigger the write mode. Only workflow_dispatch with explicit dry_run: false actually wrote. Net effect (pre-fix): the entire daily cron schedule was check-only theatre. Root cause of:
  • Contract addresses last written 2026-05-04 (19 days stale on 2026-05-23) despite _health-checks.json confirming the pipeline ran daily
  • llms.txt + sitemap-ai.xml 47 days stale (no manual dispatch with dry_run: false)
  • generate-og-images.js + generate-seo.js classified “manual-only” in 2026-03-30 P0 flag – they’re CI-wired but cron defaulted to dry-run
Fix shipped: inverted FLAGS default in all 6 dispatch-{concern}.yml (FLAGS="--write --verify"; if ... == "true" then FLAGS=""). Manual-repair jobs deliberately unchanged (safe-by-default for human-triggered repairs). Post-merge jobs unaffected (already hardcode --write).

Archive sprawl

Three archive lanes in .github/:
  1. .github/workflows/deprecated/ (1 file: update-blog-data.yml)
  2. .github/workflows/x-archive/ (61 files: 56 .archived + 5 non-.archived)
  3. .github/x-archive/ (separate at .github root, contents not enumerated)
The script-framework declares one lane (x-archive/). Plus operations/scripts/archive/ and operations/scripts/x-archive/ – two more for scripts.

Path drift from pre-refactor docs

.github/scripts/ is intentionally empty per D-ACT-06 (migration locked 2026-04-04). Stale references in older docs need updating:
  • Contracts pipeline doc references .github/scripts/fetch-contract-addresses.js. Current path: operations/scripts/integrators/maintenance/contracts/fetch-contract-addresses.js.
  • agent-governance-framework.mdx lines 137 + 228 reference validators/governance/check-agent-docs-freshness.js; actual path is validators/governance/compliance/check-agent-docs-freshness.js (missing /compliance/ subfolder). AGENTS.md line 98 has the right path.

Published framework lags the 2026-05-22 refactor

.github/workspace/framework-canonical.md says: “Canonical published framework: docs-guide/frameworks/github-actions.mdx – read that first.” But the published framework likely predates the 2026-05-22 refactor. Sync state undocumented.

Stale governance map

node operations/scripts/generators/governance/reports/generate-repo-governance-status.js --check reports docs-guide/repo-ops/config/repo-governance-map.mdx is stale. Self-detection works; auto-repair doesn’t run.

.githooks orphan + dead code

  • verify.sh is defined with 7 internal checks but not invoked by active pre-commit – dead enforcement (per SLICE-03)
  • pre-commit-no-deletions is unwired dead code per its own JSDoc (@pipeline manual – not yet in pipeline)
  • .githooks/post-commit.disabled has NO JSDoc header at all
  • .githooks/script-index.md only catalogues 3 of 7 hook scripts (generator filter broken)

actions-library/ per-action MDX catalogue not enumerated

.github/workspace/actions-library/{type}/{concern}/{niche}/*.mdx – one MDX file per atomic action. Mostly auto-generated from script JSDoc headers. Full enumeration not done; freshness vs source not verified.

Phase 4 workflow consolidation pending

framework-canonical.md Status line says “Phase 4 consolidation shipped” but Phase 6 (renames, inline-script extraction, consolidation) is explicitly noted as pending per the 2026-04-08 component-governance row in CLAUDE.md.
Last modified on June 2, 2026