Skip to content

F1: сохранить occurrence-доказательство до оценки видимого результата - #350

Merged
lemone112 merged 3 commits into
mainfrom
agent/f1a-visible-assessment
Jul 19, 2026
Merged

F1: сохранить occurrence-доказательство до оценки видимого результата#350
lemone112 merged 3 commits into
mainfrom
agent/f1a-visible-assessment

Conversation

@lemone112

@lemone112 lemone112 commented Jul 19, 2026

Copy link
Copy Markdown
Collaborator

Корневая проблема

Point-adapter возвращал только финальные RGB-байты и терял identity физического source-over occurrence. Будущий evaluator поэтому нельзя было структурно связать с фактически скомпозитированным stimulus и его proof.

Что изменено

  • production point-adapter теперь возвращает полный ResolvedOccurrence;
  • текущий semantic consumer явно проецирует .visible(), поэтому поведение не меняется;
  • в #[cfg(test)] добавлен executable contract: sealed evaluator, owned modeled target, physical binding и bound assessment;
  • WCAG 2.2 adapter ровно один раз делегирует существующему proof-pinned kernel и сохраняет его release;
  • modeled target содержит только visible и backdrop: evaluator не получает source Paint, certificate или binding;
  • binder принимает только настоящий ResolvedOccurrence, поэтому forged source/binding не типизируется;
  • property-oracle читает независимые occurrence-поля и проверяет все четыре WCAG-критерия.

Это proof-precondition для F1a, а не завершение F1a: production evaluator появится только вместе с первым compiler-owned occurrence constraint в G1a.

Границы

  • нет новых public exports, DTO, schema, WASM/TypeScript/FFI bytes;
  • нет нового recipe или compatibility facade;
  • PairLabel этим PR не мигрируется и не закрепляется как целевая архитектура;
  • существующая WCAG-математика и Q55 artifacts остаются единственным SSOT.

Доказательства

  • RED: compile-first тесты не собирались без target/evaluator/binding contract;
  • GREEN: 10 focused tests;
  • property: source/backdrop/alpha против standalone evaluator по всем четырём criteria;
  • anti-vacuum: final #808080 отличается от ошибочной оценки authored #000000; #8A8A8A различает обычный и крупный текст;
  • hostile compile-probe: FakeSource отвергается типом;
  • ручные mutations пойманы для RGB/BGR, hardcoded criterion и foreground/background swap;
  • cargo test --workspace --all-targets --no-fail-fast — green;
  • cargo fmt --all -- --check, clippy -D warnings, rustdoc -D warnings — green;
  • npm — 242/242, typecheck — green;
  • canonical Linux CI run 29680333026 и Swift run 29680333060 — green;
  • append-only v19 фиксирует Linux raw WASM 385589 B из run 29679743144 без headroom; локальный Darwin размер остаётся только diagnostic.

Summary by CodeRabbit

  • Новые возможности

    • Результаты обработки теперь сохраняют не только итоговый цвет, но и сведения о происхождении и сертификате видимого результата.
    • Добавлена типизированная оценка соответствия WCAG 2.2 с сохранением выбранного критерия и профиля.
  • Исправления

    • Оценка теперь использует финальный видимый результат и корректно сохраняет исходные привязки даже при совпадающих цветах или идентификаторах.
  • Тесты

    • Добавлены проверки корректности WCAG-оценки, критериев, сертификатов и сохранения происхождения результатов.
  • Обслуживание

    • Обновлён контроль бюджета размера WASM до версии v19.

@coderabbitai

coderabbitai Bot commented Jul 19, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: f99c3f6d-ae64-4e0d-8007-413178979bbe

📥 Commits

Reviewing files that changed from the base of the PR and between c784c9d and 309f2d7.

📒 Files selected for processing (9)
  • crates/labcolors-core/src/appearance.rs
  • crates/labcolors-core/src/constraint_tests.rs
  • crates/labcolors-core/src/constraints/mod.rs
  • crates/labcolors-core/src/constraints/wcag22.rs
  • crates/labcolors-core/src/lib.rs
  • crates/labcolors-core/src/semantic.rs
  • packages/colors/bench/wasm-size-budget-v19.json
  • packages/colors/test/release-contract.test.mjs
  • scripts/check-wasm-size-budget.mjs

Walkthrough

Изменения возвращают полный ResolvedOccurrence из appearance-оценки, добавляют типизированный WCAG-адаптер с проверками provenance и переводят контроль WASM-размера с бюджета v18 на v19.

Changes

Связывание occurrence с оценками WCAG

Layer / File(s) Summary
Контракт ResolvedOccurrence и миграция потребителей
crates/labcolors-core/src/appearance.rs, crates/labcolors-core/src/semantic.rs
PointOpacityOverSurfaceV1::evaluate возвращает ResolvedOccurrence; тестовые accessor’ы expose modeled sRGB8 target и visible binding, а resolve_pair_label извлекает visible bytes из результата.
Типизированный evaluator и WCAG-адаптер
crates/labcolors-core/src/constraints/*, crates/labcolors-core/src/lib.rs
Добавлены sealed-трейт Evaluator, BoundAssessment, assess и Wcag22Srgb8V1, делегирующий оценку standalone WCAG-функции.
Проверки binding и WCAG-контракта
crates/labcolors-core/src/constraint_tests.rs, crates/labcolors-core/src/constraints/mod.rs
Тесты проверяют порядок измерения, сохранение provenance, выбор критерия, release, обработку ошибок и отсутствие дублированной WCAG-математики.

Ротация WASM-бюджета на v19

Layer / File(s) Summary
Документ и валидатор бюджета v19
packages/colors/bench/wasm-size-budget-v19.json, scripts/check-wasm-size-budget.mjs
Добавлен бюджет v19; валидатор использует его по умолчанию, проверяет SHA-256 и связывает predecessor с immutable v18.
Контрактные тесты бюджета v19
packages/colors/test/release-contract.test.mjs
Проверки переключены на v19 для структуры документа, hashes, build recipe, runtime policy, мутаций и диагностических ошибок.

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

Sequence Diagram(s)

sequenceDiagram
  participant AppearanceEvaluation
  participant assess
  participant Wcag22Srgb8V1
  participant WCAGEvaluator
  AppearanceEvaluation->>assess: ResolvedOccurrence
  assess->>Wcag22Srgb8V1: modeled target и criterion
  Wcag22Srgb8V1->>WCAGEvaluator: visible, backdrop, criterion
  WCAGEvaluator-->>Wcag22Srgb8V1: assessment
  Wcag22Srgb8V1-->>assess: assessment и release
  assess-->>AppearanceEvaluation: BoundAssessment с visible binding
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Заголовок точно отражает основное изменение: сохранение occurrence-доказательства до оценки видимого результата.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
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.
✨ 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/f1a-visible-assessment

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

@lemone112
lemone112 marked this pull request as ready for review July 19, 2026 08:24

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 19, 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.

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