Files
ComicStyleNovel/AGENTS.md
2026-09-02 18:15:53 +08:00

155 lines
7.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AGENTS.md · 漫剧小说项目协作规则
本项目为 **50 集古装武侠复仇 AI 漫剧**的策划与创作工作区。所有设定、分集、正文均在此迭代。
---
## 一、最高优先级:先读设定,再动笔
任何涉及剧情、人物、设定的动作之前,**必须先读**:
- `.workbuddy/memory/MEMORY.md` —— 已确认的全部设定(**用户确认过的条目,不得擅自更改**)
- `.workbuddy/memory/YYYY-MM-DD.md` —— 当日工作日志(按日期读最新的)
- `50集分集总表.md` —— 当前分集总表(工作底稿)
若 MEMORY.md 与总表内容冲突,**以 MEMORY.md 为准**,并主动提醒用户总表需要同步。
---
## 二、协作模式(用户明确要求)
> **用户先落笔写正文,我负责优化、接顺剧情、把埋下的钩子收拢。不由我代写正文。**
- 用户写一段 → 我改一段,输出可直接用的版本
- 改稿时可以给出**示范性台词/段落**,但必须标明「这是示范,不是代写」
- 用户偏好:**在现有方案上给增强建议**,表达简短精炼,认可后即推进
- 发现设定漏洞要**直说**,并给出修改方案 + 理由;不要为了迎合而放过硬伤
- 每次设定变更后,同步更新 MEMORY.md **和**总表(md + html 两份)
---
## 三、HTML 交付物规范(硬性要求 · 手机优先)
**本项目交付的任何 HTML 文件,必须在手机上可正常浏览。** 用户主要在手机上查看总表,桌面端只是次要场景。
### 3.1 必须满足的基线
| 项 | 要求 |
|---|---|
| viewport | `<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">` |
| 横向溢出 | 全站禁止出现横向滚动条;`body{overflow-x:hidden}`,长文本加 `word-break:break-word` |
| 正文字号 | 桌面 ≥14px,**移动端 ≥15px**(不要为了塞内容缩字号) |
| 安全区 | 底部留白加 `env(safe-area-inset-bottom,0px)`,适配全面屏 |
| 点击目标 | 可点击元素最小高度 ≥32px,移动端 ≥40px |
| 字号锁定 | `html{-webkit-text-size-adjust:100%}` 防 iOS 横屏自动放大 |
### 3.2 表格必须「响应式降级」
本项目大量使用宽表格(分集总表 5 列、人物表 5 列)。**禁止让表格在手机上横向滚动或挤压。**
标准做法 —— **表格转卡片流**(`≤768px` 生效):
1. 每个 `td` 加 `data-l="列名"` 属性
2. 移动端 `thead{display:none}`,`tr{display:block}` 变卡片,`td{display:block}` 变字段行
3. `td::before{content:attr(data-l); display:block}` —— **列名标签独占一行,内容整行铺满**。
⚠️ 不要用 `td{display:grid; grid-template-columns:64px 1fr}`:标签列会吃掉约 30% 宽度,手机上正文被挤得很窄。**标签上、内容下**才是手机端的正解。
4. **每卡首列**(`td:first-child`)作为卡片头:整行铺底色、加粗、隐藏 `::before`,可加 `box-shadow:inset 3px 0 0` 左侧色条
5. `colspan` 单元格单独处理:`display:block` + 行内列名
6. 极窄屏(`≤360px`)只收 padding,不再改布局
> 参考实现见 `50集分集总表.html` 的 `@media (max-width:768px)` 段落,可直接复用。
### 3.2.1 首列宽度(本项目踩过坑)
**禁止给首列写死像素宽度 + `white-space:nowrap`** —— 长内容("序章第 4 拍「幼子尸首没找到」"、"榜二 · 自负剑客")会被挤爆或撑破表格。
正确做法:**用 CSS 变量统一控制,按表覆盖**
```css
table{--ep-w:12em} /* 默认 ≈12 个汉字 */
th:first-child,
td.ep{width:var(--ep-w); min-width:var(--ep-w); white-space:normal}
td.ep.num{white-space:nowrap} /* 纯序号列(集号)例外,防 "5-7" 折行 */
```
- 内容长的表(人物、暗线道具、榜单人物)→ 用默认 `12em`
- 纯序号的表(分集总表、榜单落点)→ `<table style="--ep-w:6em">`,避免白白浪费横向空间
- `th` 默认 `white-space:nowrap`,`th:first-child` 必须改回 `normal`,否则长表头不换行
### 3.2.2 空字段在手机上折叠
分集总表有大量内容为「—」的单元格,在卡片流里会变成一整行占位,非常浪费。用脚本打标记后由 CSS 隐藏:
```js
// 移动端:内容为「—」的字段行折叠,并重算卡片最后一条可见行的边框
var t = (td.textContent || '').replace(/[\s\u00a0]/g, '');
td.classList.toggle('is-empty', mq.matches && (t === '—' || t === '-' || t === ''));
```
```css
table td.is-empty{display:none}
table tr td.last-vis{border-bottom:none} /* 可见的最后一行要去边框,否则卡片底部双线 */
```
- 标记必须随 `matchMedia` 变化重算(横竖屏切换 / 转桌面宽度)
- 首列(卡片头)内容不会为空,不受影响
- 本次共折叠 71 个空字段行,分集总表每卡从 5 行降到 3-4 行
### 3.3 导航与浏览体验
- **顶部 sticky 章节导航**:移动端横向滚动的 chip 条(`overflow-x:auto; scrollbar-width:none`),桌面端换行常驻
- 每个 `h2` 加 `id` 与 `scroll-margin-top`(避开吸顶栏)
- 右下角**回到顶部**悬浮按钮:滚动超过 60% 屏高才出现,避开安全区
- 导航点击用 `scrollIntoView({behavior:'smooth'})`
### 3.4 其他约定
- 颜色**全部走 CSS 变量**,禁止硬编码色值(暗色模式靠覆盖 `:root` 变量实现,成本极低)
- 必须适配 `@media (prefers-color-scheme: dark)`
- 保留 `@media print` 样式,打印时隐藏导航与按钮
- 中文引号:代码里只用 ASCII 直引号;正文自然语言用中文引号
- 不使用任何外部 CDN / 网络字体 / 外链资源(离线可用)
- 单文件交付,`<style>` 与 `<script>` 内联
### 3.5 交付检查清单
产出 HTML 后逐条自检:
- [ ] 手机竖屏(375px)下无横向滚动
- [ ] 表格在窄屏已转为卡片流,**列名标签独占一行、正文整行铺满**(不是 64px + 内容的栅格)
- [ ] 首列宽度用 `--ep-w` 变量控制,无写死像素宽度 + nowrap 的长内容列
- [ ] 内容为「—」的空字段行在手机上已折叠,卡片底部无双线
- [ ] 顶部导航可横向滑动,点击能跳转
- [ ] 深色模式下文字与背景对比度正常
- [ ] 底部内容不被悬浮按钮遮挡
- [ ] 断网状态下打开无缺失样式
---
## 四、文件与产物约定
| 文件 | 用途 | 更新规则 |
|---|---|---|
| `50集分集总表.md` | 分集总表**工作底稿**,用户可直接改 | 设定变更即同步 |
| `50集分集总表.html` | 分集总表**一屏总览**,手机浏览用 | 与 md 同步,遵循第三节规范 |
| `.workbuddy/memory/MEMORY.md` | 长期设定(用户已确认的部分) | Edit 工具**原地改**,不覆盖 |
| `.workbuddy/memory/YYYY-MM-DD.md` | 当日工作日志 | **只追加**(append-only) |
- 正文文件命名:`第XX集.md` 或按用户指定
- 交付后用 `present_files` 呈现,**HTML 放第一位**(自动打开预览)
---
## 五、写作铁律(详见总表第六节,共 20 条)
核心几条,落笔前必看:
1. 闪回必须由「现在」的某个东西**扎进去**,不许写"他想起了八年前"
2. 每次闪回只补一块,且必须**翻案**——不是加信息,是改写上一块的意思
3. 不写「原谅」、不写「冤冤相报何时了」——放过 = 自厌,不是慈悲
4. 化名不能姓沈
5. 女二父亲**只能废,不能杀**(他必须活到 41 集交付下落)
6. 一夜覆灭只能是男主一个人——**师门只做加成,绝不代打**
7. 榜单不能充当男主的实力证明,他真正的实力必须自己打出来
8. 发病是配额化的:动一次真气有代价,丹药只够撑一夜