5.3 KiB
| name | description |
|---|---|
| polaris-close | Close a finished workstream in an Polaris vault and return its deliverable to the Area that spawned it. Verifies done_when is actually met, splits the output into deliverable (→ 2. Areas/<Area>/knowledge/) and process record (→ 5. Archive/<Area>/<ID>/), updates the Area hub, releases follow-ups tied to the work, and repoints inbound links. Not reversible. Distinct from polaris-archive, which retires a whole Area. Triggers on: close workstream, close [ID], this is done, finish workstream, ship it. |
polaris-close — return a finished workstream to its Area
An Area spawns a workstream; when the workstream finishes, its deliverable comes home. The Area is the memory; the workstream is the episode. If finished output archives together with its process, the Area learns nothing and the next workstream starts cold.
2. Areas/<Area>/ ──spawns──▶ 1. Projects/<Area>/<Name>/
knowledge/ ◀── deliverable ──────────────────┤
└── process ──▶ 5. Archive/<Area>/<ID>/
Close or archive?
polaris-close |
polaris-archive |
|
|---|---|---|
| Trigger | One workstream finished | A whole Area ended or paused |
| The Area | Stays, gains knowledge | Moves into the archive |
| Reversible | No | Yes |
Is the Area staying? → close. Is it going away? → archive. If there's any chance the work resumes, it's paused, not closed.
1. Verify done_when: against reality
Read the hub's done_when: and check it against what actually exists — not against how finished the work feels.
Not met → stop and say which part is outstanding. Never rewrite done_when: at close time to match what happened; a done-when edited at close never tested anything. Legitimate paths:
| Situation | Action |
|---|---|
| Work is done, the sentence was wrong | The owner's call. Record the correction and why on the hub, then close |
| Work stopped and won't resume | Not a close — paused with a reason |
| Scope changed | Old workstream closes as superseded; a new one opens with a new ID |
2. Split the output
| Pile | Goes to | What |
|---|---|---|
| Deliverable | 2. Areas/<Area>/knowledge/ |
What the Area now knows: conclusions, specs, finished documents, reusable findings |
| Process record | 5. Archive/<Area>/<ID>/ |
How it got there: session notes, drafts, dead ends, the hub itself |
One question per file: would someone working in this Area six months from now want this without knowing the workstream existed? Yes → knowledge. No → archive.
When genuinely unclear, ask. This is the one checkpoint that stops execution.
3. Migrate the deliverable
Move each deliverable file into knowledge/. Keep the filename (renaming breaks links for no gain). Add a provenance line if missing: "Produced by <ID> — <Name>, closed YYYY-MM-DD."
4. Archive the process record
Move everything else, including <ID>_hub.md, to 5. Archive/<Area>/<ID>/. Set status: closed, add closed: YYYY-MM-DD. No tombstone needed — nothing to restore.
5. Update the Area hub
Mark the workstream closed in ## Workstreams, with its ID and one line on what it produced. Link the deliverable from the hub or knowledge/_index.md. ⚠ Never decrement workstream_counter:. IDs are never reused.
6. Release follow-ups
List every tier: relationship person whose follow-up exists for this workstream (they link the hub, are named by its next:, or their page says so). Change nothing on their pages — whether the relationship outlives the work is the owner's call. Record them on a Released: line in the log entry; the next weekly sweep lists them.
7. Repoint inbound links
- Scan every
.mdin the vault for[[…]]targets pointing into the old folder (full-path and bare-name forms). Ignore links inside code blocks. - Resolve each hit against the real file tree — a grep hit is a hypothesis.
- Change only the link target, never the prose. Keep display aliases:
[[new/path/File|Original Text]]. Ledgers (4. Decisions/,wiki/log.md,wiki/folds/) included — pointer only. - Rescan from scratch and report that number, not a tally of your edits.
8. Log and hand off
Append to wiki/log.md: [build] with a Shipped: line if the deliverable is a shipped thing, otherwise [vault]. Include Released: if any. Then suggest cascade.
Output
## Close — <ID> · <Name>
done_when: "<sentence>" — ✅ met / ⚠ met with correction (why)
Deliverable → 2. Areas/<Area>/knowledge/
- <file> — what the Area now knows
Process → 5. Archive/<Area>/<ID>/ — N files incl. hub
Area hub: <what changed>
Links repointed: N — rescan shows N dead (was N)
Released: <Name — follow_up_by, what it was for> · or none
Next: run cascade.
Rules
- Verify done_when before anything moves. Never rewrite it to fit.
- Split deliverable from process. Ask only when genuinely unclear.
- Every migrated file carries its origin.
- Never decrement the counter. Never reuse an ID.
- Closing isn't reversible. If it might resume, pause it.
- Only link targets change. Rescan and report the rescan.
area: noneworkstreams archive whole — there's no knowledge base to receive a deliverable.