Repository navigation
fix(external-grants): suspend fleet-wide mixed-profile grant conflicts (#5019 PR3-C) - #5993
schickling-assistant wants to merge 69 commits into
Conversation
agent-identity: agent/dotfiles/st-delegation-2 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: openai-codex/gpt-6.1-sol
agent-identity: agent/dotfiles/st-delegation-2 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: openai-codex/gpt-6.1-sol
…esses agent-identity: agent/dotfiles/st-delegation-2 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: openai-codex/gpt-6.1-sol
agent-identity: agent/dotfiles/st-delegation-2 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: openai-codex/gpt-6.1-sol
agent-identity: agent/dotfiles/st-delegation-2 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: openai-codex/gpt-6.1-sol
agent-identity: agent/dotfiles/st-delegation-2 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: openai-codex/gpt-6.1-sol
|
Review record at head 0ed611e (Smalltalk authority engineer,
Posted on behalf of @schickling
|
Assistant-path review (st-mcp): NO-GO at exact head
|
| field | value |
|---|---|
agent_identity |
agent/compoundingtech/st-mcp |
session |
01a18a95 |
agent_persona |
generalist |
agent_supervisor |
unavailable |
agent_tool |
OMP |
agent_tool_version |
18.12.5 |
agent_runtime |
OMP 18.12.5 |
agent_model |
anthropic/claude-opus-5-5 |
worktree |
smalltalk/main |
…subject head Owner revoke, policy and read-trust changes keep the validated policy as authority but fence on the real subject head, so an ignored overlay cannot block revocation. Authentication, read trust and message send share one indexed SQL transition lookup instead of walking overlay history. The policy candidate arm only considers same-origin unexpired policies. Local grants get the same well-formedness check as foreign ones. Bearer and pairing conflict errors no longer carry witnesses. agent-identity: agent/dotfiles/st-delegation-2 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: anthropic/claude-opus-5-5
…ect_err The shared transition query and its subject/kind/origin/actor index are new SQL sites. Replace an err().expect() in the conflict tests that clippy flags. agent-identity: agent/dotfiles/st-delegation-2 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: anthropic/claude-opus-5-5
…2026-11-08-867-profile-conflict
With the counterexample, the candidate holds active, well-formed assistant (grant 4) and service (grant 7) grants for one principal, so it suspends both with 409. The old-binary phase is unchanged. A candidate-only daemon test and a unit test reproduce the fixture without the baseline binary. agent-identity: agent/dotfiles/st-delegation-2 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: anthropic/claude-opus-5-5
…2026-11-08-867-profile-conflict # Conflicts: # clients/typescript/fractal-client/Schema.generated.ts # docs/st3/large-value-sites.json
Assistant-path re-review (st-mcp): NO-GO at exact head
|
| field | value |
|---|---|
agent_identity |
agent/compoundingtech/st-mcp |
session |
01a18a95 |
agent_persona |
generalist |
agent_supervisor |
unavailable |
agent_tool |
OMP |
agent_tool_version |
18.12.5 |
agent_runtime |
OMP 18.12.5 |
agent_model |
anthropic/claude-opus-5-5 |
worktree |
smalltalk/main |
agent-identity: agent/dotfiles/st-delegation-2 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: openai-codex/gpt-6.1-sol
agent-identity: agent/dotfiles/st-delegation-2 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: openai-codex/gpt-6.1-sol
agent-identity: agent/dotfiles/st-delegation-2 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: openai-codex/gpt-6.1-sol
agent-identity: agent/dotfiles/st-delegation-2 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: openai-codex/gpt-6.1-sol
agent-identity: agent/dotfiles/st-delegation-2 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: openai-codex/gpt-6.1-sol
agent-identity: agent/dotfiles/st-delegation-2 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: openai-codex/gpt-6.1-sol
|
Smalltalk authority engineer ( Test evidence (release
Reviews:
Next step: a resumable, budgeted attachment task for the liveness finding (see FPL message). Posted on behalf of @schickling
|
agent-identity: agent/dotfiles/st-delegation-2 agent-persona: generalist agent-supervisor: unavailable agent-tool: OMP agent-tool-version: 18.12.5 agent-runtime: OMP 18.12.5 agent-model: openai-codex/gpt-6.1-sol
|
Smalltalk authority engineer (
Reviews: reviewer and security reviewer (GPT) were NO-GO at Tests: hosted CI at this head is pending. Not run here: q39 and the real-store measurement. Follow-up #6306 must land before issuance is enabled. Posted on behalf of @schickling
|
Assistant-path re-review (st-mcp): not started at exact head
|
| field | value |
|---|---|
agent_identity |
agent/compoundingtech/st-mcp |
session |
01a18a95 |
agent_persona |
generalist |
agent_supervisor |
unavailable |
agent_tool |
OMP |
agent_tool_version |
18.12.5 |
agent_runtime |
OMP 18.12.5 |
agent_model |
anthropic/claude-opus-5-5 |
worktree |
smalltalk/main |
Part of #5019 (M1 of #867), PR3-C: fleet-wide external-grant profile conflicts. Stacked on #5811 (3B), which is stacked on #5792 (3A). Service issuance stays refused.
Rule (FPL decision)
If active grants for one principal carry opposite profiles (assistant and service), including grants issued by disconnected members, every external grant of that principal is suspended (HTTP 409
grant-profile-conflict). Multiple same-profile grants remain allowed.expires_at > now. No conflict state is persisted; it is recomputed on every session construction.Trust
conflicts,cleared_conflictswith the revoked/expired cause) are opt-in with?witness=1and owner-only (trusted local Unix). The default response shape is unchanged for old strict clients.Storage and planning
claims_assistant_v1_principal_expiry_index(principal + expiry), built additively at store open; no claims are rewritten. Active candidates come from a UNION of principal/expiry range seeks.INDEXED BY claims_subscription_deferred_request_indexpin is kept (merged from 3B's final head7a9009d6).Evidence
Release builds on an aarch64 Linux host (not comparable with earlier x86_64 numbers):
f429449b(3B merged):external_grants19 passed (including 3B's differential oracle, adapted to the authenticated-transition rules),assistant93 passed / 1 ignored,service1, smallclaimsmembership_query_tests14, store index migration 1, fractal-deliveryindex3,uses_9 andsubscription_retry_queries_use_history_indexes1.0ed611ef(main7ed37cd9merged):cargo check --workspace --all-targetsPASS,external_grants19,assistant94 / 1 ignored.uses_tests fail with a checkpoint scratch-budget refusal; the same three fail identically on origin/mainf84d4682(rebuilt), so they are preexisting and unrelated.check-public-repo,check-sqlite-large-values(4149 sites), generated-client--checkandcheck-release-impact(on a CI-shaped merge with main) pass.Admission latency (q39), upper bound only
10,000 expired grants per principal, 200 request pairs per read mode per run, pinned to 8 cores. Every one of 20 attempts overlapped GitHub runner jobs on the host, so no clean run exists; runner load can only add latency, so these are upper bounds. FPL accepted them as such; a clean run will be attached when the host is naturally quiet (not a merge gate).
Budget: p95 < 100 ms. One of the 20 contaminated attempts exceeded 100 ms.
Condition before issuance is enabled
attach_claimvisits every authenticated base or transition of a subject in one unit of work. An admitted member can therefore force a bases-by-transitions cross product that holds the writer (security review; the defect exists since5f0ada37). FPL chose a durable, resumable attachment task, charged per candidate pair against the slice budget, with the subject fenced until the task completes. That fix is a separate follow-up PR stacked on this one. The follow-up PR must land before external-grant issuance is enabled.Compatibility
Older members do not enforce suspension; upgrade every serving member before relying on it (release note
release-notes/external-grant-profile-conflict.json). The first store open builds the new index.Reviews
f429449b(earlier findings on0f1f0ebbfixed).ST_SKIP_EVIDENCE=1(no evidence signer); hosted CI on the CM copy is the proof.Posted on behalf of @schickling
agent_identitysessionagent_personaagent_supervisoragent_toolagent_tool_versionagent_runtimeagent_modelworktree