7.6 KiB
7.6 KiB
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 生效):
- 每个
td加data-l="列名"属性 - 移动端
thead{display:none},tr{display:block}变卡片,td{display:block}变字段行 td::before{content:attr(data-l); display:block}—— 列名标签独占一行,内容整行铺满。 ⚠️ 不要用td{display:grid; grid-template-columns:64px 1fr}:标签列会吃掉约 30% 宽度,手机上正文被挤得很窄。标签上、内容下才是手机端的正解。- 每卡首列(
td:first-child)作为卡片头:整行铺底色、加粗、隐藏::before,可加box-shadow:inset 3px 0 0左侧色条 colspan单元格单独处理:display:block+ 行内列名- 极窄屏(
≤360px)只收 padding,不再改布局
参考实现见
50集分集总表.html的@media (max-width:768px)段落,可直接复用。
3.2.1 首列宽度(本项目踩过坑)
禁止给首列写死像素宽度 + white-space:nowrap —— 长内容("序章第 4 拍「幼子尸首没找到」"、"榜二 · 自负剑客")会被挤爆或撑破表格。
正确做法:用 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 隐藏:
// 移动端:内容为「—」的字段行折叠,并重算卡片最后一条可见行的边框
var t = (td.textContent || '').replace(/[\s\u00a0]/g, '');
td.classList.toggle('is-empty', mq.matches && (t === '—' || t === '-' || t === ''));
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 条)
核心几条,落笔前必看:
- 闪回必须由「现在」的某个东西扎进去,不许写"他想起了八年前"
- 每次闪回只补一块,且必须翻案——不是加信息,是改写上一块的意思
- 不写「原谅」、不写「冤冤相报何时了」——放过 = 自厌,不是慈悲
- 化名不能姓沈
- 女二父亲只能废,不能杀(他必须活到 41 集交付下落)
- 一夜覆灭只能是男主一个人——师门只做加成,绝不代打
- 榜单不能充当男主的实力证明,他真正的实力必须自己打出来
- 发病是配额化的:动一次真气有代价,丹药只够撑一夜