Source: c114 governance-phase2 — Phase 1, the model on a page · 2026-10-09
The fourteen intents in qpoint-io/intents read as one object model, rendered live from app/data/governance-fixture.ts. One invariant runs through every file: evidence is immutable, state is mutable, and every change of state records who, when and which change caused it. The rulings below are inputs to the same functions the mocks will use, so the alternative to each ruling stays one click away.
Rulings
Mark, 2026-10-09 (CYCLE.md D1–D3) and 2026-10-18 (D9); the Oct 19 model (c118: the 2026-10-19 product session, Mark's answers 2026-10-20), which puts the mode on the policy and every nuance in exceptions, with c114 as drawn kept as its alternative. Each switch re-runs the story, the probe and the coverage below.
Oct 19: one mode per policy; exceptions set the mode or a knob per org / team / user, narrowest wins; no groups, no finding Ignore ruled
Team A is exempted from the MCP policy by a mode exception (Off) — what the beta ships ruled
CSS specificity: org < team < user; an exception is a more specific allow ruled
a change re-checks the open findings it touches; a later change can reopen ruled
Enforced only once qdash observed the action take effect ruled
equal-specificity scopes that disagree: Enforce beats Observe, nothing to resolve ruled
The chain
Frameworks never generate findings and are never enforced. Policies are the testable unit; a failed evaluation of session activity generates a Finding; everything hanging off a Policy (scope, groups, exceptions, enforcement) decides what "applies" means for one subject. Counts are the fixture world, folded under the rulings above.
Objects
What is stored and what is derived. Derived values are computed on every read and marked as such on every surface (c108).
The chronological record of one agent–user interaction. Findings sit in its timeline at the point that caused them.
One independently addressable violation. Evidence immutable; lifecycle a fold over events.
A testable rule. Canonical and Qpoint-owned; the org configures around it, never inside it.
Where a policy applies, by dimension. Assigned directly or through a group; paths shown, never duplicated.
A reusable set of policies with its own scope. References, never copies.
A scoped allow for one resource. Narrows a policy; never removes a scope. Its intent is missing (G1).
Per policy × scope: observe, configured, confirmed. Disabling returns to observe, never stops evaluation.
Why a finding stopped needing action: ignore (with duration), enforced (linked to its change), policy-changed, allowed.
External standards and taxonomies. Controls map many-to-many to policies; never generate findings. Tracking is a reporting preference and changes no policy.
One record for every auditable change a FindingEvent can point at. A modelling choice; the intents name them separately.
Exceptions across the adoption lifecycle
An exception sets a policy's mode for a team or a person, so it can tighten the policy or loosen it. Which one an organization reaches for depends on how far it has rolled Qpoint out. The lab seeds both stages: switch with stage in the mock bar, or follow the links below.
Observe broadly across the organization; create exceptions that Enforce for a pilot team or selected users.
Every enforceable policy observes. Engineering enforces three of them, and Dev and Riley each pilot one ahead of their teams. The shared draft proposes the next step: Finance enforces the MCP policy.
Open findings: 0 Enforced, 23 Observed (hidden by default).
Enforce broadly across the organization, with exceptions that Observe or turn Off where needed.
Settled policies enforce for everyone, and exceptions carry the departures: a team exempt for an approved workflow, a team still evaluating, a person observing until a date. Enforce exceptions stay where a team got there before the organization.
Open findings: 0 Enforced, 7 Observed (hidden by default).
The Vanta story, run to its end
The example nearly every intent uses: Vanta MCP used by User A (Team A) in Session 1 and User B (Team B) in Session 2, and a personal account in Session 1. Six changes, each applied by applyChange() and re-evaluated under the rulings. If the stepper cannot reach the end, the model has a hole.
Exception: Off for Team A — Team A owns the Vanta integration — A3 — a mode exception (Off) for Team A; Finding A resolves as Allowed, B and C must not
Mode set to Enforce: block the MCP connection — [enforce] A2 — the policy's mode goes to Enforce; configured until qdash confirms it (D3); Team A's exception still decides for Team A
- F-B stays open: enforcement is configured for User B but not yet confirmed (D3)
Enforcement confirmed on 97 of 100 devices (Vanta MCP blocked on mac-b1 at 11:05) — [enforce] [resolve] — c121 D16: the open findings resolve "now enforced on this endpoint", linked to the change; they stay Observed
Exception: Off for User A until 2026-10-31 — migrating to the enterprise account — A3 A4 A7 — a user exception with a by-when; Finding C resolves as Allowed (no finding-level Ignore, B3)
Exception E-A revoked: Team A moved off Vanta — [reeval] — a later change reopens what re-evaluation resolved, and confirmed enforcement resolves it, now enforced (D2, D16)
Now is 2026-11-01 — A7 — dated exceptions lapse (the system moves them): User A's ends and Finding C reopens; GRC's migration window closes and F-S04 resolves, now enforced
- F-S01 stays open: enforcement is configured for Priya but not yet confirmed (D3)
- F-S02 stays open: enforcement is configured for Dev but not yet confirmed (D3)
- F-S03 stays open: enforcement is configured for User B but not yet confirmed (D3)
The lifecycle organ
The same rows on every surface that shows a Finding: actor · time · what · cause. Evidence above the line never changes; the rows only append.
Vanta MCP connected at 14:09; 6 tool calls (list_controls, get_evidence …)
S-1 · 2026-10-08 14:09 · policy v3
Vanta MCP connected at 16:34; 2 tool calls
S-2 · 2026-10-08 16:34 · policy v3
Provider account usera@gmail.com, not organisation-backed
S-1 · 2026-10-08 14:02 · policy v2
Effective policies for one subject
The D1 function. Pick a person: every policy that reaches them, by which paths, what enforcement decides for them, and where two assignments the ruling cannot separate disagree. This is the preview the scope, enforcement and group surfaces reuse.
priya-x1 · Production Macs · Production · Cursor CLI
Enforcement Posture and Exceptions
Two metrics, never folded together, over what Qpoint can know and govern. Enforcement Posture is how much of the work toward ideal is done: a policy-to-control mapping is at ideal when its policy reaches the strongest mode it can, so 100% means Qpoint's part is done, not that the framework is met. Exceptions read by direction and never move the score. Tracking changes neither.
| Framework | Edition · mapping | Posture | At ideal | To change | Exceptions |
|---|---|---|---|---|---|
| OWASP Top 10 for LLM Applications | 2025 · 2026.2 | 40% | 10 of 25 | 10 | 7 active: 3 tighten, 2 loosen, 2 match the default · 1 expiring |
| OWASP Top 10 for Agentic Applications | 2026 · 2026.1 | 40% | 12 of 30 | 10 | 6 active: 2 tighten, 2 loosen, 2 match the default · 1 expiring |
| NIST AI Risk Management Framework | 1.0 (Jan 2023) · 2026.1 | 47% | 18 of 38 | 9 | 6 active: 2 tighten, 2 loosen, 2 match the default · 1 expiring |
| Example: everything at ideal | lab · lab.1 | 100% | 8 of 8 | 0 | 3 active: 0 tighten, 2 loosen, 1 match the default |
| ISO/IEC 27001 | 2022 · 2026.1 | 50% | 2 of 4 | 2 | 2 active: 2 tighten, 0 loosen |
| SOC 2 | TSC 2017 (2022 points of focus) · 2026.1 | 41% | 11 of 27 | 11 | 7 active: 3 tighten, 2 loosen, 2 match the default · 1 expiring |
Framework coverage, derived
Coverage comes from mapped policies, never from an assertion. Three things stay distinct per requirement: what Qpoint can do, what the organisation has configured, and what the findings show. A risk taxonomy is not a compliance standard.
Composition notes
- Specificity is a number on the scope dimension (org 0 · environment and device group 1 · team, agent, MCP server, account 2 · user and device 3). Two matches at the same number with different enforcement are a tie, and the stricter wins (D9, 2026-10-18; it replaced the D1 addendum that showed ties as conflicts). The probe shows one for Priya on Approved model providers only: her device group says enforce, her environment says observe, so enforce decides. Whether a single scope may combine dimensions stays open [scope].
- An Ignore is a person's decision, so re-evaluation leaves ignored findings alone until the Ignore expires or is revoked. The intents leave this open [reeval]; it is a proposal.
- After an exception is revoked under confirmed enforcement, Finding A reopens and resolves, now enforced, in the same pass. The history shows both rows, because both happened. It stays Observed: its outcome was stamped when it was detected, and nothing was blocked then (c121 D16).
- The probe lists exceptions but never applies them: an exception allows one resource, it does not switch a policy off for a person. The story applies them because each finding carries its resource.
- Rulings live in three always-agreeing places: this page, the doc comments in governance-fixture.ts, and c114 CYCLE.md Decisions.