Security

You should never have to guess why access failed.

Scope, role, verification, and attribution — surfaced with the same clarity as your repository state. Every denial is explicit. Every grant is auditable.

01

Denial flow

Scope first. Then role, at the exact resource.

Token scope is checked ahead of role resolution. An admin-scoped token short-circuits the grant graph; anything else resolves against the grants at the target resource.

Role denials name the exact path — the namespace or repo where the grant needs to live — so the fix location is never ambiguous. Layer-specific denial codes (scope vs. role) are on the roadmap.

02

Attribution inspection

Every state answers who, under what, how verified.

Agent states carry principal, provider, model, confidence, and Ed25519 signature as structural fields in the object model. Human-authored states carry principal and — when the repo is configured to sign — the same Ed25519 attestation.

All of it sourced from env vars or explicit flags. Never parsed from a commit message. Never inferred from a Git email.

03

Grant diagnostic

Every denial names the principal, the target, and the role required.

Today: denials surface the subject, the exact resource path, and the role required at that scope. No opaque 403s, no hunting through logs to find which namespace needs a grant.

Next: held-role comparison and structured fix suggestions in the denial payload — so tools can remediate without a human parsing the error. Clearly labeled on the diagnostic below.

Authorization model

Access clarity is not a feature — it's the baseline.

Scope or role. Token or grant. The answer is always legible. Ambiguity in access control is not acceptable — so Loom eliminates it.