AIdenID Glasswing · Test Flight 2026

PR-00 — Navigator independent evidence record

Author: fable-5.1-nav (Navigator). Date: 2026-09-27 (UTC timestamps). Machine: the owner's Windows workstation, Node v22.23.1, pnpm 10.28.0 via corepack, CI=true. All runs below were performed by the Navigator independently of the Driver's runs; the Driver reported matching numbers in the coordination room.

Source under inspection

Baseline gates at 0e4553e (full monorepo)

Gate Command Result
Install pnpm install --frozen-lockfile --prefer-offline exit 0 (5m58s)
Typecheck pnpm typecheck exit 0, turbo 29/29 tasks
Tests pnpm test exit 0, 84 test files passed, 620 tests passed, 0 failed (13.9s)

Status for the kernel packages (policy-engine, crypto, control-plane, verifier-node, transparency, eventing, common-schemas): implemented and proven on this machine at that SHA.

Unattended demo flow at 0e4553e

pnpm demo:flow --out <artifact> with AIDENID_ALLOW_EPHEMERAL_CONTROL_PLANE_STORE=true and AIDENID_ALLOW_IN_MEMORY_CONTROL_PLANE_OUTBOX=true:

Manual flow against the ephemeral control-plane at 0e4553e

node apps/control-plane/dist/start.js with one admin operator token (value not recorded here):

Step Call Result
1 POST /v1/targets (admin) 201, tgt_…
2 POST /v1/grants (admin), catalog:read, 600 s 201, grt_…, chn_…, issuer_actor_id bound to the operator
3 POST /v1/sessions/exchange in scope 201, DPoP token, revocation_epoch: 0
4 exchange requesting catalog:write 403 permission_exceeds_grant
5 POST /v1/grants without operator token 401 operator_auth_required
6 POST /v1/revoke (admin) 202, revocation_epoch: 1
7 exchange again on the same grant 201 with a fresh token at epoch 1 (see F-01)
8 GET /v1/decisions?site_id=… (admin) 200, empty list (no verifier traffic in this flow)

Findings

F-01 (P1) — chain revocation does not terminate the grant — confirmed

F-02 (P1, design gap) — the verifier cannot see a per-chain revocation — confirmed

Prior-work commit verification

Not run / limitations

Weekend PRs

Weekend changes on top of the prior-work commit, in merge order. Every test count is a local run on the workstation named above; hosted CI is blocked by GitHub billing on this account, so none of these is a CI-green claim. Author and reviewer are always different agents (recorded role change); the reviewer runs the gate at the exact head SHA before the merge. GitHub refuses a self-approval because both agents push with the owner's account, so the review record is a PR comment at that head. From 13:27 UTC the reviewer of the Navigator's PRs was an independent Claude reviewer agent rather than the Driver; see "Review deviation" below.

PR Branch Merged head Author / reviewer Change Local evidence at that head
#7 roadmap/pr-01-foundation 8611d48 Codex / Navigator Foundation: workspace prune, dev launcher v1, security scan, local runbook, provenance and reuse docs, docs/api/openapi.json and the cascade-latency artifact byte-identical from the source commit. frozen install 0, typecheck 0, vitest 50 files / 386, eslint 0, secret grep clean, 265 prior-work files byte-identical
#5 roadmap/pr-02d-session-signer d4fe4b6 Navigator / Codex Injectable session signer (sessionSigningKey option, AIDENID_CONTROL_PLANE_SESSION_SIGNING_JWK, else per-process) and GET /.well-known/aidenid-session-jwks.json; route contract fixture (50 routes, 7 public). 111 control-plane tests
#4 roadmap/pr-02c-agent-client ffd5d4a Navigator / Codex @aidenid/agent-client: mintAgentKey, exchangeSession, buildSignedHeaders (DPoP + RFC 9421), signedFetch; bodyless-only signed requests. 6 tests including a round trip through verifyCryptoPath
#3 roadmap/pr-02b-jev 77de7d8 Navigator / Codex @aidenid/jev: assess(), composeWithJev(), Anthropic provider through the official SDK; cache key bound to the sanitized purpose text; no clear result without evidence coverage. 13 tests including prompt-injection-cannot-widen-scope, timeout, malformed output, cache binding
#1 roadmap/pr-02a-revocation-terminal 765f55b Navigator / Codex F-01/F-02: revokeChain marks the grant revoked before any outbox publish; withChainAuthority runs an effect on the same per-chain lease revokeChain holds (in-memory lease waits up to 2 s then fails closed as chain_busy; TTL-bound Redis leases are refused as a gate backend; same-process callers are serialized before any cross-replica lock; per-invocation Redis holder token). revocation-terminal, revocation-boundary, revocation-lease-hardening, revocation-pg-reentrancy; control-plane suites green
#9 roadmap/pr-02-protected-site db7873e Codex / Navigator Protected site: verifier in enforce mode with a deny-by-default policy, embedded control plane served on a second loopback port, operator site scopes on the control plane, the seven /glasswing/* operator routes (agents, grants, run, revoke, reviews), review approval released once under withChainAuthority. frozen install 0, typecheck 0, vitest 60 files / 449, eslint 0, secret grep clean, 250 prior-work blobs identical; site-mode integration of all seven routes plus revoke recorded as a comment on the PR
#10 roadmap/pr-03b-dev-launcher 86a4c28 Navigator / Codex pnpm dev starts the protected site (serving the embedded control plane on 4000) and the dashboard with one generated operator token plus a distinct dashboard request token; Jev credentials forwarded to the site only; fallback to the standalone control plane when the site is not built. fallback mode on test ports: control plane and dashboard health, operator token 200 / 401, dashboard request token 200 / 401; site mode exercised with #9 and #8
#8 roadmap/pr-03-glasswing-ui dfd3284 Navigator / Codex Glasswing console at /glasswing: mint, single-scope grants, run a task, review queue, timeline; allow-listed /api/glasswing/* proxy that adds the server-held operator token; dev session cookie enabled only by the launcher flag. Independent review found two blocking defects at f2f4150 (site error shape dropped by the client; Host-header loopback check), fixed at dfd3284. dashboard vitest 12 files / 124 tests, eslint 0, typecheck 0, next build green; refusal rendering verified by execution by the reviewer; exercised against #9 on the integration stack
#6 roadmap/pr-02e-kernel-e2e e97032e Navigator / Codex kernel-e2e.test.ts: grant → exchange → signed request verified against the published JWKS → effect under the gate → revoke → effect refused and re-exchange refused; a verifier with its epoch floor raised refuses the old token. 1 test, in-process
#11 roadmap/pr-05-decision-noise f6328f2 Navigator / Codex Operator API calls and health probes are no longer recorded as decisions (16 noise rows per probe run before the fix). protected-site e2e 8 / 8, tsc 0, eslint 0
#12 roadmap/pr-06-followups 3405795 Navigator / independent reviewer Review follow-ups: the console distinguishes login_required from dev_session_disabled and names the launcher flag; .env.example keeps the flag commented; the site logs refused operator calls (method, path, source address). dashboard vitest 12 files / 125 tests, protected-site e2e 8 / 8, eslint 0, typecheck 0, next build green
#2 roadmap/pr-04-docs 583c08d Navigator / independent reviewer README, demo runbook, evidence record and submission copy; two false runbook claims and four smaller inaccuracies corrected after a factual review against main. docs only; factual review
#13 roadmap/pr-07-review-log c05c237 Navigator / independent reviewer Review timeline sentence derived from the server status (found by Joey Mussalli in rehearsal); runbook reload note. dashboard vitest 12 files / 126 tests; full gate 64 / 466
#14 mmanikass:manika/product-docs ed6c627 Manika Sakulsureeyadej / Navigator Customer brief and onboarding friction list (packet-derived text split out). factual read against main
#15 KARTHIKGODUGOLLA:karthik/jev-eval edaa8b7 Karthik Godugolla / Navigator Evaluation harness for TypeSafe jev-1.13 as a candidate provider, scoped as distinct from the shipped @aidenid/jev; all cases NOT RUN. secret scan clean; no workspace gate impact
#17 roadmap/pr-08-submission-members d6a66e4 Navigator / independent reviewer Repo copy of the submission file mirrors the four filed members. members block byte-identical to the filed file
#16 mmanikass:manika/product-docs 8db0ae7 Manika Sakulsureeyadej / Navigator Demo narrative; packet-adapted wording published with the owner's OK. factual read against main
#18 roadmap/pr-09-jev-timeout 8a5de8c Navigator / independent reviewer JEV_TIMEOUT_MS knob; launcher gives the dashboard proxy a 20 s budget (live Opus 5 latency 3.9 to 4.6 s against the 4 s default). site e2e 8 / 8; full gate 64 / 466
#19 roadmap/pr-10-limitations df2aaee Navigator / independent reviewer README limits: receipts are not effect receipts, nothing persists, only allow/deny/queue shown (claims review V-01). docs only
#20 roadmap/pr-11-jev-cap c127afb Navigator / independent reviewer JEV_TIMEOUT_MS capped at 15 s under the proxy budget. site e2e 8 / 8
#21 roadmap/pr-12-read-gate fdfefd8 Navigator / independent reviewer Claims review V-02 and V-03: /catalog and /reports/bulk answer only under chain authority (a pre-revoke session is refused with a recorded deny); the approval decision is recorded before a job is released. site e2e 10 / 10; full gate 64 / 468

main at the 14:00 EDT freeze is 9a73270. Local gate there: frozen install 0, typecheck 0, vitest 64 files / 468 tests, eslint 0, secret scan 0. The pre-freeze claims review by a second reviewer agent (Verity, at the owner's request) produced V-01 (wording, PR #19), V-02 and V-03 (P1, PR #21); the Driver returned at 17:07 UTC and reviewed alongside the independent reviewer from then on.

Review deviation (13:27 UTC onward)

The Driver (gpt-luna-xh) posted nothing in the coordination room after 12:51 UTC and left no verdict on the Navigator's four open PRs. Under the owner's standing instruction not to let the finish slip once the 09:00 EDT mark passed, the Navigator posted a deviation notice in the room at 13:27 UTC and replaced the Driver's non-author review with independent reviewer agents: fresh Claude contexts that did not write the code, ran the same local gate at each exact head, read the diffs adversarially, and posted their verdicts as PR comments labelled "Independent review". The Navigator merged only on those approvals, pinned to the reviewed head. The Driver's verdicts would have governed had they arrived first.

Findings the independent review produced and that were fixed before merge:

Non-blocking findings left open at the freeze, all from the independent reviews: .env.example pre-enables AIDENID_REQUIRE_LOGIN=false and the ephemeral-store flags without a warning line; the console shows a bare operator_auth_not_configured code instead of naming the variables; the operator audit log line has no test pinning its field set; the kernel e2e setup calls assert no status; isGlasswingRunResult validates only the outer shape; the proxy drops a base path in AIDENID_PROTECTED_SITE_URL and passes the upstream content type through without nosniff; validPort in the launcher silently substitutes the default for a malformed port.

Combined gate on main plus the four PRs at their final heads (worktree head 43d3470): frozen install 0, typecheck 0, vitest 64 files / 464 tests, eslint 0, secret scan 0; site-mode launch of that tree ran the full demo flow through the seven operator routes, the dashboard proxy and the dev session cookie, with the decision log holding agent decisions only.