Playwise 训练计划
以长期健康为前提,通过综合训练建设全面身体能力,提高应对生活挑战和参与不同运动的能力。“六边形战士”是长期方向,允许多项能力同步提高,也允许阶段性重点发展部分能力、维持其他能力;功能性训练承担通用身体能力的建设与补强。合理体重与体成分是长期观察结果,训练为其提供支持。
这个体系服务谁
服务的人:把训练当长期健康与生活能力的人;同时玩几项(力量+跑+泳+球),没有一项要备赛;目标是什么都玩点、不受伤、能应付生活里的体力需求;追能力面宽,不追单项成绩。
不服务的人——说了也不做,直接指出超出范围:
| 类型 | 特征 |
|---|---|
| 备赛的人 | 马拉松、铁三、赛艇、比赛——要 taper、要专项峰值、要周期波动 |
| 专项化训练者 | 要备赛、要 taper、要专项峰值、按项目周期波动。跑次/泳次本身不构成判据:每周跑 4–6 次、泳 3–4 次也可以只是综合练,按训练史与总量排 |
| 要成绩突破的人 | 目标是名次、配速、成绩达标 |
| 需要临床诊疗的人 | 诊断、影像判读、康复处方 |
一句话判据:问“你会为某一场比赛调整训练吗?”答“会”就不在画像内。
为什么划这条线:本体系的骨架是「综合能力+不备赛+长期健康」,上限 12 周、不做 taper、不做专项峰值、用疲劳驱动削减而不是周期化波动。专项化的需求会把这三根支柱全部推翻——硬套的结果是两头都不讨好。遇到这类需求,说明超范围,不要给“打折版”的专项计划。
默认用户能正常完成所安排的训练;Skill负责给出足够刺激、明确剂量、预设递进及可恢复的组合,使正常跟练有一条通向目标能力提高的路径。不能用“视情况调整”代替本次建议,也不能把填写检查结论当作效果保证。
计划内不留选择位:课表里的动作、组次、负荷选择方法、恢复与轮换都应明确。保留等价动作时固定轮换顺序;未知实测负重不编造,按目标努力与首组选择方法开出可执行处方。交付前消除需要执行者临时二选一的处方空位。
这是可独立使用的训练体系。常规排课使用包内原则、决策规则与动作资产;交付文件和课表不展示外部作者、教材、论文、引用编号或原始文件路径。
技能与个人内容分界——三处各管一摊,不要互相爬过去:
- 技能(本包):可复用的方法、动作库与其
default_dose、编排与剂量策略、校验与渲染脚本、输出形态。不写任何具体人的可用时长、历史重量、器械与剂量偏好;库里的建议重量是通用默认值,不是给某人的处方。 - 计划文件(
plan.json一类):这一个人、这一个周期的事实——可用时长、场地池长、目标与起点、阶段安排、本次剂量与参考重量。 - 用户的历史记录:使用者真实完成的重量与反应(TR)。格式演示
TR 36kg×8(合成示例,非真实记录)为本文重新构造的假数据;真实计划须使用本人的有效记录和实际日期。
交付管道不进本包:把计划落到 Notion/飞书/某个库的脚本、库 ID 与页面 ID,以及「某人习惯手改表格」这类操作史,都属于使用者的私有环节,不写进本 skill——它们绑死某一个人的账号与页面结构,换个人拿到跑不起来。本包到「渲染稿/导出文件」为止;确有需要就放在使用者自己的工具目录,不进 scripts/、不进 references/,也不降级成「可选工具」留在包内。做通用化时这一层是原地删,不是搬到别处。
排课撞到时间、器材或负荷取舍时回到用户条件里算,不把个人约束写进技能当规则,也不拿技能的通用默认值顶替用户的真实数据。
主流程:计划先行,反馈触发调整
做计划是本 skill 的主任务,运动判断只在用户报问题时启动。
- 先做好计划:按起点和已知条件,一次写清各周剂量、强度、休息与正常递进。
- 没有反馈:照预设路径继续——不逐周索要「无不适、无残留、已稳定」的确认,不把默认完成当成已记录的实际完成。默认正常完成只是排课假设。
- 收到反馈:出现完成困难、不适或条件变化,才调整尚未执行的部分,保留历史。
加量(加重、加组、加距离、加密组、压缩休息、加频次、进下一阶段)仍先过加量闸门——闸门是被动拦截:没报问题就不拦,报了就拦。它不构成「每周必须汇报状态才能往下走」。
操作流程
- 判断新建、展开、适配、修改或解释;复用已有目标、条件与结构。
- 新建与适配时必读这五份:信息收集、训练哲学、设计原则、编排及处方与递进;只要涉及伤病、疼痛、手术史或动作受限,先把限制下的训练读完再排课——不是出了事才查。
- 按训练内容读取功能性力量课或跑游课结构,沿能力、领域、动作族、具体条目的四层动作库,从动作与训练单元选择可执行资产,并按选择与收益核对动作贡献。完整功能课落实具体部位的滚压、拉伸、纠正、激活、原地动作准备、行进技能、专项速度/跳跃/药球、力量房爆发与核心、力量组合及能量代谢(爆发动作的力速曲线分区与举重衍生负荷带见力速曲线与举重衍生);按康复支持与纠正把支持任务放回这些环节,独立周末课用于低成本拉伸放松。因项目分工、阶段或时间而改编时,给出具体替代与负荷判断,不把删去的环节说成已经完成。技术动作选已熟悉版本;低技术基础准备可按正常完成假设开出明确可控处方,不捏造已掌握观察。不把候选的模糊名称直接当处方,也不生成动作教学或诊疗课程。
- 给出具体剂量、强度、恢复、执行要点和结束条件,并预先安排各周递进。正常完成即按既定路径推进;日志、额外测试或逐次证明不作为进阶门槛。收到反馈或条件改变时读取变更逻辑,修正最小必要范围,保留已完成历史。时间变化涉及多个项目时走其中的跨项目取舍:先给推荐与备选、标清代价,由用户定方向,再重排;不替用户砍项目,也不等用户自己给出砍法。缩减顺序见时间不够时怎么减:换日 → 减课次 → 减量,省时只许减量、不许提密度或强度。
- 按数据结构保存计划,按自校验判据检查目标刺激、起点、递进、项目取舍、实际时间和层级一致性;再执行
scripts/validate_plan.py。错误先修正,具体待审事项须有相应处理,不能只写“通过”。按输出规范渲染或导出;修改时运行scripts/compare_plans.py保留实际差异与影响。
设计约束
- 最多12周;支持的计划长度只有 12/9/8/6/4/3 周,其余(如 10、11、13 周)直接拒绝——回退在块内做、总长不变,别靠顺延。12周=四个3周阶段,9周=三个,6周=两个,8周=两个完整阶段+末阶段压到 2 周(压缩末段,不拉长前段),4周=单阶段加冗余周或 4×1 维持循环,3周=单阶段。
- 12周采用四个3周阶段(阶段1 上量→阶段2 上强度→阶段3 力量接爆发→阶段4 力量耐力+巩固;第4阶段不 peak,见四天结构)。周期单元一律叫「阶段」,不叫「相」,也不叫「项」;编号写「阶段 1–4」,行文用「每阶段/各阶段/阶段间」,不写「相 1–4/每相/后续相」。旧稿里凡出现「四相」的按此改。周期内全部用于训练,无测试课、测试周或测试前减量。默认周内与周间都有负荷或侧重变化,不固定三周加量加一周降载。
阶段剂量给满,不排逐周四步阶梯:每阶段一个区间(如容量课 3×8–10),W1 在低端、W2 在区间内取一档、W3 保持,三周各写确定剂量,正常完成照表走。计划先行:先把 12 周(或所选长度)的默认剂量与阶段衔接一次给全,不把 W2/W3 的取值留给执行结果决定;收到反馈后才改未执行周,不追溯已执行周。剂量可以写满,负荷起点不能编——组×次、跑多少分钟、泳多少米必须逐周落实到数;参考重量/配速拿不到实测时写「待补」,不用通用默认值冒充实测;「待补」只能落在这两格——组次、目标 RPE、组间休息、首组如何选重、跑泳的强度描述一律写满,不能跟着一起待补,否则没历史公斤数的人拿到的是半份计划。区间怎么用见计划修订。四步阶梯与块长绑定,块长一改就退化成「加两周降一周」。预设处方不等于虚构执行结果。
区间照模板写,不自造单值:模板给的是「3×8–10/每动作 24–30 次」,就照区间写;从区间两端各挑一头折成「24 次」或「30 次」,是把区间读成单值的自造。区间用来写方法,执行周仍要定值——W1/W2/W3 各落一个数(2×8、3×9、3×10),不能两周都留着区间。组数总量不是处方指标:先定动作×组次,单课组数=当日动作数×组数,是排完之后的结果,只用来估时间(含热身与核心)。设一列「每周组数区间」反过来管动作,就是把模板用反了;真要核对就把算出来的组数写在表下当核算,不当门槛。
回退与重做在块内吸收,不顺延总长:某周不达标就降为保底周(见计划形态),阶段末判定为「重做」时占用下一阶段的位置——总长仍是 12 周,13 周一类非标准长度直接判不合法。
- 按生活与运动需求、目标能力及执行条件分配功能性力量、跑步和游泳的任务与主次,项目配置随目标改变。主休息日优先周日,工作日保持训练,六日内轻重错开。游泳、热身中的跑跳和力量课末代谢训练均计入总负荷。
- 耐力发展读取有氧总量与进阶,分别核算主跑段、净游量、计划中等当量及整课耗时。低起点用具体周间路径建立总量,不能把力量、准备和池边休息凑作有氧;较高基线者按专项需求设计新增刺激。
- 适用力量明确采用剩余次数标尺指导选重,常用RPE7约余3次、RPE8约余2次、RPE9约余1次(力量阶段主要动作用档);课表写出锚点。RPE不等于最大力量百分比,参考重量不是固定完成要求。DUP用稳定主力动作在相邻训练课改变次数与相应负荷;声明的主力锚点保存于
design_context.strength_waves,工作组标记wave_role。换动作、换标题或阶段进阶本身不能证明DUP;不要求所有辅助、爆发或准备任务都波动。 - 为发展目标设计实际刺激与递进;维持目标有对应刺激,暂缓或未评估项明确标记。不能用任意能力标签制造覆盖,也不默认每项能力都要独立训练。
- 动作库覆盖功能性力量、跑步、游泳及宏观支撑任务,覆盖表见
references/training-library/coverage.json。每项所需能力有适用资产或明确缺口,不能把库中存在某动作当作本周期已经得到发展。默认主课优先高贡献、可递进且时间、技术和恢复成本合理的动作;局部孤立动作有明确任务时再判断,不为凑行数加入主课。 - 默认能完成不等于自动掌握陌生技术或已有运动限制已获许可。选择已掌握替代,已明确限制进入编排;异常反应出现时停止相关内容并重新判断。
- 先出通用编排,再落个性化:第一版按健康成年人的通用处方排,不预设伤病、器械缺失、可用时长;结构定稿后才做替代与降级。例外:已登记限制(或明显疑似)时不走这条——先套限制筛一遍动作与总量,再按频次铺课;未登记也未评估的,按最保守一档排,等评估结果再放开。顺序反了,第一稿就是一份带禁忌动作的健康人处方。两件事混在一版里改,结构问题和个体限制会搅成一锅。用户按频次逐个评审时(四天→三天→两天),一次只铺一个频次、一堂课,该轮确认后再继续;用户直接要整份课表或明确委托选结构,则按 intake 一次交付整份,不逐堂追问;每堂课前说清「哪些项三周递进、哪些三项固定」,以便核对预设递进。
结构模板:按频次选一份,不混用、不拼接
- 四天结构:周内交替(2 下肢日+2 纯上肢推日)、四阶段递进(阶段 1 上量→阶段 2 上强度→阶段 3 力量接爆发→阶段 4 力量耐力+巩固,不 peak)、日定位。
- 三天结构:骨架真身(Core 两行/Pair 一组/Tri-set 三格)、重-中-轻强度梯度、只能取示例表内动作的归类池、力量轴+模板轴两轴递进;三天只有第一阶段,后续阶段属移植。
- 两天结构:两组主项结构、默认无辅助层(完整整合分支的唯一例外须写全组序/工作长度/恢复)、完整两天课、缺口清单与「扩项规则失效」的递进修正。
多项目编排:先定骨架挂载,再算强度额度
- 同期训练:干扰阈值、每周高强度课预算(硬上限 4 次、登记限制时 3 次,脚本会查)、项目互斥矩阵、跑 0–7 次梯度与四/三/二练×跑的周历拼法、两档配比(力量为主/混合,不产生「主导项目」)。
- 多项目编排:无专项者的骨架+挂载、两本账(强度/天数)、恢复日三形态与计数口径、编排七步、球种对力量重点的影响、同日顺序、一天两练规则、算例。
功能性力量是底,专项是它的使用场景——不按项目轮流分「发展名额」:先问用户对每项运动的想法(兴趣参与/补体能/想改善某个具体环节)+每周愿给多少时间;问不清就按维持排并在稿上标「未确认」,不猜配比、不替用户定角色。力量课贯穿周期、按自身组次与负重递进,不因轮到跑或泳就让位,也不因自己涨了要求跑泳停。控增量靠负荷线,不靠给项目排队:「本周跑、下周泳」这类轮换表是错的读法,一被这么写就回退重排。
五条独立负荷线:力量组次(含负重锚点)/跑动分钟/泳净量/冲击接触次数/恢复占用。同一阶段最多一条线明显上抬,第二条要抬须写明理由(review 级,不报 error)。维持项不是零负荷——维持的力量课照样占恢复资源,「某项维持」不等于「另外两项可以放心加」。上抬按课表里写下的剂量判,不按目标层怎么措辞:拿每阶段首末周的力量组数×次数、跑动分钟、泳净量作量,目标 RPE 均值作强度,主项休息作恢复;量过 10%、RPE 涨 0.2、休息压到 95% 以下任一条成立即算这条线在抬。stage_load_lines() 出这张对照表,同阶段超过一条线抬就报 stage_lines:<block>(review),要求写清主次与另一条为什么也抬;目标写「发展」但每次课剂量没动,这条线就是平的。
「只抬一条线」不等于「同一条线可以连涨整轮」:同一条线连续 2 个阶段以上都在抬报 stage_lines_streak;相邻两个抬档点之间至少稳 3 周,只隔 1–2 周就连抬报 ramp_interval(消息里带两个周次与两个量)。合法写法是阶段内三条线全平、抬档只落在阶段边界(示例:跑 62/75/88/100 分钟每周,每档稳 3 周)。阶段内全平时要说清哪条线在下一个边界接棒,否则「谁都还没动」会被读成整个周期没递进。两种形态不报「阶段内加量」:① 阶段首周 1–2 组→次周 3 组、次数与 RPE 不变,那是原表 Phase 1 自己的入门周节奏(_is_phase_intro() 记为 prescribed_intro,改用次周作比较基线),不是自主加量;② 容量日与较重日次数相同(Phase 2–4 两日主项同为 5 次)时,日波动由目标 RPE 承担,design_checks 认「次数不同」或「目标 RPE 明确更高」二者其一——缺这条,示例从换阶段那周起会整段报「较重课与容量课未给出明确较低重复区间」、blocked_weeks 一路铺到末周。
阶段衔接单列一次,基线→首周也单列一次:只比每阶段首末周,会整段漏掉「阶段内三周全平、抬档全压在边界」这一类——stage_load_lines() 的 handoff/handoff_rising 报 stage_handoff:<block>,未在 design_context.review_resolutions 写明是抬档还是叠加时,actual 模式不出表;只比 W1 之后的抬档点,会漏掉基线到 W1 这一跳(全表最大的一步常在没人看的位置)。基线→首周按频率判、不按百分比判:baseline_entry_check() 在跑次增加时只核单次是否延长(单次最长 ≤ 基线单次即通过,加频率本身不是加量),跑次不变而周量涨幅过 10% 才报。三套口径不能共用一个名字:主跑段合计(各课最长单段相加,不含起跑与收尾)/跑动类合计(按动作类型求和——起跑、收尾若也编成跑课类动作就会被算进来)/整课(含快走与冷身),分三句写;40% 上限、抬档判定、衔接检查都只能用「含过渡的整周跑量」这一套。报对照表时列名写准:把按类型求和得到的数标成「主跑合计」,同一周就会和专项教练的主跑段数差十几分钟,看着像两家各错一半。摘要(mini_goal)里的分钟数核的是本课主跑段(最长单段),不是整课、也不是含起跑收尾的跑动合计——口径取错,几十节课会全报「不一致」,白改一轮;这类漂移要脚本扫全表,人工抽看几节必然漏掉只差 1–2 分钟的那批。基线的跑次/单次最长/周量要落成 baseline_basis 的结构化字段(run_sessions_per_week/run_longest_minutes/run_weekly_minutes/minutes_basis),只写在 observation 散文里,下一步没人能核,跨口径相除还会算出 +55% 这种假涨幅。
能算的字段就别手写:单次摘要(mini_goal)与整课耗时都由剂量生成(session_summary.mini_goal()/duration_model.apply()),手写副本与处方并存时改一处必留另一处。摘要里写了数字就是可核对声明,与剂量不符报 mini_goal 与单次剂量不一致(review 级,附生成值)。改组次后的连带清单(set_sequence/时长/摘要/context_hash/阶段表)见数据结构,漏一项就多一轮返工。context_hash 不手填、也不留旧值:动过主项组次或递增组后,未刷新的决议会让 global_gaps 报 stage_handoff:<block>: 需在 review_resolutions 记录当前 context_hash…,并连带堵住出稿门。刷法是重跑 design_checks.check(plan, library())(library() 从 validate_plan 导入),把 requirements 里的 review_id → context_hash 逐条回填 design_context.review_resolutions 再跑全量测试;理由文字不动,除非抬档事实本身变了。
描述字段要照课表实际剂量写:progression_condition/purpose 里写「本阶段由 8 组升到 12 组」之前,先读该阶段 items 的 sets/reps/target_rpe 确认真是这么排的。把教练的目标数字直接转述进描述、而课表没实现,就是一份自己跟自己对不上的计划——评审会当成「声称已落盘」打回,自己复核时也容易被这句骗过。没落地的递进只写在计划外的备注里,不写进计划描述。
冲击接触自己单独算一行:组数表与跑量表都看不出它。周接触量=contacts_per_rep × sets × reps × 侧数 逐日累加;与跑动分钟并列核对、不相加,也不设「两条不能同升」的硬规则。判某阶段冲击涨没涨先按这个式子算出来再下结论,不凭「换了组织方式」推断——把独立增强式段移进配对组常是持平或下降。
处方调整与表现改善分两栏记:同一处方下表现变好是训练结果,不改处方;只有加组、加距、提目标强度、进下一阶段才算处方调整。混成一栏既看不出基础训练的收益,也看不出专项是否另外加码。
单项处方:跑与泳各自的起点、递进与上限
- 计划修订:计划是计划、执行是执行——本包不规定怎么练怎么记,只管拿到结果后计划怎么改:周内判定、阶段末判定、块内回退位、只改局部不重写计划。
- 跑课编排:四档起点处方、I/R 频次跟球走、递进(含单次最长跑按周跑次分档:4+次 30%/3 次 40%/2 次 55%/单跑不适用,>64 km 收到 25%,脚本会查)、跑姿三条、强度描述、典型周历。
- 游泳编排:按泳姿与具体任务确认起点,两档努力(不测 CSS),预设单变量递进及异常调整、真实池长与游距、器材和既有限制;示例剂量不是通用成人处方。
支撑判断:先看限制与器械,再落到动作名
- 限制下的训练:长期/阶段性两类限制、七个动作族×三档、愈合三期(按组织与次晨反应分期,不按日历)、3/10 疼痛只作当日上限、冲击支路三类(明确禁止/允许但条件未足/当次发作,三支不可混成一条)、红旗清单、转诊条件。
- 器械配置:器械清单与逐项替代(可提/降级/真缺口三级)、膝主导功能性排序、四档配置下八个主项位怎么填、无重量时的递进六法。
- 动作中英对照:术语基线、书中未收录动作的标注;「现名」一列就是动作库
name原值,写课表按它写,否则表现列按名匹配会串。 - 对照表每一行要么带库 id、要么显式写
not_in_library,改完跑scripts/check_exercise_names.py:它逐行核「id 在不在库、表里名字等不等于库 name、有无 id 却自称现用名」,并给出可补的 id;写了not_in_library的行单列成「已声明库内无」、不计为错误,表头行跳过。两种状态之外没有第三种:没 id 又不声明库内无的行不算「现用名」,脚本会当错误报出来——库里没有的移动技能(交叉跳、侧向爬一类)写成现用名,等于替库造了一个查不到的名字。声明「已在动作库与本表同时执行」之前先grep -rn '旧名1\|旧名2' SKILL.md references/:改表的行容易,正文与结构文件(两/三/四天结构、functional-session、gym-equipment、limitations、multi-sport)里同一批名字还有几十处,只改表却宣布统一,下一轮评审一 grep 就会发现表比正文新。 - 判库内缺项须按定义检索:同时查
id/name、english_name和动作定义,核对 canonical 与 runtime 两套资产及同义名。零命中才标not_in_library,不得以近似动作替代缺项。报告关键词、范围与结果。 - 补新条目前先定中文名,分「有出处」与「建议译名」两档:有公开中文用法的直接写(
深蹲保持/静态深蹲、侧向熊爬),查不到统一译法的标「描述性建议译名,待图示核对」(药球触趾深蹲一类),不冒充行业标准。新名与库内同族对齐:库里的 crawl 只有熊爬,横向变体就叫「侧向熊爬」而不是「侧向爬行」。与临床/测试术语撞名要写明区别:「单腿交叉跳」在康复文献里是 crossover hop test 的测量动作,跟热身里的交叉跳不是一回事,不区分会让一个名字指两个动作。 - 脚本报的行数先扣掉解析假象,再谈有多少欠账:对照表的表头行会被当成数据行(「现用中文名」那格就是表头名)、一行里并排写两个 id 的合并行会被拿同一格名字核两次——这两类都报成「名称与库不一致」或「无库 id 却自称现用名」。修法是改脚本跳过表头、把合并行拆成一行一 id,不是回头去改动作名;先扣掉这两类再报数,否则报出去的条数里有一半是解析器自己造出来的。给表加一种新的合法状态,同一轮就把校验器改掉:
not_in_library只写进表、脚本仍只认「有 id/无 id」时,整张表永远红,而且每一轮都被当成新欠账重查一遍。合并行本身就是串台源:一行挂两个 id,按名匹配时两个 id 会争同一格名字,测试与渲染各取一个,看着都对。 - 问题统计说明口径,显示名变更使用 alias:区分动作条目、器材行、表头和已声明库外条目。库
name是匹配键;alias不参与匹配,改名须同步校验与引用。 - 动作名回到原文核,不自造:中文名一律取书内译名或包内已统一名。自造名会撞上书本身的立场(自造「手枪蹲」撞书反对手枪式深蹲、自造「保加利亚」撞正名后脚抬高分腿蹲、自造「下砍/上举」撞下劈/上拉)。热身与纠正段尤其不能按英文词直译:Inchworm 字面是尺蠖、书里叫毛毛虫;Leg Cradle 直译成「腿摇篮」也不对;Cook hip lift 与 Leg lower 也不能中英混写。这一段的动作在书里只有一张准备段表,英文字面与动作形态经常脱节(shuffle 是拖步不是“跚步”),一律按中文版原表写,完了补进动作中英对照第十一节。核名要逐页对原文,凭印象列名必错;书中没有的动作(地板卧推、北欧腿弯举)保留但标「包内补充」,不得说成书里有的。包内已统一的资产名称优先作为匹配用语,以动作中英对照为准。
- 结构结论写入 references 并更新入口指针:修改完成须读回文件、核对差异并运行相关与全量测试。讨论结论不代替最终文件内容。
版本号写在 SKILL.md 前置字段:当前 1.0 公开源包。plan.json 的 version 是整数格式修订号,schema_version 是格式版本字符串,不与包版本混用。
改稿与定稿纪律:
- 评审意见不等于修改授权:专项教练、康复师、顾问乃至主教练说「撤回这批」「按我说的改」,都只是建议;动
SKILL.md与references/之前先把要改的清单给用户看、拿到一句「改」,再成组落盘。一次落完,不边改边报。 - 合并同轮修改范围:列明文件、位置、理由与连带影响,按已授权范围成组修改,一轮改动统一记录版本。
- 定稿后保持可追溯:仅在授权范围内修改,保留版本与实际差异。实际训练收益和恢复能力须由执行结果判断。
- 概括句与明细表必须逐项对账,对不上就删概括句:「原组数减一组」「每周三次有氧」「这堂课 20 分钟」这类一句话概括,明细改过之后极易与新数字矛盾(减一组却写着 5→3 组、说三次有氧而课表排了四次、间歇课实际 30–40 分钟)。定稿前把每一句概括拉回它对应的表逐项核;不一致时保留明细、删掉或改写概括句,两句并存读者无法判断哪句是真的。
- 撤回一批内容时,同时改掉生产它的那条规则:数字被删掉而写出这些数字的规则原样留着,下一轮评审会照着同一条规则把数字造回来。撤完先 grep 一遍该内容的关键串确认 0 命中,再读那条产出规则本身是否也该反向改写。
- 改完在
CHANGELOG.md记一条:哪版撤了什么、为什么撤、影响哪些文件。没有这条,下一轮只能靠「谁记得」来判断,撤过的东西会被当成遗漏补回去。 - 以版本差异报告改动范围:使用文件清单、内容差异与校验结果,不凭记忆宣称完成。
代算结果注明方法与责任边界:区分来源事实、独立计算与设计选择;同一判据保留一致阈值和明确适用范围。
同一量结果不同先对齐口径:核对输入、单位、过渡时间和舍入方式,列出未解决差异,再确定采用值。
绝对数值进规则前先过一道判据:任何「每次最多加 X 分钟」「超过 Y 分钟就转档」这类数,先自问起点不同的两个人是否都成立——60 分钟周量的人加 15 分钟是 +25%,300 分钟的人加 15 分钟是 +5%,一个数管不了两个量级。不成立就降为「本示例参数」,写明触发点由使用者的比例档决定,不写成通则;由本包自定分配倒推出来的数尤其不能升级为规则(如从「三跑 40% 档下单次会超 50 分钟」导出「120 分钟必须加跑次」,是两层自造叠在一起)。同理,比例上限已经管住单次长度时,就不要再叠一个固定分钟数——重复的阈值迟早互相打架。
耗时账与可行性结论必须同一口径:说「X 分钟排得下」之前,固定块(准备+爆发+核心)、递增/热身组、工作组与组间休息、换动作要一次算完;先给一个不含递增的数、再补一句「加上递增多 6 分钟」,结论已经和自己打架。比两个方案谁更省时之前先对齐工作量:组数或时长不同时,差异来自工作量本身,不能归因给方案结构(拿 7 组比 9 组得出「减模式更费时」、拿 6 组比 9 组得出「保四类装不下」都是这一类)。正确写法是「预算 ↔ 能排的组数」一张对照表,让两个方案在同一预算下比覆盖与厚度。整课耗时由剂量算,不写常量:scripts/duration_model.py 是唯一实现(单动作=组数×单组工作+(组数−1)×组间休息;单组工作优先取 RPE≥7 的计次×5 秒,其次资产表的整组工作秒(备注已写明「约 9 秒/次」「每次保持 10 秒、共 6 次」一类的直接采用,别再用逐次估算覆盖它),再次时长字段,技术计次×4 秒;per_side 翻倍),apply() 写回 items→modules→session 三层;校验里「处方量超出分配时间」必须调同一个函数。计距按动作分速度,不共用一个常量:行进/横向走与踢腿行进 0.8 m/s、负重行走 1.0 m/s、加速跑 3 m/s 上下(10 米 strides 约 3 秒)。一律按 1.3 m/s 会把 20 米行进算成 15 秒、把 strides 算成 8 秒,两头都错。两套组工作估计并存时,一边算出「每节超 90 分钟」、另一边算出「都在 90 内」,先错的是结论不是数据。24 节课共用一个手写常量,等于把真实浮动藏起来。两个实现每节只差 0.5–1.5 分钟时,别先归因「换动作过渡」或「逐项四舍五入」——这两类差不出这个量级;打开对方的脚本逐项 diff 单组工作秒,差异几乎都落在那一层(整组秒表 vs 逐次估算),定位到具体动作再判谁对,别在两种可能的解释里选一个就当结论。超时不许压缩有症状部位的准备组来凑:递增/热身组解决的是「没充分准备就直接上工作组」的安全性,不属于可裁容量;补递增组与砍时长分开算,补完仍超就如实报超时。审剂量时按动作逐个点数递增组(RPE4 那几组)——某个主项整轮 0 组就是没有安全带