归档
库中的 Archive/ 区域:所有已完成或搁置的内容都放在这里,且归档始终是移动操作——绝非删除。永久删除使用 /remove。项目的后端配对项与其文件夹一同归档和恢复。
基础层
在操作前阅读,每个文件相对于此技能的基础目录为 ../../para/<file>.md——这些文件包含共享规则,请勿凭记忆复述:
../../para/paths.md——始终,包括「语言」:下面的字符串来自lang/<LANG>.md../../para/find-target.md——用于接受目标的子命令../../para/move.md——始终../../para/confirm.md——始终../../para/dod.md——当目标是项目时../../para/tasks.md——当目标是项目时:操作、配对、领域项目../../para/note-format.md——当编辑 frontmatter 时;「遗留字段」
子命令
$ARGUMENTS 的第一个单词确定子命令。list 和 restore 是唯一的保留关键字——其他任何内容都是归档的目标,因此 /archive project c 归档该目标项目。空的 $ARGUMENTS 表示显示三个子命令并询问。
<target>——放入归档
-
查找目标:根据
find-target.md,操作类型为「Archive」。 -
如果目标是项目:
- 首先处理未完成任务。 读取配对项目的任务(
task.list,打开状态,包含project_ref)。如果任务处于打开状态,列出它们并询问一次(第 1.5 层)如何处理:完成它们(对每个任务执行task.complete),将它们移动到某个领域项目(使用task.move加area),或者保留在已归档项目内部。如果适配器标记task.complete为「不支持」,则第一个选项替换为archive.close_in_app字符串,并且不会调用任何操作。在继续之前记录用户的答案。在pairing: separate模式下,未配对的但有遗留Tasks/文件夹的项目没有后端部分;dod.md说明了如何检查其任务。在pairing: none模式下,任务就是项目自身的Tasks/笔记,随文件夹一起移动。 - 应用
dod.md并说出每个不成立的条件。该文件决定结果是“已完成”还是“已废弃”;不要在此处复述其推理,也不要弱化它。 - 将整个文件夹(内部结构不变)从
Projects/PROJ-xxxx <title>/移动到Archive/PROJ-xxxx <title>/。名称完全保持不变:ID 终生跟随项目,ID 发行时会扫描Archive/以保持其保留状态(project-id.md)。 - 当配对时执行
project.archive(在pairing: none模式下始终如此;那里是空操作)。保留tasks_ref:在概览中——恢复时需要它。 - 遗留字段(
status等)完全保持原样(note-format.md):已归档的项目保留其历史。
- 首先处理未完成任务。 读取配对项目的任务(
-
如果目标是独立笔记(领域、资源或来自
Inbox/的散落笔记):将单个.md文件移动到Archive/。- 领域按其定义是持续进行的,通常不应归档。询问用户的意图(第 1.5 层)——通常表示笔记已过时,而非责任结束。
- 位于某项目内但不是要被归档的项目中的遗留任务笔记:移动它不会破坏任何有用内容,而且很可能不是用户的本意——询问(第 1.5 层)。任务现在在后端关闭。
-
移动前检查基本名称是否有冲突(
move.md、note-format.md)。重复名称会使该名称的所有链接产生歧义——第 1.5 层,询问而非直接移动。 -
关闭循环——仅限项目。 在报告之前,提出一个问题并等待回答:
archive.ask_changed字符串。不是问产生了什么成果——dod.md的条件 2 已经覆盖了产物——而是问现在项目结束后有什么不同,以及是否值得付出代价。在提问之前,大声读出
project.value部分——用户在项目开始时写下的收益(note-format.md,“关于结果的三个部分”)——并用archive.expected字符串询问这个收益是否成真({value}是用户写下的内容,例如「每周减少 5 小时的评审」)。如果该部分为空或缺失,则按原样提问,不要编造期望。在概览正文末尾写入
project.what_changed部分。其第一行是dod.md定义的结果——project.outcome.completed或project.outcome.abandoned字符串({reason}用用户的话说)——然后是用用户自己的话记录的答案;不要用自己的话概括。如果答案中提到某件事情比项目更持久,那么这是dod.md的条件 4 在说话;将其路由到Areas/或Resources/,而不是留在归档中。如果用户不想回答,仅写入结果行并说明循环被跳过。绝不编造其余内容。
-
报告:移动了什么、其新路径、结果行、打开的任务如何处理、后端项目是否已归档、任何警告。
list——显示归档中的内容
仅读取。切勿打开下面指定范围之外的笔记。
- 列出
Archive/——包括项目文件夹和松散的.md文件。 - 对于每个项目文件夹,读取概览 frontmatter(
id、deadline)以及project.what_changed部分的第一行(如果该部分存在)。 - 使用
LANG语言打印两个部分,每个部分按字母顺序排列,并在标题中显示计数(archive.list.projects和archive.list.notes字符串)。显示的结果为:已完成的项目显示第一行(不带句点),已废弃的项目仅显示冒号前的单词(不重复原因);截止日期显示为archive.list.deadline字符串;如下所示使用英文示例:
**已归档项目(N)**
1. PROJ-0005 项目 D — 已完成,截止日期 2026-09-30
2. PROJ-0007 项目 F — 已废弃
3. PROJ-0003 项目 C — 未记录结果
4. 旧项目 — 无元数据
**已归档笔记(N)**
1. 某笔记
仅当 project.what_changed 部分的第一个非空行恰好是 project.outcome.completed 字符串或以 project.outcome.abandoned 字符串开头(直到冒号部分)时,才读取结果。否则——该部分缺失,或者以用户自己的话开头(如在此规则之前归档的项目)——打印 archive.no_outcome 字符串;绝不从自由文本或遗留的 status 字段推断结果。common.no_metadata 字符串表示完全没有 frontmatter。空归档是一个有效答案:直接说明。
restore <target>——将内容恢复回来
- 查找目标:根据
find-target.md,操作类型为「Restore from archive」。 - 确定它应该回到哪里。 项目回到
Projects/。笔记回到其 frontmatter 暗示的 PARA 文件夹——area/<slug>映射到Areas/,resource/<slug>映射到Resources/。如果标签没有说明,或者笔记早于该约定,则询问它属于哪里。任何内容都不能恢复到Inbox/——它不是一个目标文件夹(paths.md)。 - 如上所述检查基本名称是否有冲突,然后移动。
- 任务端——仅限项目。 使用
ref执行project.restore。在pairing: separate模式下且没有tasks_ref:时,提供创建配对的选项(tasks.md「配对」);如果用户同意,则执行project.create,添加tasks_ref:键并填充它。在pairing: none模式下,没有可提供的配对。保持project.dod部分和project.what_changed部分中的已勾选复选框原样——编辑它们属于第 2 层操作,且很少需要。 - 报告:什么恢复回来了、回到哪里、以及其后端配对的状态。
说明
- 永远不要在这里删除任何内容。归档始终是移动到
Archive/的操作;如果用户想要移除某个内容,应使用/remove。 - 所有面向用户的文本和
LANG中的每个 frontmatter 值;固定字符串来自lang/<LANG>.md。