TLDR
Who's who: Ed = Scale's AI engineering agent (a bot that builds and tests). Pam = Scale's AI project-management agent (a bot that plans and witnesses test runs). Oz = Scale's AI coordinator agent. Sal = Scale's AI sales-scoreboard agent. Jon = the only human approver of writes.
Team,
v2 (EOD): updated with this afternoon's and end-of-day changes. The plan, dates and cadence below are unchanged from v1.
We're kicking off AI*Right, the first major project run by our Grok bot team. Every gate is approved by a named human.
SHIPPED TODAY (MON OCT 19)
connector-proto/ (25/25 tests, synthetic, unwitnessed, no live calls): a delegated-only OBO hop whose results are the intersection of what the user can see and the SharePoint Sites.Selected grant (broad, wildcard and write scopes rejected; cross-tenant denied); app-only access limited to metadata and always flagged in the audit; an intake audit event that comes first and starts the clock, with every read linked to it. Not yet wired into the harness write gate or the approver screen.freeze-v0.4.2-manifest.md. It bundles the G44 approver fix, review_flags, the G40 tenant-claim resolver and the Clef cap and guards. Results: 104/104 unit (test_harness 72, test_judge_gate 32), 44/44 spike (4 sink rows), 79/79 demo and 27/27 spike audit events schema-valid, and 27/27 negatives failing as expected. On the pilot tenant, I'm the only approver, enforced across the approval record, gateway and sink. 17 review_flag types are in the request hash. Pam re-ran everything in a scratch copy from 14:47 to 14:52 ET: all MATCH, no source hash changed, signed by me at 2:56 PM ET.mock_mcp_server.py: a localhost MCP server on the Python MCP SDK 2.x (MCPServer, the renamed FastMCP), served over streamable HTTP on 127.0.0.1 for one tenant. It exposes get_document (READ, untrusted content) and write_classification (WRITE). The write runs only if a gateway assertion verifies against the tenant's derived key and matches tenant, aud, tool and server_version. It recomputes request_hash instead of trusting it, then re-checks the approval record (tenant, approved, single-use, unexpired, hash match, human approver). Finally it consumes the approval atomically with the write in SQLite. Every refusal is logged sink-side to JSONL.airight_gw_auth.py: the shared gateway-identity library. It mints HMAC-SHA256 gateway assertions (30 s TTL, EXAMPLE) from per-tenant derived keys, computes the tenant-bound request hash, does the sink's SQLite single-use bookkeeping, and holds the approver list (Jon only, human_user). The production mechanism (mTLS or JWT, Vault) is UNKNOWN.approval_hold_guardrail.py: a LiteLLM 1.106.0 custom guardrail at pre_mcp_call. It holds every write until a valid approval exists, then injects a short-lived assertion bound to that exact write. It takes the tenant from a header (a spike stand-in for the token claim). Any exception becomes an audited error and an HTTP 403.run_spike.py: drives LiteLLM's MCP gateway (/mcp JSON-RPC streamable HTTP and /mcp-rest) on localhost and prints PASS/FAIL for each check.judge_gate.py: a stdlib-only Clef adapter plus BoundedJudgmentGate. It builds the documented Workers AI REST request and fails closed on every failure path. The v0.4.2 bundle adds the $10 spend-cap ledger, secret redaction and a 32-hex account-ID guard.validate_audit.py + audit-log-schema.json 0.4.2 (JSON Schema 2020-12): validates every harness and spike audit event, plus 27 mutated negatives that must fail (bot, Pam or service-principal approver; unknown or duplicate review_flags; old schema versions).mcp-server-contract.sample.yaml (0.4.2-example): the declarative contract the Registry lists servers from. It denies unlisted tools and servers, turns off dynamic tool discovery, maps the 7-step lifecycle and carries the Entra OBO identity block and approvers.run-freeze-v0.4.2.sh is a single runner (purges .pyc, then runs the demo, validator, spike on 127.0.0.1 and unittest, with no live Clef call). freeze-v0.4.2-manifest.md holds 35 SHA-256 rows, the exact commands and the claimed counts. rerun-g44-manifest.sha256 covers 22 files and runs with sha256sum -c.unittest discover -s tests: harness 52 (T1–T11) + judge 22 (J1–J8), re-run by Pam at 14:15 ET against hashed code. The harness half covers no execute before approval; forged, expired, replayed, tampered and self/agent approvals denied; poisoned-doc tool injection stripped; ceiling, pin and digest enforcement; expired OBO; Authorize before Choose Brain; 11 bypass and 14 tenant tests. The judge half covers fail-closed on exception, timeout and malformed output (16 crafted + 300 random garbage responses never allow), no token means no call and deny, and low confidence escalates. Jev can't be primary.@cf/cloudflare/clef (27B multimodal decision model, typed questions in and per-option probabilities out, 65,536-token context, $0.24 per M input tokens, no output charge) ran on SYN-01 through the full harness and JudgeGate. HTTP 200. The gate scored proceed 0.8707, escalate 0.0924, block 0.0369 (margin 0.78), above the uncalibrated 0.80 / 0.30 thresholds. The side questions were pricing visible = no at 0.9865 and risk = low at 0.5971. It took 1,410 ms and 728 input tokens and cost $0.00017472; cumulative spend is $0.00072936 of the $10 cap. The gate allowed, and the write was held at AWAIT_HUMAN_APPROVAL with 0 commits. 10 audit events, 0 invalid. The run used a wrapper outside the v0.4.2 freeze and is unwitnessed. The 14:38 first attempt hit HTTP 404 (code 7003, bad account path) and failed closed with 0 writes, so a 32-hex account-ID guard now runs before any send. Jev is benchmark-only. Thresholds get tuned in Assess on the R0 set.tid claim by the TenantRegistry, never from caller input, and copied through OBO (mock GUIDs; the real Entra OBO path isn't exercised yet). It's required on every audit event. Each tenant has its own allowlist and exact pins, policy overlay, classification ceiling, approvers and caps (requests, rate, tokens, budget). tenant_id is in request_sha256, each tenant has a derived signing key and its own sink, and a cross-tenant read returns not-found before any model call.pilot-data/synthetic-v1/): 20 docs (6 quotes, 6 invoices, 6 other, 2 that the gateway must block) with 20 seeded issues across 17 types, including price leaks, prompt injection, a lookalike-domain bank change, a duplicate invoice, a total mismatch and PII. The 2 blocked docs are one above the classification ceiling and one cross-tenant. It ships with a ground-truth key and score.py with 19 unit tests. Pam independently checked 20/20 labels (0 errors), 28/28 hashes and 19/19 tests. The gateway rejected both cross-boundary docs on first load. The model was a placeholder stub, so there's no accuracy baseline yet.write_classification carries a closed enum of the 17 seeded issue types, sorted into request_sha256, so my approval binds the findings I saw. Any change after approval blocks the write, and unknown or duplicate values are refused at the gateway and the sink. It's kept separate from the audit security flags. Tested in T13 and C11a–e.ENTRA ROADBLOCKS (MICROSOFT SIGN-IN)
idtyp tests) and the tenant-specific parts of the 7a sink network lock. Today Entra is only assumed, and every harness/spike token is a mock (claims checked; no real issuer/JWKS signature validation). Unblock: me (IdP owner, any spend); Ed builds. Pam's week-1 plan has the decision on Tue Oct 20; tracker due Mon Nov 2.idtyp claim with include_user_token, and my oid for the allowlist pin. Without idtyp, approver_check refuses every approver: fail closed, but the Pilot stops. Who holds Global Admin to grant consent: UNKNOWN. Licensing is covered: Scale has Entra ID P2 (15 seats, 14 assigned) plus Business Premium and E3, so Conditional Access with MFA and risk-based sign-in policies are licensed. Whether my own account holds a P2 seat is UNKNOWN; Ed verifies during setup. Verify in Assess (by Nov 2).idtyp claim, my oid, and TLS. LiteLLM's admin UI stays ruled out.ai-right/heavy-entra-review-ed-assessment.md). Now built into the approver prototype: a (tid, oid) pair allow-list, an exact iss match, amr must include mfa, scp required, an email/upn match is refused, agent user accounts are rejected (xms_sub_fct=13), and claims are re-checked at approve/reject. 21/21 tests pass (8 new), and the v0.4.3 freeze still verifies 50/50. Still mocked: signature/JWKS, aud, azp and real tid/oid values. Agreed but not built: a Conditional Access MFA policy (P2 licensed) and per-client go-live sign-off before client #2.tid, oid) allow-list and dual control for high-risk writes. I'm the sole approver for the Pilot only, through Nov 30.iss + tid → registry), B2B guest + exactly one tenant app role as fallback, Okta only on request. Pending my decision. Each client's admin consent, per-client onboarding steps, cross-tenant OBO behaviour, B2B pricing and the Okta API Access Management licence are all UNKNOWN. Decide in Assess; team flag by Fri Oct 23.SCHEDULE (ED'S RE-ESTIMATE)
WHAT IT IS
AI*Right is Scale's enterprise-by-default control layer for AI agents: Agent = Harness + Model (through an AI Gateway) + Governed MCP (MCP Gateway + Registry). Every model call goes through the AI Gateway and every tool call through the MCP Gateway. Nothing connects directly. We deliver it as Assess, Architect, Deliver, Manage, and it complements Cloud iQ.
PROJECT PLAN
| Phase | Dates | Outcome |
|---|---|---|
| 1. Assess | Oct 20 – Nov 2, 2026 | Maturity baseline, gaps, risks; pilot confirmed |
| 2. Pilot | Nov 3 – Nov 30, 2026 | One governed workflow: reference harness, audit log schema, minimal dual gateways, human approval gate |
| 3. Core Control Plane | Dec 1 – Dec 18, 2026 | AI Gateway, MCP Gateway and Registry in production posture; identity and policy-as-code |
| 4. Connectors & Scale | Jan 2027 onward | More MCP servers, multi-agent patterns |
| 5. Ops & Alignment | In parallel from Dec 2026 | Observability, FinOps, KPIs |
| 6. Manage | Q1 2027 onward | Ongoing managed service and compliance validation |
THE WIREFRAME: HOW A GOVERNED REQUEST FLOWS
Five pillars: Agents; Security & Identity; Core Control Plane; Data & Memory; Operations & Alignment.
WHERE WE ARE (Oct 19, 2026)
WHAT CHANGED TODAY (Oct 19, afternoon)
YOUR INPUT NEEDED: CURRENT BLOCKERS (team input by Fri Oct 23)
Reply with any owner names, concerns or objections by Fri Oct 23. |
ALSO OPEN: FLAG BY FRI OCT 23
| # | Item | Owner | Proposed answer |
|---|---|---|---|
| 1 | Pilot document count | Pam; Jon picks | UNKNOWN. Needed before Pilot entry Nov 3 |
| 2 | Is Fri Nov 27 a Scale holiday? | Jon | UNKNOWN. Pilot is 19 working days, 18 if off |
| 3 | Approver screen for the Pilot | Ed + Pam | LiteLLM's built-in UI is ruled out (no approval inbox, and its login makes users admins). Ed's prototype is built (35/35 tests). Review it Tue/Wed (Oct 20–21) |
| 4 | How client users map to a tenant (Entra tenant, guest, or Okta) | Ed; Jon (identity) | UNKNOWN. Decide in Assess |
| 5 | Production gateway identity: mTLS and/or gateway-signed token | Ed | UNKNOWN. Options listed; none tested |
Full list: open-items-for-team.md in the AI*Right workspace.
Attached: open-gaps-team.pdf, a plain-English list of every open gap the team can act on, with owners and due dates.
HOW WE'LL COMMUNICATE
WHAT I NEED FROM YOU
Help clear the blockers in the Your input needed box, flag any concern with the dates, and answer the table above, by Fri Oct 23. We're moving fast; the people-dependent steps need to clear by Tue Oct 27.
Jon