Skip to content

C8d(3): bridge V2a joint feasible-across-all-samples re-solve (joint-in-core, generic) - #406

Merged
lemone112 merged 1 commit into
mainfrom
claude/color-engine-semantic-drift-jadrtr
Jul 21, 2026
Merged

C8d(3): bridge V2a joint feasible-across-all-samples re-solve (joint-in-core, generic)#406
lemone112 merged 1 commit into
mainfrom
claude/color-engine-semantic-drift-jadrtr

Conversation

@lemone112

@lemone112 lemone112 commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

Слайс C8d, шаг 3 (core-only)

Стек на влитых шагах 1 (#404, packed-u32) и 2 (#405, recheck-bridge + readability-classifier). Реализует мандат F4 = Joint-in-core (DAG строка 2639 «V2a + F2 → C8d»). Diff = 2 core-файла (recheck.rs, recheck_tests.rs). Контроллер-STOPGAP не понадобился — настоящий V2a-мост встал чисто.

Что сделано

resolve_across_all_samples + типизированный JointReadabilityResolutionV1 { Feasible(verified) | Indeterminate(report) } в recheck.rs:

  • Инстанцирует существующий генерик PointwiseJointPointProgramV1<E> с E = DisplayReadabilityCurveV1 (замороженный F5-классификатор из шага 2).
  • Оценивает КАЖДЫЙ кандидатный tuple по всему ObservedScenarioSet (каждый backdrop-сэмпл = отдельный admitted case), оставляет только кандидатов, проходящих каждый case через classify(), тай-брейк по declared total order, затем свежая ре-верификация победителя по всем сэмплам перед возвратом — либо типизированный Indeterminate, сохраняющий полный hard-report (провенанс ломающего сэмпла читается post-hoc).
  • Набор-ломающий кандидат никогда не возвращается как Feasible (Pointwise every-case law, §16 строки 3082-3093: worst — post-hoc witness, не вход солва).

Анти-дрейф (V2a exit criterion) — ВЫПОЛНЕН

joint.rs байт-в-байт не изменён (git diff пуст; проверено независимо, main==HEAD). В joint.rs не добавлено ни enum-варианта, ни импорта WCAG/readability. Кривая читаемости достигает joint-движка ИСКЛЮЧИТЕЛЬНО через уже существующий sealed Evaluator<…> + HardClassifier blanket-impl JointPointEvaluatorV1 — тот же генерик-seam, что использует ExactSrgb8IdentityV1. Продакшн-joint не импортирует WCAG payload.

Тесты (RED→GREEN, non-vacuous)

  • N1 joint_recheck_flags_sample_broken_by_resolve: кандидат, проходящий таргет-сэмпл A, но ломающий B, возвращает типизированный Indeterminate с провенансом B (second-solve-breaks-first на уровне ядра).
  • N2 resolve_is_jointly_reverified: feasibility-фильтр бьёт тай-брейк (ordinal 0 предпочтён порядком, но исключён как set-breaking → возвращается ordinal 1 и свежо ре-верифицируется; если предложить только ломающий кандидат → Indeterminate).

WCAG-разбиения проверены численно с запасом от порога 4.5 (напр. N2: #555555 проходит белый 7.46, но ломает #767676 1.64; чёрный проходит оба — белый 21, #767676 4.62).

Гейты (локально перепроверены, зелёные)

cargo test -p labcolors-core (606 lib + все integration-бинари), cargo fmt --all --check, cargo clippy -p labcolors-core --all-targets -D warnings, RUSTDOCFLAGS=-D warnings cargo doc -p labcolors-core --no-deps --locked.

Ревью (adversarial, read-only, 3 линзы)

correctness / joint-genericity-V2a / boundary-tests — ноль находок. Синтез-вердикт READY. Публичный boundary и bench/wasm.json не тронуты (провод на границу — шаг 4).

🤖 Generated with Claude Code


Generated by Claude Code

Summary by CodeRabbit

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

    • Добавлена совместная повторная проверка читаемости по всем наблюдаемым образцам.
    • Система теперь различает подтверждённые решения и неопределённые результаты при невозможности совместного решения.
    • Добавлена повторная верификация выбранных вариантов для выявления нарушающих образцов.
  • Тесты

    • Расширено покрытие сценариев совместной проверки, включая обнаружение проблемных образцов и повторную верификацию решений.

…in-core)

Wire the generic V2a joint selection (joint.rs) into a full-support re-solve
that returns exactly ONE candidate hard-feasible across the whole
ObservedScenarioSet — every backdrop sample admitted as its own case — or a
typed Indeterminate when no jointly-feasible tuple exists. A set-breaching
candidate is never returned as feasible: classify demands every case pass, so
the worst / least-margin sample is only a post-hoc diagnostic witness, never a
solve input (Pointwise every-case law; DAG mandate V2a + F2 -> C8d).

Anti-drift: joint.rs stays fully generic and unchanged. The readability
semantics live entirely in DisplayReadabilityCurveV1 (constraints/readability.rs);
the bridge only instantiates the existing generic PointwiseJointPointProgramV1<E>
with E = DisplayReadabilityCurveV1, reached through the same sealed
Evaluator + HardClassifier seam ExactSrgb8IdentityV1 uses. No readability enum
or import crosses into joint.rs.

RED->GREEN in recheck_tests.rs:
- joint_recheck_flags_sample_broken_by_resolve (N1): full-support re-solve over
  the whole set returns a typed Indeterminate whose breaching cell carries the
  broken sample's provenance, even when a different sample was the solve target.
- resolve_is_jointly_reverified (N2): the joint selection yields a candidate
  passing every sample (freshly re-verified) or a typed Indeterminate; the
  set-breaching candidate is never returned as feasible.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LzZyjuo5ahzmW6V8pPJqSJ
@coderabbitai

coderabbitai Bot commented Jul 21, 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: 478369e4-0da8-4b9c-a624-d348a038c588

📥 Commits

Reviewing files that changed from the base of the PR and between 4d0b942 and febb8ff.

📒 Files selected for processing (2)
  • crates/labcolors-core/src/recheck.rs
  • crates/labcolors-core/src/recheck_tests.rs

Walkthrough

Добавлен мост joint recheck для readability: он оценивает кандидатов по всем наблюдаемым samples, выбирает feasible-кандидата с tie-break и выполняет повторную верификацию. Тесты покрывают indeterminate-результат, provenance нарушившего sample и recheck полного набора.

Changes

Совместная проверка readability

Layer / File(s) Summary
Мост joint resolve
crates/labcolors-core/src/recheck.rs
Добавлены readability-алиасы, типы результатов и ошибок, а также resolve_across_all_samples с классификацией, tie-break и повторной проверкой выбранного кандидата.
Тесты joint recheck
crates/labcolors-core/src/recheck_tests.rs
Добавлены joint-программа, тестовые кандидаты и проверки indeterminate-результата, provenance нарушившего sample и повторной верификации всех samples.

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

Sequence Diagram(s)

sequenceDiagram
  participant Caller
  participant resolve_across_all_samples
  participant ReadabilityJointProgramV1
  participant PointwiseSelectedRecheck
  Caller->>resolve_across_all_samples: передаёт candidates, observation и order
  resolve_across_all_samples->>ReadabilityJointProgramV1: оценивает кандидатов по samples
  ReadabilityJointProgramV1-->>resolve_across_all_samples: возвращает classification/report
  resolve_across_all_samples->>PointwiseSelectedRecheck: select(policy).recheck()
  PointwiseSelectedRecheck-->>resolve_across_all_samples: verified selection или ошибка
  resolve_across_all_samples-->>Caller: Feasible или Indeterminate
Loading

Possibly related PRs

  • Labpics-Team/lab-colors#355 — вводит revision-bound recheck и observation-типы, используемые новым joint resolve.
  • Labpics-Team/lab-colors#360 — добавляет hard-decision и recheck-представления, расширяемые этим изменением.
  • Labpics-Team/lab-colors#362 — вводит joint-примитивы, используемые в resolve и новых тестах.
🚥 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 Заголовок точно отражает основное изменение: joint re-solve по всем sample в core с generic-логикой.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 claude/color-engine-semantic-drift-jadrtr

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

@lemone112
lemone112 merged commit 1d9ce25 into main Jul 21, 2026
10 checks passed
@lemone112
lemone112 deleted the claude/color-engine-semantic-drift-jadrtr branch July 21, 2026 14:33
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.

2 participants