Archive
The Archive/ area of the vault: everything finished or shelved goes here, and
archiving is always a move — never a deletion. Permanent deletion is /remove. A
project's backend pair is archived and restored together with its folder.
Base layer
Read before acting, each as ../../para/<file>.md relative to this skill's base directory — these hold the shared rules, do not restate them from memory:
../../para/paths.md— always, including «Language»: the strings below come fromlang/<LANG>.md../../para/find-target.md— for the subcommands that take a target../../para/move.md— always../../para/confirm.md— always../../para/dod.md— when the target is a project../../para/tasks.md— when the target is a project: the operations, pairing, area projects../../para/note-format.md— when editing frontmatter; «Legacy fields»
Subcommands
The first word of $ARGUMENTS picks the subcommand. list and restore are the only
keywords — anything else is the target of an archive, so /archive project c archives
that project. Empty $ARGUMENTS → show the three subcommands and ask.
<target> — put into the archive
-
Find the target per
find-target.md, operation "Archive". -
If the target is a project:
- Open tasks first. Read the paired project's tasks (
task.list, open, withproject_ref). If tasks are open, list them and ask once (Tier 1.5) what happens to them: complete them (task.completeon each), move them to an area project (task.movewitharea) or leave them inside the archived project. Where the adapter markstask.complete«not supported», the first choice is thearchive.close_in_appstring instead, and nothing is called for it. Carry the answer out before going on. Underpairing: separate, an unpaired project with a legacyTasks/folder has no backend side;dod.mdsays how its tasks are checked. Underpairing: nonethe tasks are the project's ownTasks/notes and move with the folder. - Apply
dod.mdand name every condition that does not hold. That file decides whether the outcome is completed or abandoned; do not reproduce its reasoning here, and do not soften it. - Move the whole folder, internal structure untouched, from
Projects/PROJ-xxxx <title>/toArchive/PROJ-xxxx <title>/. The name stays exactly as it is: the id stays with the project for life, and id issuance scansArchive/to keep it reserved (project-id.md). project.archivewhen paired (always, underpairing: none; a no-op there). Keeptasks_ref:in the overview — restore needs it.- Legacy fields (
statusand the rest) are left exactly as they are (note-format.md): an archived project keeps its history.
- Open tasks first. Read the paired project's tasks (
-
If the target is a standalone note (Area, Resource, or a stray from
Inbox/): move the single.mdintoArchive/.- Areas are ongoing by definition and normally are not archived. Ask what was meant (Tier 1.5) — it usually means the note is stale, not that the responsibility ended.
- A legacy task note inside a project that is not being archived: moving it breaks nothing useful and is probably not what was meant — ask (Tier 1.5). Tasks are closed in the backend now.
-
Check the basename for collisions before moving (
move.md,note-format.md). A duplicate makes every link to that name ambiguous — Tier 1.5, ask rather than move. -
Close the loop — projects only. Before reporting, ask one question and wait for the answer: the
archive.ask_changedstring. Not what got produced — condition 2 ofdod.mdalready covers the artifact — but what is different now that it is over, and whether it was worth what it cost.Before asking, read the
project.valuesection aloud — the benefit the user wrote down when the project began (note-format.md, "Three sections about the outcome") — and ask whether it came true with thearchive.expectedstring ({value}= what they wrote, e.g. «−5 hours of review a week»). If the section is empty or absent, ask the question as it stands, without inventing an expectation.Write the
project.what_changedsection at the end of the overview body. Its first line is the outcome perdod.md— theproject.outcome.completedorproject.outcome.abandonedstring ({reason}in the user's words) — then the user's answer in their own words; do not summarise it into your own. If the answer names something that outlives the project, that is condition 4 ofdod.mdspeaking; route it toAreas/orResources/rather than leaving it in the archive.If the user does not want to answer, write only the outcome line and say the loop was skipped. Never invent the rest.
-
Report: what moved, its new path, the outcome line, what happened to open tasks, whether the backend project was archived, any warning.
list — show what is in the archive
Read only. Never open the notes beyond what is named below.
- List
Archive/— both project folders and loose.mdfiles. - For each project folder, read the overview frontmatter (
id,deadline) and the first line of theproject.what_changedsection, if the section exists. - Print two sections in
LANG, each alphabetical, with a count in the header (thearchive.list.projectsandarchive.list.notesstrings). The outcome shown is the first line without its period for a completed project, and only the word before the colon for an abandoned one (the reason is not repeated); the deadline is thearchive.list.deadlinestring; shown here with the English strings:
**Archived projects (N)**
1. PROJ-0005 Project D — Completed, deadline 2026-09-30
2. PROJ-0007 Project F — Abandoned
3. PROJ-0003 Project C — no outcome recorded
4. Old project — no metadata
**Archived notes (N)**
1. Some note
The outcome is read only when the first non-blank line of the project.what_changed
section is exactly the project.outcome.completed string or starts with the
project.outcome.abandoned string up to its colon. Otherwise — the section is missing,
or it opens with the user's own words, as in projects archived before this rule — print
the archive.no_outcome string; never infer an outcome from free text or from a legacy
status. The common.no_metadata string — no frontmatter at all. An empty archive is a
valid answer: say it plainly.
restore <target> — bring something back
- Find the target per
find-target.md, operation "Restore from archive". - Work out where it goes back to. A project returns to
Projects/. A note returns to the PARA folder its frontmatter implies —area/<slug>→Areas/,resource/<slug>→Resources/. If the tags do not say, or the note predates the convention, ask where it belongs. Nothing is restored intoInbox/— it is not a destination (paths.md). - Check the basename for collisions as above, then move.
- The task side — projects only.
project.restorewith theref. Underpairing: separatewith notasks_ref:, offer to create the pair (tasks.md«Pairing»); on yes,project.create, add atasks_ref:key and fill it. Underpairing: nonethere is no pair to offer. Leave ticked checkboxes in theproject.dodsection and theproject.what_changedsection as they are — editing them is Tier 2 and rarely wanted. - Report: what came back, to where, and the state of its backend pair.
Notes
- Never delete anything here. Archiving is always a move into
Archive/; if the user wants something gone, that is/remove. - All user-facing text and every frontmatter value in
LANG; fixed strings come fromlang/<LANG>.md.