⛔ ARCHIVED 2026-06-21 — historical, do not use as current. This is the pre-pivot Yggdrasil-restructure umbrella. On 2026-06-21 the effort became a full pivot to Vrataski; this doc's still-good content (subprojects 0/I/A/C, the doc roster + imports matrix, the cashed-in backlog) was merged into
working/vrataski-design.md, the single source of truth. Kept for history (it has the original framing + the fuller pre-pivot subproject map).
Yggdrasil Restructure — Design (working)
What this is. The living design + tracker for the multi-subproject Yggdrasil restructure, worked via
/brainstormingstarting 2026-06-20. It captures settled decisions, maps the subprojects (the "plates spinning"), and tracks open threads so nothing evaporates between sessions. Mid-brainstorm — not a finished design. When a subproject's design firms up it may spin into its own*-design.md→*-plan.mdpair; this doc stays the umbrella map.
Purpose & scope
Replace the current-plan.md monolith (1,649 lines, loaded every session) with:
- an audience-routed multi-document architecture at the repo root,
- a
.jacket/"collections" system (the homestyle lists, as index + per-item files), - deterministic tooling (scripts) for the collections, and
- a folded-in, simplified layer model (the dead execution-partner layer killed).
This cashes in ~7 tracked items (see Cashed-in backlog below). It is not the Vrataski unification (deferred) and not the puppet/scry rework (held).
Subproject map (the plates)
Status key: ✅ settled · 🟡 partly designed · ⬜ not yet designed · ⏸️ parked
| # | Subproject | What | Status | Gated on |
|---|---|---|---|---|
| 0 | Doc architecture | Root-file roster + audience model + links/imports matrix | 🟡 structure settled; content unwritten | — |
| I | Identity & layer reframe | Kill exec-partner layer; 2-layer model; domain-agnostic → Vrataski | ✅ decisions settled; doc-content edits pending | feeds 0 |
| A | Collections (.jacket/) |
index + per-item md files + frontmatter, for the lists | ⬜ source-of-truth decided; rest undesigned | — |
| B | Deterministic tooling | Python: add/update/drain/rebuild-index/restamp + INDEX.md auto-maintenance |
⬜ feasibility confirmed; gated | A |
| C | Lean CLAUDE.md core |
What stays always-loaded; "where we are / where we've been" | ⬜ principles only | A, 0 |
| R | Command/skill review pass | /good-morning (and others) change a lot post-refactor |
⏸️ identified; own cycle | 0, A, C |
Decisions log (settled)
0 — Doc architecture
-
current-plan.md's content migrates intoCLAUDE.md(the always-loaded self-doc). The temporaryJACKET.mdrename idea is dropped. -
Audience-routed docs; duplication across them is fine — each consumer reads exactly one (except when working on Yggdrasil and updating intentionally). No dedup pressure.
-
Root-file roster:
File Audience Job Auto-loads? CLAUDE.mdself/model Lean, function-over-prose: operative conventions + live state Yes AGENTS.mdforeign agents Very technical: what Yggdrasil does + how No README.mdhumans Human-oriented intro to the same capabilities No FIRMWARE.mdall Curated "what & why" — role/behavior, inert-without-a-driver via import INDEX.mdall / reference Auto-maintained file/dir map via import SYSTEM.mdself + agents (+ humans) How the plumbing works now (current-only; history archives out) No INSTALL.mdsetup (human/self) One-time fresh-host bootstrap procedure No -
FIRMWARE.mdis the final name (was PHILOSOPHY → SOUL → FIRMWARE). Chosen for inert without a human driving it — firmware = baked-in behavior that needs a driver; pairs with the.jacket/exosuit metaphor. (SOULrejected as too alive/autonomous.) -
Three-way operational split:
SYSTEM.md= what is (steady-state plumbing reference) ·INSTALL.md= how to build it (bootstrap procedure) ·FIRMWARE.md= why/how it behaves (character). SYSTEM ↔ INSTALL cross-reference (result ↔ recipe). -
Links/imports matrix (⟼
@import/transclude · → plain link):FROM ↓ \ TO → FIRMWARE INDEX SYSTEM INSTALL CLAUDE.md(auto-loads)⟼ → → → AGENTS.md⟼ ⟼ → → README.md⟼ ⟼ → → Plus: uniform audience-header cross-links among the big three;
FIRMWAREis a transcluded leaf (no outbound imports);INDEXis the auto-generated map to everything. -
Key mechanism (verified against
working/claude-code-memory-docs.md): a bare@pathimports + eager-loads only insideCLAUDE.md(the sole auto-loaded doc), recursively up to 4 hops. InAGENTS.md/README.md(never auto-loaded)@importcosts zero context — purely a Kingdom-render/reading choice. Guardrail: never@-import an audience doc intoCLAUDE.md, or its imports recurse in. InCLAUDE.md, reference docs must be markdown links / backticked, not bare@, or they'd import. -
Conventions:
audienceis a YAML frontmatter field on every root doc + a top-of-file orientation block with sibling pointers ("lost? see…"). Frontmatter doubles as Kingdom hovercard fuel (quick glance on hover). (Verify: frontmatter doesn't disturbCLAUDE.mdauto-load — parking lot.)CLAUDE.mdself-awareness: links (not imports)SYSTEM/INDEX/INSTALLso Yggdrasil knows it maintains them — operative content, earns its place.SYSTEM.mdis current-only; stale infra facts archive out as they become irrelevant.
I — Identity & layer reframe
- Execution-partner layer killed. Odin Codin' was the only ever instance and is a never-built
skeleton (two docs + empty dirs); even fully built it was "a couple skills." Yggdrasil now runs
everything. New model:
Personal → Yggdrasil → Project-specific(two layers). - Designer/executor demotes from a layer to a phase pair within Yggdrasil (design → hand off a plan → execute). The plan stays the bridge; both phases human-in-the-loop.
- Domain-agnosticism is deferred, not enforced. Yggdrasil-now is a permissive personal
workshop/playground — free to mix agnostic design tooling with domain-specific stuff. The
agnostic discipline is a future Vrataski commitment (a curated subset extracted later; see
working/vrataski-vision.md). So no methodology-vs-findings line is drawn now. - Promotion guard dies (nothing downstream to promote from) → collapses to "build natively, stay bloat-aware." Bloat discipline now means navigable/lean/tidy (housekeeping), not domain-pure — those two were tangled in the old guard; they separate cleanly.
- Odin's residue: Hugin/Munin survive as naming for a future code-crawling skill's agent/memory split; the FFXI-RE backlog stays its own project (findings live in projects). The odin-codin repo isn't on this host anyway — "killing it" is doc/model-level.
A — Collections (.jacket/)
.jacket/is the official Yggdrasil directory name (dotfile/Kingdom-visibility wrinkle acknowledged + waved off by Brad).- "Collections" (Laravel nomenclature) = the indexed item-group stores: bookmarks, backburner, session-lessons, done-log, deferred. (Not standalone docs.)
- Markdown item-files are the source of truth; the YAML index is derived, regenerated by
rebuild-index. Shape (from Brad's exemplar):.jacket/<collection>.yaml(config + items index).jacket/<collection>/<slug>.md(frontmatter: name/title/description/tags/history + body).
- Undesigned: per-collection frontmatter schemas; how
## Deferred(in-context-by-design, not ledger-tracked) differs; how the Done-log/history collection works; archive interplay; theconfig/ledger's new home.
C — Lean CLAUDE.md core
- Principle only: always-loaded core = checkpoint ("where we are") + collection pointers +
operative conventions; completed design/build narrative and history extracted out into
collections/archive. The ~800 lines of finished decision-trail in
current-plan.mdis the big extraction target (its disposition is the 2026-06-19 "spent worklists" bookmark).
Open questions & parking lot
Today's later-today pile:
- ⬜ Research whether CommonMark autolinks can be customized so
@importrenders as a hoverable link (for Kingdom). Add to end of today; not now. - ⬜ Verify frontmatter doesn't break
CLAUDE.mdauto-load (claude-code-guide / docs).
Open design questions (for upcoming sessions):
- A: the per-collection schemas + the Done-log/history collection design.
- C: the actual lean-core structure + how "where we've been" is tracked (ties to A).
- I: whether
FIRMWARE.mdeven names Vrataski yet (Brad's call — one-line gesture at most).
Parked threads (deliberately not today):
- ⏸️
SYSTEM.md+INSTALL.mdcontent authoring (migration record + bootstrap) — bookmarked. - ⏸️ Puppet/Scry checkpoint rework — held (Brad still cooking).
- ⏸️ Vrataski curation/separation — future.
- ⏸️ Kingdom.md dotfile-visibility + the
@pathtransclusion-render feature.
Cashed-in backlog (items this refactor resolves):
- Deferred 2026-06-09 — "review the design of
current-plan.mditself" (the anchor). - bookmark 2026-06-18 — re-aim AGENTS.md external, migrate conventions to auto-loading CLAUDE.md, update good-morning.
- bookmark 2026-06-18 — fold Odin Codin' into Yggdrasil.
- bookmark 2026-06-19 — SYSTEM.md doc (references/role settled; content parked).
- bookmark 2026-06-19 — disposition convention for spent worklists/completed docs.
- bookmark 2026-06-06 — design-doc organization scheme.
- Deferred 2026-06-16 — convert by-hand markdown management into scripts (= subproject B).
- Deferred 2026-06-10 — puppet/scry checkpoint recording (held, not cashed).
Understanding summary
- What: a multi-subproject restructure of how Yggdrasil stores its own state + describes itself.
- Why:
current-plan.mdis a 1.6k-line monolith loaded every session; conventions are stranded in non-auto-loadedAGENTS.md; the lists accumulate by hand; a phantom execution-partner layer adds fiction. The refactor makes the always-loaded surface lean, routes content by audience, makes the lists deterministic collections, and simplifies the layer model. - Who for: primarily Yggdrasil-as-self (always-loaded behavior); plus foreign agents + humans who encounter the project; plus Brad maintaining it.
- Constraints:
CLAUDE.mdstays lean (function > prose); markdown = source of truth, indices derived; human-in-the-loop / no-demand-character; Kingdom-viewability held, not a current gate. - Non-goals (this effort): the Vrataski unification; the puppet/scry rework; writing SYSTEM/INSTALL content; the command/skill review pass (own cycle, downstream).
Assumptions
- Frontmatter loads harmlessly in
CLAUDE.md(to verify). @FIRMWARE.mdimporting every session is acceptable (curated/short).- Odin Codin' is fully captured in
archive/odin-codin-source.md(the two docs) + empty skeleton.