Skip to content

Commit f4e03ee

Browse files
yangzhaohuiclaude
andcommitted
新增「业务素材同目录与最小授权」硬约束,并使各类材料对齐
约束:生成单个产物所需的全部用户业务素材(task.md、materials.md、引用的 图片/附件)必须集中在该产物同一子目录、用本地相对路径(./)引用,不得跨目录 或向上级(../)拉取;运行时只需对该单一目录授读权(最小授权)。共享/原始语料 (raw-materials)仅供人工提炼参考,不进生成命令。明确边界:不约束 skill 读自身 规则主源(prompts/、字体/版式 profile)与维护者构建操作。 落地: - AGENTS.md 增「业务素材同目录与最小授权」小节;prompts/core/workflow.md 在路径约定主源处补该约束(并重建在线/离线产物,--check 通过)。 - 代码强制:generate_docx.py 拒绝成稿 .md 之外(../ 或绝对路径)的图片引用, 新增 2 个测试(共 62 通过)。 - 修正违反点:README 完整离线样例命令去掉跨目录的 raw-materials --material-file, 只喂文种目录自己的 materials.md;样例/offline/README、raw-materials/README、 4 个 materials.md 改为「raw-materials 仅供人工提炼参考、不参与生成」。 - 对齐:两个采集类 skill 补「采集底稿/成稿/图片同目录、运行时只读写该目录」; draft-request 模板补「素材与请求同目录、./ 引用」。 - 经审视驳回:不把构建类 skill 读主源算作违反(类别错误);不把约束重复进 22 个 spec(只在 workflow.md 统一写一次,守单一信息源)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent aca6b27 commit f4e03ee

60 files changed

Lines changed: 97 additions & 12 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

AGENTS.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@ python3 -m ruff check . # 保持 lint 干净
2828
- `skills/` 下是从本仓抽出的同源薄路由 skill(`docx-export``document-qa``offline-prompt-packager``skill-build``doc-type-routing``ministry-news-daily``policy-keyword-tracker`)。它们**共用** `prompts/``src/scripts/``src/adapters/`,不复制规则。
2929
- 这些 `SKILL.md` 是手写路由、不由主源生成,因此不进 `--check`;由 `tests/test_skill_routers.py` 守护其引用的入口存在。
3030

31+
## 业务素材同目录与最小授权
32+
33+
- 生成单个产物(一份成稿/文档)所需的全部**用户业务输入素材**——任务说明、素材摘要 `materials.md`、所引用的图片/附件等——必须集中在该产物所在的**同一个子目录**内,并以本地相对路径(`./`)引用。不得跨目录、向上级目录(`../`)或从共享目录拉取「生成该产物所需」的业务素材。
34+
- 目的是**最小授权**:运行时只需对该产物所在的单一目录授读取权即可完成生成;跨目录拼接业务素材会放大所需的文件系统授权范围,禁止。一条生成命令只喂该目录内的素材,典型即 `--instruction-file ./task.md --material-file ./materials.md`
35+
- 共享/原始语料(如长原始素材汇编 `raw-materials/`)只供**人工提炼阶段**参考;提炼结果须落入该产物目录自己的 `materials.md`**生成阶段不再读取共享目录**
36+
- **适用边界**:本约束只约束「用户业务素材」。skill 读取自身**规则主源**`prompts/`、字体/版式 profile 等)和维护者的**构建操作**`build.py``prompts/` 生成产物、`--check`)不在此列——那是 skill 固有规则与元构建,本就需要读主源树,不算「跨目录拼业务素材」。
37+
- 图片落地已在代码层强制:`src/scripts/generate_docx.py` 要求 Markdown 引用的图片位于该 `.md` 同目录或其子目录,`../` 越级引用会报错。完整路径/素材约定见 `prompts/core/workflow.md`
38+
3139
## 防编造底线
3240

3341
- 起草内容时真实性优先:不编造事实、政策依据、数字、文件号、会议结论;信息不足保留占位符或标注待核实。完整约束见 `prompts/core/policy.md``prompts/core/doc-type-guardrails.md`

README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -336,15 +336,14 @@ python3 src/adapters/offline/build.py \
336336

337337
**完整离线样例**(照着走一遍「原始素材 → 提炼 → 提示词 → 成稿 → Word」):
338338

339-
1. 先看 [样例/offline/raw-materials/…原始素材汇编](./样例/offline/raw-materials/20260404-%E6%88%91%E7%9A%84%E5%88%80%E7%9B%BE-%E5%8E%9F%E5%A7%8B%E7%B4%A0%E6%9D%90%E6%B1%87%E7%BC%96-v01.md)
340-
2. 再看目标文种目录的 `task.md``materials.md`,如 [样例/offline/report-报告/](./样例/offline/report-%E6%8A%A5%E5%91%8A)
341-
3. 用同一批素材生成提示词
339+
1. (可选,仅供人工提炼参考)翻一下 [样例/offline/raw-materials/…原始素材汇编](./样例/offline/raw-materials/20260404-%E6%88%91%E7%9A%84%E5%88%80%E7%9B%BE-%E5%8E%9F%E5%A7%8B%E7%B4%A0%E6%9D%90%E6%B1%87%E7%BC%96-v01.md),了解素材出处
340+
2. 进入目标文种目录,看它自己的 `task.md``materials.md`(已从原始素材提炼好),如 [样例/offline/report-报告/](./样例/offline/report-%E6%8A%A5%E5%91%8A)
341+
3. **只喂该文种目录内的素材**生成提示词(生成阶段不读 `raw-materials/` 共享目录,运行时只需对这一个目录授读权)
342342

343343
```bash
344344
python3 src/adapters/offline/build.py \
345345
--doc-type 报告 \
346346
--instruction-file 样例/offline/report-报告/task.md \
347-
--material-file 样例/offline/raw-materials/20260404-我的刀盾-原始素材汇编-v01.md \
348347
--material-file 样例/offline/report-报告/materials.md \
349348
-o 样例/offline/report-报告/20260404-关于“我的刀盾”网络传播情况的报告-v01-提示词.md
350349
```

assets/templates/draft-request.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
- 任务说明:[填写要写什么、主题与目的、时间要求]
2525
- 原始材料:[逐条粘贴已确认的事实,带来源/日期;较长先压成要点;未确认的留占位、标待核实]
2626

27+
> 素材同目录(最小授权):若以文件形式提供素材/图片/附件,请把它们和本请求放在**同一个目录**,成稿里用本地相对路径(`./`)引用,不要跨目录或用 `../` 指向别处——这样生成时只需对该目录授读权。
28+
2729
## 输出要求
2830

2931
- 默认直接输出最终 Markdown 成稿,不输出分析过程或思维链。

dist/offline/default/doc-types/announcement-公告/prompt.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@
9797
- 是否设置版记,应以当前文种 `spec.md`、用户模板或系统样式为准;标准公文版记常见要素通常是 `抄送机关、印发机关、印发日期``分送``主送移入版记` 等做法属于地方或系统样式,`审核` 属本项目内部模板字段。
9898
- 输出根目录(本仓输出路径主源):用户未指定保存路径时,默认根目录为 `~/official-document-drafting-output/`;如设置了环境变量 `OFFICIAL_DOC_OUTPUT_DIR`,则以其值为根目录(便于把高频产物导向项目盘或共享盘)。用户已显式指定路径时一律以用户为准,且默认不写入本仓库目录内。
9999
- 子目录映射(按任务类型,唯一权威,README 与各 skill 引用此处):一般公文草稿 `drafts/`;部委动态日报 `news-reports/`(高频时可再按 `news-reports/YYYYMMDD/` 分日归档);关键词政策跟踪 `policy-tracking/<关键词>/`(按主题归档)。出现新的任务类型时在此处补充,不在下游文档各自新增目录名。
100+
- 业务素材同目录(最小授权,唯一权威):生成单个产物所需的全部业务输入素材(任务说明、`materials.md`、所引用的图片/附件)必须与该产物放在**同一子目录**,以本地相对路径(`./`)引用;不得跨目录或向上级(`../`)拉取「生成所需」的业务素材,运行时只需对该单一目录授读取权即可完成生成。共享/原始语料(如 `raw-materials/`)仅供人工提炼参考,提炼结果落入该目录的 `materials.md`,生成阶段不读共享目录。一条生成命令只喂该目录内素材,典型即 `--instruction-file ./task.md --material-file ./materials.md`。图片须位于成稿 `.md` 同目录或子目录,`../` 越级会被导出器拒绝。
100101
- 文件命名:用户未指定文件名时,最终成稿默认 `YYYYMMDD-标题-vNN`,同名 `Markdown``Word` 放同一目录;同一次任务的辅助文件(离线提示词、说明、采集底稿等)在版本号后加产物类型后缀,如 `-提示词``-说明``-materials`,避免与成稿重名。
101102
- 不覆盖既有成稿:同一标题/同一天重复生成时,递增 `-vNN`,不覆盖已存在的同名文件。
102103

dist/offline/default/doc-types/announcement-公告/system_prompt.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
- 是否设置版记,应以当前文种 `spec.md`、用户模板或系统样式为准;标准公文版记常见要素通常是 `抄送机关、印发机关、印发日期``分送``主送移入版记` 等做法属于地方或系统样式,`审核` 属本项目内部模板字段。
9696
- 输出根目录(本仓输出路径主源):用户未指定保存路径时,默认根目录为 `~/official-document-drafting-output/`;如设置了环境变量 `OFFICIAL_DOC_OUTPUT_DIR`,则以其值为根目录(便于把高频产物导向项目盘或共享盘)。用户已显式指定路径时一律以用户为准,且默认不写入本仓库目录内。
9797
- 子目录映射(按任务类型,唯一权威,README 与各 skill 引用此处):一般公文草稿 `drafts/`;部委动态日报 `news-reports/`(高频时可再按 `news-reports/YYYYMMDD/` 分日归档);关键词政策跟踪 `policy-tracking/<关键词>/`(按主题归档)。出现新的任务类型时在此处补充,不在下游文档各自新增目录名。
98+
- 业务素材同目录(最小授权,唯一权威):生成单个产物所需的全部业务输入素材(任务说明、`materials.md`、所引用的图片/附件)必须与该产物放在**同一子目录**,以本地相对路径(`./`)引用;不得跨目录或向上级(`../`)拉取「生成所需」的业务素材,运行时只需对该单一目录授读取权即可完成生成。共享/原始语料(如 `raw-materials/`)仅供人工提炼参考,提炼结果落入该目录的 `materials.md`,生成阶段不读共享目录。一条生成命令只喂该目录内素材,典型即 `--instruction-file ./task.md --material-file ./materials.md`。图片须位于成稿 `.md` 同目录或子目录,`../` 越级会被导出器拒绝。
9899
- 文件命名:用户未指定文件名时,最终成稿默认 `YYYYMMDD-标题-vNN`,同名 `Markdown``Word` 放同一目录;同一次任务的辅助文件(离线提示词、说明、采集底稿等)在版本号后加产物类型后缀,如 `-提示词``-说明``-materials`,避免与成稿重名。
99100
- 不覆盖既有成稿:同一标题/同一天重复生成时,递增 `-vNN`,不覆盖已存在的同名文件。
100101

dist/offline/default/doc-types/approval-批复/prompt.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@
9797
- 是否设置版记,应以当前文种 `spec.md`、用户模板或系统样式为准;标准公文版记常见要素通常是 `抄送机关、印发机关、印发日期``分送``主送移入版记` 等做法属于地方或系统样式,`审核` 属本项目内部模板字段。
9898
- 输出根目录(本仓输出路径主源):用户未指定保存路径时,默认根目录为 `~/official-document-drafting-output/`;如设置了环境变量 `OFFICIAL_DOC_OUTPUT_DIR`,则以其值为根目录(便于把高频产物导向项目盘或共享盘)。用户已显式指定路径时一律以用户为准,且默认不写入本仓库目录内。
9999
- 子目录映射(按任务类型,唯一权威,README 与各 skill 引用此处):一般公文草稿 `drafts/`;部委动态日报 `news-reports/`(高频时可再按 `news-reports/YYYYMMDD/` 分日归档);关键词政策跟踪 `policy-tracking/<关键词>/`(按主题归档)。出现新的任务类型时在此处补充,不在下游文档各自新增目录名。
100+
- 业务素材同目录(最小授权,唯一权威):生成单个产物所需的全部业务输入素材(任务说明、`materials.md`、所引用的图片/附件)必须与该产物放在**同一子目录**,以本地相对路径(`./`)引用;不得跨目录或向上级(`../`)拉取「生成所需」的业务素材,运行时只需对该单一目录授读取权即可完成生成。共享/原始语料(如 `raw-materials/`)仅供人工提炼参考,提炼结果落入该目录的 `materials.md`,生成阶段不读共享目录。一条生成命令只喂该目录内素材,典型即 `--instruction-file ./task.md --material-file ./materials.md`。图片须位于成稿 `.md` 同目录或子目录,`../` 越级会被导出器拒绝。
100101
- 文件命名:用户未指定文件名时,最终成稿默认 `YYYYMMDD-标题-vNN`,同名 `Markdown``Word` 放同一目录;同一次任务的辅助文件(离线提示词、说明、采集底稿等)在版本号后加产物类型后缀,如 `-提示词``-说明``-materials`,避免与成稿重名。
101102
- 不覆盖既有成稿:同一标题/同一天重复生成时,递增 `-vNN`,不覆盖已存在的同名文件。
102103

dist/offline/default/doc-types/approval-批复/system_prompt.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
- 是否设置版记,应以当前文种 `spec.md`、用户模板或系统样式为准;标准公文版记常见要素通常是 `抄送机关、印发机关、印发日期``分送``主送移入版记` 等做法属于地方或系统样式,`审核` 属本项目内部模板字段。
9696
- 输出根目录(本仓输出路径主源):用户未指定保存路径时,默认根目录为 `~/official-document-drafting-output/`;如设置了环境变量 `OFFICIAL_DOC_OUTPUT_DIR`,则以其值为根目录(便于把高频产物导向项目盘或共享盘)。用户已显式指定路径时一律以用户为准,且默认不写入本仓库目录内。
9797
- 子目录映射(按任务类型,唯一权威,README 与各 skill 引用此处):一般公文草稿 `drafts/`;部委动态日报 `news-reports/`(高频时可再按 `news-reports/YYYYMMDD/` 分日归档);关键词政策跟踪 `policy-tracking/<关键词>/`(按主题归档)。出现新的任务类型时在此处补充,不在下游文档各自新增目录名。
98+
- 业务素材同目录(最小授权,唯一权威):生成单个产物所需的全部业务输入素材(任务说明、`materials.md`、所引用的图片/附件)必须与该产物放在**同一子目录**,以本地相对路径(`./`)引用;不得跨目录或向上级(`../`)拉取「生成所需」的业务素材,运行时只需对该单一目录授读取权即可完成生成。共享/原始语料(如 `raw-materials/`)仅供人工提炼参考,提炼结果落入该目录的 `materials.md`,生成阶段不读共享目录。一条生成命令只喂该目录内素材,典型即 `--instruction-file ./task.md --material-file ./materials.md`。图片须位于成稿 `.md` 同目录或子目录,`../` 越级会被导出器拒绝。
9899
- 文件命名:用户未指定文件名时,最终成稿默认 `YYYYMMDD-标题-vNN`,同名 `Markdown``Word` 放同一目录;同一次任务的辅助文件(离线提示词、说明、采集底稿等)在版本号后加产物类型后缀,如 `-提示词``-说明``-materials`,避免与成稿重名。
99100
- 不覆盖既有成稿:同一标题/同一天重复生成时,递增 `-vNN`,不覆盖已存在的同名文件。
100101

dist/offline/default/doc-types/briefing-简报/prompt.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@
9797
- 是否设置版记,应以当前文种 `spec.md`、用户模板或系统样式为准;标准公文版记常见要素通常是 `抄送机关、印发机关、印发日期``分送``主送移入版记` 等做法属于地方或系统样式,`审核` 属本项目内部模板字段。
9898
- 输出根目录(本仓输出路径主源):用户未指定保存路径时,默认根目录为 `~/official-document-drafting-output/`;如设置了环境变量 `OFFICIAL_DOC_OUTPUT_DIR`,则以其值为根目录(便于把高频产物导向项目盘或共享盘)。用户已显式指定路径时一律以用户为准,且默认不写入本仓库目录内。
9999
- 子目录映射(按任务类型,唯一权威,README 与各 skill 引用此处):一般公文草稿 `drafts/`;部委动态日报 `news-reports/`(高频时可再按 `news-reports/YYYYMMDD/` 分日归档);关键词政策跟踪 `policy-tracking/<关键词>/`(按主题归档)。出现新的任务类型时在此处补充,不在下游文档各自新增目录名。
100+
- 业务素材同目录(最小授权,唯一权威):生成单个产物所需的全部业务输入素材(任务说明、`materials.md`、所引用的图片/附件)必须与该产物放在**同一子目录**,以本地相对路径(`./`)引用;不得跨目录或向上级(`../`)拉取「生成所需」的业务素材,运行时只需对该单一目录授读取权即可完成生成。共享/原始语料(如 `raw-materials/`)仅供人工提炼参考,提炼结果落入该目录的 `materials.md`,生成阶段不读共享目录。一条生成命令只喂该目录内素材,典型即 `--instruction-file ./task.md --material-file ./materials.md`。图片须位于成稿 `.md` 同目录或子目录,`../` 越级会被导出器拒绝。
100101
- 文件命名:用户未指定文件名时,最终成稿默认 `YYYYMMDD-标题-vNN`,同名 `Markdown``Word` 放同一目录;同一次任务的辅助文件(离线提示词、说明、采集底稿等)在版本号后加产物类型后缀,如 `-提示词``-说明``-materials`,避免与成稿重名。
101102
- 不覆盖既有成稿:同一标题/同一天重复生成时,递增 `-vNN`,不覆盖已存在的同名文件。
102103

dist/offline/default/doc-types/briefing-简报/system_prompt.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
- 是否设置版记,应以当前文种 `spec.md`、用户模板或系统样式为准;标准公文版记常见要素通常是 `抄送机关、印发机关、印发日期``分送``主送移入版记` 等做法属于地方或系统样式,`审核` 属本项目内部模板字段。
9696
- 输出根目录(本仓输出路径主源):用户未指定保存路径时,默认根目录为 `~/official-document-drafting-output/`;如设置了环境变量 `OFFICIAL_DOC_OUTPUT_DIR`,则以其值为根目录(便于把高频产物导向项目盘或共享盘)。用户已显式指定路径时一律以用户为准,且默认不写入本仓库目录内。
9797
- 子目录映射(按任务类型,唯一权威,README 与各 skill 引用此处):一般公文草稿 `drafts/`;部委动态日报 `news-reports/`(高频时可再按 `news-reports/YYYYMMDD/` 分日归档);关键词政策跟踪 `policy-tracking/<关键词>/`(按主题归档)。出现新的任务类型时在此处补充,不在下游文档各自新增目录名。
98+
- 业务素材同目录(最小授权,唯一权威):生成单个产物所需的全部业务输入素材(任务说明、`materials.md`、所引用的图片/附件)必须与该产物放在**同一子目录**,以本地相对路径(`./`)引用;不得跨目录或向上级(`../`)拉取「生成所需」的业务素材,运行时只需对该单一目录授读取权即可完成生成。共享/原始语料(如 `raw-materials/`)仅供人工提炼参考,提炼结果落入该目录的 `materials.md`,生成阶段不读共享目录。一条生成命令只喂该目录内素材,典型即 `--instruction-file ./task.md --material-file ./materials.md`。图片须位于成稿 `.md` 同目录或子目录,`../` 越级会被导出器拒绝。
9899
- 文件命名:用户未指定文件名时,最终成稿默认 `YYYYMMDD-标题-vNN`,同名 `Markdown``Word` 放同一目录;同一次任务的辅助文件(离线提示词、说明、采集底稿等)在版本号后加产物类型后缀,如 `-提示词``-说明``-materials`,避免与成稿重名。
99100
- 不覆盖既有成稿:同一标题/同一天重复生成时,递增 `-vNN`,不覆盖已存在的同名文件。
100101

0 commit comments

Comments
 (0)