version:: "2.3"

v2.3 — domain promoted warning→error, JD-areas scoped (Tony ruling 2026-08-11)

The Phase-4 backfill landed (merge 338f729f, 347 notes) — the precondition v2.0 named. Per Tony's in-session ruling: domain is now severity: error, scoped to the 10 JD areas by adding the staging/rogue-queue zones (A-I, J-R, S-Z, _system, Del, Secrets) to exempt_paths — the 86-note rogue queue stays domain: null legally until the Inbox-Triage router drains it. Companion drift view: 📺 02.25 Domain Drift.base. Executed under PLAN-057-build-out-mega-batch (card forge-domain-enum-100pct-and-error-promotion). v2.2 note preserved below.

v2.2 — jd_id address field added (PLAN-056 / DD-022 R1, 2026-08-11)

Adds jd_id as an optional validate-only field (warning). The law it carries: a note's jd_id category digits MUST equal its physical JD category folder (DD-022 R1 — the folder is truth; the field is never trusted over it). The frontmatter contract below validates presence + format; the folder-match cross-check is enforced primarily by the content-router Gate 3b (the capture-time enforcer, live 2026-08-11) — the Forge rule is defense-in-depth, added via the plugin UI (Tony-in-Obsidian step, ADR-007; click-by-click in 2026-08-11-vault-log). Context: the 2026-08-11 sweep corrected 336 stale pre-refactor jd_ids (drift 415 → ~78). Note: the domain warning→error promotion is deliberately not flipped here — it is carded separately (forge-domain-enum-100pct-and-error-promotion) with a JD-area-scoping precondition (the 86-note rogue queue is domainless by design). v2.1 note preserved below.

v2.1 — capture-stub fields added (PLAN-045, 2026-07-27)

Adds two optional, validate-only frontmatter fields for the Track-B dual-track capture model: needs_routing (boolean, info) marks an unregistered stub awaiting promotion, and promote_as (enum TN·DD·IDEA, warning) records which family Claude Code mints it into. Plugins never allocate IDs — these fields are the contract Claude Code reads when promoting. Never error. Rationale: ADR-009-registry-safe-capture-surfaces / DD-002-gkos-command-and-capture-surface. v2.0 note preserved below.

v2.0 — domain enum added (validate-only, staged)

Adds the load-bearing domain field as a closed enum of the 10 JD-area values (meta·self·work·create·know·money·live·connect·build·archive) — the routing key that maps 1:1 to the JD areas (P029 / PLAN-044-jd-compliant-tag-routing, 6-seat council 2026-07-25). Still validate-only — shapes/repair OFF, nothing mutates. domain is severity: warning on purpose: warning catches both absence and off-vocabulary values without a wall of red while Phase-4 backfill runs; promote to error after the crosswalk migration lands (every note carrying exactly one domain). type/status stay presence-only by design — the type: value vocabulary is governed by DD-009 / GL-005 §2A (a separate, dry-run-gated enum), and status vocabulary is owned by CLAUDE.md "one home per status vocabulary"; Forge must not launder either. v1.0 history preserved below.

Contract

frontmatter:
  required:
    - name: domain
      type: enum
      severity: error
      description: "JD-area router (1:1 with the 10 areas). Closed enum — the load-bearing routing field (P029). ERROR since v2.3 (backfill landed 2026-08-11, merge 338f729f); staging zones exempt via exempt_paths."
      values:
        - meta        # 00-09 SYS
        - self        # 10-19 Self & Development
        - work        # 20-29 Work & Projects
        - create      # 30-39 Creative & Content
        - know        # 40-49 Knowledge & Concepts
        - money       # 50-59 Finance & Legal
        - live        # 60-69 Live & Home
        - connect     # 70-79 Connect & Community
        - build       # 80-89 Build & Systems
        - archive     # 90-99 Archive & Vault

    - name: type
      type: string
      severity: error
      description: "Every note declares a type (CLAUDE.md vault standard). Value enum belongs to DD-009 / GL-005 §2A subtype vocab — a separate dry-run, not here."

    - name: status
      type: string
      severity: error
      description: "Lifecycle/status token. Value constraint intentionally omitted — CLAUDE.md 'one home per status vocabulary' owns the vocabulary; Forge must not launder slot<->project status."

    - name: tags
      type: list
      severity: error
      min_items: 1

    - name: created
      type: date
      severity: warning
      format: "yyyy-MM-dd"
      strict_parse: false

  optional:
    - name: updated
      type: date
      severity: warning
      format: "yyyy-MM-dd"
      strict_parse: false

    - name: tac7code
      type: string
      severity: warning
      description: "4-char Note Codes id on substantive docs (exempt: daily notes, templates, fleeting captures)."

    - name: aliases
      type: list
      severity: info
      description: "Backward-link preservation on renamed/moved notes (GL-002 §7)."

    - name: jd_id
      type: string
      severity: warning
      description: "JD address (NN or NN.MM). LAW (DD-022 R1): the category digits must equal the note's physical JD category folder — folder is truth. Primary enforcement: content-router Gate 3b at capture; this rule is defense-in-depth. Validate-only, never error."

    - name: needs_routing
      type: boolean
      severity: info
      description: "Track-B capture-stub marker (PLAN-045 / ADR-009). true = unregistered stub awaiting Claude-Code promotion. Validate-only, never error."

    - name: promote_as
      type: enum
      severity: warning
      description: "Which registry family a needs_routing stub becomes on promotion (PLAN-045 / ADR-009). Plugins never mint IDs; Claude Code owns promotion. Validate-only, never error."
      values:
        - TN
        - DD
        - IDEA

inline:
  allowed:
    - name: version
    - name: source

ontology:
  relationships: {}

tag_rules:
  require_namespace: false
  unknown_tags: "off"
  severity: info
  forbidden_namespaces:
    - domain          # domain lives in the frontmatter field, never as a #domain/* tag
  allowed_namespaces:
    - meta
    - area
    - topic
    - tool
    - moc
    - practice
    - flashcards
    - card-forge

exempt_paths:
  - A-I/Forge
  - Journal
  - 01 GKOS Inbox
  - 90-99 Archive & Vault
  - S-Z/System/Forge
  - .obsidian
  - .trash
  - .claude
  - A-I            # staging catch-all — rogue queue lives here legally (v2.3)
  - J-R            # staging catch-all (v2.3)
  - S-Z            # staging catch-all (v2.3)
  - _system        # external-tool mirrors, not curated content (v2.3)
  - Del            # pending-delete staging (v2.3)
  - Secrets        # never linted (v2.3)

Part of the k-a system · TOE.KNEE.SEE

Built with LogoFlowershow