docs/diagrams/
Illustrative Class A diagrams for urban-observatory, rendered by consuming
the shared diagram patterns from
design-system-ASK
by reference (pinned local mirror; no CDN, no fork).
These diagrams are illustrative orientation aids, not source truth. The repo
prose under docs/ is authoritative; a diagram may lag the repo — refresh it or
trust the prose.
on this page
The trifecta (three diagrams, not four)
Following the axis-separation lesson (see asset-pipeline-ASK's
docs/layer-disambiguation-note-v1.md), these are different artifacts on
different meta-axes — not four views of one picture. Each is fixed by two
orthogonal questions: what is it slicing (the whole repo, or one conceptual
axis) and structure or state.
| Diagram | Slice | Structure / state | Pattern | Status |
|---|---|---|---|---|
| DiagramArchitecture tree | Slicewhole repo (the atlas) | Structure / statestructure | Patterndiagram-static-H |
Statusbuilt |
| DiagramOntology | Sliceone axis — kinds of concepts (Axis A) | Structure / statestructure | Patterndiagram-static-H |
Statusbuilt |
| DiagramInteractive IA spine | Slicethe operational whole | Structure / statestate (Spectral State v1.1) | Patterndiagram-interactive-spine |
Statusbuilt |
- The structure diagrams keep one axis each (axis purity) and assert no maturity. The state diagram is the one place the mixed operational whole is the right subject — "is this proven yet?" is asked of the lived surface, not an abstract single axis. On the state surface, color encodes state only.
- urban-observatory builds three, not four: there is no inheritance (Axis-B) spine, because UO has no genuine linear inheritance ladder. UO's load-bearing chain (Assumption → ImplementationSignal → ImplementationFinding → InterventionCandidate) is a runtime/process axis, not a scope/inheritance one. A fourth diagram is not manufactured just to mirror the reference set.
Files
docs/diagrams/
├── README.md this file
├── _dsa-surface/ VENDORED, PINNED design-system-ASK surface carriers (full set below)
│ ├── surface-panel.css panel material (verbatim) — index.html, the static pages' compact triggers + interactive spine
│ └── surface-treatments.css disclosure grammar (verbatim) — the static pages' compact triggers + interactive spine
├── _dsa-tokens/ VENDORED, PINNED design-system-ASK mirror
│ ├── MANIFEST.md upstream commit + per-file sha256
│ ├── colors_and_type.css Tier 1 + Tier 2 tokens (verbatim)
│ ├── spectral-state.css Spectral State v1.1 (verbatim) — interactive spine only
│ └── fonts/ Inter + JetBrains Mono (+ OFL licenses)
├── diagrams-chrome.js upstream responsive chrome (#169, #175) — loaded after the chrome markup, BEFORE the fit contract, verbatim, DO NOT EDIT
├── diagrams-fit.js upstream fit contract v3 (#77-#80, #169, #175) — loaded BEFORE the engine, verbatim, DO NOT EDIT
├── diagrams-pointer.js upstream shared pointer controller v2 (#173, #175) — loaded BEFORE the fit contract and the engine, verbatim, DO NOT EDIT
├── diagrams-static-H-engine.js upstream engine (#175) — consumed verbatim, DO NOT EDIT
├── diagrams.css upstream style layer (#175) — consumed verbatim, DO NOT EDIT
├── export-png.js upstream PNG export (static) — consumed verbatim, DO NOT EDIT
├── urban-observatory_architecture-tree.html UO chrome (title · subtitle · stamp · legend)
├── urban-observatory_architecture-tree.source.js UO data (window.TREE_ARCHITECTURE)
├── urban-observatory_ontology.html UO chrome (legend repurposed as an Axis-A reading note)
├── urban-observatory_ontology.source.js UO data (window.TREE_ONTOLOGY)
└── interactive/ Class A INTERACTIVE (diagram-interactive-spine)
├── diagrams-interactive-spine-engine.js upstream engine — consumed verbatim, DO NOT EDIT
├── diagrams-interactive-spine.css upstream style layer — consumed verbatim, DO NOT EDIT
├── diagrams-pointer.js upstream shared pointer controller v2 (#173, #175) — loaded BEFORE the fit contract and engine, verbatim, DO NOT EDIT
├── export-png.js upstream PNG export (interactive) — verbatim, DO NOT EDIT
├── urban-observatory_ia-state-spine.html UO chrome (loads ../_dsa-tokens/)
└── urban-observatory_ia-state-spine.data.js UO data (window.IA_STATE_SPINE)
All three diagrams share one pinned _dsa-tokens/ mirror. The two static
diagrams (architecture tree, ontology) sit at top level and load
colors_and_type.css + diagrams.css, then surface-panel.css →
surface-treatments.css for the responsive chrome's About and Legend triggers;
they load diagrams-chrome.js after the chrome markup, then diagrams-pointer.js,
both before diagrams-fit.js and the engine. On a narrow or
crowded canvas the caption and legend close behind those triggers beside or
above the HUD and the header's subtitle and stamp move into About; one finger pans the
drawing from anywhere on it, two pinch the drawing rather than the page, and the
panels keep their own taps and scrolling. The interactive IA spine sits in
interactive/ and additionally loads spectral-state.css and, for the About,
Legend and Inspector disclosure triggers its engine adds on a narrow or short
canvas, surface-panel.css + surface-treatments.css (load order:
colors_and_type.css → spectral-state.css → diagrams-interactive-spine.css,
then surface-panel.css → surface-treatments.css); it references the shared
mirrors one level up at ../_dsa-tokens/ and ../_dsa-surface/, and loads
diagrams-pointer.js, the shared pointer controller, before ../diagrams-fit.js
and its engine. The interactive surface is the only one that consumes Spectral
State; color encodes state only.
Live navigation surface
index.html— ASK-branded live navigation surface for this folder's three diagram pages. It consumes the local Tier 1 + Tier 2 mirror and vendored_dsa-surface/carriers; its locally assigned Tier 3 does not propagate into any of the three diagrams. Opened from a clone, its source, data, architecture, object-model and README links open the raw files they name. The site build (tools/read/) serves a composed copy, in which those links open the reading pages and source views generated from the same files, a documents route and a documents action in the navigation panel are added, and the breadcrumb'surban-observatorylinks the site's home page. Its project cards open each project's public site.- Reading pages. The site build's pages, the home page at the site root and the reading pages under
/read/(tools/read/), also loadsurface-shell.css,surface-shell.js,surface-panel.css,surface-action.css, the wordmark pair and the_dsa-tokens/foundation stylesheet,colors_and_type.css, with its fonts, from this folder. They take their own document-register carriers fromtools/read/carriers/, and never this folder'ssurface-treatments.css.tools/read/declared.jsonrecords the sha256 of each stylesheet and script they load, and the build stops when one of them moves without it. _dsa-surface/— pinned, byte-identicalsurface-shell,surface-panel,surface-action,surface-text-linkandsurface-treatmentscarriers, the optionalsurface-shell.jsnavigation runtime, and the mode-aware ASK wordmark pair.index.htmluses all of them exceptsurface-treatments.surface-shell.jsis vendored because that surface adopts the shell's responsive navigation; the three diagram pages adopt none of it. Of the diagram pages, the two static pages and the interactive IA spine loadsurface-panelandsurface-treatments, for their disclosure triggers, and nothing else here.
Consumption discipline
- Consume by reference; no fork. The engine,
diagrams.css, andexport-png.jsare copied verbatim from the upstream pattern and are never edited here — modifying them breaks inheritance. UO authors only source data (window.TREE_*for the static diagrams,window.IA_STATE_SPINEfor the interactive one) and HTML chrome (.mark, title, subtitle,.stamp, legend,<title>,<meta>, file names). - Pinned, offline, no CDN.
_dsa-tokens/is a pinned snapshot (MANIFEST.mdrecords the commit SHA + per-file sha256). The diagrams inherit at generation time and freeze for audit — no runtime fetch, no font CDN. - Tier 1 + Tier 2 only, in the diagrams. All three diagram artifacts remain
Tier 1 + Tier 2; no ASK Tier 3 leaks into them. The exception is the
separate live navigation surface below:
index.htmlcarries an ASK-assigned Tier-3 value for the current UO front door only. That value does not propagate into the diagrams, does not make UO ASK-the-entity, and does not come fromsurface-shell, which ships a mark slot and no mark. Outside this directory, the sealed review documents rendered bytools/artifact-template/carry the ASK wordmark under an ASK assignment whose scope that template's README records; that value does not reach the diagrams either. Any future independent urban-observatory brand is a separate identity migration. - Light + dark both work (verified for the architecture tree, both themes).
- Pin: see
_dsa-tokens/MANIFEST.mdfor the current upstream pin (single source of truth — this README does not duplicate fast-aging pin state). - Renderer generation. The current diagram renderer contract runs through design-system #175
for the fit helper, the H engine, the static style layer, the responsive chrome and the shared
pointer controller (the static pages' copy and the interactive spine's): the H engine requires
the fit helper at its v3 contract (balanced vertical placement and compact clearance, building
on the panel-aware fit of #77/#79 and the dynamic interaction floor of #78) and, like the
interactive spine's engine, drives the shared pointer controller (v2). The static page exporter
runs through #169 (the exporter through #80 before it), and the interactive spine's engine and
stylesheet through #173. Both static pages adopt
diagrams-chrome.js, the responsive chrome #169 adds. Exact owner pins and propagation state live in the operator consumer ledger.
Theme by embedding surface
Adopted from the design-system-ASK convention Theme by embedding surface, pinned at
design-system-ASK main 7921b79 (PR #49, merged 2026-06-21). This is a visual-consumption
convention, not an engine/CSS/token change — it only settles which existing theme variant a surface
embeds. Both -light and -dark exports are always generated and retained; the surface selects the
default, and a stated local exception may override per figure.
UO default:
- Repository documentation embeds dark — these in-repo diagrams (the
diagram-static-Harchitecture tree and ontology; thediagram-interactive-spinestatic export) are repository documentation and default to dark. - Editorial / Substack embeds light — if a UO diagram is ever published in a Substack or other long-form editorial piece, that figure defaults to light.
- Both exports retained; a stated local exception may override a specific figure.
UO currently commits no rasters — the diagrams are live .html that export a poster PNG on
demand (the PNG button), so there is nothing to re-select today. The default governs which export
is embedded when a raster is committed or published going forward. (Convention owner:
design-system-ASK; UO owns its adoption record and which render each UO surface embeds.)
Viewing
Open any diagram .html directly in a browser (it loads its CSS/JS/fonts from
this directory and the pinned _dsa-tokens/ mirror — no server required). Pan by
dragging, zoom with the wheel or the HUD, fit with ⤢, and export a poster PNG
with the PNG button.
Re-syncing
When the upstream tokens/fonts (or, later, Spectral State) change and a refresh
is wanted, re-sync the vendored carriers from the new commit and regenerate
_dsa-tokens/MANIFEST.md. Then classify each consuming diagram under its own
source-vN // render-vN contract: advance source-vN only for a
source-generation change, and advance render-vN and regenerate any committed
raster only for a rendered-output change. A pin advance alone does neither.
The site build's reading pages record the sha256 of the token, panel, action and
shell carriers they load in tools/read/declared.json: a re-vendor that moves
any of them updates those hashes, and re-vendors the register files under
tools/read/carriers/ from the same commit, in the same change, or the site
build fails and nothing deploys (tools/read/README.md §Carriers).
Propose changes to the tokens themselves upstream at the design-system-ASK control surface —
never edit the vendored mirror or the upstream engine/CSS here.