diff --git a/docs/comet/archive/2026-10-13-mengsan-hand-relics/brief.md b/docs/comet/archive/2026-10-13-mengsan-hand-relics/brief.md
new file mode 100644
index 0000000..32476f6
--- /dev/null
+++ b/docs/comet/archive/2026-10-13-mengsan-hand-relics/brief.md
@@ -0,0 +1,35 @@
+# Outcome
+
+在梦三战斗手牌区最左侧常驻展示持有遗物的图片列表,长按条目显示遗物描述。
+
+# Scope
+
+复用现有持有遗物数据和图片资源,调整战斗遗物界面及必要的手牌布局。
+图片本身就是列表条目,不增加独立文字列表。图片点击区域48×48 CSS像素,
+条目间距至少8px,与手牌保留至少12px间隔。遗物过多时局部滚动。
+长按500ms打开名称、描述和当前状态;滑动、取消和销毁会取消待触发长按。
+描述浮层支持明确关闭,限制在屏幕可见范围内;提供键盘打开与关闭方式。
+无图片或加载失败的遗物显示名称替代。保留现有详情弹窗入口作为补充。
+
+# Non-goals
+
+不修改遗物效果、获取规则、奖励池或存档,不改动其他游戏模式。
+不处理其他变更、不发布版本、不自动提交或推送。
+
+# Acceptance examples
+
+- 战斗开始后,手牌区最左侧展示当前持有遗物;每件遗物仅有一个图片条目,缺图显示名称。
+- 点击区域48×48px,条目间距至少8px,与手牌间隔至少12px;窄屏和遗物较多时可滚动且不重叠手牌。
+- 长按500ms显示对应名称、描述和当前状态;提前松开、滑动或取消不误触;键盘也可打开并关闭详情。
+- 遗物界面不触发手牌选择、拖动或出牌;既有手牌交互和遗物详情入口仍可用。
+- 战斗结束或会话销毁后移除列表、浮层、监听器和定时器,恢复被占用的布局空间;再次进入不重复挂载。
+
+# Decisions
+
+用户选择当前目录,实现遗物图片列表与长按描述,并明确要求使用UI/UX技能。
+UI/UX检索支持相邻触摸目标至少8px间距和按下反馈。
+
+# Verification expectations
+
+执行针对长按取消、数据展示和销毁清理的定向检查及语法检查;独立验证所有验收项。
+真实引擎和设备上的触摸、缩放与手牌回归未执行时明确标记边界,不宣称实机通过。
diff --git a/docs/comet/archive/2026-10-13-mengsan-hand-relics/comet-state.yaml b/docs/comet/archive/2026-10-13-mengsan-hand-relics/comet-state.yaml
new file mode 100644
index 0000000..f08f6bc
--- /dev/null
+++ b/docs/comet/archive/2026-10-13-mengsan-hand-relics/comet-state.yaml
@@ -0,0 +1,275 @@
+schema: comet.native.v4
+name: mengsan-hand-relics
+language: en
+phase: archive
+status: done
+state_version: 8
+brief: brief.md
+document_constraints_version: 2
+shape_confirmation_hash: 27831d4a33d10b9652c80f8548467e488fc93bea537bcd845ab109bf372ecaaa
+spec_changes:
+ - capability: mengsan-hand-relics
+ operation: create
+ source: specs/mengsan-hand-relics/spec.md
+workspace:
+ isolation: current
+ change_branch: main
+ target_branch: main
+ finish: null
+loop:
+ stage: done
+ goal_cycle: 1
+ iteration: 1
+ attempt: 1
+ retry_epoch: 0
+ failed_iteration_count: 0
+ no_progress_count: 0
+ execution_failure_count: 0
+ previous_unresolved_ids: []
+ next_action: null
+acceptance:
+ - id: A1
+ source: brief.md
+ text: 战斗开始后,手牌区最左侧展示当前持有遗物;每件遗物仅有一个图片条目,缺图显示名称。
+ result: passed
+ reason:
+ text: mountRelics复用heldRelics和createRelicIcon,逐件图片按钮;Runtime
+ hand-relic-browser确认12条、缺图/加载失败名称替代与刷新。
+ truncated: false
+ - id: A2
+ source: brief.md
+ text: 点击区域48×48px,条目间距至少8px,与手牌间隔至少12px;窄屏和遗物较多时可滚动且不重叠手牌。
+ result: passed
+ reason:
+ text: CSS 48x48、gap8、64px条带与88px布局预留;Runtime
+ hand-relic-browser在360/640/1280px确认尺寸、间距及局部滚动。
+ truncated: false
+ - id: A3
+ source: brief.md
+ text: 长按500ms显示对应名称、描述和当前状态;提前松开、滑动或取消不误触;键盘也可打开并关闭详情。
+ result: passed
+ reason:
+ text: 500ms定时器、提前松开/移动阈值/scroll/pointercancel/blur取消经源码和组件Runtime检查;hand-relic-dialog补充名称描述状态、屏内modal、Enter/Space打开、Escape/按钮关闭和焦点回归。
+ truncated: false
+ - id: A4
+ source: brief.md
+ text: 遗物界面不触发手牌选择、拖动或出牌;既有手牌交互和遗物详情入口仍可用。
+ result: passed
+ reason:
+ text: strip阻止交互冒泡,手牌入口仅接受属于手牌zone的.card;保留全量详情按钮,Runtime集成检查验证单项/全量入口及pointerdown不向手牌root冒泡。布局仅减可用宽度,未改手牌业务。
+ truncated: false
+ - id: A5
+ source: brief.md
+ text: 战斗结束或会话销毁后移除列表、浮层、监听器和定时器,恢复被占用的布局空间;再次进入不重复挂载。
+ result: passed
+ reason:
+ text: ownResource注册dispose,session逆序释放;strip销毁取消定时器、移除全部注册监听和DOM、恢复CSS变量。Runtime组件与集成检查验证销毁中断长按、重复dispose、modal清理及重挂载唯一条带。
+ truncated: false
+builder_handoff:
+ candidate_id: 4411b609-0d11-4d73-8fa7-fa402cbb1f88
+ identity_provider: skill-coordinated
+ builder_execution_ref: skill-coordinated:builder:79d2c398-bd34-4cfa-b146-a31feb185d5c
+ iteration: 1
+ summary:
+ text: 手牌左侧遗物图片列表、500ms长按详情、滚动与生命周期清理已实现
+ truncated: false
+ addressed_acceptance_ids:
+ - A1
+ - A2
+ - A3
+ - A4
+ - A5
+ acceptance_review:
+ - id: A1
+ status: implemented-with-evidence
+ evidence:
+ - mengsan/ui/relic-strip.js:63-89
+ - mengsan/ui/relics.js:5-91
+ - mengsan/tools/check-hand-relics.mjs
+ note: 复用持有遗物和图片,缺图名称替代
+ - id: A2
+ status: implemented-with-evidence
+ evidence:
+ - mengsan/ui/style.css:1379-1434
+ - mengsan/ui/hand/style.css:6-19
+ - mengsan/tools/check-hand-relics.mjs
+ note: 88px预留与64px列表形成24px间距,48px触摸目标和8px行间距
+ - id: A3
+ status: implemented-with-evidence
+ evidence:
+ - mengsan/ui/relic-strip.js:13-46
+ - mengsan/ui/relics.js:49-87
+ - mengsan/tools/check-hand-relics.mjs
+ note: 长按打开对应详情;取消、滚动和键盘支持
+ - id: A4
+ status: implemented-with-evidence
+ evidence:
+ - mengsan/ui/relic-strip.js:48-58
+ - mengsan/ui/hand/style.css:6-19
+ - mengsan/tools/check-hand-relics.mjs
+ note: 事件阻止冒泡,手牌只调整容器可用宽度,保留全量详情入口
+ - id: A5
+ status: implemented-with-evidence
+ evidence:
+ - mengsan/ui/relic-strip.js:92-106
+ - mengsan/ui/relics.js:88-94
+ - mengsan/tools/check-hand-relics.mjs
+ note: session资源释放调用dispose,移除监听定时器并恢复变量
+ checks:
+ - name:
+ text: focused-browser
+ truncated: false
+ result: passed
+ note:
+ text: Edge测试360/640/1280px间距、缺图、长按及取消、键盘、刷新和清理通过
+ truncated: false
+ - name:
+ text: syntax
+ truncated: false
+ result: passed
+ note:
+ text: node --check relics.js/relic-strip.js通过
+ truncated: false
+ checks_truncated: false
+ known_limits:
+ - text: 未在真实无名杀游戏或物理触摸设备上验收;浏览器为隔离组件检查。
+ truncated: false
+ known_limits_truncated: false
+ review: null
+ submitted_at: 2026-10-13T09:54:07.717Z
+blockers: []
+verification:
+ candidate_id: 4411b609-0d11-4d73-8fa7-fa402cbb1f88
+ identity_provider: skill-coordinated
+ verifier_execution_ref: skill-coordinated:verifier:77a0df51-2a3e-4976-ba8a-c55403e89206
+ iteration: 1
+ attempt: 1
+ assurance: skill-coordinated
+ verdict: pass
+ checks:
+ - id: hand-relic-browser
+ name:
+ text: hand-relic-browser
+ truncated: false
+ argv_display:
+ - text: mengsan/tools/check-hand-relics.mjs
+ truncated: false
+ - text: C:/Users/111/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/node_modules/playwright
+ truncated: false
+ - text: C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe
+ truncated: false
+ argv_truncated: false
+ cwd_ref: .
+ status: passed
+ exit_code: 0
+ duration_ms: 3919
+ - id: hand-relic-dialog
+ name:
+ text: hand-relic-dialog
+ truncated: false
+ argv_display:
+ - text: -e
+ truncated: false
+ - text: "const fs=require('fs'); const assert=require('assert/strict'); const
+ {chromium}=require('C:/Users/111/.cache/codex-runtimes/codex-primar\
+ y-runtime/dependencies/node/node_modules/playwright');
+ (async()=>{const browser=await
+ chromium.launch({headless:true,executablePath:'C:/Program Files
+ (x86)/Microsoft/Edge/Application/msedge.exe'});try{const page=await
+ browser.newPage({viewport:{width:360,height:640}});await
+ page.setContent('
');await
+ page.addStyleTag({content:fs.readFileSync('mengsan/ui/style.css','u\
+ tf8')+fs.readFileSync('mengsan/ui/hand/style.css','utf8')});const
+ source=fs.readFileSync('mengsan/ui/relic-strip.js','utf8')+'\\n'+fs\
+ .readFileSync('mengsan/ui/relics.js','utf8').replace(/^import
+ .*;$/gm,'');await page.evaluate(async source=>{const prelude='const
+ ui=window.ui; const heldRelics=run=>run.relics; const
+ createRelicIcon=()=>null;';window.ui={me:document.querySelector('#r\
+ oot'),window:document.body};window.run={relics:[{id:'a',name:'甲',de\
+ scription:'描述甲',pool:'常规',tier:'普通'},{id:'b',name:'乙',description:'\
+ 描述乙',pool:'常规',tier:'普通'}]};window.session={active:true,ownResource\
+ :(key,dispose)=>window.cleanup=dispose};window.handEvents=0;ui.me.a\
+ ddEventListener('pointerdown',()=>window.handEvents++);const
+ module=await import(URL.createObjectURL(new
+ Blob([prelude+source],{type:'text/javascript'})));window.mount=modu\
+ le.mountRelics;window.instance=mount(session,run,{status:()=>
+ '状态示例'});},source);const
+ items=page.locator('.mengsan-hand-relics-shuying button');await
+ items.first().focus();await
+ page.keyboard.press('Enter');assert.equal(await
+ page.locator('dialog').count(),1);assert.equal(await
+ page.locator('dialog section').count(),1);assert.ok((await
+ page.locator('dialog').innerText()).includes('描述甲'));assert.ok((awa\
+ it page.locator('dialog').innerText()).includes('状态示例'));const
+ rect=await
+ page.locator('dialog').boundingBox();assert.ok(rect.x>=0&&rect.y>=0\
+ &&rect.x+rect.width<=360&&rect.y+rect.height<=640);await
+ page.keyboard.press('Escape');assert.equal(await
+ page.locator('dialog').count(),0);assert.equal(await
+ items.first().evaluate(e=>document.activeElement===e),true);await
+ page.locator('.mengsan-battle-relics-button-shuying').click();asser\
+ t.equal(await page.locator('dialog section').count(),2);await
+ page.getByRole('button',{name:'关闭',exact:true}).click();await
+ items.first().click();assert.equal(await
+ page.evaluate(()=>handEvents),0);await items.first().focus();await
+ page.keyboard.press('Space');assert.equal(await
+ page.locator('dialog').count(),1);await
+ page.evaluate(()=>cleanup());assert.equal(await
+ page.locator('dialog,.mengsan-hand-relics-shuying,.mengsan-battle-r\
+ elics-button-shuying').count(),0);await
+ page.evaluate(()=>{instance=mount(session,run,{status:()=>
+ '状态示例'});});assert.equal(await
+ page.locator('.mengsan-hand-relics-shuying').count(),1);await
+ page.evaluate(()=>cleanup());console.log('PASS: integrated relic
+ dialog selected/all contents, status, viewport bounds,
+ Enter/Space/Escape, focus return, pointer bubbling isolation,
+ session cleanup and remount');}finally{await
+ browser.close();}})().catch(e=>{console.error(e);process.exitCode=1\
+ });"
+ truncated: false
+ argv_truncated: false
+ cwd_ref: .
+ status: passed
+ exit_code: 0
+ duration_ms: 1298
+ summary:
+ text: 独立只读验收A1–A5通过;复用绑定当前候选hand-relic-browser并补充hand-relic-dialog成功。
+ truncated: false
+ risks:
+ - text: 验收采用隔离 Edge 浏览器组件及遗物详情集成、源码审查;没有运行完整无名杀引擎、物理触摸设备或真实缩放/手牌出牌回归,不代表实机验收通过。
+ truncated: false
+ - text: check-hand-relics.mjs被现有*.mjs忽略规则排除,当前Runtime使用本地文件;后续如提交或迁移必须确保检查文件随交付提供。
+ truncated: false
+ - text: 图索引所涉源码metadata_changed及CSS部分解析覆盖已直接读源码核实,结论以当前候选源码和Runtime证据为准。
+ truncated: false
+ - text: 旧全量check-sts2-relics.mjs因源图集burning_blood.png缺失ENOENT未通过,不能将该全量检查计为通过;此次UI定向Runtime检查不受影响。
+ truncated: false
+ risks_truncated: false
+ completed_at: 2026-10-13T09:58:45.226Z
+history:
+ - goal_cycle: 1
+ iteration: 1
+ attempt: 1
+ outcome: pass
+ unresolved_ids: []
+ summary:
+ text: 独立只读验收A1–A5通过;复用绑定当前候选hand-relic-browser并补充hand-relic-dialog成功。
+ truncated: false
+ completed_at: 2026-10-13T09:58:45.226Z
+history_overflow:
+ dropped_entries: 0
+ first_dropped_at: null
+ last_dropped_at: null
+ outcome_counts:
+ pass: 0
+ fail: 0
+ blocked: 0
+ execution-error: 0
+ recovery: 0
+verification_result: pass
+verification_report: verification.md
+archived: true
+created_at: 2026-10-13T09:47:29.973Z
diff --git a/docs/comet/archive/2026-10-13-mengsan-hand-relics/specs/mengsan-hand-relics/spec.md b/docs/comet/archive/2026-10-13-mengsan-hand-relics/specs/mengsan-hand-relics/spec.md
new file mode 100644
index 0000000..70d32c8
--- /dev/null
+++ b/docs/comet/archive/2026-10-13-mengsan-hand-relics/specs/mengsan-hand-relics/spec.md
@@ -0,0 +1,27 @@
+# Battle hand relic list
+
+梦三战斗手牌区左侧展示征程当前持有的遗物,复用既有图片、名称、描述和战斗状态。
+列表条目为图片按钮;无图片或图片加载失败以名称替代,具有可访问名称。
+现有遗物详情入口保留,不改变遗物业务行为。
+
+### Scenario: 持有遗物展示
+Acceptance: A1
+进入战斗后左侧列表逐件展示持有遗物,图片与条目是一体,不另设文字列表。
+
+### Scenario: 间距和溢出
+Acceptance: A2
+点击区域48×48px,条目间距至少8px,与手牌间隔至少12px。
+窄屏和遗物较多时在列表内滚动,不覆盖手牌。
+
+### Scenario: 长按描述
+Acceptance: A3
+持续按下500ms打开名称、描述和当前状态;提前松开、滚动、取消不会误打开。
+浮层有关闭方式,位于可见屏幕内;键盘可打开并关闭详情。
+
+### Scenario: 手牌兼容
+Acceptance: A4
+操作遗物不触发手牌选择、拖动或出牌,保留既有遗物详情入口和手牌交互。
+
+### Scenario: 生命周期
+Acceptance: A5
+退出战斗或销毁会话清理列表、浮层、监听器及长按定时器,恢复布局空间;重新进入不重复挂载。
diff --git a/docs/comet/archive/2026-10-13-mengsan-hand-relics/verification.md b/docs/comet/archive/2026-10-13-mengsan-hand-relics/verification.md
new file mode 100644
index 0000000..f2cf0ee
--- /dev/null
+++ b/docs/comet/archive/2026-10-13-mengsan-hand-relics/verification.md
@@ -0,0 +1,63 @@
+---
+generated_from_state_version: 8
+---
+
+# Verification
+
+## Current result
+
+- Result: **Archived**
+- Verification status: **Checks completed; result confirmed**
+- Goal cycle: 1
+- Iteration: 1
+- Verifier attempt: 1
+- Completed: 2026-10-13T09:58:45.226Z
+- Summary: 独立只读验收A1–A5通过;复用绑定当前候选hand-relic-browser并补充hand-relic-dialog成功。
+
+## Acceptance
+
+| ID | Result | Source | Criterion | Reason |
+| --- | --- | --- | --- | --- |
+| A1 | passed | brief.md | 战斗开始后,手牌区最左侧展示当前持有遗物;每件遗物仅有一个图片条目,缺图显示名称。 | mountRelics复用heldRelics和createRelicIcon,逐件图片按钮;Runtime hand-relic-browser确认12条、缺图/加载失败名称替代与刷新。 |
+| A2 | passed | brief.md | 点击区域48×48px,条目间距至少8px,与手牌间隔至少12px;窄屏和遗物较多时可滚动且不重叠手牌。 | CSS 48x48、gap8、64px条带与88px布局预留;Runtime hand-relic-browser在360/640/1280px确认尺寸、间距及局部滚动。 |
+| A3 | passed | brief.md | 长按500ms显示对应名称、描述和当前状态;提前松开、滑动或取消不误触;键盘也可打开并关闭详情。 | 500ms定时器、提前松开/移动阈值/scroll/pointercancel/blur取消经源码和组件Runtime检查;hand-relic-dialog补充名称描述状态、屏内modal、Enter/Space打开、Escape/按钮关闭和焦点回归。 |
+| A4 | passed | brief.md | 遗物界面不触发手牌选择、拖动或出牌;既有手牌交互和遗物详情入口仍可用。 | strip阻止交互冒泡,手牌入口仅接受属于手牌zone的.card;保留全量详情按钮,Runtime集成检查验证单项/全量入口及pointerdown不向手牌root冒泡。布局仅减可用宽度,未改手牌业务。 |
+| A5 | passed | brief.md | 战斗结束或会话销毁后移除列表、浮层、监听器和定时器,恢复被占用的布局空间;再次进入不重复挂载。 | ownResource注册dispose,session逆序释放;strip销毁取消定时器、移除全部注册监听和DOM、恢复CSS变量。Runtime组件与集成检查验证销毁中断长按、重复dispose、modal清理及重挂载唯一条带。 |
+
+## Checks
+
+| Check | Command | Working directory | Status | Exit | Duration |
+| --- | --- | --- | --- | ---: | ---: |
+| hand-relic-browser | mengsan/tools/check-hand-relics.mjs C:/Users/111/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/node_modules/playwright C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe | . | passed | 0 | 3919 ms |
+| hand-relic-dialog | -e const fs=require('fs'); const assert=require('assert/strict'); const {chromium}=require('C:/Users/111/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/node_modules/playwright'); (async()=>{const browser=await chromium.launch({headless:true,executablePath:'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe'});try{const page=await browser.newPage({viewport:{width:360,height:640}});await page.setContent('');await page.addStyleTag({content:fs.readFileSync('mengsan/ui/style.css','utf8')+fs.readFileSync('mengsan/ui/hand/style.css','utf8')});const source=fs.readFileSync('mengsan/ui/relic-strip.js','utf8')+'\n'+fs.readFileSync('mengsan/ui/relics.js','utf8').replace(/^import .*;$/gm,'');await page.evaluate(async source=>{const prelude='const ui=window.ui; const heldRelics=run=>run.relics; const createRelicIcon=()=>null;';window.ui={me:document.querySelector('#root'),window:document.body};window.run={relics:[{id:'a',name:'甲',description:'描述甲',pool:'常规',tier:'普通'},{id:'b',name:'乙',description:'描述乙',pool:'常规',tier:'普通'}]};window.session={active:true,ownResource:(key,dispose)=>window.cleanup=dispose};window.handEvents=0;ui.me.addEventListener('pointerdown',()=>window.handEvents++);const module=await import(URL.createObjectURL(new Blob([prelude+source],{type:'text/javascript'})));window.mount=module.mountRelics;window.instance=mount(session,run,{status:()=> '状态示例'});},source);const items=page.locator('.mengsan-hand-relics-shuying button');await items.first().focus();await page.keyboard.press('Enter');assert.equal(await page.locator('dialog').count(),1);assert.equal(await page.locator('dialog section').count(),1);assert.ok((await page.locator('dialog').innerText()).includes('描述甲'));assert.ok((await page.locator('dialog').innerText()).includes('状态示例'));const rect=await page.locator('dialog').boundingBox();assert.ok(rect.x>=0&&rect.y>=0&&rect.x+rect.width<=360&&rect.y+rect.height<=640);await page.keyboard.press('Escape');assert.equal(await page.locator('dialog').count(),0);assert.equal(await items.first().evaluate(e=>document.activeElement===e),true);await page.locator('.mengsan-battle-relics-button-shuying').click();assert.equal(await page.locator('dialog section').count(),2);await page.getByRole('button',{name:'关闭',exact:true}).click();await items.first().click();assert.equal(await page.evaluate(()=>handEvents),0);await items.first().focus();await page.keyboard.press('Space');assert.equal(await page.locator('dialog').count(),1);await page.evaluate(()=>cleanup());assert.equal(await page.locator('dialog,.mengsan-hand-relics-shuying,.mengsan-battle-relics-button-shuying').count(),0);await page.evaluate(()=>{instance=mount(session,run,{status:()=> '状态示例'});});assert.equal(await page.locator('.mengsan-hand-relics-shuying').count(),1);await page.evaluate(()=>cleanup());console.log('PASS: integrated relic dialog selected/all contents, status, viewport bounds, Enter/Space/Escape, focus return, pointer bubbling isolation, session cleanup and remount');}finally{await browser.close();}})().catch(e=>{console.error(e);process.exitCode=1}); | . | passed | 0 | 1298 ms |
+
+### Builder-reported evidence
+
+These are Builder reports, not Runtime check receipts or independent verification results.
+
+- focused-browser: passed — Edge测试360/640/1280px间距、缺图、长按及取消、键盘、刷新和清理通过
+- syntax: passed — node --check relics.js/relic-strip.js通过
+- Known limitation: 未在真实无名杀游戏或物理触摸设备上验收;浏览器为隔离组件检查。
+
+## Blockers
+
+_None._
+
+## Risks and skipped work
+
+- 验收采用隔离 Edge 浏览器组件及遗物详情集成、源码审查;没有运行完整无名杀引擎、物理触摸设备或真实缩放/手牌出牌回归,不代表实机验收通过。
+- check-hand-relics.mjs被现有*.mjs忽略规则排除,当前Runtime使用本地文件;后续如提交或迁移必须确保检查文件随交付提供。
+- 图索引所涉源码metadata_changed及CSS部分解析覆盖已直接读源码核实,结论以当前候选源码和Runtime证据为准。
+- 旧全量check-sts2-relics.mjs因源图集burning_blood.png缺失ENOENT未通过,不能将该全量检查计为通过;此次UI定向Runtime检查不受影响。
+
+## Previous iterations
+
+| Goal cycle | Iteration | Attempt | Outcome | Unresolved | Summary | Completed |
+| ---: | ---: | ---: | --- | --- | --- | --- |
+| 1 | 1 | 1 | pass | — | 独立只读验收A1–A5通过;复用绑定当前候选hand-relic-browser并补充hand-relic-dialog成功。 | 2026-10-13T09:58:45.226Z |
+
+
+
+## Conclusion
+
+独立只读验收A1–A5通过;复用绑定当前候选hand-relic-browser并补充hand-relic-dialog成功。
diff --git a/docs/comet/specs/mengsan-hand-relics/spec.md b/docs/comet/specs/mengsan-hand-relics/spec.md
new file mode 100644
index 0000000..70d32c8
--- /dev/null
+++ b/docs/comet/specs/mengsan-hand-relics/spec.md
@@ -0,0 +1,27 @@
+# Battle hand relic list
+
+梦三战斗手牌区左侧展示征程当前持有的遗物,复用既有图片、名称、描述和战斗状态。
+列表条目为图片按钮;无图片或图片加载失败以名称替代,具有可访问名称。
+现有遗物详情入口保留,不改变遗物业务行为。
+
+### Scenario: 持有遗物展示
+Acceptance: A1
+进入战斗后左侧列表逐件展示持有遗物,图片与条目是一体,不另设文字列表。
+
+### Scenario: 间距和溢出
+Acceptance: A2
+点击区域48×48px,条目间距至少8px,与手牌间隔至少12px。
+窄屏和遗物较多时在列表内滚动,不覆盖手牌。
+
+### Scenario: 长按描述
+Acceptance: A3
+持续按下500ms打开名称、描述和当前状态;提前松开、滚动、取消不会误打开。
+浮层有关闭方式,位于可见屏幕内;键盘可打开并关闭详情。
+
+### Scenario: 手牌兼容
+Acceptance: A4
+操作遗物不触发手牌选择、拖动或出牌,保留既有遗物详情入口和手牌交互。
+
+### Scenario: 生命周期
+Acceptance: A5
+退出战斗或销毁会话清理列表、浮层、监听器及长按定时器,恢复布局空间;重新进入不重复挂载。