切换外观
打磨记录 A:回应时序、身份线、两周小倍数
状态:原型打磨记录,2026-10-15。只说明这三种复盘形式现在怎样工作、怎样验证、还差什么;概念卡仍以 CONCEPTS.md 为准,本记录不改它。记录写于第一次自由运行(free-composite-2026-10-15)打磨出的演示数据,2026-10-15 晚按第二次自由运行(free-20261015-161501)的演示数据更新了引用:事项、问题、计数换成新数据;性能数字与截图是在旧数据上测得、拍下的,没有重做,旧现象在新数据里不再出现的在原处注明。
三种形式都是复盘用的,不承载作答:问题在哪一帧登记、怎样关上、作答后份额去了哪里,只做标记和记录。三页共用一个新模块 sketches/live.mjs 与 sketches/live.css:逐件事的历史与流归属、前 8 件配色、回应路径(ask path)的开闭推算、把来源回应写成动作句(“你在 GitHub 上批准了 #13528”)、详情抽屉、悬停提示、补间与性能计数。两种数据集都能打开:默认是混合语料 composite(29 帧,60 件,26 个问题,三条流有事项:工作、家庭、生活),?dataset=story 是上海两周故事(37 帧,10 件,带子层,无流)。
共同的交互与动画
- 帧:← / → 逐帧,Home / End 到头尾,空格播放或暂停,点时间刻度条或拖动它跳帧;当前帧写进地址栏
frame=,刷新后回到同一帧。 - 悬停同一件事,它在整张图里亮起、其余变淡;点一下固定(再点或 Esc 取消),并在右侧抽屉打开详情:摘要、为什么在这里、回应路径的开闭记录、你的其他动作、版本与“站”、来源原文(“看原文”展开,英文原文只在这里出现)、原始 JSON。
- ↑ / ↓ 在事项(或路径)间移动焦点,Enter 打开详情,
?打开键盘说明;所有按钮与可点区域可用 Tab 到达。 - 动画:切帧时只改动变化的部分,不整页重画;“此刻”线与揭示区连续推进(回应时序 260–520 ms、身份线 240–560 ms,按跨越的帧数伸缩),悬停淡入淡出 110 ms。
prefers-reduced-motion: reduce时全部瞬时完成。?slow=N把所有动画放慢 N 倍,供逐帧截图。 - 性能计数挂在
window.foldPerf。下表数字来自无头 Chrome(1440×900,本机),29 帧正反各切一遍(58 次):“同步切帧”是一次goFrame的全部同步 JS,“渲染”是形式自己的逐帧更新,“补间”是动画中每个 rAF 的工作量,“rAF 间隔”是从 f00 跳到 f17 的动画期间相邻两帧的间隔(包含样式、布局与绘制),“悬停”是 mousemove 事件到下一次 rAF(已强制样式计算)的时长。无头环境只作参考。
| 形式 | 同步切帧 中位 / p95 / 最大 | 渲染 中位 / p95 / 最大 | 补间每帧 最大 | 首次构建 | rAF 间隔 中位 / 最大,>20 ms 次数 | 悬停 中位 / p95 |
|---|---|---|---|---|---|---|
| 02 回应时序 | 3.6 / 4.9 / 5.5 ms | 2.6 / 3.9 / 4.5 ms | 0.2 ms | 44 ms | 16.7 / 16.8 ms,0 | 15.4 / 17.0 ms |
| 01 身份线 | 0.8 / 1.1 / 1.2 ms | 0.2 / 0.3 / 0.4 ms | 0.2 ms | 60 ms | 16.7 / 16.8 ms,0 | 15.6 / 19.7 ms |
| 08 两周小倍数 | 4.3 / 5.2 / 5.5 ms | 2.6 / 3.2 / 3.4 ms | — | 4 ms | 16.7 / 16.8 ms,0 | 19.4 / 21.6 ms |
截图在本地 .local/polish-review-a/(不入库)。每种形式有三帧、一组过渡序列(动画放慢 4 倍、每 320 ms 一张,相当于正常速度每 80 ms 一张,共 6 张,另拼成 *-seq-sheet.png)、悬停、详情、折叠或切换状态,以及 story 数据集各一张;report.json 记录每页的检查结果与性能数字。
02 回应时序 · sketches/timing.html
2026-10-20 起,回应时序按第三轮的动画标准原地升级:直接打开先讲的一遍故事、▶ 连播与 ←/→ 的节拍(此刻线缓出、批次刻度上硬切)、按每次登记画的期限(旧期限变灰)、右栏的“这一件”与“去回答 →”、悬停与展开(接 motion/ix.mjs)都以 timing-motion.md 为准;本节下面的交互与动画是此前的样子,“未解决”的第一条(右栏比此刻线先换)已随新节拍解决。
主关系:每条回应路径的开与闭——问了你什么、开了多久,是被你的回应关上,还是改写后悄悄失效,又和期限谁先到。
场景:两周后复盘“我欠了谁什么回应”:哪些问题拖得最久、哪些在期限后还开着、哪些根本没等到你就因改写失效了。
画面:每件登记过问题或收到过你回应的事一条泳道,按流分组(工作、家庭、生活;story 按根事项分组),行序固定不随帧跳动。每条路径画成一个六边形格:左端是登记、长度是开了多久,开着时是白底黑框、答后关上是灰底、改写后失效是虚线、随事项撤下或并入时末端加竖线。你的回应只画成朱红刻度:决定是圆头、报告已做是方头、回复是平头;没有回答登记问题的动作是短刻度。期限画在泳道里:倒三角加竖线,过期后仍开着的部分加斜线。上方一条“整理批次”记每一帧收到多少输入。右栏是“此刻仍开着 N 个问题”:单位方块记总数,分“登记过 / 答后关上 / 换成新问题 / 改写后失效 / 随事项撤下”,下面的卡片按期限排(有期限的在前,过期的标出;没有期限的按开得久排),号码与图上的圆标一一对应;最后是“这一帧”的叙述。
交互
- 悬停一条路径:提示写出问题、所在事项、开闭状态、开了多久、重登记次数、你回应了几次;悬停朱红刻度:提示写成动作句,并说明它回答了哪个问题。
- 点路径或刻度打开详情,当前路径在抽屉里加框;点刻度时对应的回应高亮,原文可展开。
- 点泳道名打开整件事;右栏卡片点击同样打开该路径,悬停卡片会在图上点亮对应泳道。
- ↑ / ↓ 在此刻开着的路径间移动,Enter 打开,Esc 关闭。
- 期限与
schedule/defer的到点直接可查:期限标签写出“期限 8/16周日 20:00”,悬停或固定该泳道时显示;还没到期的期限一直显示;story 里的暂缓(snooze)画成弧线,到点提醒在详情记录中写成“到点提醒(…要的)”。
动画
- 整张两周图只在首次构建一次;切帧时用裁剪矩形把揭示区推进到新的“此刻”,“此刻”线、未来区底色、开着路径右端的箭头与号码随之平移。
- 箭头、号码、期限标记和泳道名都在推进的“此刻”到达它们时才出现,不会抢在揭示之前。
- 每格的开闭状态用类名切换,填充与边框 180 ms 过渡;右栏卡片按新顺序 FLIP 滑动到位。
- 悬停时其余泳道淡到 0.26。
截图:timing-f08.png、timing-f16.png、timing-f26.png;过渡 timing-seq-1…6.png / timing-seq-sheet.png;悬停 timing-hover.png、timing-keys-hot.png;详情 timing-detail.png、timing-keys-detail.png、timing-response-original.png(展开英文原文);story timing-story.png、timing-story-detail.png。
未解决
- 右栏卡片在切帧一开始就换成新帧的内容,而图上的“此刻”还要几百毫秒才走到;两者节奏不一致。
- 短路径的格内标签只剩“回复 · w…”,要靠悬停读全;最右侧未来区里的期限标签会压到相邻泳道的边线(有纸色描边,可读但不干净)。
- 没有问题也没有回应的事不画泳道,这是有意的取舍;想看全部事项得去身份线。
- 泳道数随数据增长时只能纵向压缩,composite 的 21 条(工作 9、家庭 10、生活 2)刚好放下,更多时需要滚动或折叠。
01 身份线 · sketches/lineage.html
主关系:同一件事在两周里被改写成什么——每段时间叫什么、占多大,何时撤下又以同一身份恢复,何时与另一件并成一件,问题何时开、何时关。
场景:复盘时追一件事的来龙去脉:CI 失败这条线换了 15 个名字,哪几次只是措辞、哪几次是实质变化;航班那件事问过你两次,一次答后关上、一次因改写失效。
新数据里航班(sept-return-0914)的两次提问(补航班号、改签还是照旧)都被你的回应关上,没有因改写失效的那一次;改写后失效的问题换成 master CI 谁来查(f11)、母亲九月住哪(f23)与后刹排气定哪天(f21)。原句保留作为设计理由。
画面:时间自上而下,左侧固定一栏日期、星期与整理时刻(定时复查记 ◷,检查后无变化记 ✓)。三个分区(工作、家庭、生活;旧数据是工作、生活、社区,新数据里社区没有被采用的事项,不成区)各取两周累计份额前 3 件画成竖线,线宽 = 份额,颜色沿用前 8 件配色;其余的事并成一束灰带,宽 = 份额之和,标题写“其余 N 件 ▸”。连续只改措辞的版本并成一站,站旁写“+N 次措辞”;站内若改过名字,就在改名那一行写“→ 〃…”(〃 表示与上一站相同的前缀)。结构变化写成标签,如“12→6 份 · 进行中”。撤下画成横杠,若之后以同一身份恢复,用虚线接上并写“撤下 · N 轮后恢复”;并入用弧线接到目标线。问题画在线左侧的括号上:◆ 登记、✓ 答后关上、× 改写后失效、短横 换成新问题、⊥ 随事项撤下;此刻仍开着的问题在“此刻”线上有箭头。列头写“26 版 · 15 名 · 17 站”这类计数,分区头写“前 3 件 · 到此刻共 38 件”(都是 f28 的 master CI 与工作区),计数随帧变化。
交互
- 悬停站点:提示写出这一站的全名、帧、份额、状态、措辞改写次数与摘要;悬停问题括号:提示写出问题、开闭方式、开了多久、重登记次数、你回应了几次。
- 点击打开详情;问题括号点开时详情里对应的路径加框,连续的重新登记合并成一行“条目改写 N 次,每次以同一问题重新登记”并列出帧号。
- 点“其余 N 件 ▸”或按 E 展开该区:其余的事展开成不带标签的细轨,悬停可读名字;再点“折起其余”收起;展开状态写进地址栏
open=work。 - 点左栏的日期或时刻跳到那一帧;↑ / ↓ 在前列事项间移动,Enter 打开,Esc 关闭。
动画
- 整张图构建一次;切帧时裁剪矩形向下推进,“此刻”线与开着的问题箭头随之移动;列名、计数与箭头在推进到达时才出现。
- 展开或折起一区时,其他分区用 FLIP 横向滑开或合拢,列宽固定,不重排已画的线。
- 悬停时其余列淡到 0.2,110 ms。
截图:lineage-f05.png、lineage-f13.png、lineage-f28.png;过渡 lineage-seq-1…6.png / lineage-seq-sheet.png;悬停 lineage-hover-station.png、lineage-hover-ask.png、lineage-keys-hot.png;详情 lineage-detail.png;折叠与展开 lineage-expanded.png、lineage-expanded-hover.png、lineage-expand-1…6.png / lineage-expand-sheet.png;story lineage-story.png。
未解决
- 展开后的细轨(工作区 35 条)没有标签,只能悬停逐条读;1440 宽下放不下更多信息,也没有横向滚动。
- “只改措辞”的判定是启发式(份额、种类、状态都没变,且标题相似度 ≥ 0.7 或只改了摘要),可能把实质改名并进一站,也可能漏并;CI 线在旧数据里 21 版并成 10 站,目测合理,但没有逐站核对;新数据里是 26 版并成 17 站,没有再目测。
- 窄列里的站名只能截断,“〃”省略相同前缀能缓解一部分。
- 灰带只显示总量的起伏,看不出其中哪件在变;要看得展开或去小倍数。
08 两周小倍数 · multiples.html
2026-10-19 起本节的“画面”里格子的排法(同份额改按首次出现)、黑点的数法(一个开着的问题一个点,含子层)与“交互”“动画”两段已过时:放映、悬停与展开现在怎样工作见 multiples-motion.md。
主关系:每帧同尺度并排、每帧 8×8 = 64 格——一眼看完两周注意力怎样移动,哪件事何时变大、何时消失,哪一刻有问题开着。
场景:会前或周末复盘,打在大屏上从头看到尾;指着某一件事,看它在全部帧里的位置。
画面:按日分行,每行两个小方阵(00:00 与 12:00),旁边写这一帧的标题;当前帧加框。一格一份,按排名从左上角填起,空格是未分配。配色可切换(按 C 或右上角开关,地址栏 color=stream):
- 前 8 件(默认):两周累计份额最多的 8 件各一色(母亲换水管 429 份、猫看病 195、CI 139、主水管 102、小龙虾派对 90、#13481 79、航班 58、幼儿园开园 42),其余灰。选它是因为主关系问的是“注意力怎样移动”,要能逐件追踪;8 色以内仍可区分,第 9 件起不再生成新色。配色经校验器检查:相邻两色正常视觉 ΔE ≥ 19.6、色觉缺陷 ΔE ≥ 8.1;赭黄与底色对比度 2.71 偏低,所以图例文字一律用墨色,身份不只靠颜色(悬停全帧点亮、图例有名字与走势)。
- 按流:蓝 = 工作、橙 = 生活、绿 = 社区(三色两两都通过校验),回答“这两周精力在三条线之间怎样分配”;图例换成三条流的堆叠面积与逐流计数。story 没有流,开关禁用。新数据里三条线是工作、家庭、生活:家庭用紫色,是演示数据换成第二次自由运行时加的,本记录没有重新校验它;社区没有事项,不进图例。
黑点 = 这件事此刻有问题开着,每件只点在它的第一格上。右栏依次是:此刻的放大方阵(带帧标题、件数、用了几份、几个问题开着)、此刻开着的问题(写成“批准 #13350 补上了…:批准合并吗?”)、前 8 件的走势小图与此刻份额。
交互
- 悬停任一格:这件事在全部 29 帧里亮起,其余变淡;提示写出标题、帧、份额、状态、流、此刻开着的问题与两周累计份额。悬停图例行或问题行效果相同。
- 点一格:跳到那一帧并固定那件事,打开详情抽屉;点帧标题或时刻跳帧。
- ← / → 逐帧(由形式外壳处理),空格播放(每 900 ms 一帧),C 切换配色,↑ / ↓ 在图例事项间移动,Enter 打开详情,Esc 关闭。
动画
- 小方阵是历史,不随切帧变化;只有当前帧的框滑到新位置(260 ms),走势小图里的“此刻”线同步平移。
- 放大方阵里每件事的格子按身份保持,切帧时滑到新位置,新出现的淡入、消失的淡出,黑点在格子落定后出现。
- 悬停用一条注入的样式规则一次把其余事项的格子(全部 29 × 64 = 1856 格)改成浅灰,不逐格改属性,所以 29 帧同时点亮也在一帧内完成。
截图:multiples-f03.png、multiples-f14.png、multiples-f26.png;过渡 multiples-seq-1…6.png / multiples-seq-sheet.png;悬停 multiples-hover.png、multiples-stream-hover.png;详情 multiples-detail.png;切换 multiples-stream.png;story multiples-story.png。
未解决
- 每次切帧都要经形式外壳重建一次模型再渲染(约 4 ms),目前够快,但不是增量更新。
- 小方阵 8 px 一格,黑点半径 1.7 px,投到大屏上合适,笔记本上需要凑近看。
- 8 色两两之间并非都能被色觉缺陷读者区分(只保证了图例顺序上的相邻对),依赖悬停与图例补足。
- 前 8 件按两周累计份额选定,是事后视角;如果要在两周进行中使用,前 8 件会随时间变化,颜色就不稳定了。
改动范围
- 新增:
sketches/live.mjs、sketches/live.css、sketches/timing.mjs、sketches/timing.css、sketches/lineage.mjs、sketches/lineage.css、本文件。 - 重写:
sketches/timing.html、sketches/lineage.html(只留页面骨架,逻辑移到同名 .mjs)、multiples.mjs、multiples.css;multiples.html加载sketches/live.css。 - 共享文件只改了
catalog.mjs的描述文字:两周小倍数的 tagline、usage、channel、skeleton、discard、palette 改成“前 8 件 / 按流 / 黑点 = 此刻有问题开着”;身份线的 relation 末尾补“问题何时开、何时关”。shell.mjs、kit.mjs、sketches.css、forms.css、index.html、respond.*、engine.mjs与data/均未改动,演示数据未改。
Safari 检查(2026-10-15)
合页 all.html 做完后,在 Safari 27 里实际打开看过,并用离屏 WebKit(WKWebView,与 Safari 同一引擎)按 1440×900 逐节截图,和 Chrome 无头截图并排对比;顶栏切到 f05 后再截一遍。回应时序、身份线与两周小倍数与 Chrome 一致,只有个别文字换行位置不同,没有需要修的差异。