Skip to content

Post (slot Fri 2026-10-23): How Do You Catch an AI's Silent Permission Change Before It Ships? The Access-Matrix Snapshot Gate, on a 7-Entry CRM #270

Open

Description

@objectstack-fleet

Filing gate ③: a task the maintainer directed. This card is part of slate 1 of the daily cadence (ruling B, #267, 「B」, 2026-10-17). It was filed by the repo:www.objectos.ai seat (objectstack-ai/objectstack#12224), session session_01FeA1nwBz1ohH65dvffUGKr. Priority: P1 · fast topic.

Slot

Fri 2026-10-23, date: 2026-10-23. This is a tentative daily slot on the shared calendar on #267. It holds once the approved queue reaches 7 and the cadence switches to daily. If the switch-over slips, the seat re-dates the post before merging and moves any back-linked updated with it. Merge on the slot day only.

The topic (from the seat's slate 1, read-only research at objectstack origin/main be076dad2 and objectos origin/main 76988dad4)

Working title: How Do You Catch an AI's Silent Permission Change Before It Ships? The Access-Matrix Snapshot Gate, on a 7-Entry CRM

Audience / topic: developer / governance

Angle. The published review post says, of allowDelete: false → true, "No rule fires. Both values are valid; both are enforceable." That is true of os validate. There is one gate that does fire, if the app opts in: a committed (permission set × object) matrix that os compile re-derives from metadata and diffs against the snapshot, failing the build with a semantic line until a human regenerates it — "its diff IS the review artifact." Ownable concept: effective capability, not raw flags (the matrix reports what a set can actually do, View/Modify All folded in, each row carrying the object's OWD). Not covered: zero posts mention the access matrix. how-to-review-ai-generated-app-changes stops at "nothing in the metadata expresses whether sales reps should delete opportunities"; this post is the next step: the change still needs a human, but it can no longer be silent. #262/#263 is about a field change reaching projections; this is a grant change reaching the build.

Proof artifact. On examples/app-crm, which is opted in (access-matrix.json, 7 entries across crm_sales_user and guest_portal): flip allowDelete: false → true for crm_opportunity in src/security/sales-positions.ts:50, run npx os compile → the drift failure (✗ Access matrix drift (1 change) … 'crm_sales_user' gains access to 'crm_opportunity' (delete)), then npx os compile --update-access-matrix and git diff examples/app-crm/access-matrix.json → the one-line "delete": false → true. One edit, one drift line, one reviewable diff. (CLI build failure + real diff.)

Sources:

  • content/docs/permissions/access-matrix.mdx:7-12 — "the (permission set × object) matrix is derived purely from metadata on every os compile, diffed against a committed snapshot, and any drift fails the build with a semantic explanation until a human regenerates the snapshot."; :16-24 opt-in (os compile --update-access-matrix; "Both examples/app-crm and examples/app-showcase are opted in."); :26-43 the drift output ("its diff IS the review artifact"); :47-72 snapshot format, "the matrix reports effective capability, not the raw flags"; :74-85 relation to the posture linter and the explain engine.
  • content/docs/permissions/explain.mdx:106-108 — the matrix is "the same evaluation run over representative (permission set × object) pairs; explain is the per-decision zoom lens."
  • examples/app-crm/access-matrix.json (7 entries; every crm_sales_user row has "delete": false); src/security/sales-positions.ts:44-62.
  • www content/blog/how-to-review-ai-generated-app-changes/index.mdx:112 — "allowDelete: false → true. No rule fires."

Internal links: how-to-review-ai-generated-app-changes, objectos-agent-permission-boundaries, glossary reviewable-diff, declared-vs-enforced.

Risk. The gate runs in os compile, not os validate — never write that validate catches it. Quote the drift line from the real run; the doc's example is the showcase app. Frame it as "one gate, opted in", not as a correction of the review post (that post's sentence stays true of os validate); whether the review post gets an updated cross-link is the seat's call and goes on the card, not in the post.


House bar (every post)


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop, repo:www.objectos.ai seat
    Session: session_01FeA1nwBz1ohH65dvffUGKr
    Account: hotlong (the seat's linked user, as GET /user answers it; always the card's assignee)
    Branch: claude/pm-dispatch-objectos-ju9td1-issue-270, this post's own branch. The maintainer asked on 2026-10-15 that written posts be opened as PRs, and a post's PR waits for its slot day. Staged: the dev commits on a local branch cut from main, and the seat pushes and opens the PR.
    Worktree: www-issue-270
    Domain: n/a (single-lane repo)
    Seat: repo:www.objectos.ai (objectstack-ai/objectstack#12224)
    File surface: one new post directory under content/blog/ (all eight locales, cover and diagrams). Back-linked published posts change only by a link sentence plus updated.
    Stop on breach and explain in the report.
    Container & model: M, mode:subagent, model: CONTRACT_REVIEW_TIER, reason: blog posts carry positioning, which the maintainer's 2026-10-05 instruction dispatches at the ceiling tier.
    Clause-②: no
    Thread-read: none
    Serial constraints cleared: yes. This is slate 1 of #267, with at most five writers at once.


    Generated by Claude Code

  2. changed the title [-]Post (slot Sat 2026-10-24): How Do You Catch an AI's Silent Permission Change Before It Ships? The Access-Matrix Snapshot Gate, on a 7-Entry CRM[/-] [+]Post (slot Fri 2026-10-23): How Do You Catch an AI's Silent Permission Change Before It Ships? The Access-Matrix Snapshot Gate, on a 7-Entry CRM[/+] on Oct 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions