Skip to content

Show the rule-anchored score range on the feedback first screen - #36

Merged
Jeffreyliu0131 merged 9 commits into
mainfrom
claude/139-score-ranges
Oct 12, 2026
Merged

Jeffreyliu0131 merged 9 commits into
mainfrom
claude/139-score-ranges

Conversation

@Jeffreyliu0131

Copy link
Copy Markdown
Collaborator

Show the rule-anchored score range on the feedback first screen (product decision 5, 2026-10-11). The product still never shows a single total; it shows the range the verified rules have already pinned down, and model advice still does not count.

What the user sees (zh/en, desktop and 390px, keyboard)

  • Feedback first screen: one line "规则已定标部分:N–M 分(适用项共 X 分,满分 100)" / "Rule-anchored: N–M of X applicable points (out of 100)" with a one-sentence explanation; expanding shows each item's weight and status. Lower bound counts MET as full weight and PARTIAL as half; items awaiting verification, model-only suggestions and applicability-pending items keep their full width open; NOT_APPLICABLE items leave the denominator.
  • Sessions still bound to rubric-v2 candidate-2 show "此版本不汇总 / This version does not aggregate" instead of a range; scoped (limited-range) reviews record no range.
  • Displayed bounds are rounded outward but never past the displayed denominator or weight (rangeEnds(lower, upper, cap)), so "33.3 of 33.3" never reads as "33.4 of 33.3".

Backend and contract

  • rubrics/v4/score_range.py computes the range once when feedback is written; FeedbackV2.score_range is optional and older records are byte-for-byte unchanged (example compared byte for byte in tests). Weights come from the session package's installed final rubric file and are hash-checked; tampered weights are rejected.
  • Contract exports regenerated: expansion-v3 → 14439473, engineer-review-v1 → ce936180 (previous 2a9777a2); manifest_history notes that scoped reviews record no range.

Review and verification

  • Independent review 080-review-139.md (two rounds; first round sent back for a display-rounding P1, fixed in 2ee84bf with 12 rounding cases): final verdict 可合入. Reviewer recomputed 217 weight/status combinations independently, scanned 721,801 rounding pairs (0 overflow, 0 narrowing), and probed weight tampering (all rejected).
  • Locked gate on 271378b: lint 0 new; backend 3212 passed / 31 skipped; frontend 404 / 7; 72 state checks; build; per-ID "Regression gate: 0 problems"; browser 20 steps zh+en; MCP bilingual pass. The branch contains main 06122d8, so the merge tree equals the gated tree.

Not claimed / follow-ups

Two wording decisions taken on 2026-10-12 are not in this PR and follow separately: when some items' applicability is unconfirmed the denominator line will read "适用项共 X 分,其中 Y 分适用性待确认"; the coverage line will show item counts only (no percentage). RANGED_VERSIONS lists the final rubric version explicitly; a future rubric version needs a one-line update. Receipt: 完成回执/claude-coordination/139-分数区间显示.md.

Feedback written under an installed rubric with frozen weights now carries an
optional score_range: verified rule bounds tighten it, pending, model-advice and
undetermined criteria span their full weight, and not-applicable criteria leave
the denominator, which is reported without rescaling. There is no single total.
Candidate-2 rubrics have no frozen weights and record nothing, so their bytes
are unchanged; partial read projections whose rule results changed withhold
the range. The engine's own diagnostics stay byte-identical.
…re range

Append the rule-score-range manifest history entry (previous revision
expansion-v3-2a9777a2...), regenerate both exports through their official
entry points (identical in two empty directories first), regenerate
contracts-v2.ts and refresh the five protected release identities.
The short result now states the recorded range of the rule-anchored part with
its denominator and the note that model advice is not scored and pending items
widen the range; expanding an item names its weight share and whether rules
anchor it, bound it, leave it pending or find it not applicable, with points
only for rule results. Candidate-2 records say their rubric version has no
range; a final record without one says so, and a partial projection says the
range is withheld. Copy lives in the paired zh/en table.
Old candidate-2 sessions after the switch and new final-rubric launches, zh and
en, desktop and 390px, light and dark.
A review limited to some criteria (an API or external-agent scope) would
otherwise describe criteria it never evaluated; its feedback job also failed on
the strict criterion check. Unknown or duplicate criteria are still rejected.
An upper end equal to the denominator (or to a rule-bounded item's weight) is
written exactly as that number, and a rounded-up upper end never passes it; the
lower end still rounds down. An exploration-note review now reads 0–33.3 of
33.3 instead of 0–33.4 of 33.3. The normal-entry check adds that review card.
Regenerate both exports (identical in two empty directories first),
contracts-v2.ts and the two changed release identities.
Two cases shared one title, which the regression comparison rejects as a
duplicate frontend test ID.
@Jeffreyliu0131
Jeffreyliu0131 merged commit d163747 into main Oct 12, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant