fix(#223): sort the review row's badges into verdicts and context chips - #355
Conversation
justinjoy
left a comment
There was a problem hiding this comment.
이 PR은 현재 상태로는 변경이 필요합니다.
현재 priority ladder는 conflicted > accept recommended > corroborated만 trust verdict로 승격하고, 그 외 trust.trust_labels는 모두 grey .chip으로 렌더링합니다. 이 때문에 evidence_missing / unsupported 같은 행은 기존에는 위험 신호로 보이던 trust 상태가 status badge 옆의 회색 context chip으로 내려갑니다.
unsupported와 evidence_missing은 단순한 부가 정보가 아니라 review queue와 dashboard에서 사용자가 주의해야 하는 상태입니다. 이 상태가 verdict 없이 회색 chip으로만 표시되면, 신뢰 판단이 필요한 행이 일반 context처럼 읽힐 수 있습니다.
요구사항:
unsupported/evidence_missing행이 적절한 trust verdict를 갖도록 priority rule을 확장하십시오. 또는 이 상태를 의도적으로 context로 낮추는 제품 정책 변경이라면 그 결정을 명시하고, 기존 사용자가 놓치지 않도록 다른 비색상 채널로 충분히 강조하십시오.- 해당 상태가 verdict 또는 명확한 경고 신호로 렌더링되는지 rendered-output 테스트로 고정하십시오.
- 가능하면
accept recommended,corroborated,unsupported/evidence_missing각각의 branch가 기대 tier로 렌더링되는 테스트를 분리해 추가하십시오.
추가로 .badge.chip 안의 nested code는 기존 code 색상 때문에 accent 색을 유지할 수 있습니다. “grey means context” 규칙을 강하게 가져가려면 chip 내부 code 색상도 함께 검토해 주십시오. 이 부분은 위 trust verdict 문제보다는 덜 급하지만, 현재 CSS guard가 놓치는 시각적 불일치입니다.
26c1c96 to
0a5d807
Compare
|
리뷰 반영했습니다. 요구사항별 대응1. 규칙은 green verdict 가 warning 을 억누르면 안 된다 입니다. 그래서 caution 세 가지가 reassurance 두 가지보다 위입니다. 강등은 삭제가 아닙니다. 승격된 라벨만 chip 목록에서 빠지고, caution 에 밀린 accept recommendation 은 chip 으로 재발행됩니다. 그래서 "근거 앵커 없음, 그러나 규칙상 수락 대상" 이라는 행이 이제 표현 가능합니다 — 이전에는 말할 수 없던 상태입니다. 2·3. rung 별 분리 테스트
4. chip 내부 추가로 처리한 것verdict 슬롯이 이제 5가지(경고 3 / 안심 2)를 담게 되면서, .badge.verdict.risk::before { content: "⚠" / ""; margin-right: .3rem; font-size: .92em; }
가드 강도이 레포의 CSS 가드가 무효과 선언에 반복적으로 뚫린 이력이 있어(#220 은 네 라운드), 이번에는 선언 집합 비교를 쓰지 않고 cascade 로 해석한 신호 채널 값을 직접 비교했습니다. 확인 결과:
네 번째 줄이 과거 가드를 뚫던 수법이고, 마지막 줄은 정당한 무효과 선언이 여전히 통과한다는 반대 방향 확인입니다. |
justinjoy
left a comment
There was a problem hiding this comment.
이 PR은 병합 전에 수정이 필요합니다.
single_source는 신뢰 요약에서 주의가 필요한 상태이지만, 현재 verdict priority에는 포함되지 않아 다른 상위 상태가 없을 때 grey .chip으로만 렌더링됩니다. 근거는 유효하지만 출처가 하나뿐인 fact가 기존의 경고 표시를 잃고 일반 context처럼 보이게 됩니다.
요구사항:
single_source를 caution/trust verdict 정책에 포함하여, 단일 출처 상태가 context chip으로만 표현되지 않도록 하십시오. 다른 caution과 함께 있을 때의 우선순위도 명시하십시오.- 유효한 evidence를 가지지만 source가 하나인 row가 warning verdict 및 비색상 경고 신호로 렌더링되는 테스트를 추가하십시오.
- 더 높은 caution이 있을 때
single_source가 중복 표시 없이 chip으로 강등되는지, 또는 선택한 우선순위에 따라 올바르게 표시되는지도 테스트로 고정하십시오.
…ts and context chips A row could emit eleven badges at one weight, so a contradiction read like a source count. Colour now means a verdict -- the fact's status plus one trust verdict picked by conflicted > accept recommended > corroborated -- and every other signal is a grey chip. The duplicate 'conflict' badge is folded into the 'conflicted' verdict, since both came from the same summary. Weight and size, not hue, carry the tier, so the row still sorts itself in greyscale. The guard resolves both tiers to concrete values against the CSS initials and accepts any member of a family of visual channels, so a no-op declaration cannot keep it green and an honest alternative implementation cannot break it. Part of semantic-reasoning#223 -- the '+N' overflow fold for long chip runs is not done here.
0a5d807 to
cb34d16
Compare
|
The remaining requested behavior is now addressed: |
A review row could carry up to 11 badges, all competing for attention at the same visual weight, so nothing read as the verdict.
Now two tiers. One trust verdict per row, picked by priority
conflicted > accept recommended > corroborated, renderedbadge verdict trust-*; the label promoted to the verdict is dropped from the chip run so it is not said twice. Everything else — remaining trust labels, source count, canonical alias, typed value, blocked-accept reasons, evidence kind — rendersbadge chipwith no palette class. The standaloneconflictbadge is gone; it and theconflictedlabel came from the same summary.verinote/web/app.pyis untouched — the row context (f,trust,recommendation) already carried everything needed.app.cssis a 7-line pure insertion at 120-126 (.badge.verdict { font-weight: 700 },.badge.chip { font-weight: 400; font-size: .72rem; color: var(--muted) }); nothing else in the file moved.Compatibility: the status badge in
.row-metagetsverdictappended after the status class, so the literalbadge badge-supersededthattests/test_review_actions.py:94asserts still appears verbatim. The superseded branch of the actions cell is untouched, so PR #348 is unaffected — verified by merging the two branches and running the suite (1538 passed).1508 passed, 7 skipped(baseline 1502 + 6 new).ruff checkclean.evidence missingandunsupportednow render grey, because the priority the issue specifies does not rank them. That is a real change: a row whose evidence is missing no longer carries a coloured badge for it. Worth deciding whether such a row still reads as alarming enough, or whether the priority list should be extended.On the guard
It never asserts that a rule or declaration exists — that kind of assertion always has an ineffective preimage, which is how UI guards were broken in #294, #221, #225 and #220. Instead it names the family of non-colour channels that could honestly carry the tier (font-weight/size/style/variant, text-transform, letter-spacing, opacity, border-style/width/radius, padding, text-decoration-line, filter, plus the drawn half of a
::beforeglyph), each with its CSS initial value, resolves both tiers through.badgeto concrete values, and requires a difference. Sofont-style: normalresolves tonormalon both sides and buys nothing, andcontent: "" / ""resolves to the empty glyph.test_the_guard_accepts_other_honest_implementationsruns the reverse check in-test: five alternative implementations (uppercase, smaller chip, faded chip, dotted chip border, verdict glyph) must all register, and three no-op mutants must all not.Not done
The issue's
+Noverflow fold for long chip runs is not implemented — it needs a disclosure element and was judged out of scope against three concurrent lanes. HencePart of.Worth a human's eye
Whether
font-weight: 700+.72remchips separate enough at real badge size, or chips need to go further (lighter border, less padding); and that chips still wrap acceptably in the cell.Part of #223