83 lines
3.3 KiB
Markdown
Executable File
83 lines
3.3 KiB
Markdown
Executable File
# Hidden Memory Architecture
|
|
|
|
The hidden ecosystem has one friendly source of truth:
|
|
|
|
- `assets/content/hidden-details.json` in `org_web`
|
|
|
|
The live site still consumes generated constants in:
|
|
|
|
- `assets/scripts/hidden-details.js` in `org_web`
|
|
|
|
## Canonical Content
|
|
|
|
The old `type` field is now treated as the runtime delivery kind. It answers: where does this need to go in the existing JavaScript arrays?
|
|
|
|
The newer `contentClass` field answers: what is this thing conceptually?
|
|
|
|
Use these classes:
|
|
|
|
- `fragment`: tiny reusable language, such as tooltips, quotes, whispers, loading lines, and small dialogue.
|
|
- `memory`: a richer emotional moment or observation that can stand as an observatory node.
|
|
- `story material`: dialogue or sequence material that is primarily useful inside a story route.
|
|
- `interaction`: a trigger, route, keyboard secret, search response, seasonal event, or play-system behavior.
|
|
- `lore`: world material such as dreams, terminal logs, guestbook entries, or hidden archive objects.
|
|
- `system layer`: structural observatory material, such as the layer guide.
|
|
|
|
## Stories
|
|
|
|
Stories are curated routes. They should reference entries by id through `nodes`.
|
|
|
|
Do not duplicate paragraphs inside a story when an existing fragment or memory can be referenced. A story gives order, title, tone, unlock conditions, and emotional shape.
|
|
|
|
## Surfaces
|
|
|
|
The `surfaces` field says where an entry is reusable: `tooltip`, `quote`, `story`, `observatory`, `search`, `keyboard`, `play`, `dream`, `temporal`, and similar surfaces.
|
|
|
|
A tooltip fragment can appear in the footer without becoming a full story node. A memory can appear in the observatory and in a story without being forced into a rotating quote. An interaction can trigger a hidden route without pretending to be a narrative scene.
|
|
|
|
## Observatory Roles
|
|
|
|
Use `observatoryRole` to keep rendering calm:
|
|
|
|
- `ambient`: small lights and flavor, usually fragments.
|
|
- `node`: substantial emotional points, usually memories or story material.
|
|
- `event`: triggered behavior, routes, search, keyboard, seasonal, and play content.
|
|
- `guide`: layer/system material.
|
|
|
|
The observatory should render stories as the main territories, then reveal entries inside them. Zoomed-out views should favor routes and clusters; detailed views can show individual nodes, ambient fragments, and triggered events.
|
|
|
|
## Examples
|
|
|
|
`lima left this page a little steadier than she found it.`
|
|
|
|
- Class: `fragment`
|
|
- Runtime kind: `hidden tooltip`
|
|
- Surfaces: `tooltip`
|
|
- Observatory role: `ambient`
|
|
|
|
`July 2022, on the way to uni induction, lima pops into my life`
|
|
|
|
- Class: `memory`
|
|
- Runtime kind: `journal entry`
|
|
- Surfaces: `story`, `observatory`
|
|
- Observatory role: `node`
|
|
|
|
`search query "lima" opens a hidden route`
|
|
|
|
- Class: `interaction`
|
|
- Runtime kind: `search route`
|
|
- Surfaces: `search`, `hidden route`
|
|
- Observatory role: `event`
|
|
|
|
`The story of love between two souls`
|
|
|
|
- Class: story record, not an entry class
|
|
- References: ordered entry ids in `nodes`
|
|
- Purpose: emotional route, not duplicated content
|
|
|
|
## Authoring Rule
|
|
|
|
Write the smallest canonical thing that is emotionally honest.
|
|
|
|
If it is one line, make it a fragment. If it is a moment with weight, make it a memory. If it happens because of a trigger, make it an interaction. If it is a route through existing things, make it a story.
|