# 本包的命名规则

文档类型仅一种：虚构的 UTF-8 工作坊记录。只处理一个平面目录中的 `.txt` 文件。

必需字段为 `Document-Type`（取值 `workshop-note`）、`Source-ID`、`Document-Date`、`Project`、`Subject` 和 `Revision`。[输入清单](/blog/assets/content-based-file-naming-packet/shared/input-inventory.csv) 将每个 `Source-ID` 与准确的原始基本名、字节数和 SHA-256 绑定。作者逐项核读字段；[field-evidence.csv](/blog/assets/content-based-file-naming-packet/shared/field-evidence.csv) 记录行号及完整字段原文。文件修改／创建时间一律不是文档日期。

只采用一个无歧义、格式为 `YYYY-MM-DD` 的有效日历日期。日期缺失、两个日期冲突，或斜杠日期的排列顺序不明，均保持 blocked。主题缺失或不可读也保持 blocked。不用今天补日期，不推断地区格式，不编造主题。被阻止的原件保留原名，仍包含在输出 ZIP 中。

获准基本名为 `<document-date>__<project>__<subject>__rev-<revision>__<source-id-lowercase>.txt`。例如：`2026-04-03__amber__airflow__rev-a__f01.txt`。样例中的 project、subject、revision 已由作者核为小写 ASCII 词项；允许字符为 `a-z`、`0-9` 和词项内部的单个连字符。不自动转写字符，不静默截断。文件名最长 160 个 ASCII 字节，保留 `.txt`。即使两份记录的日期、项目、主题和修订标记相同，也继续由 `Source-ID` 标识身份。

建议不等于批准。[rename-plan.csv](/blog/assets/content-based-file-naming-packet/shared/rename-plan.csv) 分别保存建议列和批准列；只有 `status=approved`、且获准名称与规范名称完全一致的行可执行。[wrong-plan.csv](/blog/assets/content-based-file-naming-packet/shared/wrong-plan.csv) 是作者编写、应被拒绝的错误建议，不是另一份批准方案。重复建议目标检查覆盖整个待处理集合，包括无效行，按 ASCII 不区分大小写比较。已有目标会阻止操作，不静默添加后缀。路径、扩展名、来源身份或内容变化均被阻止。不处理目录，不递归扫描，不改内容，不去重，不处理真实用户文件。

仅支持由 `rename_packet.py init` 在 `/private/tmp` 直接下级新建的私有可丢弃目录。程序使用 Darwin `renameatx_np`，传入 `RENAME_EXCL | RENAME_NOFOLLOW_ANY`，不会退回普通 rename。它只操作已打开的 `files` 目录中，输入清单明确列出的名称。外部并发写入和崩溃恢复超出练习范围。

与源包绑定的自有根目录中，某个来源 ID 上未解决的日志 intent 或 unknown 结果，会持续保持 unknown，不因计划哈希或目标变化而消失。该检查先于建议验证。已确认完成则另行要求稳定来源身份、精确的原名到目标名操作及当前文件检查。重新保存 CSV，不会创建一个新操作，也不能清除不确定性。仅凭文件名或哈希，都不足以证明一项历史操作。

返回[完整中文教程](/zh/blog/content-based-file-naming-packet/)或[材料与使用说明](/blog/assets/content-based-file-naming-packet/zh-CN/README.zh-CN.md)。
