v3.4.38 — Naming System v2: the filename is the index
Naming System v2 — the filename is the index
Designed by a 5-seat round table (standards research · cold-start testing · retrieval engineering · robustness · taste), spec + arbitration record in docs/proposals/2026-07-20-naming-v2-spec.md.
A 10-question cold-start test scored the old naming at 55%, and proved filenames alone top out at ~75–80%. v2's answer is a two-audience split: the filename is the human/triage index (immutable-at-birth fields only — printed none--none nulls are gone), and a materialized _index.md per store is the machine fast-path (severity-sorted for corrections, regenerated atomically on every write). Names + ≤3 pinned index files ⇒ 90%+ cold-start orientation, honestly.
Highlights
- Per-store grammar: journal
{date}--{saveType}--[{sig}]--[{theme}]--{slug}.md(nulls omitted); corrections{date}--{rule-slug}.json— slug from the rule, not the trigger utterance (EN + CJK interjection stripping, full-width punctuation aware). - One sanitizer: lowercase + NFC + byte-capped;
agentrecall/AgentRecallcan no longer split your corpus on case-sensitive filesystems (existing-dir reuse, deterministic fork resolution). A source-level guard test makes raw project-path construction outsidepaths.tsunrecreatable. - Materialized indexes:
corrections/_index.md·journal/_index.md·rooms/_index.md— atomic, never fail the underlying write. - Race & fork fixes: same-day journal TOCTOU under per-project locks; rewrite paths reuse on-disk filenames (no orphan duplicates);
_index.mdcan't knock a project off the status board; FSRS reinforce no longer starves uppercase-slug legacy skills.
Migration
Zero-rename, new-writes-only. Existing files keep their names forever; all legacy naming generations keep parsing. Deferred to v2.1 (spec §7): room/topic-level case-fold, sig/theme vocabulary pruning.
Verified: 994/994 tests across 4 packages · tool-surface guard untouched (15/15) · 2 independent code reviews, all CRITICAL/HIGH closed.
Full Changelog: v3.4.37...v3.4.38