Skip to content

Document Frontmatter Schema

This is the metadata contract for every document on the Rx360 internal docs site. It powers the site navigation + facets, the document knowledge graph (nodes = docs, edges = relationships), the Obsidian bases control panel, and — most importantly — the sensitivity gating that keeps Tier‑1 content off the site.

It deliberately reuses the vocabulary already defined in the Curated Drug KB & Tagging Schema: that schema tags clinical facts; this one tags documents. Shared tokens (status, clinical_line, provenance fields) mean the same thing in both.


Field reference

Field Required Type / allowed values Purpose
id stable kebab/snake slug The KG node id and the target of every related/supersedes edge. Never changes across versions of the same doc.
title string Human title shown in nav, search, and graph.
area fall_barometer · wearable_vesta · med_intelligence · smart_scheduling · pilot_ops · market_strategy · reference Top‑level workstream = nav section + graph color. One per doc.
doc_type spec · brief · research · deck · tool · template · protocol · index · digest · guide What kind of artifact it is.
status preliminary · validated · draft · locked · superseded Lifecycle. preliminary/validated carry the drug‑schema meaning (pharmacist sign‑off gate); locked = frozen by decision (e.g. Vesta); superseded = an old version (normally excluded from the allow‑list).
owner string (name) Who owns the doc (= drug‑schema author).
approver string | null Sign‑off authority (= drug‑schema approver); null until signed off.
version semver‑ish string Document version.
effective_date YYYY-MM-DD The doc's own date (often in its filename).
last_updated YYYY-MM-DD Last edit to the canonical file. Drives the "what changed recently" list.
sensitivity_tier never-share · internal-only · after-scrub · share-ready The gate. never-share is illegal in the manifest — the build rejects it. internal-only is the site default (core team). after-scrub must pass the scrub gate clean before it is published.
contains_trade_secret bool Explicit flag for Fall Barometer scoring internals (weights/caps/calibration). Renders a badge.
clinical_line bool Reused verbatim from the drug schema: true = the doc is itself a clinical‑advice surface; handle accordingly.
canonical bool Is this the current version of id? The allow‑list gate — only canonical: true ships.
supersedes list of id Ids this doc replaces (dashed graph edges = version lineage).
superseded_by id | null Set when a newer doc takes over.
related list of id KG edges — other docs this one relates to (solid graph edges).
tags list of string Facet/cluster vocabulary. Borrows drug‑schema flags where apt (frid, nti, high-risk, trade-secret) + site tags (site-canonical, scoring, wearable, …). Every site doc carries site-canonical.
source_path repo‑relative path The canonical file (single source of truth).
has_docx bool A paired .docx exists (the "paired but not synced" norm).

Sensitivity tiers (the gate)

Tier On the site? Examples
never-share Never. Illegal in the manifest; build aborts if such a path/term is detected. Patent disclosures, raw de‑identified data (08_Data_DeIdentified/), .env secrets, anchor‑site shorthand / partner naming.
internal-only ✔ Yes — this is the site default (audience = core team). Fall Barometer scoring internals, internal product/strategy specs.
after-scrub Only once it passes the scrub gate clean; otherwise held out of the build and reported. Pilot deliverables containing anchor-site naming, decks with internal callouts.
share-ready ✔ Yes (and safe even beyond the core team). Public market research, FDA guidance summaries, the Wellness Lexicon.

The build enforces three independent fail‑closed gates: (1) deny‑rooted directories are rejected at manifest‑validate time, (2) never-share is illegal in the manifest, (3) the scrub gate scans every staged file for anchor‑site / secret / PHI patterns. An after-scrub doc that still contains a forbidden term is excluded from the build and reported (so the source gets fixed once) — it never reaches HTML, but it also doesn't block the rest of the site. A forbidden term in a doc that is not after-scrub is treated as an unexpected leak and hard‑fails the whole build.


Worked example — the Balance Meter canonical model

---
id: balance_meter_canonical
title: "Balance Meter  Canonical Model"
area: fall_barometer
doc_type: spec
status: validated
owner: "Gene Lang, PharmD"
approver: "Matilda (clinical)"
version: "1.0"
effective_date: 2026-05-20
last_updated: 2026-06-17
sensitivity_tier: internal-only
contains_trade_secret: true
clinical_line: false
canonical: true
supersedes: [balance_meter_model_reference]
related: [balance_meter_explainer_deck, fall_risk_algorithm_sandbox,
          fall_prediction_intake_spec, curated_drug_kb_tagging_schema]
tags: [trade-secret, scoring, frid, wearable, site-canonical]
source_path: _VP_Priorities/Fall_Risk/Balance_Meter_Canonical_Model_2026-05-20.md
has_docx: true
---

How metadata gets applied

Source files have no frontmatter today. The build pipeline injects it from the 09_Scripts/site_manifest.yml allow‑list at stage time, onto an ephemeral copy — the canonical file is never mutated. If/when frontmatter is later written into the canonical files directly (editable in Obsidian's properties panel, not raw YAML), the manifest's frontmatter: block becomes an optional supplement. Either way there is exactly one editable copy of each doc, so nothing drifts.