First half of brain#21: half_life (volatile|seasonal|durable), applies (local|homelab|universal), claim_provenance (asserted|inferred). writeHallNote already passed unknown frontmatter keys through verbatim, so preservation was free — a test now pins it so a refactor of the merge loop cannot silently drop the fields. What was missing is validation, and it fails closed: a value outside the enum is rejected (a lint skips what it cannot parse, so the note would read as classified while nothing acts on it); an envelope field without claim_provenance is rejected (a value a model inferred must never be indistinguishable from one a human asserted, or a single classifier pass launders guesses into apparent judgement across the corpus); provenance alone is rejected too. Validation runs before MkdirAll, so a rejected write leaves nothing behind. The field is `applies`, not `scope`: scope: has been in use since brain#5 for glossary terms (homelab-core, project:<repo>), a disjoint value space on the same key. The shipped schema keeps the name. Notes with none of these fields are byte-identical to before. Bulk backfill stays out of scope. Schema documented in brain/CLAUDE.md via brain_edit_root, which produced the hyperguild#97 audit record for the rewrite. Refs brain#21, brain#19 (superseded), brain#5, hyperguild#97. Co-authored-by: Mathias <mthbqv@gmail.com>