mirror of
https://github.com/ModernRelay/omnigraph.git
synced 2026-06-21 02:28:07 +02:00
policy: chassis fan-out — _as variants on the remaining 6 writers (MR-722) (#103)
PR #102 wired apply_schema_as. This PR completes the chassis-side coverage so every public mutating engine entry point hits the same Omnigraph::enforce(action, scope, actor) gate regardless of transport: - mutate_as → enforce(Change, Branch(branch), actor) - load_as → enforce(Change, Branch(branch), actor) - ingest_as → enforce(Change, Branch(branch), actor); also threads actor through the implicit branch_create_from_as so fresh-branch ingest correctly hits BranchCreate too - branch_create_as → enforce(BranchCreate, TargetBranch(name), actor) - branch_create_from_as → enforce(BranchCreate, BranchTransition { source, target }, actor) - branch_delete_as → enforce(BranchDelete, TargetBranch(name), actor) - branch_merge_as → enforce(BranchMerge, BranchTransition { source, target }, actor) Three new _as variants for branch ops (create, create_from, delete) that had no actor surface before; existing actor-less variants delegate with actor=None so the no-policy path is a strict no-op. HTTP handlers updated to thread the resolved actor into the new _as variants for branch_create and branch_delete (was previously dropped). 14 new SDK chassis tests (one allow + one deny pair per wired writer); the existing 4 apply_schema_as tests stay. All 18 pass. docs/user/policy.md updated to describe engine-wide enforcement and the coarse-vs-fine layer split (engine = action gate, query layer per-row = MR-725 future). AGENTS.md capability matrix updated to match. Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
9973683261
commit
da42beec41
8 changed files with 437 additions and 32 deletions
|
|
@ -1298,9 +1298,13 @@ async fn server_branch_create(
|
|||
.map_err(ApiError::from_workload_reject)?;
|
||||
{
|
||||
let db = &state.engine;
|
||||
db.branch_create_from(ReadTarget::branch(&from), &request.name)
|
||||
.await
|
||||
.map_err(ApiError::from_omni)?;
|
||||
db.branch_create_from_as(
|
||||
ReadTarget::branch(&from),
|
||||
&request.name,
|
||||
actor.as_ref().map(|Extension(a)| a.as_str()),
|
||||
)
|
||||
.await
|
||||
.map_err(ApiError::from_omni)?;
|
||||
}
|
||||
Ok(Json(BranchCreateOutput {
|
||||
uri: state.uri().to_string(),
|
||||
|
|
@ -1359,7 +1363,7 @@ async fn server_branch_delete(
|
|||
.map_err(ApiError::from_workload_reject)?;
|
||||
{
|
||||
let db = &state.engine;
|
||||
db.branch_delete(&branch)
|
||||
db.branch_delete_as(&branch, actor_id)
|
||||
.await
|
||||
.map_err(ApiError::from_omni)?;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue