CAP kernel: evidence и эффекты
Исполняемый opt-in срез составных Guards, нескольких Output и локального outbox; границы до полного Capkin kernel.
CAP kernel: evidence и эффекты
Опциональный reference срез от 2026-10-06. Старый CAP IR v1,
decide/verify_trace, commitments v2 и опубликованные aggregation packages
продолжают работать прежним путём. Новый cap-kernel-proof-v1 — envelope над
CAP commitments v2 с отдельным policy digest. Это ещё не CapIrV2 и не
новый формат самого commitment; старые доказательства не перекодируются.
Граница с Allium сохраняется:
Allium владеет приложениями и адаптерами, Tyapkin — протокольной формой.
| Возможность | Реализовано в opt-in срезе | Следующий предел |
|---|---|---|
| Guards | GuardSetSpec: All, Any, AtLeast; PASS/DENY/INDETERMINATE; привязка evidence к Machine/policy/Input/State/head/time, query/result/snapshot digest | Версионированные схемы значений и реальные trust roots/provider adapters |
| Outputs | Несколько Output intentions одного Transition, порядок и causal CAP commitment | Подключение широкого Capkin package profile и внешних исполнителей |
| Эффекты | Декларации ExecutionBinding, generic ExecutionReceipt verifier; локальный SQLite outbox и отдельные Observations | Внешняя доставка, retry policy, compensation QA |
| Графы | Порт EvidenceProvider, два независимых in-memory provider в тесте, сохранённые snapshots | Реальные graph/context adapters и разрешённый большой corpus |
| Пакет | Отдельный kernel-compile из декларативного .feature, IR и policy digests; статический kernel-audit | Полный type IR, schema validator и исполнение QA cases без ручной передачи coverage |
В opt-in API отрицательный или неопределённый Guard ведёт в новый State
только по явно объявленному outcome route. Если route нет, KernelDecision
не содержит Transition и Output. Изменённый route меняет policy digest;
instance хранит закреплённые package, Machine и policy digests.
KernelHost::open получает package digest от вызывающего registry/host;
сам reference host пока не публикует и не аутентифицирует package.
EvidenceProvider возвращает версионированный ответ с hash запроса,
результата и снимка, временем, сроком действия и attestation. Core проверяет
привязку и вызывает предоставленный host EvidenceAuthenticator. Настоящий
trust root в библиотеку не встроен: тестовый authenticator использует
небезопасную учебную подпись SHA-256. All отдаёт приоритет DENY, Any —
PASS, пороговая политика считает доступные PASS; неизвестный исход нельзя
автоматически сделать PASS, если policy этого не допускает.
Input → graph/evidence providers → GuardSet → CAP decide
↓
Output intentions[] → outbox → executors
↓
Observations / ExecutionReceiptsOutputCommitted доказывает намерение. KernelHost атомарно сохраняет
checkpoint, CAP records, evidence snapshots и outbox entries. Локальный
dispatch_local сверяет binding с закреплённым за instance набором,
вызывается после commit и сохраняет Observation и receipt
отдельно; SUCCEEDED означает ответ локального handler, а не доставку
внешнему адресату. При crash после claim незавершённый attempt становится
UNKNOWN после явного recover_abandoned_attempts при остановленном
предыдущем single-writer процессе. Повтор использует тот же intent ID как
idempotency key; внешний
адаптер обязан соблюдать эту идемпотентность. Отдельный generic
Input/Transition/Output для компенсационного намерения проверен локальным
тестом после частичного успеха; реального обратного действия во внешней
системе этот тест не доказывает.
cargo run -p cap-cli --bin capkin -- kernel-compile --file tests/bdd/features/protocol/kernel-evidence-effects.feature
cargo run -p cap-cli --bin capkin -- kernel-audit --file tests/bdd/features/protocol/kernel-evidence-effects.feature
pnpm test:kernel:conformancekernel-audit считает coverage только по переданным --executed-route ключам;
само наличие Scenario не засчитывается как выполненный тест. Golden vector
policy и binding digests проверяют независимо Rust и Node. verify_history перечитывает
CAP commitment chain из SQLite; verify_evidence_snapshots проверяет hash и
attestation через host trust policy; verify_local_receipts сверяет локальные
Observations с receipts и закреплённым binding. Полный replay семантики evidence после
перезапуска, реальные графовые адаптеры и внешний effect lifecycle требуют
следующего среза.
Подробная протокольная граница описывает
нынешний API. Полный gap analysis и критерии следующего этапа находятся в
docs/architecture/cap-kernel-vnext.md. Active OpenSpec change:
cap-kernel-evidence-effects-graph-ports; его незакрытые задачи отражают
отсутствующий большой corpus, реальные providers и перенос продуктовых
маршрутов. Отдельный Allium checkout вызывает kernel через
tyapkin-kernel-bridge-v1.