- Every corpus's `Readme.CAML` now composes the live corpus-intelligence overview by default ("structural default, narrative override"). A canonical, fixed-text "intelligence block" — three CAML component embeds (`insight-panel`, `document-graph`, `ask-across-docs`) that fetch live data at view time — is defined in `opencontractserver/corpuses/caml_intelligence.py` (`CAML_INTELLIGENCE_BLOCK`, `ensure_intelligence_block`, `build_default_readme_caml`, `has_intelligence_block`).
- Added a deterministic, non-LLM default README path: `CorpusService.ensure_readme_caml_default()` (`opencontractserver/corpuses/services/corpus_service.py`) creates a structural `Readme.CAML` (title + description + intelligence block) when a corpus has none, or appends the block to an existing article only if absent (idempotent, never clobbers author narrative).
- Wired the deterministic default into corpus creation (`config/graphql/corpus_mutations.py` `CreateCorpusMutation`) so a corpus created without LLM auto-branding still gets a structural `Readme.CAML`. A shared gate `corpus_readme_will_be_auto_branded()` (`opencontractserver/corpuses/services/branding.py`, also used by the `post_save` branding signal in `opencontractserver/corpuses/signals.py`) ensures the structural default and the LLM branding README never both fire on the same corpus.
- The LLM auto-branding README flow (`branding.py` `_generate_readme`) now post-processes the agent's article through `ensure_readme_caml_default()` so the intelligence block is present even if the agent omits the markers.
- Added the idempotent, re-runnable management command `python manage.py backfill_intelligence_block` (`--dry-run` supported) to backfill the block across all existing corpora — appending where missing and creating a structural README where none exists. The command only creates/updates `Readme.CAML` documents; it never deletes anything.
