Skip to content

Reference

Diagrams and posters

5 min readUpdated

Page actions

ChatGPT and Claude are third-party services. The link gives them this page's public address and a short instruction. This site records nothing.

The wiki's large process posters — what each one shows, how they are built from a declarative spec, the visual spec every poster must meet, and how to add one.

The wiki has two kinds of diagram. Mermaid fences in any page render to accessible SVG at build time in the brand palette (on GitHub, the same fence renders with GitHub’s own theme). Posters are large, step-by-step process pictures that the site turns into a walkthrough: press Next and the picture builds up one step at a time with a caption and a link to the page that explains it; Full size opens a zoomable, pannable view. Every poster is also a plain image on GitHub.

The posters

#PosterShowsPage
01System landscapepeople, the three surfaces, the API, the pinned database, the sources, and CI as the only path to productionArchitecture overview
02Three repositories and the pins that join themdata → platform → app hand-offs by lock file, one version numberThree repositories and pins
03Anatomy of a line recorda PDF page → units → the 23 columns of the lines table; what the FTS index reads and its bm25 weightsAnatomy of a line record
04Corpus pipeline and gatesrebuild_all.sh stage by stage: extraction, reconcile, golden suite, atomic installs, the database layers, the integrity gate, CI on every pull requestCorpus pipeline and gates
05The search waterfalldo_search as coded: normalise, mixed script, explicit modes, the twelve auto-mode tiers, the rankingSearch waterfall
06The fold in three placesthe five steps of roman_norm, its three homes, the 24,719 golden vectorsThe Roman fold
07The verification enginenormalise, candidates, scoring, the verdict ladder with the code’s thresholds, the Ang modifierVerification engine
08Request lifecycleGET /api/ang/712 from the browser to SQLite and back, in code orderRequest lifecycle
09Bounded contexts and the gatewayfive contexts, module slicing, routing generated from the code, the proofsBounded contexts and the gateway
10The CI gates mapevery workflow and job on a pull request, what the rulesets require, the deploy chains, the schedulesCI gates
11The delivery pipelinebranch → PR → staging → release PR → production → tag → the app follows; rollback; the watchersBranching & delivery flow
12iOS release and integrityvendor sync, one number, the archive’s gates, the ledger, the launch-integrity and bookmarks laddersDatabase pair and launch integrity
13The structure of the GranthAngs 1–1430 as one bar: the opening, the thirty-one raags, the closing sections, the Vaars, the voices — every number from the pinned databaseThe structure

All thirteen posters of the plan are in place.

How a poster is made

A poster is generated from a small declarative spec, not drawn by hand: docs-site/posters/NN-slug.mjs lists the nodes (with a kind, a position and text), the edges, the groups and the steps; the poster kit turns that into the SVG and the steps sidecar under docs/diagrams/posters/. The kit (docs-site/posters/kit.mjs) draws on a 1200-px canvas for the ~630 px the page gives a poster on a 1280-px screen, so its smallest text shows at 13 px or more, and it routes every line at right angles around the boxes. The generated files are committed so GitHub and the docs_check gate can read them; CI fails if a committed poster differs from its spec (node scripts/build-posters.mjs --check).

Terminal window
cd docs-site
node scripts/build-posters.mjs # (re)generate every poster
node scripts/build-posters.mjs --check # what CI runs

Node kinds and what they mean — the legend of every poster uses the same words:

KindLooksMeans
boxcream, gold bordera component in this project
storekraft cylinderdata at rest
actormaroon pilla person
gatered blocka gate: fails the build or the deploy
pindashed grey boxa pin: a reviewed lock file
extblue-bordered boxan external system
goodgreen blocka proven, verified state
noteplain box with a gold baran explanation
failred-bordered boxan outcome that stops here

The legend also names the two line styles it uses: solid for a flow of data or control, dashed for “reads, pins or derives from”.

The spec every poster meets

Enforced by tools/docs_check.py on every pull request:

  • viewBox="0 0 1200 H" and data-kit="2" (built by the kit), width="100%", no fixed height; role="img" with a <title> (the alt text) and a <desc> of at least 40 characters.
  • Colours only from docs/brand/tokens.json, as CSS custom properties with brand fallbacks (correct as a plain image, dark-themed when inlined). Brand red never appears; gold is a fill, never text. Text is at least 25 px (13 px as shown); Source Serif 4 for the title, the system sans for labels. Every text-on-fill pair is at least 4.5:1 in both themes, and text on a saturated fill is white by day and ink by night.
  • A title block, a legend, a version stamp (vX.Y.Z · verified YYYY-MM-DD · <sha7>) and a footer Source of truth: <files> naming files that exist.
  • Every step is a <g id="step-NN" data-step> group, and the .steps.json sidecar lists the same ids with a title, a caption and a link.
  • No scripture. Posters carry technical tokens only (a raag’s name, a section’s name — never a verse).
  • Every poster is referenced by at least one page, with alt text.

Adding a poster

The steps, and what kit 2 checks before it will build a poster, are on Adding a poster.