A pure static, deterministic taxonomy-navigation demo. No backend, no auth, no cloud services, no database, no persistence, no editing, no build step, no dependencies. The goal is to demonstrate standards-driven, traceable classification — not to be a production application.
- Deterministic means classification is a pure function of your answers plus the loaded dictionaries and rules. Same answers, same snapshot — byte-identical output, every time. No inference, no scoring, no AI in the decision path.
- Rule traceability means every decision is one identifiable rule row from
rules/question_nodes.csvapplied to one answer. The UI shows the full Decision trace (rule ID, input, decision, reason, dictionary, standard reference) and embeds it in the JSON output asdecision_trace. - Refusal to guess: when required input is missing — for example, lip condition on an open C profile — the engine stops with warning
W-201at theSEC:OCSrollup, statusINDETERMINATE, and tells you exactly what information is needed. Deterministic classification SHALL refuse ambiguous terminal assignment when required input is missing. A guessed code would be unreproducible and untraceable. - Demo dictionaries are not the final standard. This app ships a deliberately small demo subset pinned as
SNAP-0.1.0-DEMO; three of its codes deviate from theSNAP-1.0.0seed dictionaries (see caveats below). Codes carrystatusand provenance notes so nothing is presented as more authoritative than it is. - Proposing changes: dictionary and rule changes go through the governance process — typed proposal issues with rule-based rationale per CONTRIBUTING.md, decided per GOVERNANCE.md. The Explorer never edits dictionaries at runtime.
- Live (GitHub Pages): https://onelabchoice.github.io/TaxonomyExplorer/explorer/
- Locally over HTTP:
python -m http.serverfrom the repo root, then openhttp://localhost:8000/explorer/. Dictionaries and rules load from the.csvfiles. - Directly from disk: double-click
index.html. Browsers blockfetch()onfile://, so the app falls back todata/embedded.js, a maintained byte-identical copy of the CSV text.
| File | Purpose |
|---|---|
index.html |
Page shell — no logic |
styles.css |
Presentation only |
taxonomy.js |
CSV parser → data loader → decision tables (each option references a rule ID) → deterministic engine → output/trace builder → UI rendering |
data/sec_codes.csv, data/rol_codes.csv, data/asm_codes.csv |
Demo dictionary subset (source of truth for codes, statuses, provenance notes) |
rules/question_nodes.csv |
The rule table — one row per (question, answer) with output code, explanation, standard reference, warning code, and status; source of truth for all explanation text |
data/embedded.js |
file:// fallback copy of all CSV text — keep byte-identical to the CSVs |
samples/*.json |
Pre-generated outputs with decision_trace, byte-identical to what the app produces for the same answers — including the W-201 refusal case |
- Object types: Section, Component, Assembly only.
- Section codes:
OCL,OCU,ZED,HSS,ANG,PLT(+OCSshown only as the W-201 indeterminate rollup). - Component roles:
COL,BEM,ARM,CHL. Assembly types:WDK,FRM. - Output: classification path, suggested codes with status badges and provenance notes, per-step explanations, decision trace, JSON envelope.
- Out of scope: product families, geometry parameters / CGID / GSID lookup, configuration hashing, test/certification routes, registry access, editing, persistence, broad taxonomy expansion.
This demo dictionary deliberately deviates from the SNAP-1.0.0 seed dictionaries in ../dictionaries/, per the Phase 1 MVP specification. These deviations are surfaced, not hidden: they carry status=DEMO in the CSVs, an amber badge and provenance note in the UI, a header banner naming them, and rule rows marked DEMO in the rule table.
| Demo code | SNAP-1.0.0 says | Governance status |
|---|---|---|
ZED |
Z family = ZEE superclass with leaves ZLP / ZUN |
Open item — see governance note |
HSS (terminal) |
HSS is a classifier-only superclass; leaves are RHS / SHS / CHS |
Open item — same note |
CHL |
this role is named DKS (deck support member) |
Open item — same note |
Resolving these aliases (aligning the demo set with the seed dictionaries, or amending the seed dictionaries) is a Technical Committee decision, not an app edit.
Same answers ⇒ same output, always. The engine only accepts controlled answer tokens; every accepted answer applies exactly one rule row; codes come only from the loaded dictionaries; this tool never assigns registered identifiers (gsid is always null in this phase) and never mutates its data files.