Orion vault — clean initial history

Knowledge vault (Orion/PARA) migrated from the pre-Orion 484vault on
2026-10-01. Deliberately orphaned: prior history contained a plaintext
password and stays local-only on branch archive/pre-boilerplate-history.
Secrets and live Hermes state are gitignored.
This commit is contained in:
Avi 2026-10-02 08:34:04 -05:00
commit a66996ac10
233 changed files with 103810 additions and 0 deletions

158
6. Templates/_contracts.md Normal file
View file

@ -0,0 +1,158 @@
---
type: reference
title: "Page contracts"
tags:
- reference
---
# Page contracts
**Read this when creating or editing a page.** The `.md` files beside this one are copy-ready skeletons; this file is the rule they implement. **When a contract changes, change its skeleton in the same edit** — a skeleton that drifts from its contract produces pages the skills can't read.
---
## Area hub — `2. Areas/<Area>/<Area>_hub.md`
```yaml
type: area
status: standing # standing | archived
id_prefix: WEB # short, uppercase, set once, never changed
workstream_counter: 0 # highest ID issued. Source of truth for IDs
parent: # nested Areas only. Never points at itself
updated: YYYY-MM-DD
tags: [hub, <area-tag>]
```
Body: `## What this is` (one sentence) · `## Workstreams` (each Project by ID, with status) · `## Open items` · `## Key files` · `## People`.
**Areas take no `next:`, no `deadline:`, and no freshness computation.** A container doesn't compete for attention.
Every Area has `2. Areas/<Area>/knowledge/_index.md` — seeded at creation, stating what belongs there.
---
## Project hub — `1. Projects/<Area>/<Name>/<ID>_hub.md`
```yaml
type: project # never `hub`
id: WEB-1 # from the Area's workstream_counter
area: <Area folder name> # or the literal `none` — absent ≠ none
done_when: "one sentence, testable"
status: open # open | paused | closed | archived
next: "verb → target — detail [since YYYY-MM-DD]" # optional; may be a YAML list
paused_because: "one line" # required when paused
deadline: YYYY-MM-DD # optional — the single next delivery gate
threads: [slug]
updated: YYYY-MM-DD
tags: [hub, <area-tag>]
```
Body: `## What this is` · `## Tasks` (checkboxes, `(owned by: name)` when not the owner's) · `## Open items` · `## Key files` · `## People`.
- **`done_when:` is required.** If you can't write it, it isn't a Project. If it needs the words "ongoing", "maintain" or "as needed", it's an Area.
- **`next:` — one move per entry.** Two moves go in a YAML list, never packed into one string. Grammar and verbs → `AGENTS.md`, *The `next:` field*.
- **`area: none` is legal but must be written.** Such a project has no knowledge base to receive its deliverable; `orion-close` archives it whole.
**A workstream *is* a Project.** It opens when an Area needs finite work done, and closes via `orion-close`, which returns its deliverable to the Area:
```
Area ──spawns──▶ Project (id, done_when)
▲ │ on close
└── knowledge/ ◀───┤ deliverable
└── process record ──▶ 5. Archive/<Area>/<ID>/
```
A workstream belongs to exactly one Area. A concern spanning several is a **thread**.
---
## Person — `3. Resources/People/<Full Name>.md`
```yaml
type: person
tier: contact # relationship | contact
name: Full Name
pronouns: # ask; never infer from a name. Blank until known
role:
orgs: []
contact:
status: active # active | dormant
cadence: # relationship tier ONLY: weekly | biweekly | monthly | organic
last_contact: YYYY-MM-DD
follow_up_by: # relationship tier ONLY — a real date
updated: YYYY-MM-DD
tags: [person]
```
Body: `## Role & Relationship` · `## Background` · `## Context` · `## Open Items` · `## Contact History` (dated lines, newest first).
**Two tiers, and only one can flag:**
| Tier | Carries | Can flag? |
|---|---|---|
| `relationship` | `cadence` + `follow_up_by`, both required | **Yes** — the only pages follow-up checks read |
| `contact` | Neither — their presence is a lint finding | **Never** |
**A contact is not a neglected relationship.** It's someone the vault knows facts about. If someone doesn't warrant a real follow-up date, they're a contact.
- **`organic` cadence** means "no fixed interval — the next contact is pegged to a specific event." It still requires a real `follow_up_by`, set against that event.
- **A relationship page with no `follow_up_by` cannot flag and is invisible.** Lint reports it as a defect.
- **Spent follow-ups.** A `follow_up_by` on or before `last_contact` has been overtaken by contact. Compute the live due date instead: `weekly`/`biweekly`/`monthly` → `last_contact` + 7/14/30 days, rendered *(from last contact)*; `organic` → **no date since contact** (never overdue). **Never write the computed date back** — the stored field stays what a person set.
- **`status: dormant`** — the engagement ended; the page and every fact stay.
---
## Decision — `4. Decisions/YYYY-MM-DD-<slug>.md`
```yaml
type: decision
date: YYYY-MM-DD
topic: Short title
areas: [Area or Project]
status: open # open | closed | reversed
updated: YYYY-MM-DD
tags: [decision]
```
Body: `## Context` · `## Decision` · `## Rationale` · `## Expected outcome` · `## Follow-up` (dated lines).
**Never edit a past decision's substance.** A reversal is a new decision file that links the old one; the old one's `status` becomes `reversed`.
---
## Thread — `3. Resources/Threads/<slug>.md`
```yaml
type: thread
title: Short title
status: open # open | watching | resolved | dropped
domains: [Area or Project]
people: [Full Name]
opened: YYYY-MM-DD
updated: YYYY-MM-DD
tags: [thread]
```
Body: `## What it is` · `## Why cross-cutting` · `## Current state` (replace, don't stack) · `## What's needed` · `## Update log` (append-only, newest first).
**A thread opens** when one signal shows up in two or more separate Areas or Projects. **It closes** when a decision resolves it, or it collapses to a single domain. Resolved and dropped threads move to `5. Archive/Threads/`.
---
## Reference note — `3. Resources/Research/` or `2. Areas/<Area>/knowledge/`
```yaml
type: reference
title:
source: # file, URL, sender, conversation — or "source unrecorded"
updated: YYYY-MM-DD
tags: [reference, <topic or area tag>]
```
**`source:` is never blank.** Placement → `AGENTS.md`, *The classification test*.
---
## Inbox notes
Daily notes and weekly sweeps carry `date:` and `tags: [inbox, daily-note]` / `[inbox, weekly-sweep]` — no `type:`. Captures carry `date:` and `tags: [inbox]`.

22
6. Templates/area-hub.md Normal file
View file

@ -0,0 +1,22 @@
---
type: area
status: standing
id_prefix:
workstream_counter: 0
parent:
updated: YYYY-MM-DD
tags:
- hub
---
# <Area>
## What this is
## Workstreams
## Open items
## Key files
## People

View file

@ -0,0 +1,52 @@
---
date: YYYY-MM-DD
tags:
- inbox
- daily-note
---
RE: <Weekday> <Month D YYYY> — [[<prior note>]]
## Focus
<What today is about. Three lines, no lists.>
## Since the last note
- <Up to five bullets. Omit the section when nothing changed.>
## <ID> · <Name> — <what is actually owed>
**Where it stands:** <one or two plain sentences.> → [[<hub>|hub]]
**Yours:**
- [ ] <task> — <asked N times since Mon D>
**Waiting on:** <Person — what, N days> · or nobody
> Notes:
## Loose
### <Item that belongs to no single workstream>
<Plain prose.>
> Notes:
## Open questions — <N> live
- [ ] <N>. **<Question>** — <one clause of context>
## People
**<N> armed · <N> overdue · <N> defects**
**Overdue**
- <Name> — <N days> (<Mon D>) — <what they are tied to>
**Due in the next 7 days**
- <Name> — <Mon D> — <what they are tied to>
## Standing
- <Holds · structural facts. Three lines max.>

24
6. Templates/decision.md Normal file
View file

@ -0,0 +1,24 @@
---
type: decision
date: YYYY-MM-DD
topic:
areas: []
status: open
updated: YYYY-MM-DD
tags:
- decision
---
# <Decision title>
## Context
## Decision
## Rationale
## Expected outcome
## Follow-up
- YYYY-MM-DD:

32
6. Templates/person.md Normal file
View file

@ -0,0 +1,32 @@
---
type: person
tier: contact
name:
pronouns:
role:
orgs: []
contact:
status: active
cadence:
last_contact:
follow_up_by:
updated: YYYY-MM-DD
tags:
- person
---
# <Full Name>
## Role & Relationship
## Background
## Context
## Open Items
- [ ]
## Contact History
- YYYY-MM-DD:

View file

@ -0,0 +1,28 @@
---
type: project
id:
area:
done_when: ""
status: open
next:
paused_because:
deadline:
threads: []
updated: YYYY-MM-DD
tags:
- hub
---
# <ID> · <Name>
## What this is
## Tasks
- [ ]
## Open items
## Key files
## People

12
6. Templates/reference.md Normal file
View file

@ -0,0 +1,12 @@
---
type: reference
title:
source:
updated: YYYY-MM-DD
tags:
- reference
---
# <Title>
*Source: <where this came from, or "source unrecorded">*

27
6. Templates/thread.md Normal file
View file

@ -0,0 +1,27 @@
---
type: thread
title:
status: open
domains: []
people: []
opened: YYYY-MM-DD
updated: YYYY-MM-DD
tags:
- thread
---
# <Thread title>
## What it is
## Why cross-cutting
## Current state
## What's needed
- [ ]
## Update log
- **YYYY-MM-DD:**

View file

@ -0,0 +1,48 @@
---
date: YYYY-MM-DD
tags:
- inbox
- weekly-sweep
---
RE: [[<prior sweep>]]
## How to use this
Tick a box when you've looked at it. Write under anything that changed — a Notes line is enough. `ingest` files it.
## Since the last sweep
- <Up to five bullets.>
## Areas
### <Area> — <one line on what it holds> → [[<hub>]]
- [ ] **<ID> · <Name>** — <status> · <where it stands, one line>
> Notes:
## Threads
- [ ] **<slug>** — <status> · <one line>
> Notes:
## People
### Armed — <N>
- [ ] **<Name>** — <N days overdue / due Mon D> · <what they are tied to>
> Notes:
### Released — follow-ups whose work closed
- [ ] **<Name>** — <follow-up date> · was for <workstream>, closed <Mon D>
> Notes:
### Contacts — <Area>
- [ ] **<Name>** — <role, one line>
> Notes:
## Open questions — <N> live
- [ ] <N>. **<Question>** — <one clause of context>