Orion/.agents/skills/orion-cascade/SKILL.md
Avi a66996ac10 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.
2026-10-02 08:34:48 -05:00

7 KiB
Raw Permalink Blame History

name description
orion-cascade Sync an Orion vault's wiki/ navigation layer from the numbered folders. Rewrites wiki/hot.md (current state: outstanding sends, workstreams, the owner's own next moves, people due for follow-up), appends one wiki/log.md entry, rebuilds wiki/index.md when structure changed, and reports how many log entries are waiting to be folded. Run at the end of every session that changed something. Triggers on: cascade, run cascade, sync the wiki, update the wiki.

orion-cascade — sync the wiki layer

The numbered folders are the source of truth. Cascade reads them and rewrites wiki/ to match. One command, no flags. Always rewrite hot.md and append to log.md; rebuild index.md when you see the structure changed (a hub added, moved, renamed, or its status/area changed). When in doubt, rebuild it.

⛔ Skip every path listed under Fences in AGENTS.md.


1. Read hubs

Glob 1. Projects/**/*_hub.md and 2. Areas/**/*_hub.md — match the _hub suffix, never a full filename.

  • Skip paused, closed and archived Projects for attention purposes (count them, don't read them further). Paused is a deliberate exclusion.
  • Areas carry no attention status. List them; never compute drift or freshness on one.
  • For each open Project: id, name, next: (may be a YAML list — read every entry), deadline:.

2. Read people

Glob 3. Resources/People/*.md. Only tier: relationship pages can flag.

For each: compute the live due date:

  • follow_up_by after last_contact (or no last_contact) → follow_up_by.
  • follow_up_by on or before last_contact is spent → weekly/biweekly/monthly: last_contact + 7/14/30 days, marked (from last contact); organic: no date since contact (its own line, never overdue).
  • No follow_up_by at all → defect.

Bucket: Overdue · Due within 7 days · No date since contact · Defects. Never write a computed date back to the page.

⚠ This step is where names get swapped or dropped. Before writing, check every name you're about to render against its own file's tier: and dates. Similar names are the usual failure.

3. Read threads

Glob 3. Resources/Threads/*.md: status, one-line state. A thread whose domains: no longer name any live hub has collapsed — flag it for close or drop.

4. Read holds

wiki/meta/holds.md, before rendering any age. Rules → AGENTS.md, Holds. In short: an open hold covering an item → render held; a closed hold → 3d (since 01-05, 11d held); an item created after the hold began is not covered.

5. Rewrite wiki/hot.md

Rewrite, never append. Hard cap 80 lines. Sections in this order:

## Hold                 ← only when one is open. Two lines: period, scope
## Outstanding sends    ← every `send` and `wait` from live hubs, with age
## Workstreams          ← "N open: WEB-1, WEB-3, OPS-2 · N paused: …" — one line, never a block each
## Now                  ← every `build`/`decide` next: — the owner's own moves. Oldest [since] first, no ages
## People               ← "N armed", then overdue / due soon / defects by name
## Threads              ← open threads, one line each (omit if none)
## Warnings             ← ⚠ items worth carrying (omit if none)
## Standing state       ← carried forward, pruned each run

Ageing sends: [since YYYY-MM-DD] is the authority → else git (git log -1 --format=%ad --date=short -S'next:' -- <hub>) → else no age. A wrong age is worse than none.

Mis-verbed moves are a repair: a send →/wait → naming the owner is really a build; a build → whose move is a message is really a send. Fix the hub's verb, then render.

Never age an open workstream. It has no clock by design.

The cap is enforced by eviction, not compression. At 80 lines, find what no longer belongs; don't shrink prose or raise the cap.

The two-run exit for warnings. A ⚠ item that appears in two consecutive cascades without resolving moves to wiki/meta/open-questions.md as a forced binary, and hot.md keeps one pointer line stating the consequence:

⚠ Vendor quote unverified — don't cite its dates → open question #4

Never drop a warning without leaving a pointer.

Vault voice: everything in hot.md is the vault speaking. A claim sourced from a document, not from the owner, stays attributed or stays out.

6. Rebuild wiki/index.md — when structure changed

Plain markdown, one line per page, navigation only — no prose:

## Areas
- [[2. Areas/Website/Website_hub|Website]] — standing · prefix WEB · 3 issued
## Projects
### Open
- [[1. Projects/Website/Pricing Page/WEB-3_hub|WEB-3 Pricing Page]] — done when: "…"
### Paused
## Threads
## People
### Relationship tier
- [[3. Resources/People/Sam Example|Sam Example]] — monthly · due 2026-02-01
### Contacts
## Decisions
- [[4. Decisions/2026-01-05-pricing-model|2026-01-05 Pricing model]] — open
## Folds

(If the vault is opened in Obsidian with Dataview, the owner may replace sections with queries. Keep the headings.)

7. Append to wiki/log.md

New entry at the top, below the header. Never edit a past entry.

## YYYY-MM-DD — [vault] Cascade: <what changed, in a few words>
- Projects: N open, N paused
- People: N overdue, N due soon — <names>
- <notable state changes>

Use [build] only when the session shipped something, and then add Shipped: <what exists now that didn't>.

8. Count unfolded log entries — every run

grep -c '^## [0-9]' wiki/log.md        # all entry headings
grep -c '\[folded\]' wiki/log.md       # fold pointers — not entries

Unfolded = headings − pointers. Threshold 16. Print the number every run, above or below threshold: Log: 9 / 16 or Log: 23 / 16 — fold due. Don't run the fold — that's orion-fold, on the owner's word.


Output

## Cascade — YYYY-MM-DD

Sends outstanding
- <Person> — <what> (<age>)

Workstreams: N open (<IDs>) · N paused (<IDs>)

People (armed: N)
Overdue: <Name> (due YYYY-MM-DD)
Due this week: <Name> (due YYYY-MM-DD[, from last contact])
Defects: <Name> — no follow_up_by

Threads: <collapsed or notable>
Log: N / 16 [— fold due]
Wiki updated: hot.md · log.md [· index.md]
Verified: <N> rendered names checked against their own files — pass / <mismatch>

The Log and Verified lines print every run. A check that only speaks when something's wrong teaches nobody what normal looks like.

Rules

  • hot.md and index.md are state — rewrite. log.md is a ledger — prepend, never edit.
  • Skip paused/closed/archived Projects. Never compute drift on an Area.
  • Only tier: relationship people flag. Spent follow-ups compute a live date; the stored one is never rewritten.
  • Never render an age you can't source.
  • Unconfirmed claims stay attributed or out.
  • Verify every rendered name and count before writing.