Observation

Vocabulary drift becomes contract drift — the heartwood-finance misnomer case

world-modelvocabularynamingcontract-driftheartwoodlane-naming

Vocabulary drift becomes contract drift — the heartwood-finance misnomer case

Two-fact observation: (1) The Vercel project for the Heartwood lane is named heartwood-finance (live at heartwood-finance.vercel.app). (2) Per the canonical naming convention (canonical_user_identity_v1.md §2 + CLAUDE.md head section): heartwood = client-facing finance/project truth site. The lane is the finance site. The -finance suffix is therefore redundant — it duplicates what heartwood already means in the canonical vocabulary. Vocabulary drift has happened. Per Chad directive 2026-04-25T~15:55Z: "we can't drift on vocabulary. as we know vocabulary becomes culture becomes contract."

Why this is a fidelity failure (per ORA-2026-0062)

Per ORA-2026-0062 (world-model-is-the-tacit-contract), names of world-model entities carry contracts about what the entity IS in the world. Per ORA-2026-0044 (names-carry-contracts), names that don't teach the entity become technical debt — readers learn the wrong thing.

heartwood-finance teaches three contradictory readings:

1. "Heartwood is the umbrella; finance is one product within it." Wrong — per canon, heartwood IS the finance product. 2. "heartwood and heartwood-finance are different things." Wrong — they're the same lane. 3. "Vocabulary in canon (heartwood = finance) doesn't match deployed vocabulary (heartwood-finance.vercel.app)." Right — and this is the drift.

A new fleet seat reading the codebase encounters heartwood-finance in deploy configs and heartwood in canon and learns: the canonical vocabulary is unreliable; check the deployed name to know what's real. That is contract drift — the source-of-truth (canon) loses authority because the deployed reality contradicts it.

Why "vocabulary becomes culture becomes contract" is exactly right

Chad's framing compresses the doctrine chain:

Vocabulary  →  Culture  →  Contract
   (names)    (defaults)   (binding)
  • Vocabulary: the words developers use when discussing entities. heartwood, camber, orbit, ora.
  • Culture: the defaults developers reach for when unprompted. "I'll deploy this to heartwood" reflexively, not "I'll deploy this to heartwood-finance."
  • Contract: what the system is OBLIGATED to do based on internalized expectations. PR review rejects code that calls into the wrong lane based on lane naming.

If vocabulary drifts (the deployed name heartwood-finance ≠ canonical heartwood), culture drifts (developers learn to qualify "heartwood" with "do you mean canon or the Vercel project?"), contract drifts (the system can no longer enforce lane-naming rules because the rules have drifted from the deployments).

Specific drift evidence in heartwood case

SurfaceVocabulary used
canonical_user_identity_v1.md §2"heartwood"
CLAUDE.md head section"heartwood"
AGENTS.md section 0"heartwood"
Repo path~/gh/heartwood
Lane backlog~/Desktop/heartwood/HEARTWOOD_WORK_BACKLOG.md
FLEET_FEED.md lane tagLANE: HEARTWOOD
Vercel project nameheartwood-finance ← drift
Vercel deployment URLheartwood-finance.vercel.app ← drift
Memory MEMORY.md heartwood-finance referencemultiple references ← drift

The deployed vocabulary heartwood-finance is the outlier. Either:

  • (A) Rename the Vercel project to heartwood and update all surfaces accordingly, OR
  • (B) Update canon to admit heartwood-finance as a valid alias and document the relationship

Chad's directive resolves the question: (A). The canonical vocabulary is correct; the deployed name is the misnomer.

Why this matters more than a "rename"

A surface-level reading sees this as a 30-minute rename ticket. The deeper observation is that vocabulary drift was tolerated for some period (likely months, given how embedded heartwood-finance is in deploy paths). The fact that drift was tolerated points to a culture gap: no one was watching vocabulary discipline.

Per ORA-2026-0062, vocabulary discipline is the doctrine. The fix isn't just rename-this-project; it's:

1. Rename the project + update all surfaces (the explicit fix) 2. Add vocabulary-discipline checking to PR review (catch future drifts) 3. Add lane-name canonical-vs-deployed parity check (fleet-vocabulary-parity-check?) similar to doctrine-parity-check (catch future drifts mechanically)

Adjacent observations: this pattern likely exists elsewhere

The heartwood case made it visible because the suffix is redundant. Other potential drifts to scan for:

  • Repo names matching canon? (orbit, camber, heartwood, ora — these ARE the canon, so they're aligned)
  • Vercel project names? (need to enumerate)
  • Supabase project names? (camber, orbit, heartwood ✓; magnolia ✓; madison "ignore" ✓)
  • Edge function names? (mostly camber lane — naming should match what the function DOES, not just where it lives)
  • DB table prefixes? (bt_, vw_monday_, etc. — these are scope qualifiers, not lane redundancy)
  • ORA doctrine titles? (titles describe the rule, not lane — generally aligned)

A vocabulary-parity sweep is a follow-on action.

Proposed canonical-vocabulary doctrine (ORA-01 to author M3)

Promote this observation toward M3 with the following candidate doctrine:

Lane names are atomic. The four canonical lane names (orbit, camber, heartwood, ora) are atomic and self-sufficient — they encode their purpose. Suffixes that duplicate the lane's canonical purpose (e.g. heartwood-finance, camber-construction, orbit-coordination) are forbidden — they teach contradiction. Suffixes that scope WITHIN a lane (e.g. camber-bt-mirror, heartwood-dollhouse) are allowed because they refine, not redundantly qualify.
Sub-surface names within a lane are SCOPE qualifiers, not lane qualifiers. camber-redline-ios is fine (scope within camber). camber-construction-redline-ios is forbidden (redundant qualifier).

This composes with ORA-2026-0044 (names-carry-contracts) and ORA-2026-0062 (world-model-is-the-tacit-contract). Per Chad's directive: vocabulary becomes culture becomes contract. Catch drift at the vocabulary layer.

Routing per Chad directive 2026-04-25T~15:55Z

"good to detach dead alias but heartwood-finance is absolutely a misnomer. we can't drift on vocabulary. as we know vocabulary becomes culture becomes contract"

Routed:

  • HEARTWOOD lane: rename Vercel project heartwood-financeheartwood + update all references + verify deploy still works (separate actionable ticket filed)
  • ORA-01 (CLI shepherd): promote this observation to M3 doctrine + design vocabulary-parity-check tooling

USER-VALUE-CLOSURE for this observation

  • user: every fleet seat that reads canon AND deployed config (which is all of them) + Chad-as-architect-of-the-vocabulary
  • surface: every surface that names the heartwood lane — repo paths, deploy configs, boot files, lane backlog, fleet feed, ORA references
  • change: the deployed name returns to canonical alignment; vocabulary parity checks prevent future drift
  • closure_date: rename ticket lands within ~3 days; ORA-01 doctrine + vocabulary-parity-check tooling within ~7 days

Pattern-graduation criterion

Begins as M1 (surfaced observation). Graduates to M2 (hypothesis) when scan reveals additional drift instances. Graduates to M3 (canonical doctrine) when ORA-01 ratifies the lane-names-are-atomic rule and parity-check tooling lands.