core: isolate diagnostics from Program authority - #468
Conversation
|
Important Review skippedNo new commits to review since the last review. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
WalkthroughИзменён порядок оценки программ: hard constraints обрабатываются отдельно от report-only constraints, результаты канонизируются, а final recheck сохраняет приоритет над диагностическими ошибками. Интеграционные тесты проверяют изоляцию фаз, exhaustive pass и корректность выбора кандидатов. ChangesФазовая оценка программ
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant ProgramSession
participant HardScanner
participant ReportScanner
participant FinalRecheck
ProgramSession->>HardScanner: оценить hard constraints
HardScanner-->>ProgramSession: hard verdict и cells
ProgramSession->>ReportScanner: оценить report-only constraints
ReportScanner-->>ProgramSession: диагностические cells
ProgramSession->>FinalRecheck: проверить выбранное состояние
FinalRecheck-->>ProgramSession: final verdict
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
@coderabbitai review |
✅ Action performedReview finished.
|
There was a problem hiding this comment.
Actionable comments posted: 7
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@crates/labcolors-core/src/program_joint_integration_tests.rs`:
- Around line 182-190: Define shared named constants for the diagnostic and hard
sentinel invocations, using the existing Srgb8 values for 0xEE and 0xDD
respectively. Replace every matching literal at the referenced invocation checks
and test call sites with DIAGNOSTIC_INVOCATION or HARD_INVOCATION, preserving
the existing sentinel behavior and ensuring doubles and tests use the same
constants.
- Around line 363-377: В сигнатуре функции program замените полностью
квалифицированные типы HardModeV1 и ReportModeV1 на уже импортированные имена
без префикса crate::program_session::. Остальную сигнатуру и реализацию program
не изменяйте.
- Around line 107-118: Добавьте комментарий непосредственно перед проверкой
selected_non_report_calls в обработчике report_invocation, поясняющий, что порог
2 означает два обязательных hard-вызова для выбранного состояния: search-hit и
свежую final recheck, после которых разрешается report-only фаза.
In `@crates/labcolors-core/src/program_session.rs`:
- Around line 1882-1900: Объедините поиск первого hard-нарушения и подсчёт
hard-нарушений в один проход по cells внутри ветки selected_state_index.
Используйте fold или эквивалентный цикл, сохранив канонический порядок первого
нарушения, типизированную ошибку InternalInvariant при его отсутствии и
неизменную семантику FinalRecheckViolation.
- Around line 1756-1758: Добавьте комментарий к ветке SessionDecision::Violation
в selected-пути, поясняющий, что при selected_state_index = Some(_) функция
collect_program_candidate_into обязана преобразовать hard-нарушение в
FinalRecheckViolation, поэтому Violation здесь недостижима и InternalInvariant
корректен. Комментарий должен документировать именно этот межфункциональный
инвариант и причину, а не описывать поведение ветки.
- Around line 1861-1868: Вынесите повторяющуюся классификацию фазовых
constraint-мод из `evaluate_program_session` и текущего вычисления
`has_hard_constraints`/`has_report_constraints` в единый источник на уровне
`ProgramEpochV1` или общий helper `ProgramEvaluationPhaseV1::present_in`.
Замените все три прямых вызова `epoch.constraints.iter().any(...)`
использованием этого источника, сохранив существующие флаги и поведение для фаз
`Hard` и `ReportOnly`.
- Around line 1901-1917: Добавьте отдельный тест для fixed-пути, проверяющий
сценарий с hard conflict и report-only constraint: при selected_state_index ==
None после has_hard_violation выполняется ReportOnly-скан, а результатом
становится SessionDecision::Violation с заполненным report. Используйте
существующий тестовый поток вокруг canonicalize_program_report_cells и сохраните
проверку ожидаемого содержимого report.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 0494851a-647a-4a41-b300-abcba7675b4d
📒 Files selected for processing (2)
crates/labcolors-core/src/program_joint_integration_tests.rscrates/labcolors-core/src/program_session.rs
|
@coderabbitai review |
✅ Action performedReview finished.
|
Результат
ReportOnlydiagnostics больше не имеют execution authority над выбором finite-state или его обязательной финальной hard-проверкой.FinalRecheckViolation, поэтому diagnostic error или mutation не может его скрыть;state × case, затем исполняет diagnostics;state × case × ConstraintIdбез дополнительной аллокации.Публичный API,
Measured-тип и production scorer в этот срез намеренно не добавлены: diagnostic phase изолирован до появления первого настоящего score-only evaluator.RED → GREEN
Hostile-тесты до исправления воспроизводили:
FinalRecheckViolation: возвращалсяPlan(Evaluator { constraint: 2, source: DiagnosticInvoked }).После исправления все три сценария детерминированно закрыты; отдельно сохранены permutation, invalidation, final-recheck и полная cardinality conflict-report.
Проверки
cargo +1.96.0 test --workspace --all-features --lockedcargo +1.96.0 clippy --workspace --all-targets --all-features --locked -- -D warningscargo +1.85.0 check -p labcolors-core --lib --lockedcargo +1.96.0 fmt --all -- --checkpython3 scripts/test_point_support_surplus_source_binding.pypython3 scripts/verify_point_support_surplus.pygit diff --checkНезависимое архитектурное/reentrancy-ревью актуального diff: замечаний нет.
Summary by CodeRabbit
Исправления
Тесты