--- status: active owner: platform last_reviewed: 2026-10-12 supersedes: [] --- # Studio tech stack inventory **Purpose:** one component inventory that `/wiki/` and track docs stay aligned to — not an onboarding portal. ## Alignment loop ``` docs/tech-stack/inventory.yaml (edit rows here) ↓ scripts/generate-wiki.py docs/wiki/data.json + docs/wiki/README.md ↓ scripts/serve-wiki.py https://…/wiki/ (Layers · Technology) ``` | Artifact | Role | |----------|------| | [`inventory.yaml`](./inventory.yaml) | **SSOT** — add/change components here only | | Track `docs/*/TECH_STACK.md` | Architecture narrative; link to this inventory | | `/wiki/` | Generated views of the same inventory | | Runtime (`package.json`, compose, registry) | Still wins for versions when generator can enrich | **Rules** 1. Change component rows in `inventory.yaml` only — never mirror tables in track docs or the wiki script. 2. After edits: `python3 scripts/generate-wiki.py` (or wiki **Regenerate**). 3. Runtime checks beat stale version strings in YAML. 4. **Gate 12 (CI + `make pre-merge`):** `bash scripts/validate-inventory-gate.sh` must pass. - Every `products/registry.yaml` product → inventory `product_id` - Every `uds_daemon.py` `route_request` script (except `ping`) → inventory `uds_route` with `status: wired` - Every `status: wired` item → codebase evidence (`path` | `product_id` | `uds_route` | `version_from` | `compose_service`) ## Views (same `industry` field) - **Layers** — one table per track; industry = section headers inside the table. - **Technology** — one accordion per industry; table includes Track column. `kind` / `subkind` stay in YAML for tooling; they are not Technology top-level nav. Wiki chrome (nav, filter) is an HTML twin of `@studio/ui` tokens — presentation only; it does not own inventory data.