Skip to content

core: isolate diagnostics from Program authority - #468

Merged
lemone112 merged 2 commits into
mainfrom
agent/report-selection-isolation
Jul 26, 2026
Merged

core: isolate diagnostics from Program authority#468
lemone112 merged 2 commits into
mainfrom
agent/report-selection-isolation

Conversation

@lemone112

@lemone112 lemone112 commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator

Результат

ReportOnly diagnostics больше не имеют execution authority над выбором finite-state или его обязательной финальной hard-проверкой.

  • candidate search исполняет только hard constraints;
  • выбранное состояние получает свежий полный hard-pass по всем physical cases до diagnostics;
  • hard-провал выбранного состояния немедленно возвращает типизированный FinalRecheckViolation, поэтому diagnostic error или mutation не может его скрыть;
  • exhaustive conflict сначала фиксирует hard evidence для всех state × case, затем исполняет diagnostics;
  • fixed/no-selection сохраняет полный hard→report evidence;
  • наружный отчёт после authority-first исполнения восстанавливает канонический порядок state × case × ConstraintId без дополнительной аллокации.

Публичный API, Measured-тип и production scorer в этот срез намеренно не добавлены: diagnostic phase изолирован до появления первого настоящего score-only evaluator.

RED → GREEN

Hostile-тесты до исправления воспроизводили:

  • лишние diagnostic-вызовы во время candidate search;
  • межсостоянийное poisoning: ранняя диагностика меняла последующие hard-решения;
  • маскировку FinalRecheckViolation: возвращался Plan(Evaluator { constraint: 2, source: DiagnosticInvoked }).

После исправления все три сценария детерминированно закрыты; отдельно сохранены permutation, invalidation, final-recheck и полная cardinality conflict-report.

Проверки

  • cargo +1.96.0 test --workspace --all-features --locked
  • cargo +1.96.0 clippy --workspace --all-targets --all-features --locked -- -D warnings
  • cargo +1.85.0 check -p labcolors-core --lib --locked
  • cargo +1.96.0 fmt --all -- --check
  • python3 scripts/test_point_support_surplus_source_binding.py
  • python3 scripts/verify_point_support_surplus.py
  • git diff --check

Независимое архитектурное/reentrancy-ревью актуального diff: замечаний нет.

Summary by CodeRabbit

  • Исправления

    • Уточнён фазовый порядок оценок hard и report-only: диагностические вызовы больше не меняют авторитетное итоговое hard-решение, включая финальный recheck.
    • Ошибки в report-only не “отравляют” подбор кандидатов и не скрывают нарушения, выявленные обязательными проверками.
    • Улучшена обработка программ без конечных целевых состояний, отчётные клетки канонизируются, а evidence при hard-конфликтах собирается предсказуемо.
  • Тесты

    • Расширено покрытие интеграционных сценариев: изоляция диагностик, поведение при конфликтах и корректность final recheck.

@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

No new commits to review since the last review.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: edd36a63-4d22-408e-a61b-f77504cc3782

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Walkthrough

Изменён порядок оценки программ: hard constraints обрабатываются отдельно от report-only constraints, результаты канонизируются, а final recheck сохраняет приоритет над диагностическими ошибками. Интеграционные тесты проверяют изоляцию фаз, exhaustive pass и корректность выбора кандидатов.

Changes

Фазовая оценка программ

Layer / File(s) Summary
Фазы и фильтрация constraint-оценки
crates/labcolors-core/src/program_session.rs
Добавлены фазы Hard и ReportOnly, их сохранение в epoch, фазовая фильтрация constraints и канонический порядок report cells.
Оркестрация hard scan и диагностики
crates/labcolors-core/src/program_session.rs
Hard scan выполняется до report-only scan, hard verdict отделён от диагностики, а final recheck больше не маскируется диагностическими результатами.
Интеграционные evaluator sets и проверки
crates/labcolors-core/src/program_joint_integration_tests.rs
Добавлены параметризованный point_program, контролируемые evaluator sets, поддержка нескольких сценариев и тесты для изоляции диагностик, exhaustive pass, fixed-программ и final recheck.

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
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 38.46% 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
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Заголовок точно отражает основную идею PR: изоляцию диагностики от авторитета Program.
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 unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch agent/report-selection-isolation

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

@lemone112
lemone112 marked this pull request as ready for review July 26, 2026 23:02
@lemone112

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 26, 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 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 3409bfd and 1d1ea99.

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

Comment thread crates/labcolors-core/src/program_joint_integration_tests.rs
Comment thread crates/labcolors-core/src/program_joint_integration_tests.rs Outdated
Comment thread crates/labcolors-core/src/program_joint_integration_tests.rs
Comment thread crates/labcolors-core/src/program_session.rs
Comment thread crates/labcolors-core/src/program_session.rs Outdated
Comment thread crates/labcolors-core/src/program_session.rs
Comment thread crates/labcolors-core/src/program_session.rs
@lemone112

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

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