Week of August 31 -- September 6, 2026
This week completed the authorization foundation refactor, replacing the legacy dual Policy/RoleBinding grant model with a unified, positive-authority RoleBinding system and shipping end-to-end access boundaries with a full admin UI. The Cloud Run sandbox received significant hardening for the single-node tier, including a gVisor capability discovery that forced a UID strategy change. Several critical credential-management fixes landed — notably a P0 GITHUB_TOKEN injection regression and a GCP Secret Manager mapping error that caused approximately 15 hours of Discord downtime.
Highlights
Section titled “Highlights”1. Authorization Foundation Refactor & Access Boundaries
Section titled “1. Authorization Foundation Refactor & Access Boundaries”The authorization model was overhauled from a parallel Policy and RoleBinding grant system to a single positive-authority model where RoleBindings are positive-only grants and AccessConstraints are monotonic restrictions — a breaking change spanning 58 commits that includes delegation safety, scope-aware list authorization, RoleBinding-backed project membership, offline recovery, and full legacy Policy removal. On top of this foundation, a full-stack access boundary implementation landed (40 commits), delivering a canonical evaluator, typed constraint model, preview engine with provenance/explain, transactional governance, and a complete admin UI with guided authoring, preview/commit/detail views, and effective-access integration. The week also brought a group management admin UI and a new Auth & Security tab in project settings.
2. Cloud Run Sandbox & Single-Node Tier Hardening
Section titled “2. Cloud Run Sandbox & Single-Node Tier Hardening”The Cloud Run sandbox underwent a rapid iteration cycle: an initial shift to non-root execution (UID 1000) was reverted after discovering that gVisor lacks CAP_SETUID/CAP_SETGID, causing sciontool init to fail with EPERM. The final approach runs as root with a runtime capability check that skips privilege drops when unavailable. Beyond the UID fix, shared volumes now mount at the canonical /scion-volumes/<name> path, the single-node tier returns the correct sandbox template instead of the workstation default, and GCP host service account auto-detection from the metadata server was added for identity passthrough on co-located broker registrations.
3. Critical Credential & Secret Management Fixes
Section titled “3. Critical Credential & Secret Management Fixes”A P0 regression where GITHUB_TOKEN was stored with as_needed injection mode broke clone-per-agent and worktree-per-agent workspaces for PAT-authenticated private repos — fixed by changing the injection mode to always with a data migration for existing projects. Separately, a GCP Secret Manager NotFound mapping error caused MigratePluginSecrets to silently skip migrations, resulting in approximately 15 hours of Discord downtime. A new agent secrets server endpoint (POST /api/v1/agent/secrets) now allows agents to fetch secrets at runtime, and hub-level as_needed secret keys are now passed to the broker for harness autodetection.
🔒 Authorization & Access Control
Section titled “🔒 Authorization & Access Control”- Authorization model refactor (breaking): Replaced the dual Policy/RoleBinding grant system with a single RoleBinding-only model using positive-only grants and monotonic AccessConstraints, including delegation safety, scope-aware authorization, and offline recovery.
- Access boundary full-stack implementation: Canonical evaluator, typed constraint model, preview engine, provenance/explain, transactional governance, and a complete admin UI with guided authoring, preview/commit, and effective-access integration.
- Group management admin UI: Complete frontend for creating and managing custom membership groups.
- Project settings Auth & Security tab: Split the General tab to separate auth-related settings (harness auth, agent role, max role, service account) into a dedicated tab.
- Cold-start super-admin RoleBinding: The first admin user now receives a system-scoped super-admin RoleBinding at all three assignment paths (create, invite-to-active, promotion), fixing a gap where
ReconcileSuperAdminBindingsran before any users existed.
🚀 Cloud Run & Runtimes
Section titled “🚀 Cloud Run & Runtimes”- Sandbox UID strategy resolved: Non-root execution (UID 1000) reverted to root after gVisor
CAP_SETUIDdiscovery; a runtime capability check now skips privilege drops when unavailable. - Shared volume mounts: Shared directories mount at
/scion-volumes/<name>instead of the host path, matching the Kubernetes runtime convention, with InWorkspace and ReadOnly support. - Single-node tier sandbox defaults:
GetDefaultSettingsDataYAML()now returns the cloudrun-sandbox template on the single-node tier instead of the workstation template. - Host SA auto-detection: Co-located broker registration auto-detects
gcpHostServiceAccountEmailfrom the GCE metadata server, with the validator widened to accept@developer.gserviceaccount.comsuffixes. - Cloud Run lifecycle test coverage: Added 785 lines of lifecycle tests covering create, start, stop, and delete flows with proper cleanup.
🔑 Credentials & Secrets
Section titled “🔑 Credentials & Secrets”- GITHUB_TOKEN injection mode (P0): Changed from
as_neededtoalwayswith a data migration, fixing broken clones on PAT-authenticated private repos in clone-per-agent and worktree-per-agent workspaces. - GCP Secret Manager NotFound mapping: gRPC
NotFoundnow correctly maps tostore.ErrNotFound, restoringMigratePluginSecretsbehavior that had caused ~15h Discord downtime. - Agent secrets endpoint: New
POST /api/v1/agent/secretshandler enables agents to fetch secrets from the hub at runtime rather than receiving them via command-line arguments. as_neededsecret keys for broker autodetect: Hub now passesAvailableAsNeededKeysto the broker so harness auth-type selection works even when the default harness type doesn’t require the key.- Authenticated clone URLs for Azure DevOps: Credential injection now uses
net/urlparsing to properly set Userinfo, fixing Azure DevOps URLs that contain userinfo in the host segment.
🛠️ Harnesses & Models
Section titled “🛠️ Harnesses & Models”- Default model bumped to Gemini 3.8 Flash: Antigravity harness default upgraded from Gemini 3.7 Flash to 3.8 Flash across config, constants, and documentation.
- Antigravity GEMINI_API_KEY auth: API key added as lowest-priority auth method (vertex-ai > oauth-token > api-key), accepting both
GEMINI_API_KEYandGOOGLE_API_KEY. - Model alias re-resolution at broker dispatch: The broker now detects and re-resolves unresolved size aliases (e.g. “large”) using the on-disk harness config when dispatching
SCION_MODEL. - Antigravity effort flag and thinking tiers: Fixed startup crash caused by wrong CLI flag (
--thinking-level→--effort) and incorrect tier mapping (mixed-case → lowercase).
🖥️ Web UI & API
Section titled “🖥️ Web UI & API”- Agent-create template list fix: Reduced the template list request limit from 200 to the backend-authorized cap of 100, and surfaced the previously swallowed HTTP 400 error.
- Broker callback route: Added the missing
POST /api/v1/broker/callbackhandler with broker HMAC authentication, fixing silentDeliverCallback()failures in the Teams plugin. - Message mode action routing: Fixed the web UI sending
message_moderequests to/actions(returning 404) to use the correct/set_message_modepath. - Default harness fallback: Web UI agent creation form fallback corrected from gemini-cli to antigravity, matching the backend’s
default_settings.yaml. - Chat sidebar terminal link: Terminal link in the chat members sidebar now navigates in-app instead of opening a new tab.
🏗️ Infrastructure & Build
Section titled “🏗️ Infrastructure & Build”- Internal npm registry support:
NPM_REGISTRYbuild arg andNPM_CONFIG_FILEBuildKit secret enable image builds behind corporate proxies where registry.npmjs.org is blocked. - Webchat migration race fix: Multi-replica cold starts no longer race through the migration check-then-mark pattern, resolved with
ON CONFLICT DO NOTHINGand a session-level advisory lock. - Webchat DDL-block index removed: The
UNIQUEindex onwebchat_topic.conversation_idthat broke Init on pre-existing databases was removed, re-enabling web chat on affected hubs. - Metadata emulator directory listings: Added
instance/andproject/directory listing handlers so the Node.js gcp-metadata library can detect GCE, fixing ADC detection in Cloud Run sandboxes. - Workspace-mode label persistence: Clone-per-agent projects now correctly report their workspace mode instead of falling back to
shared-plain. - Gemini-cli env overlay literals: Replaced shell-style
${...}literal strings withos.environ.get()calls for proper environment variable resolution.