Skip to content

core: fail closed without current Program evidence - #464

Closed
lemone112 wants to merge 2 commits into
agent/program-packed-proof-boundaryfrom
agent/program-safe-emission
Closed

core: fail closed without current Program evidence#464
lemone112 wants to merge 2 commits into
agent/program-packed-proof-boundaryfrom
agent/program-safe-emission

Conversation

@lemone112

@lemone112 lemone112 commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator

Что изменено

  • Ready по-прежнему проецируется в Set; Stale и любой Failed теперь проецируются в Remove для каждого output slot.
  • Удалены публичные HoldV1 и OperationV1::Hold: прошлый сертификат остаётся только в EvidenceViewV1 для диагностики.
  • Добавлены RED→GREEN сценарии Ready → Observed violation → Remove и Ready → Unknown → Remove, включая доказательство сохранности исторического сертификата.
  • Обновлены закрытые runtime- и source-boundary тесты; generic Session lifecycle не менялся.

Корневая причина

Прошлый Verified-сертификат связан с прошлым наблюдением. Он не может разрешать эмиссию после известного нарушения нового контекста; Unknown также не доказывает, что контекст не изменился. Старый Hold смешивал историческое evidence с полномочием текущей эмиссии.

Влияние

Runtime fail-closed удаляет ранее установленное значение, пока текущий контекст не получит новый Verified-сертификат. Диагностика сохраняет прошлый сертификат и конфликт без второго presentation-policy слоя.

Проверки

  • RED: оба новых focused-теста падали на прежнем Hold.
  • cargo +1.96.0 fmt --all --check
  • cargo +1.96.0 clippy --workspace --all-targets --locked -- -D warnings
  • cargo +1.96.0 test --workspace --locked
  • RUSTDOCFLAGS=-D warnings cargo +1.96.0 doc --workspace --no-deps --locked
  • focused program_boundary, program_mixed_evaluator_tests и anti-regrowth generic boundary tests

Stacked on #463.

Summary by CodeRabbit

  • Изменения
    • Пересобран публичный жизненный цикл: операция удержания Hold удалена, вместо неё для выходов теперь формируется Remove.
    • Для состояний Stale и Failed все выходы удаляются, при этом ранее полученные подтверждения остаются в evidence как диагностика.
    • Уточнены правила для Waiting, включая случаи с пустым наблюдением.
  • Исправления
    • Обновлены граничные сценарии для неизвестного контекста и наблюдаемых нарушений: лишние действия исключены, диагностические данные сохраняются.
  • Тесты
    • Пересмотрены проверки и добавлены новые сценарии переходов и ревокаций.

@coderabbitai

coderabbitai Bot commented Jul 26, 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: f8da3dd2-49a9-4e97-8e2e-e5180c5cf9f2

📥 Commits

Reviewing files that changed from the base of the PR and between c6e9d0a and 3dc76d7.

📒 Files selected for processing (4)
  • crates/labcolors-core/src/generic_boundary_tests.rs
  • crates/labcolors-core/src/program.rs
  • crates/labcolors-core/src/program_mixed_evaluator_tests.rs
  • crates/labcolors-core/tests/program_boundary.rs

Walkthrough

Из публичного и внутреннего API удалена операция Hold. Для состояний Waiting с ненулевым raw head, Stale и Failed операции теперь формируются как Remove, а прежние Verified-сертификаты сохраняются в evidence. Тесты проверяют обновлённый lifecycle.

Changes

Контракт и lifecycle операций

Layer / File(s) Summary
Удаление операции Hold из контрактов
crates/labcolors-core/src/program.rs
Удалены HoldV1, варианты Hold и их генерация; обновлены описание Remove, итератор, size_hint и compile-fail пример.
Генерация Remove для Waiting, Stale и Failed
crates/labcolors-core/src/program.rs
Пустой Waiting остаётся без операций, а Waiting с ненулевым raw head, Stale и Failed создают Remove для каждого output.
Проверки lifecycle и границ API
crates/labcolors-core/src/program_mixed_evaluator_tests.rs, crates/labcolors-core/tests/program_boundary.rs, crates/labcolors-core/src/generic_boundary_tests.rs
Тесты проверяют Remove, порядок output-слотов, сохранение evidence, хеширование только output-слотов и отсутствие Hold в исходном коде.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant UpdateV1
  participant SessionState
  participant ProjectionV1_operations
  participant OperationV1
  UpdateV1->>SessionState: переводит контекст в Waiting, Stale или Failed
  SessionState->>ProjectionV1_operations: передаёт состояние, raw head и outputs
  ProjectionV1_operations->>OperationV1: создаёт Remove для каждого output
  SessionState->>SessionState: сохраняет прежний Verified-сертификат в evidence
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 76.47% 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 Заголовок соответствует основному изменению: поведение стало fail-closed при отсутствии актуального Program evidence.
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/program-safe-emission

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

@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.

@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.

@lemone112
lemone112 force-pushed the agent/program-safe-emission branch from c6e9d0a to 3dc76d7 Compare July 26, 2026 18:10
@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.

@lemone112

Copy link
Copy Markdown
Collaborator Author

Superseded by the reviewed cumulative squash merge #465 (24fd1f4). The lower stacked branch was intentionally not merged on its own because its intermediate head was not the safe terminal public boundary.

@lemone112 lemone112 closed this Jul 26, 2026
@lemone112
lemone112 deleted the agent/program-safe-emission branch July 26, 2026 22:16
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