Document: Code Dictionary Standard — DRAFT (split working copy) Status: DRAFT — not yet balloted
Source and split note. This document was extracted verbatim on 2026-07-11 from the unified draft SectionHub-Material-Handling-Taxonomy-Standard-v0.1.md, which remains the canonical document of record until this split is ratified. Clause and section numbers below retain the unified draft's numbering to preserve cross-references. Rule identifiers (P-, N-, D-, C-) are global across the SectionHub document family; where a rule also appears in another split document, the text is duplicated verbatim and the unified draft is authoritative if any copy diverges. No normative meaning has been changed. Text original to this split is marked [Editorial bridge].
[Editorial bridge.] This standard governs the mechanics shared by every code dictionary: the namespace model, code formats and qualification, the code status lifecycle, proposal and deprecation rules, demo-code caveat handling, and the dictionary file (CSV) contracts. The code tables themselves are normative in their subject standards: SEC: in the GSID Standard; ROL: / ASM: / FAM: / CFG: in the Material Handling Taxonomy Standard. Operating process (who decides, cadences, records) is in GOVERNANCE.md and CONTRIBUTING.md.
- P6 — One namespace per code type. Section shapes, product families, assembly types, component roles, and configuration groups SHALL each occupy a separate namespace. A bare three-character code has no meaning; only a namespace-qualified code does.
- P8 — Immutability and audit safety. Published identifiers SHALL never be reused, re-meant, or retroactively altered. Corrections occur by deprecation-with-successor, recorded in snapshots.
| Namespace | Prefix | Contains | Code form | Governed by |
|---|---|---|---|---|
| Domain | (bare) | Top-level domains | 2-char alpha | Taxonomy Standard |
| Section shape | SEC: |
Cross-section topology classes | 3-char alpha | GSID Standard v2.0 |
| Product family | FAM: |
Market/system families | 3-char alpha | Taxonomy Standard |
| Assembly type | ASM: |
Assembly structural/functional types | 3-char alpha | Taxonomy Standard |
| Component role | ROL: |
Functional roles of components | 3-char alpha | Taxonomy Standard |
| Configuration group | CFG: |
Named attribute groups | 3-char alpha | Taxonomy Standard |
| Enumeration tokens | (none) | Controlled values inside CFG groups | UPPER_SNAKE token |
per-group value lists |
| Identity | Prefix / format | Example | Kind |
|---|---|---|---|
| CanonicalGeometryID | CG<v>-<hash12> |
CG1-9F3A62C81B44 |
Derived (content-addressed) |
| GSID | GS-<serial6> |
GS-004217 |
Registered |
| IndustryDesignationID | DSG-<SYSTEM>-<NORMALIZED> |
DSG-AISC-W12X50 |
Registered |
| ManufacturerPartID | MPN-<serial6> |
MPN-018233 |
Registered |
| AliasID | ALS-<serial6> |
ALS-002911 |
Registered |
| ComponentID | CMP-<serial6> |
CMP-000482 |
Registered |
| AssemblyProductID | ASP-<serial6> |
ASP-000173 |
Registered |
| ConfigurationID | CF<v>-<hash12> |
CF1-4D2E91AA07C3 |
Derived (content-addressed) |
| TestID | TST-<year>-<serial5> |
TST-2026-00087 |
Registered |
| CertificationID | CRT-<year>-<serial5> |
CRT-2026-00031 |
Registered |
| SnapshotID | SNAP-<semver> |
SNAP-1.0.0 |
Registered release |
<v> in CG<v>- and CF<v>- is the major version of the canonicalization rules used to derive the hash. <hash12> is the first 12 hex characters of the SHA-256 of the normalized record.
- N1. A three-character code SHALL be unique within its namespace. Uniqueness across namespaces is NOT required.
- N2. Codes SHALL always be stored, exchanged, and serialized in namespace-qualified form (
SEC:OCL,ASM:WDK). Bare codes MAY appear only in human-facing rendered text where the namespace is unambiguous from context. - N3. Cross-namespace collisions (the same three letters in two namespaces) are permitted but SHOULD be avoided when assigning new codes, to reduce human transcription error.
- N4. Enumeration values inside configuration groups SHALL be
UPPER_SNAKEtokens (e.g.,WATERFALL,FLUSH), never three-character codes. This keeps the 3-char space reserved for classification codes and prevents code proliferation. - N5. Every namespace dictionary entry SHALL carry: code, name, definition, status (
ACTIVE,SUPERCLASS,RESERVED,DEPRECATED,REJECTED), status rationale, successor (if deprecated), and the SnapshotID in which it first appeared. - N6. Codes flagged
SUPERCLASSare classifier-only rollups: valid in queries, filters, and classification paths as grouping nodes, but SHALL NOT be assigned as the terminal code of any new registry record. - N7. Codes SHALL never be deleted or re-meant. Retirement is by status
DEPRECATEDwith a successor pointer, effective at a named snapshot.
- Section shapes (
SEC:) — identify cross-section topology classes (open C lipped, hollow rectangular, wide-flange I). Never products, never processes, never roles. - Product families (
FAM:) — identify market/system families aligned with industry-standard scopes (selective pallet rack, cantilever rack, steel shelving). Never shapes, never manufacturers. - Assembly types (
ASM:) — identify kinds of assembled products (wire deck, upright frame, beam assembly). Never the section of any member. - Component roles (
ROL:) — identify the function of a part inside assemblies (column, brace, base plate). Orthogonal to shape: aROL:BRCbrace may beSEC:CHS,SEC:OCU, orSEC:ANG. - Configuration groups (
CFG:) — identify named attribute groups whose fields carry variation (edge condition, mesh pattern, joining method). They are schema organizers, not object identifiers. - Evidence records (
TST-,CRT-) — identify events and attestations, never objects. Evidence points at objects + configurations; objects never point at evidence for identity.
[Editorial bridge.] One-line orientation per namespace; the owning standard is normative.
| Namespace | Concept | Normative home |
|---|---|---|
SEC: |
Cross-section topology classes | GSID Standard §3 |
ROL: |
Functional roles of components in assemblies | MH Taxonomy Standard (unified draft §3.3) |
ASM: |
Assembly structural/functional types | MH Taxonomy Standard (unified draft §3.4) |
FAM: |
Product families (ProductFamilyCode; occasionally written "PFM" informally — the registered namespace prefix is FAM:) |
MH Taxonomy Standard (unified draft §3.5) |
CFG: |
Configuration attribute groups (schema organizers, never object identifiers) | MH Taxonomy Standard (unified draft §3.6) |
| XMAP | External-classification crosswalk records (UNSPSC, ECLASS, ETIM, OmniClass, MasterFormat, …) — proposed, non-normative: defined in SECTIONHUB_STRATEGIC_ARCHITECTURE.md §7 and targeted at Taxonomy Standard v1.1; no XMAP namespace exists in any released dictionary | — (proposal) |
[Editorial bridge.] The normative status set and lifecycle rules are N5–N7 in the namespace model above (unified draft §2.3): ACTIVE, SUPERCLASS (classifier-only rollups, N6), RESERVED, DEPRECATED (with successor pointer, N7), REJECTED — every entry carrying definition, status rationale, successor where applicable, and the SnapshotID in which it first appeared (N5). Codes are never deleted or re-meant (N7).
DEMO is a non-normative status used only in demonstration dictionaries (the TaxonomyExplorer demo subset, snapshot SNAP-0.1.0-DEMO). It marks codes that deviate from the released seed dictionaries for demonstration purposes. Handling rules, restated from the open governance record proposals/2026-07-03-phase1-demo-alias-deviations.md:
- A
DEMOcode SHALL NOT appear in any registered record, snapshot export, or seed dictionary. - Every
DEMOrow SHALL carry ademo_notenaming the corresponding released code(s), and conforming demo tools SHALL surface that note to the user. - Each
DEMOdeviation SHALL be documented as an open governance item with a resolution path; this document does not resolve them.
[Editorial bridge.] The operational walkthrough of these rules — lifecycle, evidence tables, decision categories, and outcomes — is docs/proposal-workflow.md, with copyable issue templates in proposals/ (TEMPLATE-code-change.md, TEMPLATE-taxonomy-change.md, TEMPLATE-crosswalk-change.md).
- Proposals SHALL be submitted via typed issue forms: new code (per namespace), new template field, new enum token, new designation system, erratum.
- A new-
SEC:-code form SHALL require the D-1 evidence: the topology/parameter-schema case, the existing code that fails to fit and why, and at least two independent real-world instances (prevents speculative codes). A new-FAM:form SHALL require the D-7 industry-scope case. - The SMHE technical committee reviews on a published cadence (SHOULD be monthly triage, quarterly decisions) with recorded rationale in
proposals/. - Accepted codes land as
RESERVEDimmediately, becomeACTIVEonly at the next snapshot release; rejected proposals are recorded inREJECTIONS.mdwith rationale (the CFS/PIP/TUB entries in Part 3 seed this log). - Community members MAY submit geometry for GSID registration (public parameters only); the registry validates canonicalization and issues serially.
- Fields-first presumption (P5): every proposal is presumed to be a configuration field or enum token until the D-1/D-7 case is proven. The burden of proof is on the code, not on the field.
- Hard gates D-1 (topology schema) and D-7 (industry scope) as acceptance criteria; "my catalog needs it" is not a criterion.
RESERVEDparking for plausible-but-undemanded codes (SBR,HBRprecedents).- Release-train discipline: codes activate only at snapshots (no continuous dictionary drift).
- The public rejection log makes precedents citable, so repeat proposals die quickly.
- Dictionary size is a watched metric: reviewers SHOULD treat >10% namespace growth per year as a smell requiring explicit justification.
[Editorial bridge.] Deprecation mechanics are N7 (§3 above): status DEPRECATED plus a successor pointer, effective at a named snapshot; rejected proposals are recorded as binding precedent in REJECTIONS.md. The boundary between a dictionary change and a mere renaming is rule D-8, restated verbatim from the unified draft Part 5:
- D-8 (alias only). If the physical object and configuration are unchanged and only the name differs, the change is a naming-layer record. This is the firewall that keeps commercial naming out of taxonomy.
Alias records (ALS-) and manufacturer part records (MPN-) are naming-layer objects with zero classification authority; their definitions are normative in the MH Taxonomy Standard (unified draft §4.11–4.12).
Shipped data files (all versioned; the set = the public snapshot):
namespaces.csv, sec_codes.csv, rol_codes.csv, asm_codes.csv, fam_codes.csv, cfg_groups.csv, enum_tokens.csv, question_nodes.csv, templates/*.json, designation_systems.csv, dsg_index.csv, gsid_registry.csv.
Key columns:
sec_codes.csv:code,name,status,form_class,definition,maps_from,successor,since_snapshotgsid_registry.csv:gsid,cgid,sec_code,param_json,since_snapshot— the offline GSID lookup tablequestion_nodes.csv:route,node_id,question,answer_token,next_node,assignment,because_text
[Editorial bridge.] The authoritative repository files are the snake_case CSVs under dictionaries/ per docs/repository-structure.md §3, and every dictionary change passes the machine-checked pre-release gates of GOVERNANCE.md §5 (unique codes per namespace; no edits to published rows; status-transition rules; UPPER_SNAKE enum tokens; no bare unqualified codes; proposal citation on every new row).