Skip to content

Generated Leaves

Eidos has exactly two derived views. They share three properties, and the properties matter more than the outputs:

  • Regenerated wholesale. Never merged, never patched.
  • Nothing hand-written to preserve. Anything you type into one is lost.
  • They annotate, never gate. A stale leaf is a nuisance, not a failure.

Each collection carries a generated index.md in its folder, listing its blueprints so a human or an agent can navigate without scraping the tree.

specs/index.md
# specs
<!-- index: specs (regenerated) -->
## playback
- [Watch a Video](playback/watch-a-video.md) — play a video reliably, signed in or not, adapting to the connection.
- [Resume Playback](playback/resume-playback.md) — returns a viewer to the exact second they stopped.
## channels
- [Subscribe to a Channel](channels/subscribe-to-a-channel.md) — follow a channel and get its new uploads.

Grouped under sub-folders when the collection has them, flat when it doesn’t. Links are relative to the collection folder. Rebuilt by the index skill.

Which makes summary worth more attention than its size suggests. It’s the only thing most readers will see of most blueprints — one plain line saying what this is. Write it as a distillation of the opening section, not as a title restated.

After blueprints are added, renamed, moved, or removed. The index skill walks the framework’s declared collections, reads each one-level sub-folder, and rewrites each index.md wholesale.

It ships a build-index.py that does the walk deterministically where a shell is available, and falls back to doing it by hand on a sandboxed host.

The spatial counterpart: an Obsidian .canvas file — JSON Canvas 1.0 — from the canvas skill.

Each collection draws the way its framework declares, in - **Canvas:**:

Declaration Draws as
file A full-file node — for prose meant to be read whole, like a frame.
card A node embedding the blueprint.
card from ## Section A node embedding just that section.
(absent) A plain card.

Structurally: each collection is its own group, and a grouped collection nests a group per sub-folder. Directories become nested group nodes.

Each blueprint’s connects_to links become directed edges — this → target. That’s the intentional map: what you’re asserting relates to what.

depends_on is off by default and can be overlaid in a distinct colour. It’s a different question — implementation dependency rather than conceptual connection — and mixing the two produces a diagram that means nothing. The distinction →

You choose which collections to include. Top-level documents are not mapped.

It draws blueprints and the edges between them. The framework is the one thing it never draws — which is what the name is for.

The generated .canvas is itself a top-level doc, so register it in ## Top-Level in Framework.md. The default filename follows the naming convention: blueprint-map.canvas under kebab-case.

Both leaves annotate. A stale index or a missing canvas is never an error that stops anything — consistent with the standard’s portability over prescription.

They’re also both cheap to regenerate and safe to delete, which is the test for whether something belongs in this category at all. If it can’t be reconstructed from the blueprints, it isn’t a leaf; it’s content, and it belongs in a file someone owns.