Phase 1 装备 Code-Layer 真值快照 v1.0
整理时间:2026-07-03 16:55 +08:00 整理人:Mavis(PM / 制作人视角) 本文档作用:把 Phase 1 装备系统的 code-layer 当前真实状态快照落档,5 日计划派工时直接引用,不再重复扫描源码 快照扫描范围:
src/data/items/**(数据层)src/components/item/**(UI 层)src/utils/items/**(逻辑层)src/index.css(色板 CSS 变量)src/version.ts(存档架构版本)src/utils/saveVersioning.ts(存档版本管理基础设施)src/types.ts(根 type,旧 rarity 字段位置) 本次不做的事:不修改任何项目代码;只快照 / 对照 / 引用
0. TL;DR(60 秒版)
| 项 | v3.1.5 阶段已做完 | 5 日计划 v1.2 仍待做 |
| :--- | :---: | :--- |
| T3 装备 16 件 4 字段(qualityTier / affixes / baseStats / buildTag) | ✅ 已补(baseStats 只 eff 单维) | ❌ rollValue 由 Day 5 T7 rollEquipment 生,不在 T3 范围 |
| T4 9 档色板 CSS 变量 + @theme | ✅ 已落(src/index.css) | ⚠️ 清旧 .rarity-* class 残留(Day 2 R1.2 短工) |
| T5 QualityFrame + AffixChip 组件 | ✅ 已落(src/components/item/) | ⚠️ 视觉对照 + 跟视觉规范 v1.0 比对(Day 3 R1.3) |
| T6 装备卡 UI 升级 | ⚠️ ItemGallery.tsx 已落(可能替代路径) | ⚠️ 确认 BaggageTab 是否对接 + 视觉对照(Day 3 R1.4) |
| T7 rollEquipment({ tier, category }) 函数 | ✅ 已落(src/utils/items/rollEquipment.ts) | ⚠️ Day 5 R1.5 单元测试 46 组 PASS 验证 |
| 旧 rarity 字段(src/types.ts:186) | ✅ 保留(向后兼容) | ⚠️ 加 @deprecated 注释(Weekend 已撤回,留 Day 1 决定) |
| SAVE_SCHEMA_VERSION | ⚠️ 当前 1.9(浮点) | ⚠️ Day 2 升 1.9 → 2.0(整数化 Phase 1 milestone) |
| legacyAdapter.ts(旧存档兼容 helper) | ❌ 未新建 | ⚠️ Day 2 新建(upgradeLegacyEquippable + migratePayloadEquippableTier) |
| saveVersioning.ts 注册 v1.9 → v2.0 migration step | ⚠️ SAVE_PAYLOAD_MIGRATIONS = [] 空数组 | ⚠️ Day 2 注册 |
| 单元测试 46 组(rollEquipment.regression.ts) | ✅ 脚本已落 | ⚠️ Day 5 跑测 PASS 验证 |
核心结论:Phase 1 v3.1.5 阶段做的工作远超 5 日计划 v1.2 验收假设;5 日计划真实剩余工作量集中在 3 块:
- R1.0 type 头真活(
@deprecated+legacyAdapter.ts+saveVersioning注册) - R6 字段净化(JSX 5 处真行号 + AGENTS.md 新段落)
- R5 5 日收口文档 + 视觉对照 checklist
1. 文件级真值清单(按目录分)
1.1 数据层 src/data/items/
| 文件 | 行数 | 内容要点 | 跟 R1 对齐状态 |
| :--- | ---: | :--- | :--- |
| equipment.ts | 765 | 16 件装备(EQUIPMENT_ITEMS 数组),v3.1.5 头部明示"每件已补齐 4 字段" | ✅ 已 16/16 全填;baseStats 当前只 eff 单维(没 atk/def) |
| quality.ts | 101 | 9 档 QualityTier 类型 + QUALITY_TIERS 元数据常量表 + QUALITY_ORDER 排序数组 + 5 → 9 档 RARITY_TO_QUALITY 映射常量表 | ✅ 数据层全部就位;cssVar 字段对应 src/index.css --color-q-* |
| types.ts | 281 | BaseItem / ConsumableItem / EquipmentItem(v3.1.5 增强含 qualityTier / affixes / baseStats / buildTag 4 字段)/ StoryItem / LegacyItem / GameItem 联合类型 | ✅ 类型已升级 v1.1 |
| affixes.ts | (未读全文,grep 过存在) | 词条定义表 | ⚠️ Day 5 R1.5 短工沿用 + PASS |
| consumables.ts | 不在本快照核心范围 | 消耗品 | — |
| legacyItems.ts | 不在本快照核心范围 | 传承道具 | — |
| storyItems.ts | 不在本快照核心范围 | 剧情道具 | — |
| itemConfigs.ts | 不在本快照核心范围 | 道具配置 | — |
| index.ts | 不在本快照核心范围 | 模块索引 | — |
关键真值(equipment.ts 数据样本 — 1 件):
{
id: 'item_abacus_gold',
name: '金算盘',
// ... 常规字段 ...
rarity: 'epic', // ← 旧 4 档,保留
qualityTier: 'epic', // ← 新 9 档(v3.1.5 已填)
affixes: [], // ← 初始空(等 Day 5 roll)
baseStats: { eff: 10 }, // ← 只 eff 单维(没 atk/def)
buildTag: ['management'], // ← 已改数组
}
1.2 数据层 src/data/multiplayer/
| 文件 | 状态 |
| :--- | :--- |
| types.ts + roomStateMachine.ts(均已落) | ✅ Day 4 R3 集成测已就位 |
1.3 UI 层 src/components/item/
| 文件 | 状态 | 对应 5 日计划 R |
| :--- | :--- | :--- |
| QualityFrame.tsx | ✅ 已落 | R1.3 T5 |
| AffixChip.tsx | ✅ 已落 | R1.3 T5 |
| ItemGallery.tsx | ✅ 已落(可能替代 R1.4 T6 路径,跟 BaggageTab 是否对接待 Day 3 校对) | R1.4 T6 |
1.4 逻辑层 src/utils/items/
| 文件 | 行数 | 内容 | 对应 R |
| :--- | ---: | :--- | :--- |
| qualityLogic.ts | 49 | getQualityRank / getQualityByRank / mapItemRarityToQuality / isHighQuality / isCelestial / isEquippableQuality | ✅ R1.3 / R1.5 部分 |
| affixLogic.ts | (存在) | 词条逻辑工具 | ✅ |
| itemGen.ts(不是 rollEquipment.ts,注意名字相似) | (存在) | 物品生成 utility | ⚠️ Day 5 R1.5 校对 |
| rollEquipment.ts | (已落) | rollEquipment({ tier, category }) 主函数 | ⚠️ Day 5 R1.5 跑测 |
| rollEquipment.regression.ts | (已落) | 单元测试 46 组脚本 | ⚠️ Day 5 R1.5 PASS 验证 |
| index.ts | (存在) | 模块索引 | — |
| legacyAdapter.ts | ❌ 未新建 | Day 2 R1.1 短工新建 | ⚠️ R1.1 待做 |
1.5 色板 CSS src/index.css
已落 @theme + 9 档 --color-q-*:
--color-q-waste: #9ca3af;
--color-q-common: #6b7280;
--color-q-fine: #10b981;
--color-q-rare: #3b82f6;
--color-q-epic: #8b5cf6;
--color-q-legend: #f59e0b;
--color-q-mythic: #dc2626;
--color-q-divine: #ea580c;
--color-q-celestial-from / mid / to: 金色渐变
✅ R1.2 T4 已落;Day 2 R1.2 真活 = 清旧 .rarity-* class 残留(短工)
1.6 存档架构 src/version.ts
export const APP_VERSION = '1.15.1';
export const ROADMAP_VERSION = '0.9.3';
export const SAVE_SCHEMA_VERSION = 1.9; // ← 浮点 1.9,不是整数
export const LEGACY_SAVE_SCHEMA_VERSION = 1.0;
⚠️ Day 2 R1.1 真活 = 升 1.9 → 2.0(整数化 Phase 1 milestone,触发 migration step 自动跑)
1.7 存档版本管理基础设施 src/utils/saveVersioning.ts(347 行)
✅ 完整落地:
SAVE_VERSION_MANIFEST(3 个 namespace:active / archived / deprecated)SAVE_PAYLOAD_MIGRATIONS: SavePayloadMigrationStep[]← 当前 =[]空数组(Day 2 R1.1 注册)migratePayloadThroughRegisteredSteps/bootstrapReleaseSaveStorage(backup slot 自动恢复)/readLiveSavePayload/writeLiveSavePayload/deleteLiveSavePayload/migrateLoadedSavePayload/promoteLoadedSavePayloadToActiveNamespace/purgeDeprecatedLiveSavePayloads/createSaveVersionReport
⚠️ Day 2 R1.1 真活 = 在 SAVE_PAYLOAD_MIGRATIONS 数组注册 {fromVersion: 1.9, toVersion: 2.0, description: 'phase1-equipment-tier', migrate: migratePayloadEquippableTier}
1.8 根 type src/types.ts(757 行)
- line 186:
EquippableItem.rarity: 'common' | 'rare' | 'epic' | 'legendary'(4 档旧字段,保留做向后兼容) - line 187:
EquippableItem.qualityTier?: QualityTier(已存在,可选,fallback 路径入口) - line 299:
AdventureRelic.rarity: 'common' | 'rare' | 'legendary'(跟 R1 装备系统不相关,不动)
✅ 旧字段保留;⚠️ @deprecated 注释(Weekend 已撤回,Day 1 R1.0 短工自行决定)
2. 已做完 vs 待做 lane-by-lane(对应 5 日计划 R1.0 - R1.6)
| 5 日 lane | 真值状态 | 周五(本周已 done) | 周末(7.4-7.5) | Day 1-5 派工 |
| :---: | :--- | :--- | :--- | :--- |
| R1.0(Day 1 T3 type) | 部分已做 | ✅ EquippableItem v2 type 已升;⚠️ @deprecated 注释、SAVE_SCHEMA_VERSION+1、legacyAdapter.ts 仍未做 | (今天不动代码) | Day 1 R1.0 短工:R1.1 三件套代码 |
| R1.1(Day 2 13 件 baseStats + legacyAdapter + saveVersion) | 重大偏差:v1.2 假设 13 件要补,真值已 16/16 全填 | ✅ 数据层 equipment.ts v3.1.5 头部明示已 4 字段全补 | (周末不动代码) | Day 2 R1.1 短工:① legacyAdapter.ts 新建 + ② saveVersioning.ts 注册 migration step + ③ version.ts 升 1.9 → 2.0 |
| R1.2(Day 2 T4 9 档色板) | 重大偏差:v1.2 假设要新落 CSS 变量,真值已落 | ✅ src/index.css @theme + 9 档 --color-q-* 已落 | (周末不动代码) | Day 2 R1.2 短工:清旧 .rarity-* class 残留 |
| R1.3(Day 3 T5 组件) | 重大偏差:v1.2 假设要新建,真值已建 | ✅ src/components/item/QualityFrame.tsx + AffixChip.tsx 已落 | (周末不动代码) | Day 3 R1.3 短工:视觉对照 + 跟视觉规范 v1.0 比对 |
| R1.4(Day 3 T6 UI 升级) | 部分已做:ItemGallery 已落;BaggageTab.tsx 是否对接未知 | ⚠️ ItemGallery 已起;BaggageTab 对接待 Day 3 校对 | (周末不动代码) | Day 3 R1.4 短工:验证 BaggageTab 用 QualityFrame + AffixChip 渲染 |
| R1.5(Day 5 T7 rollEquipment) | 部分已做:函数 + 回归脚本已落;测试 PASS 状态未知 | ✅ rollEquipment.ts + rollEquipment.regression.ts 已落 | (周末不动代码) | Day 5 R1.5 短工:跑 rollEquipment.regression.ts 验证 46/46 PASS |
| R1.6 + R5(Day 5 视觉对照 + 5 日收口) | 完全未做 | (未起) | (周末不动代码) | Day 5 R1.6 + R5 短工:按周末模板填 5 日收口文档 + 9 档 checklist |
| R6(Day 4 字段净化,v1.2 新增) | 设计层已完,代码层未做 | 剧情追踪-字段净化与输出规则-v1.md 已落;JSX 5 处真行号待 grep 实勘 | 周末 spec 文档落档 | Day 4 R6 短工:按 spec 改 5 处 JSX + App.tsx nextHint + AGENTS.md 新段落 |
| R2(Day 1 拍板) | 已 done | ✅ task 2026-07-06-victory-endgame-truth-source 已 verified(7.3 主会话签字) | — | — |
| R3(Day 4 P2P) | 已落盘(待集成测试) | ✅ P2P 房间状态机 + 3 组件 + types 都已落 | — | Day 4 R3 短工:idle → waiting 链路集成测 |
| R4(Day 4 剧情预研) | 已 done | ✅ 剧情线3+预研大纲-v1.md § 4.3 主会话已签字 P3 = 旧账风波 | — | W28+ 开 R4 detailed-node |
3. 与 5 日计划 v1.2 acceptance 的偏差清单(逐条对)
docs/handoff/tasks/2026-07-07-to-08-phase1-equipment.md 当前 acceptance:
| # | 原文(偏差前) | 真值校对后 | 修订动作 |
| :-: | :--- | :--- | :--- |
| 1 | T3 装备模型:30 件历史装备全部补 qualityTier + baseStats + rollValue | 16 件(v3.1.5 已补 4 字段;rollValue 由 Day 5 滚出,不在 T3) | 修订 |
| 2 | T3 类型:EquippableItem v2 类型通过 tsc,QualityTier 9 档可 import | ✅ 数据层 + 根 type 都已含 | 修订(明确"rollValue 不在 T3") |
| 3 | T4 色板:src/index.css 9 档品质色板 CSS 变量 + Tailwind v4 @theme 接入完成,旧 .rarity-* 删除 | ✅ CSS 变量落;⚠️ 旧 .rarity-* 待清 | 修订(明确"色板变量已落,清旧 class 是 Day 2 短工活") |
| 4 | T5 组件:src/components/item/QualityFrame.tsx + src/components/item/AffixChip.tsx 2 个组件落盘,Storybook 或 quick demo 可见 9 档 + 5 类词条 | ✅ 2 个组件已落;⚠️ 视觉对照未做 | 修订(明确"视觉对照 = Day 3 短工活") |
| 5 | T6 UI 升级:src/components/BaggageTab.tsx 升级后,装备卡入口位替换为 <QualityFrame>,词条展示位替换为 <AffixChip> 列表,鼠标悬停可见数值区间 | ⚠️ ItemGallery.tsx 已落替代路径;BaggageTab.tsx 是否对接未知 | 修订(明确"BaggageTab 对接验证 = Day 3 短工活") |
| 6 | cmd /c npm run build 通过,npm run lint 无新增错误 | (未变) | 不动 |
| 7 | 视觉对照 9 档 + 5 类词条 跟 道具系统新核心UI视觉规范-v1.md 吻合 | (待 Day 3 R1.3 R1.4 做) | 不动(保留作为验收条件) |
| 8 | src/App.tsx 任何代码未被改动 | (本快照未扫 App.tsx 装备相关调用,假设未变) | 不动 |
| 9 | src/utils/items/** 现有工具函数未被改动(Day 5 才动) | ✅ 当前 qualityLogic.ts / rollEquipment.ts 都未动(只读判断用) | 不动 |
本节总结:acceptance 1-5 条需要"修订"(动 tasks/2026-07-07-to-08-phase1-equipment.md 文件),acceptance 6-9 条保留。修订动作只动 task 卡文档,不涉及项目代码。
4. 不在真值快照范围的事(明确划走)
- ❌ 不修改任何项目代码(周末 + 5 日全程)
- ❌ 不动 Phase 2+ 的设计(强化 / 跨周目 / 装备系统第二阶段)
- ❌ 不动
docs/specs/**/docs/story/**/docs/design/completed/**(只读,校对用) - ❌ 不改 AGENTS.md § 0-§ 7 守则(本快照是补充 § 后续,不进守则)
- ❌ 不动胜利终局 / 剧情线 / 联机 P2P(已收口,留 W28+ 续推)
5. 后续真值校对节奏
| 时点 | 校对内容 | 谁做 |
| :--- | :--- | :--- |
| 7.4 周六上午 4h | 本快照 v1.0 落档 | 主写 |
| Day 2 R1.1 派工时 | legacyAdapter.ts 注册到 saveVersioning.ts 后,同步真值快照 v1.1(加 v1.1 章节) | Day 2 短工 |
| Day 3 R1.3 R1.4 派工时 | BaggageTab.tsx 是否对接 + 视觉对照结果,同步 v1.2 | Day 3 短工 |
| Day 5 R1.5 跑测后 | rollEquipment.regression.ts 46 组 PASS 状态,同步 v1.3 | Day 5 短工 |
6. 参考入口
| 想看什么 | 去这里 |
| :--- | :--- |
| 5 日计划 v1.2 母本 | docs/plans/active/2026-07-06-5日开发计划-v1.md |
| Phase 1 切片母本 | docs/design/active/Phase1实施切片-v1.md |
| 道具词条 v3 | docs/design/active/道具词条与玩法扩展-v3.md |
| 道具视觉规范 v1.0 | docs/design/active/道具系统新核心UI视觉规范-v1.md |
| 视觉稿 | docs/design/active/道具系统新核心UI视觉稿-v1.html |
| 当前 task 卡 | docs/handoff/tasks/2026-07-07-to-08-phase1-equipment.md |
| 周末开发计划 + 5 日剩余派发 | docs/plans/active/2026-07-04-to-05-周末开发计划与5日剩余-lane派发-v1.md |
| AGENTS.md 守则 | AGENTS.md |
7. 版本与变更记录
| 版本 | 时间 | 整理人 | 关键变更 |
| :---: | :--- | :--- | :--- |
| v1.0 | 2026-07-03 16:55 | Mavis(主会话拍板 / 只快照口径) | 首版:Phase 1 装备 code-layer 真值快照(7 目录扫描 + 1 文档 9 表格);明确 5 日计划 v1.2 acceptance 与真值的偏差清单(5 条 acceptance 修订动作);不动项目代码 |
| (预计 v1.1) | Day 2 R1.1 派工后 | Day 2 短工 | 加 legacyAdapter.ts 真值确认 + saveVersioning.ts migration step 注册结果 |
| (预计 v1.2) | Day 3 R1.3 R1.4 派工后 | Day 3 短工 | 加 BaggageTab.tsx 对接验证 + 视觉对照结果 |
| (预计 v1.3) | Day 5 R1.5 跑测后 | Day 5 短工 | 加 rollEquipment.regression.ts 46 组 PASS 状态 |
(End of document — § 0 - § 7,预计 10 - 14 KB)