Skip to content

V1b: разделить измерение и hard-решение - #360

Merged
lemone112 merged 9 commits into
mainfrom
agent/v1b-evaluator-classifier
Jul 20, 2026
Merged

V1b: разделить измерение и hard-решение#360
lemone112 merged 9 commits into
mainfrom
agent/v1b-evaluator-classifier

Conversation

@lemone112

@lemone112 lemone112 commented Jul 20, 2026

Copy link
Copy Markdown
Collaborator

Что изменено

  • Разделены измерение физического occurrence и hard-решение: evaluator возвращает Result<Measurement, E>, sealed classifier — единственный HardDecision<Pass, Violation>.
  • Exact sRGB8 стал инфаллибельным измерителем; равенство живёт только в classifier-е, а Pass/Violation получают несовместимые типизированные evidence.
  • Alpha analog и runtime recheck переведены на тот же закон без silent fallback и строковой маршрутизации внутри Core.
  • WCAG 2.2 адаптер остаётся только исполнимым cfg(test) доказательством применимости канонического evaluator-а; production/public API этим PR не расширяется.

Почему

Корневая проблема: прежний exact evaluator смешивал ошибку самого измерения с валидным отрицательным решением. Первая версия исправления добавляла собственный Fault, который невозможно было невакуумно проверить при единственном production evaluator-е с Infallible; независимая мутация это обнаружила. Итоговый контракт использует обычный Result::Err и один общий hard-decision без второго изоморфного enum.

Влияние

  • Меньше состояний и специальных ветвей; стадия выражается payload-типом.
  • Ошибки будущих fallible evaluator-ов распространяются через ?, а не маскируются как violation.
  • Клиентская семантика и публичная поверхность не меняются.
  • Canonical Linux x64 WASM: 386547 B raw, SHA-256 6e1fc7715cc13d2b1a7c16154fa752c5a6b0ca7294155855f0debf68b112c700; source run 29716449361. Exact raw-budget равен измеренному артефакту, gzip остаётся diagnostic-only.

Проверки

  • cargo fmt --all -- --check
  • cargo test --workspace --locked --quiet — green; core lib 604 passed, 6 ignored
  • cargo test -p labcolors-core --lib --release --locked --quiet — 602 passed, 6 ignored
  • cargo clippy --workspace --all-targets --locked -- -D warnings
  • RUSTDOCFLAGS='-D warnings' cargo doc --workspace --no-deps --locked --quiet
  • npm test --prefix packages/colors -- --test-reporter=dot — 217 passed
  • npm run typecheck --prefix packages/colors
  • node scripts/check-wasm-size-budget.mjs
  • Mutation: exact == → != caught; 0 missed, 0 timeout, 5 type-invalid/unviable mutants
  • Независимые архитектурное и test/hostile review — PASS без blockers

@lemone112

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@lemone112
lemone112 marked this pull request as ready for review July 20, 2026 00:31
@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

Модель проверки ограничений переведена на двухфазную обработку: evaluator формирует measurement, затем hard classifier возвращает Pass или Violation с typed evidence. Обновлены exact и WCAG адаптеры, analog-разрешение, recheck-результаты и форматирование ошибок.

Changes

Типизированная hard-классификация

Layer / File(s) Summary
Контракты measurement и hard-decision
crates/labcolors-core/src/constraints/mod.rs, crates/labcolors-core/src/constraints/exact.rs
Evaluator теперь возвращает measurement, а HardClassifier формирует HardDecision и evidence. Exact-проверка разделена на measurement и классификацию Pass/Violation.
Exact и WCAG адаптеры
crates/labcolors-core/src/constraints/wcag22.rs, crates/labcolors-core/src/constraint_tests.rs
WCAG добавляет refinement применимых measurement-ов и typed ошибки ReportOnly/CriterionMismatch; тесты проверяют hard outcomes, binding и standalone-эквивалентность.
Типизированное analog-разрешение
crates/labcolors-core/src/analog.rs, crates/labcolors-core/src/alpha.rs
Proposal, verification и exact evaluation используют typed ошибки и pass/violation evidence; alpha API преобразует их в детерминированные сообщения.
Violation recheck и границы ошибок
crates/labcolors-core/src/recheck.rs, crates/labcolors-core/src/recheck_tests.rs, crates/labcolors-core/src/semantic.rs, packages/colors/bench/wasm.json
Recheck заменяет Infeasible на Violation и сохраняет pass/violation evidence; semantic boundary скрывает внутренний текст ошибки, а WASM benchmark обновляет measurement и policy-значения.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant AlphaAPI
  participant resolve_verified
  participant assess_visible_point_hard
  participant ExactSrgb8IdentityV1
  AlphaAPI->>resolve_verified: resolve requested alpha
  resolve_verified->>assess_visible_point_hard: evaluate resolved occurrence
  assess_visible_point_hard->>ExactSrgb8IdentityV1: measure visible sRGB8 point
  ExactSrgb8IdentityV1-->>assess_visible_point_hard: Pass or Violation
  assess_visible_point_hard-->>resolve_verified: typed evidence or error
  resolve_verified-->>AlphaAPI: verified value or formatted message
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 30.56% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Заголовок точно отражает основную идею PR: разделение измерения и hard-решения.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch agent/v1b-evaluator-classifier

Comment @coderabbitai help to get the list of available commands.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
No server is currently available to service your request. Sorry about that. Please try resubmitting your request and contact us if the problem persists.

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