diff --git a/.codex/tasks/P0_SERIES_A_PRODUCT_WIRING_20260811.md b/.codex/tasks/P0_SERIES_A_PRODUCT_WIRING_20260811.md new file mode 100644 index 000000000..607e57769 --- /dev/null +++ b/.codex/tasks/P0_SERIES_A_PRODUCT_WIRING_20260811.md @@ -0,0 +1,191 @@ +# P0 — Series-A product wiring and proof closure + +## Authority and source + +- Repository: `szl-holdings/platform` +- Starting protected-main revision: `e7c87eddcc1761de3887db4bc39e6e6a945b13cc` +- `AGENTS.md`, `docs/A11OY_NON_NEGOTIABLES.md`, `docs/APP_STATUS.md`, `docs/operations/known-gaps.md`, and current protected source are authoritative. +- Current source supersedes stale payloads and old screenshots. +- Work only on this task PR branch. Do not write directly to protected `main`. + +## Mission + +Finish the currently implementable platform work needed for one coherent investor/developer product experience and one operationally honest execution path. Inspect, patch, test, capture real proof where the environment supports it, and leave complete source changes on this branch. Do not return another roadmap. + +## Required work + +### 1. Reconcile current state + +Run the Pathfinder/context pass required by `AGENTS.md`. Inspect all active artifacts, routes, Workcell definitions, proof/status documents, open gaps, and repository-native task payloads. Classify every discovered payload as: + +- `APPLIED_AND_VERIFIED` +- `SUPERSEDED_BY_NEWER_SOURCE` +- `ALREADY_SATISFIED` +- `BLOCKED_EXTERNAL_AUTHORITY` + +Do not replay old patches against the current monorepo. + +### 2. Wire the product end to end + +Close reproducible source-level gaps across the current platform, prioritizing: + +- one understandable investor path from company narrative to flagship value, live demo, proof, and diligence; +- one understandable developer path from architecture to APIs, Workcells, governance, receipts, local run, and verification; +- coherent navigation and naming across the current A11oy/KORA/FORGE/APEX product family defined by `AGENTS.md`; +- operational Workcell truth: real, demo, unavailable, degraded, blocked, and roadmap states must be explicit and typed; +- routes, API clients, environment fallbacks, and state transitions used by investor/demo-critical surfaces; +- no dead CTA, placeholder path, clipped panel, inaccessible target, stale hard-coded count, or wide-table-only mobile experience; +- proof packets, status documents, and known-gap closure for every changed surface; +- mobile, tablet, laptop, and wide-desktop layouts for changed public UI; +- exact distinction between an active prototype/investor demo and verified production operation. + +When a current contract is already satisfied, avoid cosmetic churn and add focused regression evidence instead. + +### 3. Qualification + +Follow the repository loop exactly: + +`Context → Plan → Patch → Test → Screenshot → Verify → Proof → Commit` + +At minimum run the applicable current commands: + +- baseline and final `pnpm typecheck`; +- focused package tests and relevant full tests; +- `pnpm qa:routes` for route changes; +- build checks for changed apps/packages; +- responsive/browser verification at 320, 390, 768, 1366, and 1728 CSS pixels; +- live screenshots for changed UI only when a real running surface is available; +- claim/doctrine, secret, accessibility, and route checks; +- `git diff --check`. + +Do not weaken a check or fabricate screenshots/evidence to make the task pass. + +### 4. Evidence + +Update this file before finishing with exact files changed, root causes, commands/outcomes, screenshots or explicit screenshot blockers, payload dispositions, remaining external blockers, and non-claims. Create the required Proof Packet using the repository’s existing `audit/` conventions. Update `docs/operations/known-gaps.md` and `docs/APP_STATUS.md` when status changes. + +## Hard boundaries + +- No direct protected-main write, force push, history rewrite, self-approval, or administrator bypass. +- No secret retrieval, display, copying, or mutation. +- No destructive database operation. +- No fake customer, revenue, compliance, integration, deployment, or production claim. +- No copied vendor UI, copy, or trade dress. +- No Hugging Face publication or deployment claim from this task. +- Preserve exact-head hosted checks, independent review, and protected merge as promotion authority. + +## Definition of done + +The branch contains complete tested source repairs or a proof-backed `ALREADY_SATISFIED` result; investor and developer journeys are coherent across all changed screen sizes; operational states and claims are honest; task/payload dispositions are recorded; and no reproducible source defect in scope is left as an unowned roadmap item. + +## 2026-08-11 local successor result + +### Exact source and boundary + +- Worktree: `C:\Users\steph\Documents\Codex\2026-08-11\i\work\platform-series-a` +- Repository: `szl-holdings/platform` +- Branch: `codex/p0-platform-work-20260811` +- PR base revision: `e7c87eddcc1761de3887db4bc39e6e6a945b13cc` +- Inspected PR #584 head and local HEAD: `bc40b1c6aec8a44a8a6928c25a21de9aa91e76b7` +- State: uncommitted local candidate under a consolidation lock. No commit, push, PR update, + workflow action, deployment, Hugging Face change, or other remote mutation was issued. + +### Root causes + +1. The registered investor route used a legacy view with hard-coded commercial and operating + claims that were not bound to current evidence. +2. Six buyer problems existed only as dispersed product routes; there was no coherent investor + entry point exposing a shared decision grammar and proof boundary. +3. The frontend declares GraphQL HTTP and WebSocket clients, but no server resolver or registered + route for those contracts was found at this source revision. The new view therefore fails + closed as `UNAVAILABLE` rather than inventing backend wiring. +4. The A11oy production bundle resolved `@szl-holdings/flexcache/react` to an unbuilt `dist` + export. The Vite configuration now aliases both FlexCache entry points to their tracked local + TypeScript sources, matching the monorepo source-alias pattern. +5. The globally mounted Omnia provider posted an adoption beacon to an absent endpoint and emitted + an HTTP 404 in the browser. A11oy now declares the provider network `UNAVAILABLE`; the provider + skips the absent beacon and notification endpoints instead of fabricating a backend. + +### Patch + +- Added `/a11oy/start` and mapped `/a11oy/investor-demo` to the same truth-safe `SeriesAView`. +- Added typed contracts for cyber security, finance, data governance, enterprise operations, real + estate, and legal. +- Added a keyboard-operable tab interface with `Observe -> Gate -> Act -> Prove`, buyer value, + existing source-route CTAs, and explicit `AVAILABLE`, `DEMO`, `BLOCKED`, and `UNAVAILABLE` + evidence states. +- Added 6/3/1-column responsive layouts, full-width narrow-screen actions, 44-46 px interaction + targets, overflow controls, and reduced-motion handling. +- Replaced the shell's unsupported `Fabric operational` claim with `Active prototype` and routed + its Series A CTA to the canonical view. +- Added focused source-contract regression tests and the `test:series-a` package script. +- Added both Series A entry points to the repository route smoke inventory. +- Added a typed fail-closed Omnia network state and aligned the A11oy TypeScript provider path with + the same tracked source used by Vite. + +### Payload dispositions + +- Starting SHA `d5cf05ce18b2f776e5ea5124bb9eebc5b0a842d9`: + `SUPERSEDED_BY_NEWER_SOURCE` because current PR #584 head was obtained read-only. +- Current PR #584 head `bc40b1c6aec8a44a8a6928c25a21de9aa91e76b7`: + `APPLIED_AND_VERIFIED` as the exact local base for this successor patch. +- Six-view investor IA, evidence-state contract, route compatibility, and local source alias: + `APPLIED_AND_VERIFIED` by focused tests, TypeScript compilation, and production build. +- GraphQL server execution, external connectors, hosted receipts, deployment parity, and + independently observed production behavior: `BLOCKED_EXTERNAL_AUTHORITY` and displayed as + unavailable where relevant. +- Legacy investor hard-coded claims: `SUPERSEDED_BY_NEWER_SOURCE` at the registered route; the + legacy file remains in the tree but is no longer the route target. + +### Qualification evidence + +- Baseline root `pnpm typecheck`: `BLOCKED` before compilation because the fresh worktree had no + linked dependencies and the package manager's registry requests failed with local/network + `EACCES`/fetch errors. +- Final root `pnpm typecheck` and direct Turbo retry: `BLOCKED` before source diagnostics because + pnpm attempted to purge/relink the junction-backed dependency tree without a TTY. The retry + entered the 201-package typecheck graph, but package scripts hit the same dependency-status + guard. The local dependency tree was preserved rather than allowing a destructive relink. +- Dependency recovery: reused a fully linked checkout with the identical lockfile SHA-256 + `B77E2E22177D2DA040AD16B9CAAB8E0CB14B53B3F959BAD4DA5B77726D2F7C82` through local junctions; + no package or lockfile mutation was made. +- A11oy TypeScript: `PASS` with `tsc -p artifacts/a11oy/tsconfig.json --noEmit`. +- Standalone Omnia package TypeScript: `BLOCKED` by its existing package configuration (DOM globals + are absent from the package compiler libs and the linked checkout cannot resolve `lucide-react`). + The changed provider source is imported through the A11oy TypeScript path and passed there. +- Focused contracts: `PASS`, 7/7 with + `node --test artifacts/a11oy/test/series-a-contract.test.mjs`. +- Focused Biome lint for all changed A11oy production modules: `PASS` with no warnings. +- React best-practices review: `PASS` with no critical waterfall, bundle, hook, rendering, or + accessibility defect found in the changed components. +- Production bundle: `PASS`, 3,342 modules transformed with + `vite build --configLoader runner`. +- Repository route smoke: overall `BLOCKED` because the five other web artifacts were not running; + the live A11oy slice passed 18/18, including `/a11oy/start` and `/a11oy/investor-demo`. +- Preview readback: `PASS`, HTTP 200 at `http://127.0.0.1:4128/a11oy/start` with the configured + CSP, X-Frame-Options, Permissions-Policy, and HSTS headers. +- Responsive browser matrix: `PASS` at 320, 390, 768, 1366, and 1728 CSS pixels. Every width had + six tabs and matching panels, working Home/End/Arrow navigation, `scrollWidth == innerWidth`, no + clipped nav link, no interaction target below 44 px, no application console/page error, no error + overlay, and no `/api` request. The compatibility investor route also returned HTTP 200. +- Visual review: `PASS`; 320, 390, and 1366 captures were directly inspected. The review repaired + the 320 px nav clipping and removed the residual unsupported live-operation footer text. +- Screenshot files: `audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-{320,390,768,1366,1728}.png`. +- `git diff --check`: `PASS`. + +### Screenshot evidence and non-claims + +The in-app browser controller first failed with +`failed to write kernel assets: The system cannot find the path specified. (os error 3)`. A local +Playwright/Chromium fallback subsequently completed the five-width matrix and produced the +cataloged images. Because the sandbox denied the optional Google Fonts request, the capture +fulfilled that stylesheet with an empty response and used the declared system-font fallback. This +is local responsive UI evidence, not external-font, hosted, deployed, or production evidence. + +This local candidate does not prove a commit, pushed branch update, review, protected merge, +deployment, domain state, GraphQL service, connector execution, customer use, revenue, compliance, +production readiness, or live receipt parity. `docs/APP_STATUS.md` was not changed because a local +uncommitted candidate does not change the canonical application status. + +Proof packet: +`audit/P0_SERIES_A_PRODUCT_WIRING_LOCAL_SUCCESSOR_PROOF_2026-08-11.md`. diff --git a/artifacts/PUBLIC_SURFACES.json b/artifacts/PUBLIC_SURFACES.json index ce9ce972c..7dd85ae5e 100644 --- a/artifacts/PUBLIC_SURFACES.json +++ b/artifacts/PUBLIC_SURFACES.json @@ -1,7 +1,7 @@ { "schema": "szl.public-surfaces/v1", "generated_by": "tools/truth/generate-public-surfaces.ts@szl.public-surfaces/v1", - "observed_at": "2026-08-11T08:36:44.786Z", + "observed_at": "2026-08-11T05:37:17.898Z", "summary": { "declared": 29, "customer_facing_products": 2, @@ -19,585 +19,34 @@ } }, "surfaces": [ - { - "id": "a11oy-build-info-api", - "name": "A11oy source-binding API", - "kind": "API", - "audience": ["DEVELOPER", "OPERATOR"], - "mode": "LIVE", - "availability": "REACHABLE", - "canonical_url": "https://szlholdings-a11oy.hf.space/api/build-info", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "serve.py", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://szlholdings-a11oy.hf.space/api/build-info" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-console", - "name": "A11oy operator console", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER", "OPERATOR"], - "mode": "MIXED", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/console", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "console/index.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/console" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-docs", - "name": "A11oy public documentation", - "kind": "WEB", - "audience": ["DEVELOPER", "INVESTOR"], - "mode": "DOCUMENTATION", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/docs", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "console/docs.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/docs" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-ecosystem-atlas", - "name": "SZL ecosystem atlas", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "MIXED", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/ecosystem", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "pages/ecosystem.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/ecosystem" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-front-door", - "name": "SZL Holdings and A11oy front door", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "MIXED", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "a11oy_landing.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-net-chat-gap", - "name": "A11oy.net chat route", - "kind": "WEB", - "audience": ["DEVELOPER", "INVESTOR"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a11oy.net/chat", - "source_owner": { - "repository": "szl-holdings/a11oy-net", - "path": "index.html", - "role": "REMEDIATION_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a11oy.net/chat" - }, - "note": "Route is not implemented on the current static site and is excluded from the measured public-surface count." - }, - { - "id": "a11oy-net-code-gap", - "name": "A11oy.net code route", - "kind": "WEB", - "audience": ["DEVELOPER", "INVESTOR"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a11oy.net/code", - "source_owner": { - "repository": "szl-holdings/a11oy-net", - "path": "index.html", - "role": "REMEDIATION_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a11oy.net/code" - }, - "note": "Route is not implemented on the current static site and is excluded from the measured public-surface count." - }, - { - "id": "a11oy-net-robots-gap", - "name": "A11oy.net robots metadata", - "kind": "METADATA", - "audience": ["MACHINE"], - "mode": "DOCUMENTATION", - "availability": "REACHABLE", - "canonical_url": "https://a11oy.net/robots.txt", - "source_owner": { - "repository": "szl-holdings/a11oy-net", - "path": "robots.txt", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a11oy.net/robots.txt" - }, - "note": "Machine-readable crawler policy is reachable and points to the canonical sitemap; it is not a customer-facing product surface." - }, - { - "id": "a11oy-net-sitemap-gap", - "name": "A11oy.net sitemap metadata", - "kind": "METADATA", - "audience": ["MACHINE"], - "mode": "DOCUMENTATION", - "availability": "REACHABLE", - "canonical_url": "https://a11oy.net/sitemap.xml", - "source_owner": { - "repository": "szl-holdings/a11oy-net", - "path": "sitemap.xml", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a11oy.net/sitemap.xml" - }, - "note": "Machine-readable sitemap metadata is reachable and lists the public thesis; it is not a customer-facing product surface." - }, - { - "id": "a11oy-net-thesis", - "name": "A11oy technical thesis", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "DOCUMENTATION", - "availability": "REACHABLE", - "canonical_url": "https://a11oy.net/", - "source_owner": { - "repository": "szl-holdings/a11oy-net", - "path": "index.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a11oy.net/" - }, - "note": "Static technical thesis is reachable; it does not provide the separately missing chat or code applications." - }, - { - "id": "a11oy-net-webmanifest-gap", - "name": "A11oy.net web app manifest", - "kind": "METADATA", - "audience": ["MACHINE"], - "mode": "DOCUMENTATION", - "availability": "REACHABLE", - "canonical_url": "https://a11oy.net/manifest.webmanifest", - "source_owner": { - "repository": "szl-holdings/a11oy-net", - "path": "manifest.webmanifest", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a11oy.net/manifest.webmanifest" - }, - "note": "A11oy.net manifest is currently reachable as JSON metadata and tracked with explicit metadata validation." - }, - { - "id": "a11oy-observability", - "name": "A11oy observability surface", - "kind": "WEB", - "audience": ["DEVELOPER", "OPERATOR", "INVESTOR"], - "mode": "MIXED", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/observability", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "pages/observability.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/observability" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-product-introduction", - "name": "A11oy product introduction", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "MIXED", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/a11oy/", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "a11oy_landing.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/a11oy/" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-readiness-api", - "name": "A11oy readiness API", - "kind": "API", - "audience": ["DEVELOPER", "OPERATOR"], - "mode": "LIVE", - "availability": "REACHABLE", - "canonical_url": "https://szlholdings-a11oy.hf.space/readyz", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "serve.py", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://szlholdings-a11oy.hf.space/readyz" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-receipt-verifier", - "name": "A11oy public receipt verifier", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER", "OPERATOR"], - "mode": "LIVE", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/verify", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "pages/verify.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/verify" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-spaces-registry", - "name": "Hugging Face Spaces registry", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "MIXED", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/spaces", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "szl_spaces_surface.py", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/spaces" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-trust-center", - "name": "A11oy trust center", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "MIXED", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/trust", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "web/trust.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/trust" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-wires", - "name": "A11oy cross-organ wires", - "kind": "WEB", - "audience": ["DEVELOPER", "OPERATOR", "INVESTOR"], - "mode": "MIXED", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/wires", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "pages/wires.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/wires" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "killinchu-build-info-api", - "name": "Killinchu source-binding API", - "kind": "API", - "audience": ["DEVELOPER", "OPERATOR"], - "mode": "LIVE", - "availability": "REACHABLE", - "canonical_url": "https://szlholdings-killinchu.hf.space/api/build-info", - "source_owner": { - "repository": "szl-holdings/killinchu", - "path": "serve.py", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://szlholdings-killinchu.hf.space/api/build-info" - }, - "note": "A bounded JSON body read reported OBSERVED source 859e26cf27164b38c4e289e40a751ce80d403368, matching protected Killinchu main, and OIDC attestation 39971795 for manifest sha256:7730a0334485ed3ca4754b38bd288ac004258918f0ede46719e72ae2a2ede960; this source-binding endpoint does not assert or infer the separate HF runtime content revision." - }, - { - "id": "killinchu-public-console", - "name": "Killinchu public console", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER", "OPERATOR"], - "mode": "MIXED", - "availability": "REDIRECTED", - "canonical_url": "https://a-11-oy.com/killinchu", - "source_owner": { - "repository": "szl-holdings/killinchu", - "path": "web/console.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://szlholdings-killinchu.hf.space/" - }, - "note": "The full public-surface sweep observed the approved redirect and final HTTP 200 at the Killinchu Space; this records route reachability only, not aggregate Killinchu health or source parity." - }, - { - "id": "killinchu-readiness-api", - "name": "Killinchu readiness API", - "kind": "API", - "audience": ["DEVELOPER", "OPERATOR"], - "mode": "LIVE", - "availability": "REACHABLE", - "canonical_url": "https://szlholdings-killinchu.hf.space/readyz", - "source_owner": { - "repository": "szl-holdings/killinchu", - "path": "serve.py", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://szlholdings-killinchu.hf.space/readyz" - }, - "note": "A bounded JSON body read reported ready, durable Khipu storage, an intact Khipu chain, and Doctrine v11; this scoped witness does not establish aggregate Killinchu API or alert-channel health." - }, - { - "id": "legacy-aegis-route", - "name": "Historical PARAGON route claim", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a-11-oy.com/aegis/", - "source_owner": { - "repository": "szl-holdings/platform", - "path": "PRODUCT-SURFACES.md", - "role": "CLAIM_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a-11-oy.com/aegis/" - }, - "note": "Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made." - }, - { - "id": "legacy-carlota-jo-route", - "name": "Historical Carlota Jo route claim", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a-11-oy.com/carlota-jo/", - "source_owner": { - "repository": "szl-holdings/platform", - "path": "PRODUCT-SURFACES.md", - "role": "CLAIM_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a-11-oy.com/carlota-jo/" - }, - "note": "Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made." - }, - { - "id": "legacy-command-route", - "name": "Historical Command route claim", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a-11-oy.com/command/", - "source_owner": { - "repository": "szl-holdings/platform", - "path": "PRODUCT-SURFACES.md", - "role": "CLAIM_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a-11-oy.com/command/" - }, - "note": "Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made." - }, - { - "id": "legacy-counsel-route", - "name": "Historical Counsel route claim", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a-11-oy.com/counsel/", - "source_owner": { - "repository": "szl-holdings/platform", - "path": "PRODUCT-SURFACES.md", - "role": "CLAIM_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a-11-oy.com/counsel/" - }, - "note": "Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made." - }, - { - "id": "legacy-lyte-route", - "name": "Historical KORA route claim", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a-11-oy.com/lyte/", - "source_owner": { - "repository": "szl-holdings/platform", - "path": "PRODUCT-SURFACES.md", - "role": "CLAIM_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a-11-oy.com/lyte/" - }, - "note": "Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made." - }, - { - "id": "legacy-pulse-route", - "name": "Historical LUMINA route claim", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a-11-oy.com/pulse/", - "source_owner": { - "repository": "szl-holdings/platform", - "path": "PRODUCT-SURFACES.md", - "role": "CLAIM_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a-11-oy.com/pulse/" - }, - "note": "Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made." - }, - { - "id": "legacy-terra-route", - "name": "Historical DOMAINE route claim", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a-11-oy.com/terra/", - "source_owner": { - "repository": "szl-holdings/platform", - "path": "PRODUCT-SURFACES.md", - "role": "CLAIM_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a-11-oy.com/terra/" - }, - "note": "Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made." - }, - { - "id": "legacy-vessels-route", - "name": "Historical SEXTANT route claim", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a-11-oy.com/vessels/", - "source_owner": { - "repository": "szl-holdings/platform", - "path": "PRODUCT-SURFACES.md", - "role": "CLAIM_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a-11-oy.com/vessels/" - }, - "note": "Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made." - } + {"id":"a11oy-build-info-api","name":"A11oy source-binding API","kind":"API","audience":["DEVELOPER", "OPERATOR"],"mode":"LIVE","availability":"REACHABLE","canonical_url":"https://szlholdings-a11oy.hf.space/api/build-info","source_owner":{"repository":"szl-holdings/a11oy","path":"serve.py","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://szlholdings-a11oy.hf.space/api/build-info"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-console","name":"A11oy operator console","kind":"WEB","audience":["INVESTOR", "DEVELOPER", "OPERATOR"],"mode":"MIXED","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/console","source_owner":{"repository":"szl-holdings/a11oy","path":"console/index.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/console"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-docs","name":"A11oy public documentation","kind":"WEB","audience":["DEVELOPER", "INVESTOR"],"mode":"DOCUMENTATION","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/docs","source_owner":{"repository":"szl-holdings/a11oy","path":"console/docs.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/docs"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-ecosystem-atlas","name":"SZL ecosystem atlas","kind":"WEB","audience":["INVESTOR", "DEVELOPER"],"mode":"MIXED","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/ecosystem","source_owner":{"repository":"szl-holdings/a11oy","path":"pages/ecosystem.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/ecosystem"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-front-door","name":"SZL Holdings and A11oy front door","kind":"WEB","audience":["INVESTOR", "DEVELOPER"],"mode":"MIXED","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/","source_owner":{"repository":"szl-holdings/a11oy","path":"a11oy_landing.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-net-chat-gap","name":"A11oy.net chat route","kind":"WEB","audience":["DEVELOPER", "INVESTOR"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a11oy.net/chat","source_owner":{"repository":"szl-holdings/a11oy-net","path":"index.html","role":"REMEDIATION_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a11oy.net/chat"},"note":"Route is not implemented on the current static site and is excluded from the measured public-surface count."}, + {"id":"a11oy-net-code-gap","name":"A11oy.net code route","kind":"WEB","audience":["DEVELOPER", "INVESTOR"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a11oy.net/code","source_owner":{"repository":"szl-holdings/a11oy-net","path":"index.html","role":"REMEDIATION_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a11oy.net/code"},"note":"Route is not implemented on the current static site and is excluded from the measured public-surface count."}, + {"id":"a11oy-net-robots-gap","name":"A11oy.net robots metadata","kind":"METADATA","audience":["MACHINE"],"mode":"DOCUMENTATION","availability":"REACHABLE","canonical_url":"https://a11oy.net/robots.txt","source_owner":{"repository":"szl-holdings/a11oy-net","path":"robots.txt","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a11oy.net/robots.txt"},"note":"Machine-readable crawler policy is reachable and points to the canonical sitemap; it is not a customer-facing product surface."}, + {"id":"a11oy-net-sitemap-gap","name":"A11oy.net sitemap metadata","kind":"METADATA","audience":["MACHINE"],"mode":"DOCUMENTATION","availability":"REACHABLE","canonical_url":"https://a11oy.net/sitemap.xml","source_owner":{"repository":"szl-holdings/a11oy-net","path":"sitemap.xml","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a11oy.net/sitemap.xml"},"note":"Machine-readable sitemap metadata is reachable and lists the public thesis; it is not a customer-facing product surface."}, + {"id":"a11oy-net-thesis","name":"A11oy technical thesis","kind":"WEB","audience":["INVESTOR", "DEVELOPER"],"mode":"DOCUMENTATION","availability":"REACHABLE","canonical_url":"https://a11oy.net/","source_owner":{"repository":"szl-holdings/a11oy-net","path":"index.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a11oy.net/"},"note":"Static technical thesis is reachable; it does not provide the separately missing chat or code applications."}, + {"id":"a11oy-net-webmanifest-gap","name":"A11oy.net web app manifest","kind":"METADATA","audience":["MACHINE"],"mode":"DOCUMENTATION","availability":"REACHABLE","canonical_url":"https://a11oy.net/manifest.webmanifest","source_owner":{"repository":"szl-holdings/a11oy-net","path":"manifest.webmanifest","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a11oy.net/manifest.webmanifest"},"note":"A11oy.net manifest is currently reachable as JSON metadata and tracked with explicit metadata validation."}, + {"id":"a11oy-observability","name":"A11oy observability surface","kind":"WEB","audience":["DEVELOPER", "OPERATOR", "INVESTOR"],"mode":"MIXED","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/observability","source_owner":{"repository":"szl-holdings/a11oy","path":"pages/observability.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/observability"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-product-introduction","name":"A11oy product introduction","kind":"WEB","audience":["INVESTOR", "DEVELOPER"],"mode":"MIXED","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/a11oy/","source_owner":{"repository":"szl-holdings/a11oy","path":"a11oy_landing.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/a11oy/"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-readiness-api","name":"A11oy readiness API","kind":"API","audience":["DEVELOPER", "OPERATOR"],"mode":"LIVE","availability":"REACHABLE","canonical_url":"https://szlholdings-a11oy.hf.space/readyz","source_owner":{"repository":"szl-holdings/a11oy","path":"serve.py","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://szlholdings-a11oy.hf.space/readyz"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-receipt-verifier","name":"A11oy public receipt verifier","kind":"WEB","audience":["INVESTOR", "DEVELOPER", "OPERATOR"],"mode":"LIVE","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/verify","source_owner":{"repository":"szl-holdings/a11oy","path":"pages/verify.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/verify"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-spaces-registry","name":"Hugging Face Spaces registry","kind":"WEB","audience":["INVESTOR", "DEVELOPER"],"mode":"MIXED","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/spaces","source_owner":{"repository":"szl-holdings/a11oy","path":"szl_spaces_surface.py","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/spaces"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-trust-center","name":"A11oy trust center","kind":"WEB","audience":["INVESTOR", "DEVELOPER"],"mode":"MIXED","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/trust","source_owner":{"repository":"szl-holdings/a11oy","path":"web/trust.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/trust"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-wires","name":"A11oy cross-organ wires","kind":"WEB","audience":["DEVELOPER", "OPERATOR", "INVESTOR"],"mode":"MIXED","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/wires","source_owner":{"repository":"szl-holdings/a11oy","path":"pages/wires.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/wires"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"killinchu-build-info-api","name":"Killinchu source-binding API","kind":"API","audience":["DEVELOPER", "OPERATOR"],"mode":"LIVE","availability":"REACHABLE","canonical_url":"https://szlholdings-killinchu.hf.space/api/build-info","source_owner":{"repository":"szl-holdings/killinchu","path":"serve.py","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://szlholdings-killinchu.hf.space/api/build-info"},"note":"Measured HTTP 200 at the approved Killinchu build-info route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"killinchu-public-console","name":"Killinchu public console","kind":"WEB","audience":["INVESTOR", "DEVELOPER", "OPERATOR"],"mode":"MIXED","availability":"REDIRECTED","canonical_url":"https://a-11-oy.com/killinchu","source_owner":{"repository":"szl-holdings/killinchu","path":"web/console.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://szlholdings-killinchu.hf.space/"},"note":"Measured HTTP 200 at the approved redirected Killinchu Space target; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"killinchu-readiness-api","name":"Killinchu readiness API","kind":"API","audience":["DEVELOPER", "OPERATOR"],"mode":"LIVE","availability":"REACHABLE","canonical_url":"https://szlholdings-killinchu.hf.space/readyz","source_owner":{"repository":"szl-holdings/killinchu","path":"serve.py","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://szlholdings-killinchu.hf.space/readyz"},"note":"Measured HTTP 200 at the approved Killinchu readiness route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"legacy-aegis-route","name":"Historical PARAGON route claim","kind":"WEB","audience":["INVESTOR", "DEVELOPER"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a-11-oy.com/aegis/","source_owner":{"repository":"szl-holdings/platform","path":"PRODUCT-SURFACES.md","role":"CLAIM_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a-11-oy.com/aegis/"},"note":"Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made."}, + {"id":"legacy-carlota-jo-route","name":"Historical Carlota Jo route claim","kind":"WEB","audience":["INVESTOR", "DEVELOPER"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a-11-oy.com/carlota-jo/","source_owner":{"repository":"szl-holdings/platform","path":"PRODUCT-SURFACES.md","role":"CLAIM_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a-11-oy.com/carlota-jo/"},"note":"Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made."}, + {"id":"legacy-command-route","name":"Historical Command route claim","kind":"WEB","audience":["INVESTOR", "DEVELOPER"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a-11-oy.com/command/","source_owner":{"repository":"szl-holdings/platform","path":"PRODUCT-SURFACES.md","role":"CLAIM_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a-11-oy.com/command/"},"note":"Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made."}, + {"id":"legacy-counsel-route","name":"Historical Counsel route claim","kind":"WEB","audience":["INVESTOR", "DEVELOPER"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a-11-oy.com/counsel/","source_owner":{"repository":"szl-holdings/platform","path":"PRODUCT-SURFACES.md","role":"CLAIM_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a-11-oy.com/counsel/"},"note":"Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made."}, + {"id":"legacy-lyte-route","name":"Historical KORA route claim","kind":"WEB","audience":["INVESTOR", "DEVELOPER"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a-11-oy.com/lyte/","source_owner":{"repository":"szl-holdings/platform","path":"PRODUCT-SURFACES.md","role":"CLAIM_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a-11-oy.com/lyte/"},"note":"Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made."}, + {"id":"legacy-pulse-route","name":"Historical LUMINA route claim","kind":"WEB","audience":["INVESTOR", "DEVELOPER"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a-11-oy.com/pulse/","source_owner":{"repository":"szl-holdings/platform","path":"PRODUCT-SURFACES.md","role":"CLAIM_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a-11-oy.com/pulse/"},"note":"Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made."}, + {"id":"legacy-terra-route","name":"Historical DOMAINE route claim","kind":"WEB","audience":["INVESTOR", "DEVELOPER"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a-11-oy.com/terra/","source_owner":{"repository":"szl-holdings/platform","path":"PRODUCT-SURFACES.md","role":"CLAIM_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a-11-oy.com/terra/"},"note":"Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made."}, + {"id":"legacy-vessels-route","name":"Historical SEXTANT route claim","kind":"WEB","audience":["INVESTOR", "DEVELOPER"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a-11-oy.com/vessels/","source_owner":{"repository":"szl-holdings/platform","path":"PRODUCT-SURFACES.md","role":"CLAIM_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a-11-oy.com/vessels/"},"note":"Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made."} ] } diff --git a/artifacts/a11oy/package.json b/artifacts/a11oy/package.json index f286b21f8..e4cb1d139 100644 --- a/artifacts/a11oy/package.json +++ b/artifacts/a11oy/package.json @@ -7,6 +7,7 @@ "dev": "vite --config vite.config.ts --host 0.0.0.0", "build": "vite build --config vite.config.ts", "serve": "vite preview --config vite.config.ts --host 0.0.0.0", + "test:series-a": "node --test test/series-a-contract.test.mjs", "typecheck": "tsc -p tsconfig.json --noEmit", "lint": "biome lint ./src", "lint:ci": "biome lint ./src", diff --git a/artifacts/a11oy/src/App.tsx b/artifacts/a11oy/src/App.tsx index 650a6cb54..97ed84626 100644 --- a/artifacts/a11oy/src/App.tsx +++ b/artifacts/a11oy/src/App.tsx @@ -91,14 +91,13 @@ const Sovereign = lazy(() => import('./pages/Sovereign').then((m) => ({ default: const BoardroomMode = lazy(() => import('./pages/BoardroomMode').then((m) => ({ default: m.BoardroomMode })), ); -const InvestorDemo = lazy(() => - import('./pages/InvestorDemo').then((m) => ({ default: m.InvestorDemo })), +const SeriesAView = lazy(() => + import('./pages/SeriesAView').then((m) => ({ default: m.SeriesAView })), ); const FlexCacheRuntime = lazy(() => import('./pages/FlexCacheRuntime').then((m) => ({ default: m.FlexCacheRuntime })), ); const Terminal = lazy(() => import('./pages/Terminal').then((m) => ({ default: m.Terminal }))); -const Fabric = lazy(() => import('./pages/Fabric').then((m) => ({ default: m.Fabric }))); const FabricCockpit = lazy(() => import('./pages/fabric/FabricCockpit').then((m) => ({ default: m.FabricCockpit })), ); @@ -429,7 +428,8 @@ export default function App() { - + + diff --git a/artifacts/a11oy/src/components/layout.tsx b/artifacts/a11oy/src/components/layout.tsx index 2efefd4e7..f89a78dac 100644 --- a/artifacts/a11oy/src/components/layout.tsx +++ b/artifacts/a11oy/src/components/layout.tsx @@ -362,10 +362,10 @@ export function Layout({ children, fullscreen = false }: LayoutProps) { boxShadow: `0 0 6px ${TOKENS.accent}`, }} /> - Fabric operational + Active prototype - Investor demo + Series A view diff --git a/artifacts/a11oy/src/data/seriesASolutions.ts b/artifacts/a11oy/src/data/seriesASolutions.ts new file mode 100644 index 000000000..40d9c1199 --- /dev/null +++ b/artifacts/a11oy/src/data/seriesASolutions.ts @@ -0,0 +1,188 @@ +export type SeriesAEvidenceState = 'AVAILABLE' | 'DEMO' | 'BLOCKED' | 'UNAVAILABLE'; + +export type SeriesALoopStep = { + readonly phase: 'Observe' | 'Gate' | 'Act' | 'Prove'; + readonly state: SeriesAEvidenceState; + readonly summary: string; + readonly evidence: string; +}; + +export type SeriesASolution = { + readonly id: + | 'cyber-security' + | 'finance' + | 'data-governance' + | 'enterprise' + | 'real-estate' + | 'legal'; + readonly shortLabel: string; + readonly title: string; + readonly buyer: string; + readonly thesis: string; + readonly value: string; + readonly demoHref: string; + readonly demoLabel: string; + readonly sourceState: 'AVAILABLE'; + readonly scenarioState: 'DEMO'; + readonly liveState: 'UNAVAILABLE'; + readonly loop: readonly [SeriesALoopStep, SeriesALoopStep, SeriesALoopStep, SeriesALoopStep]; +}; + +function loop(observe: string, gate: string, act: string, prove: string): SeriesASolution['loop'] { + return [ + { + phase: 'Observe', + state: 'DEMO', + summary: observe, + evidence: 'Deterministic scenario input; no external feed is represented as connected.', + }, + { + phase: 'Gate', + state: 'DEMO', + summary: gate, + evidence: + 'Covenant policy is inspectable in the demo; production authorization is not asserted.', + }, + { + phase: 'Act', + state: 'BLOCKED', + summary: act, + evidence: 'The demo can stage and route an action, while external mutation remains blocked.', + }, + { + phase: 'Prove', + state: 'DEMO', + summary: prove, + evidence: + 'The source-backed demo exposes the evidence shape; no deployed receipt is inferred.', + }, + ]; +} + +export const SERIES_A_SOLUTIONS: readonly SeriesASolution[] = [ + { + id: 'cyber-security', + shortLabel: 'Cyber', + title: 'Cyber security', + buyer: 'CISO and security operations', + thesis: + 'Turn a threat signal into a governed containment recommendation with an explicit approval boundary.', + value: + 'Shortens the path from detection to an accountable decision without granting an agent silent control.', + demoHref: '/cyber-resilience', + demoLabel: 'Open cyber resilience demo', + sourceState: 'AVAILABLE', + scenarioState: 'DEMO', + liveState: 'UNAVAILABLE', + loop: loop( + 'Normalize seeded indicators into a bounded incident context.', + 'Evaluate severity, blast radius, and the required approval tier.', + 'Stage containment and escalation for an operator decision.', + 'Attach the scenario, policy result, approval state, and proposed action.', + ), + }, + { + id: 'finance', + shortLabel: 'Finance', + title: 'Finance', + buyer: 'CFO, treasury, and risk teams', + thesis: 'Compare financial scenarios before a material action crosses an approval threshold.', + value: + 'Makes assumptions, counterfactuals, and authority visible in one reviewable decision path.', + demoHref: '/counterfactuals', + demoLabel: 'Open finance scenario demo', + sourceState: 'AVAILABLE', + scenarioState: 'DEMO', + liveState: 'UNAVAILABLE', + loop: loop( + 'Load a deterministic exposure and variance scenario.', + 'Apply risk, materiality, and separation-of-duties rules.', + 'Route the preferred scenario as a recommendation, not a transaction.', + 'Preserve assumptions, compared paths, gate outcome, and reviewer state.', + ), + }, + { + id: 'data-governance', + shortLabel: 'Data', + title: 'Data governance', + buyer: 'Chief data and governance officers', + thesis: + 'Make data access, model use, and policy evaluation legible before downstream execution.', + value: + 'Gives diligence teams a concrete boundary between declared controls and observed evidence.', + demoHref: '/governance', + demoLabel: 'Open governance demo', + sourceState: 'AVAILABLE', + scenarioState: 'DEMO', + liveState: 'UNAVAILABLE', + loop: loop( + 'Classify a seeded data request by sensitivity and intended use.', + 'Evaluate purpose, scope, retention, and approver requirements.', + 'Stage an allow, narrow, or deny disposition for human review.', + 'Record the request, policy version, disposition, and evidence boundary.', + ), + }, + { + id: 'enterprise', + shortLabel: 'Enterprise', + title: 'Enterprise operations', + buyer: 'COO and cross-functional operators', + thesis: + 'Coordinate a consequential operating decision across signals, teams, and policy gates.', + value: + 'Replaces opaque handoffs with one inspectable recommendation, approval, and proof sequence.', + demoHref: '/approval-queue', + demoLabel: 'Open approval queue demo', + sourceState: 'AVAILABLE', + scenarioState: 'DEMO', + liveState: 'UNAVAILABLE', + loop: loop( + 'Combine deterministic operating signals into a shared action context.', + 'Resolve ownership, policy exceptions, and the required approval tier.', + 'Stage the recommended cross-functional action in the approval queue.', + 'Bind the context, decision path, reviewers, and resulting disposition.', + ), + }, + { + id: 'real-estate', + shortLabel: 'Real estate', + title: 'Real estate', + buyer: 'Asset managers and investment committees', + thesis: + 'Evaluate an asset decision against risk, portfolio context, and approval policy before commitment.', + value: + 'Connects asset-level evidence to an investment decision without presenting seeded data as a live portfolio.', + demoHref: '/fabric/verticals', + demoLabel: 'Open vertical fabric demo', + sourceState: 'AVAILABLE', + scenarioState: 'DEMO', + liveState: 'UNAVAILABLE', + loop: loop( + 'Assemble a seeded asset, market, and risk snapshot.', + 'Evaluate concentration, downside, authority, and diligence requirements.', + 'Stage hold, diligence, or proceed as an investment-committee recommendation.', + 'Preserve source labels, assumptions, policy result, and committee state.', + ), + }, + { + id: 'legal', + shortLabel: 'Legal', + title: 'Legal', + buyer: 'General Counsel and legal operations', + thesis: + 'Turn an obligation or matter signal into an explainable, reviewable legal operations decision.', + value: + 'Keeps privilege, authority, and the difference between analysis and legal action explicit.', + demoHref: '/right-to-audit', + demoLabel: 'Open legal audit demo', + sourceState: 'AVAILABLE', + scenarioState: 'DEMO', + liveState: 'UNAVAILABLE', + loop: loop( + 'Extract a deterministic obligation, deadline, and matter context.', + 'Apply privilege, jurisdiction, materiality, and approver rules.', + 'Stage a review task or escalation; no filing or notice is sent.', + 'Record the source context, policy path, reviewer state, and proposed next step.', + ), + }, +] as const; diff --git a/artifacts/a11oy/src/main.tsx b/artifacts/a11oy/src/main.tsx index d530d4b31..a6ad656e3 100644 --- a/artifacts/a11oy/src/main.tsx +++ b/artifacts/a11oy/src/main.tsx @@ -5,10 +5,15 @@ import App from './App'; import { GraphQLProvider } from './graphql'; import './index.css'; -ReactDOM.createRoot(document.getElementById('root')!).render( +const root = document.getElementById('root'); +if (!root) throw new Error('A11oy root element is unavailable'); + +ReactDOM.createRoot(root).render( - + diff --git a/artifacts/a11oy/src/pages/SeriesAView.tsx b/artifacts/a11oy/src/pages/SeriesAView.tsx new file mode 100644 index 000000000..027b43150 --- /dev/null +++ b/artifacts/a11oy/src/pages/SeriesAView.tsx @@ -0,0 +1,457 @@ +import { useRef, useState, type KeyboardEvent } from 'react'; +import { Link } from 'wouter'; +import { Layout } from '../components/layout'; +import { + SERIES_A_SOLUTIONS, + type SeriesAEvidenceState, + type SeriesASolution, +} from '../data/seriesASolutions'; + +const BASE = (import.meta.env.BASE_URL ?? '/a11oy/').replace(/\/$/, ''); +const route = (path: string) => `${BASE}${path}`; + +const STATE_STYLE: Record< + SeriesAEvidenceState, + { color: string; background: string; border: string } +> = { + AVAILABLE: { + color: '#b8e4d3', + background: 'rgba(85, 185, 146, 0.10)', + border: 'rgba(85, 185, 146, 0.28)', + }, + DEMO: { + color: '#e5d29e', + background: 'rgba(201, 183, 135, 0.12)', + border: 'rgba(201, 183, 135, 0.34)', + }, + BLOCKED: { + color: '#f1bd91', + background: 'rgba(219, 139, 75, 0.10)', + border: 'rgba(219, 139, 75, 0.30)', + }, + UNAVAILABLE: { + color: '#b7bac2', + background: 'rgba(183, 186, 194, 0.08)', + border: 'rgba(183, 186, 194, 0.22)', + }, +}; + +function StateBadge({ state }: { state: SeriesAEvidenceState }) { + const style = STATE_STYLE[state]; + return ( + + {state} + + ); +} + +function TruthCard({ + label, + state, + detail, +}: { + label: string; + state: SeriesAEvidenceState; + detail: string; +}) { + return ( +
+
+ {label} + +
+

{detail}

+
+ ); +} + +function SolutionPanel({ solution }: { solution: SeriesASolution }) { + return ( +
+
+
+

{solution.buyer}

+

{solution.title}

+

{solution.thesis}

+
+
+ Source UI + + Scenario + + Live data + +
+
+ +
+ {solution.loop.map((step, index) => ( +
+
+ 0{index + 1} + +
+

{step.phase}

+

{step.summary}

+ {step.evidence} +
+ ))} +
+ +
+
+

Buyer value

+

{solution.value}

+
+
+

Execution boundary

+

+ This source revision demonstrates a deterministic, governed decision path. External + connector reads, production mutations, and deployed receipt parity remain unavailable + until independently observed. +

+
+
+ +
+ + {solution.demoLabel} + + + Inspect Proof Ledger + + + Inspect policy gates + +
+
+ ); +} + +export function SeriesAView() { + const [selectedId, setSelectedId] = useState(SERIES_A_SOLUTIONS[0].id); + const tabRefs = useRef>([]); + const selected = + SERIES_A_SOLUTIONS.find((solution) => solution.id === selectedId) ?? SERIES_A_SOLUTIONS[0]; + + function onTabKeyDown(event: KeyboardEvent, index: number) { + if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return; + event.preventDefault(); + let next = index; + if (event.key === 'ArrowLeft') + next = (index - 1 + SERIES_A_SOLUTIONS.length) % SERIES_A_SOLUTIONS.length; + if (event.key === 'ArrowRight') next = (index + 1) % SERIES_A_SOLUTIONS.length; + if (event.key === 'Home') next = 0; + if (event.key === 'End') next = SERIES_A_SOLUTIONS.length - 1; + const target = SERIES_A_SOLUTIONS[next]; + setSelectedId(target.id); + tabRefs.current[next]?.focus(); + } + + return ( + +
+ + +
+ + + A11oy + + +
+ +
+
+
+

Series A product view · active prototype

+

+ See the governed decision loop. Inspect the proof boundary. +

+

+ A11oy is designed to turn consequential enterprise signals into policy-gated, + human-authorized actions with evidence attached. This view separates what the source + demonstrates from what still requires a live, independently observed runtime. +

+
+ + Open deterministic demo + + + Inspect proof shape + +
+
+ +
+ +
+ + + + +
+ +
+
+
+

One product · six investor-ready views

+

Choose the buyer problem.

+
+

+ Every tab exposes the same governed loop and links into an existing A11oy demo + surface. The operational state stays visible throughout the journey. +

+
+ +
+ {SERIES_A_SOLUTIONS.map((solution, index) => ( + + ))} +
+ +
+ +
+
+
+

Diligence path

+

Move from narrative to source evidence.

+
+

+ No dead-end pitch deck: every diligence card resolves to a registered A11oy route. +

+
+
+ + 01 · ARCHITECTURE +
+ Inspect the fabric +

Review the source-declared layers, boundaries, and product structure.

+
+ + + 02 · GOVERNANCE +
+ Inspect the gate +

Follow the Covenant policy and human-authorization path.

+
+ + + 03 · PROOF +
+ Inspect the evidence +

Review the demo Proof Packet shape without inferring deployed receipts.

+
+ +
+
+ +
+ A11oy · Governed decision infrastructure prototype + + Source-qualified view · no customer, revenue, certification, or production claim + +
+
+
+
+ ); +} diff --git a/artifacts/a11oy/test/series-a-contract.test.mjs b/artifacts/a11oy/test/series-a-contract.test.mjs new file mode 100644 index 000000000..7c7a4f248 --- /dev/null +++ b/artifacts/a11oy/test/series-a-contract.test.mjs @@ -0,0 +1,80 @@ +import assert from 'node:assert/strict'; +import { readFileSync } from 'node:fs'; +import { test } from 'node:test'; + +const page = readFileSync(new URL('../src/pages/SeriesAView.tsx', import.meta.url), 'utf8'); +const data = readFileSync(new URL('../src/data/seriesASolutions.ts', import.meta.url), 'utf8'); +const app = readFileSync(new URL('../src/App.tsx', import.meta.url), 'utf8'); +const layout = readFileSync(new URL('../src/components/layout.tsx', import.meta.url), 'utf8'); +const main = readFileSync(new URL('../src/main.tsx', import.meta.url), 'utf8'); +const viteConfig = readFileSync(new URL('../vite.config.ts', import.meta.url), 'utf8'); +const omniaProvider = readFileSync( + new URL('../../../packages/omnia-shell/src/OmniaShellProvider.tsx', import.meta.url), + 'utf8', +); + +const solutionIds = [ + 'cyber-security', + 'finance', + 'data-governance', + 'enterprise', + 'real-estate', + 'legal', +]; + +test('declares exactly the six Series A solution views', () => { + const declared = [...data.matchAll(/^\s{4}id: '([^']+)'/gm)].map((match) => match[1]); + assert.deepEqual(declared, solutionIds); + for (const label of ['Cyber security', 'Finance', 'Data governance', 'Enterprise operations', 'Real estate', 'Legal']) { + assert.match(data, new RegExp(`title: '${label}'`)); + } +}); + +test('keeps Observe, Gate, Act, Prove and operational truth states explicit', () => { + for (const phase of ['Observe', 'Gate', 'Act', 'Prove']) { + assert.match(data, new RegExp(`phase: '${phase}'`)); + } + for (const state of ['AVAILABLE', 'DEMO', 'BLOCKED', 'UNAVAILABLE']) { + assert.match(page, new RegExp(`state=\\"${state}\\"|state: '${state}'|${state}`)); + } + assert.match(page, /No server resolver route for the declared GraphQL client contract was found/); + assert.doesNotMatch(page, /production[- ]ready|SOC 2 certified|enterprise customers|proven ROI/i); +}); + +test('registers the canonical and backward-compatible investor routes', () => { + assert.match(app, /path=\{`\$\{base\}\/start`\} component=\{SeriesAView\}/); + assert.match(app, /path=\{`\$\{base\}\/investor-demo`\} component=\{SeriesAView\}/); + assert.match(layout, /href=\{b\('\/start'\)\}/); + assert.match(layout, />\s*Series A view\s* { + assert.match(page, /role=\"tablist\"/); + assert.match(page, /aria-selected=/); + assert.match(page, /ArrowLeft/); + assert.match(page, /ArrowRight/); + assert.match(page, /@media \(max-width: 520px\)/); + assert.match(page, /\.sa-header nav \{ display: grid; grid-template-columns: repeat\(2,/); + assert.match(page, /\.sa-truth-grid, \.sa-loop, \.sa-tabs \{ grid-template-columns: 1fr; \}/); + assert.match(page, /min-height: 46px/); + assert.doesNotMatch(page, /Live Enterprise Execution Fabric/); +}); + +test('links every solution to an existing registered source route', () => { + const hrefs = [...data.matchAll(/^\s{4}demoHref: '([^']+)'/gm)].map((match) => match[1]); + assert.equal(hrefs.length, solutionIds.length); + for (const href of hrefs) { + assert.match(app, new RegExp(`\\$\\{base\\}${href.replaceAll('/', '\\/')}`)); + } +}); + +test('resolves the local FlexCache source entrypoints used by the production bundle', () => { + assert.match(viteConfig, /@szl-holdings\\\/flexcache\\\/react/); + assert.match(viteConfig, /lib\/flexcache\/src\/react\.tsx/); + assert.match(viteConfig, /lib\/flexcache\/src\/index\.ts/); +}); + +test('fails closed when the Omnia network endpoints are absent', () => { + assert.match(main, /networkState: 'UNAVAILABLE'/); + assert.match(omniaProvider, /config\.networkState === 'UNAVAILABLE'/); +}); diff --git a/artifacts/a11oy/tsconfig.json b/artifacts/a11oy/tsconfig.json index abd5a2dc1..c43939159 100644 --- a/artifacts/a11oy/tsconfig.json +++ b/artifacts/a11oy/tsconfig.json @@ -19,6 +19,9 @@ "paths": { "@/*": [ "src/*" + ], + "@szl-holdings/omnia-shell/provider": [ + "../../packages/omnia-shell/src/OmniaShellProvider.tsx" ] } }, diff --git a/artifacts/a11oy/vite.config.ts b/artifacts/a11oy/vite.config.ts index c78af1a80..8ce433c8a 100644 --- a/artifacts/a11oy/vite.config.ts +++ b/artifacts/a11oy/vite.config.ts @@ -31,6 +31,14 @@ export default defineConfig({ resolve: { alias: [ { find: '@', replacement: path.resolve(import.meta.dirname, 'src') }, + { + find: /^@szl-holdings\/flexcache\/react$/, + replacement: path.resolve(import.meta.dirname, '../../lib/flexcache/src/react.tsx'), + }, + { + find: /^@szl-holdings\/flexcache$/, + replacement: path.resolve(import.meta.dirname, '../../lib/flexcache/src/index.ts'), + }, { find: /^@szl-holdings\/omnia-shell\/provider$/, replacement: path.resolve(import.meta.dirname, '../../packages/omnia-shell/src/OmniaShellProvider.tsx') }, { find: /^@szl-holdings\/omnia-shell\/top-bar$/, replacement: path.resolve(import.meta.dirname, '../../packages/omnia-shell/src/OmniaTopBar.tsx') }, { find: /^@szl-holdings\/omnia-shell\/command-palette$/, replacement: path.resolve(import.meta.dirname, '../../packages/omnia-shell/src/OmniaCommandPalette.tsx') }, diff --git a/audit/P0_SERIES_A_PRODUCT_WIRING_LOCAL_SUCCESSOR_PROOF_2026-08-11.md b/audit/P0_SERIES_A_PRODUCT_WIRING_LOCAL_SUCCESSOR_PROOF_2026-08-11.md new file mode 100644 index 000000000..08a6c87a3 --- /dev/null +++ b/audit/P0_SERIES_A_PRODUCT_WIRING_LOCAL_SUCCESSOR_PROOF_2026-08-11.md @@ -0,0 +1,153 @@ +# P0 Series A Product Wiring - Local Successor Proof Packet + +Generated: 2026-08-11 + +## Verdict + +`LOCAL_SOURCE_AND_RESPONSIVE_UI_VERIFIED / NOT PROMOTED` + +The current platform PR #584 source was advanced locally with one truth-safe A11oy investor path. +The candidate passes focused contracts, TypeScript compilation, and production bundling. It has +not been committed, pushed, reviewed, merged, deployed, or independently observed in production. + +## Exact provenance + +| Field | Evidence | +|---|---| +| Repository | `szl-holdings/platform` | +| Worktree | `C:\Users\steph\Documents\Codex\2026-08-11\i\work\platform-series-a` | +| Branch | `codex/p0-platform-work-20260811` | +| PR | #584, `closed` and still marked draft at final read-only inspection | +| PR base | `e7c87eddcc1761de3887db4bc39e6e6a945b13cc` | +| Local base and HEAD | `bc40b1c6aec8a44a8a6928c25a21de9aa91e76b7` | +| Candidate state | Dirty, uncommitted working tree | +| Remote mutations | None | + +The originally supplied `d5cf05ce18b2f776e5ea5124bb9eebc5b0a842d9` revision was not used as the +final base because read-only inspection recovered the newer exact PR head. + +## Product contract + +The registered `/a11oy/start` route defaults to an investor lens and exposes exactly six buyer +views: + +1. Cyber security +2. Finance +3. Data governance +4. Enterprise operations +5. Real estate +6. Legal + +Every view follows `Observe -> Gate -> Act -> Prove`, identifies the buyer and value, links to an +existing registered A11oy source route, and holds the same evidence boundary: + +| Surface or operation | State | Meaning | +|---|---|---| +| React view | `AVAILABLE` | Present and locally compiled in this source tree | +| Decision scenario | `DEMO` | Deterministic, non-customer scenario | +| External action | `BLOCKED` | Staged recommendation only; no external mutation | +| GraphQL runtime | `UNAVAILABLE` | Client declarations exist, but no server resolver route was found | + +The legacy `/a11oy/investor-demo` route resolves to the same truth-safe view. This prevents the +registered route from continuing to expose the legacy component's hard-coded investor metrics. + +## Backend inspection + +Searches across the API route trees, libraries, packages, and A11oy artifact found frontend client +declarations for `/api/graphql` and `/api/graphql/ws`, but no registered server resolver or route. +No GraphQL response, subscription, or deployment was fabricated. The view explicitly renders the +runtime as `UNAVAILABLE`; it remains a residual backend gap. + +## Changed source + +- `artifacts/a11oy/src/App.tsx` +- `artifacts/a11oy/src/components/layout.tsx` +- `artifacts/a11oy/src/data/seriesASolutions.ts` +- `artifacts/a11oy/src/main.tsx` +- `artifacts/a11oy/src/pages/SeriesAView.tsx` +- `artifacts/a11oy/package.json` +- `artifacts/a11oy/tsconfig.json` +- `artifacts/a11oy/vite.config.ts` +- `artifacts/a11oy/test/series-a-contract.test.mjs` +- `packages/omnia-shell/src/OmniaShellProvider.tsx` +- `packages/omnia-shell/src/types.ts` +- `scripts/qa/smoke-routes.js` +- `.codex/tasks/P0_SERIES_A_PRODUCT_WIRING_20260811.md` +- `docs/operations/known-gaps.md` +- `audit/screenshot-catalog.md` +- `audit/screenshots/series-a-local-2026-08-11/*.png` +- `audit/P0_SERIES_A_PRODUCT_WIRING_LOCAL_SUCCESSOR_PROOF_2026-08-11.md` + +## Verification + +| Check | Result | +|---|---| +| Fresh-worktree root `pnpm typecheck` baseline | `BLOCKED`: dependency linking attempted registry access and failed with `EACCES`/fetch errors | +| Final root `pnpm typecheck` | `BLOCKED`: pnpm refused to purge/relink the junction-backed modules tree without a TTY | +| Direct `turbo run typecheck` retry | `BLOCKED`: entered the 201-package graph, then nested pnpm scripts hit the same dependency-status guard before source diagnostics | +| Lockfile identity before dependency reuse | `PASS`: SHA-256 `B77E2E22177D2DA040AD16B9CAAB8E0CB14B53B3F959BAD4DA5B77726D2F7C82` matched the linked checkout | +| `tsc -p artifacts/a11oy/tsconfig.json --noEmit` | `PASS` | +| `tsc -p packages/omnia-shell/tsconfig.json --noEmit` | `BLOCKED`: existing package config omits DOM globals and the linked checkout cannot resolve `lucide-react`; the changed provider passed through the A11oy compile path | +| `node --test artifacts/a11oy/test/series-a-contract.test.mjs` | `PASS`: 7/7 | +| Biome lint, changed A11oy production modules | `PASS`: no warnings | +| React best-practices review | `PASS`: no critical issue in the changed components | +| `vite build --configLoader runner` | `PASS`: 3,342 modules transformed | +| Repository route smoke, A11oy slice | `PASS`: 18/18, including both new/compatible routes | +| Repository route smoke, global result | `BLOCKED`: 60 routes from five intentionally unstarted artifacts were unreachable | +| Preview `HEAD /a11oy/start` | `PASS`: HTTP 200 with configured security headers | +| Browser matrix | `PASS`: 320/390/768/1366/1728; six tabs/panels; keyboard contract; no overflow, clipping, undersized target, app error, overlay, or `/api` request | +| `/a11oy/investor-demo` compatibility | `PASS`: HTTP 200 and canonical Series A heading | +| Direct image review | `PASS`: 320, 390, and 1366 inspected; no capture stitching artifact in final images | +| `git diff --check` | `PASS` | + +The fresh target did not receive a secret or network package install. Its partial `node_modules` +directory was preserved as `node_modules.partial-install-20260811`; local junctions reuse the +fully linked dependency tree of another checkout with the identical lockfile. Those junctions are +ignored local support state, not product source evidence. + +## Responsive and accessibility evidence + +The view implements semantic tabs with ArrowLeft, ArrowRight, Home, and End behavior; labelled +tab/tabpanel relationships; visible focus states; reduced-motion handling; 44-46 px interactive +targets; and 6-column, 3-column, and 1-column layouts. A focused Biome accessibility lint passes. + +A local Playwright/Chromium fallback captured the same running production bundle at 320, 390, 768, +1366, and 1728 CSS pixels after the in-app controller failed to initialize. At every width the +browser exercised all six tabs, the four keyboard transitions, all four loop phases, compatibility +routing, page overflow, navigation clipping, interaction target dimensions, console/page errors, +error overlays, and API requests. All checks passed. Direct image inspection at 320, 390, and 1366 +found a coherent hierarchy and repaired two issues before the final captures: a clipped 320 px nav +label and an unsupported live-operation footer claim. + +The sandbox denied the optional Google Fonts stylesheet. The capture fulfilled that stylesheet +with an empty CSS response and therefore verifies the source-declared system-font fallback, not +external font delivery. The five PNGs are cataloged in `audit/screenshot-catalog.md`. + +| Width | Pixels | SHA-256 | +|---:|---:|---| +| 320 | 320 x 5325 | `3FEEF96D2ABC2CCADB8AE117A37DEC9FB785EC794BD08EF7442A3111009AB84E` | +| 390 | 390 x 4967 | `4822BAE2B2B3C118CF8527078CA0742C363C92D3D3BF7A17D7F50210FD5F64BD` | +| 768 | 768 x 3077 | `EF5D1298D865F01BB4E8F64A932A323C97D66F4D978D4821A94D77D5E5826511` | +| 1366 | 1366 x 2691 | `E2EBA6DCC1293ACFF47957AC68647DA1D18A66B15F07B49373F2D6D82DE14547` | +| 1728 | 1728 x 2728 | `C4B9C902FCBAFA30B4F0F887098056751EBA9D23622DB15799962518D628CD3B` | + +## Residuals and promotion gates + +1. Implement or deliberately retire the GraphQL client contract only after a real server resolver, + authentication boundary, tests, and runtime evidence exist. +2. Run the full root workspace graph in a clean dependency environment; focused A11oy checks do + not represent all 202 workspace projects. +3. Preserve normal signed commit, DCO, hosted CI, independent review, protected merge, deployed + readback, and exact-revision receipt gates. +4. The legacy `InvestorDemo.tsx` file remains in source but is no longer registered as the route + target; it should be removed or rewritten in a separately reviewed cleanup only if no other + consumer is found. +5. The Omnia and GraphQL server endpoints remain absent at this revision. Their clients must stay + unavailable until real authenticated routes and runtime evidence exist. + +## Non-claims + +This packet does not claim a pushed branch update, PR review, protected merge, deployment, +production operation, live data, live GraphQL, connector execution, customer use, revenue, +compliance, ROI, model superiority, or independent runtime witness. It proves only the local source +and local checks recorded above. diff --git a/audit/screenshot-catalog.md b/audit/screenshot-catalog.md index 3f15c76c0..20aa46197 100644 --- a/audit/screenshot-catalog.md +++ b/audit/screenshot-catalog.md @@ -632,6 +632,23 @@ Artifact `public/` and `dist/public/` directories contain static assets embedded --- +## P0 Series A local successor UI evidence - 2026-08-11 + +| Filename | Route | Width | Capture date | Captured by | Workcell | Proof level | Status | Notes | +|----------|-------|------:|--------------|-------------|----------|-------------|--------|-------| +| `audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-320.png` | `http://127.0.0.1:4128/a11oy/start` | 320 | 2026-08-11 | Codex | `P0-SERIES-A-PRODUCT-WIRING-20260811` | DEMONSTRATION/LOCAL_SOURCE | local candidate | Six views, truth states, 2x2 mobile nav, and system-font fallback visible; SHA-256 `3FEEF96D2ABC2CCADB8AE117A37DEC9FB785EC794BD08EF7442A3111009AB84E`. | +| `audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-390.png` | `http://127.0.0.1:4128/a11oy/start` | 390 | 2026-08-11 | Codex | `P0-SERIES-A-PRODUCT-WIRING-20260811` | DEMONSTRATION/LOCAL_SOURCE | local candidate | Narrow mobile composition; SHA-256 `4822BAE2B2B3C118CF8527078CA0742C363C92D3D3BF7A17D7F50210FD5F64BD`. | +| `audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-768.png` | `http://127.0.0.1:4128/a11oy/start` | 768 | 2026-08-11 | Codex | `P0-SERIES-A-PRODUCT-WIRING-20260811` | DEMONSTRATION/LOCAL_SOURCE | local candidate | Tablet composition; SHA-256 `EF5D1298D865F01BB4E8F64A932A323C97D66F4D978D4821A94D77D5E5826511`. | +| `audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-1366.png` | `http://127.0.0.1:4128/a11oy/start` | 1366 | 2026-08-11 | Codex | `P0-SERIES-A-PRODUCT-WIRING-20260811` | DEMONSTRATION/LOCAL_SOURCE | local candidate | Laptop/desktop composition; SHA-256 `E2EBA6DCC1293ACFF47957AC68647DA1D18A66B15F07B49373F2D6D82DE14547`. | +| `audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-1728.png` | `http://127.0.0.1:4128/a11oy/start` | 1728 | 2026-08-11 | Codex | `P0-SERIES-A-PRODUCT-WIRING-20260811` | DEMONSTRATION/LOCAL_SOURCE | local candidate | Wide-desktop composition; SHA-256 `C4B9C902FCBAFA30B4F0F887098056751EBA9D23622DB15799962518D628CD3B`. | + +The browser sandbox denied the optional Google Fonts request. These captures fulfilled that +stylesheet with empty CSS and prove the declared system-font fallback, not external font delivery. +They prove local layout and claim presentation only; they do not prove merge, deployment, +production operation, customer data, or live service parity. + +--- + ## Series A W1 truth-lock UI evidence — 2026-07-26 | Filename | Route | Surface | Capture date | Captured by | Workcell | Proof level | Status | Notes | diff --git a/audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-1366.png b/audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-1366.png new file mode 100644 index 000000000..f7b9c88df Binary files /dev/null and b/audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-1366.png differ diff --git a/audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-1728.png b/audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-1728.png new file mode 100644 index 000000000..cdbc9ceaf Binary files /dev/null and b/audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-1728.png differ diff --git a/audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-320.png b/audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-320.png new file mode 100644 index 000000000..282cc38bc Binary files /dev/null and b/audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-320.png differ diff --git a/audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-390.png b/audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-390.png new file mode 100644 index 000000000..f443f6d76 Binary files /dev/null and b/audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-390.png differ diff --git a/audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-768.png b/audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-768.png new file mode 100644 index 000000000..b52ad3f97 Binary files /dev/null and b/audit/screenshots/series-a-local-2026-08-11/a11oy-series-a-768.png differ diff --git a/config/public-surfaces.json b/config/public-surfaces.json index d01904e68..e47a94de6 100644 --- a/config/public-surfaces.json +++ b/config/public-surfaces.json @@ -1,586 +1,35 @@ { "schema": "szl.public-surfaces.registry/v1", - "observed_at": "2026-08-11T08:36:44.786Z", + "observed_at": "2026-08-11T05:37:17.898Z", "surfaces": [ - { - "id": "a11oy-front-door", - "name": "SZL Holdings and A11oy front door", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "MIXED", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "a11oy_landing.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-product-introduction", - "name": "A11oy product introduction", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "MIXED", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/a11oy/", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "a11oy_landing.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/a11oy/" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-console", - "name": "A11oy operator console", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER", "OPERATOR"], - "mode": "MIXED", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/console", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "console/index.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/console" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-docs", - "name": "A11oy public documentation", - "kind": "WEB", - "audience": ["DEVELOPER", "INVESTOR"], - "mode": "DOCUMENTATION", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/docs", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "console/docs.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/docs" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-trust-center", - "name": "A11oy trust center", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "MIXED", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/trust", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "web/trust.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/trust" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-receipt-verifier", - "name": "A11oy public receipt verifier", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER", "OPERATOR"], - "mode": "LIVE", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/verify", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "pages/verify.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/verify" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-ecosystem-atlas", - "name": "SZL ecosystem atlas", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "MIXED", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/ecosystem", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "pages/ecosystem.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/ecosystem" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-observability", - "name": "A11oy observability surface", - "kind": "WEB", - "audience": ["DEVELOPER", "OPERATOR", "INVESTOR"], - "mode": "MIXED", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/observability", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "pages/observability.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/observability" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-wires", - "name": "A11oy cross-organ wires", - "kind": "WEB", - "audience": ["DEVELOPER", "OPERATOR", "INVESTOR"], - "mode": "MIXED", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/wires", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "pages/wires.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/wires" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-spaces-registry", - "name": "Hugging Face Spaces registry", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "MIXED", - "availability": "REACHABLE", - "canonical_url": "https://a-11-oy.com/spaces", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "szl_spaces_surface.py", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a-11-oy.com/spaces" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "killinchu-public-console", - "name": "Killinchu public console", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER", "OPERATOR"], - "mode": "MIXED", - "availability": "REDIRECTED", - "canonical_url": "https://a-11-oy.com/killinchu", - "source_owner": { - "repository": "szl-holdings/killinchu", - "path": "web/console.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://szlholdings-killinchu.hf.space/" - }, - "note": "The full public-surface sweep observed the approved redirect and final HTTP 200 at the Killinchu Space; this records route reachability only, not aggregate Killinchu health or source parity." - }, - { - "id": "a11oy-net-thesis", - "name": "A11oy technical thesis", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "DOCUMENTATION", - "availability": "REACHABLE", - "canonical_url": "https://a11oy.net/", - "source_owner": { - "repository": "szl-holdings/a11oy-net", - "path": "index.html", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a11oy.net/" - }, - "note": "Static technical thesis is reachable; it does not provide the separately missing chat or code applications." - }, - { - "id": "a11oy-build-info-api", - "name": "A11oy source-binding API", - "kind": "API", - "audience": ["DEVELOPER", "OPERATOR"], - "mode": "LIVE", - "availability": "REACHABLE", - "canonical_url": "https://szlholdings-a11oy.hf.space/api/build-info", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "serve.py", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://szlholdings-a11oy.hf.space/api/build-info" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "a11oy-readiness-api", - "name": "A11oy readiness API", - "kind": "API", - "audience": ["DEVELOPER", "OPERATOR"], - "mode": "LIVE", - "availability": "REACHABLE", - "canonical_url": "https://szlholdings-a11oy.hf.space/readyz", - "source_owner": { - "repository": "szl-holdings/a11oy", - "path": "serve.py", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://szlholdings-a11oy.hf.space/readyz" - }, - "note": "Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity." - }, - { - "id": "killinchu-build-info-api", - "name": "Killinchu source-binding API", - "kind": "API", - "audience": ["DEVELOPER", "OPERATOR"], - "mode": "LIVE", - "availability": "REACHABLE", - "canonical_url": "https://szlholdings-killinchu.hf.space/api/build-info", - "source_owner": { - "repository": "szl-holdings/killinchu", - "path": "serve.py", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://szlholdings-killinchu.hf.space/api/build-info" - }, - "note": "A bounded JSON body read reported OBSERVED source 859e26cf27164b38c4e289e40a751ce80d403368, matching protected Killinchu main, and OIDC attestation 39971795 for manifest sha256:7730a0334485ed3ca4754b38bd288ac004258918f0ede46719e72ae2a2ede960; this source-binding endpoint does not assert or infer the separate HF runtime content revision." - }, - { - "id": "killinchu-readiness-api", - "name": "Killinchu readiness API", - "kind": "API", - "audience": ["DEVELOPER", "OPERATOR"], - "mode": "LIVE", - "availability": "REACHABLE", - "canonical_url": "https://szlholdings-killinchu.hf.space/readyz", - "source_owner": { - "repository": "szl-holdings/killinchu", - "path": "serve.py", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://szlholdings-killinchu.hf.space/readyz" - }, - "note": "A bounded JSON body read reported ready, durable Khipu storage, an intact Khipu chain, and Doctrine v11; this scoped witness does not establish aggregate Killinchu API or alert-channel health." - }, - { - "id": "legacy-lyte-route", - "name": "Historical KORA route claim", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a-11-oy.com/lyte/", - "source_owner": { - "repository": "szl-holdings/platform", - "path": "PRODUCT-SURFACES.md", - "role": "CLAIM_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a-11-oy.com/lyte/" - }, - "note": "Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made." - }, - { - "id": "legacy-aegis-route", - "name": "Historical PARAGON route claim", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a-11-oy.com/aegis/", - "source_owner": { - "repository": "szl-holdings/platform", - "path": "PRODUCT-SURFACES.md", - "role": "CLAIM_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a-11-oy.com/aegis/" - }, - "note": "Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made." - }, - { - "id": "legacy-vessels-route", - "name": "Historical SEXTANT route claim", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a-11-oy.com/vessels/", - "source_owner": { - "repository": "szl-holdings/platform", - "path": "PRODUCT-SURFACES.md", - "role": "CLAIM_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a-11-oy.com/vessels/" - }, - "note": "Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made." - }, - { - "id": "legacy-terra-route", - "name": "Historical DOMAINE route claim", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a-11-oy.com/terra/", - "source_owner": { - "repository": "szl-holdings/platform", - "path": "PRODUCT-SURFACES.md", - "role": "CLAIM_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a-11-oy.com/terra/" - }, - "note": "Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made." - }, - { - "id": "legacy-counsel-route", - "name": "Historical Counsel route claim", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a-11-oy.com/counsel/", - "source_owner": { - "repository": "szl-holdings/platform", - "path": "PRODUCT-SURFACES.md", - "role": "CLAIM_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a-11-oy.com/counsel/" - }, - "note": "Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made." - }, - { - "id": "legacy-carlota-jo-route", - "name": "Historical Carlota Jo route claim", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a-11-oy.com/carlota-jo/", - "source_owner": { - "repository": "szl-holdings/platform", - "path": "PRODUCT-SURFACES.md", - "role": "CLAIM_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a-11-oy.com/carlota-jo/" - }, - "note": "Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made." - }, - { - "id": "legacy-command-route", - "name": "Historical Command route claim", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a-11-oy.com/command/", - "source_owner": { - "repository": "szl-holdings/platform", - "path": "PRODUCT-SURFACES.md", - "role": "CLAIM_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a-11-oy.com/command/" - }, - "note": "Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made." - }, - { - "id": "legacy-pulse-route", - "name": "Historical LUMINA route claim", - "kind": "WEB", - "audience": ["INVESTOR", "DEVELOPER"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a-11-oy.com/pulse/", - "source_owner": { - "repository": "szl-holdings/platform", - "path": "PRODUCT-SURFACES.md", - "role": "CLAIM_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a-11-oy.com/pulse/" - }, - "note": "Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made." - }, - { - "id": "a11oy-net-chat-gap", - "name": "A11oy.net chat route", - "kind": "WEB", - "audience": ["DEVELOPER", "INVESTOR"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a11oy.net/chat", - "source_owner": { - "repository": "szl-holdings/a11oy-net", - "path": "index.html", - "role": "REMEDIATION_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a11oy.net/chat" - }, - "note": "Route is not implemented on the current static site and is excluded from the measured public-surface count." - }, - { - "id": "a11oy-net-code-gap", - "name": "A11oy.net code route", - "kind": "WEB", - "audience": ["DEVELOPER", "INVESTOR"], - "mode": "UNAVAILABLE", - "availability": "UNAVAILABLE", - "canonical_url": "https://a11oy.net/code", - "source_owner": { - "repository": "szl-holdings/a11oy-net", - "path": "index.html", - "role": "REMEDIATION_OWNER" - }, - "observation": { - "method": "GET", - "status": 404, - "final_url": "https://a11oy.net/code" - }, - "note": "Route is not implemented on the current static site and is excluded from the measured public-surface count." - }, - { - "id": "a11oy-net-robots-gap", - "name": "A11oy.net robots metadata", - "kind": "METADATA", - "audience": ["MACHINE"], - "mode": "DOCUMENTATION", - "availability": "REACHABLE", - "canonical_url": "https://a11oy.net/robots.txt", - "source_owner": { - "repository": "szl-holdings/a11oy-net", - "path": "robots.txt", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a11oy.net/robots.txt" - }, - "note": "Machine-readable crawler policy is reachable and points to the canonical sitemap; it is not a customer-facing product surface." - }, - { - "id": "a11oy-net-sitemap-gap", - "name": "A11oy.net sitemap metadata", - "kind": "METADATA", - "audience": ["MACHINE"], - "mode": "DOCUMENTATION", - "availability": "REACHABLE", - "canonical_url": "https://a11oy.net/sitemap.xml", - "source_owner": { - "repository": "szl-holdings/a11oy-net", - "path": "sitemap.xml", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a11oy.net/sitemap.xml" - }, - "note": "Machine-readable sitemap metadata is reachable and lists the public thesis; it is not a customer-facing product surface." - }, - { - "id": "a11oy-net-webmanifest-gap", - "name": "A11oy.net web app manifest", - "kind": "METADATA", - "audience": ["MACHINE"], - "mode": "DOCUMENTATION", - "availability": "REACHABLE", - "canonical_url": "https://a11oy.net/manifest.webmanifest", - "source_owner": { - "repository": "szl-holdings/a11oy-net", - "path": "manifest.webmanifest", - "role": "RUNTIME_OWNER" - }, - "observation": { - "method": "GET", - "status": 200, - "final_url": "https://a11oy.net/manifest.webmanifest" - }, - "note": "A11oy.net manifest is currently reachable as JSON metadata and tracked with explicit metadata validation." - } + {"id":"a11oy-front-door","name":"SZL Holdings and A11oy front door","kind":"WEB","audience":["INVESTOR","DEVELOPER"],"mode":"MIXED","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/","source_owner":{"repository":"szl-holdings/a11oy","path":"a11oy_landing.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-product-introduction","name":"A11oy product introduction","kind":"WEB","audience":["INVESTOR","DEVELOPER"],"mode":"MIXED","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/a11oy/","source_owner":{"repository":"szl-holdings/a11oy","path":"a11oy_landing.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/a11oy/"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-console","name":"A11oy operator console","kind":"WEB","audience":["INVESTOR","DEVELOPER","OPERATOR"],"mode":"MIXED","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/console","source_owner":{"repository":"szl-holdings/a11oy","path":"console/index.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/console"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-docs","name":"A11oy public documentation","kind":"WEB","audience":["DEVELOPER","INVESTOR"],"mode":"DOCUMENTATION","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/docs","source_owner":{"repository":"szl-holdings/a11oy","path":"console/docs.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/docs"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-trust-center","name":"A11oy trust center","kind":"WEB","audience":["INVESTOR","DEVELOPER"],"mode":"MIXED","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/trust","source_owner":{"repository":"szl-holdings/a11oy","path":"web/trust.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/trust"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-receipt-verifier","name":"A11oy public receipt verifier","kind":"WEB","audience":["INVESTOR","DEVELOPER","OPERATOR"],"mode":"LIVE","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/verify","source_owner":{"repository":"szl-holdings/a11oy","path":"pages/verify.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/verify"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-ecosystem-atlas","name":"SZL ecosystem atlas","kind":"WEB","audience":["INVESTOR","DEVELOPER"],"mode":"MIXED","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/ecosystem","source_owner":{"repository":"szl-holdings/a11oy","path":"pages/ecosystem.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/ecosystem"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-observability","name":"A11oy observability surface","kind":"WEB","audience":["DEVELOPER","OPERATOR","INVESTOR"],"mode":"MIXED","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/observability","source_owner":{"repository":"szl-holdings/a11oy","path":"pages/observability.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/observability"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-wires","name":"A11oy cross-organ wires","kind":"WEB","audience":["DEVELOPER","OPERATOR","INVESTOR"],"mode":"MIXED","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/wires","source_owner":{"repository":"szl-holdings/a11oy","path":"pages/wires.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/wires"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-spaces-registry","name":"Hugging Face Spaces registry","kind":"WEB","audience":["INVESTOR","DEVELOPER"],"mode":"MIXED","availability":"REACHABLE","canonical_url":"https://a-11-oy.com/spaces","source_owner":{"repository":"szl-holdings/a11oy","path":"szl_spaces_surface.py","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a-11-oy.com/spaces"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"killinchu-public-console","name":"Killinchu public console","kind":"WEB","audience":["INVESTOR","DEVELOPER","OPERATOR"],"mode":"MIXED","availability":"REDIRECTED","canonical_url":"https://a-11-oy.com/killinchu","source_owner":{"repository":"szl-holdings/killinchu","path":"web/console.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://szlholdings-killinchu.hf.space/"},"note":"Measured HTTP 200 at the approved redirected Killinchu Space target; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-net-thesis","name":"A11oy technical thesis","kind":"WEB","audience":["INVESTOR","DEVELOPER"],"mode":"DOCUMENTATION","availability":"REACHABLE","canonical_url":"https://a11oy.net/","source_owner":{"repository":"szl-holdings/a11oy-net","path":"index.html","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a11oy.net/"},"note":"Static technical thesis is reachable; it does not provide the separately missing chat or code applications."}, + {"id":"a11oy-build-info-api","name":"A11oy source-binding API","kind":"API","audience":["DEVELOPER","OPERATOR"],"mode":"LIVE","availability":"REACHABLE","canonical_url":"https://szlholdings-a11oy.hf.space/api/build-info","source_owner":{"repository":"szl-holdings/a11oy","path":"serve.py","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://szlholdings-a11oy.hf.space/api/build-info"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"a11oy-readiness-api","name":"A11oy readiness API","kind":"API","audience":["DEVELOPER","OPERATOR"],"mode":"LIVE","availability":"REACHABLE","canonical_url":"https://szlholdings-a11oy.hf.space/readyz","source_owner":{"repository":"szl-holdings/a11oy","path":"serve.py","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://szlholdings-a11oy.hf.space/readyz"},"note":"Measured HTTP 200 at the canonical route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"killinchu-build-info-api","name":"Killinchu source-binding API","kind":"API","audience":["DEVELOPER","OPERATOR"],"mode":"LIVE","availability":"REACHABLE","canonical_url":"https://szlholdings-killinchu.hf.space/api/build-info","source_owner":{"repository":"szl-holdings/killinchu","path":"serve.py","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://szlholdings-killinchu.hf.space/api/build-info"},"note":"Measured HTTP 200 at the approved Killinchu build-info route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"killinchu-readiness-api","name":"Killinchu readiness API","kind":"API","audience":["DEVELOPER","OPERATOR"],"mode":"LIVE","availability":"REACHABLE","canonical_url":"https://szlholdings-killinchu.hf.space/readyz","source_owner":{"repository":"szl-holdings/killinchu","path":"serve.py","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://szlholdings-killinchu.hf.space/readyz"},"note":"Measured HTTP 200 at the approved Killinchu readiness route; reachability does not assert payload correctness, deployment provenance, or exact source parity."}, + {"id":"legacy-lyte-route","name":"Historical KORA route claim","kind":"WEB","audience":["INVESTOR","DEVELOPER"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a-11-oy.com/lyte/","source_owner":{"repository":"szl-holdings/platform","path":"PRODUCT-SURFACES.md","role":"CLAIM_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a-11-oy.com/lyte/"},"note":"Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made."}, + {"id":"legacy-aegis-route","name":"Historical PARAGON route claim","kind":"WEB","audience":["INVESTOR","DEVELOPER"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a-11-oy.com/aegis/","source_owner":{"repository":"szl-holdings/platform","path":"PRODUCT-SURFACES.md","role":"CLAIM_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a-11-oy.com/aegis/"},"note":"Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made."}, + {"id":"legacy-vessels-route","name":"Historical SEXTANT route claim","kind":"WEB","audience":["INVESTOR","DEVELOPER"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a-11-oy.com/vessels/","source_owner":{"repository":"szl-holdings/platform","path":"PRODUCT-SURFACES.md","role":"CLAIM_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a-11-oy.com/vessels/"},"note":"Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made."}, + {"id":"legacy-terra-route","name":"Historical DOMAINE route claim","kind":"WEB","audience":["INVESTOR","DEVELOPER"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a-11-oy.com/terra/","source_owner":{"repository":"szl-holdings/platform","path":"PRODUCT-SURFACES.md","role":"CLAIM_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a-11-oy.com/terra/"},"note":"Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made."}, + {"id":"legacy-counsel-route","name":"Historical Counsel route claim","kind":"WEB","audience":["INVESTOR","DEVELOPER"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a-11-oy.com/counsel/","source_owner":{"repository":"szl-holdings/platform","path":"PRODUCT-SURFACES.md","role":"CLAIM_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a-11-oy.com/counsel/"},"note":"Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made."}, + {"id":"legacy-carlota-jo-route","name":"Historical Carlota Jo route claim","kind":"WEB","audience":["INVESTOR","DEVELOPER"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a-11-oy.com/carlota-jo/","source_owner":{"repository":"szl-holdings/platform","path":"PRODUCT-SURFACES.md","role":"CLAIM_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a-11-oy.com/carlota-jo/"},"note":"Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made."}, + {"id":"legacy-command-route","name":"Historical Command route claim","kind":"WEB","audience":["INVESTOR","DEVELOPER"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a-11-oy.com/command/","source_owner":{"repository":"szl-holdings/platform","path":"PRODUCT-SURFACES.md","role":"CLAIM_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a-11-oy.com/command/"},"note":"Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made."}, + {"id":"legacy-pulse-route","name":"Historical LUMINA route claim","kind":"WEB","audience":["INVESTOR","DEVELOPER"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a-11-oy.com/pulse/","source_owner":{"repository":"szl-holdings/platform","path":"PRODUCT-SURFACES.md","role":"CLAIM_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a-11-oy.com/pulse/"},"note":"Measured HTTP 404 at this historical route; it remains unavailable and no product-surface claim is made."}, + {"id":"a11oy-net-chat-gap","name":"A11oy.net chat route","kind":"WEB","audience":["DEVELOPER","INVESTOR"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a11oy.net/chat","source_owner":{"repository":"szl-holdings/a11oy-net","path":"index.html","role":"REMEDIATION_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a11oy.net/chat"},"note":"Route is not implemented on the current static site and is excluded from the measured public-surface count."}, + {"id":"a11oy-net-code-gap","name":"A11oy.net code route","kind":"WEB","audience":["DEVELOPER","INVESTOR"],"mode":"UNAVAILABLE","availability":"UNAVAILABLE","canonical_url":"https://a11oy.net/code","source_owner":{"repository":"szl-holdings/a11oy-net","path":"index.html","role":"REMEDIATION_OWNER"},"observation":{"method":"GET","status":404,"final_url":"https://a11oy.net/code"},"note":"Route is not implemented on the current static site and is excluded from the measured public-surface count."}, + {"id":"a11oy-net-robots-gap","name":"A11oy.net robots metadata","kind":"METADATA","audience":["MACHINE"],"mode":"DOCUMENTATION","availability":"REACHABLE","canonical_url":"https://a11oy.net/robots.txt","source_owner":{"repository":"szl-holdings/a11oy-net","path":"robots.txt","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a11oy.net/robots.txt"},"note":"Machine-readable crawler policy is reachable and points to the canonical sitemap; it is not a customer-facing product surface."}, + {"id":"a11oy-net-sitemap-gap","name":"A11oy.net sitemap metadata","kind":"METADATA","audience":["MACHINE"],"mode":"DOCUMENTATION","availability":"REACHABLE","canonical_url":"https://a11oy.net/sitemap.xml","source_owner":{"repository":"szl-holdings/a11oy-net","path":"sitemap.xml","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a11oy.net/sitemap.xml"},"note":"Machine-readable sitemap metadata is reachable and lists the public thesis; it is not a customer-facing product surface."}, + {"id":"a11oy-net-webmanifest-gap","name":"A11oy.net web app manifest","kind":"METADATA","audience":["MACHINE"],"mode":"DOCUMENTATION","availability":"REACHABLE","canonical_url":"https://a11oy.net/manifest.webmanifest","source_owner":{"repository":"szl-holdings/a11oy-net","path":"manifest.webmanifest","role":"RUNTIME_OWNER"},"observation":{"method":"GET","status":200,"final_url":"https://a11oy.net/manifest.webmanifest"},"note":"A11oy.net manifest is currently reachable as JSON metadata and tracked with explicit metadata validation."} ] } diff --git a/docs/operations/known-gaps.md b/docs/operations/known-gaps.md index 1854e5464..883161c64 100644 --- a/docs/operations/known-gaps.md +++ b/docs/operations/known-gaps.md @@ -36,6 +36,33 @@ the protected PR/main check. An expired observation is remediated by re-observin target, updating the registry evidence, regenerating the deterministic artifacts, reviewing the diff, and rerunning the freshness gate. +### 2026-08-11 local Series A React candidate + +An uncommitted local candidate based on platform PR #584 head +`bc40b1c6aec8a44a8a6928c25a21de9aa91e76b7` adds one investor-oriented A11oy entry point at +`/a11oy/start`. It organizes cyber security, finance, data governance, enterprise operations, +real estate, and legal around the same `Observe -> Gate -> Act -> Prove` evidence sequence. The +legacy `/a11oy/investor-demo` route resolves to the same truth-safe view so it cannot expose the +older hard-coded investor claims. + +This is source and local-build evidence only. The React surface is labelled `AVAILABLE`, seeded +decision paths are `DEMO`, external execution is `BLOCKED`, and the declared GraphQL runtime is +`UNAVAILABLE`. No server resolver for the client-declared `/api/graphql` or `/api/graphql/ws` +contract was found in this revision, so the candidate does not fabricate a connection or infer a +backend from a client declaration. It also makes no merged, deployed, production, customer, +revenue, compliance, or live-data claim. + +Focused contract tests, A11oy TypeScript compilation, and the A11oy production bundle pass +locally. The running preview returned HTTP 200 with the configured security headers. A local +Playwright fallback captured and inspected the page at 320, 390, 768, 1366, and 1728 CSS pixels. +All five widths rendered the six tabs and panels without document overflow, clipped navigation, +undersized interaction targets, application console errors, page errors, error overlays, or +undeclared API calls. The browser sandbox could not retrieve the optional Google Fonts stylesheet, +so capture fulfilled that stylesheet with an empty response and exercised the declared system-font +fallback; the images do not prove external font availability or a deployed runtime. Exact local +evidence and remaining limits are recorded in +[`audit/P0_SERIES_A_PRODUCT_WIRING_LOCAL_SUCCESSOR_PROOF_2026-08-11.md`](../../audit/P0_SERIES_A_PRODUCT_WIRING_LOCAL_SUCCESSOR_PROOF_2026-08-11.md). + --- ## 2026-07-29 Live Frontier Preflight diff --git a/packages/a11oy-runtime/src/data/workcells.ts b/packages/a11oy-runtime/src/data/workcells.ts index 763a8a389..1241712bc 100644 --- a/packages/a11oy-runtime/src/data/workcells.ts +++ b/packages/a11oy-runtime/src/data/workcells.ts @@ -1,21 +1,42 @@ import type { Workcell } from '../types/index.js'; -export interface UnavailableWorkcellSource { - readonly state: 'UNAVAILABLE'; +export type OperationalSourceState = + | 'REAL' + | 'DEMO' + | 'UNAVAILABLE' + | 'DEGRADED' + | 'BLOCKED' + | 'ROADMAP'; + +interface OperationalWorkcellSourceBase { + readonly state: OperationalSourceState; readonly records: readonly Workcell[]; + readonly reason: string; +} + +export interface ObservedWorkcellSource extends OperationalWorkcellSourceBase { + readonly state: 'REAL' | 'DEMO' | 'DEGRADED'; + readonly source: string; + readonly observedAt: string; +} + +export interface EmptyWorkcellSource extends OperationalWorkcellSourceBase { + readonly state: 'UNAVAILABLE' | 'BLOCKED' | 'ROADMAP'; + readonly records: readonly []; readonly source: null; readonly observedAt: null; - readonly reason: string; } +export type OperationalWorkcellSource = ObservedWorkcellSource | EmptyWorkcellSource; + /** * Production workcells must come from a current, authenticated operational * source. The repository does not currently provide one, so this registry * fails closed instead of exporting deterministic sample executions. */ -export const OPERATIONAL_WORKCELLS: readonly Workcell[] = Object.freeze([]); +export const OPERATIONAL_WORKCELLS: readonly [] = Object.freeze([]) as readonly []; -export const WORKCELL_SOURCE: UnavailableWorkcellSource = Object.freeze({ +export const WORKCELL_SOURCE: EmptyWorkcellSource = Object.freeze({ state: 'UNAVAILABLE', records: OPERATIONAL_WORKCELLS, source: null, @@ -26,6 +47,6 @@ export const WORKCELL_SOURCE: UnavailableWorkcellSource = Object.freeze({ export const WORKCELL_MAP: Readonly> = Object.freeze({}); -export function getOperationalWorkcells(): UnavailableWorkcellSource { +export function getOperationalWorkcells(): OperationalWorkcellSource { return WORKCELL_SOURCE; } diff --git a/packages/a11oy-runtime/test/operational-source-state.test.ts b/packages/a11oy-runtime/test/operational-source-state.test.ts new file mode 100644 index 000000000..1f8fbdf22 --- /dev/null +++ b/packages/a11oy-runtime/test/operational-source-state.test.ts @@ -0,0 +1,40 @@ +import { describe, expect, it } from 'vitest'; +import { + OPERATIONAL_WORKCELLS, + WORKCELL_SOURCE, + getOperationalWorkcells, +} from '../src/index.js'; +import type { OperationalSourceState } from '../src/data/workcells.js'; + +const STATES: readonly OperationalSourceState[] = [ + 'REAL', + 'DEMO', + 'UNAVAILABLE', + 'DEGRADED', + 'BLOCKED', + 'ROADMAP', +] as const; + +describe('operational workcell source truth states', () => { + it('keeps the complete six-state vocabulary explicit', () => { + expect(STATES).toEqual([ + 'REAL', + 'DEMO', + 'UNAVAILABLE', + 'DEGRADED', + 'BLOCKED', + 'ROADMAP', + ]); + }); + + it('fails closed when no authenticated operational source exists', () => { + expect(WORKCELL_SOURCE.state).toBe('UNAVAILABLE'); + expect(WORKCELL_SOURCE.source).toBeNull(); + expect(WORKCELL_SOURCE.observedAt).toBeNull(); + expect(WORKCELL_SOURCE.records).toBe(OPERATIONAL_WORKCELLS); + expect(OPERATIONAL_WORKCELLS).toHaveLength(0); + expect(Object.isFrozen(OPERATIONAL_WORKCELLS)).toBe(true); + expect(Object.isFrozen(WORKCELL_SOURCE)).toBe(true); + expect(getOperationalWorkcells()).toBe(WORKCELL_SOURCE); + }); +}); diff --git a/packages/omnia-shell/src/OmniaShellProvider.tsx b/packages/omnia-shell/src/OmniaShellProvider.tsx index 611882178..c2db4b01d 100644 --- a/packages/omnia-shell/src/OmniaShellProvider.tsx +++ b/packages/omnia-shell/src/OmniaShellProvider.tsx @@ -1,4 +1,5 @@ -import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react'; +import type React from 'react'; +import { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react'; import type { OmniaNotification, OmniaShellConfig, @@ -121,6 +122,7 @@ export function OmniaShellProvider({ }, [commandPaletteOpen]); useEffect(() => { + if (config.networkState === 'UNAVAILABLE') return; if (adoptionBeaconFired.current) return; adoptionBeaconFired.current = true; const apiBase = config.apiBase ?? '/api'; @@ -134,9 +136,10 @@ export function OmniaShellProvider({ timestamp: new Date().toISOString(), }), }).catch(() => {}); - }, [config.artifactId, config.apiBase, config.shellVersion]); + }, [config.artifactId, config.apiBase, config.networkState, config.shellVersion]); useEffect(() => { + if (config.networkState === 'UNAVAILABLE') return; const apiBase = config.apiBase ?? '/api'; const poll = async () => { try { @@ -156,7 +159,7 @@ export function OmniaShellProvider({ }; const timer = setInterval(poll, 30_000); return () => clearInterval(timer); - }, [config.artifactId, config.apiBase]); + }, [config.artifactId, config.apiBase, config.networkState]); const value: OmniaShellContextValue = { config: { ...config, shellVersion: config.shellVersion ?? OMNIA_SHELL_VERSION }, diff --git a/packages/omnia-shell/src/types.ts b/packages/omnia-shell/src/types.ts index f82b44d20..44304e00f 100644 --- a/packages/omnia-shell/src/types.ts +++ b/packages/omnia-shell/src/types.ts @@ -155,6 +155,7 @@ export interface OmniaShellConfig { accentColor: string; apiBase?: string; shellVersion?: string; + networkState?: 'AVAILABLE' | 'UNAVAILABLE'; } export interface OmniaShellContextValue { diff --git a/scripts/qa/smoke-routes.js b/scripts/qa/smoke-routes.js index a6d1edc0e..9e1c9d66e 100644 --- a/scripts/qa/smoke-routes.js +++ b/scripts/qa/smoke-routes.js @@ -167,6 +167,8 @@ const WEB_DOMAIN_CONFIGS = [ baseUrl: BASE_URL ? `${BASE_URL}` : A11OY_URL, routes: [ '/a11oy/', + '/a11oy/start', + '/a11oy/investor-demo', '/a11oy/now', '/a11oy/recommendations', '/a11oy/brief',