devpaper
v0.2.0
Published
用 Cursor Rule + 包内文档在 AI 解题时结构化记录,再用 CLI 生成报纸风 HTML 日报
Maintainers
Readme
Devpaper
用 Cursor 规则 + 执笔规范文档 在 AI 解题过程中留下结构化手记,按日落盘到固定目录;用 CLI 生成报纸风 HTML(单日多篇;周/月/区间则生成「导航壳页 + 每日独立日报」可点击切换),并维护 index.json 记忆索引,减轻「不知道 AI 做了什么」和「同类错误反复踩」的问题。
我只是想在业务项目里用
先看极简版 → 快速上手(中文)(安装 + 单人/团队 + 命令表,一页搞定)。
- Node.js ≥ 18
npm install [email protected] --save-devnpx devpaper init-cursor --logs ./logs --out ./dist- 需要逐步截图式说明时再看 install-per-project.zh.md
如果你是维护 devpaper 本包的人,发布前按 发版流程(中文) 检查版本、CHANGELOG、npm 权限、Git tag 与打包内容。
原始痛点:自己写的代码出错,往往能快速联想到大致位置与原因;若代码几乎全是 AI 写的而中间过程未留痕,出问题时常一无所知。手记把每日的中间出错、方案取舍等写进人能读的 logs/,便于交付后再排障时对照,也便于与下一轮 AI 续接上下文。在 AI 编程范式下,人的重心更多在需求澄清、技术方案、对 AI 产出与中间过程的审核等——阅读与维护每日手记,宜与 Code Review、测试一样视为必要模块(更长叙事可写在本机 docs-local/ 目录,不入库)。
为何叫「手记」:强调内容最终是给人读的——人是意义与责任的终点;索引与 HTML 是让人更好读、让机器更好帮人的手段。它试图衔接 古法编程(过程留在注释与文档)与 AI 编程(过程易消散在对话)之间的断层,做一座可积累的桥。命名与立意的展开同样可放在 docs-local/ 自拟文稿中(默认不提交 Git)。
最短用法(单人):npm install(一次)→ logs/YYYY-MM-DD.md → npm run dp:idx → npm run dp:month -- 2026-04 → 浏览器打开 dist/2026-04/index.html(http,见第四节)。
最短用法(团队):devpaper team init → 各成员写 logs/<缩写>/YYYY-MM-DD.md → devpaper merge --month 2026-05(或 Hub「合并当月」)→ npm run dp:idx → npm run dp:month -- 2026-05。详见 团队手记说明(中文)。手记月历见 「日历在哪…」 一节。
本仓库即 devpaper 包根目录。行为契约见 openspec/specs/;新变更流程见 openspec/README.md(复制 openspec/template/ 到 openspec/changes/<短名>/)。openspec/changes/archive/ 仅作本机留档,默认 不入库(见根 .gitignore)。
参赛 / 路演 / 他人上手长文:放在本机 docs-local/(默认不入库)。
更多文档:快速上手(中文) · install-per-project.zh.md(详细安装)· team-workspace.zh.md(团队)· log-authoring-guide.md(手记格式)· release.zh.md(发版)路径 / a11y / 安全 / 备份等长文请放在本机 docs-local/(不入库)。
路径易错点:本仓库根目录即包根,请用 node src/cli.mjs … 或 npm run dp:* / npm run html:*。若从 npm 安装的 node_modules/devpaper 内执行,仍用 node src/cli.mjs,不要再套一层 devpaper/ 前缀路径。
价值延伸:规则沉淀与测试协作
Markdown ## 与报纸:单日 md 中每个 ## 在构建时被切成独立「文章」再上版(parseDailyMarkdown → 头版/要闻/简讯等),标题习惯与版式同源;OpenSpec(openspec/)偏事前契约,手记偏事后证据,二者互补——规格里找不到的「为什么」常能在 logs/ 与索引指纹里找到。更长的形态对照与答辩口径可写在 docs-local/ 自拟文稿。
手记与 logs/index.json 等产物不只是存档,还可作为技术资产继续向下游流动:
- 提炼为开发规则(提效):从多篇手记中归纳重复出现的根因、指纹族、禁踩路径与接口约定,可沉淀为 Cursor Rules、
AGENTS.md等,让后续人类开发与 Coding Agent 默认沿用同一套约束,把「一次踩坑」变成「长期避坑」,形成开发提效闭环。 - 辅助测试与 AI 生成用例:手记里常见的 现象 / 根因 / 解法 / 影响面(及刊位、指纹等元数据)适合作为测试同事的结构化上下文;将该日 md、某一
##条目或索引摘要提供给测试侧使用的 AI,可更容易产出回归重点、边界条件、负例路径等用例草稿与验收要点——手记提供的是可追溯、可对需求/代码锚定的语料,具体 AI 工具链由团队自选。
日历在哪、样式在哪、按月怎么用
日历页面与样式文件
| 是什么 | 路径 |
|--------|------|
| 手记月历(格子状态、链到 dist) | hub/index.html |
| 月历的样式 | 写在 hub/index.html 里同一个文件的 <style>…</style>(从约第 7 行开始)。没有单独的 hub.css。团队模式下另有 紫「待合并」(.h-pending):仅有成员稿、尚未汇总。 |
如何在浏览器里打开月历
- 推荐(月历 + 可选页内按钮):在仓库根执行
npm run dp:hub,浏览器打开http://127.0.0.1:8765/hub/index.html(停服:终端Ctrl+C)。 - 只要月历、不要 Node 控制台:仓库根
npx --yes serve .,在终端给出的地址后加/hub/index.html。
不要用资源管理器直接 file:// 打开 hub/index.html(无 API 时月历不可用)。推荐 npm run dp:hub,由 /api/calendar 提供月历;若仅静态预览,须先 npm run dp:idx(团队模式生成 logs/hub-calendar-<身份>.json)。
按月生成 HTML(月刊样例)
在仓库根依次执行(把 2026-04 换成你的 YYYY-MM):
npm run dp:idx
npm run dp:month -- 2026-04生成结果:目录 dist/2026-04/(目录名即 YYYY-MM)
| 文件 | 作用 |
|------|------|
| index.html | 月刊导航壳:按日切换,iframe 里加载当日 YYYY-MM-DD.html(版式选择页,可下拉换 tpl)。 |
| YYYY-MM-DD.html | 当日版式选择页(顶栏 + iframe)。 |
| YYYY-MM-DD.tpl-*.html | 各内置/自定义版式的完整日报页。 |
本地预览:用 npm run dp:hub 或 npx serve . 起 http 后,打开 …/2026-04/index.html(或从月历页点进某日 dist 链接)。
使用说明(照着做)
1. 一次性准备
- 安装 Node ≥ 18。
- 在仓库根执行
npm install(安装marked;只需做一次)。 - 单人:手记写在
logs/YYYY-MM-DD.md。团队(存在logs/team.json):身份在team.local.json,写在logs/<成员缩写>/YYYY-MM-DD.md,汇总身份先合并再出报——见 docs/team-workspace.zh.md。
2. 命令速查(仓库根)
主推 月刊 见上文 「按月生成 HTML(月刊样例)」 小节。其余常用命令:
| 你想做的事 | 命令 |
|------------|------|
| 更新索引 + 月历状态 JSON | npm run dp:idx |
| 按自然月生成 dist/YYYY-MM/ + index.html | npm run dp:month -- 2026-04 |
| 按周生成 | npm run dp:week -- 2026-04-10 |
| 任意日期区间 | npm run devpaper -- build --from 2026-04-01 --to 2026-04-15 |
| 为「可构建」的日期各生成一份(团队模式:有汇总或根目录稿) | npm run dp:all |
| 只生成某一天(写入 dist/YYYY-MM/,并刷新该月 index.html) | npm run dp:day -- 2026-04-30 |
| 初始化团队配置 | npm run devpaper -- team init |
| 合并单日 / 当月 / 全部成员稿 | npm run devpaper -- merge --date … / --month … / --all |
| 单日且默认 iframe 偏向专题大报 tpl | npm run dp:day:bs -- 2026-04-30 |
| 单日且默认 iframe 偏向阅刊长读 tpl | npm run dp:day:reader -- 2026-04-30 |
生成物说明:单人 HTML 在 dist/YYYY-MM/;团队在 dist/<成员id>/YYYY-MM/ 或 dist/merge/YYYY-MM/(随 Hub/CLI 当前身份)。索引 logs/index.json(默认只索引当前身份相关 md,全量用 devpaper index --all);月历 logs/hub-calendar-<身份>.json(dp:idx 且建议带 --out ./dist)。Hub 会检测 dist/ 根下旧版合刊并提示重新出刊。升级或拉取新版 devpaper 后,若内置版式有增减,请对该月重跑 dp:month / dp:all(或逐日 dp:day),否则版式下拉可能仍为旧版。
3. 在包根目录(本仓库克隆后)
已 npm install 后:
| 用途 | 命令 |
|------|------|
| 单日 | npm run html:day -- 2026-04-30 |
| 单日 broadsheet | npm run html:day:bs -- 2026-04-30 |
| 单日 reader(纵向单栏) | npm run html:day:reader -- 2026-04-30 |
| 单日 reader-night(阅刊暗色) | npm run html:day:reader-night -- 2026-04-30 |
| 全部有日志的日 | npm run html:all |
| 索引 + INDEX.md + hub-calendar | npm run idx |
| 本机手记控制台(月历 + 一键生成 API) | npm run hub |
| 等价直接调 CLI | node src/cli.mjs build --date 2026-04-30 等 |
4. 要不要开浏览器服务?怎么开?
先分清三件事:看日报、看月历、在网页里一键生成。只有后两种才和「本机起一个 http 服务」有关;生成 HTML 本身永远是终端里跑 npm run dp:*,不依赖浏览器。
| 你想做什么 | 要不要开服务 | 怎么做 |
|------------|--------------|--------|
| 只看某一天生成的 dist/YYYY-MM/YYYY-MM-DD.html(版式页) | 通常不用。用资源管理器双击、或 VS Code / Cursor 的「在浏览器中打开」一般即可。 | 若 iframe 里 tpl 预览异常,再改用下面任意一种 http 方式打开同一文件。 |
| 打开 hub/index.html 月历 | 要 http(s)。推荐 dp:hub(/api/calendar);勿依赖 file:// 读 JSON。 | 任选其一:① 方式 A dp:hub;② 方式 B npx serve(无页内生成按钮)。 |
| 月历上点 「刷新 / 出单日 / 出区间…」等生成按钮 | 要,且必须是 dp:hub 自带的那个服务(页面和 /api/* 同源)。索引在 打开页、点刷新、每次生成后 会自动更新。 | 见「方式 A」。 |
方式 A(推荐):只开一个终端 — dp:hub 一站式
dp:hub 会在本机 127.0.0.1 起一个 很小的 Node 服务(不是对外部署,关掉终端即停)。它既提供 月历静态页,又提供 /api/* 给按钮用。
在仓库根执行:
npm run dp:hub在包根目录(与上表相同 cwd)执行:
npm run hub终端里会出现监听地址。用浏览器打开(默认端口 8765):
http://127.0.0.1:8765/hub/index.html
改端口示例:
npm run devpaper -- hub --port 9000停服:在该终端按 Ctrl+C。
全局(任意目录)启动:若已 npm install -g devpaper,可先在本机环境变量里设 DEVPAPER_LOGS、DEVPAPER_OUT(手记根目录与 HTML 输出根,与 init-cursor / 日常 index build 一致),然后任意终端执行:
devpaper hub启动后终端会醒目打印 http://127.0.0.1:<端口>/hub/index.html;加 --open 可尝试自动用系统浏览器打开。仍用 Ctrl+C 停服。也可用命令行覆盖路径:devpaper hub --logs D:/Notes/... --out D:/Notes/...。
手记控制台页(hub/index.html)怎么用:在浏览器打开上述 …/hub/index.html(勿用 file://)。连上本服务后,月历走 /api/calendar,页内链接 /dist/…、/logs/… 会映射到当前这次 hub 所用的手记根与 HTML 输出根(与 --logs/--out 或 DEVPAPER_LOGS/DEVPAPER_OUT 一致),点「月刊」、预览链会打开你机器上真实生成的那份 HTML。
方式 B:只要月历、不要网页按钮 — npx serve 静态站
在仓库根执行(需已装 Node,会临时下载 serve):
npx --yes serve .看终端里打印的 http://localhost:xxxx,在浏览器地址栏后面加上路径,例如:
http://localhost:xxxx/hub/index.html
改 md / 要更新格子状态前,先在另一个终端跑 npm run dp:idx。生成 HTML 仍用 npm run dp:day / dp:all(本方式没有页内一键生成)。
和「写 md、出 HTML」的关系(再强调一遍)
- 改 md、跑索引、跑 build:一律在 PowerShell / 终端 里执行
npm run dp:idx、npm run dp:day -- …等,不需要为了生成文件而开浏览器服务。 - 开服务:只是为了 在浏览器里 舒适地打开月历、或 用按钮触发 本机再跑一次上面的命令。
5. --single-html(可选)
- 需要单文件、无版式下拉、无 tpl 的旧式输出时,在
build上加--single-html(例如 CI 极简产物)。
6. 与 Cursor 集成(闭环)
- 放进项目:克隆本仓库或
npm install devpaper(建议devDependencies)。 - 生成 Cursor Rule(推荐,免手拷):在该业务项目根执行
npx devpaper init-cursor --logs <手记目录> --out <HTML 输出根>
会在当前项目写入.cursor/rules/devpaper-log.mdc,并把上述路径写进 Rule(收尾里的devpaper index/build与之一致)。--logs/--out必填(相对路径相对当前目录,或用--cwd指定项目根);已存在同名 Rule 时跳过,需覆盖时加--force。本仓库开发自测:npm run dp:init-cursor(相对./logs与./dist)。
亦可手动复制.cursor/rules/devpaper-log.mdc(不写入自定义路径)。 - 完整格式骨架:docs/log-authoring-guide.md(英文规范,正文语言不限)。
- 日志:有
team.json时身份在team.local.json,写作成员写入logs/<id>/YYYY-MM-DD.md(当前为merge时 Agent 仍写首个写作成员目录);否则logs/YYYY-MM-DD.md(见 log-authoring-guide)。 - 合并(团队):
devpaper merge --date …/--month/--all,或 Hub「合并当日 / 当月 / 全部」。 - 出报:
devpaper index/devpaper build(或dp:*);团队模式下 build 优先读汇总稿_merged/。
全局手记目录 + 多项目同一天
若希望不按仓库拆分手记(例如固定 D:/Notes/devpaper-logs),仍用同一天一个 YYYY-MM-DD.md:多个仓库的条目写在同一文件里,每条一个 ## HH:MM · slug — 标题。区分项目可用正文 #project-foo 标签,或在 slug 里带项目代号(如 acme-api);指纹仍以错误族为主,需要更细聚类时可加短前缀(见 Log authoring guide — Multi-project)。各业务项目各自跑一次 init-cursor(--logs / --out 指向同一全局路径即可),Rule 内容一致、Cursor 仍按「当前打开的工作区」生效。
消费者 package.json 示例(路径请改成你的全局目录):
{
"scripts": {
"devpaper:rule": "devpaper init-cursor --logs D:/Notes/devpaper-logs --out D:/Notes/devpaper-dist",
"devpaper:idx": "devpaper index --logs D:/Notes/devpaper-logs --md --out D:/Notes/devpaper-dist",
"devpaper:day": "devpaper build --logs D:/Notes/devpaper-logs --out D:/Notes/devpaper-dist --date"
}
}首次克隆某业务仓库后执行一次 npm run devpaper:rule,之后日常 devpaper:idx / devpaper:day。
单仓库 vs 多仓库:npm 与手记控制台(hub)
| 场景 | npm 与 --logs / --out | 手记控制台 hub |
|------|-----------------------------|----------------------|
| 单项目(手记落在各自仓库里) | 在该仓库 npm install devpaper(建议 devDependencies)。init-cursor 与日常脚本里 --logs / --out 指向本仓的 ./logs、./dist(或你自定的相对路径)。 | 在 该仓库根 执行 npm run dp:hub,或 devpaper hub --logs ./logs --out ./dist(也可用仓库 scripts 封装)。只看本仓数据时,每个仓库各起一个 hub 即可。 |
| 多项目共用手记(同一天一个 YYYY-MM-DD.md,多仓写同一磁盘目录) | 每个业务仓库仍各自 npm install devpaper;各仓 init-cursor 与上表「消费者 package.json」里的 --logs / --out 必须相同(都指向全局手记根与 HTML 输出根)。 | 通常只起一个 devpaper hub,--logs / --out(或环境变量 DEVPAPER_LOGS / DEVPAPER_OUT)与上同一对路径;任一仓改过 md 后须跑 devpaper index(或依赖 hub 页内刷新),月历格子与按钮才跟得上。若多终端各开各的 hub 但路径仍指向同一对 logs/out,等价于多个窗口盯同一套数据。 |
再强调:跑 dp:idx / build 不必开 hub;开 hub 只为了在浏览器里看月历或用页内 /api/* 按钮——见上文 第四节。
CLI 与 npm:完整参数表
前置条件:Node.js ≥ 18;在包根(本仓库根或 node_modules/devpaper)执行 npm install 一次。
路径约定:index / build / hub / init-cursor 在未传 --logs / --out 时,依次尝试 环境变量 DEVPAPER_LOGS / DEVPAPER_OUT(非空)、再落到本包根目录下的 logs/ 与 dist/;命令行参数始终优先于环境变量。相对路径仍相对当前 shell 所在目录解析(init-cursor 中相对路径相对 --cwd,默认当前目录)。index 特例:若既未传 --out 也未设 DEVPAPER_OUT,则扫描 HTML、写 hub-calendar.json 时使用的输出根仍为 手记目录 的上一级下的 dist(与「只传 --logs」的旧脚本兼容)。
克隆本仓库:手记正文默认不入 Git(logs/*.md、logs/*/*.md、logs/_merged/*.md 等,见 .gitignore)。请 devpaper team init 启用团队目录,或自建 logs/YYYY-MM-DD.md。团队模式下勿用 npm run sample:logs(会破坏目录结构)。
| 用途 | 命令 | 参数 | 默认 --logs | 默认 --out | 生成物 / 行为 |
|------|------|------|---------------|--------------|----------------|
| 帮助 | node src/cli.mjs | 无子命令或 -h / --help | — | — | 打印用法后退出 |
| 生成 Cursor Rule | node src/cli.mjs init-cursor | --logs、--out 或 DEVPAPER_LOGS / DEVPAPER_OUT;可选 --cwd、--force | — | — | 写入 <cwd>/.cursor/rules/devpaper-log.mdc |
| 记忆索引 | node src/cli.mjs index | 可选 --logs、--out、--md、--scope current\|all | 本包 logs | 见上文 | index.json;月历 hub-calendar.json 或 hub-calendar-<身份>.json |
| 团队初始化 | node src/cli.mjs team init | 可选 --logs、--force | 本包 logs | — | team.json + 默认 team.local.json |
| 切换当前成员 | node src/cli.mjs team use <id> | 可选 --logs | 本包 logs | — | 更新 team.local.json 的 activeMember |
| 合并手记 | node src/cli.mjs merge | --date / --month / --all / --from+--to;--force | 本包 logs | — | 写入 logs/_merged/(默认) |
| 本机控制台 | node src/cli.mjs hub | 可选 --logs、--out、--port、--open | 本包 logs | 本包 dist | 月历 + 成员切换 + 合并按钮 + /api/* |
| 单日报纸 HTML | node src/cli.mjs build --date YYYY-MM-DD | 必填 --date;可选 --logs、--out、--member、--template 等 | 本包 logs | 本包 dist | 单人 dist/YYYY-MM/;团队 dist/<scope>/YYYY-MM/ |
| 每天各一份 HTML | node src/cli.mjs build --all | 可选 --member | 同上 | 同上 | 每个可构建日期各一份(团队:有汇总稿的日) |
| 日期区间 + 导航 | node src/cli.mjs build --from A --to B | 必填 --from、--to | 同上 | 同上 | <out>/range-…/index.html + 各日 |
| 自然月 + 导航 | node src/cli.mjs build --month YYYY-MM | 必填 --month | 同上 | 同上 | <out>/month-…/index.html + 各日 |
| 自然周 + 导航 | node src/cli.mjs build --week-of YYYY-MM-DD | 必填 --week-of | 同上 | 同上 | <out>/week-…/index.html + 各日 |
| 短命令(包根) | npm run html:day -- … 等 | 见本包 package.json | ./logs | ./dist | html:day / html:day:bs / html:day:reader / html:day:reader-night / html:all / html:month / html:week、idx、hub |
| 单测 | npm test | 无 | — | — | 运行 node --test test/**/*.test.mjs |
| 预设全部日报 | npm run build:html | 无 | ./logs | ./dist | 等同 build --all |
| 预设索引 | npm run build:index | 无 | ./logs | — | 等同 index --md |
| 虚构演示日志 | npm run sample:logs | 无 | 写根目录 logs/*.md | — | 仅单人模式;有 team.json 时脚本会拒绝 |
在包根执行 npm link 后,可将 node src/cli.mjs 换为全局命令 devpaper。
版本与变更
- 变更日志:CHANGELOG.md(按版本列出新增 / 修复 / 升级注意点)。
- 当前版本:与 package.json 中
version一致。 - 升级后:若内置 HTML/CSS/模板有变,对受影响自然月重跑
npm run html:month -- YYYY-MM(仓库根npm run dp:month -- …),并视需要npm run idx/npm run dp:idx重建索引与月历数据。 - 自动化测试:在包根执行
npm test。
协作流程见 CONTRIBUTING.md。
「指纹」是什么?还能叫什么?
指纹不是文件哈希,而是你给同一类错误起的短代号,便于 index.json 聚类与新会话检索。
可替换叫法:错误族 ID、踩坑代号、pattern-id 等。书写示例(均会被索引识别):
**指纹**:`foo`, `bar`
指纹:baz, qux快速开始
在仓库根(本 monorepo):
npm install
npm run dp:idx
npm run dp:month -- 2026-04等价:已在包根时:
npm install
npm run idx
npm run html:month -- 2026-04月刊产物在 dist/2026-04/index.html(目录名为 YYYY-MM)。需要手记月历或页内一键生成时,见上文 「日历在哪…」 与 第四节(推荐 npm run dp:hub)。
演示用大量虚构手记可重生(会覆盖 logs/ 下按日文件):
npm run sample:logs
node src/cli.mjs index --logs ./logs --md不覆盖真实 logs/ 的一页演示:在仓库根执行 npm run dp:demo,输出到 .demo-out/<YYYY-MM>/ 与 .demo-logs/(见 CHANGELOG.md)。
报纸与「多篇、多期」
- 同一天多篇:同一
YYYY-MM-DD.md内多个##,会排进同一份当日 HTML。 - 周 / 月 / 区间:在
dist/下以YYYY-MM为目录名;各日 HTML 写入该日所属月的文件夹;index.html(导航)写在整月时为该月,区间为起始日所在月,周为周一所在月(跨月时 iframe 使用相对路径../其它月/)。build --date/build --all亦写入对应dist/YYYY-MM/;生成后会删dist根下旧版散装文件。若磁盘上仍有旧目录名month-YYYY-MM,可手动改名为YYYY-MM或重新生成该月。
Cursor 与执笔规范
手记的详细模板与元数据说明见 docs/log-authoring-guide.md(与根目录 .cursor/rules/devpaper-log.mdc 搭配:Rule 管纪律,文档管格式)。以主线 openspec/specs/ 为准;旧版 OpenSpec 提案若需对照可查 Git 历史。
报纸版式与「刊位」
HTML 按头版 / 要闻 / 简讯分层:头版单栏大字、舒适行长;要闻主栏带左侧色条;简讯进侧栏(篇数多时侧栏自动双列)。可在正文里写 **刊位**:头版 / 要闻 / 简讯(与指纹同级即可)。
未写「刊位」时:固定 1 条头版;要闻条数随总篇数在 2~6 条间自动调整(大致随「除头版外篇数」的平方根增长,篇数很多时也不会只给 2 条要闻);其余进简讯。多条手写「头版」时只保留第一条,其余降为要闻。
可选 **等级**:高|中|低(或 **严重程度**:…)与 **类型**:…(自由短文本):报纸 HTML 会显示角标并加不同侧线强调;index.json 每条会多 severity、type、typeLabel 字段。生成前会从正文剥离,不与小节重复。
日志、索引与目录
| 路径 | 说明 |
|------|------|
| logs/YYYY-MM-DD.md | 单人模式:按日落盘 |
| logs/team.json | 团队共享配置(成员、mergeDir;不含 activeMember) |
| logs/team.local.json | 本机当前身份(activeMember;勿提交 Git) |
| logs/<id>/YYYY-MM-DD.md | 团队成员个人稿 |
| logs/_merged/YYYY-MM-DD.md | 合并后的团队日刊(默认汇总目录 _merged) |
| logs/index.json | index / dp:idx;含 source;供 hub/ 月历 |
| logs/INDEX.md | index --md 时生成的人类可读表 |
| dist/YYYY-MM/ 或 dist/<id>/YYYY-MM/ | build 生成的报纸页(团队按身份分子目录) |
| hub/index.html | 月历(需 http;dp:hub 提供 API 与 /dist 映射) |
| logs/hub-calendar.json / hub-calendar-<身份>.json | index 生成:各日 md / HTML 状态;团队按身份分文件 |
License
MIT
