5.0 KiB
M58 Market Read-Surface Defect Inventory
Step M58-A record. Source: tools/m52_market_visual_probe.gd captures
(static-only, dynamic-only on a neutral field, final composite) at 760x360,
844x390 and 1280x720 in zh_CN and en. Retained source-bound attempt:
ABG_TEST_ATTEMPT_PASS label=m58-market-probe
artifact=/private/tmp/aetherbound-guild-test-evidence/m58-market-probe/20260913T083440Z-44499
1. Fixture honesty (fixed in this step)
The fixture hardcoded "profession_id": "PF-B01" and "trait_id": "TR-001"
for every offer and one price for all three, so the board rendered three copies
of one recruit and could not validate the board or the ledger portrait binding.
The three offers now carry real base professions and per-offer prices, with the
catalogue role names in both locales:
| Offer | profession_id | profession (zh / en) | price |
|---|---|---|---|
| R-001 | PF-B01 |
盾卫 / Hearthguard | 14 |
| R-002 | PF-B05 |
弓手 / Farstring | 18 |
| R-003 | PF-B07 |
治疗 / Kindhand | 22 |
The three cards now render three different portraits and the ledger portrait follows the selected offer.
2. Root cause: fixed-pixel chrome against proportional text slots
market_chrome.gd draws its card, ledger and title surfaces in fixed pixels
(_draw_card uses Rect2(5, 13, size.x - 10, size.y - 18), a ribbon band at
rect.y + 8 .. rect.y + 26, a price strip 25 px from the bottom and 16 px tall)
while m52_market_slots.gd places the labels as proportional fractions of
the same control (card.profession = (0.12, 0.055, 0.76, 0.10),
card.price = (0.14, 0.88, 0.72, 0.08)). Both cannot be right at every
fixture, and the measured capture confirms the drift.
Measured on the 1280x720 zh_CN final composite, card region x 90..275:
| Row band | Content |
|---|---|
| y 227..243 | accent ribbon band (172-176 blue pixels per row) |
| y 241..243 | only rows where the white profession glyphs touch the band |
| y 244+ | parchment face; the rest of the glyph falls on it |
So the profession label is vertically centred on the ribbon band's lower edge:
its top three rows read as white-on-blue, the remainder is white-on-parchment
and effectively disappears. The market page places its content on the fixed 1280x720 design canvas, so this
mismatch is constant rather than fixture-dependent: the label always straddles
the band edge. The price strip had the same defect (the cost label crossed the
strip's top edge) and the coin icon was anchored to a fraction that drifted over
the leading characters of 可招募 (M58-I06).
3. Measured contrast (1280x720 zh_CN final composite)
WCAG contrast of the label against its own surface, sampled from the capture:
| Label | Measured | Verdict |
|---|---|---|
Ledger profession line (盾卫) |
3.39:1 | below the 4.5:1 small-text floor |
Ledger cost amount (可招募 14 金币) |
n/a | label overflowed a strip only ~10 px tall while its glyphs are ~11 px, so it had no single owner surface |
Card profession ribbon (盾卫) |
n/a | label straddled the accent band and the parchment face, so it had no single pair |
| Card trait chip | 12.78:1 | passes |
| Card cost amount | 11.57:1 | passes |
| Card name plate | 10.11:1 | passes |
| Ledger detail line | 4.89:1 | passes, weakest passing label |
M58-I02 is the carried-over M57-I05 defect: the ledger's profession line and
cost amount are below the readable floor.
4. Trait chip ownership
The trait chip ribbon carries ornaments at both ends that consume the strip the
label needs; the label only survives because the fixture text is short
(M58-I05).
5. Type floor
The market module labels were authored at the raw token sizes (micro 11 px,
label 14 px) while the view-level labels use _market_text_size, which
doubles the token on the fixed canvas. On a 760-wide window that left the module
labels at roughly 6.5 physical pixels. M58-B gives every Market module the
same canvas scale as the view, so micro renders at 22 canvas pixels there too.
6. Remaining flat/vector chrome on text-bearing surfaces
- Footer navigation (
返回公会,返回委托) draws vector chevrons over the plate and leaves the label on a flat plate. - The header settings control is a flat dark square with a vector gear, while Readiness now uses the hand-drawn plate family.
- The
可用招募board band, the card shells and the ledger shell still use page-local flat chrome rather than the shared hand-drawn material (M58-I04).
M59 机器检查发现的残留缺陷(2026-09-13,已修)
M59_PROBE_INK_CHECKS 的 ui_ink_check.gd 在普通与最长文案 fixture 上
一次命中 6 处 M58 类别残留缺陷,全部在本里程碑内修复;逐条实测与修复见
docs/plans/M59_PROBE_INK_CHECKS.md。其中最深的约束是"标签矩形 ≠ 材质
可见内框":名牌端帽与缎带端帽会盖住首尾字,而仅比较"文字 ≤ 标签矩形"
的检查无法发现。修复后 ABG_M59_INK_CHECK_OK scanned=12 violations=0。