From af0e28d655292e4a0c54411f335c1ae0f6a6ec98 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 26 Oct 2026 19:16:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E5=B0=BE(=E8=BF=AD=E4=BB=A338?= =?UTF-8?q?=E6=89=B9=E5=90=8E):=20=E8=B4=A6=E9=9D=A2=E6=8D=A2=E4=BB=A3?= =?UTF-8?q?=EF=BC=8B=E5=8F=8D=E5=93=BA=E7=82=B91-16=E8=90=BD=E6=96=87?= =?UTF-8?q?=EF=BC=8B=E4=BA=A7=E5=87=BA=E7=89=A9=E9=80=80=E5=BD=B9=EF=BC=88?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=A3=81=E3=80=8C=E5=8F=8D=E5=93=BA=E8=90=BD?= =?UTF-8?q?=E6=96=87=E6=B2=A1=E6=9C=89=E9=97=AE=E9=A2=98=E3=80=81=E4=BB=A3?= =?UTF-8?q?=E6=8B=8D=E6=9D=BF=E5=85=A8=E9=83=A8=E8=BF=BD=E8=AE=A4=E3=80=81?= =?UTF-8?q?=E5=8D=A1=E2=91=A1=E7=8A=B6=E6=80=81=E5=8F=AF=E4=B8=80=E5=B9=B6?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E3=80=8D=EF=BC=89=E2=80=94=E2=80=94=E2=91=A0?= =?UTF-8?q?=E5=BE=85=E5=8A=9E=E6=B8=85=E5=8D=95=E5=9B=9B=E6=9D=A1=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E5=8D=B3=E6=95=B4=E5=88=A0=EF=BC=88=E6=95=88=E6=9E=9C?= =?UTF-8?q?=E5=BC=95=E6=93=8E=E6=A0=A1=E9=AA=8C=E6=96=87=E6=A1=88=E8=AE=A1?= =?UTF-8?q?=E6=95=B0=E9=94=99=E8=AF=AF=EF=BC=8F=E6=98=8E=E7=BB=86=E8=A1=8C?= =?UTF-8?q?=E6=89=A9=E5=B1=95=E6=80=BB=E5=9E=8B=E6=94=B6=E6=95=9B=E6=89=B9?= =?UTF-8?q?=EF=BC=8F=E5=A5=96=E5=8A=B1=E8=8A=82=E7=82=B9=E8=BF=87=E6=97=B6?= =?UTF-8?q?=E8=A1=A8=E8=BF=B0=E6=B8=85=E6=89=AB=E6=89=B9=EF=BC=8F=E8=B0=83?= =?UTF-8?q?=E8=AF=95=E5=85=A5=E5=8F=A3=E5=86=99=E6=AD=BB=E8=A1=8C=E5=BF=85?= =?UTF-8?q?=E9=A1=BB=E5=9C=A8=E5=8F=91=E5=B8=83=E5=89=8D=E5=88=A0=E9=99=A4?= =?UTF-8?q?=EF=BC=89=EF=BC=8B=E3=80=8C=E7=BB=93=E7=AE=97=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E8=A1=8C=E5=BA=8F=E9=87=8D=E9=94=9A=E6=89=B9?= =?UTF-8?q?=E3=80=8D=E9=9A=8F=E5=8D=A1=E2=91=A3=E8=A3=81=E7=82=B9=E7=94=B2?= =?UTF-8?q?=E5=87=BA=E8=B4=A6=E5=88=A0=E9=99=A4=EF=BC=8B=E3=80=8C=E9=97=B8?= =?UTF-8?q?=E4=B8=8E=E6=8E=A2=E9=92=88=E5=AD=98=E9=87=8F=E5=99=AA=E5=A3=B0?= =?UTF-8?q?=E4=B8=A4=E4=BB=B6=E3=80=8D=E6=8B=86=E6=B3=A8=E6=94=B9=E5=90=8D?= =?UTF-8?q?=EF=BC=88=E4=BB=B6=E2=91=A0=E4=BA=A7=E5=93=81=E7=A0=81=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E9=94=99=E9=9A=8F=E5=8D=A1=E2=91=A5=E5=87=BA=E8=B4=A6?= =?UTF-8?q?=EF=BC=8C=E4=BF=9D=E7=95=99=E4=BB=B6=E2=91=A1=E9=97=B8=E5=A3=B3?= =?UTF-8?q?=E6=8C=82=E6=AD=BB=E9=98=B2=E6=8A=A4=EF=BC=9D=E5=B7=A5=E7=A8=8B?= =?UTF-8?q?=E7=9B=B4=E6=94=B9=E5=BE=85=E6=89=A7=E8=A1=8C=EF=BC=8C=E6=94=B9?= =?UTF-8?q?=E5=8A=A8=E9=9D=A2=E9=99=8D=E4=B8=BA=E5=B7=A5=E5=85=B7=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=89=EF=BC=9B=E5=8D=A1=E2=91=A1=E6=9D=A1=E7=9B=AE?= =?UTF-8?q?=E7=8E=B0=E6=80=81=E7=94=B1=E5=B9=B6=E8=A1=8C=E4=BC=9A=E8=AF=9D?= =?UTF-8?q?=E7=99=BB=E8=AE=B0=E3=80=8Cgdstyle=E5=AD=98=E9=87=8F=E5=80=BA?= =?UTF-8?q?=E5=85=A8=E9=87=8F=E6=B8=85=E5=81=BF=E3=80=8D=E6=B3=A27?= =?UTF-8?q?=E6=89=BF=E6=8E=A5=EF=BC=88=E5=8E=9F=E3=80=8C=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E5=AE=A1=E6=9F=A5=E6=9C=AA=E7=AB=8B=E9=A1=B9=E5=B0=8F=E4=BB=B6?= =?UTF-8?q?=E5=80=99=E5=AE=A1=E3=80=8D=E6=9D=A1=E7=9B=AE=E5=B7=B2=E5=B9=B6?= =?UTF-8?q?=E5=85=A5=E8=AF=A5=E6=9D=A1=EF=BC=89=EF=BC=8C=E6=9C=AC=E6=89=B9?= =?UTF-8?q?=E4=B8=8D=E9=87=8D=E5=A4=8D=E5=9B=9E=E9=80=80=EF=BC=9B=E2=91=A1?= =?UTF-8?q?roadmap=20=E8=BF=AD=E4=BB=A338=E8=A1=8C=E6=8D=A2=E4=BB=A3?= =?UTF-8?q?=EF=BC=88=E7=8A=B6=E6=80=81=E5=B7=B2=E5=AE=8C=E6=88=90=EF=BC=88?= =?UTF-8?q?2026-10-26=EF=BC=89=EF=BC=8F=E9=9C=80=E6=B1=82=E5=8D=A1?= =?UTF-8?q?=E7=89=87=E5=88=97=E4=B8=8E=E5=AE=9E=E7=8E=B0=E6=8A=A5=E5=91=8A?= =?UTF-8?q?=E5=88=97=E5=A1=AB=E9=80=80=E5=BD=B9=E4=BF=9D=E7=95=99=E5=AD=97?= =?UTF-8?q?=EF=BC=89=EF=BC=8B=E9=A1=B6=E9=83=A8=E5=BD=93=E5=89=8D=E4=BD=8D?= =?UTF-8?q?=E8=BF=AD=E4=BB=A3=E4=BD=8D=E4=B8=8E=E4=B8=8B=E4=B8=80=E6=AD=A5?= =?UTF-8?q?=E4=B8=A4=E8=A1=8C=E6=8D=A2=E4=BB=A3=EF=BC=8B=E8=A1=A8=E4=B8=8B?= =?UTF-8?q?=E5=8A=A0=E5=B8=A6=E7=BA=A2=E5=90=88=E5=B9=B6=E3=80=94=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=89=B9=E6=89=B9=202026-10-26=E3=80=95=E6=B3=A8?= =?UTF-8?q?=E8=AE=B0=E4=B8=80=E8=A1=8C=EF=BC=9B=E2=91=A2=E4=BD=93=E9=AA=8C?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E6=B8=85=E5=8D=95=E6=96=B0=E5=A2=9E=20?= =?UTF-8?q?=E3=8A=B1=20=E8=BF=AD=E4=BB=A338=20=E5=85=AD=E5=8D=A1=E7=9B=AE?= =?UTF-8?q?=E6=A3=80=E6=80=BB=E6=B8=85=E5=8D=95=E4=BA=94=E9=A1=B9=EF=BC=88?= =?UTF-8?q?=E5=90=AB=E7=BA=A2=E7=81=AF=E4=BF=A1=E5=8F=B7=E4=B8=8E=E7=BB=93?= =?UTF-8?q?=E8=AE=BA=E5=9B=9E=E6=B5=81=EF=BC=9B=E5=8D=A1=E2=91=A1=20?= =?UTF-8?q?=E6=97=A0=E6=94=B9=E5=8A=A8=E4=B8=8D=E7=99=BB=E8=AE=B0=EF=BC=89?= =?UTF-8?q?=E2=80=94=E2=80=94=E5=8F=8D=E5=93=BA=E7=82=B917=20=E5=89=8D?= =?UTF-8?q?=E6=8F=90=E8=AF=81=E4=BC=AA=EF=BC=9A=E6=A0=B9=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=20=E4=BD=93=E9=AA=8C=E9=AA=8C=E8=AF=81=E6=B8=85=E5=8D=95.md=20?= =?UTF-8?q?=E4=B8=80=E7=9B=B4=E5=AD=98=E5=9C=A8=E4=B8=94=E8=A2=AB=20git=20?= =?UTF-8?q?=E8=B7=9F=E8=B8=AA=EF=BC=88414=20=E8=A1=8C=E3=80=81=E3=89=96?= =?UTF-8?q?=E2=80=93=E3=9F=9F=20=E9=80=90=E8=BF=AD=E4=BB=A3=E8=8A=82?= =?UTF-8?q?=E4=BF=B1=E5=85=A8=EF=BC=89=EF=BC=8C=E5=BD=93=E6=97=B6=E8=AF=AF?= =?UTF-8?q?=E5=88=A4=E7=B3=BB=20Windows=20=E4=B8=AD=E6=96=87=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=90=8D=E7=BC=96=E7=A0=81=E6=98=BE=E7=A4=BA=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=8C=E6=95=85=E4=B8=A4=E9=80=89=E4=B8=80=E8=A3=81?= =?UTF-8?q?=E5=86=B3=E4=BD=9C=E5=BA=9F=E3=80=81=E7=9B=B4=E6=8E=A5=E6=8C=89?= =?UTF-8?q?=E6=97=A2=E6=9C=89=E6=A0=BC=E5=BC=8F=E8=90=BD=E7=99=BB=E8=AE=B0?= =?UTF-8?q?=EF=BC=9B=E2=91=A3=E5=8F=8D=E5=93=BA=E8=90=BD=E6=96=87=E5=85=AD?= =?UTF-8?q?=E5=A4=84=EF=BC=9A=E6=88=98=E6=96=97=E7=BB=93=E7=AE=97=E3=80=8C?= =?UTF-8?q?=E6=89=A9=E5=B1=95=E8=A1=8C=E3=80=8D=E8=8A=82=E8=BF=87=E6=B8=A1?= =?UTF-8?q?=E5=8F=A5=E6=8D=A2=E4=BB=A3=E4=B8=BA=E5=8D=95=E4=B8=80=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E8=A1=8C=E5=9E=8B+effect=5Fid=20=E5=8F=A3=E5=BE=84?= =?UTF-8?q?=EF=BC=88v1.0=E2=86=92v1.1=EF=BC=89=E3=80=8108-Alpha=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E6=A0=87=E5=87=86=20=E4=B8=89=E9=80=89=E4=B8=80?= =?UTF-8?q?=E6=9D=A1=E7=9B=AE=E6=94=B9=E4=B8=A4=E6=B8=A0=E9=81=93=E5=9D=87?= =?UTF-8?q?=E5=9C=A8=E5=BD=B9=EF=BC=88v1.16=E2=86=92v1.17=EF=BC=8C02-?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E6=B8=85=E5=8D=95=20=E6=8C=87=E9=92=88?= =?UTF-8?q?=E9=9A=8F=E5=8A=A8=EF=BC=89=E3=80=81ux/battle=20=E8=B0=83?= =?UTF-8?q?=E8=AF=95=E6=B5=AE=E7=AA=97=E4=B8=8E=E8=B0=83=E8=AF=95=E5=8F=98?= =?UTF-8?q?=E4=BD=93=E4=B8=A4=E5=A4=84=E6=94=B9=E5=8F=91=E5=B8=83=E6=80=81?= =?UTF-8?q?=E6=81=92=E9=9A=90=EF=BC=8B415=20=E5=8E=86=E5=8F=B2=E7=95=99?= =?UTF-8?q?=E7=97=95=E5=8A=A0=E5=8F=A3=E5=BE=84=E6=8C=87=E5=BC=95=E3=80=81?= =?UTF-8?q?=E7=94=9F=E6=B6=AF=20=E8=B0=83=E8=AF=95=E6=B5=AE=E7=AA=97?= =?UTF-8?q?=E4=B8=A4=E8=A1=8C=E6=8D=A2=E4=BB=A3=E3=80=81test-conventions?= =?UTF-8?q?=20=E8=B0=83=E8=AF=95=E6=B3=A8=E5=85=A5=E4=B8=A4=E5=B1=82?= =?UTF-8?q?=E5=8A=A0=E5=8F=91=E5=B8=83=E6=80=81=E6=B3=A8=E8=AE=B0=E3=80=81?= =?UTF-8?q?code-architecture.json=20debug=20=E8=8A=82=E7=82=B9=E5=89=AF?= =?UTF-8?q?=E6=A0=87=20DS=5FDEBUG=20=E9=97=A8=E6=8E=A7=E2=86=92=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E6=80=81=E6=81=92=E9=9A=90=EF=BC=9Barchitecture.md=20?= =?UTF-8?q?=C2=A71.3=20=E4=B8=8E=20roadmap=20=E9=87=8D=E9=94=9A=E6=8C=87?= =?UTF-8?q?=E8=B7=AF=E5=8F=A5=E6=8C=89=E5=8D=A1=E2=91=A0=E9=A2=84=E6=9C=9F?= =?UTF-8?q?=E9=9B=B6=E6=94=B9=E5=8A=A8/=E9=9A=8F=E2=91=A1=E5=87=BA?= =?UTF-8?q?=E8=B4=A6=EF=BC=9B=E2=91=A4=E9=80=80=E5=BD=B9=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=8D=81=E4=BB=B6=EF=BC=9A=E5=9B=9B=E4=BB=BD=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?38=E4=BA=A7=E5=87=BA=E7=89=A9=EF=BC=88=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E6=8A=A5=E5=91=8A=C2=A7=E5=85=AB=E8=90=BD=E7=AC=94=E6=B8=85?= =?UTF-8?q?=E5=8D=95=E5=B7=B2=E9=80=90=E6=9D=A1=E5=87=BA=E8=B4=A6=E3=80=81?= =?UTF-8?q?=E5=AE=A1=E8=AE=A1=E6=8A=A5=E5=91=8A=E4=B8=A4=E9=A1=B9=E9=98=BB?= =?UTF-8?q?=E6=96=AD=E5=9D=87=E6=9C=89=E5=A4=84=E7=BD=AE=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E3=80=81=E4=BB=A3=E6=8B=8D=E6=9D=BF21=E6=9D=A1=E7=BB=8F?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=BF=BD=E8=AE=A4=E3=80=81=E5=8F=8D=E5=93=BA?= =?UTF-8?q?=E7=82=B91-16=E5=B7=B2=E8=90=BD=E6=96=87=EF=BC=89=EF=BC=8B?= =?UTF-8?q?=E5=85=AD=E5=BC=A0=E5=B7=B2=E5=AE=8C=E6=88=90=E9=9C=80=E6=B1=82?= =?UTF-8?q?=E5=8D=A1=E7=89=87=EF=BC=88levelmap=EF=BC=8F=E6=95=88=E6=9E=9C?= =?UTF-8?q?=E6=96=87=E6=A1=88=EF=BC=8F=E6=98=8E=E7=BB=86=E6=94=B6=E6=95=9B?= =?UTF-8?q?=EF=BC=8F=E5=A5=96=E5=8A=B1=E8=8A=82=E7=82=B9=EF=BC=8F=E7=BB=93?= =?UTF-8?q?=E7=AE=97=E8=A1=8C=E7=BC=93=E5=86=B2=EF=BC=8F=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E5=85=A5=E5=8F=A3=EF=BC=89=EF=BC=9B=E5=8D=A1=E2=91=A1=20?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E5=B0=8F=E4=BB=B6=E5=AE=9A=E7=82=B9=E4=BF=AE?= =?UTF-8?q?=E5=8D=A1=E4=B8=8E=E5=85=B6=20WIP=20=E7=95=99=E5=AD=98=E9=9A=8F?= =?UTF-8?q?=E6=B3=A27=20=E9=87=8D=E8=A3=81=E4=BF=9D=E7=95=99=E5=9C=A8?= =?UTF-8?q?=E5=86=8C=EF=BC=8C=E5=8D=A1=E5=86=85=E5=AF=B9=E5=B7=B2=E5=88=A0?= =?UTF-8?q?=20levelmap=20=E5=8D=A1=E7=9A=84=E9=93=BE=E6=8E=A5=E6=94=B9?= =?UTF-8?q?=E6=8C=87=20git=20=E6=8F=90=E4=BA=A4=20b85b3b45/8ea7cfba?= =?UTF-8?q?=EF=BC=9Bpipeline=5Fgate=20=E7=BB=BF=EF=BC=8851=E6=9D=A1?= =?UTF-8?q?=E7=9B=AE/39=E8=A1=8C/2=E9=93=BE=EF=BC=89=E3=80=81gdd=5Flint=20?= =?UTF-8?q?=E7=BB=BF=E3=80=81=E6=96=87=E6=A1=A3=E5=9F=9F=E9=97=B8=E7=BB=BF?= =?UTF-8?q?=EF=BC=8807=20doc=5Flink=20=E5=9F=BA=E7=BA=BF=E7=BA=A2=E8=BD=AC?= =?UTF-8?q?=E7=BB=BF=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../architecture/code-architecture.json | 2 +- design/engineering/test-conventions.md | 2 +- design/gdd/02-系统清单.md | 2 +- design/gdd/08-Alpha版本标准.md | 4 +- design/gdd/systems/战斗循环/战斗结算.md | 4 +- design/gdd/systems/跨局循环/生涯.md | 4 +- design/gdd/ux/battle.md | 8 +- reports/iter38-代拍板-2026-10-26.md | 42 ---- reports/iter38-反哺点-2026-10-26.md | 44 ---- reports/iter38-实现报告-2026-10-26.md | 131 ------------ reports/iter38-验收审计-2026-10-26.md | 120 ----------- ...¡片-levelmap装配越界与BFS缓存批-2026-10-26.md | 171 --------------- ...求卡片-奖励节点过时表述清扫批-2026-10-25.md | 168 --------------- ...�¡片-效果引擎校验文案计数修正批-2026-10-25.md | 153 -------------- ...œ€求卡片-明细行扩展总型收敛批-2026-10-25.md | 193 ----------------- .../需求卡片-结构小件定点修批-2026-10-26.md | 2 +- ...求卡片-结算行缓冲类型错修复批-2026-10-26.md | 143 ------------- ...œ€求卡片-调试入口写死行删除批-2026-10-25.md | 194 ------------------ roadmap.md | 7 +- 体验验证清单.md | 14 ++ 待办清单.md | 63 +----- 21 files changed, 37 insertions(+), 1434 deletions(-) delete mode 100644 reports/iter38-代拍板-2026-10-26.md delete mode 100644 reports/iter38-反哺点-2026-10-26.md delete mode 100644 reports/iter38-实现报告-2026-10-26.md delete mode 100644 reports/iter38-验收审计-2026-10-26.md delete mode 100644 reports/需求卡片-levelmap装配越界与BFS缓存批-2026-10-26.md delete mode 100644 reports/需求卡片-奖励节点过时表述清扫批-2026-10-25.md delete mode 100644 reports/需求卡片-效果引擎校验文案计数修正批-2026-10-25.md delete mode 100644 reports/需求卡片-明细行扩展总型收敛批-2026-10-25.md delete mode 100644 reports/需求卡片-结算行缓冲类型错修复批-2026-10-26.md delete mode 100644 reports/需求卡片-调试入口写死行删除批-2026-10-25.md diff --git a/design/engineering/architecture/code-architecture.json b/design/engineering/architecture/code-architecture.json index a5ca29ce..b993bb2d 100644 --- a/design/engineering/architecture/code-architecture.json +++ b/design/engineering/architecture/code-architecture.json @@ -224,7 +224,7 @@ "id": "debug", "type": "frontend", "label": "调试浮窗", - "sublabel": "DS_DEBUG 门控", + "sublabel": "发布态恒隐", "pos": [ 968, 420 diff --git a/design/engineering/test-conventions.md b/design/engineering/test-conventions.md index dbc955f7..d8a3f8c3 100644 --- a/design/engineering/test-conventions.md +++ b/design/engineering/test-conventions.md @@ -46,7 +46,7 @@ | 重放 | 同种子断点回放、改前改后配对 | | 状态/计数器断言 | 条件解锁、限次、充能——置数据→走路径→断计数值 | -4. **调试注入两层(能力测试与流程体验两分法的落码面)**:自动化测试=测试代码直调核心层写口构造状态(直改数据表行/计数器/存档域,不经 UI、不走正常资源积累流程——冒烟现役做法);人工体验=DebugOverlay/DS_DEBUG 调试面,服务用户目检。清单条目的「怎么测」必须写到数据面粒度:改哪张表哪行、置哪个计数、调哪个核心写口。 +4. **调试注入两层(能力测试与流程体验两分法的落码面)**:自动化测试=测试代码直调核心层写口构造状态(直改数据表行/计数器/存档域,不经 UI、不走正常资源积累流程——冒烟现役做法);人工体验=DebugOverlay/DS_DEBUG 调试面,服务用户目检(发布态该面恒隐、无 UI 开启口——写死行已随迭代 38 卡⑦ 删除,开发期临时启用=本地改 `_debug_entry` 缺省、不提交;能力测试不经 UI,本条口径不受影响)。清单条目的「怎么测」必须写到数据面粒度:改哪张表哪行、置哪个计数、调哪个核心写口。 5. **换代批旧验证约束同生死**:删除旧数据行/旧实现代码的批次,必须同批摘除只验证旧实现的断言与护栏校验,由新断言替代——旧件断言残留=冒烟假绿来源;合并后冒烟全绿且全仓无旧件残留引用为证。 ## 6. 判定三硬闸——闸承载的构造义务(迭代 29 起) diff --git a/design/gdd/02-系统清单.md b/design/gdd/02-系统清单.md index 8efa743f..01a69a23 100644 --- a/design/gdd/02-系统清单.md +++ b/design/gdd/02-系统清单.md @@ -15,7 +15,7 @@ | `术语表.md` | 全库专用术语的唯一对照表——危险格/安全格/同调位/RAP/GP/真视等定义+退役词对照(2026-10-11 建立,v1.23) | | `待办清单.md`(仓库根,不属本树) | 全项目待办事项的唯一登记处;各系统文档的「待办」节只留指路存根 | | `体验验证清单.md`(仓库根,不属本树) | 需要真人试玩观测的验证项登记处(与待办清单分工:待办清单是"要拍板的事",本篇是"要玩过才知道的事");每条注明结论回流路径 | -| `08-Alpha版本标准.md` | Alpha 版本包含哪些东西的清单——里程碑 M3 的完成标准;只列条目不写内容,定义一律指路各权威文档(**已定稿 v1.16**,2026-10-13) | +| `08-Alpha版本标准.md` | Alpha 版本包含哪些东西的清单——里程碑 M3 的完成标准;只列条目不写内容,定义一律指路各权威文档(**已定稿 v1.17**,2026-10-13) | ## systems/ 五个循环 diff --git a/design/gdd/08-Alpha版本标准.md b/design/gdd/08-Alpha版本标准.md index 8d23a863..7efc96ff 100644 --- a/design/gdd/08-Alpha版本标准.md +++ b/design/gdd/08-Alpha版本标准.md @@ -2,7 +2,7 @@ > **一句话定位**:本文定义这个项目的 **Alpha 版本包含哪些东西**——它是里程碑 M3 的完成标准,也是判断"还差什么"的对照表。 > **本文只列条目,不写内容**:每样东西是什么、规则怎么走,一律归各自的权威文档,本文只给指路链接。想知道某样东西的定义,请点链接,不要在本文里找解释。 -> **状态**:**已定稿(v1.16)**——2026-10-13 用户令定稿,历次升版明细见 git 提交史。Alpha 的内容范围自此冻结:增删条目一律须经用户裁决。 +> **状态**:**已定稿(v1.17)**——2026-10-13 用户令定稿,历次升版明细见 git 提交史。Alpha 的内容范围自此冻结:增删条目一律须经用户裁决。 > **成文**:2026-10-13。 ## 本文怎么用 @@ -110,7 +110,7 @@ Alpha 内以玩法循环本身的内容与表现为主(棋盘、关卡、战 | 战斗屏 | [battle](ux/battle.md) | 在役 | | 战斗结算总结框 | [settlement-summary](ux/settlement-summary.md) | 在役 | | 关卡结算屏 | [level-clear](ux/level-clear.md) | 在役 | -| 三选一(奖励节点 / 关卡完成) | [node-reward](ux/node-reward.md) | 部分在役(在役半=关卡完成三选一;未结半=奖励节点现为零兑付直通占位,登记面=待办清单「奖励节点三选一实装」条) | +| 三选一(奖励节点 / 关卡完成) | [node-reward](ux/node-reward.md) | 在役(两渠道均三选一停点:关卡完成与奖励节点各停一次,奖励节点经 present_node_curio 拉起兑付) | | 商店 | [shop](ux/shop.md) | 在役 | | 状态面板(局内) | [元进度](systems/跨局循环/元进度.md)(「解锁界面:双入口框架」节) | 在役 | | 冒险终局面板 | —— | 在役 | diff --git a/design/gdd/systems/战斗循环/战斗结算.md b/design/gdd/systems/战斗循环/战斗结算.md index 5bd13b8e..e3323d31 100644 --- a/design/gdd/systems/战斗循环/战斗结算.md +++ b/design/gdd/systems/战斗循环/战斗结算.md @@ -1,7 +1,7 @@ # 战斗结算 > 一句话:轮末结算的编排与逐行兑现 -> 状态:已定稿(自旧体系迁移);现行为 v1.0 +> 状态:已定稿(自旧体系迁移);现行为 v1.1 ## 设计目的 @@ -100,7 +100,7 @@ 基础 9 类写的是裸机制的账:玩家没有任何专长时,结算流水的每一行都出得了这九类。有了专长之后,效果引擎会在段内挂点插入额外的结算效果,这类效果写**扩展行**。扩展行是**一个**行型,不是每种专长效果各占一个行型——具体插的是哪种效果,由行携带的效果身份(effect_id 载荷)说明,呈现层按身份取各自的行文案。专长会不断增加、效果种类不可穷举,行型词表因此对扩展类封口:新增专长效果只新增载荷身份,不再新增行型。 -扩展行与基础行共用同一套行协议:公共字段、来源归因、两层豁免、无来源即炸,全部照常生效。发射时点由段序骨架的挂点决定(时序与挂点施加面归架构文档「模块归属·战斗域装配现状」节),本节只管这行是什么、带什么字段。现行实现的扩展行型值以专长实名串承载,效果身份清单与发射点以实现侧 `battle_orchestrator.gd` 文件头注为准;收敛为单一扩展行型+效果载荷的条目在 [待办清单](../../../../待办清单.md) 在册。 +扩展行与基础行共用同一套行协议:公共字段、来源归因、两层豁免、无来源即炸,全部照常生效。发射时点由段序骨架的挂点决定(时序与挂点施加面归架构文档「模块归属·战斗域装配现状」节),本节只管这行是什么、带什么字段。实现已收敛为单一扩展行型(`extended`)+效果身份载荷(`effect_id`);效果身份清单与发射点以实现侧 `battle_orchestrator.gd` 文件头注为准。 举证:本节为行协议约定,无计算。 diff --git a/design/gdd/systems/跨局循环/生涯.md b/design/gdd/systems/跨局循环/生涯.md index 8d29ac83..b0b9b478 100644 --- a/design/gdd/systems/跨局循环/生涯.md +++ b/design/gdd/systems/跨局循环/生涯.md @@ -15,8 +15,8 @@ ├─ 设置 └─ 退出游戏 -调试浮窗(迭代 18 卡⑦ P2 甲——入口迁宿主:开始层零调试入口;DS_DEBUG=1 会话浮窗启动即开, - 战斗屏 HUD 与关卡地图屏各一枚「调试」角标可再开) +调试浮窗(发布态恒隐:`_debug_entry` 写死行已随迭代 38 卡⑦ 删除,开始层与战斗屏/关卡地图屏均零调试入口与角标; + 开发期临时启用=本地改 `_debug_entry` 缺省、不提交) 营地(存档内,进档/新档落点) └─ 生涯(局外只读面;入口=营地笔记本,迭代 34 卡④承载) diff --git a/design/gdd/ux/battle.md b/design/gdd/ux/battle.md index 336af162..93188e08 100644 --- a/design/gdd/ux/battle.md +++ b/design/gdd/ux/battle.md @@ -2,7 +2,7 @@ > **Status**: Complete — /ux-review 修订落稿(2026-09-12,blocking 7 项已修,待复检) > **Author**: user + ux-designer -> **Last Updated**: 2026-10-15(简明技术中文用语规范批:词面修正 30 处) +> **Last Updated**: 2026-10-26(迭代 38 卡⑦ 调试入口发布态恒隐:DS_DEBUG 门控表述换代——见元素表「调试浮窗」行与「调试变体」行) > **Platform Target**: PC (Steam)——Keyboard/Mouse 主(全部操作纯鼠标可完成)、Gamepad Partial 非 MVP、Touch None(同 technical-preferences) > **上游修订依赖**: 弃图刷新挖掘期受理已随布局决策 4 落稿上游(2026-09-12:行动经济 Active 受理 + 每轮上限 2 次、排雷玩法 Active·仅刷新路径装板、战斗结算 `refresh_board` 编排 + 恒 same_board、registry `rap_rules` 同步——见 OQ11) > **Template**: UX Spec @@ -171,7 +171,7 @@ | D | toast 槽 | 非模态提示 | 拒绝原因(双源)、voided、满层溢出、chord 提示、零合法板告知 | 自动消退 2.5s | 新建 | | D | 图例按钮 + 面板 | 按钮+模态 overlay | 格态/变异语义图例 | 开/关 | 新建 | | 全屏 | 胜利/失败 overlay | 模态 | 金蜡封/暮蓝收印 + 判定行(明细回看入口已随 P-C7 退役——回看归「生涯」) | 继续/下一节点 | battle_end_overlay.gd | -| 调试 | 调试浮窗 | 调试面板 | 种子/数值调整/批量模拟/两层调试入口(DS_DEBUG=1 门控;TunePanel 已随迭代 15 卡①吸收退役) | 调试 | debug_overlay.gd | +| 调试 | 调试浮窗 | 调试面板 | 种子/数值调整/批量模拟/两层调试入口(发布态恒隐,无 UI 开启口——写死行已随迭代 38 卡⑦ 删除,DS_DEBUG 门控口径见「调试变体」行;TunePanel 已随迭代 15 卡①吸收退役) | 调试 | debug_overlay.gd | **布局决策 2 —(已删除,编号留空)**:原「窗口形态 = 右栏原位激活」决策随可选类道具整体下线(2026-09-15 格面资源批)。编号留空,免布局决策 3/4 的既有交叉引用失锚。 @@ -241,7 +241,7 @@ | **失败终局** | verdict=lose(hero hp=0,战斗段短路) | 明度不变的暮蓝 #5A6C8C 氛围 overlay(全作唯一暮蓝档);小人坐砖掸灰、落下的封印印记逐枚化光点收回(§2.5);判定行 +「返回」(明细回看已随 P-C7 退役——回看归「生涯」);状态图标行全清可见反馈(增益状态×4④,同胜利) | | **Boss 遭遇变体** | encounter=boss(遗迹守卫) | 战斗开始一次性演出:紫赤 #8F2F6A 影子爬过棋盘(§2.6);敌人立绘体量最大+锐角剪影;阶段指示附 Boss 名 | | **空态:无状态效果** | 增益状态 EC12 | 状态小图标行隐藏(B 区主角站桩血条下图标行零图标时不占位;落底排〔2026-10-06 方案二〕后该行退化为名字行——主角无名字行则整行空置);原「C 区状态槽隐藏、HP/攻击/RAP 上移补位」裁决随 C 区槽退役(2026-09-26 信息归属拍板)作废;图例面板载空态说明(增益状态×① 成文项) | -| **调试变体** | 测试模式 | 调试浮窗入口(DS_DEBUG=1 门控——TunePanel 已随迭代 15 卡①退役);Playtest 诊断按钮(卡死转储) | +| **调试变体** | 测试模式 | 调试浮窗入口发布态恒隐(`_debug_entry` 写死行已删,无 UI 开启口;开发期临时启用=本地改该字段缺省、不提交——TunePanel 已随迭代 15 卡①退役);Playtest 诊断按钮(卡死转储) | **拒绝/作废子态**(排雷玩法×6⑥、行动经济双源——每次拒绝玩家可感知): - 棋盘面拒绝(sub_reason:非相邻/挖封印格等)→ 目标格 危险红 #A8321F 边框闪 + toast 文案(拒绝语义红族——旗朱已退役归封印色〔现行封印黑〕)(图标+文案冗余,色弱清单 #7) @@ -412,7 +412,7 @@ 6. **明细带挖掘期是否常驻上轮摘要**:常驻(现方案)vs 结算后即收起——playtest 观测回看频率 7. **Gamepad 导航序**:Partial 支持(非 MVP 门禁)——焦点环顺序待 gamepad 批次定 8. **NodeOverlay / 关卡结算屏——已完成(2026-09-27 欠账处置拍板;节点奖励屏部分被 2026-09-29 迭代 7 取代)**:关卡结算屏 spec 已建 [level-clear.md](level-clear.md)(本 spec 只锁出口锚点不变);节点奖励屏 spec 已出生 [node-reward.md](node-reward.md) v1.0(原「不立独立 spec、随秘宝内容重定批交付」拍板随之取代;NodeOverlay 现行:恢复点全量服务、奖励点=三选一构筑点) -9. **TunePanel 退役计划——已完成(迭代 15 卡①,2026-10-05)**:TunePanel 类整体吸收退役入调试浮窗 DebugOverlay(DS_DEBUG=1 门控);正式侧归元进度(天赋树)不变 +9. **TunePanel 退役计划——已完成(迭代 15 卡①,2026-10-05)**:TunePanel 类整体吸收退役入调试浮窗 DebugOverlay(DS_DEBUG=1 门控);正式侧归元进度(天赋树)不变(门控表述属当期留痕——调试入口现发布态恒隐,现行口径见元素表「调试浮窗」行与「调试变体」行) 10. **提示文案定稿**:chord 提示/空态文案归实现期文案 pass,本 spec 只锁必含要点与形态约束 11. **弃图刷新上游修订(已落稿 2026-09-12,布局决策 4)**:行动经济(Active 相位受理 + 每轮上限 2 次 + Waiting 代理退役 + 旧旗作废裁决 + 时间税失效预警)、排雷玩法(Active·仅刷新路径装板受理)、战斗结算(stopped/ap_exhausted 恒 same_board + `refresh_board` 挖掘期刷新编排;AC-29 改写/AC-30 恒 same_board)、registry `rap_rules` 同步、旧版 systems-index 修订块登记。遗留观察项:当场刷新的节奏健康由行动经济 OQ3 弃图率/刷新率预警承载,playtest 复核 12. **教学引导缺口挂靠(成文时教学引导 GDD 尚未建,留痕)**:挖到雷 = 敌方优势而非死亡(排雷玩法登记「经典扫雷玩家最大预期违背」)、旗挡链(连锁止于旗属正常)、首次蓄力姿态一次性提示(敌人系统)——本屏 toast 体系为落点候选,随教学引导批次定 diff --git a/reports/iter38-代拍板-2026-10-26.md b/reports/iter38-代拍板-2026-10-26.md deleted file mode 100644 index de336bee..00000000 --- a/reports/iter38-代拍板-2026-10-26.md +++ /dev/null @@ -1,42 +0,0 @@ -# 迭代 38 代拍板追认单(2026-10-26) - -> 各卡 §10 代拍板白名单内裁定的执行记录——授权发生在卡片审问阶段(白名单即预授权面),本单为批后备案确认;超白名单裁定零(如有会已停机呈报)。 - -## 卡①(levelmap 批) - -1. payload 键名与 apply_status 形态:九键定值 level_label/gp_text/hp_text/hp_bar_redraw/attr_text/bonus_text/bonus_row_visible(hp_bar_redraw 恒 true——原逻辑无条件 queue_redraw 保真);视图方法名 apply_status。 -2. 缓存命中读数实现形态:is_same 同实例判别(重算必产新字典、命中返回缓存原实例)——零生产计数器;换代失效判别改「新图查询非旧缓存实例+坐标不等」(原案「旧图回查」不可行:换代后 _content_size 已随 open_choices 重拟合,旧图混查属生产外用法——L2 行号漂移同级的实现事实修正,随卡记录)。 -3. wr 断言挂点与消息文本:level_map_info_fog_test 新增 _test_layout_cache 段,尾缀〔levelmap批 V1/V2〕。 -4. 提交切分与分支:单 worktree iter38、逐卡一笔提交。 - -## 卡③(效果文案批) - -5. b2 头注表述:「词表实数以 EFFECT_KINDS 常量为准」;历史笔误叙事句按禁写变更记录红线保留。 -6. 断言挂点与消息:effect_words_t1_test ③ 段后追加 ③-b,断言 message 含 str(FACTS.size()) 且不含「9 项」,尾缀〔效果文案批 V1〕。 - -## 卡④(明细收敛批) - -7. 扩展行型串值:`extended`(推荐案);effect_id 取值:四效果沿用原行型串(推荐案)。 -8. a3 来源类别:`fx_warning_beacon`(推荐案,对齐 fx_seal_smith 先例)。 -9. a5 裸键呈现差异处置:申报差异(推荐案)——示警烟火行带 fx_warning_beacon 裸键,随目检清单覆盖。 -10. 断言形态补充(L1/L2 白名单内两笔):①封印匠夹具改三枚不同雷格各封一次——_judge_seal 每格去重(_seal_consumed 以格实例为键),同格三封只计一次;②JSONL 对拍字段口径并入 source(playtest_logger.gd:133 对 source_class 的同值改名副本,随行平铺非本批新增)+剔除 session/diagnosis 墙钟行(parity_anchor 既有口径)。 -11. 改前基线取证流程:改前 parity check 在 stash 干净态跑批(第一次跑批被并行改码污染、作废重取);T2 撤销证明按对照表三条全数实测(原案「任选其一」从全执行)。 - -## 卡⑤(奖励节点清扫批) - -12. d1/d2/d3 措辞:「三选一停点」现状语义族;d3 定值「关卡奖励点(三选一——选毕推进)」。 -13. wr2 断言:探针战报文本含新串/不含「内容待定」,挂 _tested_curio_head 捕获块(同一驱动路径承载)。 -14. d4 必达形态:定向选路(候选含奖励节点优先)+捕获条件随修挂 `_node_curio_pending`(病根=原条件查通关停点态 `_curio_pending` 与奖励头部互斥恒不可命中——「拦截能力未证」实况病根,头部校验串零触碰;属白名单第 3 条「必达形态的具体实现」内)。 -15. 中途故障两笔(异常分级处置留痕):①首轮探针 35 分钟无输出=wr2 断言行 `var logtext :=` 类型推断失败(Variant 返回)→ 解析错误探针未加载进程空转——显式 `: String` 修复(L1);②插桩诊断一轮(DBG 候选类型打印)取证后移除。 - -## 卡⑥(结算行缓冲批) - -16. wr1-b 观测点落位:战中场(round≥2 且排播队列空)一次性判据——循环出口断言被收尾续玩重建段 log_view.clear() 合法冲掉(实测发现;卡面「T0 定落点」授权内)。 -17. 错误行判据按实际标记执行:`Attempted to push_back … TypedArray`(卡面引述「SCRIPT ERROR 行」,实测该错误走 ERROR 通道非 SCRIPT ERROR——同一证据对象,判据更精确非放宽)。 - -## 卡⑦(调试入口批) - -18. c2/c7 措辞:发布态恒隐语义族;c7 含「开发期临时启用改 `_debug_entry` 缺省本地不提交」运行者指引。 -19. c5 直调落点:else 分支首行 `main._show_debug_overlay()`,后续断言原序保持;「置灰子断言」随恒隐语义退役(§8.2 申报随实现报告)。 -20. c8 基线处置:显式重制(推荐案),改后 0.15% → 复闸 0.00%。 -21. c6 清单同步范围:本批新增单测断言(卡①③④)随清单 --force 重生成一并同步(1588 条对账零差异)——清单维护锚「断言新增必须同步清单」的全量履行,超出卡面 c6 单行范围属对账工具全量口径(extract --diff 对全部新断言报新增,只改判一行无法过对账)。 diff --git a/reports/iter38-反哺点-2026-10-26.md b/reports/iter38-反哺点-2026-10-26.md deleted file mode 100644 index 3aa3b3d7..00000000 --- a/reports/iter38-反哺点-2026-10-26.md +++ /dev/null @@ -1,44 +0,0 @@ -# 迭代 38 反哺点清单(2026-10-26) - -> 各卡 §6 关联文档同步面汇总——实现批禁写 `design/` 与根规则文件,以下逐条待用户裁决后由文档批落文。裁决方式:逐条「落文/不落/改写」。 - -## 来自卡①(levelmap 批) - -1. **`待办清单.md`**——「结构审查未立项小件候审」条目拆注核对:件②归本卡(已收口 b85b3b45)、其余五件归卡②(**已停卡**,状态待回退,见实现报告 §三)。属状态核对注记。 -2. **`design/engineering/architecture/architecture.md` §1.3**——「唯一越界者」清偿后该条纪律实况注记。**预期零改动**(纪律文本不变,T0 已核):l1 落地后视图内核心态拼装清零,纪律由「要求」变为「已达成」,无需改文;如文档批认为值得在纪律条目加「2026-10-26 清偿」凭据注,措辞自定。 - -## 来自卡③(效果文案批) - -3. **`待办清单.md`**——「效果引擎校验文案计数错误」来源条目状态推进(已收口 a15370c5,完成即删)。 - -## 来自卡④(明细收敛批) - -4. **`design/gdd/systems/战斗循环/战斗结算.md`「扩展行」节**——过渡句改写。原句:「现行实现的扩展行型值以专长实名串承载,效果身份清单与发射点以实现侧 `battle_orchestrator.gd` 文件头注为准;收敛为单一扩展行型+效果载荷的条目在待办清单在册」。落地后「实名串承载」半句与「条目在册」句均过时——建议改写为:「实现已收敛为单一扩展行型(type=extended)+effect_id 载荷;效果身份清单与发射点以实现侧 `battle_orchestrator.gd` 文件头注为准」(头注指引句保留,实现侧头注已换代两层词表+四效果身份发射点指引)。 -5. **`roadmap.md`「当前位·下一步」句**——「结算明细日志行序重锚(2026-10-21 授权发起、时点另定)」指路句:重锚已随卡④裁点甲执行完毕(parity 锚换代+复闸绿),该句改写为已出账口径或摘除。 -6. **`待办清单.md`**——「明细行扩展总型收敛批」来源条目状态推进(完成即删);「结算明细日志行序重锚批」条目同批出账(裁点甲已执行)。 - -## 来自卡⑤(奖励节点清扫批) - -7. **`design/gdd/08-Alpha版本标准.md:113`**——「未结半=奖励节点现为零兑付直通占位,登记面=待办清单『奖励节点三选一实装』条」:注销后登记面死指+现状句与实现相悖——随注销改写(三选一已实装:奖励节点=三选一停点,呈现归 present_node_curio)。 -8. **`roadmap.md`「当前位·下一步」待编池**——「奖励节点三选一实装(2026-10-25 新登记)」短句摘除(注销承接收口,卡⑤已落地)。 -9. **`待办清单.md`**——「奖励节点过时表述清扫批」来源条目状态推进(完成即删)。 - -## 来自卡⑥(结算行缓冲批) - -10. **`待办清单.md`**——「闸与探针存量噪声两件」条目拆注与状态推进:件①(产品码类型错)已收口 ce49a8ee;**件②(闸壳 per-suite 挂死与进程树回收,tools/probe_gate.sh+run_all.gd)留工程直改通道未实施**——条目不应整条删除,拆注保留件②。 - -## 来自卡⑦(调试入口批) - -11. **`design/gdd/ux/battle.md:159/229`**——调试浮窗入口/DS_DEBUG 门控表述:删行后「入口在座」类陈述落空(含 2026-10-16 恒开批存量失真一并显形)——换代为发布态恒隐口径(角标恒隐、浮窗无 UI 开启口;开发期临时启用改 `_debug_entry` 缺省本地不提交)。 -12. **`design/gdd/systems/跨局循环/生涯.md:18`**——调试入口描述随删行失真(T0 未逐句核,落文时按现行文本定位具体句),同口径换代。 -13. **`design/engineering/test-conventions.md:49`**——「调试注入两层」节调试入口表述(DS_DEBUG/DebugOverlay 人工体验面):入口恒隐后该节「人工体验」通道描述需加发布态注记(调试注入两层的能力测试面不受影响——自动化测试不经 UI 直调核心写口,口径不变)。 -14. **`design/engineering/architecture/code-architecture.json:227`**——「DS_DEBUG 门控」节点副标:写死行已删、发布态恒隐,副标换代。 -15. **`待办清单.md`**——「调试入口写死行必须在发布前删除」来源条目状态推进(完成即删)。 - -## 来自卡②(停卡——随呈报非反哺) - -16. 卡②待办条目状态回退与缺口补记拟稿见实现报告 §三(属呈报移交件,落笔归写卡段/用户,不属文档批反哺落文)。 - -## 本批收口新发现(2026-10-26 合并后核对) - -17. **根目录 `体验验证清单.md` 不存在**(AGENTS.md 项目布局节与 iter/batch-closure 技能均引用它作「需真人试玩验证项」唯一登记处——文件从未有提交历史,历代批目检项实际只活在当批实现报告、随报告退役消失)。本批六项目检项登记在实现报告 §五,同样面临随批退役丢失。裁决点(二选一,归用户):①重建该清单并由文档批把本批六项+机制说明落进去,此后目检项有跨批追踪;②裁该机制退役、AGENTS.md 与相关技能的死指引用清扫(目检项维持「当批实现报告登记即了结」现状)。落文通道=文档批。 diff --git a/reports/iter38-实现报告-2026-10-26.md b/reports/iter38-实现报告-2026-10-26.md deleted file mode 100644 index 64904179..00000000 --- a/reports/iter38-实现报告-2026-10-26.md +++ /dev/null @@ -1,131 +0,0 @@ -# 迭代 38 实现报告(2026-10-26) - -- 分支:`iter38`(worktree `D:\code\g-plan2-iter38`);基点 b23fa50d(编排提交),收口合并点 416ca84a(并入 master 2465a73b)。 -- 编入七卡,实际收口六卡;卡②(结构小件定点修批)施工中途停卡呈报退上游(§卡②),改动已还原、零提交。 -- 全量域闸:`tools/run_all_gates.sh --code` 批末一次(回执见 `game/tests/.gates/receipt.json`,结论见 §闸)。 - -## 一、各卡状态 - -| 卡 | 状态 | 收口提交 | 核心读数 | -|---|---|---|---| -| ① levelmap 装配越界与 BFS 缓存 | 已收口 | b85b3b45 | wr1 对拍 changed=0.00%;wr2 缓存命中/换代双绿 | -| ② 结构小件定点修(p1–p6) | **停卡呈报退上游** | (无提交) | wr5/wr6 验收载体与闸机错误扫描结构性互斥(§卡②) | -| ③ 效果引擎校验文案计数修正 | 已收口 | a15370c5 | wr1 断言绿;撤销红绿复现 | -| ④ 明细行扩展总型收敛 | 已收口 | d5a03db1 | 五断言+负面套件绿;重锚复闸三变体全同;JSONL 对拍 PASS | -| ⑤ 奖励节点过时表述清扫 | 已收口 | 00ed0236 | wr1 grep 零命中;wa4 必达真执行;撤销两条红绿复现 | -| ⑥ 结算行缓冲类型错修复 | 已收口 | ce49a8ee | 错误行 148→0;摘要恢复断言绿;撤销红绿复现 | -| ⑦ 调试入口写死行删除 | 已收口 | 5b5214f4 | 三断言反转绿;清单对账零差异;基线重制复闸 0.00% | - -## 二、实际对照表(改动—验收,逐卡精要) - -尾缀 grep 通道:〔levelmap批 V1/V2〕〔效果文案批 V1〕〔明细收敛 V2〕〔卡⑤〕〔卡⑥ wr1-b〕按各断言消息文本 grep 可互查。 - -### 卡① -| 需求点 | 改动 | 验收测试 | 层级 | 真实入口 | 撤销证明 | 结果 | -|---|---|---|---|---|---|---| -| wr1 呈现零变化 | l1 迁装+l2 缓存+l3 字体(level_map_screen.gd+main_adventure_flow.gd) | golden 对拍 changed=0.00%(level_map.png 改前基线)+shot_probe 问题=0 | 渲染+探针 | shot_probe 真实窗口跑批 | 等价重构申报(对拍差异非零即红) | 绿 | -| wr2 缓存生效与失效 | l2 缓存层 | 〔levelmap批 V1〕命中(is_same 同实例)+〔levelmap批 V2〕换代失效 | 单元 | level_map_info_fog_test 经 open_choices+layout_probe 真实路径 | 回退缓存 hunk → V1/V2 红(实测) | 绿 | - -- l4 基线建立:改前 shot_probe level 帧落盘 `game/tests/golden/level_map.png`(跨跑次一致性 0.00% 实测在案);时点铁序遵守(基线先于一切码改)。 -- T0 契约 3 论据链核验:`_fit_canvas`(open_choices :276)先于四调用点首触缓存——成立;`nodes()` 返回 level_row 内部数组,同关内内容稳定。 -- 喂入通道:生产调用点恰两处(main_adventure_flow :122/:173),两处后接 `apply_status(level_map_status_payload(...))`;shot_probe GP 徽章断言经真实生产路径兼容验证。 - -### 卡③ -| 需求点 | 改动 | 验收测试 | 层级 | 真实入口 | 撤销证明 | 结果 | -|---|---|---|---|---|---|---| -| wr1 文案与实数对齐 | effect_engine.gd :360 动态实数+:21-23 头注 | 〔效果文案批 V1〕message 含 FACTS.size() 且无「9 项」 | 单元 | validate_trigger_row static(与加载期同函数) | 回退 b1 hunk → 断言红(实测)→ 还原复绿 | 绿 | - -- T0 复核:FACTS 19 项/EFFECT_KINDS 32 项(脚本计数在案);全文件 errs.append 10 处仅 :360 含计数——无同类残留。 - -### 卡④ -| 需求点 | 改动 | 验收测试 | 层级 | 真实入口 | 撤销证明 | 结果 | -|---|---|---|---|---|---|---| -| wr1 行型收敛 | 六发射点 type→extended+effect_id 载荷 | 断言①–⑤+grep 判据+JSONL 读数对拍 | 单元+接口 | feats 装配驱动真实结算管线 | 回退被断言钉住的发射点 → 对应断言红(实测①) | 绿 | -| wr2 必载 effect_id | _emit_row 校验段(emit 之前) | 负面套件 extended_row_violation_test(expect=1, negative)+manifest 登记行 | 单元(负面套件) | _emit_row 真实直调(独立进程) | 回退校验段 → 违约行照发 exit 2(实测②) | 绿 | -| wr3 空来源修复 | grant :281 source_class→fx_warning_beacon | 断言⑤含 source_class==fx_warning_beacon | 单元 | warning_beacon 装配+封印命中 | 回退 a3 → wr3 红(实测③) | 绿 | -| wr4 parity 重锚(裁点甲) | anchor.json 重制 | 改前 check 绿基线+改后 freeze+复闸全同 | 集成 | parity_anchor 三变体真实跑批 | 重锚前后读数留档(§读数) | 绿 | - -- JSONL 读数对拍(wr1 附属):改前/改后各 6 文件(71000/72000/73000×normal/perfect)逐行比对——type 迁移 fx_reveal→extended 77+120+67=264、fx_preview_area→extended 136+168=304、insurance_used/mine_neutralized 0→0,与 T0 基线计数逐一对账;**字段口径外零差异**(口径=type/effect_id/source_class/source 四字段+剔除 session/diagnosis 墙钟行——source 为 playtest_logger.gd:133 对 source_class 的同值改名副本,随行平铺;ts 属墙钟已按锚口径剔除)。 -- a5 核验结论(零改动依据):battle_log_view `_format_row` 对四实名串本无 match 分支(全落 :210 fallback 按 display_name 呈现)、AGG_TYPES=["reward_ineffective"] 不含扩展行——收敛后扩展串同样落 fallback,a1 面呈现输出逐字节不变。**a3 面呈现差异如实申报**:示警烟火行从无来源标注变为带 `fx_warning_beacon` 裸键渲染(与 mine_neutralized 行 `fx_seal_smith` 裸键先例一致,来源归因可见性归位;§10 白名单第 4 条推荐案已执行)。 -- 改动面封闭核验:基础 9 类发射零触碰;SOURCE_EXEMPT_TYPES/CLASSES 逐字不动(fx_reveal 豁免按来源类别层继续生效);随机流九名零触碰;grep 判据=六发射点第一参全 extended+A8① 行型值类残留零命中(②–⑦保留类各现位抽查在案)。 - -### 卡⑤ -| 需求点 | 改动 | 验收测试 | 层级 | 真实入口 | 撤销证明 | 结果 | -|---|---|---|---|---|---|---| -| wr1 注释清扫 | level_runner :477-478/:10+autoplay :484 | grep 两串(零兑付直通/内容待定+内容未定)零命中 | 静态 | grep 真实跑批 | 恢复原句 → 命中即红 | 绿 | -| wr2 玩家文案换代 | battle_narrator :15 | 探针战报断言(含新串/不含旧串)〔卡⑤〕 | 探针 | 奖励节点真实战报路径 | 回退 d3 → wr2 单红(实测) | 绿 | -| wr3 wa4 转正 | ui_click_probe 捕获条件+必达判据+定向选路 | 直跑绿+真执行+未到停点即红 | 探针 | 三选一停点真实路径(press_candidate/press_card 真实按钮) | 回退 d4 条件 → wa4 必达红(实测) | 绿 | - -- **wa4 转正病根修正(d4 实现形态,§10 白名单第 3 条)**:原捕获条件查 `_curio_pending`(通关三选一停点态)而奖励节点停点住 `_node_curio_pending`——两态互斥使原条件带「关卡奖励点」头部串恒不可命中,即「拦截能力未证」的实况病根;转正随修挂正确停点态,头部校验串本体零触碰。定向选路=候选含奖励节点优先(press_candidate 真实命中路径零变化)。 -- wa4 真执行证据:直跑日志 `_tested_curio_head` 捕获成功、问题=0(/tmp/iter38_click6→c7_click 各跑次一致)。 -- extract_checks 提取面核查:探针断言不进清单(工具扫 tests/unit|integration|system_test)——无清单同步义务。 - -### 卡⑥ -| 需求点 | 改动 | 验收测试 | 层级 | 真实入口 | 撤销证明 | 结果 | -|---|---|---|---|---|---|---| -| wr1-a 错误行消失 | battle_log_view :17 类型一行 | 探针日志该 push_back 错误行归零(改前 148 处基线) | 探针+日志 | ui_click_probe 真实冒险路径 | 回退 g1 → 148 错误行复现(实测) | 绿 | -| wr1-b 摘要恢复 | 同上 | 正向断言(round≥2 且队列空时 _summary 非空)〔卡⑥ wr1-b〕 | 探针 | finish_settlement_round 真实轮界 | 回退 g1 → 断言红(实测同跑次) | 绿 | - -- wr1-b 观测点落位说明(L1 白名单内):挂主循环战中场(round≥2 且排播队列已空=轮首分隔行已消费),不挂循环出口——收尾续玩重建段会再走 `log_view.clear()`,出口断言会被合法清空冲掉(实测发现并修正)。 -- 错误行形态实证:`ERROR: Attempted to push_back a variable of type 'String' into a TypedArray of type 'Dictionary'`(非 SCRIPT ERROR——与 G2「断言仍绿」及闸机扫描不误报自洽;卡面引述的「SCRIPT ERROR 行」按实际标记执行,判据对象同一直接证据)。 - -### 卡⑦ -| 需求点 | 改动 | 验收测试 | 层级 | 真实入口 | 撤销证明 | 结果 | -|---|---|---|---|---|---|---| -| wr1 发布态恒隐 | main.gd :199 删除+三断言反转+c6/c8 随动 | system_test V2f+click 设置面+tune 对局段+清单对账+新基线 | 系统+探针+渲染 | 三宿主真实跑批 | 恢复 :199 单行 → 三断言齐红(实测) | 绿 | -| wr2 对局中开窗回归保载 | c5 直调承载 | 浮窗可见/输入锁不锁/六项读数断言保持绿 | 探针 | _show_debug_overlay 真实单口直调 | 回退=c5 整段回原形(契约 4 口径) | 绿 | - -- 契约 1 核验:`grep -c _debug_entry main.gd` 恰 2(:73 声明/:200 读取)。 -- c8 基线重制(§10 落定值=显式重制):改后实测 changed=0.15%(幽灵角标消失,≈卡面预估 0.14%)→ 重制后复闸 0.00%;README 判定记录登记在案。 -- 清单对账:`extract_checks.py --diff` 零差异(本批新增断言随清单重生成,1588 条——含卡①③④新增单测断言的全量同步)。 - -## 三、卡②停卡呈报(实现段零裁断——上游缺陷移交) - -**停卡时点**:T1 实装中(p1–p6 六件全部实装完成、wr4 断言载体核查时发现结构性冲突)。改动已还原(WIP 补丁留存 /tmp/iter38_card2_wip.patch,172 行),零提交、不阻塞其余卡。 - -**缺陷**:wr5/wr6 验收载体与闸机错误扫描结构性互斥。卡片处方(§7 接口块)=在现役**非负面**单测套件内直调 `board_generator._fatal()`/`open_stream("bogus_purpose")` 触发 assert 取证断言;但 headless 实测(探针脚本在案):GDScript assert 失败必产 `SCRIPT ERROR` 行且**不可捕获、只中断当前函数**——run_all.gd:133-136 对非负面套件输出含该标记即判 FAIL。即:断言跑到的同跑次闸 02 必红,「wr5/wr6 绿+全套闸全绿」不可同时成立。此与卡④ grilling 第二轮发现的同款机制缺陷完全同型(卡④因此立了独立负面小套件),卡②两轮复核均未捕获。 - -**两种读法**:①按卡面处方实装 → wr5/wr6「绿」但全套闸红(完成定义第 1 条自相矛盾);②改载体为独立负面小套件 → 卡面「零新增文件、wr5 落 round_flow_skill_pool_test 增断言」等节全部失准,属卡片设计变更非实现细节。 - -**建议案**:退回写卡段,比照卡④先例改处方——wr5/wr6 断言落独立负面小套件(各一或合并一件,manifest `expect=1, negative=true`),撤销证明口径同步改「退出码 0 ≠ expect 1」;文件结构图「零新增文件」句、估时(+0.1d 量级)、§8.1 对照表落点随更。另:卡② §9 L3 已点名的 master_seed<0 分支同病根第二处(:104-106 assert 后无 return)仍在册待用户裁另立或并批——若并批,建议与 wr6 同套件承载(同文件同族负路径)。 - -**待办清单对应条目状态回退拟稿**:「结构审查未立项小件候审」条目状态「已写卡+已编迭代 38」→ 回退「已写卡(v1.2,退回补验收载体处方)」;缺口补记=wr5/wr6 载体改负面小套件+master_seed 分支处置待裁。落笔归写卡段/用户(本批禁写根规则文件)。 - -## 四、闸与读数 - -- 全量域闸:`tools/run_all_gates.sh --code` 批末一次(416ca84a 时点,exit=1 未全绿);其后闸红必修一笔(0cd86469 S11 四处禁用词换代——并 master 文档批「通关口径统一」63763565 退役词新增所致)+W2 尾缀笔误随暂停收尾修正。**分支尖闸面现状(未闭合,用户 2026-10-26 裁「暂停收口」)**:09 静态扫描 S13 gdstyle 恶化 2 条——`battle_orchestrator.gd` max-file-length 1314(基线 1302,卡④ a4 头注必载内容所致)、`level_map_screen.gd` max-class-variables 22(基线 21,卡①契约 3 缓存成员所致);压缩还债经计算不可行(极限 1305 > 1302 且削减卡片要求内容),闸壳「经用户批准随批重生成基线」通道待用户后续裁决。其余闸段(00/01/02/03/04/05/10)全绿;S11/S12 修复后单件复跑 ok 在案。 -- MC 对拍:卡④触结算行协议面(零数值改动)——按裁点甲以 parity_anchor 三变体对拍承载:改前 check 全同(stash 干净跑批实测)→ 改后 freeze 立新锚 → 复闸 RUNSUM+JSONL 双面逐位一致;**审计独立复跑三变体对拍一致**(审计报告在案)。锚已随卡④提交换代。 -- 卡④ T0/T2 读数:改前行型计数 fx_reveal 264/fx_preview_area 304/insurance_used 0/mine_neutralized 0;改后迁移计数逐一相抵;基线 JSONL 留存 /tmp/iter38_pre_jsonl(临时区,对拍读数已录本报告)。 - -## 五、实机目检总清单(登记不阻塞) - -1. 选路屏状态栏/悬停高亮(卡①——l1 重构后目检一项)。 -2. 选档删除确认流(卡②——未实施,随停卡不登记)。 -3. 奖励节点战报行新文案「关卡奖励点(三选一——选毕推进)」(卡⑤)。 -4. 结算明细带轮摘要显示(卡⑥——「上轮摘要」恢复后的观感)。 -5. 结算明细屏四效果行目检+示警烟火行来源标注(卡④——扩展行 fallback 呈现与裸键标注)。 -6. 菜单/设置面/对局中调试角标恒隐(卡⑦三项)。 - -## 六、遗留读数义务与在飞注记 - -- 卡②WIP 补丁:/tmp/iter38_card2_wip.patch(临时区——若写卡段改卡后重启施工,以此为底稿重做而非直接复用,行号须按合并后 master 复核)。 -- 卡④ a3 面呈现差异(示警烟火行 `fx_warning_beacon` 裸键)随 §五.5 目检覆盖;settlement.tres source_label_map 补键属 §10 备选未裁不实装。 -- parity 锚换代完成:「结算明细日志行序重锚批」待办条目出账依据随卡④提交在案(文档批落文见反哺点清单②)。 - -## 七、独立验收审计结论 - -审计报告:`reports/iter38-验收审计-2026-10-26.md`——结论**不通过**(合并前置未满足,与用户「暂停收口」裁决一致)。六卡实质面全部核实通过(逐卡对照表、撤销证明抽查、削弱核查零未申报、卡④ parity 重锚审计独立复跑一致);两项阻断均为闸面/账面而非码面:①S13 恶化 2 条(=§四已披露的事项,后经用户 2026-10-26 特批「不管恶化、免测试重跑」带红合并,已记闸况基线存量红);②验证集清单提交态失同步(合并解冲突时 git add 先于清单重生成——提交版为 master 侧旧 1591 条,正确的 1596 条重生成版滞留工作区;暂停收尾已补提交,`extract_checks --diff` PASS 在案)。轻微两项(W2 尾缀笔误、产出物未跟踪)已随暂停收尾修正/提交。 - -## 八、待办清单与账面落笔清单(🔴 批后收尾/文档批照单执行——逐条需落进 `待办清单.md` 或配套账面) - -本批全部未结事项与账面换代的落笔执行单。合并前实现批禁写根规则文件,以下各条在实现报告/反哺点清单中挂账,批后收尾(batch-closure)时逐条出账,禁漏: - -| # | 事项 | 落笔动作 | 落笔归属 | 依据 | -|---|---|---|---|---| -| 1 | 卡②停卡退上游 | 「结构审查未立项小件候审」条目:件②(levelmap,已随卡①完成)出账;五件状态回退(「已写卡+已编迭代 38」→「已写卡·退回补验收载体处方」)+缺口补记(wr5/wr6 载体改独立负面小套件;master_seed<0 分支同病根第二处另立或并批待裁) | 写卡段/用户 | 本报告 §三+反哺点 16 | -| 2 | 六卡来源条目状态推进(完成即删) | 卡③「效果引擎校验文案计数错误」、卡④「明细行扩展总型收敛批」、卡⑤「奖励节点过时表述清扫批」、卡⑦「调试入口写死行必须在发布前删除」四条 → 删除 | 批后收尾 | 反哺点 3/6/9/15 | -| 3 | 「结算明细日志行序重锚批」条目出账 | 卡④裁点甲已执行(锚换代+复闸绿)→ 条目删除 | 批后收尾 | 反哺点 6 | -| 4 | 「闸与探针存量噪声两件」条目拆注 | 件①(产品码类型错,已随卡⑥收口)出账;**件②(闸壳 per-suite 挂死与进程树回收,tools/probe_gate.sh+run_all.gd)保留**——工程直改通道未实施,条目不得整条删除 | 批后收尾 | 反哺点 10 | -| 5 | roadmap 迭代 38 行换代 | 状态→「已完成(2026-10-26·六卡;卡②停卡退上游待重立)」+实现报告列填 `reports/iter38-实现报告-2026-10-26.md`;顶部「当前位」三行换代(迭代 38 已合入 8ea7cfba;S13 恶化 2 条经用户特批记基线存量红挂账;迭代 39 三卡待开工不变) | 批后收尾/文档批 | 本报告 §一/§四 | -| 6 | 目检六项持久登记 | 待反哺点 17 裁决(重建 `体验验证清单.md` 并落文/机制退役清死指)后登记本报告 §五六项 | 文档批 | 本报告 §五+反哺点 17 | -| 7 | 反哺点 17 裁决本身 | 「体验验证清单.md 不存在」实况与两选一处置(重建落文/退役清 AGENTS.md 与两技能死指)需用户裁决后由文档批执行 | 用户→文档批 | 反哺点 17 | diff --git a/reports/iter38-验收审计-2026-10-26.md b/reports/iter38-验收审计-2026-10-26.md deleted file mode 100644 index ddc10006..00000000 --- a/reports/iter38-验收审计-2026-10-26.md +++ /dev/null @@ -1,120 +0,0 @@ -# 迭代 38 独立验收审计报告(2026-10-26) - -- 审计人:独立验收审计会话(未参与实现);审计基点=iter38 分支尖 `0cd86469`(worktree `D:\code\g-plan2-iter38`,全程只读+最窄复跑,零文件改动——卡③卡①撤销复现的临时改动均当场 `git checkout --` 还原)。 -- 审计对象:卡①③④⑤⑥⑦ 六卡收口提交链(b85b3b45→a15370c5→00ed0236→ce49a8ee→d5a03db1→5b5214f4→416ca84a 并 master→0cd86469 S11 闸红必修);卡②停卡零提交不在范围(停卡留痕 /tmp/iter38_card2_wip.patch 10215 字节在案,worktree 工作区无残码)。 -- 输入合同:七张需求卡片 §8.1/§8.2/§8.3+实现报告 §二 对照表+代拍板追认单 21 条。 - -## 结论行 - -**不通过——六卡代码面、断言面、撤销证明、削弱申报全部核实通过,卡④ parity 重锚经审计独立复跑逐位一致;但分支尖存在两项闸面未闭合:①09 静态扫描仍红(gdstyle 两条指标恶化未还债未随批重生成基线,批末闸回执 all_green=false 且实现报告未披露);②合并把验证集清单退回 master 旧版(本批新增断言在提交版清单零命中),正确的再生成件躺在 worktree 未提交。两件清偿+闸复跑绿回执后方可合并。** - -## 一、逐卡逐行核对表(实现报告 §二 vs 实码) - -### 卡① levelmap 批(b85b3b45) - -| 报告行 | 核对项 | 结果 | 依据 | -|---|---|---|---| -| wr1 | golden 基线+对拍 0.00% | 通过(读数采信,复跑受限) | level_map.png 与码改同提交(git log --diff-filter=A 唯一 b85b3b45);golden/README 登记行在案(改前建基、跨跑次 0.00% 后落盘);审计窗口化 shot_probe 复跑在本环境 180 秒挂起无输出(exit 124,引擎 OpenGL 启动后停滞——环境性问题非码问题),像素级未独立复跑;收口时点闸 05 渲染闸绿(shot_probe 七屏 A-D 断言)佐证渲染面健康 | -| wr2 | 〔levelmap批 V1/V2〕 | 通过 | level_map_info_fog_test.gd:209/:224 两断言在位;经 open_choices+layout_probe(视图 :524 既有件、ui_input_probe 同款)真实绘制路径;缓存层在 `_layout` 内、四调用点零改动(diff 核实) | -| l1 装配迁移 | 喂入通道 | 通过 | main_adventure_flow :122-123/:174-175 两生产调用点均 open_choices 后接 apply_status(level_map_status_payload(...));payload 七键与代拍板 #1 一致;视图侧拼装 grep 残留仅 :204 注释/:207 血条绘制读 max_hp(绘制面非拼文案)/:278 tint 层号——清零判据成立 | -| l3 字体提取 | 函数首单取 | 通过 | :429 `var font := get_theme_default_font()`,三处 draw_string 共享(diff 核实) | - -### 卡③ 效果文案批(a15370c5) - -| 报告行 | 核对项 | 结果 | 依据 | -|---|---|---|---| -| wr1 | 〔效果文案批 V1〕 | 通过 | effect_words_t1_test.gd:48-51 断言在位:message 含 str(FACTS.size()) 且不含「9 项」;validate_trigger_row static 与加载期同函数(卡面处方,非绕过) | -| b1/b2 | 动态实数+头注治理 | 通过 | effect_engine.gd:360 `%d 項 % FACTS.size()`;:21-23 头注去写死计数,历史笔误句按代拍板 #5 保留;errs.append 全文件仅 :360 含计数(grep 复核);FACTS 19/EFFECT_KINDS 32 脚本计数复核一致 | -| 改动面封闭 | 契约 1 | 通过 | 提交 diff 恰两文件共 6 行(+4/-2),零越界 | - -### 卡④ 明细收敛批(d5a03db1) - -| 报告行 | 核对项 | 结果 | 依据 | -|---|---|---|---| -| wr1 行型收敛 | 六发射点 | 通过 | orchestrator :156/:164/:169+grant_segment :271/:281/:309 第一参全 `extended`,display_name/value/highlight 逐字不动(diff 逐行核);grep 判据=四实名串作第一参零残留 | -| wr2 必载 effect_id | a2 校验段 | 通过 | _emit_row 体内 `step_row.emit` 之前(先于 _assert_row_source),缺载 assert+return 零发射;负面套件 extended_row_violation_test 直调 _emit_row 为卡面 §7 明文处方,非绕过 | -| wr2-np | 负面套件+manifest | 通过 | 套件在位(违约直调→零发射→合法对照行照发→quit(1));run_all.gd:73 登记 `expect=1, negative=true`;审计直跑实测 exit=1、输出「违约零发射+合法照发(a2 校验在位)」 | -| wr2 断言①–⑤ | 两现役套件 | 通过 | round_flow :1012/:1046/:1063(feats 装配驱动真实 step_row 信号捕获+_judge_seal/_flush_pending_reveals 真实管线)+treasure :333/:355(套件首次 feats 注入,V6 形态移植;三枚不同雷格各封一次=代拍板 #10①);其中两条用 Kit.check_quiet——不进验证集清单提取面(工具只提 `check(`),清单算术 1591+5=1596 与此吻合 | -| wr3 空来源 | a3 修复 | 通过 | grant :281 `""`→`fx_warning_beacon`;断言⑤含 source_class 判据 | -| wr4 parity 重锚 | 锚换代+复闸 | 通过(审计独立复跑) | anchor.json 在 d5a03db1 换代:恰 3/6 条 sha256 变更(三变体 perfect 面)、rows 字段零变化——与读数「迁移集中于部分文件、RUNSUM 数值面零变化」自洽;审计复跑 `python tools/parity_anchor.py check` exit=0,三变体 RUNSUM+JSONL 双面逐位一致,实算 JSONL 哈希(962b6f68…/06cb4dcc…/c3d0d37c…)与新锚逐位相同 | -| JSONL 读数对拍 | 264/304/0/0 | 自洽(原始件未独立复算) | 对拍原始 JSONL 留存 /tmp/iter38_pre_jsonl 临时区不可复取;锚 diff 形态(3/6 哈希变、行数零变)与读数口径一致;T0 计数随报告留档 | -| a5 呈现核验 | battle_log_view 零改动 | 通过 | d5a03db1 未触该文件 | -| 改动面封闭 | 契约 1/3 | 通过 | SOURCE_EXEMPT_TYPES/CLASSES 两常量在 diff 中仅作上下文出现、现值逐字未动;`open_stream("fx_reveal")` 等随机流零触碰;基础 9 类发射点零触碰(全 diff 仅六发射点+校验段+头注) | - -### 卡⑤ 奖励节点清扫批(00ed0236) - -| 报告行 | 核对项 | 结果 | 依据 | -|---|---|---|---| -| wr1 | 两串 grep 零命中 | 通过(复跑) | 审计复跑两条 grep 命令均零输出;E2 豁免面未被顺手改:autoplay :220/:381 行为性准确表述保留、ui_click_probe :697「卡片前提缺陷记录」历史注记保留 | -| wr2 | 战报文案断言〔卡⑤ wr2〕 | 通过(审读替代复现) | ui_click_probe :428-432:log_view 含「关卡奖励点(三选一——选毕推进)」且不含「内容待定」;battle_narrator :15 新文案在位;断言挂奖励节点停点捕获块,同一驱动路径 | -| wr3 wa4 转正 | 必达判据〔卡⑤〕+定向选路 | 通过(审读替代复现) | 捕获条件 `_curio_pending`→`_node_curio_pending`(病根修正,头部校验串本体零触碰);:725-728 全程未到停点即红;定向选路只改 press_candidate 索引策略、真实按钮命中路径零变化;press_card/press_confirm 真实按钮路径。撤销证明按审计指令以代码审读替代(探针复现 >10 分钟);报告声明回退 d3→wr2 单红、回退 d4→必达红两条实测在案 | - -### 卡⑥ 结算行缓冲批(ce49a8ee) - -| 报告行 | 核对项 | 结果 | 依据 | -|---|---|---|---| -| wr1-a | 错误行 148→0 | 通过(审读替代复现) | 改动恰 :17 一行 Array[Dictionary]→Array[String];148 基线读数与归零不可廉价复跑(探针全程约分钟级×改前改后),按审计指令以代码审读替代:错误机理(TypedArray 异型 push_back)与修复一行因果闭合 | -| wr1-b | 〔卡⑥ wr1-b〕断言 | 通过(审读替代复现) | ui_click_probe :31/:560-566:观测点在主循环战中场(round≥2 且 _row_queue 空=轮首分隔行已消费),一次性判据,非循环出口——与代拍板 #16 落位说明一致;判定读 `_summary.text` 非空 | -| 无断言删除 | 削弱面 | 通过 | 提交 diff 零断言删除,探针仅 +9/-2(新增状态位+断言块) | - -### 卡⑦ 调试入口批(5b5214f4) - -| 报告行 | 核对项 | 结果 | 依据 | -|---|---|---|---| -| wr1 发布态恒隐 | 删行+三断言反转 | 通过 | main.gd :199 写死行已删(diff 核实,:73/:200 保留);grep -c `_debug_entry` main.gd 恰 2(审计实测);system_test V2f、click :324-327、tune :117-118 三处反转形态在位 | -| wr2 直调承载 | c5 | 通过 | tune else 分支 `main._show_debug_overlay()` 直调(:61 先例),后续浮窗可见/输入锁/六项读数断言原序保持;:44-49 程序性段零触碰(diff 核实) | -| 撤销证明 | 恢复 :199 三断言齐红 | 通过(审读替代复现) | 三处反向断言判据直接钉 `_debug_entry` 恒 false 语义,恢复写死行必红——机制审读成立;报告声明实测在案。置灰子断言删除有代拍板 #19 记录 | -| c6/c7/c8 随动 | 清单/README/基线 | 通过(c6 见问题②例外) | game/README 发布态表述换代;menu_boot.png 重制(Bin 变更)+golden/README 判定记录在案;c6 于 5b5214f4 时点对账零差异属实(提交版基点 d5a03db1/1588),合并后回归见问题清单② | - -## 二、撤销证明抽查记录 - -| 卡 | 方式 | 命令与输出摘要 | -|---|---|---| -| ③ | 复现红/绿实测 | 绿基线:`--script res://tests/unit/core/effect_words_t1_test.gd`→`all green (18 checks)`。改红:sed :360 `FACTS.size()`→`9`→`FAIL — fact 出域文案含词表实数 19、无写死计数〔效果文案批 V1〕`。还原 `git checkout --`→复绿 `all green (18 checks)` | -| ① | 复现红/绿实测 | 改红::505 缓存命中条件前置 `if false and ...`→`[FAIL] 〔levelmap批 V1〕`+`[FAIL] 〔levelmap批 V2〕` 双红。还原→复绿:`[PASS] V1`+`[PASS] V2`,`all green (21 checks)` | -| ④ | 直跑实测 | `--script res://tests/unit/battle_settlement/extended_row_violation_test.gd`→exit=1、`[extended_row_violation_test] 违约零发射+合法照发(a2 校验在位)`;manifest 登记行 run_all.gd:73 在位 | -| ⑤ | 代码审读替代(探针复现 >10 分钟) | wr2 断言与 wa4 必达判据代码在位(:428-432/:725-728),判据钉死新文案与停点态,机制上回退即红;报告两条实测记录在案 | -| ⑥ | 代码审读替代(探针复现代价高,按审计指令) | wr1-b 断言在位、观测点落位与代拍板 #16 一致;一行类型修复因果闭合 | -| ⑦ | 代码审读替代(探针复现代价高) | 三处反向断言判据直接依赖「无写死行」前提,恢复 :199 必红;报告实测记录在案 | - -## 三、测试削弱核查(七卡 §8.2+代拍板单 vs 实际 diff) - -逐提交核对 b23fa50d→0cd86469 区间(含合并带入的 master 通关换代批——该批有独立审计 57447386 在案,不计本批): - -1. **卡④**:SOURCE_EXEMPT_TYPES/CLASSES 两常量零变化(diff 中仅上下文行)——申报吻合。基础 9 类行型发射零触碰:全区间 `_emit_row` 第一参改动恰六发射点+校验段,六点外无第一参改动(grep+diff 双核)。 -2. **卡⑦**:三处断言反转=换代非削弱,申报在卡面 §8.2;置灰子断言删除有代拍板 #19 记录;ui_click_probe 设置面原「浮层不被遮挡」语义退役有卡面 §8.2 申报。既有断言零删除(三处全原位反转)。 -3. **卡⑤**:wa4 条件转必达=判定面增强;头部校验串、autoplay 直通行为、:220/:381 豁免表述、:697 历史注记全部原样(审计逐处复核)。 -4. **卡⑥**:零断言删除。**卡③/卡①**:既有断言零改动(effect_words +4/-0、level_map_info_fog +36/-0 纯增)。 -5. **验证集清单**:断言改判(V2f 行 74)与新增同步在 5b5214f4 履行(1588 条对账零差异,卡内申报一致);合并回归单独列问题②。 - -**削弱核查结论:零未申报削弱。** - -## 四、附加核对结果 - -1. **合并 416ca84a 代码面零触碰——成立(比指令口径更严的核法)**:区间 diff `5b5214f4..416ca84a` 含 master 侧通关换代批的全部码改(该批为 master 上已审计的独立批次,非合并引入);合并解的真实触碰面用 `git diff-tree --cc` 定位=7 文件(6 码件+README),6 个码件逐一以 patch-id 对比「合并结果 vs master 侧」恰等于「iter38 侧自身改动」——全部 MECHANICAL(机械合成),即合并解对手只落在 README.md 与验证集清单.md 两文档(与提交声明一致;清单侧取 master 整版引发问题②)。 -2. **卡① golden 时序**:level_map.png 新增提交=b85b3b45=码改同一笔。git 历史无法证明提交内「先建基线后改码」时序——**该限制如实注明**,采信依据=golden/README 登记记载(「改前建基——时点铁序,跨跑次 0.00% 实测后落盘」)与卡面 T1 前置步处方。 -3. **卡④ parity 锚**:d5a03db1 恰 3/6 哈希换代+rows 零变化,与 264/304/0/0 读数自洽;审计独立复跑 check 全同(见对照表 wr4 行)。 -4. **卡⑦**:`grep -c "_debug_entry" main.gd`=2(实测)。 -5. **卡⑤清单义务豁免**:探针不在 extract_checks 提取面(工具扫 tests/unit|integration|system_test)——「无清单同步义务」申述属实。 -6. **闸回执**:`game/tests/.gates/receipt.json` commit=416ca84a(15:38:28)、domain=code、**all_green=false**——09 静态扫描 exit=1;其后 0cd86469(16:00:28)只修 S11 四处,**无修复后的复跑回执**。审计复跑静态扫描:S11 已转绿(238 文件 23 词零命中),S13 仍红(详见问题①)。 - -## 五、问题清单 - -**阻断(合回前必须清偿)** - -1. **09 静态扫描在分支尖仍红——gdstyle 两条指标恶化未处置,实现报告未披露**。审计复跑实测:`battle_orchestrator.gd|quality/max-file-length = 1314(基线登记 1302)`(卡④ 校验段+头注加行所致)、`level_map_screen.gd|quality/max-class-variables = 22(基线登记 21)`(卡① _layout_cache 所致);master 侧分别为 1301/21,恶化归属本批无疑。批末闸回执(416ca84a)即因 S11+此两条判红,0cd86469 只修了 S11;七笔提交零触碰 tools/gdstyle_baseline.txt。按闸机口径须还债或经用户批准随批重生成基线,二者均未发生;完成定义「全套闸全绿」未满足,报告 §一「已收口」与 §四未提闸红,属呈报缺漏。 -2. **验证集清单在提交态与码失同步**。合并 416ca84a 对清单冲突取 master 侧整版(基点 54395b8b/1591 条):本批新增断言(levelmap批 V1/V2、效果文案批 V1、明细收敛 V2×3、卡⑥ wr1-b)在 HEAD 提交版清单 **零命中**,V2f 行 74 回退旧 cond「boot 可见」与已反转的码面断言相抵。正确再生成件(1596 条、含两侧断言、`extract_checks --diff` PASS)已存在于 worktree 但**未提交**。c6「清单没跟上视同未完成」在提交态不成立。清偿=提交该再生成件(算术复核 1591+5=1596,check_quiet 与探针不在提取面,无遗漏)。 - -**轻微(不阻断,随批或批后顺手)** - -3. level_map_info_fog_test.gd:195 段头注释尾缀误写〔levelmap批 W2〕——断言本体 V1/V2 正确,grep 通道不受影响,纯注释笔误。 -4. 三份产出物(实现报告/代拍板/反哺点)在主区与 worktree 均为未跟踪态,随批后收尾提交即可(现状与「实现批产出物只写 reports/」不冲突,登记在案防遗漏)。 - -**限制声明(采信依据已注明,非缺陷)** - -5. 卡① wr1 像素级对拍(changed=0.00%)与卡⑥ 148→0 基线读数未独立复跑:前者窗口化 shot_probe 在审计环境挂起(gate 05 渲染闸收口时点绿佐证),后者按审计指令以代码审读替代;两者均有实现报告读数与机制闭合支撑。 -6. 卡④ JSONL 原始对拍件留 /tmp 临时区不可复取,读数采信以锚 diff 形态+check 复跑佐证。 - -## 六、审计操作性记录 - -撤销复现的临时改动(effect_engine.gd :360、level_map_screen.gd :505)均以 `git checkout -- ` 当场还原,还原后工作区与审计起点一致(仅存审计前的验证集清单未提交再生成件与未跟踪产出物,零新增改动);worktree 主区未触碰。parity check 复跑约 13 分钟(base 288s/attune 286s/shop 234s),exit 0。 diff --git a/reports/需求卡片-levelmap装配越界与BFS缓存批-2026-10-26.md b/reports/需求卡片-levelmap装配越界与BFS缓存批-2026-10-26.md deleted file mode 100644 index 3dde9833..00000000 --- a/reports/需求卡片-levelmap装配越界与BFS缓存批-2026-10-26.md +++ /dev/null @@ -1,171 +0,0 @@ -# 需求卡片:levelmap 装配越界与 BFS 缓存批(视图直读拼文案迁装配+布局重算缓存+绘制字体提取) - -- 版本:**v1.2**(v1.0→一轮「回炉」→v1.1 定案→二轮闭合复检「通过(附一应修)」:契约 3 论据补严→v1.2 定稿,复核记录见 §12) -- 来源:[待办清单](../待办清单.md)「结构审查未立项小件候审」条目之件②(2026-10-25 登记)——**2026-10-26 用户裁「全六件立项」**;本卡收件②独立成卡(结构改动量与审查单元独立)(唯一事实源:工程证据指认=审计报告 §三 其余小件第二条+本卡 §3 行号级实查+grilling 补查〔布局调用链与基线清单〕) -- 归属:`game/presentation/views/level_map_screen.gd`(三段)+ `game/presentation/main_adventure_flow.gd`(l1 拼装迁入——新装配函数)+ `game/tests/golden/`(level 屏基线新增一张+基线表登记) -- 排期:未编入(迭代批卡片;估时 ≈0.75–1 工作日) -- 开工门:U0+复核门过(§12);零待裁点 - -## 0. 前置依赖与并行性 - -- **第〇步核对(2026-10-26 写卡会话)**:来源条目=需求性工程条目(审计行号证据),用户点名立项——放行。 -- 与五小件卡(同条目拆分)同迭代分波:**同触 `main_adventure_flow.gd` 不同函数**(其 p2 confirm 段 :88 vs 本卡 l1 新装配函数)——无冲突;其余文件零交叠。 -- 与 2026-10-25 两批卡零交叠。 -- 呈现输出零变化是硬约束(l1–l3 是结构与性能面重构——**改前建 level 屏 golden 基线、改后对拍**承载,§7 T1 前置步)。 - -## 1. 目标与完成定义 - -**目标**:level_map_screen 三段审计指认落地——l1 视图直读 LevelRunner 拼展示文案迁装配层(架构 §1.3「读核心状态→拼展示文案应集中装配器」唯一越界者清偿);l2 布局 BFS 全量重算缓存(hover/绘制/命中路径不再逐次重算);l3 绘制路径重复取主题字体提取。呈现输出逐像素不变(基线对拍锚)。 - -**改动单元清单**(🔴 契约 1): - -| # | 单元(实查·定案) | 改法 | 依据 | -|---|---|---|---| -| l1 | `_refresh_status`(:326-353)视图直读拼文案——`_runner.level_row/gp/effective_max_hp/hero_hp/run_ledger.bonus/effective_atk/effective_ac` 在视图内拼九段展示文本 | 拼装逻辑迁入**组合根装配函数**:`main_adventure_flow.gd` 新增 `static func level_map_status_payload(runner) -> Dictionary`(产出九段成品:各 label/bonus 行文本+可见位布尔——键名 L1 白名单定);视图改 `func apply_status(payload: Dictionary)` 纯赋值;`_refresh_status` 现调用点(:277 视图内回调处)改为经组合根取 payload 再喂(刷新时点不变:打开本屏/兑付确认回执后);视图保留 `_runner` 引用供交互面(命中/提交)——只清「拼文案」越界 | 审计 ②「§1.3 唯一越界者」;架构分层纪律 | -| l2 | `_layout`(:520-534)全量求值=`_assign_layers`(入口 BFS 分层)+pos 构造;**四处调用点逐次全量重算**::378 `_candidate_at` 内(鼠标每次移动/命中检测)+:408 `press_candidate`+:446 绘制+:536 fit 面——审计指认的 hover 路径即 :362-387 gui_input → :378 → BFS | `_layout` 包缓存层:`var _layout_cache := {"nodes": [], "canvas_size": Vector2.ZERO, "pos": {}}`——命中条件=`nodes` **内容等价**(GDScript Array==逐元素比较——布局是 nodes+canvas 的纯函数,内容等价⇒布局必然等价)且 `canvas.size` 相等;图态换代(节点集内容变)或画布尺寸变即自然失效;四处调用点零改动(缓存收在 `_layout` 内) | 审计 ②;性能债(防扩图后成实感瓶颈);纯函数缓存正确性自证 | -| l3 | 绘制路径字体重复取::502 已是循环内局部变量(需提升到函数首)、:507/:515 两处 `get_theme_default_font()` 内联调用 | 绘制函数首取一次 `var font := get_theme_default_font()`,三处引用改局部 | 审计 ②;零语义差 | -| l4 | golden 基线无 level 屏图(现役基线仅 board_L1/L2/L3+menu_boot 四张——grilling 实查)——逐像素锚缺载体 | **T1 前置步**:改前经 shot_probe 关卡画面帧(`_snap("level")` :138)建 `game/tests/golden/level_map.png` 基线+golden/README 基线表登记(按 render_gate 既有重制口径);改后对拍 changed=0.00% | 撤销证明口径(golden 抓内容观感类);render_gate.sh 基线纪律 | - -**完成定义**: - -1. l4 基线建立在案;l1–l3 落地;呈现逐像素不变(level_map.png 对拍 changed=0.00%+level_map 现役探针绿); -2. l2 缓存生效判据过(wr2);全套闸按本批改动域选档全绿; -3. 撤销证明一条(wr2);三份产出物写齐(T2)。 - -## 2. 设计事实源 - -| # | 出处 | 取用条款 | -|---|---|---| -| D1 | 工程证据指认=审计报告 §三 其余小件第二条+本卡 §3 实查 | 三段清单 | -| D2 | [architecture](../design/engineering/architecture/architecture.md) §1.3 分层纪律(视图不拼核心态文案) | l1 依据 | -| D3 | [code-conventions](../design/engineering/code-conventions.md) §1(结构与复用) | l2/l3 依据 | -| D4 | [render_gate](../tools/render_gate.sh) 基线纪律(预期面视觉变化=显式重制基线;此处为改前建新基线) | l4 依据 | - -## 3. 现状事实(2026-10-26 写卡会话实查+grilling 补查于 master eb04313b;开工日 T0 复核行号) - -| # | 事实 | 出处 | -|---|---|---| -| L1 | `_refresh_status`(:326-353)视图直读:逐行读 `_runner.level_row/gp/effective_max_hp/hero_hp/run_ledger.bonus/effective_atk/effective_ac` 拼九段文案(atk/ac 加成角标、bonus parts、可见位判据);:277 视图内节点事件回调处自调;注释自认「命令式纪律——组合根打开本屏/兑付确认回执后重查」 | `game/presentation/views/level_map_screen.gd:277/326-353` | -| L2 | `_layout`(:520-534)=`_assign_layers`(入口 BFS 分层,:550 注释「layer=入口 BFS 深度;layout/fit 共享件」)+pos 构造——**纯函数于 (nodes, canvas)**;调用点四处::378(`_candidate_at` 内——gui_input :362-387 hover 每次移动经此)+:408(press_candidate)+:446(绘制)+:536(fit 面)——审计「每次鼠标移动全图 BFS 重算」传导链=hover→_candidate_at→_layout→_assign_layers(grilling 定案) | `game/presentation/views/level_map_screen.gd:362-387/378/408/446/520-536/550` | -| L3 | 绘制路径字体::502 循环内局部变量(作用域限单次迭代)、:507/:515 两处内联调用——三处逐节点/逐帧重复求值 | `game/presentation/views/level_map_screen.gd:502-529` | -| L4 | golden 基线现役四张=board_L1/L2/L3+menu_boot——**无 level 屏图**;shot_probe 有关卡画面帧口 `_snap("level")`(:138);level_map 探针面=screen_flow_probe(含屏切换)/现役套件 T0 定名 | `game/tests/golden/`;`game/probe/shot_probe.gd:138`;`game/probe/screen_flow_probe.gd` | - -## 4. 设计契约(红线,违反 = L3 停机呈报) - -🔴 **契约 1 · 呈现逐像素不变**:l1–l3 落地后 level 屏绘制输出与改前逐像素一致(l4 基线对拍 changed=0.00%)——文案成品、布局坐标、绘制序零变化;l4 基线必须在 l1–l3 改动**之前**建立(时点铁序)。 - -🔴 **契约 2 · 改动面封闭**:只动三段与其迁入点;交互面(命中/提交/press_candidate 探针路径)语义零变化;`_runner` 引用保留(只清拼文案越界)。 - -🔴 **契约 3 · 缓存正确性**:l2 缓存键=(nodes 内容等价, canvas.size);论据链(二轮补严):`_layout` 除 (nodes, canvas) 外另读成员 `_content_size`——其值由 `_fit_canvas`(:290-305)在 open_choices(:276)路径求值、初值 620×240 与下限 620×256 不等,故 `_content_size`=f(nodes) 的派生态——键经该派生链**间接**覆盖;T0 须核对 `_fit_canvas` 求值时点在四调用点首触缓存之前(否则首缓存可能锚在陈旧 _content_size 上——列 T0 必核项+wr2-b 换代用例检点);选路图换代必自然失效;禁另引代次计数等第二失效机制(双键漂移风险)。 - -🔴 **契约 4 · 零行为申报**:本卡无玩家可见行为改动(性能与结构面)——wr1 对拍是验收主锚。 - -🔴 **契约 5 · 禁为机检文本保留无效成员**(req-card 第 13 条,本卡属等价重构类):禁为回避基线建立/对拍而保留旧求值路径或旧拼装(l2/l1 歧路拦截);机检键与本卡契约互斥时停卡呈报。 - -## 5. 范围边界 - -**做**:l1–l4;golden 对拍+探针回归;撤销证明;产出物。 - -**不做**: -- 另五小件(独立卡); -- level_map 屏交互/视觉改版(布局算法/样式零触碰——缓存不改分层结果); -- `_candidate_at` 命中算法重写(线性扫保留——审计未点其本身); -- board 基线四张(既有——本卡不动)。 - -## 6. 关联文档同步面 - -| 文档 | 关联点 | 同步义务 | -|---|---|---| -| `待办清单.md` | 来源条目拆注(件②归本卡)+状态推进 | 反哺点 · 列清单(①:拆注核对) | -| [architecture](../design/engineering/architecture/architecture.md) §1.3 | 「唯一越界者」清偿后该条纪律实况注记(预期零改动——纪律文本不变,T0 核) | 反哺点 · 列清单(②:预期零改动注记) | - -## 7. 任务卡 - -### 卡前 · 文件结构图 - -| 文件 | 职责 | 行为改动 | -|---|---|---| -| `game/presentation/views/level_map_screen.gd` | l2 缓存+l3 字体提取+l1 视图侧纯赋值改写(复用既有·修改) | 非行为改动(呈现零变化)→ wr1 | -| `game/presentation/main_adventure_flow.gd` | l1 拼装迁入(**新增**·装配函数 `level_map_status_payload`) | 非行为改动 → wr1 | -| `game/tests/golden/level_map.png`+README 基线表 | l4 改前建基线(**新增**·基线件) | 非行为改动(基线面)→ wr1 | - -(新增件两件:装配函数与基线图——预检节答「为什么不能复用」。) - -### 接口块 - -- **l1 签名**:`main_adventure_flow.gd` `static func level_map_status_payload(runner: LevelRunner) -> Dictionary`(键:level_label/gp_text/hp_text/hp_bar_redraw/attr_text/bonus_text/bonus_row_visible——九段成品,键名 L1 白名单内定形);视图 `func apply_status(payload: Dictionary) -> void` 纯赋值;:277 调用点改经组合根喂入(组合根持视图引用的既有通道——T0 核 main.gd:83 句柄链)。 -- **l2 缓存**:`_layout` 首部命中判定(`_layout_cache.nodes == nodes and _layout_cache.canvas_size == canvas.size` → 返回缓存 pos;否则全量求值后写缓存)。注意 GDScript Array==为内容比较(迭代 37 d11 语义)——恰合纯函数键需求。 -- **l4 基线建立**:实现批内跑 shot_probe 取关卡画面帧 → `game/tests/golden/level_map.png`+golden/README 基线表登记一行(render_gate 既有口径)。 -- **wr1 对拍**:改后 render 面跑批 level_map.png changed=0.00%。 -- **wr2 判据**:同 nodes 两次 `_layout` 调用第二次命中缓存(命中读数形态:探针/单测可读的计数器或时间差——L1 白名单定形);另加「换代失效」用例(节点集内容变 → 新坐标≠缓存旧值)。 -- **最窄闸**:screen_flow_probe 直跑+golden 对拍;全套闸按本批改动域选档。 - -### 落位与可复用性预检 - -- **装配函数为什么新增**:装配面(main_adventure_flow)无现成同职责函数(grep 实查——level_map 状态拼装唯一直读点即视图内);视图拼装迁出必须有一个装配侧承接件——函数级新增、文件级零新增。 -- **基线图为什么新增**:golden 现役四张无 level 屏(L4)——逐像素锚的载体只能新建(render_gate 既有基线机制复用,仅加一张)。 -- **复用面**:分层/fit 共享件原样复用(缓存包外层);`_snap("level")` 帧口现成。 -- **唯一面**:布局求值唯一入口经缓存层;文案拼装唯一落点装配函数(视图侧 grep `_runner.level_row|effective_atk|run_ledger.bonus` 在视图内拼装语境清零——交互读除外)。 -- **分层**:视图↔装配器职责归位(§1.3);core 零触碰。 - -### T0 事实坐实(≈0.1d) - -- [ ] 复核 L1–L4(重点::277 调用点上下文与组合根喂入通道、L4 探针定名、基线建立流程核对、**契约 3 论据链核对——_fit_canvas 求值时点先于四调用点首触缓存**)。可核查结果:三段定位表+喂入通道判据+_content_size 派生链记录进实现报告素材。 - -### T1 基线建立+三段实装(≈0.5–0.65d) - -- [ ] **前置步(时点铁序)**:l4 基线建立(shot_probe level 帧 → level_map.png+基线表登记)。可核查结果:基线图在案、render 面认卡。 -- [ ] 实装 l3(字体提取)+l2(缓存层)。可核查结果:wr2 命中判据与换代失效用例双绿;对拍 0.00%。 -- [ ] 实装 l1(装配函数+视图纯赋值+喂入通道)。可核查结果:wr1 对拍 0.00%;探针绿;视图侧拼装 grep 清零。 -- [ ] 验证步骤:全套闸按域选档跑一次全绿。 - -### T2 撤销证明+产出物落位卡(≈0.15d,末卡) - -- [ ] 撤销证明一条:回退 l2 缓存 hunk(还原逐次全量)→ wr2 命中判据红(第二次求值未命中)→ 还原复绿。记录进实现报告。 -- [ ] 写齐三份产出物(实现报告〔三段核对表+对拍读数+缓存命中读数+基线建立记录+实机目检总清单——选路屏状态栏/悬停高亮目检一项(登记不阻塞)〕/代拍板追认单/反哺点清单〔§6 逐条落点〕)。 -- [ ] 合并前置:独立验收审计(§8.3)逐行「通过」。 - -**估时合计 ≈0.75–1d**。编排注记:呈现零变化锚在改前基线——**本卡必须与其后任何触 level 屏的批次排先后**(基线时序敏感);与五小件卡同波无冲突(不同函数/文件面)。 - -## 8. 验证闸 - -### 8.1 改动—验收对照表 - -| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 撤销证明 | -|---|---|---|---|---|---| -| wr1 三段重构呈现零变化 | l1 迁装+l2 缓存+l3 字体 | level_map.png 对拍 changed=0.00%〔wr1〕(l4 改前基线)+screen_flow_probe 绿 | 渲染+探针 | render 面真实跑批(level_map 图)+探针真实选路路径 | 等价重构申报:对拍差异非零即红(呈现面以基线为断言载体) | -| wr2 缓存生效与失效正确 | l2 缓存层 | 命中读数〔wr2-a〕+换代失效用例〔wr2-b〕 | 单元/探针 | `_layout` 真实调用路径(hover→_candidate_at 链) | 回退 l2 hunk → wr2-a 红(T2) | -| wr3 产出物 | T2 三份 | 件核〔wr3〕 | — | — | 缺项红 | - -### 8.2 测试削弱申报 - -零(既有断言零改动;新增 wr2 判据两条;wr1 以改前基线对拍承载——golden 逐像素属撤销证明口径的强判据层)。 - -### 8.3 独立验收审计 - -入口=未参与实现的会话或子代理;报告落 `reports/iter-验收审计-<日期>.md`;抽查重点=契约 1(基线建立时点先于改动+对拍读数在案)、契约 3(缓存键设计核对+换代失效用例)、l1 视图侧拼装 grep 清零、基线表登记在案。未过不得合并。 - -## 9. 异常分级 - -- **L1(自救)**:payload 键名;缓存实现细节;wr2 读数形态。 -- **L2(记录继续)**:行号漂移;探针定名变化。 -- **L3(停机呈报)**:对拍非零(契约 1 破——重构引入呈现差);换代后选路图陈旧(契约 3 破——缓存键失效面漏);组合根喂入通道不存在现成形态(需改装配架构——超出预判,呈报后裁);shot_probe level 帧口径与 render 面不兼容(基线建不成)。 - -## 10. 代拍板白名单(超清单必呈报) - -1. payload 键名与 apply_status 形态。 -2. 缓存命中读数实现形态。 -3. wr 断言挂点与消息文本。 -4. 提交切分与 worktree 分支命名。 - -## 11. 待裁点 - -**零待裁点,开工门=U0。** 灰色推导两处(呈报可否决,随 T2 反哺点):①`_candidate_at` 线性扫保留不重写——审计未指认为缺陷(候选 ≤4 无瓶颈),缓存解决的是全图布局重复求值;②缓存键用「内容等价」而非代次计数——布局纯函数性质使内容等价即充分条件,代次计数反引入双源漂移风险。 - -## 12. 自审六查与 grilling 复核记录 - -**自审六查(2026-10-26 写卡会话,v1.0)**:①规格覆盖;②步骤扫描;③类型一致性;④审查焦点——对拍主锚、失效键、装配面预判;⑤篇幅比例;⑥落位预检。 - -**grilling 一轮复核记录(2026-10-26,独立子代理对抗复核,判「回炉」两阻断)**:①阻断一=设计本体留白(l2 失效键「T0 定」、L2 传导链「T0 钉」、l1 迁入面「T0 定位」三项属设计核心非事实复核——违「卡片设计闭合、实现段零裁断」)——v1.1 定案:传导链=hover→_candidate_at(:378)→_layout→_assign_layers BFS+四调用点清单(L2);缓存键=(nodes 内容等价, canvas.size)(契约 3+灰色推导②);迁入面=main_adventure_flow 新函数 `level_map_status_payload`(接口块签名定案);②阻断二=wr1 主锚不存在(golden 现役四张无 level 图、「render 面既有口径」系预设)——v1.1 立 l4 单元:改前经 shot_probe `_snap("level")` 建基线+基线表登记+T1 前置步时点铁序(契约 1);③应修=缺 req-card 第 13 条——立契约 5;④建议=L3 描述不准(:502 已是循环内局部需提升、:507/:515 真内联)——订正;§0「零交叠」不可断言(迁入面未定)——改「同文件不同函数」实况。交叉项:与 10-25 卡 C 的基线时序提醒方向确认(该卡重制 menu_boot 与 level 屏无关,本卡基线自建自足)。 - -**二轮闭合复检(2026-10-26,判「通过(附一应修))**:两阻断核闭合(四调用点 :378/:408/:446/:536 实查全中、缓存键/签名定案、l4 时点铁序+golden 现役四张无 level 图实证);应修=契约 3 论据补严(`_layout` 另读 `_content_size` 成员——经 `_fit_canvas` :290-305 派生于 nodes、键间接覆盖;T0 增「_fit_canvas 求值时点先于首触缓存」必核项);复核实证=l2 返回引用安全(全文件仅 :527 写 pos、四调用点纯读)、nodes 元素 Dictionary 的 Array== 内容比较成立(原地变异亦击穿缓存——键选型正确)。 diff --git a/reports/需求卡片-奖励节点过时表述清扫批-2026-10-25.md b/reports/需求卡片-奖励节点过时表述清扫批-2026-10-25.md deleted file mode 100644 index 2ff3cae3..00000000 --- a/reports/需求卡片-奖励节点过时表述清扫批-2026-10-25.md +++ /dev/null @@ -1,168 +0,0 @@ -# 需求卡片:奖励节点过时表述清扫批(「奖励节点三选一实装」注销承接·第四微卡) - -- 版本:**v1.1**(2026-10-25 成文;内容全部迁自卡 B〔效果引擎校验文案计数修正批〕P 支——该面已经卡 B 两轮 grilling 复核,2026-10-25 用户裁点 P 乙案迁出独立成卡;独立成卡后轻量复核判「通过(附两应修)」→v1.1 折入〔battle_narrator 行号订正+wr1 判据补「内容未定」串〕,复核记录见 §12) -- 来源:[待办清单](../待办清单.md)「奖励节点过时表述清扫批」条目(2026-10-25 随注销同批登记,状态=已写卡·本卡)(唯一事实源:工程证据指认=「奖励节点三选一实装」条目 2026-10-25 用户确认注销的承接义务包〔注释修订+玩家文案修订+wa4 断言转正〕+本卡 §3 行号级实查〔迁自卡 B 并经其 grilling 独立复核订正〕) -- 归属:`game/core/level_runner.gd`(注释两处)+ `game/presentation/battle_narrator.gd`(玩家文案一行)+ `game/probe/ui_click_probe.gd`(wa4 断言转正)+ `game/sim/level_autoplay.gd`(注释理由句一行) -- 排期:未编入(迭代批卡片;估时 ≈0.5 工作日) -- 开工门:U0+复核门过(§12);**零待裁点**(承接义务成立与范围均已由注销确认与裁点 P 乙落定) - -## 0. 前置依赖与并行性 - -- **承接链**:「奖励节点三选一实装」条目(2026-10-25 用户确认注销)在册义务两笔——①「本条实装后须重跑该断言」(wa4 条件断言,test-conventions §6 口径)→ 本卡 d4 承接;②条目证据(过时注释)与其掩护的过时表述族 → 本卡 d1/d2/d3。承接包落位=2026-10-25 用户裁点 P 乙(独立微卡)——禁随注销湮灭(卡 B 第一轮 grilling 阻断二的裁决记录在案)。 -- 与卡 B(迁出源)零文件交叠后互不依赖:卡 B 只余 effect_engine 面与本卡的 ui_click_probe wa4 段无叠。 -- 与卡 C 同触 ui_click_probe 不同段(其角标段 :325-327/本卡 wa4 段 :415-425 与历史注记 :670-672 豁免)——无冲突。 -- 与卡 A 零交叠。 - -## 1. 目标与完成定义 - -**目标**:「奖励节点零兑付直通占位」过时表述族在判据面清扫(level_runner 两注释+autoplay 理由句+battle_narrator 玩家可见文案),wa4 条件断言转正复跑(拦截能力未证→必达)。 - -**改动单元清单**(🔴 契约 1): - -| # | 单元(实查) | 改法 | 依据 | -|---|---|---|---| -| d1 | `game/core/level_runner.gd:477-478` `"reward"` 分支注释「奖励点内容未定…节点保留占位、零兑付直通」+`:10` 信号注释 `reward={}(内容待定)`——与实现相悖(emit :479 后全链三选一兑付在位,§3 E1) | 注释改现状准确表述(措辞 L1:奖励节点=三选一停点、兑付确认后选路、呈现编排归 curio_interact_controller.present_node_curio;信号注释=`reward={}` 三选一停点空载荷、内容经 present_node_curio 拉取) | 注销承接(§0) | -| d2 | `game/sim/level_autoplay.gd:484` 注释理由句「奖励点 = 内容未定直通节点」——autoplay 直 continue 是 sim 策略选择(**行为保留**)、理由句失实 | 理由句换代为策略语义(措辞 L1:「autoplay 直通不解三选一——策略选择」方向);行为零触碰 | 同上;B5 分类(卡 B 二轮复核订正) | -| d3 | `game/presentation/battle_narrator.gd:15` `reward_line()` 玩家可见战报文案「关卡奖励点(节点内容待定——直通)」——三选一弹层拉起同屏打印(main_adventure_flow.gd:53-57),**玩家拿到的明明是三选一,文案却宣告直通** | 文案改现状表述(措辞 L1:「关卡奖励点(三选一——选毕推进)」方向);**呈现文案变化=玩家可见行为改动**,对照表专行(wr2);CurioPickOverlay 头部串(wa4 匹配对象「关卡奖励点」)**不动**——两串独立,d3 不破 wa4 匹配 | 注销承接;文案与实现相悖的玩家可见面 | -| d4 | `game/probe/ui_click_probe.gd:415-425` wa4 三选一头部断言——条件断言(`_tested_curio_head` 仅在探针真实走到三选一停点时置位校验,未走到即静默跳过=拦截能力未证) | 转正:探针驱动路径保证到达三选一停点(奖励节点真实路径),断言必达(未命中停点即红);头部校验逻辑本体(「冒险牌库」/「属性值提升与补给」等串)零改动 | 条目在册 wa4 复跑义务(test-conventions §6 条件断言转正口径) | - -**完成定义**: - -1. d1–d4 落地;wr1 grep 判据零命中+wr2 断言绿+wr3 探针直跑绿且 wa4 真执行; -2. 全套闸按本批改动域选档全绿; -3. 撤销证明两条(wr2/wr3);三份产出物写齐(T2)。 - -## 2. 设计事实源 - -| # | 出处 | 取用条款 | -|---|---|---| -| D1 | 工程证据指认=「奖励节点三选一实装」条目注销确认(2026-10-25 用户)+裁点 P 乙落定 | 承接义务包范围 | -| D2 | [test-conventions](../design/engineering/test-conventions.md) §6/§8 | 条件断言「拦截能力未证」口径与转正义务;断言新增须同步验证集清单 | -| D3 | 卡 B 两轮 grilling 复核记录(2026-10-25) | B5 分类表与行号订正的已审凭据 | - -## 3. 现状事实(迁自卡 B §3 并经其两轮 grilling 独立复核订正;开工日 T0 复核行号) - -| # | 事实 | 出处 | -|---|---|---| -| E1 | 三选一全链在位:`"reward"` 分支(:476-480,注释 :477-478、emit :479)发射 `node_entered.emit(node, {})` → adventure_runner 转发(:724 connect/:849 _forward_node_entered)→ main_adventure_flow.gd:53-57 `present_node_curio()` 拉起 → curio_interact_controller.gd:116-131 三选一弹层(抽签→open_pick→apply_node_curio 兑付) | `game/core/level_runner.gd:476-480`;链上各文件实查 | -| E2 | 过时表述判据面(grep「零兑付直通」「内容待定」两串·两文件):level_runner.gd:477-478/:10+battle_narrator.gd:15-16——修订后判据面清零;autoplay 域 :220(空池直通)/:381(MC 夹具语境)行为性准确保留、:484 理由句随 d2 修订(d2 后「内容未定」字样消、:220/:381 的「直通」字样不在判据面);ui_click_probe.gd:670-672 历史注记保留(迭代 36 卡片前提缺陷记录,git 可考);design/ 侧 08-Alpha版本标准.md:113 与 roadmap 指路句走反哺(§6) | grep 全仓+逐处实查(卡 B B5 表迁入) | -| E3 | wa4 断言现形态:`_tested_curio_head` 条件位+头部串校验(匹配「关卡奖励点」=CurioPickOverlay 头部串 `node_curio_header()`——与 d3 战报行串两处独立);断言新增/转正须同步 `game/tests/验证集清单.md`(test-conventions §8.3——清单对账 `python tools/extract_checks.py --diff` 不在闸内,卡内显式步骤承载) | `game/probe/ui_click_probe.gd:415-425`;`game/tests/验证集清单.md` | - -## 4. 设计契约(红线,违反 = L3 停机呈报) - -🔴 **契约 1 · 改动面封闭**:d1/d2 注释四行+d3 文案一行+d4 断言形态转正——零第五改动点;autoplay 直 continue 行为、CurioPickOverlay 头部串、wa4 头部校验逻辑本体零触碰。 - -🔴 **契约 2 · 行为改动唯一申报**:d3 战报文案是本卡唯一玩家可见行为改动(wr2 专行验收);d1/d2 纯注释零行为。 - -🔴 **契约 3 · wa4 承接不虚置**:d4 断言必达(探针真实走到三选一停点);转正后若探针驱动路径不可达停点即红——禁保留条件形态交差。 - -🔴 **契约 4 · 清单跟上**:d4 断言转正若涉验证集清单登记(新增/改判),`tools/extract_checks.py --diff` 对账零差异——「清单没跟上视同未完成」;禁为免对账保留旧形态。 - -## 5. 范围边界 - -**做**:d1–d4;grep/探针验证;撤销证明;产出物。 - -**不做**: -- autoplay 直通策略行为(:484 的 continue——策略选择保留); -- level_autoplay.gd:220/:381 行为性准确表述(E2 分类); -- ui_click_probe.gd:670-672 历史注记(沿革留痕); -- CurioPickOverlay 头部文案(现行准确,wa4 匹配对象); -- design/ 与根规则文件的过时句落文(§6 反哺通道); -- 三选一机制本身(已实装——注销前提)。 - -## 6. 关联文档同步面 - -| 文档 | 关联点 | 同步义务 | -|---|---|---| -| [08-Alpha版本标准](../design/gdd/08-Alpha版本标准.md):113 | 「未结半=奖励节点现为零兑付直通占位,登记面=待办清单『奖励节点三选一实装』条」——注销后登记面死指+现状句与 E1 相悖 | 反哺点 · 列清单(①:该句随注销改写) | -| [roadmap](../roadmap.md)「当前位·下一步」句 | 「奖励节点三选一实装(2026-10-25 新登记)」待编池指路句随注销过时 | 反哺点 · 列清单(②:该短句摘除) | -| `待办清单.md` | 来源条目(本卡登记条目)状态推进;注销条目由写卡会话同批删除(非实现批义务) | 反哺点 · 列清单(③:状态核对注记) | - -## 7. 任务卡 - -### 卡前 · 文件结构图 - -| 文件 | 职责 | 行为改动 | -|---|---|---| -| `game/core/level_runner.gd` | d1 注释两处(复用既有·修改) | 非行为改动(注释面) | -| `game/sim/level_autoplay.gd` | d2 注释理由句一行(复用既有·修改) | 非行为改动(注释面) | -| `game/presentation/battle_narrator.gd` | d3 战报文案一行(:15,复用既有·修改) | **行为改动(玩家可见文案)** → wr2 | -| `game/probe/ui_click_probe.gd` | d4 wa4 断言转正+wr2 断言(复用既有·改断言形态/增断言) | 断言面 → wr2/wr3 | -| `game/tests/验证集清单.md` | d4 转正涉及的清单登记同步(复用既有·同步) | 非行为改动(清单面)→ wr3 | - -(零新增文件、零新增函数。) - -### 接口块 - -- **d3 新文案定值**(措辞 L1 白名单,语义=现状准确):「关卡奖励点(三选一——选毕推进)」方向。 -- **wr2 断言**(ui_click_probe 奖励节点路径,与 d4 同一驱动路径承载):断言 log_view 战报文本含 d3 新文案定值、不含「内容待定」。 -- **d4 转正形态**:探针驱动路径保证到达三选一停点(奖励节点真实选路路径——autoplay 式直通不改,探针走真人路径进停点);`_tested_curio_head` 条件位转必达判据(未命中停点即红);头部校验串零改动;涉及清单行同步(E3)。 -- **wr1 静态验证命令**(两条,判据=各零输出):①`grep -n "零兑付直通\|内容待定" game/core/level_runner.gd game/presentation/battle_narrator.gd`;②`grep -n "内容未定" game/core/level_runner.gd game/sim/level_autoplay.gd`(:477/:484 用「未定」非「待定」——第一条罩不住,两串分立钉死)。 -- **最窄闸**:ui_click_probe 单件直跑+`python tools/extract_checks.py --diff` 对账;全套闸按本批改动域选档。 - -### 落位与可复用性预检 - -- **零新增件**:d4 转正与 wr2 断言全在现役 ui_click_probe 原位(奖励节点驱动路径为该探针既有选路域),不造夹具。 -- **复用面**:d1 措辞对齐 main_adventure_flow.gd:53-57 既有注记风格;d3/wr2/d4 共用同一探针驱动路径。 -- **唯一面**:判据面过时表述修订后清零(E2 分类闭环——autoplay 两处与历史注记显式豁免);wa4 断言唯一载体仍在 ui_click_probe(转正不旁立)。 -- **分层**:注释+呈现文案+探针断言面;core 逻辑零触碰。 - -### T0 事实坐实(≈0.05d) - -- [ ] 复核 E1–E3(重点:行号、wa4 现形态、判据面两文件命中清单)。可核查结果:命中清单表进实现报告素材。 - -### T1 清扫实装+断言转正(≈0.35d) - -- [ ] 实装 d1/d2(注释)+d3(文案)。可核查结果:wr1 grep 判据零输出。 -- [ ] 实装 d4 转正+wr2 断言+清单登记同步。可核查结果:ui_click_probe 直跑绿且 wa4 真执行(打印行/计数证据);extract_checks --diff 零差异。 -- [ ] 验证步骤:全套闸按域选档跑一次全绿。 - -### T2 撤销证明+产出物落位卡(≈0.1d,末卡) - -- [ ] 撤销证明两条:①回退 d3 文案 hunk → wr2 断言红(log_view 含旧文案串)→ 还原复绿;②回退 d4 转正 hunk(断言回条件形态)→ 必达判据红(探针未命中停点路径不再报错——按转正口径该跑必红)→ 还原复绿。记录进实现报告。 -- [ ] 写齐三份产出物(实现报告〔E2 分类表闭环记录+wa4 转正证据+实机目检总清单——奖励节点战报行新文案目检一项〕/代拍板追认单/反哺点清单〔§6 逐条落点〕)。 -- [ ] 合并前置:独立验收审计(§8.3)逐行「通过」。 - -**估时合计 ≈0.5d**。编排注记:微件卡;d4 转正依赖探针真实走到三选一停点(驱动路径若需扩,成本在 T1 内);与卡 B 同波零冲突。 - -## 8. 验证闸 - -### 8.1 改动—验收对照表 - -| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 撤销证明 | -|---|---|---|---|---|---| -| wr1 注释与理由句清扫 | level_runner.gd:477-478/:10+autoplay.gd:484 | grep 两串命令零命中〔wr1〕(两条命令与判据见接口块——「待定/未定」两串分立) | 静态文本 | grep 真实跑批+实现报告记录 | 恢复原注释/理由句 → 对应 grep 命中即红 | -| wr2 玩家战报文案换代 | battle_narrator.gd:15-16 一行 | log_view 含新文案/不含旧串断言〔wr2〕(ui_click_probe 奖励节点路径) | 探针 | 奖励节点真实战报路径(present_node_curio 同屏打印) | 回退 d3 hunk → 断言红(T2①) | -| wr3 wa4 断言转正 | ui_click_probe.gd:415-425 条件→必达+清单同步 | 直跑绿+真执行证据+extract_checks --diff 零差异〔wr3〕 | 探针+清单 | 探针真实走到三选一停点(奖励节点驱动路径) | 回退 d4 转正 hunk → 必达判据红(T2②) | -| wr4 产出物 | T2 三份 | 件核〔wr4〕 | — | — | 缺项红 | - -### 8.2 测试削弱申报 - -零(既有断言零删除;wa4 由条件转必达=判定面增强非削弱;新增 wr2 断言一条)。 - -### 8.3 独立验收审计 - -入口=未参与实现的会话或子代理;报告落 `reports/iter-验收审计-<日期>.md`;抽查重点=改动面封闭(契约 1)、E2 分类闭环(判据面五处全修、autoplay 两处与历史注记未被顺手改)、wa4 真执行证据与清单对账记录、wr2 断言钉在新文案上。未过不得合并。 - -## 9. 异常分级 - -- **L1(自救)**:d1/d2/d3 具体措辞(语义=现状准确);wr2/d4 断言消息文本;d4 必达的驱动路径实现形态。 -- **L2(记录继续)**:行号随 master 推进漂移;探针驱动路径扩面的正常成本。 -- **L3(停机呈报)**:探针无法驱动到三选一停点(d4 转正不可达——承接失效,停呈);发现 E2 分类之外的判据面残留;断言无法钉在文案文本上;CurioPickOverlay 头部串被误触(wa4 匹配破坏)。 - -## 10. 代拍板白名单(超清单必呈报) - -1. d1/d2/d3 具体措辞(语义=现状准确、风格对齐既有)。 -2. wr2/d4 断言消息文本与挂点。 -3. d4 必达形态的具体实现(真实信号路径前提下的具体形态)。 -4. 提交切分与 worktree 分支命名。 - -## 11. 待裁点 - -**零待裁点,开工门=U0。** 承接义务范围与落位均已落定(2026-10-25 注销确认+裁点 P 乙);灰色地带推导定值两处(呈报可否决,随 T2 反哺点):①autoplay :484 理由句随批修订而 :220/:381 豁免——依据=前者理由失实、后两者语境准确;②wa4 转正的必达判据挂在探针驱动路径上——依据=test-conventions §6 转正口径(未证拦截能力的条件断言不算数)。 - -## 12. 复核记录 - -**来源凭据**:本卡内容全部迁自卡 B v1.2 的 b2–b5 单元与 B5/B6/B7 现状事实——该面已经卡 B 两轮 grilling 独立复核(第一轮阻断「wa4 义务湮灭」的承接方案、第二轮「B5 分类表补全」的订正,均已折入本卡对应节)。 - -**独立成卡复核记录(2026-10-25,独立子代理轻量复核,判「通过(附两应修)」)**:迁出自洽(与卡 B v1.3 双向闭合、文件面零交叠实证)、承接完整(两笔义务全落 d1–d4、E1 全链五处行号逐一实证)、验收可钉(wr2 真实入口在 main_adventure_flow:57;探针无必达奖励节点路径的对冲已在卡内——L1 模板含 5 个 reward 节点、扩面=选路定向小改,L2/L3 兜住)、结构完备(13 节+六列+一步一动作零 TBD)。两应修折入:①battle_narrator 文案行号订正 :15(v1.0 虚记 :15-16);②wr1 判据补第二条 grep「内容未定」(:477/:484 用「未定」非「待定」,原单条判据罩不住 d1/d2 的撤销变红)——接口块两条命令+对照表 wr1 行同步。另呈的批落盘义务(本卡登记条目落盘+注销条目删除)由写卡会话同批落实(§6 ③)。 diff --git a/reports/需求卡片-效果引擎校验文案计数修正批-2026-10-25.md b/reports/需求卡片-效果引擎校验文案计数修正批-2026-10-25.md deleted file mode 100644 index d1c2486d..00000000 --- a/reports/需求卡片-效果引擎校验文案计数修正批-2026-10-25.md +++ /dev/null @@ -1,153 +0,0 @@ -# 需求卡片:效果引擎校验文案计数修正批(fact 词表计数文案动态化+头注计数治理) - -- 版本:**v1.3**(2026-10-25 v1.0 成文→grilling 第一轮判「回炉」(两阻断)→v1.1 折入→第二轮闭合复检「通过(附一应修)」→v1.2 折入→同日用户裁点落定:裁点 Q **甲**(动态取 FACTS.size())、裁点 P **乙**(奖励节点承接包 b2–b5 迁出独立成卡=reports/需求卡片-奖励节点过时表述清扫批-2026-10-25.md)→v1.3 定稿瘦身,复核记录见 §12) -- 来源:[待办清单](../待办清单.md)「效果引擎校验文案计数错误——封闭事实词表数写死『9 项』实为 18」条目(2026-10-25 登记,状态=待写卡)(唯一事实源:工程证据指认=条目实况〔原审计报告 §三 漂移清单第 5 条迁册〕+本卡 §3 行号级实查〔经两轮 grilling 独立复核〕) -- 归属:`game/core/effect_engine.gd`(报错文案一行+头注计数订正)+ `game/tests/unit/core/effect_words_t1_test.gd`(断言一条) -- 排期:未编入(迭代批卡片;估时 ≈0.25 工作日) -- 开工门:U0+复核门过(§12);**零待裁点** - -## 0. 前置依赖与并行性 - -- **第〇步核对(2026-10-25 写卡会话)**:来源条目=需求性工程条目(bug 证据带 file:line),跳过设计线、凭证据指认放行;条目状态=待写卡。 -- 与迭代 37(已合回 8faf1763)零文件交叠(其未触 effect_engine.gd/effect_words_t1_test.gd)。 -- 与卡 A/卡 C/第四卡(奖励节点过时表述清扫批)零文件交叠、零逻辑耦合——可同迭代并行波。 -- **迁出注记**:v1.0–v1.2 期间的裁点 P 支(奖励节点承接包 b2–b5)已按用户裁点 P 乙迁出独立成卡(头部版本行)——本卡不再含该面;承接链与 wa4 义务归第四卡 §0。 - -## 1. 目标与完成定义 - -**目标**:effect_engine 校验报错文案与 FACTS 词表实数对齐且不再随词表增删漂移(用户裁 Q 甲=动态取实数);同文件头注的另一处写死计数(EFFECT_KINDS 注释)一并治理。 - -**改动单元清单**(🔴 契约 1): - -| # | 单元(实查) | 改法 | 依据 | -|---|---|---|---| -| b1 | fact 出域报错文案 `game/core/effect_engine.gd:360`——现写死「事实词汇封闭 9 项」,FACTS 常量(:50-54)实为 19 项(审计时点 18 → 今日 19,两次漂移实证) | **动态实数(已裁)**:`"%s fact 出域(事实词汇封闭 %d 项): %s" % [rid, FACTS.size(), fact]`——词表增删文案自动随 | 用户裁点 Q 甲(2026-10-25);code-conventions §1.1 不留死数 | -| b2 | `game/core/effect_engine.gd:21-23` EFFECT_KINDS 头注——写死计数「定稿 19 行;类型实数 24」已漂移(常量实数 32),与 b1 同文件同类病根 | 头注计数表述治理:去掉写死实数、改「词表实数以 EFFECT_KINDS 常量为准」方向(措辞 L1;注内历史叙事句「标题计 23 系笔误——commit 留痕」保留,沿革不删) | grilling 第一轮新查明;禁写变更记录红线只禁增不禁留 | - -**完成定义**: - -1. b1+b2 落地+断言一条绿(wr1); -2. 合法数据加载零变化(出域报错 message 文本除外);全套闸按本批改动域选档全绿; -3. 撤销证明一条(wr1);三份产出物写齐(T2)。 - -## 2. 设计事实源 - -| # | 出处 | 取用条款 | -|---|---|---| -| D1 | 工程证据指认=待办清单条目实况(原审计 §三 漂移清单第 5 条迁册)+本卡 §3 实查 | 文案与实数不符的存在事实 | -| D2 | [code-conventions](../design/engineering/code-conventions.md) §1.1 | 禁为迎合校验文本保留无效成员/死数——b1/b2 依据 | -| D3 | 2026-10-25 用户裁点 Q 甲 | b1 动态实数定案 | - -## 3. 现状事实(2026-10-25 写卡会话实查+两轮 grilling 独立复核于 master 4a88c259;开工日 T0 复核行号) - -| # | 事实 | 出处 | -|---|---|---| -| B1 | fact 出域校验文案写死「事实词汇封闭 9 项」;FACTS 常量 19 项(:50-54 逐词:matchup/is_first_dig_of_battle/terrain_kind/target_armor_class/seals_count/charge_layers/nest_count/round_index/counter/new_resource_type/is_edge_cell/is_blank_zero/dug_under_seal/ap_exhausted_last/hp_ratio/amount/ap_left/pct/battle_index);审计时点 18 → 今日 19——写死数字两次漂移实证;全文件 errs.append 10 处仅 :360 含计数(grilling 复核确认——无第三处) | `game/core/effect_engine.gd:50-54/358-360` | -| B2 | validate_trigger_row 已有出域反例测试段(喂 fact="nope" 断言 errs 计数 :44),无 message 文本断言;errs 行结构={category, message} 字典——b1 断言的现成落点 | `game/tests/unit/core/effect_words_t1_test.gd:41-47`;`game/core/effect_engine.gd:347-387` | -| B3 | EFFECT_KINDS 头注写死「定稿 19 行;类型实数 24」、常量实数 32——同文件第二处计数漂移 | `game/core/effect_engine.gd:21-26` | - -## 4. 设计契约(红线,违反 = L3 停机呈报) - -🔴 **契约 1 · 改动面封闭**:b1 一行文案+b2 头注计数表述——零第三改动点;effect_engine 校验逻辑、FACTS/EFFECT_KINDS 词表、其余可执行语句零触碰。 - -🔴 **契约 2 · 零行为变化**:合法数据加载零变化;b1/b2 只改报错与头注文本(errs 的 category/计数结构不变)。 - -🔴 **契约 3 · 校验报错文案面不留死数**:b1 所在校验报错文案面禁残留写死计数(「9 项」「19 项」);范围=errs 文案,不覆盖 b2 头注(另治)与文件其余注释。 - -## 5. 范围边界 - -**做**:b1+b2+断言;撤销证明;产出物。 - -**不做**: -- FACTS/EFFECT_KINDS 词表增删(19/32 项现状不动); -- 其它常量报错文案计数排查(grilling 已核全文件 errs.append 10 处仅 :360 含计数——无同类残留); -- 奖励节点承接包(已按裁点 P 乙迁出第四卡——§0 迁出注记)。 - -## 6. 关联文档同步面 - -| 文档 | 关联点 | 同步义务 | -|---|---|---| -| `待办清单.md` | 来源条目状态推进(已写卡→编迭代→完成即删) | 反哺点 · 列清单(①:状态核对注记) | - -## 7. 任务卡 - -### 卡前 · 文件结构图 - -| 文件 | 职责 | 行为改动 | -|---|---|---| -| `game/core/effect_engine.gd` | b1 文案一行+b2 头注计数(复用既有·修改) | 非行为改动(报错/注释文本面)→ wr1 | -| `game/tests/unit/core/effect_words_t1_test.gd` | wr1 断言一条(复用既有·增断言) | 断言面 | - -(零新增文件、零新增函数。) - -### 接口块 - -- **b1 断言**(effect_words_t1_test.gd ③ 段后追加):喂 `validate_trigger_row("出域fact计数", {}, [{"on": "dig_stop", "when": [{"fact": "nope", "op": "eq", "value": 1}], "do": {"kind": "heal", "value": 1}}], errs)` → 断言 errs 该行 message 含 `str(EffectEngineScript.FACTS.size())`(即「封闭 19 项」随词表自动)。 -- **最窄闸**:effect_words_t1_test 单件直跑;全套闸按本批改动域选档。 - -### 落位与可复用性预检 - -- **零新增件**:断言落现役 ③ 段(B2 现成形态),不造套件;文案改动在既有 errs.append 行内。 -- **复用面**:FACTS 常量即计数的单一事实源(b1 直读它——不复制第二处数字)。 -- **唯一面**:词表计数唯一出处=常量(b1/b2 落地后文案与头注零第二份计数)。 -- **分层**:纯文本面改动,零跨层交互。 - -### T0 事实坐实(≈0.05d) - -- [ ] 复核 B1–B3(两词表计数复核);确认无新增同类。可核查结果:计数复核记进实现报告素材。 - -### T1 修订实装+断言(≈0.15d) - -- [ ] 实装 b1(动态实数)+b2(头注)+断言一条。可核查结果:断言绿;b2 头注零写死计数。 -- [ ] 验证步骤:全套闸按域选档跑一次全绿。 - -### T2 撤销证明+产出物落位卡(≈0.05d,末卡) - -- [ ] 撤销证明一条:回退 b1 文案 hunk → 断言红(message 含「9 项」不含实数)→ 还原复绿。记录进实现报告。 -- [ ] 写齐三份产出物(实现报告〔两词表计数复核+实机目检总清单——出域报错面属开发期面,无玩家可感项,写明零目检项及理由〕/代拍板追认单/反哺点清单〔§6 逐条落点〕)。 -- [ ] 合并前置:独立验收审计(§8.3)逐行「通过」。 - -**估时合计 ≈0.25d**。编排注记:微件卡,可与他卡同波;零测试基建前置。 - -## 8. 验证闸 - -### 8.1 改动—验收对照表 - -| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 撤销证明 | -|---|---|---|---|---|---| -| wr1 文案与实数对齐且不漂移 | effect_engine.gd:360 动态实数+:21-23 头注治理 | message 含实数断言〔wr1〕(effect_words_t1_test ③ 段后) | 单元 | validate_trigger_row static 真实调用(与加载期校验同一函数) | 回退 b1 hunk → 断言红(T2) | -| wr2 产出物 | T2 三份 | 件核〔wr2〕 | — | — | 缺项红 | - -### 8.2 测试削弱申报 - -零(既有断言零改动;新增断言一条)。 - -### 8.3 独立验收审计 - -入口=未参与实现的会话或子代理;报告落 `reports/iter-验收审计-<日期>.md`;抽查重点=改动面封闭(契约 1:逐 hunk 核对零越界)、断言真钉在 message 实数上、b2 头注零残留写死计数。未过不得合并。 - -## 9. 异常分级 - -- **L1(自救)**:b2 头注表述措辞;断言挂点函数与断言消息文本。 -- **L2(记录继续)**:行号随 master 推进漂移。 -- **L3(停机呈报)**:T0 发现其它 errs 文案存在同类写死计数(范围边界预注——呈报后另裁);断言无法钉在 message 文本上。 - -## 10. 代拍板白名单(超清单必呈报) - -1. b2 头注表述具体措辞(语义=实数以常量为准)。 -2. 断言挂点函数与断言消息文本。 -3. 提交切分与 worktree 分支命名。 - -## 11. 待裁点 - -**零待裁点,开工门=U0。** 两裁点均已落定(2026-10-25 用户):裁点 Q=甲(动态取 FACTS.size()——乙案写死 19 淘汰,两次漂移实证+D2 不留死数);裁点 P=乙(奖励节点承接包迁出独立成第四卡——甲案并卡淘汰,卡面主题分离;承接链见第四卡 §0)。 - -## 12. 自审六查与 grilling 复核记录 - -**自审六查(2026-10-25 写卡会话,v1.0)**:①规格覆盖——b1→T1/wr1、撤销/产出物→T2;②步骤扫描;③类型一致性;④审查焦点——漂移再发、roadmap 指路句反哺;⑤篇幅比例;⑥落位预检。 - -**grilling 第一轮复核记录(2026-10-25,独立子代理对抗复核,判「回炉」两阻断)**:①阻断一=v1.0「全仓仅 level_runner 两处」失实且掩护玩家可见过时文案与 08-Alpha:113 死指——v1.1 折入 B5 分类表与 b4/b5 承接单元;②阻断二=wa4 复跑义务随注销湮灭——v1.1 折入承接条款;③应修=行号转录错位订正+契约 3 与头注互斥(b6→现 b2 立单元)+§6 漏 08-Alpha 反哺(补)。〔注:①②③所涉 P 支面已按用户裁点 P 乙整体迁出第四卡,本卡保留复核记录原文以凭据在案;分类表与承接链现载第四卡 §3/§0。〕 - -**grilling 第二轮闭合复检记录(2026-10-25,独立子代理,判「通过(附一应修)」)**:第一轮条目核闭合属实;应修=B5 分类表补 autoplay 域三处+grep 词族钉死——v1.2 折入。〔同上注:该面已迁第四卡。〕 - -**裁点落定与迁出(2026-10-25 用户)**:Q 甲(动态实数)+P 乙(承接包独立第四卡)——v1.3 定稿瘦身:改动单元余 b1/b2(原 b6 并为 b2),现状事实余 B1–B3,§11 零待裁点。Q 支(b1 面)两轮复核全过(FACTS 19 实数、errs 结构、断言可钉、全文件仅 :360 含计数、撤销证明成立——第一轮建议 6 原文在案)。 diff --git a/reports/需求卡片-明细行扩展总型收敛批-2026-10-25.md b/reports/需求卡片-明细行扩展总型收敛批-2026-10-25.md deleted file mode 100644 index 7e33902f..00000000 --- a/reports/需求卡片-明细行扩展总型收敛批-2026-10-25.md +++ /dev/null @@ -1,193 +0,0 @@ -# 需求卡片:明细行扩展总型收敛批(四专长实名行型→单一扩展行型+effect_id 载荷) - -- 版本:**v1.3**(2026-10-25 v1.0 成文→grilling 第一轮判「回炉」→v1.1→第二轮闭合复检判「回炉(单点)」:负路径断言载体改负面小套件→v1.2→同日用户裁点 R **甲**(授权重锚并账)→v1.3 裁点落定定稿,复核记录见 §12) -- 来源:[待办清单](../待办清单.md)「明细行扩展总型收敛批——四个专长实名行型收敛为单一扩展行型+效果载荷」条目(2026-10-25 登记,状态=待写卡)(唯一事实源:设计闭合凭据=[战斗结算](../design/gdd/systems/战斗循环/战斗结算.md)「明细流水」节+「扩展行」节——词表两层定稿〔基础 9 类+扩展行 1 类,「概念+指引」法,git 82d0cf24〕;工程证据=本卡 §3 行号级实查+grilling 实测补查) -- 归属:`game/core/battle_orchestrator.gd`(行协议头注+fx_reveal 三发射点+_emit_row 校验面)+ `game/core/settlement/grant_segment.gd`(另三发射点)+ `game/tests/unit/battle_settlement/round_flow_skill_pool_test.gd`(新断言)+ `game/tests/unit/core/treasure_effects_test.gd`(新断言+首次 feats 注入)+ `game/tests/unit/battle_settlement/extended_row_violation_test.gd`(**新增**·负面小套件——§7 预检)+ `game/tests/run_all.gd`(套件清单登记一行)+ parity 锚面(重锚并账已裁) -- 排期:未编入(迭代批卡片;估时 ≈1.85 工作日——含重锚并账) -- 开工门:U0+grilling 复核门过(§12)+裁点 R 已落甲(重锚并账授权,2026-10-25) - -## 0. 前置依赖与并行性 - -- **第〇步核对(2026-10-25 写卡会话)**:来源条目设计线闭合凭据齐——owner 文档「扩展行」节 2026-10-25 两层定稿(git 82d0cf24),条目状态=待写卡(轨闭合态),按 req-card 第〇步放行。 -- **与迭代 37(已合回 8faf1763)**:其卡① d12 给明细行 payload 新增 `target_id` 键(触 battle_orchestrator.gd 4 行)——本卡行型值收敛与其零冲突(payload 平铺面〔playtest_logger.gd:136-139〕不动);R1/R2/R3 拆件面与本卡零文件交叠。行号以 T0 复核为准。 -- **与「结算明细日志行序重锚批」(待办清单在册,2026-10-21 用户裁批准另立、发起时点另定)**:本卡改行型值 → JSONL 逐行落盘的 `type` 字段变 → parity 对拍锚必红(**已实测证实**:现行锚内 fx_preview_area 型行 1520 行、fx_reveal 型行 1329 行——A7)。两批并账一次重锚=§11 主裁点(重锚发起权在用户)。 -- **parity 触面**:本卡触 `battle_orchestrator.gd` 与 `grant_segment.gd`(结算行为面)——按 MC 配套纪律([sim-data/README.md](../sim-data/README.md)),本卡零数值改动=零 MC;对拍断言按纪律③为锚内子集复放、零新跑。**锚红机制实测注记**:relic 兑付把 feat_id 追加进持有集(adventure_runner.gd:415-417)——`feat_mode=off` 不挡锚内专长行出现,锚必红不依赖 feat 模式开关。 - -## 1. 目标与完成定义 - -**目标**:明细行协议的扩展行型按 owner 文档两层词表落地——四个专长实名行型值(fx_reveal/mine_neutralized/insurance_used/fx_preview_area)收敛为单一扩展行型值,效果身份改经 `effect_id` 载荷携带;顺带修复 fx_preview_area 行 source_class 空串违约(§3 A5);结算数值、行序、行数量、随机消费逐位不变。 - -**改动单元清单**(🔴 契约 1): - -| # | 单元(实查) | 改法 | 依据 | -|---|---|---|---| -| a1 | 四发射点行型值:`battle_orchestrator.gd:149/:157/:162`(fx_reveal×3——落空行×2+兑付行×1)+ `grant_segment.gd:271`(mine_neutralized)+ `grant_segment.gd:281`(fx_preview_area)+ `grant_segment.gd:309`(insurance_used) | 第一参(type)改单一扩展串(§10 代拍板,推荐 `extended`);原实名串转 `effect_id` 载荷进 extra(取值沿用原串,§10);display_name/value/highlight/其余参数逐字不动 | owner 文档「扩展行」节:扩展行是**一个**行型,效果身份由 effect_id 载荷说明 | -| a2 | `_emit_row`(battle_orchestrator.gd:1262)fail-fast 补强 | **emit 之前**插入校验(落位收紧——违约行先炸后不发):type==扩展串且 extra 无 `effect_id` → `assert(false, …)` 断言失败并 return(零发射);与 `_assert_row_source` 同族 assert 形态(开发期违约即炸);合法发射路径零变化。**负路径验收载体=独立负面小套件**(assert 必产 SCRIPT ERROR,非负面套件被闸机错误扫描判红——run_all.gd:133-136;负面套件豁免机制为此存在,§7 预检) | owner 文档行协议 fail-fast 同族;效果身份是扩展行必载字段 | -| a3 | fx_preview_area 行 source_class(grant_segment.gd:281 现传 `""`) | 改传真实来源类别(§10 代拍板,推荐 `fx_warning_beacon`)——示警烟火在表(feats.tres:301)、装配+封印命中即发射 | 行协议「任何一行找不到来源即断言失败」——空来源类别违约(A5) | -| a4 | 行协议头注(battle_orchestrator.gd:15-19,现写「9 类」清单) | 换代两层词表:基础 9 类(清单不变)+扩展行 1 类(单一扩展串值+四效果身份清单=四实名串转 effect_id 后的取值与发射点指引) | owner 文档「效果身份清单与发射点以实现侧头注为准」——头注即指引锚 | -| a5 | battle_log_view 呈现面(:9 AGG_TYPES/:90 append_row/:144 _format_row) | **零代码改动·核验面**:四实名串现状即无 match 分支、全落 fallback(:210 按 display_name 呈现);收敛后扩展串同样落 fallback——**a1 面呈现输出逐字节不变**;扩展行不属 AGG_TYPES 聚合域。**a3 面呈现差异如实申报**:示警烟火行将从无来源标注变为带来源类别裸键渲染(`_source_label` :133-136 对 settlement.tres `source_label_map` 无 fx_ 键裸键回退——与 mine_neutralized 行 `fx_seal_smith` 裸键先例一致,来源归因可见性反而归位;§10 代拍板处置) | owner 文档「呈现层按身份取各自的行文案」——发射点写 display_name、fallback 通用承载,已满足 | -| a6 | parity 锚面(game/tests/evidence/parity/anchor.json) | §11 裁点:甲=并账重锚(T2 内按 [sim-data/README.md](../sim-data/README.md) 档位与流程重制锚);乙=批内对拍闸落 skip+重锚批另立(先例=迭代 32 卡①,git d00f24a8) | 对拍锚锚现行 `type` 字段值,行型值变=锚必红(实测 A7);重锚只能用户发起 | - -**完成定义**: - -1. a1–a4 落地;a5 核验结论(零改动依据+裸键差异申报)记入实现报告; -2. 新断言六条绿(§8 wr2:四效果各一行扩展串+effect_id 断言+fx_reveal 落空行断言〔五条进两现役套件〕+a2 负路径断言〔一条进新增负面套件,expect=1 达成〕)+a3 修复断言绿(wr3)+撤销证明三条(wr1/wr2/wr3); -3. 全套闸按本批改动域选档全绿——含 a6 按裁点落定(甲=重锚后对拍绿;乙=skip 落账); -4. 三份产出物写齐(T3),含反哺点清单(§6 两条)。 - -## 2. 设计事实源 - -| # | 出处 | 取用条款 | -|---|---|---| -| D1 | [战斗结算](../design/gdd/systems/战斗循环/战斗结算.md)「明细流水」节+「扩展行」节(2026-10-25 两层定稿,git 82d0cf24) | 行型分两层:基础 9 类封闭+扩展行 1 类;扩展行效果身份由 effect_id 载荷说明;新增专长效果只新增载荷身份不再新增行型;行型词表改动必须走本文修订并同步呈现层行格式化 | -| D2 | 同上「明细流水」节两层豁免条款 | 行型层豁免两类(decay/verdict)+来源类别层豁免五类(含 fx_reveal)——豁免按 source_class 层生效,本卡行型值收敛零触碰豁免集合 | -| D3 | 同上「结算不变量」节「行型封闭」条款 | 流水行型只出现本文登记的基础 9 类与扩展行;未登记行型禁止落行 | -| D4 | 待办清单「结算明细日志行序重锚批」条目(2026-10-21 用户裁) | 重锚批只能由用户发起——§11 裁点的发起权依据 | -| D5 | [sim-data/README.md](../sim-data/README.md) MC 采集档位表+配套纪律③⑦ | 对拍断言=锚内子集复放零新跑;零数值改动=零 MC | - -## 3. 现状事实(2026-10-25 写卡会话实查+grilling 实测补查于 master 4a88c259;开工日 T0 复核行号) - -| # | 事实 | 出处 | -|---|---|---| -| A1 | 行协议头注列基础 9 类(effect/damage/heal/reward_ineffective/seal_miss/cast/decay/verdict/highlight),注记「清单改动须同步 battle_log_view 的 _format_row 与本文档头注」;无扩展行型登记 | `game/core/battle_orchestrator.gd:15-19` | -| A2 | 扩展行型值现状=四个专长实名串:fx_reveal(:149/:157/:162——落空行×2 带 `Vector2i(-1,-1)`、兑付行×1 带真实格)/mine_neutralized(grant:271,source_class=`fx_seal_smith`,真实格)/fx_preview_area(grant:281,**source_class=`""`**,真实格)/insurance_used(grant:309,source_class=`seal_miss`,真实格) | `game/core/battle_orchestrator.gd:149-162`;`game/core/settlement/grant_segment.gd:271/281/309` | -| A3 | `effect` 行型已有效果身份载荷先例:`{"effect_id": "fx_grant_gp"}`(grant:218)/`"nest_counter"`(:797)/`ap_delta`(:859)/eff 变量(:828/:841/:1024)——扩展行收敛沿用同款载荷键名;extra 平铺键与公共字段无冲突(effect_id 不撞 kind/type/source/cell/round/text/value/highlight——grilling 核实) | `game/core/settlement/grant_segment.gd:218`;`game/core/battle_orchestrator.gd:797/828/841/859/1024`;`game/presentation/playtest_logger.gd:127-140` | -| A4 | `_emit_row` 组装公共字段+extra 平铺后 `step_row.emit(row)`;`_assert_row_source` 两层豁免校验(SOURCE_EXEMPT_TYPES=[decay,verdict] :21;SOURCE_EXEMPT_CLASSES=[hero_attack,enemy_action,clear_reward,fx_reveal,fx_grant_gp] :25);`assert(source_class != "")` 对空来源类别判失败 | `game/core/battle_orchestrator.gd:1262-1300` | -| A5 | fx_preview_area 空串是现行违约:示警烟火在表(feat_id=warning_beacon,trigger kind=preview_area,feats.tres:301-313),装配+封印命中即走 :281 发射;**实测语义注记**(grilling):headless `--script` 下 assert 失败只中断当前函数不中止运行(现行锚源日志该行之后仍续写 4.2 万行收官)——编辑器调试会话才真炸;现行测试面未覆盖该路径 | `game/data/tables/feats.tres:301-313`;`game/core/settlement/grant_segment.gd:275-281`;锚源日志实测 | -| A6 | 呈现层:四实名串在 `_format_row` 的 match 无专属分支、全落 fallback(:210)按 display_name 呈现;AGG_TYPES=["reward_ineffective"](:9)不含扩展行——不聚合;`_source_label`(:133-136)对 settlement.tres `source_label_map`(:11-19)无的键裸键回退——mine_neutralized 行现即带 `fx_seal_smith` 裸键先例;示警烟火行现无来源标注(source_class 空) | `game/presentation/views/battle_log_view.gd:9/90-96/133-136/144-210`;`game/data/tables/settlement.tres:11-19` | -| A7 | JSONL 落盘:playtest_logger 订阅 step_row(:47),`_on_step_row` 逐行落 `{"kind":"step","type":row.type,…}`+payload 平铺(:127-140)——行型值变=JSONL 逐行变、parity 对拍锚必红。**实测凭据**(2026-10-25 锚种子日志):锚内 fx_preview_area 型行 1520 行、fx_reveal 型行 1329 行(insurance_used/mine_neutralized 锚内 0 行——该两专长锚局未持有);锚红机制=relic 兑付追加 feat_id 进持有集(adventure_runner.gd:415-417),`feat_mode=off` 不挡 | `game/presentation/playtest_logger.gd:47/127-140`;`sim-data/` 锚源日志实测 | -| A8 | 测试面零行型值断言直引。四串的**全部合法身份清单**(grep 残留判据与 L3 的基线——收敛后这些串仍将在库,属预期非残留):①行型值(六发射点——收敛后消失);②effect_id 载荷值(§10 推荐案——收敛后新增于发射行内);③source_class 实参(:149/:157/:162 第二参 `fx_reveal`、grant:271 `fx_seal_smith`——收敛后保留);④rng 封闭流名(:151 `open_stream("fx_reveal")`——保留);⑤EffectEngine counter 桶键 `insurance_used`(round_flow_skill_pool_test.gd:989-1008——保留);⑥MinesweeperRules 方法名 `fx_reveal`(minesweeper_rules_test.gd:89-92——保留);⑦feats.tres trigger kind 串(preview_area/forgive_seal_miss 等——保留) | grep 全仓实查分类 | -| A9 | 断言承载先例:round_flow_skill_pool_test 装配 `feats:["perfect_insurance"]` 驱动真实标错结算(:992)+step_row 捕获先例(:87/:151/:222——grilling 核实);treasure_effects_test:253 是**同调件**(attunement)装配先例——该套件现无 feats 注入形态,wr2 两断言(mine_neutralized/fx_preview_area)须引入 V6 式 `enc["feats"]` 注入(该套件首次);forgive_seal_miss(feats.tres:866)是 perfect_insurance 行(:850)内 trigger 的 kind 值非独立 feat | `game/tests/unit/battle_settlement/round_flow_skill_pool_test.gd:87/151/222/989-1008`;`game/tests/unit/core/treasure_effects_test.gd:253`;`game/data/tables/feats.tres:850-870` | -| A10 | 全仓 `extended` 串零占用(battle_orchestrator/battle_log_view 无命中)——扩展串值候选无冲突 | grep 实查 | - -## 4. 设计契约(红线,违反 = L3 停机呈报) - -🔴 **契约 1 · 改动面封闭**:只改 a1–a4 六个发射点行型值+载荷、_emit_row 一条校验(emit 之前)、一处 source_class 修复、头注换代;display_name/value/highlight/行序/行数量/发射时点逐字不动;基础 9 类行型任何发射点零触碰。 - -🔴 **契约 2 · 数值与复放零变**:结算数值、随机消费(core 内全部封闭随机流——`open_stream` 名九个:behavior_roll/board_gen/encounter/fx_reveal/gp_drop/reward_pick/reward_roll/shop_draw/variant_place,另 armor_roll 经表值变量)消费序与取号零变化——本卡不得有任何数值语义改动;同种子同输入步骤流除行协议字段(type/effect_id/source_class 三字段——§8 对拍口径)外逐位复现。 - -🔴 **契约 3 · 豁免集合零变化**:SOURCE_EXEMPT_TYPES/SOURCE_EXEMPT_CLASSES 两常量(:21/:25)逐字不动——fx_reveal 豁免按来源类别层继续生效;owner 文档两层豁免五类清单(D2)是校验面的规范源。 - -🔴 **契约 4 · 对拍诚实**:parity 对拍红不隐藏、不放宽、不删断言——按 §11 裁点落定(甲=重锚后绿;乙=skip 落账+实现报告登记重锚另批);「对拍断言=锚内子集复放零新跑」纪律不破。 - -🔴 **契约 5 · fail-fast 落地+禁为机检文本保留无效成员**:a2 校验(扩展行缺 effect_id 即断言失败且零发射)与 a3 修复同批落地——禁只收敛不设闸,也禁为过校验保留空串占位(code-conventions §1.1 同款);禁为迎合 grep 判据保留旧行型值;机检键与本卡契约互斥时一律停卡呈报。 - -## 5. 范围边界 - -**做**:a1–a6;六断言+a3 修复断言;撤销证明三条;产出物;头注换代。 - -**不做**: -- effect 行型既有效果的 effect_id 载荷面重构(gp_gain/nest_counter/ap_delta/fx_grant_gp 等现状不动——它们已是合法基础行型+载荷形态); -- 扩展行在 _format_row 增设专属呈现分支或改呈现输出(a5 核验结论=a1 面零改动;a3 面裸键差异按 §10 处置); -- settlement.tres `source_label_map` 补 fx_ 键(§10 代拍板备选,未裁不实装); -- 行序、行合并、聚合域变化(AGG_TYPES 不动); -- `insurance_used` counter 桶键更名(A8 ⑤——counter 键与行型值同物异义,本卡只动行型值侧); -- parity 锚重制的技术流程变更(甲授权则按 sim-data/README.md 现行档位与流程执行)。 - -## 6. 关联文档同步面 - -| 文档 | 关联点 | 同步义务 | -|---|---|---| -| [战斗结算](../design/gdd/systems/战斗循环/战斗结算.md)「扩展行」节 | 过渡句「现行实现的扩展行型值以专长实名串承载,效果身份清单与发射点以实现侧 `battle_orchestrator.gd` 文件头注为准;收敛为单一扩展行型+效果载荷的条目在待办清单在册」——收敛落地后「实名串承载」半句过时、「条目在册」句随条目出账失效 | 反哺点 · 列清单(①:过渡句摘除改写,头注指引句保留) | -| [roadmap](../roadmap.md)「当前位·下一步」句 | 「结算明细日志行序重锚(2026-10-21 授权发起、时点另定)」——重锚并账已裁甲,该句改写为已出账口径 | 反哺点 · 列清单(②:文档批落文) | -| `待办清单.md` | 来源条目状态随批推进(已写卡→已编迭代→实现批完成即删);「结算明细日志行序重锚批」条目同批出账口径(裁点甲) | 反哺点 · 列清单(③:状态推进注记) | - -## 7. 任务卡 - -### 卡前 · 文件结构图 - -| 文件 | 职责 | 行为改动 | -|---|---|---| -| `game/core/battle_orchestrator.gd` | a1 三发射点行型值+载荷/a2 _emit_row 校验/a4 头注换代(复用既有·修改) | 行为改动 → wr1/wr2 | -| `game/core/settlement/grant_segment.gd` | a1 另三发射点+a3 source_class 修复(复用既有·修改) | 行为改动 → wr1/wr3 | -| `game/presentation/views/battle_log_view.gd` | a5 核验面——零改动(fallback :210 继续承载),核验结论+裸键差异申报记实现报告 | 非行为改动(核验) | -| `game/tests/unit/battle_settlement/round_flow_skill_pool_test.gd` | wr2 断言:insurance_used/fx_reveal(兑付+落空)(复用既有·增断言) | 断言面 | -| `game/tests/unit/core/treasure_effects_test.gd` | wr2 断言:mine_neutralized/fx_preview_area(首次引入 feats 注入——V6 形态移植)(复用既有·增断言) | 断言面 | -| `game/tests/unit/battle_settlement/extended_row_violation_test.gd` | **新增**·负面小套件:a2 负路径断言(违约直调 → assert 炸 → 进程非 0 退出)(新增·新文件) | 断言面 → wr2-np | -| `game/tests/run_all.gd` | 套件清单登记一行(`expect=1, negative=true`——负面豁免先例 :49-50 同款)(复用既有·登记) | 基建面 | -| parity 锚面(game/tests/evidence/parity/anchor.json) | a6——裁点甲=重制/乙=skip(非新增文件) | 裁点 | - -(新增件仅负面小套件一件+清单登记一行;落位预检见下。) - -### 接口块 - -- **行协议变化**(本卡产出,后续消费方以此为准):扩展行 row = 公共字段(type=`extended`〔§10 定值〕/source_class/origin_cell/round_index/display_name/value〔/highlight 可空〕)+`effect_id: String`(必载,a2 校验)+效果私有 payload 平铺(mine_neutralized 无/fx_preview_area 带 `types`/insurance_used 带 `forgiven`/fx_reveal 无)。 -- **effect_id 取值**(§10 代拍板推荐案):四效果沿用原行型串——`fx_reveal`/`mine_neutralized`/`insurance_used`/`fx_preview_area`。 -- **a2 校验**(_emit_row 体内、`step_row.emit` **之前**——违约行先炸后不发):type 为扩展串且 `extra.get("effect_id", "") == ""` → `assert(false, "[战斗结算] 扩展行缺 effect_id 载荷——行协议违约")` 并 return(零发射)。 -- **a2 负路径断言**(`extended_row_violation_test.gd` 新负面小套件,宿主形态=counter_prefix_fatal_test 同款〔expect=1+negative〕):构造编排器直调 `oc._emit_row("extended", "fx_reveal", Vector2i.ZERO, 1, "负路径", 0, {}, "")`(缺 effect_id)→ assert 炸 → 套件进程非 0 退出=闸判绿(manifest 行 `{"path": "res://tests/unit/battle_settlement/extended_row_violation_test.gd", "expect": 1, "negative": true}` 登记进 run_all.gd 套件清单)。 -- **wr2 断言五条**:①insurance_used 行(装配 perfect_insurance 标错,断言 type=="extended" 且 effect_id=="insurance_used");②fx_reveal 兑付行(装配揭示类专长开格,断言 type/effect_id);③fx_reveal 落空行(同装配+无未揭示安全格态,断言 type/effect_id——落空路径 :149/:157 的撤销证明载体);④mine_neutralized(treasure_effects_test feats 注入 seal_smith 三次封印,断言 type/effect_id);⑤fx_preview_area(feats 注入 warning_beacon 封印命中,断言 type/effect_id/source_class==定值非空——与 wr3 并一条)。 -- **取用**:无(本卡无前置卡)。**最窄闸**:两测试套件单件直跑;全套闸按本批改动域选档。 - -### 落位与可复用性预检 - -- **零新增产品码/零新增函数**:收敛是对六个既有发射点的参数改写+_emit_row 既有函数的补强段——产品码无处需要新落点。**新增件仅一件(负面小套件)**:为什么不能复用既有负面套件——现役负面套件全在 data_config 域(加载期校验面:config_db_fatal_oob/treasure_target_violation/reward_dangling_treasure/counter_prefix_fatal),行协议运行期违约面无先例;负面套件语义要求独立进程(expect=1),并入 round_flow 等非负面套件会因 SCRIPT ERROR 撞闸机错误扫描(run_all.gd:133-136)——独立小套件是唯一载体,manifest 负面豁免机制(:135-137/:49-50)为此存在。 -- **复用面**:effect_id 载荷键名复用 `effect` 行型既有 payload 先例(A3)——不造第二键名;呈现复用 _format_row fallback 既有分支(A6)——不造呈现路径;断言复用 round_flow_skill_pool_test 的 feats 装配+step_row 捕获双先例(A9)——不造测试夹具;负面套件宿主形态复用 counter_prefix_fatal_test 同款(expect=1+negative);treasure_effects_test 的 feats 注入按 V6 形态移植(A9 注记)。 -- **唯一面**:行型词表单点=owner 文档「扩展行」节(D1)+实现侧头注(a4)——两层指引互指已是既有结构,本卡只换代头注内容不立第二登记处;`extended` 串全仓零占用(A10)。 -- **分层**:core 层零 UI 依赖不破(发射点与校验均在 core;battle_log_view 零改动);随机、数值面零触碰。 - -### T0 事实坐实(≈0.25d) - -- [ ] 复核 A1–A10(重点:A2 六发射点行号、A5 示警烟火装配面、A8 身份清单七类复查——以开工日 master 为准);确认 §10/§11 裁点落定值。可核查结果:发射点清单表+身份清单+裁点定值注记进实现报告素材。 -- [ ] 改前读数:parity 锚基线状态(对拍绿)+**锚内行型出现计数**(按 A7 实测法记录:fx_preview_area/fx_reveal/insurance_used/mine_neutralized 各型行数);两测试套件通过数。可核查结果:基线表在案。 - -### T1 收敛实装+断言(≈0.85d) - -- [ ] 实装 a1(六发射点)。可核查结果:grep 判据=六发射点第一参全为扩展串;A8 身份清单①行型值类命中清零(②–⑦类按清单保留)。 -- [ ] 实装 a2(校验段,emit 之前)+a3(source_class)+a4(头注)。可核查结果:头注两层词表在位。 -- [ ] 断言六条(wr2 五条进两现役套件〔见接口块挂点〕+a2 负路径一条进新负面套件+manifest 登记行)。可核查结果:两现役套件直跑绿+负面套件非 0 退出(闸面 negative 豁免判绿)。 -- [ ] 验收步骤:全套闸按域选档跑(含 a6 按裁点:甲=重锚后对拍绿;乙=skip 落账)。 - -### T2 撤销证明+重锚(裁点甲时 ≈0.75d/乙 ≈0.5d)+产出物落位卡(末卡) - -- [ ] 撤销证明三条:①回退 a1 fx_reveal 兑付行发射点 hunk(type 改回实名串)→ wr2 断言②红(type 不匹配)→ 还原复绿——**限定「被断言钉住的发射点」**(六点中 :149/:157 落空行由断言③钉、grant 三点由断言①④⑤钉——全部有断言载体,任选其一执行并记录);②回退 a2 校验段 hunk → 负面套件红(违约直调不再炸、进程正常退出码 0 ≠ manifest expect 1)→ 还原复绿;③回退 a3 hunk(source_class 复空串)→ wr3 断言红(source_class 取值断言)→ 还原复绿。记录进实现报告。 -- [ ] 裁点甲时:按 [sim-data/README.md](../sim-data/README.md) 档位与流程重制 parity 锚(改后行为首采立新锚——「旧行为 MC 行为锚」条目 2026-10-25 先例形态),对拍复放绿(差异行数与 T0 锚内计数对账)。 -- [ ] 写齐三份产出物(实现报告〔a5 核验结论+裸键差异申报+发射点清单表+身份清单闭环+读数对拍(type/effect_id/source_class 三字段差)+实机目检总清单——结算明细屏四效果行目检+示警烟火行来源标注目检〕/代拍板追认单/反哺点清单〔§6 逐条落点〕)。 -- [ ] 合并前置:独立验收审计(§8.3)逐行「通过」。 - -**估时合计:裁点乙 ≈1.6d/裁点甲 ≈1.85d**。编排注记:行为改动面集中在行协议字段,数值/随机零触碰;parity 面重(对拍必红——编排时确认裁点已落);treasure_effects_test 首次 feats 注入有形态移植成本(T1 内);负面套件+manifest 登记是闸面新基建一行(T1 内)。 - -## 8. 验证闸 - -### 8.1 改动—验收对照表 - -| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 撤销证明 | -|---|---|---|---|---|---| -| wr1 四行型值收敛 | battle_orchestrator.gd:149/157/162+grant_segment.gd:271/281/309 type 改扩展串+effect_id 载荷 | 断言①–⑤〔wr2〕+ grep 身份清单判据〔wr1〕+改前改后 JSONL 读数对拍(**type/effect_id/source_class 三字段**差,其余零差异) | 单元+接口 | feats 装配驱动真实结算路径(round_flow_skill_pool_test :992 形态) | 回退被断言钉住的任一发射点 hunk → 对应断言红(T2①) | -| wr2 扩展行必载 effect_id | _emit_row 校验段(a2,emit 之前) | 负面套件断言〔wr2-np〕(缺 effect_id 直调 → assert 炸 → 进程非 0 退出=expect 1;extended_row_violation_test+manifest 登记行) | 单元(负面套件) | _emit_row 真实入口直调(同一发射管线,独立进程) | 回退 a2 校验段 → 负面套件退出码 0 ≠ expect 1 → 红(T2②) | -| wr3 fx_preview_area 空来源修复 | grant_segment.gd:281 source_class `""`→真实类别 | 断言⑤含 source_class==定值〔wr3〕 | 单元 | warning_beacon 装配+封印命中真实路径 | 回退 a3 hunk → wr3 断言红(T2③) | -| wr4 parity 面按裁点落定 | anchor.json(甲=重制/乙=skip) | 甲=对拍复放绿〔wr4〕/乙=skip 落账+实现报告登记 | 集成 | parity 复放真实跑批(锚内子集) | 甲=重锚前后对拍读数留档(差异行数与 T0 计数对账);乙=skip 状态留档 | -| wr5 产出物 | T2 三份 | 件核〔wr5〕 | — | — | 缺项红 | - -### 8.2 测试削弱申报 - -零(既有断言零改动;新增断言六条+校验段一条)。 - -### 8.3 独立验收审计 - -入口=未参与实现的会话或子代理;报告落 `reports/iter-验收审计-<日期>.md`;抽查重点=六发射点改动面封闭性(契约 1:逐 hunk 核对无越界改动)、a5 核验结论与裸键差异申报、wr1 读数对拍(**type/effect_id/source_class 三字段之外零差异**——A8 身份清单闭环核对)、a2 校验落位在 emit 之前、撤销证明三条记录在案。未过不得合并。 - -## 9. 异常分级 - -- **L1(自救)**:扩展串与 effect_id 具体取值(§10 白名单内);a3 来源类别命名;断言在两套件内的具体挂点函数。 -- **L2(记录继续)**:断言触发的装配前置成本(mine_neutralized 需构造第 3 次封印匠命中、落空行需无未揭示安全格态);treasure_effects_test feats 注入形态移植的正常成本;行号随 master 推进漂移。 -- **L3(停机呈报)**:任何结算数值/随机消费序变化(契约 2 破);豁免集合被迫改动(契约 3 破);grep 发现**A8 身份清单七类之外**的四串新身份(清单外新身份才停机——清单内七类保留是预期);parity 复放差异超出 type/effect_id/source_class 三字段(说明收敛外有行为漂移);重锚流程与 sim-data/README.md 档位表冲突。 - -## 10. 代拍板白名单(超清单必呈报) - -1. 扩展行型串值:推荐 `extended`(直译「扩展行」、全仓零占用 A10);备选 `fx`(淘汰:与 effect_id 载荷的 fx_ 前缀值域视觉混淆)。 -2. effect_id 取值:推荐四效果沿用原行型串(迁移最小、JSONL 可读性最大保留);备选统一改效果 kind 串(淘汰:与 counter 键、feats 行 kind 三处值域交叉,可读性反降)。 -3. a3 来源类别取值:推荐 `fx_warning_beacon`(对齐 `fx_seal_smith` 专长实名先例);备选 `preview_area`(淘汰:kind 串非来源语义)。 -4. **a5 裸键呈现差异处置**:推荐**申报差异**(示警烟火行带 `fx_warning_beacon` 裸键——与 mine_neutralized 行 `fx_seal_smith` 裸键先例一致,来源归因可见性归位;T2 目检覆盖);备选 settlement.tres `source_label_map` 补 fx_ 键给中文标注(淘汰:数值表改动扩面、且四效果只有一效果需要标注不成体系)。 -5. 提交切分与 worktree 分支命名。 - -## 11. 待裁点 - -**裁点 R(主裁点)· parity 重锚并账——已落甲(2026-10-25 用户裁「授权并账重锚」)**:T2 内按 sim-data/README.md 档位与流程重制锚(一次重锚并出账「结算明细日志行序重锚批」待办条目——该条目 2026-10-21 裁「批准另立、发起时点另定」,本次裁决即发起时点落定);批内对拍绿、无 skip 挂账。乙案(skip+另批)淘汰。本轮裁决前两案并列原文:甲=授权并账(推荐依据=乙案留 skip 挂账与读数对拍窗口期缺口、甲案一次出账两待办);乙=批内落 skip(先例 git d00f24a8)+重锚批另立。无第三路(重锚发起权在用户,D4)。 - -## 12. 自审六查与 grilling 复核记录 - -**自审六查(2026-10-25 写卡会话,v1.0)**:①规格覆盖——a1–a6→T1/T2、六断言/校验/撤销/产出物→T1/T2,指到 wr1–wr5;②步骤扫描;③类型一致性——接口块与 A3/A4/A7 实查一致;④审查焦点——呈现零变化靠 fallback 核验、parity 必红预登记、空来源先拆、counter 键同名残留预注记;⑤篇幅比例——零实现体;⑥落位预检——零新增件、三处复用已答。 - -**grilling 第一轮复核记录(2026-10-25,独立子代理对抗复核,判「回炉」一阻断)**:①阻断=a2 校验段零撤销证明(四断言只钉合法行、违约路径无断言;校验落位还开放为「前后均可」)——v1.1 折入:a2 落位收紧「emit 之前」+负路径断言+T2② 回退校验段证明+wr2-np 对照表行;②应修五条全折入——撤销证明机制句修正(headless --script 下 assert 只中断当前函数不断行,A5/T2③ 措辞按实跑语义改)、对拍口径补 source_class 三字段统一(契约 2/§8.1/§8.3/§9 四处)、撤销证明①限定「被断言钉住的发射点」并补 fx_reveal 落空行断言③(六发射点全有断言载体)、a3 裸键呈现差异申报(A6 补 source_label 机制+§10 白名单第 4 条处置+T2 目检)、grep 残留清单升格为 A8 七类身份清单+L3 改「清单外新身份」;③建议四条全折入——A9 先例名目订正、T1 拆三步、契约 2 随机流改「全部封闭随机流」并注九流名、锚必红升格实测凭据(A7 锚内行型计数 1520/1329+T0 基线表记数义务+锚红机制 feat_mode 注记)。核查通过项:六发射点/头注/豁免常量行号全属实、测试面四串零行型值直引、golden/probe/sim 零消费面、extra 平铺无键冲突、13 节结构齐、第 13 条已入契约 5。 - -**grilling 第二轮闭合复检记录(2026-10-25,独立子代理,判「回炉(单点)」)**:第一轮全部条目核闭合(阻断/五应修/四建议逐条落位属实);**新阻断一处**=wr2-np 负路径断言与闸机错误扫描互斥——run_all.gd:133-136 非负面套件输出含 SCRIPT ERROR 即判 FAIL,GDScript assert 失败必产 SCRIPT ERROR 且不可捕获,a2 按 assert 实装后负路径断言若在非负面套件内则闸 02 必红、「六断言绿」不可达。v1.2 折入:负路径断言载体改**独立负面小套件**(extended_row_violation_test.gd,manifest `expect=1, negative=true`——负面豁免机制先例 :49-50 同款)+撤销证明②改「退出码 0 ≠ expect 1」口径+文件结构图/接口块/预检/估时随更(新增件一件+manifest 登记一行,预检节补不能复用既有负面套件的依据——现役负面套件全在 data_config 域、负面语义要求独立进程)。复检同轮确认:卡面其余零新裂缝。 diff --git a/reports/需求卡片-结构小件定点修批-2026-10-26.md b/reports/需求卡片-结构小件定点修批-2026-10-26.md index 95495d0f..4415c69b 100644 --- a/reports/需求卡片-结构小件定点修批-2026-10-26.md +++ b/reports/需求卡片-结构小件定点修批-2026-10-26.md @@ -71,7 +71,7 @@ **做**:p1–p6;新断言两条;探针回归;撤销证明;产出物。 **不做**: -- 件②level_map 三段(独立卡:[需求卡片-levelmap装配越界与BFS缓存批-2026-10-26.md](需求卡片-levelmap装配越界与BFS缓存批-2026-10-26.md)); +- 件②level_map 三段(独立卡:独立卡已随迭代 38 卡① 实现合回并按「吸收即死」退役(git 提交 b85b3b45/8ea7cfba 可考)); - orchestrator 自身 `_fatal` 改造(已有封印,审计未点); - run_all.gd/probe_gate.sh 挂死防护(闸壳件②——工程直改通道,另拆注); - confirm_dialog 的 open/close 方法本体(收口在调用面,方法语义不动)。 diff --git a/reports/需求卡片-结算行缓冲类型错修复批-2026-10-26.md b/reports/需求卡片-结算行缓冲类型错修复批-2026-10-26.md deleted file mode 100644 index bbe73400..00000000 --- a/reports/需求卡片-结算行缓冲类型错修复批-2026-10-26.md +++ /dev/null @@ -1,143 +0,0 @@ -# 需求卡片:结算行缓冲类型错修复批(_round_rows TypedArray 运行期错误) - -- 版本:**v1.2**(v1.0→一轮「通过(附两应修)」→v1.1→二轮闭合复检通过(残留两处随轮处理)→v1.2 定稿,复核记录见 §12) -- 来源:[待办清单](../待办清单.md)「闸与探针存量噪声两件——_round_rows 类型错与批上下文挂死」条目之件①(2026-10-25 登记,状态=待写卡·备选)(唯一事实源:工程证据指认=迭代 36 批末闸机观测〔绿跑日志复现运行期 TypedArray 错误〕+本卡 §3 行号级实查) -- 归属:`game/presentation/views/battle_log_view.gd`(类型声明一行)+探针日志断言面 -- 排期:未编入(迭代批卡片;估时 ≈0.25 工作日) -- 开工门:U0+复核门过(§12);零待裁点 - -## 0. 前置依赖与并行性 - -- **第〇步核对(2026-10-26 写卡会话)**:来源条目=需求性工程条目(bug 证据带 file:line),跳过设计线放行。**条目拆注**:条目两件中件①(产品码类型错)=需求改动走本卡;件②(闸壳 per-suite 挂死与进程树回收)改 `tools/` 闸件=**工程改动走直改通道,不属本卡**(§5 不做+条目拆注随本批复核同步登记)。 -- 与迭代 37 零交叠;与 2026-10-25 两批卡零文件交叠(卡 A 触 battle_log_view 仅核验零改动——本卡改 :17 类型声明与其 a5 核验面(match 分支/fallback)无叠)。 - -## 1. 目标与完成定义 - -**目标**:`_round_rows` 缓冲的类型声明与实际承载数据(格式化产物 String)对齐——TypedArray 运行期错误消失,**「上轮摘要」功能随之恢复**(现状 append 全数失败=缓冲恒空=摘要功能已死,G2);这是本卡唯一申报的玩家可见行为恢复,缓冲内容与消费序不变。 - -**改动单元清单**(🔴 契约 1): - -| # | 单元(实查) | 改法 | 依据 | -|---|---|---|---| -| g1 | `battle_log_view.gd:17` `var _round_rows: Array[Dictionary] = []`——而 append 的是 `_format_row` 返回的 String(:96 `append_row` 分支/:126 `_flush_pending_agg` 分支),消费面 :73-76 `for bb in _round_rows:` 把元素当 String 拼 `_summary` | 声明改 `Array[String]`——一行;缓冲语义(「本结算轮行缓冲·上轮摘要构建源」)不变,append 点与消费点零触碰 | 条目件①证据;GDScript TypedArray 运行期类型检查(append 异型即错误行——日志失真断言仍绿的根源) | - -**完成定义**: - -1. g1 落地;ui_click_probe 真实跑批日志零该 TypedArray 错误行(§8 wr1 判据①)+**摘要恢复正向断言绿**(wr1 判据②:结算轮结束后 `_summary.text` 非空); -2. 除申报的摘要恢复外呈现零变化;全套闸按本批改动域选档全绿; -3. 撤销证明一条(wr1);三份产出物写齐(T1)。 - -## 2. 设计事实源 - -| # | 出处 | 取用条款 | -|---|---|---| -| D1 | 工程证据指认=条目实况(迭代 36 批末闸机观测——绿跑日志复现)+本卡 §3 实查 | 缺陷存在事实 | -| D2 | [code-conventions](../design/engineering/code-conventions.md) §2(类型显式) | 类型声明与承载一致 | - -## 3. 现状事实(2026-10-26 写卡会话实查于 master eb04313b;开工日 T0 复核行号) - -| # | 事实 | 出处 | -|---|---|---| -| G1 | 声明 `Array[Dictionary]`(:17);append 两侧均为 String(:95-96 `var bb := _format_row(row)` → `append(bb)`;:126 `_flush_pending_agg` 同款);消费 :73-76 逐元素当 String 拼接 `_summary.text` 后 `clear()`(:82) | `game/presentation/views/battle_log_view.gd:17/73-82/95-96/126` | -| G2 | 运行期错误在绿跑复现(条目证据):TypedArray append 异型打 SCRIPT ERROR 行——**日志失真但断言仍绿**(断言不查该错误行);错误行进闸批日志即错误扫描噪声源(若闸扫描收紧则成假红) | 条目实况(迭代 36 批末观测) | -| G3 | 复现载体=ui_click_probe(真实冒险路径驱动结算行流经 append_row);battle_log_view 同路径自身复现。**功能已死实证**:append 全数失败 → `_round_rows` 恒空 → `_summary` 构建 :73-74 空即 return——「上轮摘要」自类型错引入以来从未显示 | 条目实况;`game/presentation/views/battle_log_view.gd:73-74` | - -## 4. 设计契约(红线,违反 = L3 停机呈报) - -🔴 **契约 1 · 改动面封闭**:只改 :17 一行类型声明;append/消费/清空/clear 时序零触碰。**行为恢复申报**:修复后上轮摘要从恒空恢复为正常显示=唯一行为面(wr1 正向断言承载);除此之外呈现逐字节不变。 - -🔴 **契约 2 · 缺陷修复不扩面**:不顺手改 `_format_row`/聚合域/摘要构建;发现的第二处类型错另呈报(L3)。 - -## 5. 范围边界 - -**做**:g1;探针日志验证;撤销证明;产出物。 - -**不做**: -- **条目件②(闸壳挂死与进程树回收)**——改 `tools/probe_gate.sh`(per-suite timeout 树杀)与 `game/tests/run_all.gd`(OS.execute 阻塞面超时守护)=工程改动(闸件/测试基建),走直改通道不写卡;随本批在待办清单条目内拆注(件①归本卡、件②留工程直改); -- 聚合域/格式化面任何改动。 - -## 6. 关联文档同步面 - -| 文档 | 关联点 | 同步义务 | -|---|---|---| -| `待办清单.md` | 来源条目拆注(件①已写卡·本卡;件②留工程直改)+状态推进 | 反哺点 · 列清单(①:拆注与状态核对) | - -## 7. 任务卡 - -### 卡前 · 文件结构图 - -| 文件 | 职责 | 行为改动 | -|---|---|---| -| `game/presentation/views/battle_log_view.gd` | g1 类型声明一行(复用既有·修改) | 行为改动(运行期错误消失)→ wr1 | - -(零新增文件、零新增函数。) - -### 接口块 - -- **g1**(:17 原位):`var _round_rows: Array[String] = [] # 本结算轮行缓冲(上轮摘要构建源)`——注释随行保留。 -- **wr1 判据**(两条):①ui_click_probe 直跑(真实冒险路径)输出日志零 `_round_rows` TypedArray 错误行(**限定该错误行**——不扩大到一切 SCRIPT ERROR,防无关错误假红);②摘要恢复正向断言一条(落现役探针/系统测试——T0 定名:结算轮结束后 `log_view._summary.text` 非空),改前该断言必红(缓冲恒空)=撤销证明同源载体。 -- **最窄闸**:ui_click_probe 单件直跑(改前改后日志对照);全套闸按本批改动域选档。 - -### 落位与可复用性预检 - -- **零新增件**:一行类型修正;复现载体复用现役 ui_click_probe。 -- **复用面/唯一面**:缓冲仍单点单职责;无第二处同型缓冲(grep `_round_rows` 全库仅本文件)。 -- **分层**:presentation 视图内部类型面;零跨层。 - -### T0 事实坐实(≈0.05d) - -- [ ] 复核 G1–G3(重点:改前基线日志留存——错误行出现位置与频次记录)。可核查结果:基线日志对照表进实现报告素材。 - -### T1 修复+验证(≈0.15d) - -- [ ] 实装 g1。可核查结果:ui_click_probe 直跑日志零 TypedArray 错误行(与 T0 基线对照);现役断言全绿。 -- [ ] 验证步骤:全套闸按域选档跑一次全绿。 - -### T2 撤销证明+产出物落位卡(≈0.05d,末卡) - -- [ ] 撤销证明一条:回退 g1 hunk(类型还原 Array[Dictionary])→ ui_click_probe 直跑日志复现 TypedArray 错误行即红 → 还原复绿。记录进实现报告。 -- [ ] 写齐三份产出物(实现报告〔基线对照表+实机目检总清单——结算明细带轮摘要目检一项(登记不阻塞)〕/代拍板追认单/反哺点清单〔§6 逐条落点〕)。 -- [ ] 合并前置:独立验收审计(§8.3)逐行「通过」。 - -**估时合计 ≈0.25d**。编排注记:微件卡;与卡 A(明细行收敛)同触 battle_log_view 不同面(类型行 vs 核验面)——同波无冲突。 - -## 8. 验证闸 - -### 8.1 改动—验收对照表 - -| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 撤销证明 | -|---|---|---|---|---|---| -| wr1 缓冲类型对齐·错误消失+摘要恢复 | battle_log_view.gd:17 一行 | ①ui_click_probe 日志零该 TypedArray 错误行〔wr1-a〕(与改前基线对照)+②摘要非空正向断言〔wr1-b〕(T0 定落点) | 探针+日志 | ui_click_probe 真实冒险路径(结算行流经 append_row/聚合两分支) | 回退 g1 hunk → ②断言红(缓冲复恒空)+①错误行复现(T2) | -| wr2 产出物 | T2 三份 | 件核〔wr2〕 | — | — | 缺项红 | - -### 8.2 测试削弱申报 - -零(既有断言零改动;新增正向断言一条〔wr1-b〕——现役断言不查该错误〔G2〕,正因如此新增,非削弱)。 - - - -### 8.3 独立验收审计 - -入口=未参与实现的会话或子代理;报告落 `reports/iter-验收审计-<日期>.md`;抽查重点=改动面封闭(一行核对)、基线对照表在案、除申报的摘要恢复外呈现零变化(现役断言绿读数)。未过不得合并。 - -## 9. 异常分级 - -- **L1(自救)**:无(一行改动零裁量面)。 -- **L2(记录继续)**:行号漂移。 -- **L3(停机呈报)**:类型修正后呈现输出有变(契约 1 破——缓冲语义另有隐患);发现第二处同型 TypedArray 错误。 - -## 10. 代拍板白名单(超清单必呈报) - -1. 提交切分与 worktree 分支命名。 - -## 11. 待裁点 - -**零待裁点,开工门=U0。** 灰色推导一处(呈报可否决):条目件②不并入本卡、走工程直改——依据=改动四类判据(闸件/测试基建不改变游戏行为,禁写卡直改通道);若用户裁两件并批,件②以工程批形态与本卡同 worktree 分批提交(不混入本卡)。 - -## 12. 自审六查与复核记录 - -**自审六查(2026-10-26 写卡会话)**:①规格覆盖——g1→T1/wr1、撤销/产出物→T2/wr2;②步骤扫描;③类型一致性——G1 两侧 append 均 String 实查;④审查焦点——呈现零变化护栏(契约 1)、件②通道拆注(§0/§5);⑤篇幅比例;⑥落位预检——零新增件、唯一缓冲点已答。 - -**grilling 一轮复核记录(2026-10-26,独立子代理对抗复核,判「通过(附两应修)」)**:①「呈现零变化」与修复本质矛盾(现状摘要功能已死——append 全数失败缓冲恒空;修复=玩家可见行为恢复)——v1.1 折入:目标/契约 1/完成定义改「申报内行为恢复」口径+G3 补 :73-74 空即 return 实证+wr1-b 正向断言(改前必红=撤销证明同源);②wr1 判据「零 SCRIPT ERROR 行」过宽——收窄为该 TypedArray 错误行;③复核确认=事实全核实(:17/:95-96/:126/:76-82、全库唯一)、件②拆走工程直改判定正确、撤销证明可执行。 - -**二轮闭合复检(2026-10-26)**:两应修核闭合;§8.3 漏改处与本记录块归位随本轮一并处理。 diff --git a/reports/需求卡片-调试入口写死行删除批-2026-10-25.md b/reports/需求卡片-调试入口写死行删除批-2026-10-25.md deleted file mode 100644 index 91f04be7..00000000 --- a/reports/需求卡片-调试入口写死行删除批-2026-10-25.md +++ /dev/null @@ -1,194 +0,0 @@ -# 需求卡片:调试入口写死行删除批(main.gd:199 发布态清理+角标断言面换代+随动同步面) - -- 版本:**v1.3**(2026-10-25 v1.0 成文→grilling 第一轮判「回炉」(一阻断)→v1.1 折入→第二轮闭合复检判「通过」→v1.2 措辞对齐→同日用户裁点 D **甲**(确认纯删)→v1.3 裁点落定定稿,复核记录见 §12) -- 开工门:U0+grilling 复核门过(§12)+裁点 D 已落甲(确认纯删,2026-10-25) -- 来源:[待办清单](../待办清单.md)「调试入口写死行必须在发布前删除——game/presentation/main.gd:196」条目(2026-10-18 登记,状态=待写卡)(唯一事实源:工程证据指认=条目实况〔2026-10-16 调试入口批实装记录+:199 行「发布前清」自注〕+本卡 §3 行号级实查——含登记时未查明的既有断言涟漪面与随动同步面) -- 归属:`game/presentation/main.gd`(删一行+注释随修)+ `game/tests/system_test.gd`+`game/probe/ui_click_probe.gd`+`game/probe/ui_tune_probe.gd`(三处既有断言换代)+ `game/tests/验证集清单.md`(改判对账)+ `game/README.md`(运行说明)+ `game/tests/golden/menu_boot.png`(基线重制,§10 代拍板) -- 排期:未编入(迭代批卡片;估时 ≈0.75 工作日) -- 开工门:U0+grilling 复核门过(§12)+§11 裁点落定 - -## 0. 前置依赖与并行性 - -- **第〇步核对(2026-10-25 写卡会话)**:来源条目=需求性工程条目(bug 证据带 file:line),跳过设计线、凭证据指认放行;条目状态=待写卡。 -- 与迭代 37 R1(main 判离拆件,已合回 8faf1763)同文件不同面——本卡只触 :73/:199-200 与三断言处及随动同步面,R1 拆出的件零触碰;行号以 T0 复核为准。 -- 与卡 A/卡 B 零逻辑耦合——可同迭代并行波(与卡 B 同触 ui_click_probe 不同段:本卡角标段 :325-327,卡 B wa4 段 :415-425〔其 :670-672 历史注记按其 §5 豁免不动〕——无冲突)。 -- **前置时序**:本卡删除动作使开发态调试 UI 入口永久关闭(§11 裁点甲语义)——编排时排在本迭代内不早于依赖调试浮窗人工操作的最后一张卡(现役卡片无此依赖;将来卡若有,排其后)。 - -## 1. 目标与完成定义 - -**目标**:删除 2026-10-16 调试入口批写死的门控行(发布前清理义务),调试浮层入口回到发布态(角标恒隐、浮窗无 UI 开启口);三处钉住「恒开令」的既有断言随发布态换代为反向断言;验证集清单、运行说明、渲染基线三处随动同步落地;被覆盖的回归语义退役面逐项申报。 - -**改动单元清单**(🔴 契约 1): - -| # | 单元(实查) | 改法 | 依据 | -|---|---|---|---| -| c1 | 写死门控行 `main.gd:199`(`_debug_entry = true # 调试入口门控写死=true(不读 DS_DEBUG 环境变量;发布前清)`) | 整行删除——`_debug_entry`(:73,缺省 `false`)恒 false,:200 `debug_badge.visible = _debug_entry` 随之恒隐 | 条目实况+:199 自注「发布前清」 | -| c2 | :73 声明注释「写死=true——恒开:启动即开浮窗+两屏角标点亮;_ready 赋值」——双重过时(写死描述随删行失效;「启动即开浮窗」早已不符——构建期显式初隐 ui_assembler.gd:195,开启唯经角标点击) | 随行修订为现状语义(缺省 false=发布态:角标恒隐、调试入口不可达);沿革只进 git log,注释零变更叙事 | 注释与实现相悖=审计判红面 | -| c3 | `system_test.gd:206-207` V2f 第二断言 `main.debug_badge != null and main.debug_badge.visible`(注记〔2026-10-16 用户令〕)——删行必红 | 反转:`not main.debug_badge.visible`,注记换代「发布态」;前一条「boot 不自动开浮窗」断言保留成立零触碰 | 断言对象随发布态换代;反转后断言即撤销证明载体(wr1) | -| c4 | `ui_click_probe.gd:325-327` 设置面开中「角标不可见=最顶层浮层失守」断言——删行必红 | 反转:断言角标在设置面开中保持恒隐(发布态语义);原「最顶层浮层不被遮挡」回归语义随调试浮层发布态退役——§8.2 申报 | 同 c3 | -| c5 | `ui_tune_probe.gd:116-126`「对局中角标点亮+真实信号路径开窗」段——:117 可见性断言删行必红、else 分支死路 | 段内换代:角标点亮断言反转(恒隐);「对局中开浮窗不锁棋盘输入」回归(P2 甲/T2 防护)改经 `main._show_debug_overlay()` 直调承载(同文件 :61 既有直调先例、TAG_NON_LOCKING 输入锁面零变化、回归语义不丢);:44-49 段程序性 `pressed.emit()` 不依赖可见性、零触碰 | 回归语义保载;按钮不可见≠信号路径删除(处理器 :861 保留) | -| c6 | `game/tests/验证集清单.md:139`(序号 74)冻结 V2f 旧 cond `main.debug_badge != null and main.debug_badge.visible`(行号/序号随 2026-10-25 迭代 37 结项补记清单重制漂移,T0 复核) | 改判同步:清单行随 c3 新 cond+标签换代;对账=`python tools/extract_checks.py --diff`(该对账不在闸内——T1 显式步骤承载,禁静默出库失真清单) | [test-conventions](../design/engineering/test-conventions.md) §8.3 维护锚+验证集清单头注「断言改判必须同步本清单,清单没跟上视同未完成」 | -| c7 | `game/README.md:16` 运行说明「`调试` 角标浮窗(恒开——2026-10-16 用户令 DS_DEBUG 写死…)」 | 随发布态改写(角标发布态恒隐;调试浮窗功能面说明保留但入口表述换代——具体措辞 L1) | 运行者入口指引失真;game/ 属实现批可写区 | -| c8 | `game/tests/golden/menu_boot.png` 基线右下角含可见角标像素(约 40×37px,x≈1222-1262/y≈748-785)——删行后差异约 0.14%,被 golden 2% 容差吸收、gate 仍绿 | §10 代拍板(推荐**显式重制基线+呈报**——render_gate 自身口径「预期面视觉变化=显式重制基线」;备选=容差吸收留痕——淘汰:基线长期带幽灵角标与发布态不符) | [render_gate](../tools/render_gate.sh):154 口径 | - -**完成定义**: - -1. c1–c8 落地;`_debug_entry` 全文件只剩 :73 声明与 :200 读取两处引用; -2. 反转断言三处绿+验证集清单对账零差异+撤销证明一条(恢复 :199 → 三处反转断言齐红 → 还原复绿); -3. 全套闸按本批改动域选档全绿(system_test/两探针/渲染面真实跑批——c8 重制后 gate 05 绿); -4. 三份产出物写齐(T2),实机目检总清单登记「设置面/菜单/对局中角标恒隐」目检项(登记不阻塞)。 - -## 2. 设计事实源 - -| # | 出处 | 取用条款 | -|---|---|---| -| D1 | 工程证据指认=待办清单条目实况(2026-10-16 调试入口批实装记录+:199 自注「发布前清」)+本卡 §3 实查 | 删除义务与「零第二改动点」原判(行为面) | -| D2 | 2026-10-16 用户令(V2f 断言注记在案)——恒开态与发布态的换代关系 | 断言换代(非削弱)依据 | -| D3 | [test-conventions](../design/engineering/test-conventions.md) §8 断言换代/削弱申报口径+§8.3 验证集清单维护锚 | c3–c6 的申报与对账义务 | -| D4 | 本卡 §11 裁点(2026-10-25 写卡会话呈报、用户落定) | 「开发态调试入口同断」的取舍依据 | - -## 3. 现状事实(2026-10-25 写卡会话实查+grilling 独立补查于 master 4a88c259;开工日 T0 复核行号) - -| # | 事实 | 出处 | -|---|---|---| -| C1 | `_debug_entry` 全文件三处::73 声明(缺省 `false`,注释双重过时)/:199 写死赋值(「发布前清」自注)/:200 角标可见性读取——删 :199 后行为面零第二改动点(:200 读缺省) | `game/presentation/main.gd:73/199/200` | -| C2 | 调试浮窗开启路径单点:`_show_debug_overlay`(main.gd:857 → main_debug_flow.gd:20-26 `_open_modal`——全仓唯一 `_open_modal(debug_overlay)`)。**生产调用方唯一**=角标点击(main_debug_flow.gd:31-36 形制守卫,无可见性检查——程序性 emit 亦可走通);**测试直调三处**=ui_tune_probe.gd:61/ui_struct_probe.gd:111/system_test.gd:525(c5 直调承载的既有先例);main_debug_flow.gd:87 浮窗内入口只收窗不开窗;构建期显式初隐 ui_assembler.gd:195;DS_DEBUG 环境变量通道 2026-10-16 写死时已断——角标恒隐后浮窗无任何 UI 开启口 | `game/presentation/main.gd:857-862`;`game/presentation/main_debug_flow.gd:20-36/87`;`game/presentation/ui_assembler.gd:195` | -| C3 | 角标点击处理器与便捷取用面保留在位(本卡不删):`_on_debug_badge_pressed`(:861-862)、:247 便捷取用、:56 LAYER_CONTRACT 登记——调试体系整体退役属另一批(范围边界) | `game/presentation/main.gd:56/246-247/861-862` | -| C4 | 既有断言三处钉「恒开令」、删行必红:system_test.gd:206 V2f 角标 boot 可见;ui_click_probe.gd:325-327 设置面开中角标可见(遮挡判据);ui_tune_probe.gd:116-126 对局中角标点亮+信号路径开窗(else 分支含输入锁回归)。**第四处注记**:smoke_boot.gd:75 `check(main.get("debug_badge") != null, …)` 仅装配 null 检查——删行后仍绿、不钉恒开、**非红处**(全仓 grep 命中时勿误触 L3「第四处钉恒开」停机) | 四文件实查 | -| C5 | ui_tune_probe.gd:44-49 段(boot 菜单角标点击开窗)为程序性 `pressed.emit()`+浮窗可见断言——不依赖角标可见性,删行后仍绿零触碰 | `game/probe/ui_tune_probe.gd:44-49` | -| C6 | 批量模拟主入口在 CLI(`--script res://sim/…`)不经调试 UI——删角标断的是人工调试便利(滑条/钥石/诊断转储 UI 入口),MC/闸机测量面零影响;**例外**=渲染面:menu_boot.png 基线右下角含可见角标像素(c8),删行后 golden 容差吸收仍绿但基线与发布态不符 | `game/sim/` 实查;`game/tests/golden/menu_boot.png` | -| C7 | 验证集清单.md:139(序号 74——2026-10-25 迭代 37 结项补记清单重制后现位)冻结 V2f 旧 cond——c3 改判须同步本清单(对账工具 `tools/extract_checks.py --diff` 不在闸内,须卡内显式步骤承载) | `game/tests/验证集清单.md:139`;[test-conventions](../design/engineering/test-conventions.md) §8.3 | -| C8 | `game/README.md:16` 运行说明载「恒开」表述——运行者入口指引随删行失真 | `game/README.md:16` | - -## 4. 设计契约(红线,违反 = L3 停机呈报) - -🔴 **契约 1 · 改动面封闭**:行为改动只 c1 删一行;c2 注释随修;c3–c5 只做断言换代与承载路径切换(`_show_debug_overlay` 直调);c6–c8 随动同步面;debug_overlay 体系、ModalFlow 门禁、输入锁、LAYER_CONTRACT 登记、角标处理器(C3)零触碰。 - -🔴 **契约 2 · 发布态语义唯一**:删行后 `_debug_entry` 不得出现第三处赋值(含环境变量读取——恢复门控属 §11 乙案、未裁不实装);角标恒隐是唯一终态。 - -🔴 **契约 3 · 断言换代不削弱+清单跟上**:c3–c5 每处必须以反向断言替代,禁只删不断言;「对局中开浮窗不锁输入」回归经直调承载不丢(c5);退役语义逐项进 §8.2 申报;c6 验证集清单对账零差异——「清单没跟上视同未完成」。 - -🔴 **契约 4 · 撤销证明钉行**:恢复 :199 单行 → 三处反向断言必须齐红;wr2 的回退=c5 整段回原形(只把直调换回 emit 而保留反转断言时该段仍绿——emit 不依赖可见性,红因在恢复的 if 分支=wr1 载体;实现期禁按字面只换回 emit)。 - -🔴 **契约 5 · 禁为机检文本保留无效成员**(req-card 第 13 条,本卡改机检提取面故立):禁为免重制验证集清单/渲染基线而保留旧 cond 或旧像素(c6/c8 歧路拦截);c5 段内既有 `conn_count==11` 计数断言(ui_tune_probe.gd:220)若因换代形态影响计数,停卡呈报不自行放宽;机检键与本卡契约互斥时一律 L3。 - -## 5. 范围边界 - -**做**:c1–c8;撤销证明;产出物;实机目检登记。 - -**不做**: -- 调试体系整体退役(debug_overlay 件本体、角标处理器、LAYER_CONTRACT 登记、debug_session——发布包排除属发布工程批); -- 恢复 DS_DEBUG 环境变量门控(§11 乙案未裁不实装); -- design/ 四处门控表述的落文(§6 反哺点通道——battle.md/生涯.md/test-conventions/code-architecture.json,实现批禁写 design/); -- tune_sim_controller/两层调试并发互斥缺陷(审计 §二 ④——另册在案); -- :200 行为语义变化(读缺省 false——不删 :200、不改其注释);smoke_boot.gd:75 装配检查(C4——保留不动)。 - -## 6. 关联文档同步面 - -| 文档 | 关联点 | 同步义务 | -|---|---|---| -| [battle](../design/gdd/ux/battle.md):159/229 | 调试浮窗入口/DS_DEBUG 门控表述——删行后「入口在座」类陈述落空(含 2026-10-16 恒开批的存量失真一并显形) | 反哺点 · 列清单(①:门控表述换代——发布态恒隐口径) | -| [生涯](../design/gdd/systems/跨局循环/生涯.md):18 | 调试入口描述随删行失真(T0 核具体句) | 反哺点 · 列清单(②) | -| [test-conventions](../design/engineering/test-conventions.md):49 | 调试入口门控表述 | 反哺点 · 列清单(③) | -| [code-architecture.json](../design/engineering/architecture/code-architecture.json):227 | 「DS_DEBUG 门控」节点副标 | 反哺点 · 列清单(④) | -| `待办清单.md` | 来源条目状态推进(已写卡→编迭代→完成即删) | 反哺点 · 列清单(⑤:状态核对注记) | - -(game/README.md 与验证集清单.md 属实现批可写区,已列改动单元 c6/c7,不走反哺。) - -## 7. 任务卡 - -### 卡前 · 文件结构图 - -| 文件 | 职责 | 行为改动 | -|---|---|---| -| `game/presentation/main.gd` | c1 删 :199+c2 注释随修(复用既有·修改) | 行为改动 → wr1 | -| `game/tests/system_test.gd` | c3 V2f 断言反转(复用既有·改断言) | 断言面 → wr1 | -| `game/probe/ui_click_probe.gd` | c4 设置面断言反转(复用既有·改断言) | 断言面 → wr1 | -| `game/probe/ui_tune_probe.gd` | c5 对局段换代+直调承载(复用既有·改断言/路径) | 断言面 → wr1/wr2 | -| `game/tests/验证集清单.md` | c6 改判对账(复用既有·同步) | 非行为改动(清单面)→ wr1 | -| `game/README.md` | c7 运行说明换代(复用既有·修改) | 非行为改动(文档面) | -| `game/tests/golden/menu_boot.png` | c8 基线重制(复用既有·重生成) | 非行为改动(基线面)→ wr1 | - -(零新增文件、零新增函数。) - -### 接口块 - -- **c3 断言**(system_test.gd V2f 第二条原位):`check(main.debug_badge != null and not main.debug_badge.visible, "V2f 调试浮层角标发布态恒隐(2026-10-25 删写死行批)")`——验证集清单序号 74 行(:139)同步此 cond+标签。 -- **c4 断言**(ui_click_probe.gd:325 原位反转):`if main.debug_badge == null or main.debug_badge.visible: _problems.append("设置面开中调试角标可见(发布态恒隐失守)")`。 -- **c5 段形**(ui_tune_probe.gd:116-126):角标可见断言反转(同 c4 句式);`else` 分支的 `dbg_badge.pressed.emit()` 改 `main._show_debug_overlay()` 直调(:61 既有直调先例;后续浮窗可见/输入锁/六项读数断言保持原样)。 -- **c6 对账命令**:`python tools/extract_checks.py --diff` → 判据=零差异(清单与代码 check 全对齐)。 -- **取用**:无。**产出**:无(末卡)。 -- **最窄闸**:system_test 直跑(`python tools/run_system_test.py`)+ui_click_probe/ui_tune_probe 单件直跑+渲染面(c8 重制后);全套闸按本批改动域选档。 - -### 落位与可复用性预检 - -- **零新增件**:三处断言换代全在现役套件原位;直调路径复用 `_show_debug_overlay` 既有单口与 :61 直调先例——不造第二开启口;清单对账复用 `tools/extract_checks.py` 既有工具;基线重制走 render_gate 既有重制口径。 -- **复用面**:撤销证明载体=c3 反转断言本身——不另造证明件。 -- **唯一面**:`_debug_entry` 赋值点删后唯一(:73 缺省);浮窗开启口唯一性不变(C2 单点);验证集清单仍是断言冻结唯一处(c6 只换代不旁立)。 -- **分层**:presentation 面改动,core 零触碰;探针改动属闸面断言换代(test-conventions 既有口径)。 - -### T0 事实坐实(≈0.1d) - -- [ ] 复核 C1–C8(重点:R1 拆件后 main.gd 行号、三断言原位、C4 第四处注记、C7 清单行、C8 基线像素坐标);确认 §11 裁点与 §10 c8 处置落定值。可核查结果:断言原位清单+裁点注记进实现报告素材。 - -### T1 删除+断言换代(≈0.4d) - -- [ ] 实装 c1(删行)+c2(注释)。可核查结果:`grep -n "_debug_entry" game/presentation/main.gd` 恰两处(:73/:200)。 -- [ ] 实装 c3/c4(反转)+c5(换代+直调)。可核查结果:三断言反向形态在位。 -- [ ] 实装 c6(清单同步+对账)+c7(README)+c8(基线重制,按 §10 落定值)。可核查结果:extract_checks --diff 零差异;README 发布态表述;新基线在位。 -- [ ] 验收步骤:system_test+两探针直跑绿;全套闸按域选档跑一次全绿。 - -### T2 撤销证明+产出物落位卡(≈0.15d,末卡) - -- [ ] 撤销证明一条:恢复 :199 单行(git 回退该 hunk)→ c3/c4/c5 三处反向断言齐红(system_test 与两探针直跑)→ 还原复绿(wr2 的回退按契约 4=整段回原形)。记录进实现报告。 -- [ ] 写齐三份产出物(实现报告〔断言换代清单+退役语义申报+清单对账与基线重制记录+实机目检总清单——菜单/设置面/对局中角标恒隐三项〕/代拍板追认单/反哺点清单〔§6 五条逐条落点〕)。 -- [ ] 合并前置:独立验收审计(§8.3)逐行「通过」。 - -**估时合计 ≈0.75d**。编排注记:微件卡;断言换代与随动同步落地后闸面即恢复绿——无跨卡前置。 - -## 8. 验证闸 - -### 8.1 改动—验收对照表 - -| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 撤销证明 | -|---|---|---|---|---|---| -| wr1 发布态角标恒隐 | main.gd:199 删除+三断言反转+c6/c8 随动 | V2f 反转断言〔wr1〕+设置面反转〔wr1〕+对局段反转〔wr1〕+清单对账零差异+新基线 | 系统+探针+渲染 | system_test 真实启动+两探针真实跑批(main.tscn 实例化路径)+render 面真实跑批 | 恢复 :199 → 三断言齐红(T2) | -| wr2 对局中开窗回归保载 | ui_tune_probe.gd 对局段直调承载(c5) | 浮窗可见/输入锁不锁/六项读数断言保持绿〔wr2〕 | 探针 | `_show_debug_overlay` 真实单口直调(对局中真实场景) | 回退=c5 整段回原形 → 该段断言红(契约 4 口径) | -| wr3 产出物 | T2 三份 | 件核〔wr3〕 | — | — | 缺项红 | - -### 8.2 测试削弱申报(断言换代+语义退役) - -- **换代非削弱**:c3/c4/c5 角标可见断言三处由「恒开令」正向反转为「发布态恒隐」反向——断言对象随用户令换代(D2),判据强度不变。 -- **语义退役申报**:ui_click_probe.gd:325 原断言兼任的「float 末位浮层不被设置面遮挡」回归语义,随角标发布态退役失去宿主、**无替代载体**(发布包无调试浮层面;该判据的重建与调试体系整体退役批同域)。 -- **承载切换**:c5「对局中开浮窗不锁棋盘输入」由角标信号路径切换为 `_show_debug_overlay` 直调——门禁与 ModalFlow 面零变化,回归语义经 wr2 保载。 -- 既有断言零删除(三处全为原位反转/换代)。 - -### 8.3 独立验收审计 - -入口=未参与实现的会话或子代理;报告落 `reports/iter-验收审计-<日期>.md`;抽查重点=改动面封闭(契约 1)、三断言反转形态与撤销证明记录(契约 4 口径)、c6 对账记录与 c8 基线重制呈报、c5 直调后 :44-49 段未被顺手改、§8.2 申报与实际改动一致。未过不得合并。 - -## 9. 异常分级 - -- **L1(自救)**:c2/c7 注释与说明措辞;c5 段内直调落点与断言消息文本;c8 重制的操作细节。 -- **L2(记录继续)**:行号随 master 推进漂移(R1 拆件面);探针内无关断言的既有存量噪声。 -- **L3(停机呈报)**:删除后仍有**生产**路径可开浮窗(C2 单点论断失实——测试直调三处不算);反转断言在恢复 :199 后不红(契约 4 破);C4 三红处之外发现第五处钉「恒开」的既有断言(smoke_boot:75 装配检查已注记豁免);c5 段内 conn_count 计数断言受换代影响(契约 5);对局中直调开窗后输入锁行为异常(门禁回归破);基线重制流程与 render_gate 口径冲突。 - -## 10. 代拍板白名单(超清单必呈报) - -1. c2/c7 注释与说明具体措辞(语义=发布态恒隐)。 -2. 三处反向断言与清单行的消息文本。 -3. c5 直调在段内的具体落点(保持后续断言原序前提)。 -4. **c8 基线处置**:推荐显式重制+呈报(render_gate:154 口径、基线与发布态一致);备选容差吸收留痕(淘汰:幽灵角标长期驻基线)。 -5. 提交切分与 worktree 分支命名。 - -## 11. 待裁点 - -**裁点 D · 删除的代价确认(开发态调试入口同断)——已落甲(2026-10-25 用户裁「确认纯删」)**:断言三处随发布态换代(c3–c5)+随动同步(c6–c8);依据=2026-10-16 用户令本就注明「发布前清」、本卡即履行;批量模拟与闸机主入口全在 CLI;开发期偶需调试临时改 :73 缺省(本地不提交)。乙案(删行并恢复 DS_DEBUG 环境变量门控)淘汰——为可逆后手(发布工程批需要时再立),现在恢复=提前为未证实的需求付改动面;且违「零第二改动点」原判、新增门控代码+探针环境面适配+§6 四处文档反哺口径复杂化。本轮裁决前两案并列原文:甲=确认纯删(推荐);乙=恢复环境变量门控。丙案(不删留发布批)与本卡立项意图相悖,未列。 - -## 12. 自审六查与 grilling 复核记录 - -**自审六查(2026-10-25 写卡会话,v1.0)**:①规格覆盖——c1–c5→T1、撤销/产出物→T2;②步骤扫描;③类型一致性;④审查焦点——涟漪断言三处、撤销证明钉行、对局回归保载、语义退役申报;⑤篇幅比例;⑥落位预检。 - -**grilling 第一轮复核记录(2026-10-25,独立子代理对抗复核,判「回炉」一阻断)**:①阻断=验证集清单同步义务漏载(c3 改判 check 须同步 验证集清单.md:140 序号 75,test-conventions §8.3「清单没跟上视同未完成」、对账工具不在闸内)——v1.1 折入:c6 单元+T1 对账步骤+契约 3 收口;②应修四条全折入——§6「无关联」失实改列 battle.md:159/229/生涯.md:18/test-conventions.md:49/code-architecture.json:227 四处反哺点(§6 五行表);C2 调用方枚举订正(生产唯一=角标点击、「浮窗内入口」不存在、测试直调三处 :61/:111/:525 入载);game/README.md:16 运行说明入 c7;menu_boot.png 基线幽灵角标(约 40×37px、容差吸收仍绿)入 c8+C6 表述收窄;③建议四条全折入——wr2 回退口径写明(契约 4);smoke_boot:75 第四处注记(C4);T1 拆三步(删行/断言/同步分立);req-card 第 13 条立契约 5(含 conn_count 计数断言注记)。工程主体(C1/C3–C5 机理、撤销证明、闸面归属)复核为全部成立。 - -**grilling 第二轮闭合复检记录(2026-10-25,独立子代理,判「通过」)**:第一轮一阻断四应修四建议逐条核闭合属实(c6 清单对账、§6 五行、C2 枚举、c7/c8、契约 4/5 口径全部落位);新面抽查零裂缝(c5 直调先例、c6 新 cond 与清单行互指、c8 与 §8.2/§8.3/§10.4 互指、:44-49 段独立性均属实);交叉一致性核过(与卡 B 同文件不同段不交叠、三卡对注销条目表述一致)。v1.2 仅 §0 一句措辞随卡 B 对齐,内容零改。 diff --git a/roadmap.md b/roadmap.md index fde0ebeb..a37858b6 100644 --- a/roadmap.md +++ b/roadmap.md @@ -5,8 +5,8 @@ ## 当前位(只回答「现在该做什么」;三行内随批次换代,禁止在此扩写成状态快照) - **阶段**:M3——Alpha 版本的完整实现(2026-10-09 立规:未明令宣布完成前停留 M3,迭代只排 M3 需求,M4 不排期;根目录 stage.txt 为旧阶段开关仅存档)。 -- **迭代位**:迭代 1–37 全部已完成——迭代 37 四卡 2026-10-25 合回并完成批后收尾。 -- **下一步**:迭代 38 已编七卡(2026-10-26 编入,≈5.225 个工作日)、迭代 39 已编三卡(2026-10-26 编入,≈10.15 个工作日——P0「AdventureRunner 职责真拆分」主副卡,副卡硬前置主卡+技能池情境条件触发器卡排末位),均待开工,实现段由用户以 /iter 38 或 /iter 39 发令。待编池:营地交互重做卡⑤(排卡④之后)、卡④(已退回美术设计段,美术设计闭合后重立卡)、冒险前资源配比预设(冻结备选)、迭代 30 原卡②③(2026-10-17 已剔出迭代 30 规划、退回待设计,待美术/设计定稿后重新立卡)。 +- **迭代位**:迭代 1–38 全部已完成——迭代 38 六卡 2026-10-26 合回并完成批后收尾。 +- **下一步**:迭代 39 已编三卡(2026-10-26 编入,≈10.15 个工作日——P0「AdventureRunner 职责真拆分」主副卡,副卡硬前置主卡+技能池情境条件触发器卡排末位),待开工,实现段由用户以 /iter 39 发令。迭代 38 卡②(结构小件定点修批)停卡退回上游,验收载体处方随「gdstyle 存量债全量清偿」条目波 7 重裁。待编池:营地交互重做卡⑤(排卡④之后)、卡④(已退回美术设计段,美术设计闭合后重立卡)、冒险前资源配比预设(冻结备选)、迭代 30 原卡②③(2026-10-17 已剔出迭代 30 规划、退回待设计,待美术/设计定稿后重新立卡)。 ## 里程碑时间线 @@ -71,9 +71,10 @@ | 迭代 35 | 已完成(2026-10-25) | 已退役(git 历史可考) | 2026-10-21 | ≈15.25 个工作日〔用户特批 2026-10-21 超 10 个工作日〕 | 已退役(git 历史可考) | | 迭代 36 | 已完成(2026-10-25) | 已退役(git 历史可考) | 2026-10-24 | ≈5.25 个工作日 | 已退役(git 历史可考) | | 迭代 37 | 已完成(2026-10-25) | 已退役(git 历史可考) | 2026-10-25 | ≈8.25 个工作日 | 已退役(git 历史可考) | -| 迭代 38 | 待开工 | reports/需求卡片-levelmap装配越界与BFS缓存批-2026-10-26.md
reports/需求卡片-结构小件定点修批-2026-10-26.md
reports/需求卡片-效果引擎校验文案计数修正批-2026-10-25.md
reports/需求卡片-明细行扩展总型收敛批-2026-10-25.md
reports/需求卡片-奖励节点过时表述清扫批-2026-10-25.md
reports/需求卡片-结算行缓冲类型错修复批-2026-10-26.md
reports/需求卡片-调试入口写死行删除批-2026-10-25.md | 2026-10-26 | ≈5.225 个工作日 | — | +| 迭代 38 | 已完成(2026-10-26) | 已退役(git 历史可考) | 2026-10-26 | ≈5.225 个工作日 | 已退役(git 历史可考) | | 迭代 39 | 待开工 | reports/需求卡片-冒险域拆件与账本实体化批-2026-10-26.md
reports/需求卡片-同调配装充能域封装批-2026-10-26.md
reports/需求卡片-技能池情境条件触发器批-2026-10-26.md | 2026-10-26 | ≈10.15 个工作日〔用户特批 2026-10-26 超 10 个工作日〕 | — | +- 迭代 38 收口为带红合并〔用户特批 2026-10-26〕:09 静态扫描 S13 gdstyle 恶化 2 条经批准记入基线存量红(git 提交 c4c69701),卡② 停卡退上游待「gdstyle 存量债全量清偿」条目波 7 重裁。 - 历史行的「—」= 该列事实不可考:迭代 1~8 早于需求卡片制;编排时点与预计周期不再回溯,细节查 git 提交史。 - 「已退役(git 历史可考)」= 需求卡片或实现报告曾存在,已按「证据只留最新」退役;已完成迭代的实现报告列只填 reports/ 现存路径或本保留字,不填「—」。 - 新迭代行的编排与各列判据见 doc-conventions §12.2 与 iter-plan 技能,由流水线闸(`tools/pipeline_gate.py`)机检。 diff --git a/体验验证清单.md b/体验验证清单.md index 1604291d..ac83f320 100644 --- a/体验验证清单.md +++ b/体验验证清单.md @@ -412,3 +412,17 @@ | 7 | 模态层(卡①) | 模态层重复 open 不再吞旧账——多层叠加时关闭顺序正确 | - **红灯信号**:本批为等价重构+定点修,任何屏观感或交互读数与改前不一致即报缺陷(第 1–4 项对「改前」、第 5–7 项对卡片设计的修复预期)。 - **结论回流**:实现缺陷归待办清单登记新条目;不在试玩现场改数。 + +## ㊱ 迭代 38——六卡实机目检总清单(2026-10-26 随批后收尾登记) + +> 七卡编入、六卡合回(2026-10-26,git 提交 8ea7cfba;卡② 结构小件定点修批停卡退上游,无改动不登记目检项)。合回六卡=卡① 选路屏装配迁移+BFS 缓存、卡③ 校验文案计数动态化、卡④ 结算明细扩展行型收敛为单一型+效果载荷、卡⑤ 奖励节点注释与战报文案清扫、卡⑥ 结算明细行缓冲类型修复、卡⑦ 调试入口写死行删除。卡①③④⑥ 按等价重构/内部收敛口径收口(卡① 以改前 golden 基线对拍 0.00%、卡④ 以 parity 三变体逐位一致佐证),卡⑤⑦ 有玩家可见变化;机检已覆盖各卡撤销证明,真机观感仍要人眼。登记不阻塞(2026-10-12 真人检测立规);读数与论证详见实现报告(git 提交 6c37cf01)。 + +| # | 目检项 | 判据 | +|---|---|---| +| 1 | 选路屏状态栏与悬停高亮(卡①) | 状态栏文案(关卡名/GP/生命与血条/属性/加成行)与悬停格高亮、雾区信息面板——装配迁移+缓存后与改前一致,无错位、无缺项、无换格不刷新 | +| 2 | 奖励节点战报文案(卡⑤) | 奖励节点停点战报行为新句「关卡奖励点(三选一——选毕推进)」,不再出现「内容待定」类旧表述 | +| 3 | 结算明细带轮摘要(卡⑥) | 多轮结算的明细里「上轮摘要」正常显示(修复前该行被类型错误吞掉),逐轮分隔与明细行序可读 | +| 4 | 结算明细效果行与示警烟火来源(卡④) | 四类专长效果行(揭示/预览区/保险/排雷)文案与呈现同改前;示警烟火行新增来源标注 `fx_warning_beacon` 裸键渲染——可接受性与人眼可读性由本项定 | +| 5 | 调试角标发布态恒隐(卡⑦) | 菜单/设置面/对局中三处调试浮窗入口与角标恒不出现(写死行已删);浮窗仍可经开发工具宿主直调打开 | +- **红灯信号**:第 1、4 项与改前呈现不一致即报缺陷;第 2、3、5 项按修复/删除预期判——旧文案仍在、摘要仍缺、角标仍可见即报缺陷。 +- **结论回流**:实现缺陷归待办清单登记新条目;`fx_warning_beacon` 裸键的可读性判「不可接受」时,归呈现面后续批补来源中文名映射(`settlement.tres` 的 source_label_map 补键)。 diff --git a/待办清单.md b/待办清单.md index 0068d60f..22fbdc2a 100644 --- a/待办清单.md +++ b/待办清单.md @@ -58,28 +58,6 @@ **状态**:待文档设计 -#### 效果引擎校验文案计数错误——封闭事实词表数写死「9 项」实为 18(2026-10-25 登记,来源=审计发现) - -**实况**:证据=reports/审计-game代码结构审查-2026-10-24.md §三 漂移清单第 5 条(原「架构与规范对齐批」条目⑦,该条目 2026-10-25 闭合删除、未决先迁本条):game/core/effect_engine.gd:360 校验报错文案「事实词汇封闭 9 项」实为 18 项——一行字符串修订,零行为变化。属游戏代码字符串修订,按改动四类走需求改动通道。**2026-10-25 写卡会话复核与裁点**:FACTS 实数=19(审计 18→今 19 两次漂移实证);同文件头注 :21-23 另有一处写死计数(EFFECT_KINDS 注释「类型实数 24」实为 32)一并治理;用户裁修法=动态取 FACTS.size()(不留死数);奖励节点承接包经裁点 P 乙迁出独立卡(同日新条目在册)。 - -关联文档清单: -- 需求卡片 reports/需求卡片-效果引擎校验文案计数修正批-2026-10-25.md(2026-10-25 v1.3 定稿,grilling 两轮复核+用户裁点 Q 甲/P 乙落定,零待裁点;估时 ≈0.25d) - -**改动面**:游戏代码 - -**状态**:已写卡+已编迭代 38 - -#### 明细行扩展总型收敛批——四个专长实名行型收敛为单一扩展行型+效果载荷(2026-10-25 登记,来源=批次移交) - -**实况**:证据=game/core/battle_orchestrator.gd 文件头注(行型清单——现行四专长实名串 fx_reveal/mine_neutralized/insurance_used/fx_preview_area)+design/gdd/systems/战斗循环/战斗结算.md 明细流水节「扩展行」节(词表两层定稿:基础 9 类+扩展行 1 类,2026-10-25 用户裁「概念+指引」法,git 提交 82d0cf24)。现行实现以四个实名串承载扩展行型值。收敛=游戏代码改动:行型值并为单一扩展串、效果身份走 effect_id 载荷;随动 battle_log_view._format_row 行文案与呈现聚合、playtest_logger JSONL 对拍锚必红须重锚(重锚只能用户发起,可与「结算明细日志行序重锚批」并账一次跑);收敛落定后 owner 文档「扩展行」节的过渡句随反哺点摘除。 - -关联文档清单: -- 需求卡片 reports/需求卡片-明细行扩展总型收敛批-2026-10-25.md(2026-10-25 v1.3 定稿,grilling 两轮复核+用户裁点 R 甲〔重锚并账授权——「结算明细日志行序重锚批」条目随卡出账〕,零待裁点;估时 ≈1.85d 含重锚) - -**改动面**:游戏代码 - -**状态**:已写卡+已编迭代 38 - #### 营地五界面窗口化批——营地功能页点开后的呈现形态(2026-10-22 登记,来源=会话提及) **实况**:营地场景图(卡④)把旧四柜台换成「一张可点击的场景图」,从场景图点进去的**五个功能界面**——锻造工坊/秘宝匣/天赋树(树淬炼)/奖励格图鉴/生涯记录——其**呈现形态尚未定稿**:是各开独立全屏页(生涯先例),还是作为**窗口**打开(场景根留底)。**作者 2026-10-22 明示意图=窗口打开,不是全屏页**。该形态原属卡④ §9 代拍板白名单第 2 条(非用户裁、且「缩放虚化」第三形态禁批内自选),故单独立批,不在美术设计段定值。 @@ -533,26 +511,15 @@ **状态**:待写卡(备选) -#### 奖励节点过时表述清扫批——三选一实装注销的承接微卡(2026-10-25 登记,来源=批次移交) +#### 闸与探针批上下文挂死防护——probe_gate 进程树回收与 run_all 阻塞面超时(2026-10-25 登记,来源=批次移交) -**实况**:「奖励节点三选一实装」条目 2026-10-25 经用户确认注销(功能已全链实装:level_runner 发射 node_entered → adventure_runner 转发 → main_adventure_flow 拉起 present_node_curio → curio_interact_controller 弹三选一兑付;条目唯一证据是一句 2026-09-24 起过时的注释)。注销承接义务包(用户裁点 P 乙=独立微卡承接):level_runner.gd:477-478/:10 两处过时注释+battle_narrator.gd:15 玩家可见过时战报文案(「节点内容待定——直通」——玩家实际拿到的是三选一)+autoplay.gd:484 注释理由句+wa4 条件断言转正复跑(ui_click_probe.gd:415-425,拦截能力未证→必达)。08-Alpha版本标准.md:113 与 roadmap 待编池指路句随注销过时,归反哺点(卡片 §6)。 +**实况**:证据=迭代 36 批末闸机观测(非本批引入)。原登记两件存量噪声,件①(battle_log_view.gd:17 类型声明错致运行期 TypedArray 错误、日志失真)已随迭代 38 卡⑥ 收口出账(git 提交 ce49a8ee),本条只剩件②:`level_shop_economy_test` 在闸批量上下文存在挂死形态(直跑恒绿),`tools/probe_gate.sh` 的 per-suite timeout 只杀 wrapper 不杀引擎子进程,孤儿泄漏会殃及后续全部 Godot 启动(批末四次闸跑批中断的根源,处置=清杀泄漏进程+删重建 `game/.godot`)。挂死防护=闸壳/测试基建,按改动四类属**工程改动走直改通道**。 +- 直改落点:tools/probe_gate.sh(per-suite 进程树回收)+game/tests/run_all.gd(OS.execute 阻塞面超时守护)——测试基建直改 -关联文档清单: -- 需求卡片 reports/需求卡片-奖励节点过时表述清扫批-2026-10-25.md(2026-10-25 v1.1,独立成卡复核通过〔附两应修已折入〕,零待裁点;估时 ≈0.5d) -**改动面**:游戏代码 +**改动面**:工具代码 -**状态**:已写卡+已编迭代 38 - -#### 闸与探针存量噪声两件——_round_rows 类型错与批上下文挂死(2026-10-25 登记,来源=批次移交) - -**实况**:证据=迭代 36 批末闸机观测(非本批引入)。两件存量噪声:①`ui_click_probe` 与 `battle_log_view` 绿跑亦复现 `_round_rows`(Array[Dictionary])append String 的运行期 TypedArray 错误——日志失真但断言仍绿;②`level_shop_economy_test` 在闸批量上下文存在挂死形态(直跑恒绿),`tools/probe_gate.sh` 的 per-suite timeout 只杀 wrapper 不杀引擎子进程,孤儿泄漏会殃及后续全部 Godot 启动(批末四次闸跑批中断的根源,处置=清杀泄漏进程+删重建 `game/.godot`)。**2026-10-26 通道拆注(写卡会话裁定)**:件①=游戏产品码缺陷(battle_log_view.gd:17 类型声明错——修复后「上轮摘要」功能恢复)走需求改动通道已写卡;件②=闸壳/测试基建(probe_gate.sh+run_all.gd 挂死防护)按改动四类属**工程改动走直改通道**,本条目降为件②直改登记。 -- 相关文档:件①归 reports/需求卡片-结算行缓冲类型错修复批-2026-10-26.md -- 件②直改落点:tools/probe_gate.sh(per-suite 进程树回收)+game/tests/run_all.gd(OS.execute 阻塞面超时守护)——测试基建直改 - -**改动面**:游戏代码+工具代码 - -**状态**:已写卡+待执行+已编迭代 38 +**状态**:待执行 #### 美术资产链路审计两项 P0 — 待用户裁决(2026-10-09 登记,来源=审计发现) @@ -605,26 +572,6 @@ --- -#### 调试入口写死行必须在发布前删除——game/presentation/main.gd:196(2026-10-18 登记,来源=批次移交) - -**实况**:2026-10-16 用户令把调试入口改为恒开,`game/presentation/main.gd:196` 的 `_debug_entry` 现恒为 true、不再读环境变量(2026-10-18 实查该行仍为 `_debug_entry = true` 并带「发布前清」注释;:197 是最顶层浮层角标的可见性赋值)。发布前删掉 :196 这一行即可——角标可见性随门控失效自动隐藏,无第二处改动点。不删的后果:正式包里调试浮层与角标常显。证据=该行代码注释与 2026-10-16 调试入口批的实装记录。**2026-10-25 写卡会话查明+裁点**:现行行号 :199;删行涟漪面=三处钉「恒开令」的既有断言(system_test V2f/ui_click_probe:325/ui_tune_probe:116-126)随发布态换代+验证集清单/README/渲染基线三处随动;用户裁点 D 甲=确认纯删(开发态人工调试 UI 入口同断、CLI 测量面不受影响)。 - -关联文档清单: -- 需求卡片 reports/需求卡片-调试入口写死行删除批-2026-10-25.md(2026-10-25 v1.3 定稿,grilling 两轮复核+用户裁点 D 甲落定,零待裁点;估时 ≈0.75d) - -**改动面**:游戏代码 - -**状态**:已写卡+已编迭代 38 - - --- -#### 结算明细日志行序重锚批(2026-10-21 登记,来源=批次移交) - -**实况**:迭代 32 卡① N7 改动互换 `seal_miss`/`insurance_used` 两行日志顺序并改写豁免态 highlight(豁免态=insurance_used 行先行且 highlight 置空;未豁免态=两行相对序不变但 `seal_miss` 发射时点后移——完整对照见 git 提交 d00f24a8 批内实现报告,报告已退役);`playtest_logger._on_step_row` 逐行落盘含 highlight 字段,与基线数据逐项比对的 JSONL sha256 校验必红,实现批按规未发起、11 号闸落 skip。**用户 2026-10-21 裁=批准另立重锚批,发起时点另定**(重锚批只能由用户发起)。**2026-10-25 发起时点落定**:用户裁「重锚随『明细行扩展总型收敛批』并账」——该批落地改行型值致锚必红(grilling 实测锚内受影响行 ≥2849),重锚在其 T2 内按 sim-data 档位与流程一并执行出账,本条不再另立批。 -- 相关文档:`sim-data/` 锚与 `tools/parity_anchor.py`(重锚执行归并账卡);需求卡片 reports/需求卡片-明细行扩展总型收敛批-2026-10-25.md(T2 重锚任务承载) - -**改动面**:工具代码 - -**状态**:已写卡