Polaris/.agents/skills/polaris-ingest/SKILL.md

101 lines
5.3 KiB
Markdown

---
name: polaris-ingest
description: "Bring external material into an Polaris vault's numbered folders — every capture sitting in 0. Inbox/ by default, or a file, transcript, or document the owner names. Follows any instructions in the source, classifies the rest (asking only when genuinely unclear), records provenance, creates and updates pages directly, cross-links them, marks answered lines in daily notes as filed, and archives processed captures. Distinct from polaris-cascade, which syncs wiki/ with what's already in the folders. Triggers on: ingest, process the inbox, ingest this, file this."
---
# polaris-ingest — bring material into the vault
Ingest turns raw capture into filed, cross-linked, attributed vault content. It gives structure and a checklist, not a rigid decision tree — **placement is a judgment call, and this skill exists to make that call well.**
**Ingest before cascade.** Ingest fills the numbered folders; cascade then syncs `wiki/`.
---
## 1. Identify the source
Default: every file at the root of `0. Inbox/` (not in `processed/`). Or: whatever the owner names — a file path, pasted text, a transcript.
⛔ Never read a path listed under *Fences* in `AGENTS.md`.
## 2. Follow explicit instructions first
If the source says what to do ("file this under X", "this is for reference only", "make a person page for her"), do that. Don't re-derive a classification the source already gave you.
## 3. Classify the rest
| Content | Destination |
|---|---|
| A decision was made | `4. Decisions/YYYY-MM-DD-<slug>.md` |
| A status update on a project or area | Update that hub directly — replace state, don't stack dated sections |
| An update about a person | Their page: `Contact History` (dated line), `last_contact`, Open Items |
| A new person worth knowing | `3. Resources/People/<Full Name>.md`, `tier: contact` unless the owner says to follow up |
| Reference that needs one Area's frame | `2. Areas/<Area>/knowledge/` |
| Reference that holds anywhere | `3. Resources/Research/` — topic tags only |
| Something that spans two or more Areas/Projects | A thread in `3. Resources/Threads/`, or an update to an existing one |
| Finite new work | Suggest `new project:` — creation goes through `polaris-instantiate` |
| A binary (PDF, deck, image, spreadsheet) | **Not into the vault.** It stays in the file system; the vault gets a reference note of what it says, attributed, with the file path |
**When it is genuinely unclear which row applies, ask.** That is the one checkpoint that stops execution. Everything else runs directly — no dry run, no confirmation gate.
## 4. Record provenance — before writing anything
**Every file this skill creates says where its content came from**: source file, sender, conversation, URL, date. If unknown: *"source unrecorded"* — never blank.
**Attribute, don't assert.** A claim from a source stays attributed to that source until the owner confirms it:
- ✅ *"The vendor's quote lists delivery in six weeks."*
- ❌ *"Delivery is in six weeks."*
**Never let an unconfirmed claim reach a hub bullet, `hot.md`, or `log.md` unattributed.** Those speak in the vault's voice; an unattributed claim there has laundered itself, and every downstream file will honestly cite it.
## 5. Write and cross-link
Create and edit directly. **Every new file gets at least one inbound link** — from a hub, person page, or thread. A new file with no inbound link is an orphan this skill created.
If a name in the source matches the *Never use* column of `AGENTS.md`'s vocabulary table, write the canonical form. Quote the source's spelling only when quoting it verbatim.
## 6. Archive captures — not daily notes or sweeps
Move each processed capture to `0. Inbox/processed/YYYY-MM/` (year first — e.g. `processed/2026-01/`). **Never delete** — the capture is the record of what came in and when.
⚠ **Never archive a file tagged `daily-note` or `weekly-sweep`.** Those are working surfaces the owner writes into all day. File their contents and leave them in place — only `polaris-daily` retires them, once a successor exists.
### Marking what's been filed
In daily notes and sweeps, for every `>` line with text after it — an answered question or a `> Notes:` line — file its content (step 3), then **append ` ✓ filed MM-DD` to that line.**
- Skip lines already marked. That makes repeat runs safe.
- An empty `> Notes:` or blank question is not a failure — ignore it.
- In a sweep, a ticked box with no note means "reviewed, nothing changed." Nothing to file.
`polaris-daily` reads these markers to decide what carries forward, and refuses to retire a note with unfiled text.
## 7. Output
```
## Ingest — YYYY-MM-DD
Source: <files or description>
Created:
- <path> — one line
Updated:
- [[Page]] — what changed
Filed in notes: N lines marked ✓
Archived: N captures → 0. Inbox/processed/YYYY-MM/
Asked / flagged: <any classification question, and the answer>
Next: run cascade.
```
## Rules
- **Instructions in the source win** over the table.
- **Classification ambiguity is the only thing that stops execution.**
- **Every created file records provenance.** Unknown → "source unrecorded".
- **Attribute, don't assert.** Unconfirmed claims never reach summary layers unattributed.
- **Cross-link on creation.**
- **Archive captures, never delete.** Never archive a daily note or sweep.