Build Conformance Monitor

what is built vs. what the spec says — built · drifted · regressed · unspecced
spec mvp-scope-and-quality-gates.md · repo https://gitlab.com/telekomconsalting/dexguru/omni-agent-headless.git @ ca1b8b36f973 · generated 2026-06-19 12:12 UTC
4
Built
8
Partial
1
Stubbed
13
Not started
1
Out of scope

The four signals

Regression

0
none since last run

Built · not specced

7
  • tools/seo/refresh_loop.py, tools/seo/refresh_scan.py — Refresh/re-audit loop scanners present — that capability is Phase 3, not Phase 1; built ahead of spec.
  • tools/research/citation_tracker.py, tools/research/gsc.py — AI-citation tracking and Google Search Console tooling — citation-into-brief is Phase 5; GSC verification is a Phase-1 op step but the tool is broader than the spec calls for in Phase 1.
  • tools/publishers/upload_post.py, tools/publishers/sync_social.py — Distribution/syndication publishers exist — article syndication & video bridge are explicitly Phase 4 / out of Phase 1 scope.
  • tools/research/instagram_competitors.py, tools/research/scrapecreators_ig.py, tools/research/ig_normalize.py — Instagram competitor research — no spec line in the content-engine MVP at all (belongs to the video/social product).
  • tools/research/question_fanout.py, tools/research/entity_mapping.py, tools/research/winnability.py, tools/research/opportunity_score.py, tools/research/keyword_discover.py — Research toolset backing the brief stage — partially specced (brief-director composes them); listed for traceability, mostly legitimate Phase-1 support.
  • pipeline_defs/*.yaml (animated-explainer, cinematic, avatar-spokesperson, clip-factory, etc.) + remotion-composer/ — The full OpenMontage video-production system — the host product the content engine is grafted onto; no Phase-1 content-spec line, acknowledged only as 'OpenMontage video base'.
  • tools/analysis/plan_assessment.py, tools/analysis/virality_predictor.py — Content-plan scoring / virality gate for the video product — unrelated to the SEO article gates in this spec.

Specced · not built

13
  • Performance gate (Lighthouse / Core Web Vitals) (P1)
  • Editorial voice + humanizer + reads-human gate (P1)
  • Author entity pages (/author/<name>) + Person JSON-LD (P1)
  • Real author photo (replacing CSS-initials avatar) (P1)
  • OG / Twitter share image per article (P1)
  • IndexNow ping on publish (P1)
  • Search Console / Bing Webmaster verification + sitemap submission (P1)
  • Validation batch — one cluster of 10-15 assets generated & gated (P1)
  • Final manual interlink pass (close forward-only linking within the cluster) (P1)
  • Orchestrator rebuild (Python stage machine on raw Anthropic Messages API) (P2)
  • Orchestration Precision Monitor (8 invariants, CI conformance) (P2)
  • In-article media, article-to-video bridge, text-syndication, auto-publish (P4)
  • Authority — prop-firm comparison index, frameworks, citation-into-brief (P5)

DoD-fail

18
  • Rendering fix — serve designed page as a top-level document (de-iframe)
  • Deterministic page-gate checker wired to block promotion
  • Editorial voice + humanizer + reads-human gate
  • JSON-LD emission into the served document head
  • E8 knowledge base build + brief eat_block wiring
  • Serve /llms.txt (and /llms-full.txt) for real
  • Search Console / Bing Webmaster verification + sitemap submission
  • Per-host robots + near-free snippet directives
  • Collapse to one human approval (single-pause reconciliation)
  • Validation batch — one cluster of 10-15 assets generated & gated
  • Final manual interlink pass (close forward-only linking within the cluster)
  • Production go-live (one-time host/DNS/Helm plumbing)
  • Shared token-driven design system (one design, layout composition only)
  • Orchestrator rebuild (Python stage machine on raw Anthropic Messages API)
  • Continuous engine — keyword clustering, scheduled loop, production feed, refresh, relink
  • In-article media, article-to-video bridge, text-syndication, auto-publish
  • Authority — prop-firm comparison index, frameworks, citation-into-brief
  • Compliance (Sentinel) — provenance, AII, legal-defensibility gate

Conformance register

CapabilityPhaseStatusSignalsMapped codeEvidence
Rendering fix — serve designed page as a top-level document (de-iframe) · critical-path 1 Partial dod fail control-center/components/seo/feed/designed-page-frame.tsx, control-center/app/[...key]/page.tsx, control-center/components/seo/feed/iframe-auto-height.tsx, control-center/lib/seo-review-write.ts designed-page-frame.tsx:51-59 renders the page in a sandboxed iframe; [...key]/page.tsx:99 still uses DesignedPageFrame — the de-iframe rendering fix is not done
Deterministic page-gate checker wired to block promotion · the-work 1 Partial dod fail skills/pipelines/seo-article/references/aeo-page-spec.md, skills/pipelines/seo-article/design-director.md, control-center/lib/seo-review-write.ts seo-review-write.ts:74-82 promotes purely on status, ignoring the gate; the gate itself is an LLM checklist in aeo-page-spec.md + design-director.md:96
Performance gate (Lighthouse / Core Web Vitals) 1 Not started specced not built grep for lighthouse/PageSpeed/CWV finds only aeo_audit.py marking TTFB unmeasurable and a label in seo-modal.tsx; no performance gate exists
Editorial voice + humanizer + reads-human gate 1 Not started dod failspecced not built skills/pipelines/seo-article/draft-director.md draft-director.md uses generic craft; no humanizer/voice/AI-signal gate code exists in tools/ or control-center/
Deterministic article AEO audit gate (keep as-is) 1 Built tools/analysis/aeo_audit.py, pipeline_defs/seo-article.yaml tools/analysis/aeo_audit.py is a fully deterministic (no-LLM) four-axis auditor wired as the required tool at the audit stage (seo-article.yaml:122-142)
JSON-LD emission into the served document head 1 Partial dod fail skills/pipelines/seo-article/publish-director.md, control-center/app/[...key]/page.tsx publish-director.md:18 leaves author/date as TODO@publish; [...key]/page.tsx generateMetadata emits only title+canonical+robots
E8 knowledge base build + brief eat_block wiring · critical-path 1 Partial dod fail control-center/lib/kb/es.ts, control-center/app/admin/knowledge/page.tsx, control-center/lib/mcp/server.ts, skills/pipelines/seo-article/brief-director.md, tools/seo/site_seeds/e8-markets.json, tools/seo/build_site_pages.py KB infrastructure built (es.ts, MCP kb_* tools, /admin/knowledge, e8-markets seed) but content (author + proprietary data) is undelivered and lives on the gitignored PVC
Author entity pages (/author/<name>) + Person JSON-LD 1 Not started specced not built no /author route in control-center/app/; spec itself notes 'No author route exists today'
Real author photo (replacing CSS-initials avatar) 1 Not started specced not built no author-photo handling found; design author block is a name/bio text block only
OG / Twitter share image per article 1 Not started specced not built no openGraph/twitter image metadata and no og-image generation route found
Serve /llms.txt (and /llms-full.txt) for real 1 Stubbed dod fail skills/pipelines/seo-article/publish-director.md publish stage writes llms guidance text (publish-director.md:20) but no route serves /llms.txt
IndexNow ping on publish 1 Not started specced not built grep for indexnow/IndexNow returns nothing; approveDesign does no external indexing call
Search Console / Bing Webmaster verification + sitemap submission 1 Not started dod failspecced not built control-center/app/sitemap.xml/route.ts, tools/research/gsc.py sitemap.xml route present but no site-verification tokens; a gsc.py research tool exists (Phase 5-flavoured), not verification wiring
Per-host robots + near-free snippet directives 1 Partial dod fail control-center/app/robots.txt/route.ts, control-center/app/[...key]/page.tsx robots.txt/route.ts is per-host and correct, but the max-image-preview/max-snippet directives are not emitted anywhere
Canonical hygiene — one indexable document per article 1 Built control-center/app/[...key]/page.tsx, control-center/app/page.tsx, control-center/lib/embed-host.ts [...key]/page.tsx:59-69 sets a single canonical and gates index on partner host + non-draft + non-hidden; tech domain stays noindex
Collapse to one human approval (single-pause reconciliation) 1 Partial dod fail tools/seo/run_request.py, skills/pipelines/seo-article/brief-director.md, skills/pipelines/seo-article/publish-director.md, skills/pipelines/seo-article/design-director.md, control-center/lib/seo-review-write.ts runner enforces a single design-time pause (run_request.py:355-383) but brief-director.md:5/65 and publish-director.md:5 retain stale pause language the spec says to trim
Validation batch — one cluster of 10-15 assets generated & gated 1 Not started dod failspecced not built tools/research/keyword_prescreen.py, tools/seo/run_request.py, tools/research/topical_cluster.py generation tooling (run_request.py, keyword_prescreen.py, topical_cluster.py) exists but no validation cluster has been generated or approved; blocked on James's open decisions
Final manual interlink pass (close forward-only linking within the cluster) 1 Not started dod failspecced not built skills/pipelines/seo-article/publish-director.md, control-center/lib/published-pages.ts, tools/research/topical_cluster.py publish-director.md gates outbound cluster links (no orphans) but there is no backfill/relink; the manual pass is an unperformed operational step
Production go-live (one-time host/DNS/Helm plumbing) 1 Partial dod fail helm/envs/omni-cc-stage/omni-cc-app.yaml, tools/seo/build_site_pages.py, control-center/app/robots.txt/route.ts, control-center/app/sitemap.xml/route.ts helm omni-cc-app.yaml has staging host at ingressHosts[1] but no production host; build_site_pages.py exists but PVC build pending; staging is the rehearsal surface
Publishing model — engine generates and serves (no CMS hand-off) 1 Built control-center/lib/seo-review-write.ts, control-center/lib/published-pages.ts, control-center/lib/embed-host.ts, control-center/components/seo/feed/feed-shell.tsx, control-center/app/page.tsx engine is system of record: approveDesign promotes & serves; host-scoped white-label feed exists — but delivery is still iframed (see rendering-fix)
Shared token-driven design system (one design, layout composition only) 1 Built dod fail skills/pipelines/seo-article/references/e8-design-tokens.css, skills/pipelines/seo-article/references/section-catalog.md, skills/pipelines/seo-article/design-director.md e8-design-tokens.css ships the engine emerald-on-near-black theme as the single token source; section-catalog drives layout — but whether E8FN should be canonical is unresolved
Orchestrator rebuild (Python stage machine on raw Anthropic Messages API) 2 Not started dod failspecced not built tools/seo/run_request.py run_request.py is a single headless-claude subprocess runner; the Phase 2 orchestrator rebuild is not started
Orchestration Precision Monitor (8 invariants, CI conformance) 2 Not started specced not built no orchestration-precision-monitor code; this BCM register is a static-evidence stand-in, not the runtime OPM
Continuous engine — keyword clustering, scheduled loop, production feed, refresh, relink 3 Partial dod fail tools/seo/refresh_loop.py, tools/seo/refresh_scan.py, tools/research/topical_cluster.py, tools/research/keyword_discover.py refresh_loop.py/refresh_scan.py + clustering/discovery tools exist as early Phase-3 code but are not wired; marked Phase 3 by the spec
In-article media, article-to-video bridge, text-syndication, auto-publish 4 Not started dod failspecced not built tools/publishers/upload_post.py, tools/publishers/sync_social.py spec defers all media/video/syndication to Phase 4; only generic publisher tools exist (video product)
Authority — prop-firm comparison index, frameworks, citation-into-brief 5 Not started dod failspecced not built tools/research/citation_tracker.py Phase 5 capabilities not built; citation_tracker.py is early scaffolding
Compliance (Sentinel) — provenance, AII, legal-defensibility gate 9 Out of scope dod fail skills/pipelines/seo-article/brief-director.md spec defers Sentinel to Phase 9; seo_brief compliance block intentionally empty in Phase 1

Open questions (routed to a human)

Design system canonical theme: e8-design-tokens.css ships the engine dark-emerald theme (#2fe3a3 on #05080a), the opposite of E8FN's locked 'Editorial Brutalism' cream theme. Which is canonical? Choosing E8FN means rewriting the token file + restyling the section catalog (real build work not currently done).
Page gate ambiguity: the only 'page gate' is aeo-page-spec.md executed by the design-stage LLM and asserted into design_review.json. There is no deterministic parser script and approveDesign does not consult the gate. Confirm the deterministic page gate is genuinely unbuilt (not hiding in another module) — I found none.
design-director.md step 4 labels the page gate '(Phase 4)' while §3.1 makes the deterministic page gate Phase-1 'the work'. Is the Phase-4 label a stale annotation (images activate in Phase 4) or intended deferral of the gate itself?
E8FN word-count bands vs SERP-derived sizing: draft-director.md still targets the SERP-derived word_count_distribution; the spec's E8FN bands are an open decision pending James. Which governs the validation batch?
Elasticsearch in production: the KB code requires a reachable ES backend (no fallback) and the e8-markets KB content lives on the gitignored runner PVC. Confirm whether ES is actually deployed/reachable in prod and the KB is populated — it cannot be verified from the repo.

Owner digest

Plain-language weekly digest
# Build Conformance Digest — 2026-06-19 12:12 UTC

**4 Built · 8 Partial · 1 Stubbed · 13 Not started · 1 Out of scope** against `mvp-scope-and-quality-gates.md` at `ca1b8b36f973`

## Movement
- JSON-LD emission into the served document head moved Stubbed → Partial.
- Per-host robots + near-free snippet directives moved Not started → Partial.
- Production go-live (one-time host/DNS/Helm plumbing) moved Not started → Partial.

## Built, no spec line (scope check)
- New: tools/seo/refresh_loop.py, tools/seo/refresh_scan.py with no spec line — scope check needed. Refresh/re-audit loop scanners present — that capability is Phase 3, not Phase 1; built ahead of spec.
- New: tools/research/citation_tracker.py, tools/research/gsc.py with no spec line — scope check needed. AI-citation tracking and Google Search Console tooling — citation-into-brief is Phase 5; GSC verification is a Phase-1 op step but the tool is broader than the spec calls for in Phase 1.
- New: tools/publishers/upload_post.py, tools/publishers/sync_social.py with no spec line — scope check needed. Distribution/syndication publishers exist — article syndication & video bridge are explicitly Phase 4 / out of Phase 1 scope.
- New: tools/research/instagram_competitors.py, tools/research/scrapecreators_ig.py, tools/research/ig_normalize.py with no spec line — scope check needed. Instagram competitor research — no spec line in the content-engine MVP at all (belongs to the video/social product).
- New: tools/research/question_fanout.py, tools/research/entity_mapping.py, tools/research/winnability.py, tools/research/opportunity_score.py, tools/research/keyword_discover.py with no spec line — scope check needed. Research toolset backing the brief stage — partially specced (brief-director composes them); listed for traceability, mostly legitimate Phase-1 support.
- New: pipeline_defs/*.yaml (animated-explainer, cinematic, avatar-spokesperson, clip-factory, etc.) + remotion-composer/ with no spec line — scope check needed. The full OpenMontage video-production system — the host product the content engine is grafted onto; no Phase-1 content-spec line, acknowledged only as 'OpenMontage video base'.
- New: tools/analysis/plan_assessment.py, tools/analysis/virality_predictor.py with no spec line — scope check needed. Content-plan scoring / virality gate for the video product — unrelated to the SEO article gates in this spec.

## Specced, not built (backlog)
- Performance gate (Lighthouse / Core Web Vitals) still Not started (P1).
- Editorial voice + humanizer + reads-human gate still Not started (P1).
- Author entity pages (/author/<name>) + Person JSON-LD still Not started (P1).
- Real author photo (replacing CSS-initials avatar) still Not started (P1).
- OG / Twitter share image per article still Not started (P1).
- IndexNow ping on publish still Not started (P1).
- Search Console / Bing Webmaster verification + sitemap submission still Not started (P1).
- Validation batch — one cluster of 10-15 assets generated & gated still Not started (P1).
- Final manual interlink pass (close forward-only linking within the cluster) still Not started (P1).
- Orchestrator rebuild (Python stage machine on raw Anthropic Messages API) still Not started (P2).
- Orchestration Precision Monitor (8 invariants, CI conformance) still Not started (P2).
- In-article media, article-to-video bridge, text-syndication, auto-publish still Not started (P4).
- Authority — prop-firm comparison index, frameworks, citation-into-brief still Not started (P5).

## In code, below the bar (DoD-fail)
- Rendering fix — serve designed page as a top-level document (de-iframe): Served as top-level document, not iframed; Head tags injected server-side.
- Deterministic page-gate checker wired to block promotion: Deterministic script (not LLM checklist); Hard-fail per checklist item; Image alt/width/height/filename checks; page_gate record replacing LLM scores; approveDesign refuses promotion on any hard fail.
- Editorial voice + humanizer + reads-human gate: E8FN voice loaded into draft stage; Humanizer pass; Pre-publication reads-human/E8FN discipline gate.
- JSON-LD emission into the served document head: Resolve author/date TODO@publish from KB; Emit JSON-LD + meta/og into served head; Validate JSON-LD in the page gate; generateMetadata carries description/og/JSON-LD.
- E8 knowledge base build + brief eat_block wiring: Named author bio ingested; Site facts mined from site_pages.json; Proprietary data/frameworks ingested as sourced entries.
- Serve /llms.txt (and /llms-full.txt) for real: /llms.txt route serves article list; guidance vs served.
- Search Console / Bing Webmaster verification + sitemap submission: GSC/Bing site verification.
- Per-host robots + near-free snippet directives: max-image-preview:large / max-snippet:-1.
- Collapse to one human approval (single-pause reconciliation): Stale pause language trimmed from brief/publish directors.
- Validation batch — one cluster of 10-15 assets generated & gated: One cluster picked & pre-screened; E8FN word-count bands adopted; Budget cap raised/removed for batch; E8FN voice loaded at draft; Cluster gated + human-approved.
- Final manual interlink pass (close forward-only linking within the cluster): Manual interlink pass performed; Re-gate touched pages on re-approval.
- Production go-live (one-time host/DNS/Helm plumbing): Production host CNAME + ingressHosts entry; build_site_pages.py run on prod volume; robots/sitemap/canonical/JSON-LD verified on partner host.
- Shared token-driven design system (one design, layout composition only): Token audit (no raw hex/px); Canonical theme decided (engine vs E8FN).
- Orchestrator rebuild (Python stage machine on raw Anthropic Messages API): Python stage machine on Messages API.
- Continuous engine — keyword clustering, scheduled loop, production feed, refresh, relink: Scheduled keyword→article loop; Production feed search/nav/IA; Refresh loop; Continuous relink/backfill.
- In-article media, article-to-video bridge, text-syndication, auto-publish: Article media / video bridge / syndication.
- Authority — prop-firm comparison index, frameworks, citation-into-brief: Comparison index + citation-into-brief.
- Compliance (Sentinel) — provenance, AII, legal-defensibility gate: Compliance gate / AII / provenance.

## Open questions (ambiguous mapping)
- Design system canonical theme: e8-design-tokens.css ships the engine dark-emerald theme (#2fe3a3 on #05080a), the opposite of E8FN's locked 'Editorial Brutalism' cream theme. Which is canonical? Choosing E8FN means rewriting the token file + restyling the section catalog (real build work not currently done).
- Page gate ambiguity: the only 'page gate' is aeo-page-spec.md executed by the design-stage LLM and asserted into design_review.json. There is no deterministic parser script and approveDesign does not consult the gate. Confirm the deterministic page gate is genuinely unbuilt (not hiding in another module) — I found none.
- design-director.md step 4 labels the page gate '(Phase 4)' while §3.1 makes the deterministic page gate Phase-1 'the work'. Is the Phase-4 label a stale annotation (images activate in Phase 4) or intended deferral of the gate itself?
- E8FN word-count bands vs SERP-derived sizing: draft-director.md still targets the SERP-derived word_count_distribution; the spec's E8FN bands are an open decision pending James. Which governs the validation batch?
- Elasticsearch in production: the KB code requires a reachable ES backend (no fallback) and the e8-markets KB content lives on the gitignored runner PVC. Confirm whether ES is actually deployed/reachable in prod and the KB is populated — it cannot be verified from the repo.

## Mapping flip-flops
- `control-center/lib/seo-review-write.ts`: page-gate-deterministic → rendering-fix (mapping changed since last run).
- `skills/pipelines/seo-article/references/aeo-page-spec.md`: page-gate-deterministic → deterministic-page-gate (mapping changed since last run).
- `skills/pipelines/seo-article/design-director.md`: page-gate-deterministic → deterministic-page-gate (mapping changed since last run).
- `control-center/lib/seo-review-write.ts`: page-gate-deterministic → deterministic-page-gate (mapping changed since last run).
- `skills/pipelines/seo-article/draft-director.md`: editorial-voice-gate → editorial-voice-reads-human-gate (mapping changed since last run).
- `control-center/app/[...key]/page.tsx`: rendering-fix → jsonld-emission (mapping changed since last run).
- `control-center/lib/kb/es.ts`: e8-kb-population → e8-knowledge-base (mapping changed since last run).
- `control-center/app/admin/knowledge/page.tsx`: e8-kb-population → e8-knowledge-base (mapping changed since last run).
- `skills/pipelines/seo-article/brief-director.md`: e8-kb-population → e8-knowledge-base (mapping changed since last run).
- `tools/seo/build_site_pages.py`: production-go-live → e8-knowledge-base (mapping changed since last run).
- `skills/pipelines/seo-article/publish-director.md`: jsonld-emission → llms-txt-served (mapping changed since last run).
- `control-center/app/sitemap.xml/route.ts`: robots-sitemap-canonical → gsc-bing-verification (mapping changed since last run).
- `control-center/app/robots.txt/route.ts`: robots-sitemap-canonical → robots-snippet-directives (mapping changed since last run).
- `control-center/app/[...key]/page.tsx`: rendering-fix → robots-snippet-directives (mapping changed since last run).
- `control-center/app/[...key]/page.tsx`: rendering-fix → canonical-hygiene (mapping changed since last run).
- `control-center/lib/embed-host.ts`: robots-sitemap-canonical → canonical-hygiene (mapping changed since last run).
- `skills/pipelines/seo-article/brief-director.md`: e8-kb-population → single-approval-wiring (mapping changed since last run).
- `skills/pipelines/seo-article/publish-director.md`: jsonld-emission → single-approval-wiring (mapping changed since last run).
- `skills/pipelines/seo-article/design-director.md`: page-gate-deterministic → single-approval-wiring (mapping changed since last run).
- `control-center/lib/seo-review-write.ts`: page-gate-deterministic → single-approval-wiring (mapping changed since last run).
- `tools/seo/run_request.py`: single-approval-wiring → validation-batch (mapping changed since last run).
- `tools/research/topical_cluster.py`: cluster-fit-outbound-linking → validation-batch (mapping changed since last run).
- `skills/pipelines/seo-article/publish-director.md`: jsonld-emission → manual-interlink-pass (mapping changed since last run).
- `control-center/lib/published-pages.ts`: cluster-fit-outbound-linking → manual-interlink-pass (mapping changed since last run).
- `tools/research/topical_cluster.py`: cluster-fit-outbound-linking → manual-interlink-pass (mapping changed since last run).
- `helm/envs/omni-cc-stage/omni-cc-app.yaml`: e8-kb-population → production-go-live (mapping changed since last run).
- `control-center/app/robots.txt/route.ts`: robots-sitemap-canonical → production-go-live (mapping changed since last run).
- `control-center/app/sitemap.xml/route.ts`: robots-sitemap-canonical → production-go-live (mapping changed since last run).
- `control-center/lib/seo-review-write.ts`: page-gate-deterministic → publishing-system-of-record (mapping changed since last run).
- `control-center/lib/published-pages.ts`: cluster-fit-outbound-linking → publishing-system-of-record (mapping changed since last run).
- `control-center/lib/embed-host.ts`: robots-sitemap-canonical → publishing-system-of-record (mapping changed since last run).
- `skills/pipelines/seo-article/references/e8-design-tokens.css`: design-system-tokens → visual-design-system (mapping changed since last run).
- `skills/pipelines/seo-article/references/section-catalog.md`: design-system-tokens → visual-design-system (mapping changed since last run).
- `skills/pipelines/seo-article/design-director.md`: page-gate-deterministic → visual-design-system (mapping changed since last run).
- `tools/seo/run_request.py`: single-approval-wiring → orchestrator-rebuild (mapping changed since last run).
- `tools/seo/refresh_loop.py`: refresh-relink-loop → continuous-engine (mapping changed since last run).
- `tools/seo/refresh_scan.py`: refresh-relink-loop → continuous-engine (mapping changed since last run).
- `tools/research/topical_cluster.py`: cluster-fit-outbound-linking → continuous-engine (mapping changed since last run).
- `tools/research/keyword_discover.py`: keyword-clustering-scheduler → continuous-engine (mapping changed since last run).
- `skills/pipelines/seo-article/brief-director.md`: e8-kb-population → compliance-sentinel (mapping changed since last run).