Repository navigation
feat: decision architecture (invariants, packs, receipts, approvals) #206
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 49 commits
Commits
Show all changes
54 commits
Select commit
Hold shift + click to select a range
027dc3a
docs: align claims with code, add decision architecture ADR
shreyanshjain7174 4b02cca
feat(decision): add observed decision inputs and declared intent
shreyanshjain7174 91098e6
feat(decision): add invariants, OPA rule engine, and policy packs
shreyanshjain7174 825de55
docs(roadmap): mark observed inputs shipped on direct path
shreyanshjain7174 b0cb88c
chore(dev): local replace for receiptspec, remove after agentgate v0.…
shreyanshjain7174 7b9859f
feat(receipts): add decision records, receipt chain writer, and recei…
shreyanshjain7174 0b68d84
feat(receipts): write-ahead decision receipts on the direct path, age…
shreyanshjain7174 8c0faea
docs(receipts): document receipts, fail-closed semantics, and gaps
shreyanshjain7174 bb55386
feat(approvals): human approve, reject, edit protocol and signed appr…
shreyanshjain7174 a126d8e
feat(decision): versioned feature vector, Score, Scorer, escalate-onl…
shreyanshjain7174 760b948
feat(decision): hand-weighted baseline scorer as evaluation control
shreyanshjain7174 a3e9d32
feat(decision): learned logistic model with integer inference, stdlib…
shreyanshjain7174 9f99e04
feat(receipts): model block with integer option micro-units, base and…
shreyanshjain7174 fa5275c
feat(api): spec.decisionModel mode and stricter-only thresholdMicro, …
shreyanshjain7174 3292a50
feat(controller): shadow and escalate-only decision model on the dire…
shreyanshjain7174 ae590f2
feat(agentctl): decision eval against the verified approval dataset w…
shreyanshjain7174 4f9c609
feat(chart): optional decision model config map mount and DECISION_MO…
shreyanshjain7174 2327323
docs(decision): decision model, receipt model block, escalate gate, h…
shreyanshjain7174 6f7df20
feat(tracing): add decision span helpers
shreyanshjain7174 396e90e
feat(tracing): cover direct and human decisions
shreyanshjain7174 90c1511
test(tracing): enforce decision coverage matrix
shreyanshjain7174 3ae6195
fix(tracing): retain blocked human rule IDs
shreyanshjain7174 bbfac00
fix(tracing): use supported attribute rendering
shreyanshjain7174 418e77f
docs(tracing): document decision coverage and gaps
shreyanshjain7174 5074561
fix(controller): stop status-update hot loop and raw MCP value logs
shreyanshjain7174 009f08f
feat(demo): add claims demo on a fresh kind cluster
shreyanshjain7174 ae934e2
fix(demo): allow mock MCP egress and pin kube context
shreyanshjain7174 de191b3
docs(readme): add claims demo section and receipt status
shreyanshjain7174 5f2fec5
docs: record demo detour, known gaps, and changelog summary
shreyanshjain7174 afaa2b2
fix(dataclass): fail closed on incomplete scans via INV-06
shreyanshjain7174 425111f
fix(decision): agent claims can only tighten model risk
shreyanshjain7174 b97543d
fix(controller): reserve execution before running an allowed action
shreyanshjain7174 1727035
fix(receipts): verify writer receipts under a pinned key
shreyanshjain7174 db80b41
fix(receipts): require a signed manifest to pass verify
shreyanshjain7174 9d0945b
fix(receipts): bind the executed payload digest
shreyanshjain7174 befe631
fix(approval): HMAC the approval stamp
shreyanshjain7174 2fb9699
fix(approval): refuse replay of a consumed pending id
shreyanshjain7174 51e93b5
fix(agentctl): bind approval patches to the read resourceVersion
shreyanshjain7174 8f80408
fix(model): treat a failed artifact load as unavailable
shreyanshjain7174 2353ce9
fix(receipts): store approver identity as a digest
shreyanshjain7174 a106d98
fix(controller): never log raw MCP values or error bodies
shreyanshjain7174 04cd6a7
docs: record review findings, dataset completeness caveat, fixed groups
shreyanshjain7174 6b48f41
feat(demo): oversize mock scenario, identity digest and manifest stri…
shreyanshjain7174 58c1644
feat(demo): prove pin, manifest, replay, digest, and INV-06 fixes
shreyanshjain7174 d112e6d
fix(demo): let a restarted operator pod settle before the next scenario
shreyanshjain7174 2f4705d
docs: record claims demo re-run with the review fixes
shreyanshjain7174 9312c84
docs(blockers): record non-terminal denied workloads
shreyanshjain7174 2452f64
chore(deps): pin agentgate v0.1.4, drop local replace
shreyanshjain7174 bc3be63
fix(samples): reword declared-intent purpose to pass OSS boundary guard
shreyanshjain7174 0c1b5b7
fix: address Copilot review (log redaction, key validation, lock, docs)
shreyanshjain7174 d742bef
fix: redact threshold reasons in the OPA evaluation log, allowlist lo…
shreyanshjain7174 a4f616f
fix: bind approvals to spec, require pinned trust root, tighten secre…
shreyanshjain7174 5e3a646
fix(chart): keep receipt-writer out of the egress allow selector, rej…
shreyanshjain7174 c4e1edc
fix: resync receipt head after ambiguous failures, match fixtures as …
shreyanshjain7174 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| # Blockers | ||
|
|
||
| Open items that need a founder action before this branch can ship. | ||
|
|
||
| ## receipt-writer image | ||
|
|
||
| The chart `receipts` block points at | ||
| `ghcr.io/clawdlinux/agentic-operator-core/receipt-writer`. No CI job publishes | ||
| that image yet. Build it with `docker build --target receipt-writer .` and push | ||
| it, or add a release job. | ||
|
|
||
| ## Demo-only image | ||
|
|
||
| `scripts/demo-claims.sh` still builds linux binaries on the host and packages | ||
| them with `scripts/demo/Dockerfile.demo`. The repo Dockerfile now builds | ||
| (agentgate v0.1.4 is pinned). Switch the demo to the repo Dockerfile targets | ||
| and delete `Dockerfile.demo` when convenient. | ||
|
|
||
| ## Known review findings | ||
|
|
||
| An independent review of this branch found these gaps. They are documented, not fixed. | ||
|
|
||
| - **F7. Dataset content is not bound.** `pkg/dataset/dataset.go` (`Validate`) checks identity and label fields and the original seq. It does not bind features, content hashes, captured params, timestamps or edit content. Someone who can edit an export can poison training features and `agentctl dataset verify` still passes. Fix: bind each example to its verified original decision record and rebuild features from it. | ||
| - **F11. Writer recovery trusts local files.** `pkg/receipts/local.go` checks hashes and the head KID on restart. It does not verify signatures or keep a committed-head checkpoint. Removing the tail of the chain rewinds the sequence and the writer can fork an already issued chain. Fix: verify signatures on recovery and persist an external checkpoint of the committed head. | ||
| - **F12. Deleted approval rows go unnoticed.** `pkg/dataset/verify.go` checks the examples it is given. Without a signed dataset manifest (count, order, digest) it cannot tell that rows were removed. Fix: sign a dataset manifest and verify completeness against it. | ||
|
|
||
| ## Known gaps (not blockers for this branch) | ||
|
|
||
| - Runtime-adapter parity: `reconcileViaRuntime` runs no invariants, packs, | ||
| receipts, or approvals. Packs on that path fail closed. | ||
| - Argo approval gates are not covered by human approvals. | ||
| - Execution outcomes are not receipted. Only the pre-execution decision is. | ||
| - Chart egress: the default-deny NetworkPolicy has no rule for the workload | ||
| MCP endpoint. On an enforcing CNI (kindnet included) set | ||
| `networkPolicy.additionalAllowedHosts`. | ||
| - A Completed direct-path workload is reconciled every 30s and proposes and | ||
| runs a new action each time. Pre-existing behavior, unchanged here. | ||
| - `callerIdentity` is always empty. | ||
| - `TestControllers` needs envtest binaries (`bin/k8s` or | ||
| `/usr/local/kubebuilder/bin`). It fails locally without them. | ||
| - **Denied direct-path workloads are not terminal.** A `PolicyDenied` or `Completed` direct-path workload is proposed again on any later reconcile (stale event, hourly or 30s requeue). Each proposal is fully re-decided and receipted, so no guard is skipped. But a deny caused by a temporary condition, such as an unreachable receipt writer under INV-05, can be followed by an execution seconds later. The demo hit this once. This predates the branch. Fix: make terminal phases sticky until the spec generation changes. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.