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

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.

  1. Scan every .md in the vault for [[…]] targets pointing into the old folder (full-path and bare-name forms). Ignore links inside code blocks.
  2. Resolve each hit against the real file tree — a grep hit is a hypothesis.
  3. 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.
  4. 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: none workstreams archive whole — there's no knowledge base to receive a deliverable.