Conversation
- replace the icon-only calculator affordance with a visible Ship Designer CTA - show hull, armor, modules, dry mass copy and applied-design summary - update browser verifier coverage and regenerated published assets Refs: #32
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
There was a problem hiding this comment.
Pull request overview
This PR promotes the existing Ship Designer / Dry Mass Calculator workflow to a prominent, in-card text CTA with clearer status/copy, while keeping the underlying modal implementation and adding browser verifier coverage to prevent regressions.
Changes:
- Reworked the Ship Designer card UI so the primary entry point is a visible text CTA and the status includes dry mass and applied design summary.
- Updated i18n/static text mappings and modal rerender behavior so CTA/status text stays correct across language changes.
- Expanded browser verification to assert CTA placement, localization, and apply-flow behavior; documented the #32 phase plan in
docs/plan/issue_32/.
Reviewed changes
Copilot reviewed 13 out of 14 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/verify_drive_comparison_browser.mjs | Adds browser verifier assertions for the new Ship Designer CTA/status and localization behavior. |
| tools/drive_comparison_template.html | Updates Ship Designer card markup and (currently) inlines connection-line controls markup. |
| tools/drive_comparison_styles.css | Adjusts Ship Designer card styling for the new CTA/status layout. |
| tools/drive_comparison_i18n.py | Extends static English replacements / block replacements for new UI copy. |
| tools/drive_comparison_client/ui/dry_mass_calculator.js | Ensures modal rerenders refresh Ship Designer panel text via updateShipDesignerPanel(). |
| tools/drive_comparison_client/ui/control_state.js | Updates Ship Designer CTA/status copy and removes module-effects summary line output. |
| tools/drive_comparison_client/calc/filtering.js | Adjusts hidden-summary accounting scope (excludes alien rows). |
| docs/plan/issue_32/00-master-plan.md | Adds issue #32 implementation master plan documentation. |
| docs/plan/issue_32/01-ship-designer-entry.md | Adds phase plan for promoting Ship Designer entry point. |
| docs/plan/issue_32/02-verification.md | Adds phase plan for build + browser verification outcomes. |
| docs/assets/js/ui/dry_mass_calculator.js | Generated publish output reflecting source UI changes. |
| docs/assets/js/ui/control_state.js | Generated publish output reflecting source UI changes. |
| docs/assets/js/calc/filtering.js | Generated publish output reflecting source calc changes. |
| <div id="connectionLineControls" class="connection-line-controls" aria-label="연결선 표시"> | ||
| <div class="connection-line-mode-label">연결선</div> | ||
| <div class="segmented compact connection-line-mode" role="radiogroup" aria-label="연결선 표시"> | ||
| <label title="연결선을 숨깁니다." aria-label="끔: 연결선을 숨깁니다."><input type="radio" name="connectionLineMode" value="off" title="연결선을 숨깁니다.">끔</label> | ||
| <label title="드라이브 연구 선후관계가 확인되는 연결선만 표시합니다." aria-label="엄격: 드라이브 연구 선후관계가 확인되는 연결선만 표시합니다."><input type="radio" name="connectionLineMode" value="strict" title="드라이브 연구 선후관계가 확인되는 연결선만 표시합니다.">엄격</label> | ||
| <label title="드라이브 연구 연결선에 더해 반응로/전원 계통 진행선을 표시합니다." aria-label="계통: 드라이브 연구 연결선에 더해 반응로/전원 계통 진행선을 표시합니다."><input type="radio" name="connectionLineMode" value="lineage" title="드라이브 연구 연결선에 더해 반응로/전원 계통 진행선을 표시합니다." checked>계통</label> | ||
| <label title="넓은 계열 보조선까지 포함해 가능한 진행선을 모두 표시합니다." aria-label="전체: 넓은 계열 보조선까지 포함해 가능한 진행선을 모두 표시합니다."><input type="radio" name="connectionLineMode" value="all" title="넓은 계열 보조선까지 포함해 가능한 진행선을 모두 표시합니다.">전체</label> | ||
| </div> | ||
| </div> |
|
I agree that duplicating runtime-rendered controls as pre-hydration placeholders adds maintenance burden. For this PR, I think it is still acceptable as a short-term mitigation to reduce the pre-JS layout/content mismatch, but I agree it should not become the long-term pattern. The better direction is to replace these per-control static placeholders with a small loading app shell / loading screen, so static HTML does not need to mirror complex interactive controls. I’ll track that separately and keep this PR scoped to the current Ship Designer / control-surface cleanup rather than expanding it into a broader boot/loading-state refactor. |
What changed
Open Ship Designer/Edit Ship DesignCTA.dryMassCalcButtonwiring instead of creating a second ship-design implementation.docs/plan/issue_32/.Why
How
updateShipDesignerPanel()from modal rendering so language changes and modal rerenders preserve the player-facing CTA text.docs/index.htmlregenerated.docs/assets/js/ui/control_state.jsregenerated.docs/assets/js/ui/dry_mass_calculator.jsregenerated.Testing
npm run buildnpm run verifydocs/plan/issue_32Open Ship Designer, assumption copy, no-template status, and dry mass.Edit Ship Design, selected design name, and dry mass outside the modal.docs/index.htmlregeneratedRisk / Rollback
updateShipDesignerPanel().npm run buildto restore generated output if needed.Reviewer Checklist
PR Classification (optional)
Justification:
This corrects discoverability for an existing Ship Designer workflow without adding a second designer implementation.