£4300 / ¥19800,其性质也已经变成由底层成本树推导出来的客户投资,而不再是拍脑袋输入。s3/src/core/economics.ts 已从平面化 market seed 重构为真正的三层经济模型:unit BOM、delivery BOM、customer quote。UK / CN 两个市场现在都先汇总内部成本,再按各自毛利规则推导客户侧投资。unit BOM = £1225、delivery BOM = £1570、internal cost = £2795,按 35% 毛利率推导客户侧 incrementalCapex = £4300。unit BOM = ¥7500、delivery BOM = ¥4380、internal cost = ¥11880,按 40% 毛利率推导客户侧 incrementalCapex = ¥19800。s3/src/core/engine.test.ts 已补充 unit / delivery / internal 三层断言,并重新通过 npm run typecheck:s3、npm test -- s3/src/core/engine.test.ts 与 npm run build:s3;s3/index.html 同步刷新到新的 dist 缓存版本。s3/src/core/materials.ts 新增 storageTruthMode、declaredUsableStorageKWh 与 equivalentPcmMassKg 这组分层能力,使 S3 默认容量从“质量优先”切到“产品能力优先”。s3/src/core/engine.ts 的 ensurePhysDefaults() 现在默认走 product 口径,先按 xPlus 210 的 V40 / usable 容量链收口,再把等效材料质量回填为解释量;默认产品路径下会主动删除旧的 pcmMass 残留。contracts/scenarios/s3-residential-heating.json 已移除旧的 pcmMass 产品事实,并显式声明 storageTruthMode: "product",让 contract 与运行时保持同一口径。npm run typecheck:s3、npm test -- s3/src/core/engine.test.ts 与 npm run build:s3;s3/index.html 与 s3/js/scene.js 也同步刷新缓存参数,确保浏览器加载到新的容量真源链。s3/src/core/economics.ts 将 S3 的 market profile 从“直接写客户成交总额”收口为统一 pricing rule,当前客户侧 incrementalCapex 由同一套内部输入自动推导,不再把售价误当裸成本。s3/src/core/engine.ts 与 s3/js/app.js 继续只读取客户侧 resolveS3MarketProfile() 结果,保证页面静态回收期仍严格按客户投资口径解释。s3/src/core/engine.test.ts 新增定价链路断言,锁住 UK / CN 两套 market profile 的“内部定价输入 → 客户侧投资总额”关系。s3/index.html、index.html 与本页摘要同步改写为“客户投资 / 定价收口”口径,避免把内部成本概念直接暴露到客户页说明中。s3/src/core/economics.ts,把 S3 的 UK / CN market profile、峰谷时段、采暖季、incrementalOpex 与 incrementalCapex breakdown 收口到同一经济真源模块。incrementalCapex 不再是无来源黑箱总额:当前按“热电池主机本体 / 外置电锅炉与混水配套 / 水电辅材与接管附件 / 安装调试与交付”四项拆分,并由代码自动汇总成 £4300 / ¥19800。s3/src/core/engine.ts 与 s3/js/app.js 已改为共同读取同一份 market profile;不再保留“UK 固定值在引擎、CN 固定值在壳层”的分裂状态。s3/src/core/engine.test.ts 新增 market profile 拆分求和断言,锁住当前 UK / CN 的总额与分项关系。s3/js/app.js 将当前客户侧回收期公式正式收口为“不计后续运维”,annualNet 直接按采暖季节费计算,避免旧 profile 残留再次把运维扣回页面。s3/src/core/engine.ts 与 s3/src/core/engine.test.ts 将默认 incrementalOpexYuanPerYear 收口到 0,统一当前 S3 的默认真源口径。s3/js/app.js 将 CN tariff profile 的 incrementalOpexYuanPerYear 同步清零,保证 UK / CN 切换下的静态回收期都按同一客户口径解释。s3/index.html 将结果卡文案从“采暖季净收益”调整为“采暖季节费”,并重算占位值到约 £303 / 采暖季 与 14 年 回收期。s3/src/core/engine.ts 将 S3 fallback 从“整屋深冬设计日”收口为“英国代表性采暖日的低温供暖支撑”:默认 outdoorTemp=3°C、heatLossCoeff=0.15 kW/K、heatingSeasonDays=210。s3/src/core/engine.ts 将客户侧静态回收期口径改为更轻的演示运维占位 £60 / year,避免把后续独立收费的长期服务成本直接压进当前 To C 页面。s3/src/core/engine.test.ts 新增默认 forecast 区间断言,锁住当前“约 40 kWh/day 基线负荷、10%~15% 节费比例”的代表性冬日支撑叙事。s3/index.html 刷新经济卡和说明弹窗占位文案,去掉历史高节费残留;s3/js/scene.js 的契约路径同步追加缓存参数,保证浏览器读取到最新工况。s3/src/core/engine.ts 删除 charging / standby 的主动降温目标,四种运行模式现在都按同一舒适目标进行热平衡,不再靠牺牲室温来换取夸大的节费率。s3/src/core/engine.ts 与 contracts/scenarios/s3-residential-heating.json 将默认 chargePowerKW / dischargePowerKW 从 7.2 / 5.6 收口为 2.8 / 2.8,把热电池节奏拉回更连续的住宅供暖语境。5.94% 节费、£1.44 / 24h,满充/满放在 2400x 节奏下约为 4.7s / 4.5s,与当前可用容量约 8.5 kWh 的量级更匹配。s3/src/core/engine.ts 将 S3 fallback 的室内舒适目标从 20°C 上调到 21°C,使默认住宅供暖表达更接近日常舒适口径。contracts/scenarios/s3-residential-heating.json 同步把 serviceObjective.targetTemperatureC/K 与 load.roomSetpointC 改为 21°C / 294.15 K,保持业务目标与运行目标一致。s3/src/core/engine.test.ts 更新默认测试输入到 21°C,并重新通过 npm run typecheck:s3、npm test -- s3/src/core/engine.test.ts 与 npm run build:s3。61%;这说明当前违和感的主因不是 20 → 21°C,而是功率-容量比和舒适等价口径仍偏激进,后续需要继续收口。s3/js/scene.js 删除整份产品/市场 fallback 常量,phys 现在只保留空壳;运行时优先加载 contract,缺项再由 S3FMDCore.ensurePhysDefaults() 兜底。s3/js/app.js 删除固定 Thermino 210 的本地 product spec 和物理参数覆盖逻辑,改为从当前 G.phys 捕获 UK 基线,只把 CN 当作单独市场差异覆盖。contracts/scenarios/s3-residential-heating.json 删除当前 S3 运行路径未消费的 energyModel.control.setpointC,避免与 load.roomSetpointC 混淆成双真源。node --check s3/js/app.js、node --check s3/js/scene.js 与 npm run typecheck:s3 已重新通过。s3/ 删除 4 张人工检查截图残留,避免临时 PNG 继续混在当前场景目录中。s3/js/sidebar.js 与 s3/js/particles.js 已从当前页面运行路径中彻底移除;前者从未被 s3/index.html 加载,后者虽被加载但没有任何调用入口。s3/js/app.js 继续压平为单一 Thermino 210 逻辑,删除别名映射、选择摘要、未使用 formatter、未挂载的场景说明入口和多余的时间叙事写入。s3/index.html 与 s3/js/scene.js 同步移除未使用的浮层标签、粒子状态字段与历史缓存参数,保证当前 UI 只保留实际可见和可更新的对象。s3/js/app.js 移除当前运行时对 thermino150 / thermino300 的 package 分支,只保留固定的 thermino210 作为当前唯一产品口径。s3/js/app.js 的 package 文案同步改为“当前 S3 固定采用 xPlus 210”,不再保留面向客户的多档容量暗示。s3/src/core/materials.ts 中的 Thermino 参考梯级仍然保留,用于内部校准与后续研究,但不再进入当前页面的 package 决策层。s3/changelog.html、s3/index.html 与根 index.html 同步改写摘要口径,明确当前是 xPlus 210 固定 而非多包选择。s3/js/app.js 将单一 homeBase 口径升级为三档 Thermino 容量包:thermino150 / thermino210 / thermino300,并保留旧 homeBase 作为 thermino210 的兼容别名。s3/js/app.js 默认 package 现在改为明确的 xPlus 210,不再让页面与模型落在抽象“基础型”名称上。s3/src/core/materials.ts 新增 S3_REFERENCE_PRODUCTS,把 150 / 210 / 300 三档产品锚点收进统一参考表;其中 210 直接锚定官方数据表,150 / 300 暂按同一校准梯度推导。s3/src/core/engine.test.ts 新增 Thermino 150 / 210 / 300 梯级单调性断言,确保包表不会再回退成无序常量。s3/src/core/materials.ts 新增 DEFAULT_S3_REFERENCE_PRODUCT,将当前默认容量口径显式锚定到 PCM 热缓冲罐 官方数据表,而不再把 0.85 留成无来源常数。s3/src/core/materials.ts 与 s3/src/core/engine.test.ts 新增 deriveS3DeliveredEnergyFromV40() 校准函数,按 V40 271 L、13°C 冷水入口、40°C 交付 反算参考可用热量,并验证其与当前 usable 8.51 kWh 对齐。contracts/scenarios/s3-residential-heating.json 补入参考产品型号、在用重量、V40 与校准温度,后续讨论容量口径时不必再回忆这条推导链。s3/src/main.ts 与 dist/s3-fmd-core.js 暴露参考产品常量和 V40 → kWh 换算函数,便于后续页面或调试侧直接读取 Sunamp 校准依据。s3/src/core/materials.ts 将容量推导从单一结果升级为 gross / usable / reserve 三个结果:gross 为潜热 + PCM 显热 + 蓄水显热,usable 为 gross × utilizationFactor。s3/src/core/engine.ts 继续收口容量真源:新增 grossStorageCapacityKWh、usableStorageCapacityKWh 与默认 utilizationFactor=0.85,并让运行时与 forecast 统一以 usable 作为实际可调用容量。s3/js/scene.js 与 s3/js/sidebar.js 同步补入默认 utilizationFactor,初始 storedKWh 也按新的 usable 容量重新收口。contracts/scenarios/s3-residential-heating.json 新增 utilizationFactor,把“总容量”和“可用容量”的分界正式推回材料/控制真源,而不是继续写死一个外显 kWh。s3/src/core/engine.test.ts 增补 gross / usable / reserve 的断言,并确认当前默认口径下约为 gross 10.01 kWh、usable 8.51 kWh。s3/src/core/materials.ts 新增 S3 PCM 材料真源层,默认采用 NIST 参考材料 n-Heptacosane,统一保存相变温度、摩尔熔融焓、分子量和换算后的 latentHeat。s3/src/core/engine.ts 删除手填 totalStorageCapacity 默认值,改为按 pcmMass + latentHeat + pcmCp + storageWaterLiters 自动推导;运行时与 forecast 都直接走同一条容量计算链。s3/js/scene.js、s3/js/app.js 与 s3/js/sidebar.js 同步收掉手填容量入口,配置切换和物理参数重置后都会重新调用 ensurePhysDefaults(),保证前端状态与内核容量一致。contracts/scenarios/s3-residential-heating.json 删除旧的 latentHeat / totalStorageCapacity / pcmTmelt 手填字段,改写为 pcmMaterialId + NIST source 口径。s3/src/core/engine.test.ts 新增材料推导与质量敏感性断言,并重建 dist/s3-fmd-core.js,确认 pcmMass 现在会真实改变 forecast。s3/js/app.js 新增基于 valleyHourStart / valleyHourEnd 的日阶段生成逻辑,运行态 mode 不再写死为 23:00-07:00 charging。s3/src/core/engine.ts 新增 buildS3ForecastPhases(),让 24h forecast phases 直接从当前 tariff 窗口推导;UK 下会变为 23:00-00:00 standby、00:00-07:00 charging。s3/index.html 与 s3/js/app.js 同步重建底部时间轴,分段宽度和刻度现在按当前 tariff 真值重画,不再固定写死一套 23-07 充热条。s3/src/core/engine.test.ts 补充 UK / CN 两组 phase 生成断言,并刷新 dist/s3-fmd-core.js 与页面缓存参数。s3/js/scene.js 将场景 fallback 统一到当前 住宅基础型 + UK 默认口径:默认时刻改回 23:00,供回水改为 36 / 30°C,谷峰电价改为 £0.15 / £0.31,季节与投资运维改为 180 天 / £4300 / £180。s3/src/core/engine.ts 与 s3/src/core/engine.test.ts 同步删除旧的 36000 / 1200 / 38 / 32 / CN fallback,把 TS 内核默认值与测试断言收口到当前 Sunamp-near 基准。contracts/scenarios/s3-residential-heating.json 将契约中的默认供回水、电价、采暖季与谷电窗口同步改回 UK 基线,避免加载契约后再混入旧市场口径。s3/js/app.js 移除 S3_TARIFF_PROFILES 中重复的投资运维常量,保留配置包市场值作为页面投资口径来源。s3/js/device.js 继续增强主热电池的橙色显著性,扩大正面竖向饰条、顶部橙色件与侧向橙色面板,并为主机单独挂载可动画的外观材质引用。s3/js/app.js 新增热电池外观随 PCM SOC 联动的颜色逻辑:低 SOC 偏暖白,SOC 升高后主机外壳、橙色饰件、观察窗与显示区一起向更亮的橙色热态推进。s3/index.html 刷新 js/device.js 与 js/app.js 缓存参数到 20260322r30 / 20260322-soc1,避免浏览器继续加载旧的主机材质与动画逻辑。s3/js/app.js 提亮背景与环境光、显著降低雾密度,并把辅助光改为更暖的填光,减少整张画面的灰雾感。s3/js/device.js 继续削弱房屋壳体、隔墙、家具和卫浴等环境对象的透明灰层,同时扩大热电池主机的橙色饰面与热芯亮度。s3/index.html 刷新 js/app.js 缓存参数到 20260322-light1,避免浏览器继续加载旧环境光配置。s3/index.html 将 UI 主色进一步收口到更明确的橙色体系,顶栏、结果卡、底栏与切换控件一起改成橙色主导。s3/js/device.js 将住宅壳体、地面、墙体和家具整体压回灰阶,同时把热电池主机改成橙白配色,强化设备在住宅环境中的前景存在感。s3/index.html 重新提亮页面主色板:背景从灰褐暖灰切到更通透的暖白 / 杏色渐变,强调色统一到更干净的陶土橙。s3/index.html 同步刷新 topbar、结果卡、底栏、浮签与说明弹窗的玻璃背景、描边和阴影,去掉第三张卡此前偏灰的暖褐色带。s3/index.html 将底部时间轴条的宽度、内边距、圆角和阴影整体收薄,视觉尺度向 S6 靠拢。s3/index.html 同步缩小时间轴高度、时刻字号、地区切换 pill 与循环按钮,使底栏回到辅助控件条的角色。s3/changelog.html 补齐到 MiSans 体系,与已经完成统一的 s3/index.html 保持同一套中文与数字字形。s3/index.html 重新分配字重层级:标签、副信息、状态和按钮整体减重,主标题与卡片主数值适度放大。s3/index.html 调整顶栏与卡片的字重后,当前页强调重心重新回到主标题、主数值和当前关键状态,不再出现“满页都粗”的观感。s3/index.html 调整左侧卡片顶部内边距与色带高度,让首行标签与上方横条之间留出更稳定的呼吸空间。s3/index.html 明确当前页面继续统一使用 MiSans 体系,不再区分另一套数字字体。s3/index.html 全页主字体与数字字体统一切到 MiSans,中英文与数字风格改为同一套字形体系。s3/index.html 左侧结果卡继续收紧宽度、高度、字号与间距,减少当前画面里的留白占比。s3/index.html 底部循环重置按钮改成和 S4 同类的图标态,并刷新 js/app.js 缓存参数到 20260322-cards3。s3/index.html 将“采暖季净收益”“静态回收期”中的中文单位拆为独立 bm-unit,避免 年、采暖季 跟随等宽数字字体。s3/index.html 收紧左侧卡片的最小高度、内边距、主副文本间距与移动端尺寸,减少当前卡片的空白区。s3/js/app.js 新增 s3SetMetricValue(),统一回收期和采暖季收益的数字/单位写入,并刷新 js/app.js 缓存参数到 20260322-cards2。s3/index.html 左侧三张卡改为技术参数正面 / 经济指标背面:正面展示 PCM SOC+温度、供回水、室内温度,背面展示 24h 节费、采暖季净收益与静态回收期。s3/index.html 底栏删去阶段叙事和三张技术快照卡,只保留 24h 进度条、UK/CN 地区切换和循环重置按钮,同时刷新 js/app.js 缓存参数到 20260321-cards1。s3/js/app.js 删除当前配置、市场口径、注释文案等非客户向卡片写入,新增循环重置按钮绑定,并把翻面按钮语义改为“技术参数 / 经济性”切换。s3/index.html 移除顶部右侧重复的 状态 / 储热 pills,Topbar 只保留场景身份、当前时间阶段与操作按钮。s3/js/app.js 删除 tbState、tbStorage 的缓存与写入逻辑,并刷新 js/app.js 缓存参数到 20260321-topbar1。node --check s3/js/app.js,确认本轮顶栏收口无语法回归。s3/js/app.js 将顶部时间显示从秒级回退到与 S4 / S6 一致的 HH:MM 语义,保留实时推进但不再暴露秒跳动。s3/index.html 刷新 js/app.js 缓存参数到 20260321p86,并同步首页与场景日志口径。node --check s3/js/app.js,确认本轮时间显示调整无语法回归。s3/js/scene.js 将 simSpeed 从 180 调整到 300,与 S4 / S6 的运行节奏保持一致。s3/index.html 继续加宽并抬高左侧结果卡,给翻面后的尾行说明留出更稳定的显示空间,同时刷新 js/scene.js 缓存参数到 20260321p2。node --check s3/js/app.js,确认本轮界面联动调整无语法回归。s3/js/app.js 新增秒级 HH:MM:SS 时钟格式,并改为每帧刷新顶部时间与底部时间轴游标,增强运行连续感。s3/index.html 继续抬高左侧结果卡、加宽时间显示位,并刷新 js/app.js 缓存参数到 20260321p85。node --check s3/js/app.js,确认本轮 JS 调整无语法回归。docs/discuss/20260321-2257-demo-s3v2-timeflow-layout-pass.md 固定本轮目标:先修复 S3 时间不动,再对当前暖色壳层做一轮排版收口。s3/src/core/engine.ts 修正显式 hour 输入下的 simHour 推进逻辑,恢复顶部时间与底部时间轴的连续移动。s3/index.html、s3/js/app.js 收短阶段文案,并调整结果卡尺寸、底栏宽度、快照卡与浮层标签排版。npm run typecheck:s3、npm run build:s3 与 node --check s3/js/app.js,确认本轮时间恢复与壳层收口均通过静态校验。docs/discuss/20260321-2243-demo-s3v2-shell-convergence.md 固定本轮目标:S3 暂停三维扩张,优先把页面壳层对齐到 S4 / S6 同代展示语法。s3/js/app.js 为新壳层补齐结果卡翻面/收起、顶部实时阶段、底部时间轴游标、快照温度与经济卡片字段接线。s3/index.html、index.html、s3/changelog.html 与 docs/changelogs/20260321-2243.md 同步刷新缓存参数和首页摘要口径。docs/discuss/20260321-2226-demo-s3v2-bath-closure-entry-door-pass.md 固定本轮目标:闭合左下洗手间、删除右侧错墙错门,并补入户门。s3/js/device.js 下移左下洗手间上边界及门位,删除右侧多余墙门,补左侧入户门,并将客厅沙发改成面向电视的摆位。s3/index.html、index.html 与 docs/changelogs/20260321-2226.md 同步刷新缓存参数和首页口径。docs/discuss/20260321-2155b-demo-s3v2-doorway-alignment-pass.md 固定本轮目标:把门的位置校正成落在墙洞中,而不是只改门扇朝向。s3/js/device.js 将左右侧相关分隔墙切成带门洞的分段墙,并重新放置左卧、左卫、右卫和右侧卧室门,使门真正对应房间出入口。s3/index.html、index.html 与 docs/changelogs/20260321-2155b.md 同步刷新缓存参数和首页口径。docs/discuss/20260321-2155-demo-s3v2-door-alignment-pass.md 固定本轮目标:修正门偏移和多余门,并继续收开放公区。s3/js/device.js 将室内门统一改为居中门洞/门扇表达,删除多余房门,并去掉厨房与餐厅之间的分隔墙。s3/index.html、index.html 与 docs/changelogs/20260321-2155.md 同步刷新缓存参数和首页口径。docs/discuss/20260321-2150-demo-s3v2-open-plan-and-doors.md 固定本轮目标:按用户反馈把公区改成开放关系,并补齐室内门。s3/js/device.js 删除玄关-餐客厅与餐厅-客厅之间的不必要隔墙,保留洗手间封闭边界,并新增卧室/洗手间室内门。s3/index.html、index.html 与 docs/changelogs/20260321-2150.md 同步刷新缓存参数和首页口径。docs/discuss/20260321-2145-demo-s3v2-floorplan-pass.md 固定本轮目标:按用户给出的平面草图,把 S3 从“家具散摆”推进成真正的住宅户型。s3/js/device.js 新增室内分区墙体与分区家具,补出厨房、餐厅、客厅、左右卧室、卫浴和玄关语义,并保持右上角设备位不变。s3/index.html、index.html 与 docs/changelogs/20260321-2145.md 同步刷新缓存参数和首页口径。docs/discuss/20260321-2134-demo-s3v2-residential-detail-pass.md 固定本轮目标:清理截图中残留线,并把场景从“空样板间”推进成更像住宅内部。s3/js/device.js 删除左侧残留壳体线索和地面辅助线,移除样板式客厅/餐桌组合,改为卧床、窗帘、衣柜、书桌等住宅室内物件。s3/index.html、index.html 与 docs/changelogs/20260321-2134.md 同步刷新缓存参数和首页口径。docs/discuss/20260321-2128-demo-s3v2-derived-install-anchor.md 固定本轮目标:把 S3 安装角从“手填偏移”推进为“由整屋边界推导”的规则。s3/js/device.js 新增整屋壳体与安装位推导函数,按整屋右后边界反算设备角偏移,并收掉旧大设备间后墙/侧墙语义。s3/js/app.js 镜头 target、机位和安装角局部补光改为跟随同一套安装位推导结果。s3/index.html、index.html 与 docs/changelogs/20260321-2128.md 同步刷新缓存参数和首页口径。docs/discuss/20260321-2124-demo-s3v2-global-coordinate-fix.md 固定本轮目标:修正“右后角”参照系错误。s3/js/device.js 将设备房墙体、设备组、管线走廊与穿地孔整体映射到整屋右后角坐标,而不是局部设备间坐标。s3/js/app.js 机位与 target 同步切换到整屋右后角设备房。s3/index.html 与 docs/changelogs/20260321-2124.md 同步刷新缓存参数和本轮记录。docs/discuss/20260321-2111-demo-s3v2-back-right-wall-pass.md 固定本轮目标:把热电池主机真正压到右后角并贴墙,同时统一地板视觉语义。s3/js/device.js 主机进一步贴右后角后墙,锅炉、混水组件、分集水器跟随贴墙收拢,并统一整屋主地板与楼板视觉语义。s3/js/app.js 镜头略微下压并继续对准右后角小机房。s3/index.html 与 docs/changelogs/20260321-2111.md 同步刷新缓存参数和本轮记录。docs/discuss/20260321-2049-demo-s3v2-small-corner-room-pass.md 固定本轮目标:把右后侧设备区重构成真正的小角落机房。s3/js/device.js 缩小设备间边界,并改成主机贴后墙、锅炉靠左、混水组件与分集水器贴右墙的排布。s3/js/app.js 降低镜头高度并将 target 压到机房前方,避免俯视图继续读成大平台。s3/index.html 与 docs/changelogs/20260321-2049.md 同步刷新缓存参数和本轮记录。docs/discuss/20260321-2021-demo-s3v2-right-rear-installation-pass.md 固定本轮目标:将设备组从左后角方案切换到右后侧安装位。s3/js/device.js 将设备间边界、主机、电锅炉、混水组件、分集水器整体迁移到右后侧墙边,并将生活区家具整体向左收。s3/js/app.js 将镜头 target 改为围绕右后侧设备区,而不是继续盯着原先的中左位置。s3/index.html 与 docs/changelogs/20260321-2021.md 同步刷新缓存参数和本轮记录。docs/discuss/20260321-1954-demo-s3v2-corner-focus-pass.md 固定本轮目标:去悬空开口,并把画面重新聚焦到左后角设备间。s3/js/device.js 删除会制造悬空门窗/开口感的住宅壳体线索,并继续将设备间边界与设备组整体压向左后角。s3/js/app.js 调整镜头 target 与相机位置,让设备左后移后不再被拍成居中展台。s3/index.html 与 docs/changelogs/20260321-1954.md 同步刷新缓存参数和本轮记录。docs/discuss/20260321-1948-demo-s3v2-floor-unify-corner-tighten.md 固定本轮目标:统一主地坪,并把设备组进一步压向左后角。s3/js/device.js 删除设备间独立地坪与服务带实体层,统一主地坪语义;同时收窄设备间边界,并将主机、电锅炉、混水组件、分集水器整体左后移。s3/index.html 与 docs/changelogs/20260321-1948.md 同步刷新缓存参数和本轮记录。docs/discuss/20260321-1939-demo-s3v2-envelope-dedup-floor-unify.md 固定本轮目标:门窗去重、地面统一。s3/js/device.js 删除住宅 cutaway 正立面的门窗框,并移除生活区地毯式地面分区,将设备间工作区与服务带压成更轻的同色系地坪提示。s3/index.html 与 docs/changelogs/20260321-1939.md 同步刷新缓存参数和本轮记录。docs/discuss/20260321-1930-demo-s3v2-cutaway-open-front-pass.md 固定本轮目标:开前脸、减填充、收顶线。s3/js/device.js 删除 cutaway 前脸的大面积半透明填充层,仅保留门窗框线与必要侧墙,并继续降低住宅壳体、屋盖和 utility room 的填充强度。s3/index.html 与 docs/changelogs/20260321-1930.md 同步刷新缓存参数和本轮记录。docs/discuss/20260321-1806-demo-s3v2-cutaway-house-pass.md 固定本轮目标:把 S3 从“整屋灰盒”继续收口成住宅剖切图。s3/js/device.js 重构住宅外壳为 dollhouse cutaway 语法,补出前立面门窗,强化左后角小设备间,并将生活区整体右移以拉开占地比例。s3/js/app.js 继续后拉镜头并降低雾化,让住宅轮廓、设备间边界和主机本体更容易同时读出来。s3/index.html、index.html 与 docs/changelogs/20260321-1806.md 同步刷新缓存参数和首页口径。docs/discuss/20260321-1744-demo-s3v2-utility-room-clarify-pass.md 固定本轮目标:让设备明确处于住宅内部一个小房间,而不是散落在整屋平面里。s3/js/device.js 删掉杂乱的旧屋顶,改成简洁的单片半透明屋盖,并补出 utility room 隔墙、门洞和更统一的高透明度壳层。s3/index.html、index.html 与 docs/changelogs/20260321-1744.md 同步刷新缓存参数和首页口径。docs/discuss/20260321-1741-demo-s3v2-whole-house-context-pass.md 固定本轮目标:让住宅成为主尺度,设备间成为住宅中的小服务空间。s3/js/device.js 扩大整屋半透明体量,并新增客厅、餐桌、厨房等住宅生活区参照,同时压缩当前 utility room 的面积边界。s3/js/app.js 继续后拉镜头,让整屋尺度和设备占比更清楚。s3/index.html、index.html 与 docs/changelogs/20260321-1741.md 同步刷新缓存参数和首页口径。docs/discuss/20260321-1735-demo-s3v2-house-shell-pass.md 固定本轮目标:用半透明住宅壳层建立住宅感和占地参照。s3/js/device.js 新增剖切式半透明住宅壳层、屋顶、外墙、内部隔墙与整屋楼板参照,把当前设备间嵌入更完整的住宅体量中。s3/js/app.js 将镜头后拉并增加壳层补光,让整屋尺度和设备占地关系更容易被读出来。s3/index.html、index.html 与 docs/changelogs/20260321-1735.md 同步刷新缓存参数和首页口径。docs/discuss/20260321-1730-demo-s3v2-residential-room-cues-pass.md 固定本轮目标:补住宅空间线索,而不是继续打磨设备本体。s3/js/device.js 新增窗、门、温控器、插座、地砖缝、窗下光斑与更明确的墙面修补区,让空间更像住宅设备间。s3/js/app.js 微调镜头并补入窗侧辅助光,让住宅空间线索更容易被读出来。s3/index.html、index.html 与 docs/changelogs/20260321-1730.md 同步刷新缓存参数和首页口径。docs/discuss/20260321-1723-demo-s3v2-realism-final-pass.md 固定本轮目标:从截图纠偏切到真实感收尾,不再继续零件级修 bug。s3/js/device.js 补入墙面修补区、工作面边线、管廊挂点、设备投影阴影和更像现场的安装痕迹,收弱“过于干净的样板背景”观感。s3/js/app.js 微调镜头、雾化、曝光与现场灯光,让空间对比和深度层次更接近真实设备间。s3/index.html、index.html 与 docs/changelogs/20260321-1723.md 同步刷新缓存参数和首页口径。docs/discuss/20260321-1703-demo-s3v2-valve-wheel-facing-camera.md 记录对用户所指对象重新判定后的最小修正。s3/js/device.js 将混水组件上的橙色阀轮从侧向改为正对镜头。s3/index.html 与 docs/changelogs/20260321-1703.md 同步刷新缓存参数和本轮记录。docs/discuss/20260321-1658-demo-s3v2-inline-part-facing-camera.md 记录基于用户最终反馈做的右侧小件朝向终修。s3/js/device.js 将右侧 inline 小件从当前侧向姿态改为正面朝向镜头。s3/index.html 与 docs/changelogs/20260321-1658.md 同步刷新缓存参数和本轮记录。docs/discuss/20260321-1653-demo-s3v2-break-and-orientation-fix.md 记录基于用户最新反馈做的断口与朝向修正。s3/js/device.js 让锅炉侧主连接先从喷口真实伸出短直段再拐入主管,并将右侧 inline 小件按用户建议调整朝向。s3/index.html 与 docs/changelogs/20260321-1653.md 同步刷新缓存参数和本轮记录。docs/discuss/20260321-1647-demo-s3v2-screenshot-issue-fix-pass-2.md 记录基于第二张截图继续做的定点纠偏。s3/js/device.js 移除成排方块支架,将锅炉锚点对齐到可见接口,收掉含混小件的错误朝向感,并把主机门板从柜体前壳明显后退以压制闪烁。s3/index.html 与 docs/changelogs/20260321-1647.md 同步刷新缓存参数和本轮记录。docs/discuss/20260321-1636-demo-s3v2-screenshot-issue-fix-pass.md 记录基于用户截图反馈的四项定点修正。s3/js/device.js 移除左上无意义黑线与右下地面异物,重排锅炉侧与主机侧的热/回水路径分层,并修正右侧分集水器前脸的近共面闪烁风险。s3/index.html 与 docs/changelogs/20260321-1636.md 同步刷新缓存参数和本轮记录。docs/discuss/20260321-1627-demo-s3v2-realism-pass1b-installation-details.md 固定本轮目标:在不改大构图的前提下,补足施工完成感和安装细节。s3/js/device.js 为主连接管补入支架、保温层、套管、地面穿出、阀件与服务侧细节,并收掉过强的“示意图节点感”。s3/index.html 与 docs/changelogs/20260321-1627.md 同步刷新缓存参数和本轮记录。docs/discuss/20260321-1618-demo-s3v2-realism-pass1-utility-room-rebuild.md 固定本轮目标:从产品展示语义切回住宅设备间真实化,优先处理空间语义而不是继续收 UI。s3/js/device.js 移除垫台、地毯、背板与侧墙提示面,重建设备间角落、外置电锅炉、主机、混水循环组件、分集水器与贴墙主连接管。s3/js/app.js 重配镜头、曝光、雾化与现场灯光,让画面从产品展台回到更像真实住宅设备间的观察视角。docs/discuss/20260321-1557-demo-s3v2-3d-pass2-label-and-right-side-trim.md 固定本轮目标:收主机以外的默认标签,移除右侧异常提示物,并继续增强主机产品感。s3/js/app.js 仅保留主机默认标签,并继续微调镜头、雾化和灯光参数,让主机更集中、更靠前。s3/js/device.js 移除右侧竖向热需求提示物,并继续加强主机柜体对比、底部阴影和接地感。docs/discuss/20260321-1514-demo-s3v2-3d-pass1-product-centering.md 固定本轮目标:从 UI 收口切回第一轮三维层收口。s3/index.html 将说明弹窗里的“当前目标”改为“页面说明”,去掉内部设计口吻。s3/js/app.js 与 s3/js/device.js 微调镜头、光照、主机体量,以及左侧热源/右侧稳温桥的存在感。docs/discuss/20260321-1443-demo-s3v2-single-base-config.md 固定本轮目标:从多档配置正式收口为单一基础型。s3/index.html 与 s3/js/app.js 移除 住宅增强型 / 供暖加强型 与包型切换,只保留 住宅基础型 和 UK/CN 经济口径切换。index.html、s3/changelog.html 与 docs/changelogs/20260321-1443.md 同步把本轮定义为 单一基础型收口。docs/discuss/20260321-1439-demo-s3v2-scene-desc-trim.md 固定本轮目标:把说明弹窗中的研发过程信息继续收掉。s3/index.html 删除 场景说明 弹窗中的 后续阶段 整段,只保留当前场景说明。index.html、s3/changelog.html 与 docs/changelogs/20260321-1439.md 同步把本轮定义为 说明弹窗收口。docs/discuss/20260321-1430-demo-s3v2-phase-word-trim.md 固定本轮目标:继续收掉客户可见层中的阶段词。s3/index.html 移除场景页标题、副标题、眉标和说明弹窗标题中的 Phase 6 / S3 v2 表述。index.html、s3/changelog.html 与 docs/changelogs/20260321-1430.md 同步把本轮定义为 客户页阶段词收口。docs/discuss/20260321-1428-demo-s3v2-selection-summary-merge.md 固定本轮目标:把左侧选择信息从两个 chip 合并成一条摘要线。s3/index.html 与 s3/js/app.js 将 当前配置 / 当前口径 合并为 当前选择,并保持包型与市场切换联动更新。index.html、s3/changelog.html 与 docs/changelogs/20260321-1428.md 同步把本轮定义为 Phase 6 信息块合并。docs/discuss/20260321-1425-demo-s3v2-customer-facing-term-trim.md 固定本轮目标:收掉客户可见层中的内部路线词。s3/index.html 移除场景页标题、产品区和说明弹窗中的 Sunamp-near / PCM 缓冲罐 表述。index.html、s3/changelog.html 与 docs/changelogs/20260321-1425.md 同步把本轮定义为 Phase 6 术语收口。docs/discuss/20260321-1423-demo-s3v2-action-entry-trim.md 固定本轮目标:收掉左侧产品区底部多余的操作入口。s3/index.html 删除左侧底部的 查看说明 / 查看日志 按钮,并将说明入口统一保留在 topbar。s3/changelog.html、index.html 与 docs/changelogs/20260321-1423.md 同步把本轮定义为 Phase 6 操作入口收口。docs/discuss/20260321-1416-demo-s3v2-topbar-trim.md 固定本轮目标:topbar 只保留动态状态信息。s3/index.html 移除 topbar 中重复的 配置 项,让配置语境只留在左侧产品区。s3/changelog.html、index.html 与 docs/changelogs/20260321-1416.md 同步把本轮定义为 Phase 6 topbar 收口。docs/discuss/20260321-1414-demo-s3v2-topbar-panel-dedup.md 固定本轮目标:把首屏里与 topbar 重复的信息收掉。s3/index.html 删除左侧面板中与 topbar 重复的 当前状态 / 储热信息 两张卡片。s3/changelog.html、index.html 与 docs/changelogs/20260321-1414.md 同步把本轮定义为 Phase 6 首屏去重。docs/discuss/20260321-1402-demo-s3v2-panel-scroll-and-content-trim.md 固定本轮目标:优先解决左侧不可滚动与首屏解释性内容过多的问题。s3/index.html 让左侧面板支持独立滚动,并将热源/稳温桥等解释型内容从首屏移入 场景说明。s3/changelog.html、index.html 与 docs/changelogs/20260321-1402.md 同步把本轮定义为 Phase 6 首屏收口。docs/discuss/20260321-1331-demo-s3v2-package-toggle-pass.md 固定本轮目标:只在当前产品页中加入轻量包型切换,不扩张为完整配置页。s3/index.html 与 s3/js/app.js 新增三组配置包按钮,并让顶栏、说明文案与经济摘要随包型同步更新。s3/changelog.html、index.html 与 docs/changelogs/20260321-1331.md 同步把本轮定义为 Phase 6 包型切换。docs/discuss/20260321-1258-demo-s3v2-package-market-wiring.md 固定本轮目标:先做配置包与市场口径接线,不做完整配置页。s3/js/app.js 新增三组配置包常量,并把 住宅基础型 作为当前默认真源包接到现有页面和经济层。s3/index.html、s3/changelog.html、index.html 与 docs/changelogs/20260321-1258.md 同步把当前轮次定义为 Phase 6 配置接线。s3/js/app.js 下调背景亮度、降低雾化强度并重配环境光、主光、补光与轻微轮廓光,让背景后退、主机前置。s3/js/device.js 轻微加深地面、墙面、背景板与主机接地阴影,让主机在当前构图里落地感更稳。s3/changelog.html、index.html 与 docs/changelogs/20260321-1236.md 同步把本轮定义为 Phase 5.5 环境抛光。s3/js/device.js 轻微增强主机前脸、门框、显示屏和竖向强调线的对比,让柜体在当前偏雾环境里更容易站出来。s3/index.html 与 s3/js/app.js 继续压缩首屏主描述和两张说明卡的句长,降低说明书感。s3/changelog.html、index.html 与 docs/changelogs/20260321-1221.md 同步把当前轮次定义为 Phase 5 主机精修。docs/discuss/20260321-1144-demo-s3v2-phase45-economics-compression.md 固定本轮目标:只做经济层压缩,不新增功能。s3/index.html 将厚重的经济卡片压成更薄的摘要层,并去掉顶栏与左侧对 Tariff 的重复强调,让主机重新更占优。s3/js/app.js、s3/changelog.html、index.html 与 docs/changelogs/20260321-1144.md 同步切到 Phase 4.5 产品页收口 口径。docs/discuss/20260321-0016-demo-s3v2-phase4-build-plan.md 固定 Phase 4 边界:只补“同一产品、不同市场电价口径”的克制经济层,不再回到系统 dashboard。s3/index.html 与 s3/js/app.js 新增 UK / CN tariff 切换、四项以内的经济摘要,以及“只切口径、不切产品”的页面说明。s3/VERSION.txt、s3/changelog.html、index.html 与 docs/changelogs/20260321-0016.md 同步切到 Sunamp-near / Phase 4 经济口径 / UK 默认。docs/discuss/20260321-0010-demo-s3v2-phase3c-checkpoint-pass.md 固定 Phase 3C 的目标:关系比零件更清楚,但不让画面滑回完整系统图。s3/js/device.js 将 mixingBridgeLite 稍微外移,增强与主机侧面的层次分离;同时将主机与稳温桥之间的短连接收成更清楚的单一关系线。s3/js/device.js 将锅炉与主机之间的短连接从零散小杆收成单一热源关系线,并同步更新 s3/js/app.js、s3/index.html 与 docs/changelogs/20260321-0010.md 的文案口径。docs/discuss/20260321-0005-demo-s3v2-phase3a3b-connection-pass.md 固定 Phase 3A/3B 的目标:桥体强化 + 极短连接语义,不把页面推回完整系统图。s3/js/device.js 放大并重构 mixingBridgeLite 的桥体、阀轮和附着结构,同时补入主机到稳温桥的极短输出连接暗示,让它不再像单独挂件。s3/js/device.js 为 electricBoilerLite 补入极短热源连接暗示;s3/js/app.js 与 s3/index.html 的文案同步切到“最小实体 + 极短连接语义”口径。docs/discuss/20260320-2354-demo-s3v2-phase3-build-plan.md 固定 S3 v2 Phase 3 的新边界:只做 electricBoilerLite + mixingBridgeLite 的最小实体化,不回到完整系统总图。s3/js/device.js 将左侧 heatSourceHint 升级为退居背景的 electricBoilerLite,并将右前 mixingSemanticNode 升级为贴近主机的 mixingBridgeLite。s3/js/app.js、s3/index.html、index.html 与 docs/changelogs/20260320-2354.md 同步切换到 Phase 3 口径,明确当前阶段已不再是 Phase 2.5。s3/index.html 继续压缩左侧产品说明层:缩窄面板宽度、减少内边距、收小标题和信息卡,并删去“热需求提示 / 热源语义”两张低价值卡片,降低 UI 对画面的占用。s3/index.html 将顶部阶段副标题与产品说明文案从“visual correction”口径推进到“visual compression / product close-out”,让页面语气更接近已成型产品页。s3/js/device.js 轻微加深主机壳体与阴影侧色阶,并新增接地阴影,进一步强化主机的落地感与视觉中心地位。s3/js/app.js 将浮动标签收为主机与稳温输出两项,隐藏热源与热需求标签,避免画面继续被“解释层”切碎。s3/js/app.js 下调场景曝光、环境光、补光与雾化强度,压掉当前过白过平的观感,让主机体积和层次重新更明显。s3/js/device.js 继续缩薄并后退右侧 heatingLoadHint,降低发光和装饰强度,把它从前景小立牌继续压回背景附着提示。s3/js/device.js 针对用户指出的主机右侧闪烁,将 shadowSide 从与主机外壳右侧面几乎共面的写法,改为明显内缩且缩窄的内嵌侧板,优先解除右侧面的 z-fighting。s3/changelog.html、index.html 与 docs/changelogs/20260320-2345.md 同步把当前轮次定义为 `Phase 2.5` 的右侧面定点修复,而非新的语义扩张。s3/js/device.js 将主机正面从“整块门框压门板”的重叠写法改为真正分离的四边门框,并重新整理门板、显示屏、发光屏和把手的前后层级,优先处理前脸近共面导致的持续频闪。s3/js/device.js 继续收弱 heatingLoadHint:缩薄厚度、降低发光强度、缩小装饰线和外框,并把它继续压向侧墙背景,保持“位置正确但形态更弱”。s3/changelog.html、index.html 与 docs/changelogs/20260320-2340.md 同步把本轮性质定义为 Phase 2.5 anti-flicker pass,不误判为进入 Phase 3。s3/js/device.js 将 heatSourceHint 改为贴左墙的入口提示、将 heatingLoadHint 改为贴右侧语境板的需求牌、并把 mixingSemanticNode 收回到主机右前侧附着位置,修正三处语义对象的漂浮感。s3/js/device.js 去掉主机右侧与阴影侧板近共面的透明观察窗,改为更克制的侧向细节件,并同步下调内部储热模块透明度,优先压制右侧频闪风险。s3/js/app.js 标签锚点改为跟随真实对象世界坐标,动画幅度同步减弱;s3/index.html、index.html 与 docs/changelogs/20260320-2334.md 同步把当前阶段口径收为 Phase 2.5 visual correction。s3/js/device.js 在保留 Phase 1 主机中心构图的前提下,新增左后侧 heatSourceHint 与右前侧 mixingSemanticNode,把 S3 推进到“供暖语义已加入,但系统仍未展开”的 Phase 2。s3/index.html 与 s3/js/app.js 同步把页面副标题、说明卡和标签文案改为“低温热需求 / 稳温输出 / 外部热源提示”口径,不再停留在纯产品展示语气。index.html 与 docs/changelogs/20260320-2321.md 同步把 S3 卡片摘要更新为 Sunamp-near / 供暖语义 / UK 默认,与 v2 当前阶段保持一致。s3/index.html 改为 S3 v2 Phase 1 的 PCM 缓冲罐 产品页:去掉结果卡、时间轴和 24h 经济主叙事,改为主机导向的产品说明面板与极简说明弹窗。s3/js/device.js 全量收口为主机优先壳层:删除锅炉、混水桥、分配组件、地暖回路和整套外露管路,只保留住宅角落语境、主机本体与最弱热需求提示。s3/js/app.js 切换为 Phase 1 产品页驱动:停用结果卡/时间轴更新路径,保留最小状态写入、主机储热标签与住宅热需求提示。s3/js/device.js 按双回路骨架重定义热电池与混水桥接口平面,并压缩锅炉侧 / 末端侧主连接管的拐点与错层。s3/js/device.js 把独立大混水模块进一步收为贴柜的小型混水桥,突出热电池柜为主设备,减少外露管路抢戏。s3/js/device.js 重做混水模块区域布置,删去冗余室外分配组件表达,按热电池侧与末端侧重新规划接口朝向和管路走向,减少交叉与杂乱感。s3/index.html 左侧结果卡压缩为结论型信息,去掉溢出的补充字串,统一卡片宽高和移动端占位。s3/js/app.js 调整标签文案、画面雾化和曝光参数,提升房屋与设备主体可见度。s3/index.html 全量改为展示型界面:顶部单行状态栏、左侧翻转结果卡、底部 24h 时间轴与循环按钮、场景说明弹窗。s3/js/device.js 设备体系改为外置电锅炉、紧凑型相变热电池、混水供热模块、低温供热分配组件,删除旧版大圆罐叙事。s3/src/core/engine.ts 热工模型改为 58°C 平台热电池逻辑,统一低谷充热 / 晨间供热 / 稳态待机 / 联合补热四阶段。contracts/scenarios/s3-residential-heating.json 契约同步改为住宅热电池改造方案口径,补齐混水模块和 hybrid 运行模式。s3/VERSION.txt 恢复标准日期版本号,并先归档旧版场景到 archive/s3/20260318 后继续重建。s3/js/device.js 工业级精绘重写,对标S4/S6水准:
s3/js/device.js 修复 PCM 罐及管路 5 处问题:①盘管变细并增加透明度,看起来更像内部换热器;②罐体高度从 1.2m 降至 0.9m,比例更合理;③重新规划管路路径,避免穿模;④管路改为正交布局,角度规范;⑤调整端口位置确保管道正确连接到罐子。shared/ir.js 新增 irCollectMeshes() 与 irStaticWorldPos(),为 IR 路径提供通用 mesh 收集与静态世界坐标缓存。s3/js/app.js 的 PCM 罐、电锅炉、热泵、太阳能板、分集水器 IR 路径改为缓存 mesh 列表,去掉重复 traverse()。getWorldPosition() 与逐帧随机热纹理开销。s3/js/scene.js 新增 loadS3Contract() 入口s3/js/app.js 启动流程改为异步契约驱动s3/js/sidebar.js 新增 syncDefaultPhysFromContract()s3/index.html 添加契约加载器脚本引用contracts/scenarios/s3-residential-heating.json 居民清洁供暖场景契约shared/ui.js 通用UI层,时间轴段宽修正shared/devices.js 通用设备组件库完整历史日志 · s3/changelog.html