{
  "version": 1,
  "repository": "Knuckles-Team/overstory",
  "revision": "a23286cefe615aa5ec335414865f43f274b69141",
  "captured_at": "2026-10-25T22:17:05.001356+00:00",
  "records": [
    {
      "id": "WEBUI-DASH",
      "kind": "spec",
      "parent": null,
      "source": "specs/agent-dashboards/status.json",
      "title": "WEBUI-DASH \u2014 Overstory Studio",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "document": "specs/agent-dashboards/spec.md",
      "component": "Overstory Studio",
      "code_refs": [
        {
          "declared_in": "specs/agent-dashboards/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/components/dashboards/ChartSvg.tsx",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/components/dashboards/ChartSvg.tsx"
        },
        {
          "declared_in": "specs/agent-dashboards/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/atlas/adapters/uql.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/atlas/adapters/uql.ts"
        },
        {
          "declared_in": "specs/agent-dashboards/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/nav-registry.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/nav-registry.ts"
        },
        {
          "declared_in": "specs/agent-dashboards/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/webmcp/atlas.tsx",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/webmcp/atlas.tsx"
        },
        {
          "declared_in": "specs/agent-dashboards/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/webmcp/provider.tsx",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/webmcp/provider.tsx"
        },
        {
          "declared_in": "specs/agent-dashboards/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/webmcp/tools.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/webmcp/tools.ts"
        },
        {
          "declared_in": "specs/agent-dashboards/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "../../src/components/dashboards/DashboardsView.tsx",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/components/dashboards/DashboardsView.tsx"
        },
        {
          "declared_in": "specs/agent-dashboards/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "../../src/lib/dashboards/model.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/dashboards/model.ts"
        },
        {
          "declared_in": "specs/agent-dashboards/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "../../src/lib/dashboards/tools.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/dashboards/tools.ts"
        },
        {
          "declared_in": "specs/agent-dashboards/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "requirements.md",
          "repository": "Knuckles-Team/overstory",
          "role": "documentation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/agent-dashboards/requirements.md"
        },
        {
          "declared_in": "specs/agent-dashboards/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "status.json",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/agent-dashboards/status.json"
        }
      ],
      "relations": [
        {
          "declared_in": "specs/agent-dashboards/spec.md",
          "evidence": "external declaration; not verified",
          "kind": "references",
          "label": "ARBORA-OPS-R861",
          "repository": "Knuckles-Team/arbora",
          "url": "https://github.com/Knuckles-Team/arbora/blob/main/specs/hosted-api-operations/spec.md"
        },
        {
          "declared_in": "specs/agent-dashboards/spec.md",
          "evidence": "file exists; coverage not verified",
          "kind": "depends on",
          "label": "WEBUI-API",
          "repository": "Knuckles-Team/overstory",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/arbora-api-consumer/spec.md"
        },
        {
          "declared_in": "specs/agent-dashboards/spec.md",
          "evidence": "file exists; coverage not verified",
          "kind": "depends on",
          "label": "WEBUI-APPS",
          "repository": "Knuckles-Team/overstory",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/arbora-app-surface/spec.md"
        }
      ],
      "plan_diagrams": [],
      "unparsed_references": []
    },
    {
      "id": "WEBUI-DASH-R001",
      "kind": "requirement",
      "parent": "WEBUI-DASH",
      "source": "specs/agent-dashboards/status.json",
      "title": "Dashboard document model",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "fd405f9d0a6b"
      ],
      "verified_by": [
        "src/lib/dashboards/__tests__/model.test.ts:13"
      ],
      "parent_title": "WEBUI-DASH \u2014 Overstory Studio",
      "definition": "**Dashboard document model.** A dashboard is a declarative document with schema_version, id, title, revision, params and a grid of panels. Every edit raises the revision by 1. A 12-column grid bounds each panel. | `model.test.ts` passes.",
      "definition_source": "specs/agent-dashboards/requirements.md",
      "definition_line": 5
    },
    {
      "id": "WEBUI-DASH-R002",
      "kind": "requirement",
      "parent": "WEBUI-DASH",
      "source": "specs/agent-dashboards/status.json",
      "title": "Table, line, bar and KPI panels",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "fd405f9d0a6b"
      ],
      "verified_by": [
        "src/components/dashboards/__tests__/DashboardsView.test.tsx:42"
      ],
      "parent_title": "WEBUI-DASH \u2014 Overstory Studio",
      "definition": "**Table, line, bar and KPI panels.** A panel is a query plus one visualization. The browser renders table, line, bar and KPI panels from a row set. Each panel shows loading, empty, error and unavailable states. | `DashboardsView.test.tsx` passes.",
      "definition_source": "specs/agent-dashboards/requirements.md",
      "definition_line": 6
    },
    {
      "id": "WEBUI-DASH-R003",
      "kind": "requirement",
      "parent": "WEBUI-DASH",
      "source": "specs/agent-dashboards/status.json",
      "title": "Pie, map and graph panels (remaining)",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-DASH \u2014 Overstory Studio",
      "definition": "**Pie, map and graph panels (remaining).** The panel kinds pie, map and graph render from a row set. The map reads latitude and longitude columns. The graph reads source and target columns. | `PanelKinds.test.tsx` passes.",
      "definition_source": "specs/agent-dashboards/requirements.md",
      "definition_line": 7
    },
    {
      "id": "WEBUI-DASH-R004",
      "kind": "requirement",
      "parent": "WEBUI-DASH",
      "source": "specs/agent-dashboards/status.json",
      "title": "UQL panel queries through arbora",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "fd405f9d0a6b"
      ],
      "verified_by": [
        "src/lib/dashboards/__tests__/query.test.ts:7"
      ],
      "parent_title": "WEBUI-DASH \u2014 Overstory Studio",
      "definition": "**UQL panel queries through arbora.** A panel query of kind uql runs through the same governed graph query route as Understory. The browser never contacts a data source directly. Unsafe query text is refused before sending. | `query.test.ts` passes.",
      "definition_source": "specs/agent-dashboards/requirements.md",
      "definition_line": 8
    },
    {
      "id": "WEBUI-DASH-R005",
      "kind": "requirement",
      "parent": "WEBUI-DASH",
      "source": "specs/agent-dashboards/status.json",
      "title": "Natural-language, fleet.call and EG panel queries (remaining)",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-DASH \u2014 Overstory Studio",
      "definition": "**Natural-language, fleet.call and EG panel queries (remaining).** Panel query kinds nl, fleet-call and eg-op run through arbora served operations. Those are eg.query.NlQuery, fleet.call and named eg.query operations. Each kind validates its arguments. | `query-kinds.test.ts` passes.",
      "definition_source": "specs/agent-dashboards/requirements.md",
      "definition_line": 9
    },
    {
      "id": "WEBUI-DASH-R006",
      "kind": "requirement",
      "parent": "WEBUI-DASH",
      "source": "specs/agent-dashboards/status.json",
      "title": "Hand-built dashboards",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "fd405f9d0a6b"
      ],
      "verified_by": [
        "src/components/dashboards/__tests__/DashboardsView.test.tsx:42"
      ],
      "parent_title": "WEBUI-DASH \u2014 Overstory Studio",
      "definition": "**Hand-built dashboards.** A user creates a dashboard, adds, edits, moves and removes panels, and renames the dashboard in the UI. Every control works with the keyboard alone. | `DashboardsView.test.tsx` passes.",
      "definition_source": "specs/agent-dashboards/requirements.md",
      "definition_line": 10
    },
    {
      "id": "WEBUI-DASH-R007",
      "kind": "requirement",
      "parent": "WEBUI-DASH",
      "source": "specs/agent-dashboards/status.json",
      "title": "WebMCP dashboard tools",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "fd405f9d0a6b"
      ],
      "verified_by": [
        "src/lib/dashboards/__tests__/tools.test.ts:50"
      ],
      "parent_title": "WEBUI-DASH \u2014 Overstory Studio",
      "definition": "**WebMCP dashboard tools.** The Overstory Studio page registers seven WebMCP tools. The tools are create, add_panel, update_panel, remove_panel, set_layout, list_data_sources and preview_query. Each tool validates input and output against a strict schema. Results stay under 1,500 bytes. | `tools.test.ts` passes.",
      "definition_source": "specs/agent-dashboards/requirements.md",
      "definition_line": 11
    },
    {
      "id": "WEBUI-DASH-R008",
      "kind": "requirement",
      "parent": "WEBUI-DASH",
      "source": "specs/agent-dashboards/status.json",
      "title": "Visible and undoable agent edits",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "fd405f9d0a6b"
      ],
      "verified_by": [
        "src/lib/dashboards/__tests__/history.test.ts:5"
      ],
      "parent_title": "WEBUI-DASH \u2014 Overstory Studio",
      "definition": "**Visible and undoable agent edits.** Each agent edit appears in an activity log tagged agent. A user undoes and redoes any edit, agent or user, with the keyboard. | `history.test.ts` passes.",
      "definition_source": "specs/agent-dashboards/requirements.md",
      "definition_line": 12
    },
    {
      "id": "WEBUI-DASH-R009",
      "kind": "requirement",
      "parent": "WEBUI-DASH",
      "source": "specs/agent-dashboards/status.json",
      "title": "Confirmed destructive agent changes",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "fd405f9d0a6b"
      ],
      "verified_by": [
        "src/components/dashboards/__tests__/DashboardsView.test.tsx:42",
        "src/lib/dashboards/__tests__/tools.test.ts:108"
      ],
      "parent_title": "WEBUI-DASH \u2014 Overstory Studio",
      "definition": "**Confirmed destructive agent changes.** An agent call that removes a panel waits for explicit user approval in the page. Denial, timeout or cancellation leaves the dashboard unchanged. | `tools.test.ts` passes.",
      "definition_source": "specs/agent-dashboards/requirements.md",
      "definition_line": 13
    },
    {
      "id": "WEBUI-DASH-R010",
      "kind": "requirement",
      "parent": "WEBUI-DASH",
      "source": "specs/agent-dashboards/status.json",
      "title": "Save through arbora as catalog assets (remaining)",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-DASH \u2014 Overstory Studio",
      "definition": "**Save through arbora as catalog assets (remaining).** The browser saves, loads, lists, drops and shares dashboards through the arbora dashboard operations (ARBORA-OPS-R861). EG stores each dashboard as the catalog asset of EG-TYPED-PACKS-R108, with an owner. A stale revision yields a conflict, never an overwrite. | `store-arbora.test.ts` passes.",
      "definition_source": "specs/agent-dashboards/requirements.md",
      "definition_line": 14
    },
    {
      "id": "WEBUI-DASH-R011",
      "kind": "requirement",
      "parent": "WEBUI-DASH",
      "source": "specs/agent-dashboards/status.json",
      "title": "Local fallback marked pending",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "fd405f9d0a6b"
      ],
      "verified_by": [
        "src/lib/dashboards/__tests__/store.test.ts:29"
      ],
      "parent_title": "WEBUI-DASH \u2014 Overstory Studio",
      "definition": "**Local fallback marked pending.** Until R010 lands, the browser keeps dashboards in local storage. The page states that the save is local and pending. Storage failure leaves the in-memory dashboard intact and says so. | `store.test.ts` passes.",
      "definition_source": "specs/agent-dashboards/requirements.md",
      "definition_line": 15
    },
    {
      "id": "WEBUI-DASH-R012",
      "kind": "requirement",
      "parent": "WEBUI-DASH",
      "source": "specs/agent-dashboards/status.json",
      "title": "Ownership and sharing (remaining)",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-DASH \u2014 Overstory Studio",
      "definition": "**Ownership and sharing (remaining).** The page shows the owner and the caller's access level. An owner grants or revokes reader or editor access. A reader sees no edit controls and the edit tools refuse. | `ShareDialog.test.tsx` passes.",
      "definition_source": "specs/agent-dashboards/requirements.md",
      "definition_line": 16
    },
    {
      "id": "WEBUI-DASH-R013",
      "kind": "requirement",
      "parent": "WEBUI-DASH",
      "source": "specs/agent-dashboards/status.json",
      "title": "Refresh, parameters and filters",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "fd405f9d0a6b"
      ],
      "verified_by": [
        "src/lib/dashboards/__tests__/params.test.ts:4"
      ],
      "parent_title": "WEBUI-DASH \u2014 Overstory Studio",
      "definition": "**Refresh, parameters and filters.** A refresh control reruns every panel query. An optional interval refreshes on a timer. Dashboard parameters substitute into queries as validated typed values, and a change reruns the affected panels. | `params.test.ts` passes.",
      "definition_source": "specs/agent-dashboards/requirements.md",
      "definition_line": 17
    },
    {
      "id": "WEBUI-DASH-R014",
      "kind": "requirement",
      "parent": "WEBUI-DASH",
      "source": "specs/agent-dashboards/status.json",
      "title": "Accessible and themed panels",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "fd405f9d0a6b"
      ],
      "verified_by": [
        "src/components/dashboards/__tests__/DashboardsView.test.tsx:42"
      ],
      "parent_title": "WEBUI-DASH \u2014 Overstory Studio",
      "definition": "**Accessible and themed panels.** Every panel has a text summary and a data table alternative. Series differ by more than color. Panels follow the light and dark theme tokens and respect reduced motion. | `DashboardsView.test.tsx` passes.",
      "definition_source": "specs/agent-dashboards/requirements.md",
      "definition_line": 18
    },
    {
      "id": "WEBUI-DASH-R015",
      "kind": "requirement",
      "parent": "WEBUI-DASH",
      "source": "specs/agent-dashboards/status.json",
      "title": "Dashboards route wiring",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "0bd0c3f909c2",
        "fd405f9d0a6b"
      ],
      "verified_by": [
        "src/components/dashboards/__tests__/DashboardsView.test.tsx:42"
      ],
      "parent_title": "WEBUI-DASH \u2014 Overstory Studio",
      "definition": "**Dashboards route wiring.** The route workspace.dashboards in the navigation registry mounts the view. The view mounts the WebMCP registrar, so the tools exist only on that page. | `DashboardsView.test.tsx` passes.",
      "definition_source": "specs/agent-dashboards/requirements.md",
      "definition_line": 19
    },
    {
      "id": "WEBUI-DASH-R016",
      "kind": "requirement",
      "parent": "WEBUI-DASH",
      "source": "specs/agent-dashboards/status.json",
      "title": "Catalog browse and search page (remaining)",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-DASH \u2014 Overstory Studio",
      "definition": "**Catalog browse and search page (remaining).** The Catalog page lets a user browse and search the EG metadata catalog through arbora. It lists connector assets, glossary terms, lineage, owners, ratings, comments, Agent Library entries, workflows, knowledge graphs and dashboards. Related: EG-TYPED-PACKS-R106, EG-TYPED-PACKS-R108 and the arbora catalog operations. | `CatalogPage.test.tsx` passes.",
      "definition_source": "specs/agent-dashboards/requirements.md",
      "definition_line": 20
    },
    {
      "id": "WEBUI-API",
      "kind": "spec",
      "parent": null,
      "source": "specs/arbora-api-consumer/status.json",
      "title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "document": "specs/arbora-api-consumer/spec.md",
      "component": "Unassigned",
      "code_refs": [
        {
          "declared_in": "specs/arbora-api-consumer/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "agent/agent_webui/server.py",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/agent/agent_webui/server.py"
        },
        {
          "declared_in": "specs/arbora-api-consumer/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/admin-api.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/admin-api.ts"
        },
        {
          "declared_in": "specs/arbora-api-consumer/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/api.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/api.ts"
        },
        {
          "declared_in": "specs/arbora-api-consumer/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/nav-registry.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/nav-registry.ts"
        },
        {
          "declared_in": "specs/arbora-api-consumer/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "tests/test_log_failure_error_code.py",
          "repository": "Knuckles-Team/overstory",
          "role": "test",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/tests/test_log_failure_error_code.py"
        },
        {
          "declared_in": "specs/arbora-api-consumer/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "agent/agent_webui/api_extensions.py",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/agent/agent_webui/api_extensions.py"
        },
        {
          "declared_in": "specs/arbora-api-consumer/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "requirements.md",
          "repository": "Knuckles-Team/overstory",
          "role": "documentation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/arbora-api-consumer/requirements.md"
        }
      ],
      "relations": [],
      "plan_diagrams": [],
      "unparsed_references": []
    },
    {
      "id": "WEBUI-API-R001",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Generated Arbora API client with typed decisions and confirmation flows",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "0144228da540",
        "2d3f1b884e39",
        "406c63f7d322",
        "6df9b8aa2f64",
        "fed13820d806"
      ],
      "verified_by": [
        "src/components/decisions/__tests__/arbora-decisions-transport.test.ts:44"
      ],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Generated Arbora API client with typed decisions and confirmation flows.** Agent-webui generates a versioned TypeScript client and a single invoke adapter from the Arbora API schema. It migrates decisions, Markets/apps pages and WebMCP tools to call the client. The console confirmation page sends only the exact server-issued plan reference. That reference completes a previewed effect. | Contract tests against the generated client plus positive and negative effect tests on the confirmation flow verify this.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 5
    },
    {
      "id": "WEBUI-API-R002",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Typed ontology, graph, Atlas and object-set operations replace host routes",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "1509bdb19bd4",
        "98dd7d8a354e"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Typed ontology, graph, Atlas and object-set operations replace host routes.** Generated Arbora operations replace the ontology, graph, Atlas and object-set route blocks in agent-webui's api_extensions.py. They also replace the corresponding src callers. The operations preserve tenant scoping, purpose context, cursor pagination and existing error semantics. | Cross-surface fixture tests and browser tests covering each migrated route family confirm parity with the prior behavior.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 6
    },
    {
      "id": "WEBUI-API-R003",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Remaining domain routes migrate to generated operations with a route census (rollup)",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [
        "1509bdb19bd4",
        "98dd7d8a354e"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Remaining domain routes migrate to generated operations with a route census (rollup).** Split into `WEBUI-API-R003.1` (route-census typed model) and `WEBUI-API-R003.2` (route-census data file and lint rule), producer first. This row is LANDED only when both children are LANDED. | Each child's own verification row; see below.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 7
    },
    {
      "id": "WEBUI-API-R003.1",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Route-census typed model",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "98dd7d8a354e"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Route-census typed model.** A typed `RouteCensusEntry` model with a strict disposition enum records each route's owning operation. It refuses a `generated-operation` row that omits its owning operation. | Verified by `route-census.test.ts` asserting the refusal and disposition-enum behavior.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 8
    },
    {
      "id": "WEBUI-API-R003.2",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Route-census data file and lint rule (remaining)",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Route-census data file and lint rule (remaining).** The remaining scope has two parts. One is a checked-in route census data file populated for every `api_extensions.py` domain route family. The other is an architecture lint rule that runs in CI and rejects any new unclassified domain route. | Route-census and contract tests plus the lint rule running in continuous integration confirm no unclassified domain route remains.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 9
    },
    {
      "id": "WEBUI-API-R004",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Each request carries its own correlation id",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "2d3f1b884e39",
        "3cc97501bab5",
        "dce5092f45fd",
        "eb748b7a950d"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Each request carries its own correlation id.** The host mints a fresh correlation id for each HTTP request and WebSocket connection without an inbound `x-correlation-id`. An ambient id bound on the serving thread never enters a request. | An observability test binds an ambient id and serves two requests. It confirms two distinct ids that differ from the ambient one.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 10
    },
    {
      "id": "WEBUI-API-R006",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Generated TypeScript client from a pinned Arbora schema",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "327ed00ea70e",
        "3fabfbee78e3",
        "6394f229b798"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Generated TypeScript client from a pinned Arbora schema.** Agent-webui generates its TypeScript types and client from a pinned Arbora v1 API schema and digest. The client exposes one invoke adapter and a stable error envelope for all callers. | A regeneration-diff check plus contract tests confirm the generated client matches the pinned schema and envelope.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 11
    },
    {
      "id": "WEBUI-API-R007",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Typed operations preserve preview-confirm-step-up for effects",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "0144228da540",
        "406c63f7d322"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Typed operations preserve preview-confirm-step-up for effects.** Decisions, Markets/apps pages, WebMCP tools and the console confirmation flow in agent-webui call typed Arbora operations through the generated client. They preserve the preview, confirmation and step-up sequence. That sequence is required before any side-effecting action runs. | Positive and negative effect tests exercise the preview, confirm and step-up sequence end to end.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 12
    },
    {
      "id": "WEBUI-API-R008",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Ontology, graph, Atlas and object-set operations preserve tenant semantics (rollup)",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "1509bdb19bd4"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Ontology, graph, Atlas and object-set operations preserve tenant semantics (rollup).** Split by code root into `WEBUI-API-R008.1` (ontology), `WEBUI-API-R008.2` (graph), `WEBUI-API-R008.3` (Atlas) and `WEBUI-API-R008.4` (object-set), producer first. This row is LANDED only when all four children are LANDED. | Each child's own verification row; see below.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 13
    },
    {
      "id": "WEBUI-API-R008.1",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Ontology reads and writes use typed Arbora operations with preserved tenant semantics",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "1509bdb19bd4"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Ontology reads and writes use typed Arbora operations with preserved tenant semantics.** Agent-webui's ontology callers call typed Arbora operations. The callers cover schema graph, catalogue, import/export, registry types and interfaces. They live in `agent/agent_webui/api_extensions.py` and their `src` counterparts. The operations preserve tenant scoping, purpose context, cursor pagination and existing error semantics. | Cross-surface fixtures and a browser test confirm ontology-read parity after migration.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 14
    },
    {
      "id": "WEBUI-API-R008.2",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Graph reads and writes use typed Arbora operations with preserved tenant semantics",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "1509bdb19bd4"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Graph reads and writes use typed Arbora operations with preserved tenant semantics.** Agent-webui's graph callers in `agent/agent_webui/api_extensions.py` and their `src` counterparts call typed Arbora operations that preserve tenant scoping, purpose context, cursor pagination and existing error semantics. | Cross-surface fixtures and a browser test confirm graph-read/write parity after migration.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 15
    },
    {
      "id": "WEBUI-API-R008.3",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Atlas reads and writes use typed Arbora operations with preserved tenant semantics",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "1509bdb19bd4"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Atlas reads and writes use typed Arbora operations with preserved tenant semantics.** Agent-webui's Atlas callers in `agent/agent_webui/api_extensions.py` and their `src` counterparts call typed Arbora operations that preserve tenant scoping, purpose context, cursor pagination and existing error semantics. | Cross-surface fixtures and a browser test confirm Atlas parity after migration.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 16
    },
    {
      "id": "WEBUI-API-R008.4",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Object-set reads and writes use typed Arbora operations with preserved tenant semantics",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "1509bdb19bd4"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Object-set reads and writes use typed Arbora operations with preserved tenant semantics.** Agent-webui's object-set callers (`ObjectExplorerView`, `ObjectView`) in `agent/agent_webui/api_extensions.py` and their `src` counterparts call typed Arbora operations that preserve tenant scoping, purpose context, cursor pagination and existing error semantics. | Cross-surface fixtures and a browser test confirm object-set parity after migration.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 17
    },
    {
      "id": "WEBUI-API-R009",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Prompts, SDD, knowledge base, sessions and goals migrate to typed calls",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "fe7688de370c"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Prompts, SDD, knowledge base, sessions and goals migrate to typed calls.** Agent-webui's prompts, SDD, knowledge base, sessions, goals, MCP servers/tools and model-management features call typed Arbora operations in place of host-owned routes. | A route census and contract tests confirm each family is covered by a generated operation.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 18
    },
    {
      "id": "WEBUI-API-R010",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Host drops direct internal imports once replacement operations are proven",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "1509bdb19bd4"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Host drops direct internal imports once replacement operations are proven.** Agent-webui removes direct internal imports and domain route handlers from its host once the replacement Arbora operations are proven. It keeps only an explicitly inventoried set of browser-local endpoints. | A static dependency check and route-census gate confirm no forbidden import or unlisted domain route remains.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 19
    },
    {
      "id": "WEBUI-API-R011",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Shared auth and streaming are preserved without exposing a service bearer",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [
        "0940bc0c0d99",
        "19d92fda94cd",
        "1d3334c8e819",
        "2d3f1b884e39",
        "bd46338613c1"
      ],
      "verified_by": [
        "src/lib/arbora-api/__tests__/invoke-no-bearer.test.ts:31",
        "src/lib/arbora-api/__tests__/invoke-no-bearer.test.ts:45",
        "src/lib/arbora-api/__tests__/invoke-no-bearer.test.ts:56"
      ],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Shared auth and streaming are preserved without exposing a service bearer.** Agent-webui preserves shared authentication, credential delegation, streaming and cancel behavior, and error handling across the migration. It never exposes an Arbora service bearer token to browser JavaScript. | Host integration tests and adversarial browser tests confirm the bearer is never exposed and behavior is preserved.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 20
    },
    {
      "id": "WEBUI-API-R005",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Failure logs carry a sanitized typed error code",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "4924a5237ee7",
        "4ad4466122fe",
        "c183f7a2a67b",
        "e225859bb82a"
      ],
      "verified_by": [
        "tests/test_log_failure_error_code.py:23",
        "tests/test_log_failure_error_code.py:31",
        "tests/test_log_failure_error_code.py:38",
        "tests/test_log_failure_error_code.py:45",
        "tests/test_log_failure_error_code.py:59"
      ],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Failure logs carry a sanitized typed error code.** `_log_failure` in api_extensions.py logs the operation label, exception type and an `error_code`. The code comes from the `engine_error_code` or `code` attribute. A value that is not an upper-case token of 64 characters or fewer is logged as `none`. Message text never reaches the log. | tests/test_log_failure_error_code.py confirms `ACCESS_DENIED` is logged, malformed codes log `none`, and message text is absent.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 21
    },
    {
      "id": "WEBUI-API-R011.1",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Host composition without an engine",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "0940bc0c0d99",
        "1d3334c8e819",
        "bd46338613c1",
        "be36ad8c76c8"
      ],
      "verified_by": [
        "agent/agent_webui/__tests__/test_served_operations.py:188",
        "agent/agent_webui/__tests__/test_served_operations.py:275",
        "tests/test_logfire_host_console.py:12"
      ],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Host composition without an engine.** The WebUI factory holds no graph engine. A host composes its routes through `application_composer` on the real factory. Graph data comes only from Arbora served operations; a route without one answers 501 `not_available`. Injection grants no identity or session authority. | Host-seam tests prove the served-operation calls and the `not_available` answers through the real factory.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 22
    },
    {
      "id": "WEBUI-API-R011.2",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Chat preserves explicit conversation and admitted task identities",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Chat preserves explicit conversation and admitted task identities.** The browser sends its selected conversation identity from the first turn. Its cache, draft and SDK state are scoped to the observed caller and tenant. The host does not derive identity from prompt text. It rejects conflicting conversation identities and propagates only explicit Arbora task, context, run and trace references through message metadata. A trace reference is not interpreted as a graph trace ID. | Mounted chat transport and host streaming tests prove first-turn identity, conversation isolation, missing and conflicting identity, and exact returned references. This does not establish durable resume or trace retrieval.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 23
    },
    {
      "id": "WEBUI-API-R011.2.1",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Conversation and admitted-identity source preservation",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "bfb532535a0f",
        "c767b6a5b17f"
      ],
      "verified_by": [
        "agent/agent_webui/__tests__/test_run_identity.py:3",
        "src/__tests__/Chat.swe-mode.test.tsx:2"
      ],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Conversation and admitted-identity source preservation.** Bind selected conversation identity in mounted transport source. Scope cache, draft and SDK state to the observed caller and tenant. Reject conflicting conversation identities. Preserve only explicit returned task, context, run and trace references in host message metadata. Do not derive identity from prompt text or treat a trace reference as a graph trace ID. | Source fixtures cover first-turn identity, isolation, malformed and conflicting identity, and exact returned references. These fixtures do not qualify the installed composed browser-to-Arbora path.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 25
    },
    {
      "id": "WEBUI-API-R011.2.2",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Composed conversation identity qualification",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Composed conversation identity qualification.** Retain every parent R011.2 obligation beyond source fixture coverage. Qualify the mounted browser transport and host streaming path against the installed Arbora provider. | Planned: Prove first-turn identity, observed caller and tenant isolation, missing and conflicting identity, and exact returned references through the composed path. Keep durable resume and trace retrieval separate.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 26
    },
    {
      "id": "WEBUI-API-R011.3",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Adapt the shared public execution contract",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Adapt the shared public execution contract.** Extend `orchestrator_model.py` and the existing browser client through registered Arbora operations. Preserve explicit node, owner, root-task, run and context bindings. Project only authorized public summaries, tool activity and transcript parts. Preserve snapshot/cursor semantics and default-false control capabilities. Preserve replay-v1 decoding; negotiate new projections separately. Do not infer child targets or expose service credentials. Depends-on: ARBORA-OPS-R021.4.8, ARBORA-OPS-R021.4.9. | Planned `test_execution_projection.py::test_public_execution_adapter` and `execution-projection.test.ts::binding_and_refusal` cover schema compatibility, exact identity, ordered replay, redaction and denial. Installed-producer qualification remains required.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 32
    },
    {
      "id": "WEBUI-API-R011.4",
      "kind": "requirement",
      "parent": "WEBUI-API",
      "source": "specs/arbora-api-consumer/status.json",
      "title": "Flat execution read source adapter",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "5069ca94e71e",
        "bb56d874ef78",
        "ce6e3d27c60c"
      ],
      "verified_by": [
        "e2e/execution-graph.browser.ts:1",
        "src/components/workspace/__tests__/WorkExecutionGraph.test.tsx:1",
        "src/lib/__tests__/execution-graph.test.ts:1"
      ],
      "parent_title": "WEBUI-API \u2014 Generated Arbora API consumer cutover",
      "definition": "**Flat execution read source adapter.** Consume `runs.execution_graph` with `arbora-execution-graph-v1` through the existing canonical invoke transport. Validate exact root-task/run binding, decoded node-key tuples, bounded declared topology and unique observed evidence. Preserve aborts, unavailable results and default-false child capabilities. Never fall back to legacy endpoints or infer scheduling, lineage or child targets. | Source `execution-graph.test.ts` and mounted `WorkExecutionGraph.test.tsx` use the producer contract fixture. They cover malformed, denied and stale reads, Unicode keys and missing bindings. Nested projections, transcripts and installed-producer qualification remain under R011.3.",
      "definition_source": "specs/arbora-api-consumer/requirements.md",
      "definition_line": 38
    },
    {
      "id": "WEBUI-APPS",
      "kind": "spec",
      "parent": null,
      "source": "specs/arbora-app-surface/status.json",
      "title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "document": "specs/arbora-app-surface/spec.md",
      "component": "Unassigned",
      "code_refs": [
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "agent/agent_webui/server.py",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/agent/agent_webui/server.py"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "interaction contract",
          "repository": "Knuckles-Team/overstory",
          "role": "documentation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/browser-design-system/interaction-contract.md"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/App.tsx",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/App.tsx"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/components/atlas/renderers/index.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/components/atlas/renderers/index.ts"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/components/knowledge-graph/GraphCanvas.tsx:379",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/components/knowledge-graph/GraphCanvas.tsx#L379"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/components/views/GraphView.tsx:792",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/components/views/GraphView.tsx#L792"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/components/views/MemoryView.tsx:439",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/components/views/MemoryView.tsx#L439"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/components/views/ObservabilityView.tsx",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/components/views/ObservabilityView.tsx"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/index.css",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/index.css"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/arbora-api/invoke.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/arbora-api/invoke.ts"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/arbora-api/invoke.ts:56",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/arbora-api/invoke.ts#L56"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/atlas/renderers.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/atlas/renderers.ts"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/explore-workspace.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/explore-workspace.ts"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/frontend-contributions.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/frontend-contributions.ts"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/gateway.ts:129",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/gateway.ts#L129"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/nav-registry.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/nav-registry.ts"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/nav-registry.ts:664",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/nav-registry.ts#L664"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/nav-registry.ts:73",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/nav-registry.ts#L73"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/work-workspace.ts:95",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/work-workspace.ts#L95"
        },
        {
          "declared_in": "specs/arbora-app-surface/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "requirements.md",
          "repository": "Knuckles-Team/overstory",
          "role": "documentation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/arbora-app-surface/requirements.md"
        },
        {
          "declared_in": "specs/arbora-app-surface/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "workspace-coverage.md",
          "repository": "Knuckles-Team/overstory",
          "role": "documentation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/arbora-app-surface/workspace-coverage.md"
        }
      ],
      "relations": [
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "external declaration; not verified",
          "kind": "depends on",
          "label": "Execution projections",
          "repository": "Knuckles-Team/arbora",
          "url": "https://github.com/Knuckles-Team/arbora/blob/main/specs/hosted-api-operations/spec.md"
        },
        {
          "declared_in": "specs/arbora-app-surface/plan.md",
          "evidence": "external declaration; not verified",
          "kind": "depends on",
          "label": "Served child controls",
          "repository": "Knuckles-Team/arbora",
          "url": "https://github.com/Knuckles-Team/arbora/blob/main/specs/dependency-ordered-release/spec.md"
        }
      ],
      "plan_diagrams": [],
      "unparsed_references": []
    },
    {
      "id": "WEBUI-APPS-R038",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Client display identity consistently reads Overstory",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "0bd0c3f909c2",
        "4f0952b82845",
        "82a4f84c98e6",
        "dd43c178542b",
        "e4f557cb74de"
      ],
      "verified_by": [
        "src/components/workspace/__tests__/WorkspaceContextRail.test.tsx:104"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Client display identity consistently reads Overstory.** Page titles, metadata, the web manifest and primary client labels present Overstory. Arbora remains the backend and ecosystem name. Retained icon assets do not require new artwork; existing screenshots retain their capture provenance until replaced by real qualified captures. | Display-name checks, rendered tests and the Pages build confirm the client identity without changing technical identifiers.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 5
    },
    {
      "id": "WEBUI-APPS-R039",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Package, import and environment naming stay on the component identity",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "19e4264b5f66",
        "3ffaf638fd69",
        "82a4f84c98e6",
        "97221364f60f",
        "dd43c178542b"
      ],
      "verified_by": [
        "tests/test_release_concurrency.py:29"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Package, import and environment naming stay on the component identity.** Package and import names remain `agent-webui` and `agent_webui`. Npm metadata, WebMCP identifiers, skills, browser storage, consent keys and environment variable names stay unchanged. The 2026-10-25 display-name decision uses Overstory for the client and retains Arbora for its backend and ecosystem. | Build and wheel tests confirm component identifiers are unchanged while client display labels read Overstory.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 6
    },
    {
      "id": "WEBUI-APPS-R040",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "AppSurface contract declares each app's route, capability and client",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "401cec444a5f",
        "e05e1230ae72"
      ],
      "verified_by": [
        "src/lib/apps/__tests__/apps.test.ts:9"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**AppSurface contract declares each app's route, capability and client.** Agent-webui exposes Apps as a single section in nav-registry.ts, where each app declares its route, required capability, typed service client, WebMCP page and optional Atlas renderer through one AppSurface contract. | Contract tests and a route-census test confirm every registered app conforms to the AppSurface shape.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 7
    },
    {
      "id": "WEBUI-APPS-R041",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Contributed app descriptors cannot escalate privilege beyond the contract",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "401cec444a5f",
        "e05e1230ae72"
      ],
      "verified_by": [
        "src/lib/apps/__tests__/apps.test.ts:9"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Contributed app descriptors cannot escalate privilege beyond the contract.** Native apps and validated package-contributed apps resolve to the same AppSurface shape. Untrusted or malformed descriptors cannot register executable code or arbitrary URLs. They cannot grant capabilities beyond the contract. | Tests that submit invalid descriptors and denied capabilities confirm they are rejected.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 8
    },
    {
      "id": "WEBUI-APPS-R042",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Markets consumes the AppSurface contract without shell-side duplication",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "e05e1230ae72"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Markets consumes the AppSurface contract without shell-side duplication.** Markets is the first app to consume AppSurface. The browser shell must not duplicate its scanner, chart or gateway wiring. | A first-consumer integration test confirms Markets runs through the shared contract alone.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 9
    },
    {
      "id": "WEBUI-APPS-R043",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "No browser-state migration is required by the rebrand",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "19e4264b5f66",
        "82a4f84c98e6"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**No browser-state migration is required by the rebrand.** Storage and consent keys keep their component names, so existing browser state and granted permissions stay valid. Any future key change must expire or migrate them with explicit renewed consent. The 2026-10-25 display-name decision retains all technical identifiers. | Browser tests confirm existing consent and storage survive the display rebrand.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 10
    },
    {
      "id": "WEBUI-APPS-R044",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "App navigation supports accessibility and layout states across devices",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "e05e1230ae72"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**App navigation supports accessibility and layout states across devices.** Navigation between apps in agent-webui works with keyboard, touch and reduced-motion input across mobile and desktop layouts. Each app surface presents explicit loading, unavailable and denied states. | An end-to-end accessibility test suite confirms these interaction modes and states.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 11
    },
    {
      "id": "WEBUI-APPS-R001",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Apps information-architecture section and AppSurface contract",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [
        "401cec444a5f",
        "7545b6ceaf55",
        "e05e1230ae72"
      ],
      "verified_by": [
        "src/components/__tests__/AppSidebar.navigation.test.tsx:84",
        "src/lib/apps/__tests__/apps.test.ts:14",
        "src/lib/apps/__tests__/apps.test.ts:9"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Apps information-architecture section and AppSurface contract.** Agent-webui introduces an Apps section in its navigation information architecture and a reusable AppSurface contract that binds each app's route, capability, typed client, WebMCP page and optional Atlas renderer to the existing shell. | Contract and route-census tests confirm the shared shell binds every declared app surface correctly.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 12
    },
    {
      "id": "WEBUI-APPS-R002",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Overstory is the client display brand",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "19e4264b5f66",
        "82a4f84c98e6",
        "dd43c178542b"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Overstory is the client display brand.** Page titles, metadata, web manifest name and short name, primary UI labels and user-facing documentation headings present Overstory. Arbora retains its backend and ecosystem meaning. Retained icon assets are unchanged; screenshot updates use real qualified captures with their own provenance. | Rendered tests and display-brand checks confirm the renamed client labels; artifact checks preserve capture provenance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 13
    },
    {
      "id": "WEBUI-APPS-R003",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Repository, package and runtime identifiers are not renamed",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "19e4264b5f66",
        "82a4f84c98e6",
        "dd43c178542b"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Repository, package and runtime identifiers are not renamed.** The repository, distribution, Python import path and npm package keep the agent-webui identity. The WebMCP identifiers, skills, browser storage keys, consent version, environment variables and release image keep it too. Operator decision 2026-10-09: only front-end-facing items are renamed to Arbora; agent-webui stays the component name. | Build and packaging tests confirm the identifiers are unchanged.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 14
    },
    {
      "id": "WEBUI-APPS-R004",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Run harness surface is read-only and honest",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Run harness surface is read-only and honest.** The agent-webui client must show a run's current plan, context use against budget, applied harness configuration, cost and termination reason. The client reads only arbora operations. | Children WEBUI-APPS-R004.1 to WEBUI-APPS-R004.6.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 15
    },
    {
      "id": "WEBUI-APPS-R004.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Run read goes through the arbora read operations",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Run read goes through the arbora read operations.** The client run view must read `runs.get` and `runs.metrics` (the `ARBORA-OPS` rows for run metrics). The client must not call the engine and must not compute these values. | `tests/x::test_run_read_uses_arbora_operations`",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 16
    },
    {
      "id": "WEBUI-APPS-R004.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Applied harness configuration is shown",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Applied harness configuration is shown.** The run view must show the run's `harness_config`: `context_policy`, `plan_scaffold` and `action_space`. A missing field must read \"not available\". | `tests/x::test_harness_config_shown`",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 17
    },
    {
      "id": "WEBUI-APPS-R004.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Context use is shown against the budget",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Context use is shown against the budget.** The run view must show `peakContextTokens` against `contextBudgetTokens` and the cost `costUsd`. An absent field must read \"not available\", never zero. | `tests/x::test_context_and_cost_shown`",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 18
    },
    {
      "id": "WEBUI-APPS-R004.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Current plan is shown read-only",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [
        "agent/agent_webui/__tests__/test_security_boundaries.py:1034",
        "src/components/workspace/__tests__/CurrentPlanPanel.test.tsx:1",
        "src/components/workspace/__tests__/WorkWorkspace.test.tsx:1",
        "src/components/workspace/__tests__/WorkWorkspaceAdmission.test.tsx:1",
        "src/lib/__tests__/current-plan.test.ts:1"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Current plan is shown read-only.** The selected task reads `runs.current_plan` only from its validated `metadata.arbora.runId`, never an independent trace selection. Render the typed, current snapshot in producer order with no edit controls. Distinguish available-empty, unavailable, denied and failed reads. Retire snapshots on expiry, selection or identity admission change; stale requests cannot restore them. | `src/lib/__tests__/current-plan.test.ts`, `CurrentPlanPanel.test.tsx`, `WorkWorkspace.test.tsx` and `agent/agent_webui/__tests__/test_security_boundaries.py`. These qualify presentation and host admission, not full installed-producer acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 19
    },
    {
      "id": "WEBUI-APPS-R004.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Each termination reason has a distinct state",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Each termination reason has a distinct state.** The run view must map each `terminationReason` (`final_answer`, `context_overflow`, `stuck`, `step_budget`, `error`) to its own label. `context_overflow` and `stuck` must not appear as a generic failure. | `tests/x::test_termination_reasons_distinct`",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 20
    },
    {
      "id": "WEBUI-APPS-R004.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Absent operation shows an honest state",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Absent operation shows an honest state.** When `runs.get` or `runs.metrics` is absent or refused, the run view must show \"not available\" and no fabricated value. | `tests/x::test_absent_operation_not_available`",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 21
    },
    {
      "id": "WEBUI-APPS-R005",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Navigation and dashboards follow the signed-in user's role",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Navigation and dashboards follow the signed-in user's role.** Agent-webui must show each signed-in user only the navigation and dashboard content that the user's role allows, and must keep each user's own dashboard layout. Rollup: LANDED when every `WEBUI-APPS-R005.<n>` child is LANDED. | A two-principal browser test shows different navigation and separate layouts, and the children pass.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 22
    },
    {
      "id": "WEBUI-APPS-R005.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Nav entry declares a minimum role",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "a390f7a0dabb",
        "af4bf7721747"
      ],
      "verified_by": [
        "src/components/__tests__/AppRoleVisibility.test.tsx:1",
        "src/lib/__tests__/nav-registry.test.ts:77"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Nav entry declares a minimum role.** Each entry in src/lib/nav-registry.ts must declare a minimum role from admin, maintainer, user or reader. Completion rolls up both child requirements. | src/lib/__tests__/nav-registry.test.ts: entries without a role fail; a reader sees no admin entry.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 23
    },
    {
      "id": "WEBUI-APPS-R005.1.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Registry role contract",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "a390f7a0dabb"
      ],
      "verified_by": [
        "src/lib/__tests__/nav-registry.test.ts:77"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Registry role contract.** Every registry entry declares a recognized minimum role. The role predicate rejects absent and unknown identities and excludes higher-role routes for readers. | src/lib/__tests__/nav-registry.test.ts",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 24
    },
    {
      "id": "WEBUI-APPS-R005.1.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Rendered role filtering",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "af4bf7721747"
      ],
      "verified_by": [
        "src/components/__tests__/AppRoleVisibility.test.tsx:1"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Rendered role filtering.** The real sidebar and route shell must reject higher-role destinations for a reader. Rendered acceptance must include an allowed reader destination. | `src/components/__tests__/AppRoleVisibility.test.tsx` mounts the real sidebar and route shell with reader and admin identities. A guessed admin URL cannot mount its view for a reader. Allowed reader navigation remains visible.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 25
    },
    {
      "id": "WEBUI-APPS-R005.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Layout saved per user",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Layout saved per user.** DashboardView must save and load the dashboard layout per principal through a typed Arbora preference operation. It must report not available when the operation is absent. | src/components/views/__tests__/DashboardView.test.tsx: two principals keep separate layouts; absent operation shows not available.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 26
    },
    {
      "id": "WEBUI-APPS-R005.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Connector tiles from the catalog",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [
        "src/components/views/__tests__/DashboardConnectorTiles.test.tsx:1",
        "src/components/views/__tests__/OperateCatalogPanel.test.tsx:1"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Connector tiles from the catalog.** The dashboard must offer one tile per connector in the Arbora connector catalog. It reads connection state from Arbora and holds no credential in the browser. Under R049, the tile panel lives in Operate beside the connector inspector. Optional counters remain not available when absent. | src/components/views/__tests__/DashboardConnectorTiles.test.tsx covers each returned connector through the browser adapter. It checks absent/zero counters, filter, selection, failed refresh and storage. The Operate catalog panel also maps every server returned by the supported enhanced catalog, independently of process inventory. Registration availability is explicitly distinct from provider connectivity. Connection-state and installed-provider acceptance remain open.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 27
    },
    {
      "id": "WEBUI-APPS-R005.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "One chat session list",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "38c8f13794ee",
        "4d0f9693e45d",
        "68ad43e0f7a9",
        "73051bf582bd",
        "d18ec8c78341"
      ],
      "verified_by": [
        "e2e/conversation-first.browser.ts:1",
        "e2e/native-chat.browser.ts:1",
        "src/__tests__/Chat.conversation-identity.test.tsx:1",
        "src/__tests__/Chat.conversation-identity.test.tsx:711",
        "src/__tests__/Chat.conversation-identity.test.tsx:870"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**One chat session list.** The default Chat & tasks entry shows the existing composer without disclosure. Other contexts retain a quiet Agent header entry. The native workspace assistant and the navigation conversation selector read the same owner-scoped session list. Preserve one mounted Chat instance and canonical transport across Work, Explore, Operate and retained private routes. Do not add a floating launcher or second composer. | src/components/__tests__/chat-session-sync.test.tsx: a session created in one appears in the other.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 28
    },
    {
      "id": "WEBUI-APPS-R005.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Every route renders",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "282b25e95b87",
        "a390f7a0dabb",
        "af4bf7721747"
      ],
      "verified_by": [
        "src/__tests__/routes/route-render.hostile.test.tsx:129",
        "src/__tests__/routes/route-render.hostile.test.tsx:176",
        "src/__tests__/routes/route-render.hostile.test.tsx:182"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Every route renders.** A render census test must mount every registered route and fail when any route shows the error boundary. Completion rolls up both child requirements. | src/__tests__/routes/route-render.hostile.test.tsx: all routes render; an injected throwing view fails the test.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 29
    },
    {
      "id": "WEBUI-APPS-R005.5.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Census detects a throwing view",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "282b25e95b87",
        "a390f7a0dabb"
      ],
      "verified_by": [
        "src/__tests__/routes/route-render.hostile.test.tsx:182"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Census detects a throwing view.** The existing render harness must detect an injected throwing view through its real ErrorBoundary. | src/__tests__/routes/route-render.hostile.test.tsx",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 30
    },
    {
      "id": "WEBUI-APPS-R005.5.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Complete route render acceptance",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "af4bf7721747"
      ],
      "verified_by": [
        "src/__tests__/routes/route-render.hostile.test.tsx:129",
        "src/__tests__/routes/route-render.hostile.test.tsx:176"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Complete route render acceptance.** Every registered route must render without an error boundary. Known-failure baselines do not satisfy this acceptance. | `src/__tests__/routes/route-render.hostile.test.tsx` runs the complete registry matrix and rejects any known-failure exemption.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 31
    },
    {
      "id": "WEBUI-APPS-R005.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Each view states its purpose",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "93401c34a695",
        "a390f7a0dabb",
        "af4bf7721747"
      ],
      "verified_by": [
        "src/components/__tests__/AppRoleVisibility.test.tsx:79",
        "src/components/__tests__/RoutePurpose.test.tsx:1",
        "src/components/__tests__/RoutePurpose.test.tsx:64",
        "src/components/webmcp/WebMcpControl.test.tsx:146",
        "src/components/workspace/__tests__/ExploreShell.test.tsx:138"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Each view states its purpose.** Each registered view must show a one-sentence purpose from its nav registry entry. The census must fail on a missing one. Completion rolls up both child requirements. | src/lib/__tests__/nav-registry.test.ts: every entry has a purpose of at most 20 words.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 32
    },
    {
      "id": "WEBUI-APPS-R005.6.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Registry purpose copy",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "a390f7a0dabb"
      ],
      "verified_by": [
        "src/lib/__tests__/nav-registry.test.ts:96"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Registry purpose copy.** Every registry entry has non-placeholder purpose copy ending in sentence punctuation and containing at most 20 words. | src/lib/__tests__/nav-registry.test.ts",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 33
    },
    {
      "id": "WEBUI-APPS-R005.6.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Rendered purpose visibility",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "93401c34a695",
        "af4bf7721747"
      ],
      "verified_by": [
        "src/components/__tests__/AppRoleVisibility.test.tsx:79",
        "src/components/__tests__/RoutePurpose.test.tsx:1",
        "src/components/__tests__/RoutePurpose.test.tsx:64",
        "src/components/webmcp/WebMcpControl.test.tsx:146",
        "src/components/workspace/__tests__/ExploreShell.test.tsx:138"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Rendered purpose visibility.** Every registered view must visibly show its registry purpose. Include views that own their headings and fail on missing purpose text. | `src/components/__tests__/RoutePurpose.test.tsx` covers every registry entry through the appropriate shell, including own-heading views, object detail, chat and public content.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 34
    },
    {
      "id": "WEBUI-APPS-R006",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "One panel relates goals, sessions and fleets",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**One panel relates goals, sessions and fleets.** Agent-webui must offer one panel that relates goals, sessions and fleets, drawn only from identifiers that Arbora returns. Rollup: LANDED when every `WEBUI-APPS-R006.<n>` child is LANDED. | A browser test filters the panel by goal and the children pass.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 35
    },
    {
      "id": "WEBUI-APPS-R006.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Link type",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Link type.** The panel must define a typed goal-session-fleet link built from returned identifiers in src/types. | src/lib/__tests__/goal-link.test.ts: a link with an unknown identifier is rejected.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 36
    },
    {
      "id": "WEBUI-APPS-R006.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Panel reads typed operations",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Panel reads typed operations.** The panel must read goals, sessions and fleets through the generated Arbora client calls of `WEBUI-API-R009`. | src/components/views/__tests__/GoalPanel.test.tsx: three calls, no direct fetch.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 37
    },
    {
      "id": "WEBUI-APPS-R006.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Absent operation is honest",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Absent operation is honest.** The panel must show not available for any absent or refused operation, and must invent no link. | src/components/views/__tests__/GoalPanel.test.tsx: refused fleets call shows not available.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 38
    },
    {
      "id": "WEBUI-APPS-R030",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Graph view edits go through the engine and refusals show",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Graph view edits go through the engine and refusals show.** The graph view must render nodes and edges as a pan and zoom force layout with semantic filters. It must send add, edit and delete requests to arbora and show the engine verdict, never a local edit. Persona modes must change only presentation. | Children WEBUI-APPS-R030.1 to WEBUI-APPS-R030.7.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 39
    },
    {
      "id": "WEBUI-APPS-R030.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** `src/lib/graph-edit.ts` (new) must define `GraphEditRequest` (`add`, `update`, `delete`; node id; labels; properties), `GraphEditVerdict` (`applied`, `refused`, `unavailable`) and `ViewPersona` (`operator`, `analyst`, `reader`). No store type exists for these today. | `src/__tests__/graph-edit-types.test.ts::test_edit_types_closed`",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 40
    },
    {
      "id": "WEBUI-APPS-R030.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** `src/lib/graph-edit.ts` must expose `sendGraphEdit` as a named export. Through `gatewayPost`, use the installed Arbora registry contracts `eg.graph.AddNode`, `eg.graph.ApplyMutation` and `eg.graph.RemoveNode`, with generated request schemas, at `POST /api/v1/ops/{op_id}`. Arbora binding, invocation and HTTP owners are `ARBORA-OPS-R008`, `ARBORA-OPS-R009` and `ARBORA-OPS-R013`; the served version-checked mutation owner is `EG-DURABLE-KERNEL-R084.3`. Return the engine verdict; missing or incompatible installed contracts are unavailable. `EG-TYPED-PACKS-R088` covers embedded read parity and does not establish this served write proof. | `src/__tests__/graph-edit-send.test.ts::test_send_returns_engine_verdict`",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 41
    },
    {
      "id": "WEBUI-APPS-R030.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** `GraphView.tsx:792`, `:796` and `:801` define `handleUpdateNode`, `handleDeleteNode` and `handleAddNode`, which only change React state and call no server. The caller is `GraphCanvas.tsx:605-609` through `onUpdateNode`, `onDeleteNode` and `onAddNode`. No production caller reaches an engine write today. This row replaces the three bodies with `sendGraphEdit` and changes local state only after an `applied` verdict. | `src/__tests__/graph-edit-wiring.test.tsx::test_handlers_call_send_graph_edit`",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 42
    },
    {
      "id": "WEBUI-APPS-R030.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** When the engine refuses an edit for lack of permission, `GraphView.tsx` must keep the node unchanged and show the refusal reason. When the operation is absent, it must show `not available`. The identity owner is `ARBORA-IDENTITY`; the client must not decide authorization. | `src/__tests__/graph-edit-refusal.test.tsx::test_unauthorized_edit_refused_and_unchanged`",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 43
    },
    {
      "id": "WEBUI-APPS-R030.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** The view must offer semantic filters by node type and by label text through `typeFilter` (`GraphView.tsx:272`). It must offer a persona mode that selects a default filter and detail level. `GraphCanvas.tsx:379` already runs the force layout, with pan and zoom. A persona must not widen what the engine returns. | `src/__tests__/graph-persona-filter.test.tsx::test_persona_changes_presentation_only`",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 44
    },
    {
      "id": "WEBUI-APPS-R030.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Each edit must record the request, the verdict and the engine reason in the view's visible edit log. A refused or unavailable edit must appear there with its reason. | `src/__tests__/graph-edit-log.test.tsx::test_log_records_each_verdict`",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 45
    },
    {
      "id": "WEBUI-APPS-R030.7",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Served end-to-end proof",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Served end-to-end proof.** Start the real WebUI host, authenticated Arbora operation host and a disposable durable fixture engine. From the rendered graph overlay, save and delete through `sendGraphEdit`, `gatewayPost` and the actual registered operations from R030.2. Do not mock the client, gateway, host handler or engine transport. With an unauthorized principal, assert the visible refusal. Independently read the durable graph. No node, property or edge may change. With an authorized principal, assert the accepted value and durable readback after reload. Component tests alone cannot satisfy this row. | `e2e/graph-edit-served.spec.ts::overlay_edit_reaches_durable_engine` (planned)",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 46
    },
    {
      "id": "WEBUI-APPS-R031",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Memory state shows as Markdown files that sync with the graph",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Memory state shows as Markdown files that sync with the graph.** List the hosted observations, reflections, profile and active-context documents and render EG synchronization evidence. An authorized retained conflict preserves both versions without overwriting the accepted head. A refusal reveals no head metadata. | Children WEBUI-APPS-R031.1 to WEBUI-APPS-R031.7.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 47
    },
    {
      "id": "WEBUI-APPS-R031.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Planned `src/lib/memory-files.ts` consumes generated snapshot and tagged outcome schemas from `EG-DURABLE-KERNEL-R085.1` through `ARBORA-OPS-R024.4.1`. `MemoryFileKind` is observations, reflections, profile or active_context. `MemoryFile` maps the authorized document identity, logical path, revision, digest and sync state without a second permissive wire schema. `MemorySyncState` includes in_sync, graph_ahead, file_ahead, conflict and unavailable. Refused is a separate head-free variant. No file-sync client exists on current main. | `src/__tests__/memory-files-types.test.ts::test_memory_file_types_closed` (planned)",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 48
    },
    {
      "id": "WEBUI-APPS-R031.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Planned named exports `listMemoryFiles`, `readMemoryFile` and `saveMemoryFile` reuse `src/lib/arbora-api/invoke.ts` and generated schemas under `WEBUI-API-R001`. Bind proposed `memory.files.list`, `memory.files.read` and `memory.files.save` exactly to `ARBORA-OPS-R024.4.1\u2013.3` and `.6`, backed by `EG-DURABLE-KERNEL-R085.1\u2013.4`. Preserve exact revision/digest, bytes, explicit absent-head creation and submit/resolve tags. Fetch content only through authorized read; restart refused/expired pagination explicitly. Saves bind idempotency identity to the exact request. Browser callers cannot submit observe_file or acknowledge_materialization. Generic memory.read/write and Memory-node CRUD are not versioned synchronization. | `src/__tests__/memory-files-ops.test.ts::test_generated_operations_preserve_preconditions` plus `e2e/memory-files-served.spec.ts::authorized_snapshots_and_cursor_refusal` (planned)",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 49
    },
    {
      "id": "WEBUI-APPS-R031.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** `MemoryView.tsx:439` currently lists Memory nodes at `:461` and writes legacy `/api/enhanced/graph/memory` routes. Navigation mounts the view from `nav-registry.ts:664`. Add the Files tab beside browse (`MemoryView.tsx:610`) using the named exports and canonical invoke adapter, whose endpoint is `POST /api/v1/ops/{op_id}`. Prove the real same-origin host reaches registered Arbora operations under `ARBORA-OPS-R024.4.2/.6`. Reuse the operation transport. Do not assume gatewayPost, which prefixes the graph facade, serves this endpoint. Cancel or discard obsolete responses after document, tenant, graph or principal changes; clear protected content on access loss. Missing registration/schema/host transport renders not available. | `src/__tests__/memory-files-wiring.test.tsx::test_files_tab_uses_canonical_invoke` plus `e2e/memory-files-served.spec.ts::navigation_reaches_registered_memory_operations` (planned)",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 50
    },
    {
      "id": "WEBUI-APPS-R031.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Render both immutable contents and digests only for an authorized conflict_retained outcome and authorized subsequent reads under `EG-DURABLE-KERNEL-R085.3/.5/.7` and `ARBORA-OPS-R024.4.3/.5`. Retention must survive restart without changing the accepted head; resolve requires current-head and retained-conflict references. Refused exposes only registered error code and request-local correlation. It withholds existence, revision, digest, conflict reference and stored receipt from errors, activity entries and stale UI state. Denied existing, absent and creation responses have equal disclosure. Retention failure must not claim conflict preservation. Recheck authorization on replay and conflict reads; clear protected versions on revocation. | `src/__tests__/memory-files-conflict.test.tsx::test_authorized_conflict_and_head_free_refusal` plus `e2e/memory-files-served.spec.ts::denied_reads_creates_and_replays_are_redacted` (planned)",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 51
    },
    {
      "id": "WEBUI-APPS-R031.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** The Files tab must show each file's `MemorySyncState` with a distinct label per state. A file with a missing state must read `not available`, never `in_sync`. | `src/__tests__/memory-files-state.test.tsx::test_each_sync_state_has_label`",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 52
    },
    {
      "id": "WEBUI-APPS-R031.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Authorized save results show the returned digest, verdict and time; authorized conflict views show both retained digests. Refused entries show only registered error code and request-local correlation. Never reconstruct missing metadata from an earlier authorized result. Client save success or local timestamps do not establish synchronization. | `src/__tests__/memory-files-evidence.test.tsx::test_save_evidence_respects_outcome_authority` (planned)",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 53
    },
    {
      "id": "WEBUI-APPS-R031.7",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Served end-to-end proof",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Served end-to-end proof.** Navigate the rendered Files tab through the actual WebUI host, Arbora registered operations and authenticated durable fixture engine. Prove authorized snapshot reads, cursor rejection, competing saves, retained conflicts across restart and exact-head resolution. Independently read accepted content and retained artifacts. Exercise denied existing/absent/create and replay after revocation with head-free UI/errors. Under `EG-DURABLE-KERNEL-R085.6/.8` and `ARBORA-OPS-R024.4.4\u2013.6`, delay a host acknowledgment. Observe a newer edit while the accepted head stays unchanged. Then deliver the old acknowledgment; it must not establish in_sync. Only an authenticated host acknowledgment matching current head, digest, observation generation and attempt establishes served in_sync. Pending edits/conflicts prevent it; missing evidence is unavailable. Browser acknowledgment attempts refuse. No mocked client, host handler, authorization, engine transport or persistence can satisfy this row. | `e2e/memory-files-served.spec.ts::file_conflict_preserves_both_versions` and `::stale_materialization_ack_never_shows_in_sync` (planned)",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 54
    },
    {
      "id": "WEBUI-APPS-R004.7",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evolution evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evolution evidence.** Extend the existing presentation rollup with the six clauses below. | Children `WEBUI-APPS-R004.7.1` through `WEBUI-APPS-R004.7.6` must pass their planned acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 63
    },
    {
      "id": "WEBUI-APPS-R004.7.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Use generated proposal identity, prompt revision, agent identity, progress state and source RunTrace references. Keep measured run metrics separate from decision calibration and coverage. | Planned `e2e/evolution-evidence-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 64
    },
    {
      "id": "WEBUI-APPS-R004.7.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Show each optimization proposal beside its exact source runs and recorded progress. Preserve pending review and propose-only state. Never promote a prompt from this view. | Planned `e2e/evolution-evidence-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 65
    },
    {
      "id": "WEBUI-APPS-R004.7.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Extend src/components/views/ObservabilityView.tsx beside the existing trace waterfall. Resolve proposal and trace references through typed Arbora reads. The existing runs.get and runs.metrics operations alone do not return the missing join. | Planned `e2e/evolution-evidence-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 66
    },
    {
      "id": "WEBUI-APPS-R004.7.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Missing proposal provenance, hidden traces or incompatible producer revisions show unavailable. Never infer progress from trace count or substitute WEBUI-DECIDE-R001 coverage. | Planned `e2e/evolution-evidence-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 67
    },
    {
      "id": "WEBUI-APPS-R004.7.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Bind the shown proposal revision, run IDs, trace digests, metric window and producer schema revision. Label incomplete source sets. | Planned `e2e/evolution-evidence-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 68
    },
    {
      "id": "WEBUI-APPS-R004.7.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Served acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Served acceptance.** A real served proposal must lead from the dashboard to its authorized stored traces and measured outcomes. Denied traces must reveal no metrics or proposal progress. | Planned `e2e/evolution-evidence-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 69
    },
    {
      "id": "WEBUI-APPS-R006.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Unified harness sessions",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Unified harness sessions.** Extend the existing presentation rollup with the six clauses below. | Children `WEBUI-APPS-R006.4.1` through `WEBUI-APPS-R006.4.6` must pass their planned acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 70
    },
    {
      "id": "WEBUI-APPS-R006.4.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Consume the versioned host supported-harness manifest and discovery status for every manifest entry. Session identity includes source harness, source session ID, tenant and authoritative indexed revision. | Planned `e2e/unified-harness-sessions-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 71
    },
    {
      "id": "WEBUI-APPS-R006.4.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** On first use, show discovery and synchronization for every declared supported harness. Browse and search the unified authorized index with cross-session cost summaries. | Planned `e2e/unified-harness-sessions-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 72
    },
    {
      "id": "WEBUI-APPS-R006.4.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Extend src/components/views/SessionsView.tsx and the R006 panel through the generated client. SDK discovers and syncs sources; EG owns indexes; Arbora serves bounded search and discovery progress. | Planned `e2e/unified-harness-sessions-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 73
    },
    {
      "id": "WEBUI-APPS-R006.4.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Unsupported harnesses, denied sources and partial synchronization remain individually visible. Never claim complete discovery from one source or replace missing costs with zero. | Planned `e2e/unified-harness-sessions-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 74
    },
    {
      "id": "WEBUI-APPS-R006.4.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Keep source coverage, sync cursor, index revision, query window, cost units and partial-result flags with every result page. Do not create a browser metric or session index. | Planned `e2e/unified-harness-sessions-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 75
    },
    {
      "id": "WEBUI-APPS-R006.4.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Served acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Served acceptance.** From a fresh browser, exercise every supported harness in the versioned owner manifest and search sessions without duplicate identities. Include at least two harnesses when the manifest contains two or more. Two examples alone do not prove manifest-wide coverage. Deny one source and prove visible partial coverage and no hidden-session disclosure. | Planned `e2e/unified-harness-sessions-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 76
    },
    {
      "id": "WEBUI-APPS-R004.8",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Indexed usage analysis",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Indexed usage analysis.** Extend the existing presentation rollup with the six clauses below. | Children `WEBUI-APPS-R004.8.1` through `WEBUI-APPS-R004.8.6` must pass their planned acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 77
    },
    {
      "id": "WEBUI-APPS-R004.8.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Consume generated model, project and agent identities, input/output token counts and total usage cost. Preserve owner-defined cached/reasoning categories, accounting units and missing-value semantics. | Planned `e2e/indexed-usage-analysis-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 78
    },
    {
      "id": "WEBUI-APPS-R004.8.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Filter indexed history by model, project, agent and time window. Show producer aggregates and pagination. Label cost per solved task separately from total usage and context peak/budget. | Planned `e2e/indexed-usage-analysis-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 79
    },
    {
      "id": "WEBUI-APPS-R004.8.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Extend src/components/views/ObservabilityView.tsx using the canonical operation adapter. EG returns indexed accounting and groups; Arbora serves the generated projection. Reuse existing model/task-class metrics. | Planned `e2e/indexed-usage-analysis-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 80
    },
    {
      "id": "WEBUI-APPS-R004.8.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Unknown project/agent attribution, incomplete token accounting and zero-solved abstention remain explicit. Missing, nonpositive or nonfinite owner latency limits make bounded analysis unavailable. Never total overlapping token categories or manufacture project costs in JavaScript. | Planned `e2e/indexed-usage-analysis-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 81
    },
    {
      "id": "WEBUI-APPS-R004.8.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Retain aggregate definition, currency, accounting version, observation interval, source coverage and index watermark. Bind measured latency to an owner-published positive finite limit, units, measurement boundary, dataset size and contract revision. | Planned `e2e/indexed-usage-analysis-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 82
    },
    {
      "id": "WEBUI-APPS-R004.8.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Served acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Served acceptance.** Serve indexed model/project/agent queries over the owner-declared dataset and check independent stored accounting totals. Compare measured latency with the revision-bound positive finite owner limit. Test incomplete attribution, denied scope and absent, invalid or exceeded limits. | Planned `e2e/indexed-usage-analysis-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 83
    },
    {
      "id": "WEBUI-APPS-R030.8",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Live graph convergence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Live graph convergence.** Extend the existing presentation rollup with the six clauses below. | Children `WEBUI-APPS-R030.8.1` through `WEBUI-APPS-R030.8.6` must pass their planned acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 84
    },
    {
      "id": "WEBUI-APPS-R030.8.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Consume authorized snapshot identity and ordered change events with graph incarnation, revision, cursor and event identity. A tombstone remains distinct from an inaccessible entity. | Planned `e2e/live-graph-convergence-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 85
    },
    {
      "id": "WEBUI-APPS-R030.8.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Apply committed changes to other connected clients without page refresh. Preserve selected nodes, camera and stable layout anchors during concurrent edits. | Planned `e2e/live-graph-convergence-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 86
    },
    {
      "id": "WEBUI-APPS-R030.8.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Attach the host subscription to src/components/views/GraphView.tsx and GraphCanvas. Use the existing host event transport with its generated contract; snapshot reads remain typed Arbora operations. | Planned `e2e/live-graph-convergence-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 87
    },
    {
      "id": "WEBUI-APPS-R030.8.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Deduplicate events and reject revision regressions. A gap or expired cursor requires an authorized fresh snapshot. Missing, nonpositive or nonfinite latency/layout bounds make bounded live mode unavailable. Revocation clears protected graph state and stops the subscription. | Planned `e2e/live-graph-convergence-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 88
    },
    {
      "id": "WEBUI-APPS-R030.8.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Retain snapshot and event revisions and measure commit-to-visible latency. Bind latency and layout measurements to owner-published positive finite limits, metric definitions, units, workload and contract revision. Layout metrics must cover readability and frame timing; retain selection continuity evidence. | Planned `e2e/live-graph-convergence-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 89
    },
    {
      "id": "WEBUI-APPS-R030.8.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Served acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Served acceptance.** Two real browsers edit concurrently and converge before refresh within the owner latency limit. Compare layout measurements against owner limits under the declared workload. Test missing, invalid and exceeded bounds. Exercise duplicated, delayed and reordered events, reconnect and revocation; compare both views with independent durable readback. | Planned `e2e/live-graph-convergence-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 90
    },
    {
      "id": "WEBUI-APPS-R001.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Retrieval quality comparison",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Retrieval quality comparison.** Extend the existing presentation rollup with the six clauses below. | Children `WEBUI-APPS-R001.1.1` through `WEBUI-APPS-R001.1.6` must pass their planned acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 91
    },
    {
      "id": "WEBUI-APPS-R001.1.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Consume EG evaluation identity, corpus revision, relevance-label revision, algorithm version, k, hits-at-k and context-span offsets. Keep result ranking separate from relevance labels. | Planned `e2e/retrieval-quality-comparison-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 92
    },
    {
      "id": "WEBUI-APPS-R001.1.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Compare algorithms side by side for the same evaluation input. Show hits-at-k, safe n-gram highlights and context search with source references. | Planned `e2e/retrieval-quality-comparison-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 93
    },
    {
      "id": "WEBUI-APPS-R001.1.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Extend src/components/table-explorer/TryItPanel.tsx through typed Arbora evaluation reads. Its current SQL search legs and local rrfFuse do not establish authoritative evaluation metrics. | Planned `e2e/retrieval-quality-comparison-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 94
    },
    {
      "id": "WEBUI-APPS-R001.1.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Missing labels, incompatible corpus revisions, invalid offsets and denied context show unavailable. Never compute quality from rank alone or treat local fusion as an EG retrieval decision. | Planned `e2e/retrieval-quality-comparison-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 95
    },
    {
      "id": "WEBUI-APPS-R001.1.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Show numerator, denominator, k, corpus/label revisions, algorithm settings and query identity. Escape source text before highlighting and bound returned context spans. | Planned `e2e/retrieval-quality-comparison-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 96
    },
    {
      "id": "WEBUI-APPS-R001.1.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Served acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Served acceptance.** A real served fixed corpus and labels must produce independently checked hits-at-k for two algorithms. Test unlabeled data, cross-revision comparison and hostile highlight text without fake metrics. | Planned `e2e/retrieval-quality-comparison-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 97
    },
    {
      "id": "WEBUI-APPS-R001.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Bounded large-data charts",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Bounded large-data charts.** Extend the existing presentation rollup with the six clauses below. | Children `WEBUI-APPS-R001.2.1` through `WEBUI-APPS-R001.2.6` must pass their planned acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 98
    },
    {
      "id": "WEBUI-APPS-R001.2.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Consume EG viewport bounds, pixel dimensions, bin revision, source cardinality, count/extrema and selection references. Scatter bins and line continuity have distinct generated result variants. | Planned `e2e/bounded-large-data-charts-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 99
    },
    {
      "id": "WEBUI-APPS-R001.2.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Pan, zoom and select scatter and line data with at least one billion source points. Render screen-bounded results, preserving gaps and producer-defined selection semantics. | Planned `e2e/bounded-large-data-charts-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 100
    },
    {
      "id": "WEBUI-APPS-R001.2.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Extend the existing shared Atlas chart renderer used by finance. Send viewport queries through typed Arbora reads; EG performs binning and selection against its indexed source. | Planned `e2e/bounded-large-data-charts-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 101
    },
    {
      "id": "WEBUI-APPS-R001.2.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Reject stale viewport replies and invalid selection tokens. Refuse rendering when owner bin/byte limits or viewport dimensions are absent, nonpositive, nonfinite or schema-invalid. Never download the complete source, interpolate across declared gaps or report exact point selection from a bin summary. | Planned `e2e/bounded-large-data-charts-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 102
    },
    {
      "id": "WEBUI-APPS-R001.2.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Enforce owner-published positive finite bin-count and response-byte limits before rendering. Their versioned formulas must bind viewport dimensions and chart variant, independently of total source cardinality. Count limits use integers. Record formula revision, viewport dimensions, source cardinality, bins and bytes. | Planned `e2e/bounded-large-data-charts-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 103
    },
    {
      "id": "WEBUI-APPS-R001.2.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Served acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Served acceptance.** Serve a real indexed source of at least one billion points. Pan, zoom and select both chart variants. Measure bins and bytes against the owner viewport formulas and limits. Test absent, zero, negative, nonfinite and exceeded limits, stale responses and denied selections. | Planned `e2e/bounded-large-data-charts-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 104
    },
    {
      "id": "WEBUI-APPS-R001.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Column vector controls",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Column vector controls.** Extend the existing presentation rollup with the six clauses below. | Children `WEBUI-APPS-R001.3.1` through `WEBUI-APPS-R001.3.6` must pass their planned acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 105
    },
    {
      "id": "WEBUI-APPS-R001.3.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Consume stable table/column IDs, schema revision, ColumnVectorBinding, embedder identity/dimension and versioned index statistics. Advice and binding state remain distinct. | Planned `e2e/column-vector-controls-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 106
    },
    {
      "id": "WEBUI-APPS-R001.3.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Offer explicit per-column bind/unbind controls and show index readiness, indexed-row count and owner-reported size/freshness. Read the authoritative binding after each accepted mutation. | Planned `e2e/column-vector-controls-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 107
    },
    {
      "id": "WEBUI-APPS-R001.3.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Extend src/components/views/TableExplorerView.tsx and src/components/table-explorer/SchemaTree.tsx. Use generated Arbora list, stats and mutation bindings to existing EG column operations. | Planned `e2e/column-vector-controls-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 108
    },
    {
      "id": "WEBUI-APPS-R001.3.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Deny unauthorized mutations before effects. Stale schema, unsupported type or unavailable embedder leaves the binding unchanged. Advice must never activate a toggle automatically. | Planned `e2e/column-vector-controls-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 109
    },
    {
      "id": "WEBUI-APPS-R001.3.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Bind mutation verdict and readback to column ID, schema revision, embedder and index generation. Missing statistics remain unavailable, never fabricated zeros. | Planned `e2e/column-vector-controls-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 110
    },
    {
      "id": "WEBUI-APPS-R001.3.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Served acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Served acceptance.** Use an authenticated browser to bind a text column and read actual index statistics through Arbora and EG. Deny a writer and submit a stale schema; prove unchanged bindings and no embedding effects. | Planned `e2e/column-vector-controls-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 111
    },
    {
      "id": "WEBUI-APPS-R001.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Remote editor compatibility",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Remote editor compatibility.** Extend the existing presentation rollup with the six clauses below. | Children `WEBUI-APPS-R001.4.1` through `WEBUI-APPS-R001.4.6` must pass their planned acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 112
    },
    {
      "id": "WEBUI-APPS-R001.4.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Consume a versioned host compatibility manifest naming editor protocol, extension IDs/versions, supported capabilities and keybinding profiles. Keep remote workspace identity scoped to the session. | Planned `e2e/remote-editor-compatibility-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 113
    },
    {
      "id": "WEBUI-APPS-R001.4.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Expose supported extension installation/use and keyboard shortcuts within the existing embedded workbench. Resolve shortcut focus between shell and editor without silently swallowing commands. | Planned `e2e/remote-editor-compatibility-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 114
    },
    {
      "id": "WEBUI-APPS-R001.4.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Reuse src/components/views/WorkspaceIDEView.tsx at /ide and its editor-context bridge. Arbora owns workbench hosting and extension admission; the browser must not install a second editor. | Planned `e2e/remote-editor-compatibility-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 115
    },
    {
      "id": "WEBUI-APPS-R001.4.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Unsupported extensions, incompatible versions and denied workspace access show explicit refusals. Untrusted workspaces cannot gain host privileges or access another workspace through the bridge. | Planned `e2e/remote-editor-compatibility-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 116
    },
    {
      "id": "WEBUI-APPS-R001.4.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Record workbench and manifest versions, extension verdicts, keybinding profile and workspace revision. Keep service credentials out of frame messages and browser state. | Planned `e2e/remote-editor-compatibility-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 117
    },
    {
      "id": "WEBUI-APPS-R001.4.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Served acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Served acceptance.** Open an authenticated remote workspace and exercise one declared extension and shortcut in a real browser. Test incompatible extensions, reserved shortcut focus and cross-workspace access denial. | Planned `e2e/remote-editor-compatibility-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 118
    },
    {
      "id": "WEBUI-APPS-R001.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Meeting transcripts and summaries",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Meeting transcripts and summaries.** Extend the existing presentation rollup with the six clauses below. | Children `WEBUI-APPS-R001.5.1` through `WEBUI-APPS-R001.5.6` must pass their planned acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 119
    },
    {
      "id": "WEBUI-APPS-R001.5.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Consume meeting ID, segment ID, sequence, correction revision, timestamps and finalization state. Summary requests bind final transcript revision, admitted provider identity and local/hosted execution class. | Planned `e2e/meeting-transcripts-and-summaries-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 120
    },
    {
      "id": "WEBUI-APPS-R001.5.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Show live partial/final segments and ordered corrections. After meeting finalization, let the user select an available local or hosted summary provider and request a summary. | Planned `e2e/meeting-transcripts-and-summaries-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 121
    },
    {
      "id": "WEBUI-APPS-R001.5.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Add the meeting consumer through existing AppSurface and host transport. SDK owns live transcription/provider transport; EG owns context and summary admission; Arbora serves their generated contracts. | Planned `e2e/meeting-transcripts-and-summaries-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 122
    },
    {
      "id": "WEBUI-APPS-R001.5.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Keep src/hooks/useVoiceDictation.ts single-shot behavior honest. Denied capture, missing streams, sequence gaps or absent providers remain distinct. Never silently move a local-provider request to a hosted service. | Planned `e2e/meeting-transcripts-and-summaries-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 123
    },
    {
      "id": "WEBUI-APPS-R001.5.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Bind summary content and citations to final transcript revision, provider/model revision and admitted execution receipt. Corrections invalidate stale summaries visibly. | Planned `e2e/meeting-transcripts-and-summaries-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 124
    },
    {
      "id": "WEBUI-APPS-R001.5.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Served acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Served acceptance.** In a real browser, receive segments and corrections, finalize, then select local and hosted providers separately. Check actual provider routing and summary provenance. Denied egress and stale transcript requests produce no summary effects. | Planned `e2e/meeting-transcripts-and-summaries-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 125
    },
    {
      "id": "WEBUI-APPS-R001.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Bookmark knowledge views",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Bookmark knowledge views.** Extend the existing presentation rollup with the six clauses below. | Children `WEBUI-APPS-R001.6.1` through `WEBUI-APPS-R001.6.6` must pass their planned acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 126
    },
    {
      "id": "WEBUI-APPS-R001.6.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Consume bookmark/source IDs, ingestion provenance, semantic-index revision, authorized relationships and bounded export schema. Reuse the existing SDK bookmark envelopes and extraction vocabulary. | Planned `e2e/bookmark-knowledge-views-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 127
    },
    {
      "id": "WEBUI-APPS-R001.6.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Search and filter bookmarks by meaning; render their authorized relationships as an interactive mindmap. Offer CSV and JSON export for the selected authorized query snapshot. | Planned `e2e/bookmark-knowledge-views-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 128
    },
    {
      "id": "WEBUI-APPS-R001.6.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Use existing AppSurface, GraphView/GraphCanvas and generated Arbora reads/export delivery. EG owns semantic indexing and relationship decisions. Do not duplicate SDK offline ingestion in the browser. | Planned `e2e/bookmark-knowledge-views-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 129
    },
    {
      "id": "WEBUI-APPS-R001.6.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Denied nodes, stale cursors and unavailable semantic indexes reveal no hidden counts or relationships. Never fetch embedded URLs or run imported instructions. Exports must not widen the selected scope. | Planned `e2e/bookmark-knowledge-views-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 130
    },
    {
      "id": "WEBUI-APPS-R001.6.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Bind search, mindmap and exports to one query/snapshot revision, source provenance, format version and content digest. Preserve unknown metadata and escape CSV formula-like cells safely. | Planned `e2e/bookmark-knowledge-views-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 131
    },
    {
      "id": "WEBUI-APPS-R001.6.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Served acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Served acceptance.** Import bookmarks through SDK R005.7\u2013.12, then use real browser semantic filtering, mindmap and CSV/JSON export. Independently compare stored records and downloaded bytes; deny one bookmark and prove exclusion everywhere. | Planned `e2e/bookmark-knowledge-views-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 132
    },
    {
      "id": "WEBUI-APPS-R001.7",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Sandboxed design artifacts",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Sandboxed design artifacts.** Extend the existing presentation rollup with the six clauses below. | Children `WEBUI-APPS-R001.7.1` through `WEBUI-APPS-R001.7.6` must pass their planned acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 133
    },
    {
      "id": "WEBUI-APPS-R001.7.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Consume host-discovered executable identities and capabilities, EG-admitted skill sequence and immutable generated artifact references. Bind artifacts to execution, skill and source revisions. | Planned `e2e/sandboxed-design-artifacts-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 134
    },
    {
      "id": "WEBUI-APPS-R001.7.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Let the user select available coding-agent capabilities for a design flow and inspect skill-transformation progress. Render the resulting artifact only through the existing sandboxed frame. | Planned `e2e/sandboxed-design-artifacts-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 135
    },
    {
      "id": "WEBUI-APPS-R001.7.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Reuse src/components/mcp/McpAppFrame.tsx and McpAppHost.tsx. Arbora discovers PATH executables and hosts effects; EG selects composition; AU runs admitted skills. The browser never probes PATH or chooses policy. | Planned `e2e/sandboxed-design-artifacts-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 136
    },
    {
      "id": "WEBUI-APPS-R001.7.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Unavailable executables or refused transformations produce no success preview. Validate artifact digest, origin and message schema. Block parent DOM, credential access, popups and unauthorized network/navigation. | Planned `e2e/sandboxed-design-artifacts-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 137
    },
    {
      "id": "WEBUI-APPS-R001.7.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Show execution and transformation references with the rendered digest. Preserve producer refusal and cancellation; frame rendering alone is not proof of a completed transformation. | Planned `e2e/sandboxed-design-artifacts-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 138
    },
    {
      "id": "WEBUI-APPS-R001.7.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Served acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Served acceptance.** Serve an admitted design flow through actual host discovery and execution to the sandbox frame. Compare the artifact digest with durable provenance; test substituted artifacts and hostile scripts without parent or network escape. | Planned `e2e/sandboxed-design-artifacts-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 139
    },
    {
      "id": "WEBUI-APPS-R004.9",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evolution projection dashboard",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evolution projection dashboard.** Extend the existing presentation rollup with the six clauses below. | Children `WEBUI-APPS-R004.9.1` through `WEBUI-APPS-R004.9.6` must pass their planned acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 140
    },
    {
      "id": "WEBUI-APPS-R004.9.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Consume EG-owned proposal identity and progress state. Measured run metrics remain separate from calibration/coverage. | Planned `e2e/evolution-projection-dashboard-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 141
    },
    {
      "id": "WEBUI-APPS-R004.9.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Show optimization progress linked to runs and their source proposals. Show unavailable and refused states distinctly. | Planned `e2e/evolution-projection-dashboard-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 142
    },
    {
      "id": "WEBUI-APPS-R004.9.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Extend ObservabilityView with EG projection read and Arbora operation transport. | Planned `e2e/evolution-projection-dashboard-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 143
    },
    {
      "id": "WEBUI-APPS-R004.9.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Missing or incompatible progress revisions show unavailable. Never substitute decision calibration. | Planned `e2e/evolution-projection-dashboard-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 144
    },
    {
      "id": "WEBUI-APPS-R004.9.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Bind shown runs to exact proposal revision and progress generation. | Planned `e2e/evolution-projection-dashboard-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 145
    },
    {
      "id": "WEBUI-APPS-R004.9.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Hot-path proof",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Hot-path proof.** Dashboard test links measured runs to proposals. Test unavailable/refused states in real served environment. | Planned `e2e/evolution-projection-dashboard-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 146
    },
    {
      "id": "WEBUI-APPS-R030.9",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Graph changes stream to connected clients",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Graph changes stream to connected clients.** Extend the existing presentation rollup with the six clauses below. | Children `WEBUI-APPS-R030.9.1` through `WEBUI-APPS-R030.9.6` must pass their planned acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 147
    },
    {
      "id": "WEBUI-APPS-R030.9.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Consume ordered change events with graph incarnation, revision and cursor. Stream identity remains distinct from snapshot. | Planned `e2e/graph-changes-stream-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 148
    },
    {
      "id": "WEBUI-APPS-R030.9.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Apply committed changes immediately to other authenticated clients without refresh. Preserve selection and layout under concurrent edits. | Planned `e2e/graph-changes-stream-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 149
    },
    {
      "id": "WEBUI-APPS-R030.9.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Define versioned graph-change subscription contract under EG/Arbora. Attach to existing GraphView and GraphCanvas consumers. | Planned `e2e/graph-changes-stream-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 150
    },
    {
      "id": "WEBUI-APPS-R030.9.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Dropped events, expired cursors and revocation produce distinct unavailable states. Reject stale revisions. | Planned `e2e/graph-changes-stream-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 151
    },
    {
      "id": "WEBUI-APPS-R030.9.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Retain event/snapshot revisions and measure commit-to-visible latency bounds. | Planned `e2e/graph-changes-stream-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 152
    },
    {
      "id": "WEBUI-APPS-R030.9.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Hot-path proof",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Hot-path proof.** Two real browsers edit concurrently and see changes without refresh. Test reconnect, ordering and durable readback in served environment. | Planned `e2e/graph-changes-stream-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 153
    },
    {
      "id": "WEBUI-APPS-R032",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evolution projection dashboard",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evolution projection dashboard.** Relate runs and measured metrics to prompt optimization progress and proposal source traces. | Children `WEBUI-APPS-R032.1` through `WEBUI-APPS-R032.6` must pass.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 154
    },
    {
      "id": "WEBUI-APPS-R032.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** EG proposal/progress identity separate from calibration/coverage. | Planned `e2e/evolution-dashboard-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 155
    },
    {
      "id": "WEBUI-APPS-R032.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Dashboard shows exact proposal beside measured runs and progress. | Planned `e2e/evolution-dashboard-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 156
    },
    {
      "id": "WEBUI-APPS-R032.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Extend ObservabilityView with generated read contract. Arbora serves operation. | Planned `e2e/evolution-dashboard-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 157
    },
    {
      "id": "WEBUI-APPS-R032.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Missing proposal/progress or incompatible revisions show unavailable. | Planned `e2e/evolution-dashboard-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 158
    },
    {
      "id": "WEBUI-APPS-R032.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Bind shown runs to proposal revision and progress state. | Planned `e2e/evolution-dashboard-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 159
    },
    {
      "id": "WEBUI-APPS-R032.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Hot-path proof",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Hot-path proof.** Real served test links runs to exact proposal and unavailable/refused states. | Planned `e2e/evolution-dashboard-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 160
    },
    {
      "id": "WEBUI-APPS-R033",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Large-data chart binning and selection",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Large-data chart binning and selection.** Billion-point scatter plus line selection with viewport bounds and payload limits. | Children `WEBUI-APPS-R033.1` through `WEBUI-APPS-R033.6` must pass.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 161
    },
    {
      "id": "WEBUI-APPS-R033.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** EG viewport-bin request/response and bounded payload semantics. Selection distinct from counts. | Planned `e2e/large-chart-binning-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 162
    },
    {
      "id": "WEBUI-APPS-R033.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Extend renderer with scatter/line interaction. Pan, zoom, select billion-point source. | Planned `e2e/large-chart-binning-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 163
    },
    {
      "id": "WEBUI-APPS-R033.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Extend shared Atlas renderer. Arbora serves EG bin/select operations. | Planned `e2e/large-chart-binning-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 164
    },
    {
      "id": "WEBUI-APPS-R033.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Invalid selection or exceeded payload limits remain unavailable. | Planned `e2e/large-chart-binning-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 165
    },
    {
      "id": "WEBUI-APPS-R033.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Record viewport bounds, source cardinality, bin/byte counts against limits. | Planned `e2e/large-chart-binning-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 166
    },
    {
      "id": "WEBUI-APPS-R033.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Hot-path proof",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Hot-path proof.** Real billion-point source, pan/zoom/select checks against owner limits. | Planned `e2e/large-chart-binning-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 167
    },
    {
      "id": "WEBUI-APPS-R034",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Remote editor extension compatibility",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Remote editor extension compatibility.** Product-neutral versioned extension/keyboard-shortcut support. | Children `WEBUI-APPS-R034.1` through `WEBUI-APPS-R034.6` must pass.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 168
    },
    {
      "id": "WEBUI-APPS-R034.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Versioned host compatibility manifest with extension IDs/versions and keybinding profiles. | Planned `e2e/editor-compatibility-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 169
    },
    {
      "id": "WEBUI-APPS-R034.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Support extension installation/use and shortcuts in existing workbench. | Planned `e2e/editor-compatibility-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 170
    },
    {
      "id": "WEBUI-APPS-R034.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Reuse WorkspaceIDEView and editor-context bridge. Arbora hosts workbench. | Planned `e2e/editor-compatibility-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 171
    },
    {
      "id": "WEBUI-APPS-R034.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Unsupported/incompatible extensions show explicit refusal. | Planned `e2e/editor-compatibility-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 172
    },
    {
      "id": "WEBUI-APPS-R034.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Bind extension/shortcut verdicts to manifest and workspace revision. | Planned `e2e/editor-compatibility-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 173
    },
    {
      "id": "WEBUI-APPS-R034.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Hot-path proof",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Hot-path proof.** Real browser extension/shortcut test in authenticated workspace. | Planned `e2e/editor-compatibility-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 174
    },
    {
      "id": "WEBUI-APPS-R035",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Live meeting transcript and summary",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Live meeting transcript and summary.** Transcript production and provider-selected summary. | Children `WEBUI-APPS-R035.1` through `WEBUI-APPS-R035.6` must pass.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 175
    },
    {
      "id": "WEBUI-APPS-R035.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Meeting/segment/sequence and correction revision. Provider selection class distinct. | Planned `e2e/meeting-transcript-summary-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 176
    },
    {
      "id": "WEBUI-APPS-R035.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Show live segments and ordered corrections. Let user select local/hosted provider. | Planned `e2e/meeting-transcript-summary-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 177
    },
    {
      "id": "WEBUI-APPS-R035.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** SDK owns live transport/provider. EG owns summary decision. Arbora serves operations. | Planned `e2e/meeting-transcript-summary-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 178
    },
    {
      "id": "WEBUI-APPS-R035.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Keep single-shot behavior honest. Denied/missing remain distinct. | Planned `e2e/meeting-transcript-summary-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 179
    },
    {
      "id": "WEBUI-APPS-R035.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Bind summary to final transcript and provider revision. | Planned `e2e/meeting-transcript-summary-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 180
    },
    {
      "id": "WEBUI-APPS-R035.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Hot-path proof",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Hot-path proof.** Real served segments, finalization, local/hosted selection. | Planned `e2e/meeting-transcript-summary-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 181
    },
    {
      "id": "WEBUI-APPS-R036",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Bookmark semantic search and export",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Bookmark semantic search and export.** Knowledge-base semantic search and mindmap/CSV/JSON export. | Children `WEBUI-APPS-R036.1` through `WEBUI-APPS-R036.6` must pass.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 182
    },
    {
      "id": "WEBUI-APPS-R036.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** EG bookmark semantics and meaning-based index. Authorized relationships separate. | Planned `e2e/bookmark-search-export-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 183
    },
    {
      "id": "WEBUI-APPS-R036.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Search/filter bookmarks by meaning. Render mindmap and export CSV/JSON. | Planned `e2e/bookmark-search-export-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 184
    },
    {
      "id": "WEBUI-APPS-R036.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Use SDK R005.7-.12 producer definitions. EG owns semantic index. Arbora bounded reads/export. | Planned `e2e/bookmark-search-export-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 185
    },
    {
      "id": "WEBUI-APPS-R036.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Denied/unavailable semantic index shows unavailable. Export scope not widened. | Planned `e2e/bookmark-search-export-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 186
    },
    {
      "id": "WEBUI-APPS-R036.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Bind search/mindmap/export to query revision and semantic index generation. | Planned `e2e/bookmark-search-export-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 187
    },
    {
      "id": "WEBUI-APPS-R036.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Hot-path proof",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Hot-path proof.** Real served semantic filtering, mindmap, CSV/JSON from ingested bookmarks. | Planned `e2e/bookmark-search-export-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 188
    },
    {
      "id": "WEBUI-APPS-R037",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Design flow agent discovery and sandbox",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Design flow agent discovery and sandbox.** Discover coding agents and apply skill transformations. | Children `WEBUI-APPS-R037.1` through `WEBUI-APPS-R037.6` must pass.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 189
    },
    {
      "id": "WEBUI-APPS-R037.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Host discovered executor identity. EG-admitted skill sequence and artifact reference. | Planned `e2e/design-agent-discovery-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 190
    },
    {
      "id": "WEBUI-APPS-R037.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Select available coding agent. Inspect skill transformation progress. Render artifact. | Planned `e2e/design-agent-discovery-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 191
    },
    {
      "id": "WEBUI-APPS-R037.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Reuse McpAppFrame/McpAppHost. Arbora discovers PATH. EG selects skills. AU runs. | Planned `e2e/design-agent-discovery-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 192
    },
    {
      "id": "WEBUI-APPS-R037.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Unavailable/refused transformations show unavailable. Validate digest and schema. | Planned `e2e/design-agent-discovery-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 193
    },
    {
      "id": "WEBUI-APPS-R037.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Show execution and transformation reference with rendered digest. | Planned `e2e/design-agent-discovery-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 194
    },
    {
      "id": "WEBUI-APPS-R037.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Hot-path proof",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Hot-path proof.** Real served discovery, execution, sandbox isolation. | Planned `e2e/design-agent-discovery-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 195
    },
    {
      "id": "WEBUI-APPS-R001.8",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Interactive code explanations",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Interactive code explanations.** Extend the existing presentation rollup with the six clauses below. | Children `WEBUI-APPS-R001.8.1` through `WEBUI-APPS-R001.8.6` must pass their planned acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 196
    },
    {
      "id": "WEBUI-APPS-R001.8.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Model",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Model.** Consume query/repository revision, ordered walkthrough steps, source spans, self-contained artifact manifest/digest and execution-note sequence references. Keep explanation notes distinct from private model reasoning. | Planned `e2e/interactive-code-explanations-served.spec.ts::test_model`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 197
    },
    {
      "id": "WEBUI-APPS-R001.8.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Behavior",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Behavior.** Show a linear source-linked walkthrough and interactive explanation artifact for the same query output. Show ordered graph-persisted execution notes with provenance links. | Planned `e2e/interactive-code-explanations-served.spec.ts::test_behavior`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 198
    },
    {
      "id": "WEBUI-APPS-R001.8.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Wiring.** Reuse existing code navigation and the R001.7 frame boundary. Arbora serves generated explanation output and note subscriptions; EG owns source and provenance identity; AU emits admitted execution notes. | Planned `e2e/interactive-code-explanations-served.spec.ts::test_wiring`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 199
    },
    {
      "id": "WEBUI-APPS-R001.8.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Refusal",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Refusal.** Missing source revisions, invalid manifests, stale notes and denied source spans show unavailable. Reject unmanifested external artifact dependencies; never synthesize a successful explanation from a generic span tree. | Planned `e2e/interactive-code-explanations-served.spec.ts::test_refusal`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 200
    },
    {
      "id": "WEBUI-APPS-R001.8.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Evidence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Evidence.** Bind walkthrough, artifact bytes and note stream to one query and repository revision. Label disconnected streams and retain sequence/correction identities without exposing hidden source content. | Planned `e2e/interactive-code-explanations-served.spec.ts::test_evidence`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 201
    },
    {
      "id": "WEBUI-APPS-R001.8.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Served acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Served acceptance.** From a real served code query, inspect source-linked steps and load the artifact with external network blocked. Independently read graph notes and compare artifact bytes; reject wrong-revision outputs and unauthorized source links. | Planned `e2e/interactive-code-explanations-served.spec.ts::test_served_acceptance`; the owning contract in plan.md and test-spec.md defines the served proof.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 202
    },
    {
      "id": "WEBUI-APPS-R045",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Complete capability and leaf census",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [
        "src/components/__tests__/AppWorkspaceEntry.test.tsx:1",
        "src/lib/__tests__/nav-registry.test.ts:193"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Complete capability and leaf census.** Record the user job, actual operation, role and source/fixture/served/unavailable evidence class in the existing coverage inventory. One registry lists every registered route, entity/detail destination, actionable form/control and backend capability. Derive it from existing owners. Each entry binds stable ID, parent relationships, component, role/tenant scope, manual interaction and semantic WebMCP action. It also binds an operation or local/unavailable disposition, existing spec ID and acceptance evidence. Unclassified or orphaned leaves fail CI. Missing upstream capability remains visible and unavailable, never a fabricated success. | Planned: Registry completeness, orphan/duplicate IDs, dynamic detail fixtures and new-route/action omission tests.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 209
    },
    {
      "id": "WEBUI-APPS-R046",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "One semantic workspace navigation state",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**One semantic workspace navigation state.** The tree/map, accessible list, breadcrumbs and direct search share stable destination/entity IDs and revisioned state. Route, selection, inspector and focus use that same state. Every permitted branch tip resolves to a native interactive surface at arbitrary depth without obligatory ancestor traversal. Existing deep links remain valid. Canonical entities can have multiple relationship paths without duplication. Browser Back/Forward restores semantic selection and focus; transient camera frames do not pollute history. | Planned: All-leaf reachability through keyboard, touch, direct URL, search and WebMCP; repeated Back/Forward and shared-entity path tests.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 210
    },
    {
      "id": "WEBUI-APPS-R047",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Native WebMCP action equivalence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [
        "src/components/views/__tests__/OperateCatalogPanel.test.tsx:239"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Native WebMCP action equivalence.** Manual buttons, keyboard commands, typed form edits and semantic WebMCP tools use the same validated action dispatcher and visible state. Expose bounded authorized leaf discovery, navigation, state read, selection, focus, inspector expansion, form editing, supported undo/redo and effect requests. No arbitrary selector click, JavaScript evaluation, unconstrained URL or automatic backend-tool mirroring. Form editing is distinct from submission. All published actions are inventoried, with explicit human-only security exceptions instead of hidden automation gaps. | Planned: Parameterized manual/keyboard/tool equivalence for every inventoried action; same state, validation, permission, confirmation and outcome, including denial/cancellation.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 211
    },
    {
      "id": "WEBUI-APPS-R048",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "WebMCP lifecycle and authority preservation",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [
        "e2e/proposal-review.browser.ts:20",
        "src/lib/webmcp/__tests__/attended-arm.test.ts:130"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**WebMCP lifecycle and authority preservation.** Keep existing schema/catalog digests, bounded results, secure-context capability detection, permission policy, route/generation scope, attended control and identity retirement. Unsupported browsers retain complete manual features with honest unavailable tooling. Sensitive actions use the same Arbora preview/confirm/step-up receipt as manual use; navigation or form editing cannot grant authority. Reject stale identity, context revision, replay, cross-origin, wrong object and mismatched confirmation. Propagate cancellation and report committed/unknown outcomes honestly. | Planned: Native supported-browser registration/execution plus unsupported fallback; stale generation, hidden-page retirement, replay, revocation, cross-origin and cancellation adversarial tests. Partial source repair: `navigation-lifecycle.test.tsx` checks retained registration callbacks; this structural document fixture does not qualify native-browser support or close the row. Additional source coverage in `provider.test.tsx` checks hidden-document registration retirement and recovery. `execution-lifetime.test.tsx` covers cooperative caller and registration cancellation through the mounted provider. Native-browser and served authority acceptance remain open.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 212
    },
    {
      "id": "WEBUI-APPS-R049",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Preserve every feature through the Arbora redesign",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [
        "213863471869",
        "292e0c183590",
        "79eaa4c330f8"
      ],
      "verified_by": [
        "src/components/__tests__/AppWorkspaceEntry.test.tsx:1",
        "src/components/query-validation/__tests__/QueryValidationLens.test.tsx:113",
        "src/components/query-validation/__tests__/QueryValidationLens.test.tsx:33",
        "src/components/query-validation/__tests__/request-ownership.test.ts:110",
        "src/components/query-validation/__tests__/request-ownership.test.ts:137"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Preserve every feature through the Arbora redesign.** Reorganize existing surfaces into one persistent workspace with contextual panes rather than replacing them with a landing catalogue. Preserve capabilities and compatible deep links, not standalone feature pages. Replace page-per-feature layouts with three persistent contexts: Work, Explore and Operate. Keep required public/legal/contact content. Keep identity, chat, graph/Atlas, workflow, admin, Markets and dashboards. Retain empty/error/denied states. User-facing branding is Arbora. Technical identifiers retain the component identity under R039/R043. These include package, import, image, storage, consent, environment and WebMCP identifiers. No mobile feature subset is allowed. | Planned: Children R049.1 and R049.2 retain capability parity and prove consolidated design acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 213
    },
    {
      "id": "WEBUI-APPS-R050",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Composed deployment and shared-backend acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Composed deployment and shared-backend acceptance.** Qualify the installed WebUI with real Arbora served operations and the intended EG/AU/SDK providers. Local fixtures or simulated model output are explicitly labelled and cannot count as real provider acceptance. Validate explicit no-auth, built-in EG and external OIDC modes independently under WEBUI-IDENTITY-R003.1\u2013R003.3 and common R010 lifecycle. Never fall back from broken auth or relax network policy implicitly. Record exact component revisions, operation availability, browser versions and evidence. Shared execution, history, approval, model, host and metric semantics stay upstream and match TUI consumers. | Planned: Installed-host browser journeys against real Arbora. Include unavailable-provider cases, authenticated tenant isolation, permitted no-auth tests and shared contract parity receipts.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 214
    },
    {
      "id": "WEBUI-APPS-R046.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Registered navigation source slice",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "c15d7b58e1f5"
      ],
      "verified_by": [
        "src/components/__tests__/WorkspaceNavigation.test.tsx:1",
        "src/lib/__tests__/workspace-navigation.test.tsx:1"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Registered navigation source slice.** Reuse the route registry for role-filtered branch and list controls. Share existing same-origin, registered-route and role validation with WebMCP navigation. Preserve native links and modified clicks. Subscribe to URL changes without discarding query state. Restore focus after closing a branch disclosure. This slice does not qualify camera zoom or dynamic entity leaves. | Source tests in `src/lib/__tests__/workspace-navigation.test.tsx` and `src/components/__tests__/WorkspaceNavigation.test.tsx` cover dispatcher refusals, URL subscription and registered controls. Synthetic popstate is not real browser history acceptance.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 216
    },
    {
      "id": "WEBUI-APPS-R046.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Complete semantic navigation acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Complete semantic navigation acceptance.** Retain all parent R046 obligations beyond the registered source slice. Qualify dynamic deepest leaves, shared-entity paths, semantic zoom, real browser Back/Forward, selection and focus restoration. Test keyboard, touch and mobile layouts against the actual rendered workspace. | Planned: Run the parent browser and all-leaf matrix on the installed candidate. Source fixtures alone do not satisfy this child.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 217
    },
    {
      "id": "WEBUI-APPS-R049.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Three-context migration without feature loss",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Three-context migration without feature loss.** Replace standalone app pages with Work, Explore and Operate workspace contexts. Each legacy destination maps to context, entity/task, relationship path, lens and optional inspector state. Old URLs remain typed compatibility adapters, not separate page layouts. Preserve permissions, capabilities, actions and required legal content. Retire redundant navigation groups and duplicate shells. Keep every feature available on mobile. | Planned: Cover every baseline destination and dynamic leaf in the migration matrix. Reject orphan aliases, lost actions and extra standalone app layouts.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 219
    },
    {
      "id": "WEBUI-APPS-R049.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Measured ground-up redesign acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [
        "93401c34a695",
        "ac86f2de9817",
        "d18ec8c78341"
      ],
      "verified_by": [
        "e2e/native-chat.browser.ts:2"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Measured ground-up redesign acceptance.** Present Chat, Knowledge and Tools as the primary jobs, with Chat & tasks, Knowledge and Tools & connections page labels. Explain giving agents work and reviewing outcomes in plain language. The default composer requires zero disclosure activations. Demo record titles are not product features. Compare actual old and redesigned task journeys using identical fixtures. Show three primary contexts, not feature-page tabs disguised as branches. Direct search reaches every permitted leaf. Users reach a task surface within three navigation activations from its context root. Exclude typing, policy confirmations and the task itself from this count. Visible context, selected entity and primary actions remain anchored during content scrolling. Record scrolling distance and viewport changes for representative tasks. Demonstrate reduced navigation effort without clipping content or hiding features. | Planned: Publish before/after navigation counts, scroll distances, layout captures and task results. Test keyboard, touch, arbitrary aspect ratios and native WebMCP against the real workspace. Existing navigation or object-link slices alone cannot close this row.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 220
    },
    {
      "id": "WEBUI-APPS-R049.1.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Retained Explore source slice",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "c767b6a5b17f"
      ],
      "verified_by": [
        "src/components/workspace/__tests__/ExploreShell.test.tsx:3",
        "src/components/workspace/__tests__/ExploreWorkspace.test.tsx:4",
        "src/lib/webmcp/__tests__/provider.test.tsx:287"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Retained Explore source slice.** Provide one read-only collection/entity composition at the opt-in workspace destination. Retain the query and results while selecting entities and relationship/history tools. Share typed destination validation between manual navigation and mounted WebMCP. Reject malformed state and insufficient roles before navigation. Defer protected reads while identity resolves. Keep bounded published evidence context separate from the complete user query. Show missing data and retryable errors honestly. | Mounted and pure source tests in `ExploreWorkspace.test.tsx` in the workspace component tests. These cover retained state, typed tools, bounded context, role/loading refusals and error states. Synthetic history events do not prove browser Back/Forward.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 222
    },
    {
      "id": "WEBUI-APPS-R049.1.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Complete contextual migration acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [
        "e2e/workspace-catalog.browser.ts:17",
        "e2e/workspace-task-lifecycle.spec.ts:400",
        "src/components/__tests__/AppWorkspaceEntry.test.tsx:1",
        "src/components/__tests__/AppWorkspaceEntry.test.tsx:203",
        "src/components/views/__tests__/ArboraReadinessView.test.tsx:1"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Complete contextual migration acceptance.** Retain every R049.1 obligation beyond the opt-in read-only Explore source slice. Migrate all baseline capabilities and compatible addresses into the three-context workspace. Retire standalone legacy layouts only after capability and authority acceptance. Qualify actual browser history, focus, keyboard, touch, mobile resizing and native WebMCP. Include producer-bound nested execution navigation and separate hierarchy/dependency edges under the execution-explorer contract in plan.md. Check real served providers separately from browser fixtures. | Planned: Complete the 58-destination matrix and dynamic leaves. Publish installed-workspace evidence and capability parity. The isolated Explore proof cannot close this child.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 223
    },
    {
      "id": "WEBUI-APPS-R049.1.3",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Retained Work source slice",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "14c637ce2d13",
        "158591a6bcef",
        "1dca15b53d26",
        "213863471869",
        "38c8f13794ee"
      ],
      "verified_by": [
        "e2e/conversation-first.browser.ts:1",
        "e2e/native-chat.browser.ts:1",
        "e2e/work-task-refresh.browser.ts:1",
        "e2e/workspace-task-lifecycle.spec.ts:1",
        "e2e/workspace-task-lifecycle.spec.ts:132"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Retained Work source slice.** Foreground the single existing conversation and composer on the default Work route. Keep task, trace and saved-conversation inspection secondary and reachable, including direct links. Distinguish this presentation from the standalone /chat route so task content is not hidden. Compose a conversation selector and one existing Chat instance with independent served task and trace reads. Use task list/get and trace/node adapters. Let the caller refresh a selected task and request cancellation through the existing Arbora operation. While a selected-task read is pending, withdraw cached status, output, references and cancellation eligibility, including retained review callbacks. Keep the refresh control mounted and preserve keyboard focus while retiring reviews. Prove focus with native-browser deferred reads, not only DOM identity. Refuse repeated keyboard and script activation while refresh or cancellation is pending. Restore them only from the renewed matching response; refusal or navigation must not revive stale evidence. Bind visible cancellation review to the selected task and admission. Refuse duplicate submissions and stale reviews. Report request acceptance without inventing a terminal task state. Distinguish authorization refusal from an unknown outcome after a lost response. Share typed URL and tool navigation with manual controls. Anchor the shared context rail while retaining selected conversation and investigation state. Keep the primary conversation visible in native flow on the ordinary Chat & tasks landing. Task/editor deep links retain their intended primary content. Other contexts expose a quiet Agent header entry. Use a bounded expandable dock and reachable composer, not an overlay or equal-width default split. Narrow layouts retain a compact composer and current status, with explicit transcript and message-option expansion. Navigation updates existing page context without retargeting the conversation or authorizing actions. Do not infer conversation-to-task, task-to-trace or trace-to-subagent/evidence associations. Trace spans are not subagents. R049.1.2 retains the missing producer-bound association and nested-navigation acceptance. | Source tests in `WorkWorkspace.test.tsx`, `WorkTaskControls.test.tsx`, `WorkWorkspaceAdmission.test.tsx` and the shared shell/context-rail suites. These cover composition, navigation, task requests and admission changes. Real provider associations and full browser acceptance remain open.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 225
    },
    {
      "id": "WEBUI-APPS-R049.1.4",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Retained Operate discovery source slice",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "c767b6a5b17f"
      ],
      "verified_by": [
        "src/components/workspace/__tests__/ExploreShell.test.tsx:1",
        "src/components/workspace/__tests__/OperateWorkspace.test.tsx:1",
        "src/components/workspace/__tests__/WorkspaceContextRail.test.tsx:1",
        "src/lib/__tests__/operate-workspace.test.ts:1"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Retained Operate discovery source slice.** Keep caller-visible fleet children beside capability details in one composition. Use only canonical fleet status and unfiltered catalog listing. Do not prime named-server probes, load tools or perform operations. Share strict server/item/filter state between native links, manual controls and WebMCP. Preserve filter focus. Bound and label partial pagination. Scope cached results and tool handles to observed identity admission changes. Keep gateway discovery authorization authoritative. | Source tests in `OperateWorkspace.test.tsx` and `operate-workspace.test.ts` cover mounted selection, refusal, focus, observed-session isolation, pagination and validated gateway decoding. No installed-provider, anonymous-mode or native-browser acceptance is claimed.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 227
    },
    {
      "id": "WEBUI-APPS-R049.1.5",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Inspect the current response task",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "c767b6a5b17f"
      ],
      "verified_by": [
        "e2e/workspace-layout.spec.ts:1",
        "src/__tests__/Chat.conversation-identity.test.tsx:2",
        "src/components/workspace/__tests__/CurrentResponseTaskLink.test.tsx:1"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Inspect the current response task.** Show a task link only for the latest non-streaming assistant response with explicit matching conversation metadata. Use one typed destination for native links, manual controls and WebMCP. Reject malformed identifiers, stale handles and insufficient roles. Do not decode trace references or grant task authority. | Source tests in `CurrentResponseTaskLink.test.tsx` and `Chat.conversation-identity.test.tsx` cover bounded navigation and response retirement. Live task retrieval and native-provider acceptance remain open under R049.1.2.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 228
    },
    {
      "id": "WEBUI-APPS-R049.1.6",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Bounded workspace command search",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "67f357a475cc"
      ],
      "verified_by": [
        "src/components/workspace/__tests__/ExploreWorkspace.test.tsx:2",
        "src/components/workspace/__tests__/WorkspaceCommands.test.tsx:1"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Bounded workspace command search.** Search the three migrated context roots and loaded caller-visible Explore results. Use native links and the same typed dispatcher for manual and semantic tool selection. Retire catalog handles on owner, role, availability and location changes. Keep executable operations and legacy page routes outside this catalog. | Source tests in `WorkspaceCommands.test.tsx` cover search, permission filtering, lifecycle refusal and keyboard access. Full destination migration and native browser acceptance remain open under R049.1.2.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 230
    },
    {
      "id": "WEBUI-APPS-R046.2.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Consent prompt lifecycle source repair",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "c767b6a5b17f"
      ],
      "verified_by": [
        "src/components/__tests__/ConsentBanner.test.tsx:204",
        "src/components/__tests__/ConsentBanner.test.tsx:23",
        "src/components/__tests__/WorkspaceNavigation.test.tsx:55"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Consent prompt lifecycle source repair.** Keep the authenticated workspace prompt in normal flow below navigation. Hide it after a choice or explicit dismissal without a permanent floating control. Dismissal never grants optional consent. Manage choices through the public Privacy page and workspace menu. Preserve dismissal and explicit denial across route remounts when browser storage fails. Ignore unrelated storage events when retaining a failed-denial fallback. Focus Home after a workspace prompt choice or dismissal. Focus the surviving Disable optional control after revocation. | Source tests cover prompt dismissal, explicit choices, management access and storage failure. Check that dismissal grants nothing and unrelated session-storage events cannot restore an old grant. Repeat rendered mobile clearance, focus and remount checks on the exact candidate. This repair does not qualify the complete navigation matrix.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 232
    },
    {
      "id": "WEBUI-APPS-R046.2.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Remaining complete navigation qualification",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [
        "e2e/workspace-branches.browser.ts:2",
        "e2e/workspace-catalog.browser.ts:16",
        "src/components/views/__tests__/OperateCatalogPanel.test.tsx:208",
        "src/components/views/__tests__/OperateCatalogPanel.test.tsx:268",
        "src/components/views/__tests__/OperateCatalogPanel.test.tsx:291"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Remaining complete navigation qualification.** Retain every R046.2 obligation beyond the consent placement source repair. Qualify dynamic deepest leaves, shared-entity paths, semantic zoom and actual browser history. Preserve selection and focus through keyboard, touch and mobile journeys. | Partial delivery: loaded context, fleet/capability and trace/node branches share the command catalog and typed dispatcher. Rendered tests cover retirement and focus; Chromium fixtures cover branch/search selection and real Back/Forward. Complete deepest-leaf, shared-entity and installed-browser qualification remains open. Synthetic responses do not prove served authority.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 233
    },
    {
      "id": "WEBUI-APPS-R049.1.7",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Retained query and validation lenses",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "5b2573128bf2"
      ],
      "verified_by": [
        "src/components/workspace/__tests__/ExploreQueryWorkspace.test.tsx:3",
        "src/lib/__tests__/explore-lens-state.test.ts:1"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Retained query and validation lenses.** Integrate existing query and validation controls into Explore without a legacy page shell. Preserve evidence selection and collection search across typed lens navigation. Keep drafts outside URLs. Require maintainer access for query and validation. Retire controller state on owner or evidence-context changes. Lens navigation must not submit requests. | Source tests in `ExploreQueryWorkspace.test.tsx` and `explore-lens-state.test.ts` cover composition, drafts, permissions and typed navigation. Provider and browser acceptance remain separate under R049.1.2.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 235
    },
    {
      "id": "WEBUI-APPS-R049.1.8",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Attended query editor tools",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "422f1629932f"
      ],
      "verified_by": [
        "src/components/workspace/__tests__/ExploreQueryWorkspace.test.tsx:146",
        "src/components/workspace/__tests__/QueryEditorTools.test.tsx:1"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Attended query editor tools.** Expose bounded local draft edits and a request for visible submission review. Neither tool may call a provider. Bind review to the exact draft, source type and workspace context. Refuse stale reviews and script-dispatched confirmation. This tool-requested path submits only through the visible confirmation control. Existing manual submit controls keep their behavior. Keep backend permissions authoritative. | Source tests in `QueryEditorTools.test.tsx` and `ExploreQueryWorkspace.test.tsx` cover local effects, byte limits, retirement and the trusted-event default. Accepted-path unit tests use an explicit test gesture. Real browser pointer and keyboard checks remain required. Direct governed execution and full tool parity remain open under R049.1.2.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 237
    },
    {
      "id": "WEBUI-APPS-R049.1.9",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Loaded Work and Operate commands",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "beb333e7f687"
      ],
      "verified_by": [
        "src/components/workspace/__tests__/LoadedWorkspaceCommands.test.tsx:2"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Loaded Work and Operate commands.** Extend command search with loaded conversations, tasks, independent traces and selected-trace nodes. Include confirmed fleet children and their loaded capabilities. Keep the existing typed navigation dispatchers. Bound each group and omit invalid destinations. Withdraw failed discoveries and retire stale command handles. Do not add execution or infer associations. | Source tests in `LoadedWorkspaceCommands.test.tsx` cover mounted adapters, native links, keyboard opening, semantic selection, refusal and bounded groups. Full migration, live providers and native browser coverage remain open under R049.1.2.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 239
    },
    {
      "id": "WEBUI-APPS-R049.1.10",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Message an active child explicitly",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Message an active child explicitly.** Extend `WorkWorkspace.tsx` and the existing Chat composer through the shared adapter. Graph inspection must not retarget Chat. Activate `Message active child` only for a valid owner-issued target and `can_message_active`. Preserve the root draft. Report accepted, rejected and unknown outcomes without automatic resend. Depends-on: ARBORA-RELEASE-R003.4.12, WEBUI-API-R011.3. | Planned `WorkExecutionControls.test.tsx::active_child_target` proves explicit target selection, exact delivery binding, stale-capability refusal and duplicate protection.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 292
    },
    {
      "id": "WEBUI-APPS-R049.1.11",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Continue a completed child separately",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Continue a completed child separately.** Use the existing composer with the producer's continuation binding and `can_continue_completed`. Show `Continue completed child` as a separate action. Preserve completed history and adopt only the returned continuation identity. Never create an unbound agent or silently use root chat. Depends-on: ARBORA-RELEASE-R003.4.13, WEBUI-API-R011.3. | Planned `WorkExecutionControls.test.tsx::completed_child_continuation` checks lifecycle races, returned identity, unsupported capability and preserved root draft.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 293
    },
    {
      "id": "WEBUI-APPS-R049.1.12",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Prove served targeted interaction",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Prove served targeted interaction.** Enter the real Work route and Chat composer against the released producer. Qualify active-child delivery, completed-child continuation and authorized cancellation with two principals. Keep R049.1.2 full navigation acceptance separate. | Planned `e2e/execution-explorer-served.spec.ts::targeted_controls` proves nested child isolation, reconnect reconciliation, revocation and cancellation acknowledgement. Synthetic browser fixtures cannot close this row.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 294
    },
    {
      "id": "WEBUI-APPS-R049.1.13",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Flat dependency view source slice",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "12b5f5624953",
        "19b439519a22",
        "47885260902d",
        "5069ca94e71e",
        "bb56d874ef78"
      ],
      "verified_by": [
        "e2e/execution-graph.browser.ts:1",
        "src/components/workspace/__tests__/WorkExecutionGraph.test.tsx:1",
        "src/lib/__tests__/execution-graph.test.ts:1"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Flat dependency view source slice.** Extend the existing selected Work task with a read-only flat dependency diagram and equivalent keyboard-accessible list. Use only its explicit Arbora run binding and root task ID. Render producer-declared edges and observed evidence, with incomplete lifecycle and unobserved labels. Withdraw stale data on refresh, selection, identity change or denied access. Keep node labels plain text and never retarget Chat. | Source fixtures in `WorkExecutionGraph.test.tsx` and `execution-graph.test.ts` cover bound reads, fan-out/fan-in, hostile labels, cancellation and refusal. This source-only row excludes actual browser rendering, installed producers and nested execution, which remain under R049.1.2.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 300
    },
    {
      "id": "WEBUI-APPS-R049.2.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Shared shell and Explore presentation slice",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "38c8f13794ee",
        "73051bf582bd",
        "93401c34a695",
        "a6f6ee3874b2",
        "ac86f2de9817"
      ],
      "verified_by": [
        "e2e/canopy-glass.browser.ts:4",
        "e2e/conversation-first.browser.ts:1",
        "e2e/operate-usage.browser.ts:1",
        "e2e/workspace-catalog.browser.ts:87",
        "src/__tests__/Chat.conversation-identity.test.tsx:870"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Shared shell and Explore presentation slice.** Privacy management belongs inside Settings, including retained private routes. No route mounts an automatic privacy prompt. Keep the public policy page reachable. Existing consent values, explicit opt-in, refusal and revocation remain unchanged. First-use examples only fill the existing composer and never submit. Apply the accepted materials to real context content without restarting the theme. Keep navigation browsing and expert query/schema tools secondary. Knowledge search failures remain unavailable, not empty or fabricated results. Apply Liquid Glass through the existing shared workspace and retained Explore collection/detail journey. Keep one thin full-width floating header, a quieter resizable map, dominant evidence center and optional real selected-evidence detail. Keep a contextual Agent entry with in-place expansion, no dedicated bottom bar, floating bubble or empty default third column. Preserve native links, existing routes, identity admission, retained chat/query state and validated manual/WebMCP dispatch. Do not add a second router, fabricated evidence or backend authority. | Planned: rendered shell/Explore tests for query, selection, detail tools, return, errors, cancellation focus and responsive continuity. Native history/tool checks remain distinct from mounted fixtures. This bounded slice does not close R049.2, complete migration under R049.1.2, or served acceptance under R050.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 306
    },
    {
      "id": "WEBUI-APPS-R049.2.2",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Remaining measured redesign acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Remaining measured redesign acceptance.** Complete every original R049.2 obligation beyond the bounded shell/Explore source slice. Include complete Work/Operate composition and identical-fixture before/after tasks. Record navigation counts, scrolling distances, all-leaf search and actual layout evidence. Preserve keyboard, touch and native WebMCP qualification. Do not clip content or hide features to improve measurements. | Planned: publish baseline/redesigned task results and complete native interaction evidence under the original R049.2 acceptance criteria. Scoped presentation tests cannot close this row.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 315
    },
    {
      "id": "WEBUI-APPS-R049.1.14",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Native read-only graph lens source slice",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "57c4a7bee78b",
        "fc03d1807ace"
      ],
      "verified_by": [
        "e2e/explore-graph.browser.ts:1",
        "src/components/__tests__/AppWorkspaceEntry.test.tsx:238",
        "src/components/knowledge-graph/__tests__/GraphCanvas.engineMode.test.tsx:158",
        "src/components/workspace/__tests__/ExploreGraphLens.test.tsx:1",
        "src/components/workspace/__tests__/WorkspaceCommands.test.tsx:206"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Native read-only graph lens source slice.** Compose GraphCanvas and existing validated read facades within Explore. Do not mount the legacy Graph page shell. Retain independent graph selection/type and evidence collection/entity/tool state. Preserve query drafts and results across adjacent selection and browser history. Provide keyboard-accessible sampled adjacency and a plain-text inspector. Keep existing route admission. Infer no schema/manage capability. Expose no edit controls or requests. Withdraw data on denied refresh, obsolete requests and identity changes. Preserve sample limits, partial results and unavailable/error provenance. | Mounted graph-lens, state and reader fixtures pair with the existing canvas regression suite. This source-only child extends R030, R046.2.2, R047, R048 and API R008.2. Original owners retain browser/provider acceptance, engine edits, Cypher/MAGMA migration and old-route adaptation. R049.1.2 retains complete feature parity.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 321
    },
    {
      "id": "WEBUI-APPS-R049.1.15",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Retained contextual workflow plan source",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "c2c6edadaea6",
        "f005d430aee0",
        "fc03d1807ace"
      ],
      "verified_by": [
        "src/components/__tests__/AppWorkspaceEntry.test.tsx:238",
        "src/components/__tests__/ResponsiveLimitation.test.tsx:54",
        "src/components/views/__tests__/WorkflowEditorView.test.tsx:1",
        "src/components/workspace/__tests__/WorkWorkflowLens.test.tsx:1",
        "src/components/workspace/__tests__/WorkWorkspace.test.tsx:1"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Retained contextual workflow plan source.** Absorb the existing workflow serializer, palette, inspector and nodes into an administrator-only Work lens without nested legacy page chrome. Keep selected workflow identity, local draft, capability availability and validation through task inspection and return without retargeting conversation or task. Retire admission-owned state and fence stale read responses. Provide keyboard add/select/connect controls and narrow/short layout source for the palette and inspector. Label the in-memory preview and unavailable Save/Run authority honestly. | Mounted `WorkWorkflowLens.test.tsx`, `WorkflowEditorView.test.tsx` and typed Work-state fixtures cover retention, identity withdrawal, malformed/denied reads and keyboard alternatives. This bounded source row excludes served save/run, complete tool parity, real-browser accessibility and full migration; those remain under R049.1.2, R047, R048, WEBUI-DESIGN-R004.1.2/R004.2.2 and WEBUI-API-R009.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 328
    },
    {
      "id": "WEBUI-APPS-R049.1.16",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Absorb existing usage analysis into Operate",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "c2c6edadaea6",
        "c707d71df0fe",
        "fc03d1807ace"
      ],
      "verified_by": [
        "src/components/__tests__/AppWorkspaceEntry.test.tsx:238",
        "src/components/workspace/__tests__/LoadedWorkspaceCommands.test.tsx:204",
        "src/components/workspace/__tests__/OperateUsageLens.test.tsx:1",
        "src/components/workspace/__tests__/WorkspaceCommands.test.tsx:206",
        "src/components/workspace/__tests__/WorkspaceCommands.test.tsx:262"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Absorb existing usage analysis into Operate.** Extract the current usage controller and shell-free KPI, breakdown, tool, activity, session, timeline, search and trace panels. Preserve explicit tenant, supported filters, selected session and return context across Health, Services and Usage. Retire protected data on owner, scope, request or selection changes. Denied and malformed responses must not become measured zero or stale success. Reuse existing API bindings. Do not infer analytics from tenant totals or activate effects. | Source tests cover typed history, mounted panels, reader refusal and admin tenant isolation. Include unavailable producers, hostile numeric data and reordered responses. A separate browser scenario retains keyboard, touch, 320px, short viewport and Back/Forward qualification. This bounded source row does not close R004.8, R006.4, R047, R049.1.2, WEBUI-API-R009/R011 or WEBUI-DESIGN-R004.1.2/R004.2.2; all broad criteria and installed-producer acceptance remain.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 334
    },
    {
      "id": "WEBUI-APPS-R005.4.1",
      "kind": "requirement",
      "parent": "WEBUI-APPS",
      "source": "specs/arbora-app-surface/status.json",
      "title": "Requests without interaction modes",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "38c8f13794ee",
        "68ad43e0f7a9",
        "dc30239b2938"
      ],
      "verified_by": [
        "src/__tests__/Chat.conversation-identity.test.tsx:1",
        "src/__tests__/Chat.slash-commands.test.tsx:1",
        "src/__tests__/Chat.swe-mode.test.tsx:1"
      ],
      "parent_title": "WEBUI-APPS \u2014 Arbora browser shell and app surfaces",
      "definition": "**Requests without interaction modes.** The existing composer accepts ordinary requests without Ask, Plan or Code selection, persisted request-mode state or a mode payload. Handling belongs to the existing served agent path, not browser classification. Delete local /mode switching and its help entry. Preserve model choice, developer workspace routing, identity admission and explicit action approvals. | Mounted tests cover stale stored selections, normal submission without mode, absent selector/help and unchanged developer workspace controls.",
      "definition_source": "specs/arbora-app-surface/requirements.md",
      "definition_line": 336
    },
    {
      "id": "WEBUI-DESIGN",
      "kind": "spec",
      "parent": null,
      "source": "specs/browser-design-system/status.json",
      "title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "document": "specs/browser-design-system/spec.md",
      "component": "Unassigned",
      "code_refs": [
        {
          "declared_in": "specs/browser-design-system/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/App.tsx:375",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/App.tsx#L375"
        },
        {
          "declared_in": "specs/browser-design-system/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/App.tsx:499",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/App.tsx#L499"
        },
        {
          "declared_in": "specs/browser-design-system/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/Chat.tsx",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/Chat.tsx"
        },
        {
          "declared_in": "specs/browser-design-system/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/nav-registry.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/nav-registry.ts"
        },
        {
          "declared_in": "specs/browser-design-system/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "requirements.md",
          "repository": "Knuckles-Team/overstory",
          "role": "documentation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/browser-design-system/requirements.md"
        },
        {
          "declared_in": "specs/browser-design-system/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/assets/fonts/InterVariable.woff2",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/assets/fonts/InterVariable.woff2"
        },
        {
          "declared_in": "specs/browser-design-system/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/components/ui/select.tsx",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/components/ui/select.tsx"
        },
        {
          "declared_in": "specs/browser-design-system/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/index.css",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/index.css"
        },
        {
          "declared_in": "specs/browser-design-system/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/csp-nonce.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/csp-nonce.ts"
        },
        {
          "declared_in": "specs/browser-design-system/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "the app-surface inventory",
          "repository": "Knuckles-Team/overstory",
          "role": "documentation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/arbora-app-surface/workspace-coverage.md"
        }
      ],
      "relations": [],
      "plan_diagrams": [],
      "unparsed_references": []
    },
    {
      "id": "WEBUI-DESIGN-R001",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Design guidance distilled into component system and skills",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "1509bdb19bd4",
        "cb7ca4afa907"
      ],
      "verified_by": [
        "src/components/ui/__tests__/no-duplicate-skill-names.test.ts:23"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Design guidance distilled into component system and skills.** agent-webui distills license-reviewed accessibility, responsive, interaction and visual guidance from outside sources into the `src/components/ui/` primitives, the `src/index.css` tokens, and the public universal design and accessibility skills, ranking keyboard and screen-reader failures highest in its review rubric. The assimilation never installs duplicate skill names or copies unlicensed skill text. It adds no remote critique service or new telemetry. | Source diff and dependency audit confirm no duplicate skill names, unlicensed text, or new telemetry were introduced.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 5
    },
    {
      "id": "WEBUI-DESIGN-R002",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Design tokens documented with contrast targets",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [
        "12b5f5624953",
        "2c9874c2a559",
        "2d3f1b884e39",
        "46b60b8fbd48",
        "93401c34a695"
      ],
      "verified_by": [
        "src/__tests__/design-tokens.test.ts:114",
        "src/__tests__/design-tokens.test.ts:58",
        "src/components/__tests__/ThemeProvider.test.tsx:1"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Design tokens documented with contrast targets.** The component system documents semantic color, typography, spacing, focus, density and state tokens from `src/index.css`. Each token includes light and dark contrast targets. | Token audit and snapshot tests confirm documented tokens match `src/index.css` and meet the stated contrast targets.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 6
    },
    {
      "id": "WEBUI-DESIGN-R003",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Controls have accessible names and visible focus",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "a4c402f68f1b",
        "cb7ca4afa907"
      ],
      "verified_by": [
        "e2e/accessibility.spec.ts:17"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Controls have accessible names and visible focus.** Every interactive control exposes an accessible name and a visible focus indicator, repeated filter rows label each individual clause distinctly, and dialogs trap keyboard focus while open and restore it to the triggering element on close. | Keyboard end-to-end tests cover the chat, Atlas and an operational form flow.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 7
    },
    {
      "id": "WEBUI-DESIGN-R004",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Responsive layout covers 320px mobile through desktop",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [
        "12b5f5624953",
        "47885260902d",
        "660d19fa4d36",
        "93401c34a695",
        "ac86f2de9817"
      ],
      "verified_by": [
        "e2e/accessibility.spec.ts:17"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Responsive layout covers 320px mobile through desktop.** Layout patterns render correctly from 320px mobile width through desktop without horizontal overflow. All required actions remain reachable. | Viewport matrix tests with screenshot diffing across the mobile-to-desktop range.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 8
    },
    {
      "id": "WEBUI-DESIGN-R005",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Gesture actions have alternatives and respect reduced motion",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [
        "2d3f1b884e39",
        "79dcd50ca4d4",
        "a4c402f68f1b"
      ],
      "verified_by": [
        "src/__tests__/design-tokens.test.ts:75"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Gesture actions have alternatives and respect reduced motion.** Every gesture-driven action also has a click or keyboard alternative, and when `prefers-reduced-motion` is set, nonessential animation is disabled while status feedback remains visible. | Touch-alternative and reduced-motion end-to-end tests.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 9
    },
    {
      "id": "WEBUI-DESIGN-R006",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Status states are distinguishable by text, not only color",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "0267b63100e5",
        "2d3f1b884e39",
        "a4c402f68f1b",
        "cde8dccc2b1b",
        "fb030df6518e"
      ],
      "verified_by": [
        "src/components/ui/__tests__/status-message.test.tsx:18",
        "src/components/ui/__tests__/status-message.test.tsx:47",
        "src/components/ui/__tests__/status-message.test.tsx:63",
        "src/components/ui/__tests__/status-message.test.tsx:75"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Status states are distinguishable by text, not only color.** A failed knowledge/task read is not an empty result; unreported execution or connection state stays unknown. Loading, empty, stale, denied, error, success and pending states each render with distinct text in addition to color, and a long-running operation can be interrupted where doing so is safe. | Rendered tests against fixtures for each named state.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 10
    },
    {
      "id": "WEBUI-DESIGN-R007",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "No duplicate primitives or unsolicited telemetry introduced",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "2d3f1b884e39",
        "f31dead073e1",
        "ff3b1cc28028"
      ],
      "verified_by": [
        "src/components/ui/__tests__/no-duplicate-primitives.test.ts:35",
        "src/components/ui/__tests__/no-duplicate-primitives.test.ts:49"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**No duplicate primitives or unsolicited telemetry introduced.** No new component duplicates an existing UI primitive, no unsolicited telemetry is added, and any idea drawn from a third-party source is paraphrased in original wording only after its license has been reviewed and cleared. | Source diff and dependency audit confirm no duplicate primitives, no new telemetry, and license clearance for paraphrased content.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 11
    },
    {
      "id": "WEBUI-DESIGN-R008",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Fonts load from the same origin",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "03cc841a38ce",
        "1906c2636f82",
        "cb7ca4afa907"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Fonts load from the same origin.** The interface ships its Inter font files inside the build and declares them with `@font-face` and a system fallback stack. The stylesheet imports no remote font or stylesheet. | A browser probe under the served policy records no `font-src` or `style-src-elem` violation for a remote URL.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 12
    },
    {
      "id": "WEBUI-DESIGN-R009",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Runtime style elements satisfy the strict policy",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "03cc841a38ce",
        "1906c2636f82",
        "cb7ca4afa907"
      ],
      "verified_by": [
        "agent/agent_webui/__tests__/test_security_boundaries.py:274"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Runtime style elements satisfy the strict policy.** The server issues a fresh nonce for each HTML document and adds it to `style-src` and `style-src-elem`. Each library that inserts a `<style>` element at runtime carries that nonce or ships its rules as a bundled stylesheet. The policy never gains `'unsafe-inline'` for style elements. | Server tests prove a fresh nonce per document. A browser probe under the served policy records no inline `style-src-elem` violation.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 13
    },
    {
      "id": "WEBUI-DESIGN-R002.1",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Purposeful density and Arbora visual hierarchy",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [
        "12b5f5624953",
        "93401c34a695",
        "ac86f2de9817"
      ],
      "verified_by": [
        "e2e/workspace-density.spec.ts:1",
        "src/components/__tests__/AppWorkspaceEntry.test.tsx:203",
        "src/components/workspace/__tests__/WorkspaceFrame.test.tsx:1"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Purposeful density and Arbora visual hierarchy.** Use shared semantic spacing/type/color/state tokens and space-efficient, visibly labelled context navigation. Provide a primary working surface and optional related inspector/run tray. Wide views add useful panes rather than stretched prose; narrow views reflow to focused panes with persistent context. Tree/branch styling conveys relationship or navigation, not decoration. Never shrink text to fit or clip content to minimize scrolling. | Partial delivery: container-width pane composition in Work, Explore and Operate; native context disclosures retain mounted state. `e2e/workspace-density.spec.ts` exercises keyboard disclosure, draft retention and the viewport matrix. Screenshot/task-completion and full acceptance review remain open.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 14
    },
    {
      "id": "WEBUI-DESIGN-R004.1",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Full mobile and arbitrary-aspect feature parity",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [
        "12b5f5624953",
        "19b439519a22",
        "47885260902d",
        "93401c34a695",
        "ac86f2de9817"
      ],
      "verified_by": [
        "src/components/query-validation/__tests__/QueryValidationLens.test.tsx:93"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Full mobile and arbitrary-aspect feature parity.** Every route and action, including the currently mobile-unsupported cohort, remains available at all supported viewport sizes. Reflow tables, editors, charts, workflows and administration into usable focused views instead of hiding controls or forcing a desktop-only gate. No viewport/device category reduces authorization or feature coverage. Wide data may use an explicitly labelled scrollable region with keyboard access, not whole-page horizontal overflow. | Planned: All-route/action coverage at 320 CSS px, narrow/tall, low-height landscape, 4:3,16:9,32:9 and generated intermediate dimensions; no unsupported/mobile-only omission.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 15
    },
    {
      "id": "WEBUI-DESIGN-R004.2",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Resize, fold and visual viewport continuity",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [
        "d18ec8c78341"
      ],
      "verified_by": [
        "e2e/native-chat.browser.ts:2"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Resize, fold and visual viewport continuity.** Preserve selection, navigation history, unsent input, safe drafts, task progress and focus context. Cover resize, orientation, fold/unfold and on-screen keyboard changes. Respect safe areas and visual viewport; do not assume named device resolutions or fixed aspect ratios. Browser zoom to 200 percent preserves readable content and reachable actions. | Partial delivery: retained workspace viewport sizing and deferred focus reveal. Query journeys cover editing, pending responses and result inspection across native resize and simulated keyboard occlusion. A native 200-percent Chromium query journey checks keyboard access and retained edits. Full fold, native keyboard, browser zoom, stream and graph acceptance remain open.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 16
    },
    {
      "id": "WEBUI-DESIGN-R004.2.1",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Bounded workspace viewport continuity",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "38c8f13794ee",
        "4d0f9693e45d",
        "dc30239b2938",
        "f91c2a3a3446"
      ],
      "verified_by": [
        "e2e/native-chat.browser.ts:2",
        "e2e/workspace-viewport.browser.ts:1",
        "e2e/workspace-zoom.browser.ts:1",
        "src/components/query-validation/__tests__/QueryValidationLens.test.tsx:71",
        "src/components/workspace/__tests__/WorkspaceViewport.test.tsx:1"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Bounded workspace viewport continuity.** Retain the shared visual-viewport sizing, safe-area padding and deferred focus reveal. Preserve query editing, pending responses, result inspection and one native assistant across workspace navigation and resize. Keep drafts, selection, conversation identity, execution-mode controls and approval review. Compact chat uses its intrinsic height and ordinary outer scrolling; expanded transcripts retain their own scrollport. | Source and synthetic browser tests cover the current Work, Explore, Operate and retained-chat slice. Native Chromium query zoom is separate evidence. This child does not accept the remaining device and all-surface obligations in R004.2.2.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 17
    },
    {
      "id": "WEBUI-DESIGN-R004.2.2",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Complete resize and device continuity acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Complete resize and device continuity acceptance.** Prove every remaining R004.2 obligation across applicable surfaces, not only the bounded workspace fixtures. Cover resize, orientation, fold/unfold, native on-screen keyboards, safe areas and visual-viewport changes. Preserve selection, navigation history, unsent input, safe drafts, task progress and focus during stream and graph journeys. Prove readable content and reachable actions at 200-percent browser zoom without relying on named device resolutions or fixed aspect ratios. | Planned: exact-candidate browser and native-device evidence for the complete matrix, including all outstanding stream, graph, fold and keyboard cases. Existing synthetic fixtures and the bounded child cannot close this row.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 18
    },
    {
      "id": "WEBUI-DESIGN-R005.1",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Accessible interruptible semantic zoom",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [
        "e2e/workspace-branches.browser.ts:1",
        "src/components/workspace/__tests__/WorkspaceCommandBranches.test.tsx:1",
        "src/components/workspace/__tests__/WorkspacePaletteFocus.test.tsx:1"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Accessible interruptible semantic zoom.** Semantic zoom reveals readable native DOM surfaces, not merely scaled screenshots or tiny text. Map/list, breadcrumbs, search and explicit controls offer equivalent non-gesture access to every leaf. Transitions are interruptible and preserve focus; reduced motion removes camera travel while retaining state feedback. Touch/coarse targets are at least 44 CSS px unless an existing stricter requirement applies. | Partial delivery: loaded workspace branch browsing uses native DOM, explicit controls and breadcrumbs without camera travel. Rendered and Chromium journeys cover branch/search equivalence, focus, immediate ancestor return and resized layouts. Full deepest-leaf, touch and manual screen-reader acceptance remain open.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 20
    },
    {
      "id": "WEBUI-DESIGN-R010",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Measured performance under representative load",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Measured performance under representative load.** Declare reference device/browser, network, fixture cardinality, capture method and budgets before acceptance. Representative journeys target p75 INP at most 200 ms, LCP at most 2.5 s and CLS at most 0.1. Target p95 local feedback at most 100 ms. Target p95 animation frames at most 16.7 ms on the declared 60 Hz reference. Virtualize/cull large data, retain worker/LOD seams, cancel obsolete work and bound streams/caches. No idle continuous animation or unsolicited telemetry. Report unsupported measurement cases and failures rather than claim zero lag. | Planned: Reproducible load/interaction traces, memory/idle checks and budget assertions plus reduced-motion tests on the exact release candidate.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 21
    },
    {
      "id": "WEBUI-DESIGN-R011",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Repeatable documentation screenshots",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "1cac40d60bc3",
        "38c8f13794ee",
        "4f81b9a23327",
        "dc30239b2938"
      ],
      "verified_by": [
        "e2e/documentation-screenshots.browser.ts:1",
        "scripts/documentation-screenshots.test.mjs:1"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Repeatable documentation screenshots.** Capture the real Work, Explore and Operate interfaces with deterministic synthetic responses at narrow and wide sizes. Block live services and private sessions. Provide refresh, artifact import and integrity checks with stable documentation paths and source/viewport/theme/fixture provenance. Persist actual PNG files for local use and read-only CI artifacts. Documentation may store a lossless WebP derivative with identical decoded RGBA pixels, dimensions and color semantics. Retain the original PNG filename and digest, delivered filename and digest, and pinned optimizer provenance. Validate the complete set and the one-million-byte per-file budget before import. Missing tools, unsupported metadata or mismatched pixels must leave published files unchanged. Require complete successful captures and pixel review before committing the images. Capture output must not claim provider, accessibility or broader design acceptance. | Source: `scripts/documentation-screenshots.test.mjs` and `e2e/documentation-screenshots.browser.ts`. Acceptance: successful hosted captures, reviewed pixels, current README/docs assets, matching manifest and green CI. The dated evidence in `tasks.md` records the hosted capture, pixel review and asset qualification.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 23
    },
    {
      "id": "WEBUI-DESIGN-R002.1.1",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Liquid Glass material and density",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "12b5f5624953",
        "24dca66c8a72",
        "38c8f13794ee",
        "456eeca84961",
        "512d3e28f9d8"
      ],
      "verified_by": [
        "e2e/canopy-glass.browser.ts:1",
        "e2e/canopy-glass.browser.ts:574",
        "src/__tests__/design-tokens.test.ts:121",
        "src/__tests__/design-tokens.test.ts:172",
        "src/__tests__/design-tokens.test.ts:201"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Liquid Glass material and density.** Extend existing tokens with a continuous atmospheric sage/blue/ivory field and a deep-green dark alternative. Use visibly frosted framing and higher-opacity white-glass reading surfaces. Use black light-theme labels and visibly translucent tinted controls. Controls are slightly more opaque than their supporting glass. Use lighter frosting than the provided rough draft. Fill available space with returned evidence and relevant detail, never filler. Keep text opaque and prove composited contrast over the darkest and lightest authored background regions. Preserve the existing Arbora artwork and same-origin typography. Use useful alignment and compact/comfortable density, never tiny required text, decorative panels or fabricated data. Selected controls use a simple pale translucent fill, not asymmetric dark inset edges. Offer green (the exact accepted default), blue, red, purple, pink, orange and yellow palettes through Settings. Reuse existing colorizer and persistence. Derive neutral/primary, hover/pressed and focus tokens centrally; preserve legacy preferences, light/dark, opaque, reduced-transparency and forced-colors behavior. Keep semantic danger/warning colors and non-color status cues independent. Ordinary buttons share subtly translucent green fills with no resting outline; primary actions remain stronger and destructive states remain semantic. Align shared control text and icons with a consistent type scale; retain full-perimeter keyboard focus and semantic action contrast. Coarse-pointer sizing overrides compact spacing. Offer an opaque appearance fallback without losing information. | Planned: token/composited-contrast checks, rendered shell and Explore fixtures in every theme/density, coarse-pointer checks and pixel review. Scoped source tests do not accept the full theme or parent R002.1.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 31
    },
    {
      "id": "WEBUI-DESIGN-R004.1.1",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Fully expanded responsive shell",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "12b5f5624953",
        "19b439519a22",
        "38c8f13794ee",
        "47885260902d",
        "667aa894cc3d"
      ],
      "verified_by": [
        "e2e/canopy-glass.browser.ts:2",
        "e2e/execution-graph.browser.ts:2",
        "src/components/workspace/__tests__/WorkspaceContextRail.test.tsx:94",
        "src/components/workspace/__tests__/WorkspaceFrame.test.tsx:161"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Fully expanded responsive shell.** Use a thin inset floating bar across the available width. Retain identity, labelled Work/Explore/Operate navigation, current context, command/search entry and main actions. Reflow the same header into useful rows at narrow widths. Never use a centered capsule or hide main navigation/search behind a compact disclosure. Retain the resizable map and a dominant working center; show detail only for selected evidence. Preserve selection, drafts, mounted work, focus and compatible links through resize. | Planned: actual shell geometry and keyboard journeys from 320 CSS px through ultrawide, generated sizes and short landscape. Include resized editing, native zoom and optional-pane focus. This does not accept all-route parity under R004.1/R004.2.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 32
    },
    {
      "id": "WEBUI-DESIGN-R005.2",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Meaningful interruptible motion",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "667aa894cc3d",
        "73051bf582bd",
        "836d8895cd6f",
        "ac86f2de9817"
      ],
      "verified_by": [
        "e2e/canopy-glass.browser.ts:3",
        "src/components/__tests__/ThemeProvider.test.tsx:89"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Meaningful interruptible motion.** Animate real selection, branch, pane and data changes with short interruptible transitions, never idle decoration, fabricated progress or queued navigation. State commits independently of animation completion. System reduced motion applies from first paint and overrides an expressive preference; provide an in-app reduction control. Motion, opacity and forced-color fallbacks preserve text, status and controls. | Planned: initial reduced-motion, rapid navigation, interruption, stale completion, focus return, appearance preference and idle-animation checks. Full semantic-zoom, live-update and measured performance acceptance remain with R005.1/R010.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 33
    },
    {
      "id": "WEBUI-DESIGN-R002.1.2",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Remaining density and hierarchy acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Remaining density and hierarchy acceptance.** Complete the original R002.1 obligations beyond the bounded material slice. Qualify Work/Operate composition and remaining graph, editor, run, administration and authentication surfaces. Preserve useful wide/narrow panes, readable text, native controls and purposeful hierarchy. Retain the parent R002 token documentation and light/dark contrast obligations. Independent accessibility and performance owners remain unchanged. | Planned: complete remaining token/layout snapshots, identical-task completion review and actual viewport pixels. The bounded shell/Explore evidence cannot close this row.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 43
    },
    {
      "id": "WEBUI-DESIGN-R004.1.2",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Remaining full-route responsive parity acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Remaining full-route responsive parity acceptance.** Complete every original R004.1 route/action obligation beyond the responsive shell slice. Include registered routes, permitted dynamic leaves and formerly unsupported mobile surfaces across required and generated dimensions. Never hide required controls or reduce feature coverage. Retain the separate R004.2 continuity obligations. | Planned: complete route/action census and keyboard-accessible viewport matrix with reviewed screenshots. Shell and selected graph fixtures cannot establish full parity.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 44
    },
    {
      "id": "WEBUI-DESIGN-R005.3",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Contextual scenes preserve product meaning",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [
        "04c4742838cb"
      ],
      "verified_by": [
        "e2e/canopy-glass.browser.ts:714"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Contextual scenes preserve product meaning.** Extend `WorkspaceFrame.tsx` and `WorkspaceAppearance.tsx` through the existing appearance provider. Roots represent source-system connectors; the trunk represents the harness; branches/leaves represent knowledge; light represents workspace attention. Follow context emphasizes the selected product context; manual selection overrides appearance only. Fluid remains a neutral alternative. Activity and knowledge relationships require matching, current Arbora evidence. Missing evidence leaves static scenery or selection feedback, never invented work or topology. Preserve Chat/Knowledge/Tools labels, navigation, drafts, identity and native textual status. | Planned: extend `WorkspaceFrame.test.tsx` and `canopy-glass.browser.ts` with context/manual selection and evidence-bound scene journeys. Reject unknown, stale, duplicate, unrelated and out-of-order activity. Review exact-candidate screenshots and motion recordings.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 50
    },
    {
      "id": "WEBUI-DESIGN-R005.3.1",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Route-derived scene selection and manual overrides",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "22fe6f99d8ec"
      ],
      "verified_by": [
        "e2e/canopy-glass.browser.ts:714",
        "src/components/workspace/WorkspaceWallpaper.tsx:1",
        "src/components/workspace/__tests__/WorkspaceWallpaper.test.tsx:1"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Route-derived scene selection and manual overrides.** Resolve Follow workspace from canonical page routes: Chat uses the harness tree, Knowledge canopy, Tools roots, and entry or unknown context neutral fluid/light. Named scenes override context. Preserve the Canopy scene default and saved manual choices, navigation, drafts, identity and textual status. Page selection does not imply activity or graph relationships. | Extend wallpaper unit tests and `canopy-glass.browser.ts` with route mapping, manual override, static Off, cleanup and retained drafts. Review exact-head default and selected-scene pixels.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 51
    },
    {
      "id": "WEBUI-DESIGN-R005.3.2",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Evidence-bound activity and topology",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Evidence-bound activity and topology.** Render activity or knowledge relationships only from matching current Arbora evidence. Missing evidence leaves static scenery or selection feedback. Never invent work, topology or native status. | Planned: supply real event and relationship seams, then reject missing, unknown, stale, duplicate, unrelated and out-of-order evidence. Preserve the actual task graph and review activity recordings. No implementation or test binding yet.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 52
    },
    {
      "id": "WEBUI-DESIGN-R005.4",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Wallpaper effects remain bounded and optional",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "20ae6b09afb8",
        "24dca66c8a72",
        "e039a440a145"
      ],
      "verified_by": [
        "e2e/canopy-glass.browser.ts:467",
        "e2e/canopy-glass.browser.ts:683",
        "e2e/canopy-glass.browser.ts:746",
        "src/__tests__/design-tokens.test.ts:336",
        "src/components/workspace/WorkspaceWallpaper.tsx:1"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Wallpaper effects remain bounded and optional.** Extend `theme-provider.tsx` and the shared frame with Off/Subtle/Expressive wallpaper motion. Default to bounded Subtle motion when no valid saved choice exists. Preserve explicit saved Off and manual scenes. Settings provides an immediate Off opt-out. Off disables wallpaper animation, not the selected static scene. System and in-app reductions override Expressive from first paint. Hidden documents, constrained resources and unavailable rendering use a static fallback. Use one shared renderer, not one renderer per panel. Preserve material tokens, readable black light-theme text and opaque/forced-color alternatives. Motion never delays input, changes status, plays audio or introduces sharp flashes. | Planned: extend `ThemeProvider.test.tsx`, `WorkspaceFrame.test.tsx` and `canopy-glass.browser.ts` with preference, interruption, lifecycle, contrast and fallback cases. R010 requires measured frame/input/memory evidence before acceptance.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 53
    },
    {
      "id": "WEBUI-DESIGN-R005.5",
      "kind": "requirement",
      "parent": "WEBUI-DESIGN",
      "source": "specs/browser-design-system/status.json",
      "title": "Weather ambience uses explicit consent and truthful conditions",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [
        "e2e/canopy-glass.browser.ts:468",
        "src/components/workspace/WorkspaceWallpaper.tsx:1",
        "src/components/workspace/__tests__/WorkspaceWallpaper.test.tsx:1"
      ],
      "parent_title": "WEBUI-DESIGN \u2014 Accessible Arbora browser design system",
      "definition": "**Weather ambience uses explicit consent and truthful conditions.** Extend existing appearance controls with optional weather following and clearly labelled manual previews. Offer Clear, Rain, Snow, Thunderstorm, Fog, Heat and Cloudy. Weather following requires an explicitly chosen location and authorized provider. Prefer existing Arbora/MCP sources; never assume an API, infer location or request GPS automatically. Represent unknown, stale, offline and unsupported conditions without inventing current weather. Rain on glass preserves text and controls; heat distorts background only. Opt-in ambient playback has separate safety/performance acceptance; audio remains off by default. | Planned: extend `ThemeProvider.test.tsx`, `WorkspaceFrame.test.tsx` and `canopy-glass.browser.ts`. Prove opt-in, disable, provider/location scope, freshness, manual-preview labels, every weather variant and content-safe effects. Assert no weather requests before consent or after disabling.",
      "definition_source": "specs/browser-design-system/requirements.md",
      "definition_line": 54
    },
    {
      "id": "WEBUI-DECIDE",
      "kind": "spec",
      "parent": null,
      "source": "specs/decision-evidence/status.json",
      "title": "WEBUI-DECIDE \u2014 Decision evidence and calibration",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [],
      "verified_by": [],
      "document": "specs/decision-evidence/spec.md",
      "component": "Unassigned",
      "code_refs": [
        {
          "declared_in": "specs/decision-evidence/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "agent/agent_webui/server.py",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/agent/agent_webui/server.py"
        },
        {
          "declared_in": "specs/decision-evidence/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/App.tsx",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/App.tsx"
        },
        {
          "declared_in": "specs/decision-evidence/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/api.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/api.ts"
        },
        {
          "declared_in": "specs/decision-evidence/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/auth.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/auth.ts"
        },
        {
          "declared_in": "specs/decision-evidence/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "requirements.md",
          "repository": "Knuckles-Team/overstory",
          "role": "documentation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/decision-evidence/requirements.md"
        }
      ],
      "relations": [],
      "plan_diagrams": [],
      "unparsed_references": []
    },
    {
      "id": "WEBUI-DECIDE-R001",
      "kind": "requirement",
      "parent": "WEBUI-DECIDE",
      "source": "specs/decision-evidence/status.json",
      "title": "Evaluation dashboard shows calibration and coverage",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "959fac1c5bea",
        "cb7ca4afa907",
        "df208e18c6c8"
      ],
      "verified_by": [
        "src/components/decisions/__tests__/DecisionCalibrationTab.test.tsx:13"
      ],
      "parent_title": "WEBUI-DECIDE \u2014 Decision evidence and calibration",
      "definition": "**Evaluation dashboard shows calibration and coverage.** A dashboard presents decision evaluation calibration and coverage metrics \u2014 cohort, sample count, source class, evaluation window, target versus observed coverage, risk, and receipt version \u2014 as independently labeled fields, and shows no numeric coverage, calibration or deployment claim when the evaluation is synthetic-only, missing or underpowered. | Independent-label fixture tests plus negative fixtures for the synthetic-only, missing, and underpowered cases.",
      "definition_source": "specs/decision-evidence/requirements.md",
      "definition_line": 5
    },
    {
      "id": "WEBUI-DECIDE-R003",
      "kind": "requirement",
      "parent": "WEBUI-DECIDE",
      "source": "specs/decision-evidence/status.json",
      "title": "Decision explorer cites premises, derivations and certificate",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "2d3f1b884e39",
        "959fac1c5bea",
        "df208e18c6c8"
      ],
      "verified_by": [
        "src/components/decisions/__tests__/DecisionExplorerTab.test.tsx:41"
      ],
      "parent_title": "WEBUI-DECIDE \u2014 Decision evidence and calibration",
      "definition": "**Decision explorer cites premises, derivations and certificate.** A typed decision explorer renders the chosen and excluded options for a decision. It cites the premise and derivation identifiers, the certificate and any violations that applied. | Contract fixture and rendered route tests.",
      "definition_source": "specs/decision-evidence/requirements.md",
      "definition_line": 6
    },
    {
      "id": "WEBUI-DECIDE-R004",
      "kind": "requirement",
      "parent": "WEBUI-DECIDE",
      "source": "specs/decision-evidence/status.json",
      "title": "Why-not explanations run on demand within a bounded budget",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "2d3f1b884e39",
        "94fdf68cfbca",
        "ce87bed0d725",
        "fed13820d806"
      ],
      "verified_by": [
        "src/components/decisions/__tests__/DecisionDetailPanel.test.tsx:27",
        "src/components/decisions/__tests__/DecisionDetailPanel.test.tsx:48",
        "src/components/decisions/__tests__/DecisionDetailPanel.test.tsx:59"
      ],
      "parent_title": "WEBUI-DECIDE \u2014 Decision evidence and calibration",
      "definition": "**Why-not explanations run on demand within a bounded budget.** A why-not explanation is computed on demand within a bounded solve budget. The reader sees any timeout or refusal. It never alters the original decision record. | Timeout and refusal integration fixture tests.",
      "definition_source": "specs/decision-evidence/requirements.md",
      "definition_line": 7
    },
    {
      "id": "WEBUI-DECIDE-R005",
      "kind": "requirement",
      "parent": "WEBUI-DECIDE",
      "source": "specs/decision-evidence/status.json",
      "title": "Dashboard labels each evaluation field independently",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "2d3f1b884e39",
        "959fac1c5bea",
        "df208e18c6c8"
      ],
      "verified_by": [
        "src/components/decisions/__tests__/DecisionCalibrationTab.test.tsx:13",
        "src/components/decisions/__tests__/DecisionCalibrationTab.test.tsx:67"
      ],
      "parent_title": "WEBUI-DECIDE \u2014 Decision evidence and calibration",
      "definition": "**Dashboard labels each evaluation field independently.** The evaluation dashboard labels cohort, sample count, source class, evaluation window, target and observed coverage, risk, and receipt version as separate, independently sourced fields rather than a single combined claim. | Independent-label fixture and rendered dashboard tests.",
      "definition_source": "specs/decision-evidence/requirements.md",
      "definition_line": 8
    },
    {
      "id": "WEBUI-DECIDE-R006",
      "kind": "requirement",
      "parent": "WEBUI-DECIDE",
      "source": "specs/decision-evidence/status.json",
      "title": "No coverage claim shown for inadequate evaluation data",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "2d3f1b884e39",
        "959fac1c5bea",
        "df208e18c6c8"
      ],
      "verified_by": [
        "src/components/decisions/__tests__/DecisionCalibrationTab.test.tsx:141",
        "src/components/decisions/__tests__/DecisionCalibrationTab.test.tsx:33",
        "src/components/decisions/__tests__/DecisionCalibrationTab.test.tsx:86"
      ],
      "parent_title": "WEBUI-DECIDE \u2014 Decision evidence and calibration",
      "definition": "**No coverage claim shown for inadequate evaluation data.** The dashboard shows no numeric coverage, calibration or deployment claim when the underlying evaluation is synthetic-only, missing, or underpowered. | Negative fixture tests for each of the synthetic-only, missing, and underpowered cases.",
      "definition_source": "specs/decision-evidence/requirements.md",
      "definition_line": 9
    },
    {
      "id": "WEBUI-DECIDE-R007",
      "kind": "requirement",
      "parent": "WEBUI-DECIDE",
      "source": "specs/decision-evidence/status.json",
      "title": "Tenant or purpose change invalidates cached decision queries",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "1c4d40ed1a3f",
        "2d3f1b884e39"
      ],
      "verified_by": [
        "src/components/decisions/__tests__/decision-query-scope.test.ts:27",
        "src/components/decisions/__tests__/decision-query-scope.test.ts:34",
        "src/components/decisions/__tests__/decision-query-scope.test.ts:41"
      ],
      "parent_title": "WEBUI-DECIDE \u2014 Decision evidence and calibration",
      "definition": "**Tenant or purpose change invalidates cached decision queries.** Changing tenant or purpose invalidates any cached decision or evaluation query. A stale response never overwrites a result from a newer selection. | Two-tenant browser test exercising cache invalidation and stale-response ordering.",
      "definition_source": "specs/decision-evidence/requirements.md",
      "definition_line": 10
    },
    {
      "id": "WEBUI-DECIDE-R008",
      "kind": "requirement",
      "parent": "WEBUI-DECIDE",
      "source": "specs/decision-evidence/status.json",
      "title": "Explanation views work without color, hover or pointer",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "2d3f1b884e39",
        "959fac1c5bea",
        "df208e18c6c8"
      ],
      "verified_by": [
        "src/components/decisions/__tests__/DecisionCalibrationTab.test.tsx:228",
        "src/components/decisions/__tests__/DecisionExplorerTab.test.tsx:64"
      ],
      "parent_title": "WEBUI-DECIDE \u2014 Decision evidence and calibration",
      "definition": "**Explanation views work without color, hover or pointer.** Every part of the decision explanation structure is usable without relying on color alone, hover-only reveal, or pointer-only controls. | Keyboard and accessibility tests covering the full explanation structure.",
      "definition_source": "specs/decision-evidence/requirements.md",
      "definition_line": 11
    },
    {
      "id": "WEBUI-DECIDE-R002",
      "kind": "requirement",
      "parent": "WEBUI-DECIDE",
      "source": "specs/decision-evidence/status.json",
      "title": "Decision explorer surfaces premises, derivations and violations",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "959fac1c5bea",
        "cb7ca4afa907",
        "df208e18c6c8"
      ],
      "verified_by": [
        "src/components/decisions/__tests__/DecisionExplorerTab.test.tsx:41"
      ],
      "parent_title": "WEBUI-DECIDE \u2014 Decision evidence and calibration",
      "definition": "**Decision explorer surfaces premises, derivations and violations.** The decision explorer presents a selected decision's premise classes, derivations, certificate, why-not explanation and violations through the WebUI. Typed calls to the Arbora read API back it. | Component tests cover the explorer's rendering logic, plus a browser integration test against an authenticated Keycloak-backed Arbora session.",
      "definition_source": "specs/decision-evidence/requirements.md",
      "definition_line": 12
    },
    {
      "id": "FIN-UI",
      "kind": "spec",
      "parent": null,
      "source": "specs/finance-asset-manager/status.json",
      "title": "FIN-UI \u2014 Finance Asset Manager",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "document": "specs/finance-asset-manager/spec.md",
      "component": "Unassigned",
      "code_refs": [
        {
          "declared_in": "specs/finance-asset-manager/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "agent/agent_webui/rbac.py",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/agent/agent_webui/rbac.py"
        },
        {
          "declared_in": "specs/finance-asset-manager/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "spec.md",
          "repository": "Knuckles-Team/overstory",
          "role": "documentation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/finance-asset-manager/spec.md"
        },
        {
          "declared_in": "specs/finance-asset-manager/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/App.tsx",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/App.tsx"
        },
        {
          "declared_in": "specs/finance-asset-manager/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/components/atlas/renderers/index.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/components/atlas/renderers/index.ts"
        },
        {
          "declared_in": "specs/finance-asset-manager/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/atlas/renderers.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/atlas/renderers.ts"
        },
        {
          "declared_in": "specs/finance-asset-manager/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/gateway.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/gateway.ts"
        },
        {
          "declared_in": "specs/finance-asset-manager/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/nav-registry.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/nav-registry.ts"
        },
        {
          "declared_in": "specs/finance-asset-manager/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/webmcp/atlas.tsx",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/webmcp/atlas.tsx"
        },
        {
          "declared_in": "specs/finance-asset-manager/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "plan.md",
          "repository": "Knuckles-Team/overstory",
          "role": "documentation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/finance-asset-manager/plan.md"
        },
        {
          "declared_in": "specs/finance-asset-manager/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "requirements.md",
          "repository": "Knuckles-Team/overstory",
          "role": "documentation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/finance-asset-manager/requirements.md"
        },
        {
          "declared_in": "specs/finance-asset-manager/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "status.json",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/finance-asset-manager/status.json"
        },
        {
          "declared_in": "specs/finance-asset-manager/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "tasks.md",
          "repository": "Knuckles-Team/overstory",
          "role": "documentation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/finance-asset-manager/tasks.md"
        },
        {
          "declared_in": "specs/finance-asset-manager/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "test-spec.md",
          "repository": "Knuckles-Team/overstory",
          "role": "documentation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/finance-asset-manager/test-spec.md"
        }
      ],
      "relations": [],
      "plan_diagrams": [],
      "unparsed_references": []
    },
    {
      "id": "FIN-UI-R001",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Mobile-first Markets app with five-destination navigation (rollup)",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "407ef6a4b673"
      ],
      "verified_by": [],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Mobile-first Markets app with five-destination navigation (rollup).** Split into `FIN-UI-R001.1` (detail-tab support) and `FIN-UI-R001.2` (live wiring), producer first. This row is LANDED only when both children are LANDED. | Each child's own verification row; see below.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 5
    },
    {
      "id": "FIN-UI-R001.1",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Detail-tab support model",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "407ef6a4b673"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/detail-support.test.ts:20"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Detail-tab support model.** A typed detail-tab support model decides which of the six detail tabs an instrument supports. The tabs are Chart, Rates, News, Notes, Dividends and Analysis. The instrument's series capabilities set the result. | Verified by `detail-support.test.ts` asserting each capability combination yields the correct supported/unsupported tab set.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 6
    },
    {
      "id": "FIN-UI-R001.2",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Live Markets app wiring (remaining)",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "407ef6a4b673"
      ],
      "verified_by": [],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Live Markets app wiring (remaining).** The remaining scope is wiring these parts into the live Markets app. The parts are the five-destination navigation, instrument groups and sparkline rows. They also include the detail view's six tabs gated by `FIN-UI-R001.1`. The range selector and the performance-versus-benchmark card complete the list. The wiring includes PWA install, theming and accessibility. | Verified by a responsive browser test across phone and desktop viewports confirming the navigation, group and detail views, and accessibility behavior.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 7
    },
    {
      "id": "FIN-UI-R002",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Shared ChartRenderer for line, candle, and overlay data (rollup)",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "407ef6a4b673"
      ],
      "verified_by": [],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Shared ChartRenderer for line, candle, and overlay data (rollup).** Split into `FIN-UI-R002.1` (ChartRenderer contract) and `FIN-UI-R002.2` (live wiring), producer first. This row is LANDED only when both children are LANDED. | Each child's own verification row; see below.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 8
    },
    {
      "id": "FIN-UI-R002.1",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Shared ChartRenderer input contract",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "407ef6a4b673"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/chart-contract.test.ts:5"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Shared ChartRenderer input contract.** A typed shared ChartRenderer input contract validates line series and complete OHLC candle series. It defines decimation that never alters finalized trail, flip or state output. It also defines a versioned, simulation-flagged overlay marker type. | Verified by `chart-contract.test.ts` asserting decimated and full-resolution views of the same fixture produce identical finalized trend and overlay output.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 9
    },
    {
      "id": "FIN-UI-R002.2",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Live ChartRenderer wiring (remaining)",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "407ef6a4b673"
      ],
      "verified_by": [],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Live ChartRenderer wiring (remaining).** The remaining scope is wiring the shared ChartRenderer contract into the live ChartRenderer and ChartPage components. The components render line, area and candle series with a volume pane. They draw overlays. The overlays cover trend lines, flips, DCA buys, cost basis, and margin and liquidation levels. They support touch crosshair and pinch-zoom interaction. | Verified by a chart-rendering test comparing full-resolution and decimated views of the same fixture and asserting identical finalized trend and overlay output.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 10
    },
    {
      "id": "FIN-UI-R004",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Responsive five-destination navigation",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "00f4b9b08127",
        "2d3f1b884e39",
        "a73ac09e3e1c"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/MarketsNav.test.tsx:34",
        "src/apps/markets/__tests__/MarketsNav.test.tsx:47"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Responsive five-destination navigation.** The application presents five top-level destinations. On narrow viewports they appear as a bottom navigation bar. On desktop they appear as a side rail. The selected route and keyboard focus stay coherent across layouts. | Verified by a responsive browser test at phone and desktop widths confirming the correct navigation chrome and consistent selection and focus.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 11
    },
    {
      "id": "FIN-UI-R005",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Instrument groups with distinct data states",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "401cec444a5f",
        "96cd34e3bfa2"
      ],
      "verified_by": [
        "src/apps/markets/components/__tests__/InstrumentGroups.test.tsx:42"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Instrument groups with distinct data states.** User-defined instrument groups and their Basic/Holdings mode preserve the selected group and mode. The UI shows each of these results as a separate state: loading, genuinely empty, stale, partial, permission-denied and unavailable. It never collapses them into one state. | Verified by a component test driving each data state from a fixture and asserting a distinct, correctly labeled rendering for each.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 12
    },
    {
      "id": "FIN-UI-R006",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Search resolves by stable identity, not ticker text",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "cf2a61dd04a9",
        "d63ed6f3afb2",
        "e05e1230ae72"
      ],
      "verified_by": [],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Search resolves by stable identity, not ticker text.** Instrument search and selection key off stable instrument and listing IDs, together with venue and quote currency. A ticker symbol alone never identifies an instrument. | Verified by a test using two identically ticked instruments on different venues and asserting search and detail views keep them distinct by ID.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 13
    },
    {
      "id": "FIN-UI-R007",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Instrument rows show price, provenance, after-hours value",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "401cec444a5f",
        "cff7851b2443",
        "d63ed6f3afb2"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/InstrumentRow.test.tsx:45"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Instrument rows show price, provenance, after-hours value.** Instrument rows and detail views show the current price with session and source provenance. They also show the previous close, the price change and a sparkline. They show a licensed logo or text fallback. When the owner supplies an after-hours value, they label it separately. | Verified by a fixture-driven test covering regular, pre-market, post-market, delayed, and missing quotes, asserting each field renders correctly and a missing price is never shown as zero.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 14
    },
    {
      "id": "FIN-UI-R008",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Detail tabs and range controls expose only supported data (rollup)",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "407ef6a4b673"
      ],
      "verified_by": [],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Detail tabs and range controls expose only supported data (rollup).** Split into `FIN-UI-R008.1` (supportedChartMode) and `FIN-UI-R008.2` (live wiring), producer first. This row is LANDED only when both children are LANDED. | Each child's own verification row; see below.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 15
    },
    {
      "id": "FIN-UI-R008.1",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Pure supportedChartMode gating function",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "407ef6a4b673"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/chart-contract.test.ts:5",
        "src/apps/markets/__tests__/detail-support.test.ts:20"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Pure supportedChartMode gating function.** A pure `supportedChartMode` function gates interval, data-type and volume combinations for the detail view. It returns an explanatory reason when a combination is unsupported. | Verified by `chart-contract.test.ts` and `detail-support.test.ts` driving valid and unsupported timeframe/data-type combinations and asserting the correct supported state and reason.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 16
    },
    {
      "id": "FIN-UI-R008.2",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Live detail-tab/range-control wiring (remaining)",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "407ef6a4b673"
      ],
      "verified_by": [],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Live detail-tab/range-control wiring (remaining).** The remaining scope is wiring `supportedChartMode` into the live detail view's tabs, range controls and line, candle and volume toggle. The running UI then hides or explains unsupported options. Fixtures alone do not meet this need. | Verified by a test driving valid and unsupported timeframe and data-type combinations and asserting unsupported options are hidden or explained rather than silently rendered.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 17
    },
    {
      "id": "FIN-UI-R009",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Shared ChartRenderer preserves gaps and revisions",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "2d3f1b884e39",
        "ae5dc947dd51"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/pure.test.ts:63",
        "src/apps/markets/__tests__/pure.test.ts:89"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Shared ChartRenderer preserves gaps and revisions.** One typed ChartRenderer, shared with the Atlas renderer, draws scalar line and area series and complete OHLC candles. It preserves data gaps. It preserves bar revisions by ID. It does not smooth over them. It performs no authoritative indicator computation of its own. | Verified by a unit and browser test asserting candle mode only accepts valid OHLC bars, gaps persist, a revised bar replaces the prior one by ID, and no indicator values originate client-side.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 18
    },
    {
      "id": "FIN-UI-R010",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Chart overlays show strategy version and simulation state (rollup)",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "508e7c11c573",
        "a3dd06faa65b"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/overlay-strategy.test.ts:20",
        "src/apps/markets/__tests__/overlay-wiring.test.ts:27",
        "src/apps/markets/__tests__/overlay-wiring.test.ts:47"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Chart overlays show strategy version and simulation state (rollup).** Split into `FIN-UI-R010.1` (overlay marker type) and `FIN-UI-R010.2` (live wiring), producer first. This row is LANDED only when both children are LANDED. | Each child's own verification row; see below.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 19
    },
    {
      "id": "FIN-UI-R010.1",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Overlay marker version/simulation-flag type",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "508e7c11c573"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/overlay-strategy.test.ts:20"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Overlay marker version/simulation-flag type.** Chart overlay markers carry a strategy version. They also carry a simulation flag. `overlayLabel` tags simulated results apart from finalized ones. | Verified by the batch-2 contract tests asserting overlay markers carry the correct version and simulation label for a finalized trend flip, DCA buy, cost basis, and simulated margin level.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 20
    },
    {
      "id": "FIN-UI-R010.2",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Live chart overlay wiring (remaining)",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "a3dd06faa65b"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/overlay-wiring.test.ts:27",
        "src/apps/markets/__tests__/overlay-wiring.test.ts:47"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Live chart overlay wiring (remaining).** The remaining scope is wiring the versioned overlay marker type into the live chart overlay rendering. The marker type carries a simulation flag. The overlays cover trend lines, flips, DCA buys, cost basis, and margin and liquidation levels. | Verified by a test comparing full-resolution and decimated chart views on a fixture with a finalized trend flip, DCA buy, cost basis, and simulated margin level, asserting markers align to the correct bars and versions.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 21
    },
    {
      "id": "FIN-UI-R011",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Performance cards render owner-calculated values verbatim (rollup)",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "508e7c11c573",
        "a3dd06faa65b"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/performance-card.test.ts:15",
        "src/apps/markets/components/__tests__/PerformanceCardView.test.tsx:43",
        "src/apps/markets/components/__tests__/PerformanceCardView.test.tsx:53",
        "src/apps/markets/components/__tests__/PerformanceCardView.test.tsx:60"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Performance cards render owner-calculated values verbatim (rollup).** Split into `FIN-UI-R011.1` (verbatim-value contract) and `FIN-UI-R011.2` (live wiring), producer first. This row is LANDED only when both children are LANDED. | Each child's own verification row; see below.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 22
    },
    {
      "id": "FIN-UI-R011.1",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Performance/benchmark card verbatim-value contract",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "508e7c11c573"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/performance-card.test.ts:15"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Performance/benchmark card verbatim-value contract.** Performance and benchmark cards reproduce the owning service's decimal string verbatim. They have explicit unavailable and stale states. They never recompute values on the client. | Verified by the batch-2 contract-fixture tests with multi-currency cash flows, dividends, splits, fees, and a stale valuation, asserting no client-side recomputation.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 23
    },
    {
      "id": "FIN-UI-R011.2",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Live performance/benchmark card wiring (remaining)",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "a3dd06faa65b"
      ],
      "verified_by": [
        "src/apps/markets/components/__tests__/PerformanceCardView.test.tsx:43",
        "src/apps/markets/components/__tests__/PerformanceCardView.test.tsx:53",
        "src/apps/markets/components/__tests__/PerformanceCardView.test.tsx:60"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Live performance/benchmark card wiring (remaining).** The remaining scope is wiring the verbatim-value contract into the live performance and benchmark card components. The cards show the return method and currency. They also show the source, as-of time and session. | Verified by a contract-fixture test with multi-currency cash flows, dividends, splits, fees, and a stale valuation, asserting the UI reproduces the owner's decimal-string output with no client-side recomputation.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 24
    },
    {
      "id": "FIN-UI-R012",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Strategy views cite evidence and never submit orders (rollup)",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "508e7c11c573",
        "a3dd06faa65b"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/strategy-view.test.ts:9",
        "src/apps/markets/components/__tests__/StrategyPanel.test.tsx:17",
        "src/apps/markets/components/__tests__/StrategyPanel.test.tsx:26"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Strategy views cite evidence and never submit orders (rollup).** Split into `FIN-UI-R012.1` (evidence/abstain contract) and `FIN-UI-R012.2` (live wiring), producer first. This row is LANDED only when both children are LANDED. | Each child's own verification row; see below.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 25
    },
    {
      "id": "FIN-UI-R012.1",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Strategy view evidence/abstain contract type",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "508e7c11c573"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/strategy-view.test.ts:9"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Strategy view evidence/abstain contract type.** Strategy recommendation view types cite versioned evidence or an explicit abstain reason, and contain no order-submission field by construction. | Verified by the batch-2 fixture tests covering a calibrated proposal, thin history, warmup, drift, and a missing scorecard.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 26
    },
    {
      "id": "FIN-UI-R012.2",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Live strategy/recommendation view wiring (remaining)",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "a3dd06faa65b"
      ],
      "verified_by": [
        "src/apps/markets/components/__tests__/StrategyPanel.test.tsx:17",
        "src/apps/markets/components/__tests__/StrategyPanel.test.tsx:26"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Live strategy/recommendation view wiring (remaining).** The remaining scope is wiring the evidence and abstain contract type into the live views. These are the strategy and recommendation views. No order-submission path exists in the rendered UI. | Verified by a fixture test covering a calibrated proposal, thin history, warmup, drift, and a missing scorecard, asserting the shown evidence and abstention reason and confirming no order request originates from the panel.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 27
    },
    {
      "id": "FIN-UI-R013",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "DCA and alert views distinguish delivery states (rollup)",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "508e7c11c573",
        "61fc4d6854e1"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/delivery-state.test.ts:4",
        "src/apps/markets/components/__tests__/DeliveryStateList.test.tsx:16",
        "src/apps/markets/components/__tests__/DeliveryStateList.test.tsx:25",
        "src/apps/markets/components/__tests__/DeliveryStateList.test.tsx:35"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**DCA and alert views distinguish delivery states (rollup).** Split into `FIN-UI-R013.1` (delivery-receipt dedupe) and `FIN-UI-R013.2` (live wiring), producer first. This row is LANDED only when both children are LANDED. | Each child's own verification row; see below.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 28
    },
    {
      "id": "FIN-UI-R013.1",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "DCA/alert delivery-receipt dedupe contract",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "508e7c11c573"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/delivery-state.test.ts:4"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**DCA/alert delivery-receipt dedupe contract.** DCA and alert delivery receipts dedupe a duplicated event ID. They also dedupe a channel retry. The UI never reports a paper fill as a live fill. | Verified by the batch-2 fixture tests exercising due, missed, failed, replayed, paper-filled, and delivered states including a duplicated event ID and channel retry.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 29
    },
    {
      "id": "FIN-UI-R013.2",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Live DCA/alert delivery-state wiring (remaining)",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "61fc4d6854e1"
      ],
      "verified_by": [
        "src/apps/markets/components/__tests__/DeliveryStateList.test.tsx:16",
        "src/apps/markets/components/__tests__/DeliveryStateList.test.tsx:25",
        "src/apps/markets/components/__tests__/DeliveryStateList.test.tsx:35"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Live DCA/alert delivery-state wiring (remaining).** The remaining scope is wiring the delivery-receipt dedupe contract into the live DCA and alert views. Each state renders as a distinct outcome. | Verified by a fixture test exercising each state, including a duplicated event ID and a channel retry, asserting the states and receipts remain distinct and a paper fill is never shown as a live fill.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 30
    },
    {
      "id": "FIN-UI-R014",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "CSV import preview with idempotent receipt (rollup)",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "61fc4d6854e1",
        "83e9b629b83e"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/csv-import.test.ts:17",
        "src/apps/markets/components/__tests__/CsvImportFlow.test.tsx:24",
        "src/apps/markets/components/__tests__/CsvImportFlow.test.tsx:39",
        "src/apps/markets/components/__tests__/CsvImportFlow.test.tsx:52",
        "src/apps/markets/components/__tests__/CsvImportFlow.test.tsx:64"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**CSV import preview with idempotent receipt (rollup).** Split into `FIN-UI-R014.1` (CSV import contract) and `FIN-UI-R014.2` (live wiring), producer first. This row is LANDED only when both children are LANDED. | Each child's own verification row; see below.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 31
    },
    {
      "id": "FIN-UI-R014.1",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "CSV import preview contract mirroring the SDK",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "83e9b629b83e"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/csv-import.test.ts:17"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**CSV import preview contract mirroring the SDK.** CSV import preview types mirror `agent_connector_sdk.finance.csv_import`, modeling column-mapping errors and idempotent re-import keyed by file digest. | Verified by the batch-3 CSV fixture tests with mapped and unmapped columns, a malformed row, and a duplicate digest.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 32
    },
    {
      "id": "FIN-UI-R014.2",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Live CSV import preview wiring (remaining)",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "61fc4d6854e1"
      ],
      "verified_by": [
        "src/apps/markets/components/__tests__/CsvImportFlow.test.tsx:24",
        "src/apps/markets/components/__tests__/CsvImportFlow.test.tsx:39",
        "src/apps/markets/components/__tests__/CsvImportFlow.test.tsx:52",
        "src/apps/markets/components/__tests__/CsvImportFlow.test.tsx:64"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Live CSV import preview wiring (remaining).** The remaining scope is wiring the CSV import preview contract into the live import flow. After import, the flow shows holdings from the owning service's response. | Verified by a CSV fixture test with mapped and unmapped columns, a malformed row, and a duplicate digest, asserting preview counts, idempotent receipts, and owner-sourced holdings.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 33
    },
    {
      "id": "FIN-UI-R015",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Offline PWA shell marks cached data stale (rollup)",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "61fc4d6854e1",
        "83e9b629b83e"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/offline-cache.test.ts:4",
        "src/apps/markets/components/__tests__/OfflineCacheView.test.tsx:28",
        "src/apps/markets/components/__tests__/OfflineCacheView.test.tsx:45",
        "src/apps/markets/components/__tests__/OfflineCacheView.test.tsx:9"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Offline PWA shell marks cached data stale (rollup).** Split into `FIN-UI-R015.1` (offline cache contract) and `FIN-UI-R015.2` (live wiring), producer first. This row is LANDED only when both children are LANDED. | Each child's own verification row; see below.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 34
    },
    {
      "id": "FIN-UI-R015.1",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Offline cache staleness contract",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "83e9b629b83e"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/offline-cache.test.ts:4"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Offline cache staleness contract.** An offline cache view type marks data stale and disables current-state actions while offline or expired. | Verified by the batch-3 offline-cache fixture tests.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 35
    },
    {
      "id": "FIN-UI-R015.2",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Live offline PWA shell wiring (remaining)",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "61fc4d6854e1"
      ],
      "verified_by": [
        "src/apps/markets/components/__tests__/OfflineCacheView.test.tsx:28",
        "src/apps/markets/components/__tests__/OfflineCacheView.test.tsx:45",
        "src/apps/markets/components/__tests__/OfflineCacheView.test.tsx:9"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Live offline PWA shell wiring (remaining).** The remaining scope is wiring the offline cache staleness contract into the live installed PWA shell. Offline, the shell shows previously cached financial facts. It marks them stale. Current-data actions are disabled. | Verified by an offline test loading a previously valid finance view without network access and asserting cached values are labeled stale and current-data actions are unavailable.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 36
    },
    {
      "id": "FIN-UI-R016",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Charts and controls meet accessibility requirements (rollup)",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "4aef66253171",
        "83e9b629b83e"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/chart-a11y.test.ts:5",
        "src/apps/markets/components/__tests__/ChartA11ySummary.test.tsx:13",
        "src/apps/markets/components/__tests__/ChartA11ySummary.test.tsx:21",
        "src/apps/markets/components/__tests__/ChartA11ySummary.test.tsx:33",
        "src/apps/markets/components/__tests__/ChartA11ySummary.test.tsx:7"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Charts and controls meet accessibility requirements (rollup).** Split into `FIN-UI-R016.1` (accessibility contract) and `FIN-UI-R016.2` (live wiring), producer first. This row is LANDED only when both children are LANDED. | Each child's own verification row; see below.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 37
    },
    {
      "id": "FIN-UI-R016.1",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Chart accessibility text-summary contract",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "4aef66253171",
        "83e9b629b83e"
      ],
      "verified_by": [
        "src/apps/markets/__tests__/chart-a11y.test.ts:5"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Chart accessibility text-summary contract.** A chart accessibility contract defines a screen-reader text summary and non-color direction words for chart state. | Verified by the batch-3 accessibility contract tests.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 38
    },
    {
      "id": "FIN-UI-R016.2",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Live chart/control accessibility wiring (remaining)",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "4aef66253171"
      ],
      "verified_by": [
        "src/apps/markets/components/__tests__/ChartA11ySummary.test.tsx:13",
        "src/apps/markets/components/__tests__/ChartA11ySummary.test.tsx:21",
        "src/apps/markets/components/__tests__/ChartA11ySummary.test.tsx:33",
        "src/apps/markets/components/__tests__/ChartA11ySummary.test.tsx:7"
      ],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Live chart/control accessibility wiring (remaining).** The remaining scope is wiring the accessibility text-summary contract into the live charts and controls. This covers keyboard operation and 200% zoom. It also covers reduced motion and non-color state indicators. | Verified by an accessibility review combining keyboard-only operation, screen-reader inspection, 200% zoom, reduced-motion, and high-contrast checks against each chart and control.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 39
    },
    {
      "id": "FIN-UI-R003",
      "kind": "requirement",
      "parent": "FIN-UI",
      "source": "specs/finance-asset-manager/status.json",
      "title": "Arbora Markets app with scanner, search, and layered chart",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "cf2a61dd04a9",
        "d63ed6f3afb2",
        "e05e1230ae72"
      ],
      "verified_by": [],
      "parent_title": "FIN-UI \u2014 Finance Asset Manager",
      "definition": "**Arbora Markets app with scanner, search, and layered chart.** An Arbora-hosted Markets application offers a market overview and a scanner with filters. It also offers symbol search and a layered chart view. It reuses the shared Atlas OHLC ChartRenderer and the epistemic-graph engine's large-dataset decimation. It also exposes its market actions as WebMCP tools. | Verified by an integration test driving the scanner, search, and chart views against fixture market data and confirming the WebMCP tool calls return the expected results.",
      "definition_source": "specs/finance-asset-manager/requirements.md",
      "definition_line": 40
    },
    {
      "id": "WEBUI-IDENTITY",
      "kind": "spec",
      "parent": null,
      "source": "specs/identity-access/status.json",
      "title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "document": "specs/identity-access/spec.md",
      "component": "Unassigned",
      "code_refs": [
        {
          "declared_in": "specs/identity-access/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "agent/agent_webui/server.py",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/agent/agent_webui/server.py"
        },
        {
          "declared_in": "specs/identity-access/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/components/ApprovalCard.tsx",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/components/ApprovalCard.tsx"
        },
        {
          "declared_in": "specs/identity-access/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/components/views/UserManagementView.tsx",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/components/views/UserManagementView.tsx"
        },
        {
          "declared_in": "specs/identity-access/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/auth.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/auth.ts"
        },
        {
          "declared_in": "specs/identity-access/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "src/lib/nav-registry.ts",
          "repository": "Knuckles-Team/overstory",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/src/lib/nav-registry.ts"
        },
        {
          "declared_in": "specs/identity-access/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "requirements.md",
          "repository": "Knuckles-Team/overstory",
          "role": "documentation",
          "url": "https://github.com/Knuckles-Team/overstory/blob/a23286cefe615aa5ec335414865f43f274b69141/specs/identity-access/requirements.md"
        }
      ],
      "relations": [],
      "plan_diagrams": [],
      "unparsed_references": []
    },
    {
      "id": "WEBUI-IDENTITY-R003",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "Identity mode wizard shows the active auth mode with no hidden bypass",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [
        "099127294433",
        "701ae2a51e27"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**Identity mode wizard shows the active auth mode with no hidden bypass.** The identity wizard shows the operator-selected mode: explicit no-auth, built-in EG authentication or external OIDC (including Keycloak/Okta). Loopback bootstrap is a separate setup state, not an implicit authentication mode. It also shows a diagnostic check result. An explicitly configured no-auth mode is visible and policy-bounded. Missing credentials, broken verifiers and provider outages cannot select it implicitly. | Mode-specific rendered and server tests confirm each mode displays correctly and no bypass is possible.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 5
    },
    {
      "id": "WEBUI-IDENTITY-R004",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "Local account flows use server sessions with no stored credentials",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "099127294433"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**Local account flows use server sessions with no stored credentials.** Agent-webui's local registration, login, logout, forgot-password, reset-password and change-password flows use server-managed sessions with anti-CSRF protection. No credential or bearer token is stored in browser persistence. | End-to-end session-fixation and CSRF probe tests confirm no credential leaks into browser storage.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 6
    },
    {
      "id": "WEBUI-IDENTITY-R005",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "MFA enrollment and recovery cover TOTP and WebAuthn",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "099127294433",
        "6ff850aba055"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**MFA enrollment and recovery cover TOTP and WebAuthn.** Agent-webui supports MFA enrollment, challenge and recovery for both TOTP and WebAuthn, including recovery codes that can each be used only once. | Positive, replay and lost-device tests confirm enrollment, challenge and one-time recovery behavior.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 7
    },
    {
      "id": "WEBUI-IDENTITY-R006",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "Identity admin tabs cover users, roles, groups and mapping dry run",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "099127294433"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**Identity admin tabs cover users, roles, groups and mapping dry run.** Agent-webui's administration interface provides tabs for users, roles, groups, authentication modes and a mapping-rule dry run, each calling a typed identity Arbora operation. | Authorized and denied generated-client tests confirm each admin tab enforces the correct access.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 8
    },
    {
      "id": "WEBUI-IDENTITY-R007",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "Elevation requests display scope, expiry and a bound receipt",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "099127294433",
        "6ff850aba055"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**Elevation requests display scope, expiry and a bound receipt.** Agent-webui's elevation request, approval and revocation views display the requested scope, reason, expiry and resulting receipt. The confirmation and step-up for an elevation action are bound to the caller and action that requested it. | Parity tests across chat and UI surfaces plus adversarial tests confirm the binding holds.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 9
    },
    {
      "id": "WEBUI-IDENTITY-R008",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "Identity or tenant change invalidates cached protected data",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "cb7ca4afa907",
        "cd1604a78520"
      ],
      "verified_by": [
        "src/__tests__/chat-store-identity.test.tsx:39"
      ],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**Identity or tenant change invalidates cached protected data.** Changing the identity mode, tenant or session in agent-webui invalidates any cached protected data. It closes active privileged interactions. It does not leave them reachable under the prior context. | A two-principal browser test confirms cached data and privileged interactions are closed on change.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 10
    },
    {
      "id": "WEBUI-IDENTITY-R009",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "Identity forms and confirmations are accessible on desktop and mobile",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "099127294433",
        "6ff850aba055"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**Identity forms and confirmations are accessible on desktop and mobile.** Agent-webui's identity forms, error messages, admin tab panels and modal confirmations are usable by keyboard and screen reader, with equivalent behavior on mobile. | An accessibility end-to-end test suite confirms keyboard, screen-reader and mobile parity.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 11
    },
    {
      "id": "WEBUI-IDENTITY-R001",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "Release-qualification identity test client supports a live sign-in probe",
      "delivery_state": "LANDED",
      "state": "landed",
      "done": false,
      "landed_in": [
        "099127294433"
      ],
      "verified_by": [],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**Release-qualification identity test client supports a live sign-in probe.** Agent-webui's release qualification maintains a dedicated OIDC test client and test-realm user. A real browser sign-in probe against the identity provider can then run end to end. | A browser sign-in probe against the provisioned test client and user confirms the authentication path works.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 12
    },
    {
      "id": "WEBUI-IDENTITY-R002",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "Admin UI surfaces identity operations for users, roles and navigation",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "099127294433",
        "401cec444a5f"
      ],
      "verified_by": [
        "src/components/views/__tests__/UserManagementView.test.tsx:192",
        "src/components/views/__tests__/UserManagementView.test.tsx:214"
      ],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**Admin UI surfaces identity operations for users, roles and navigation.** UserManagementView.tsx, AdminView.tsx and nav-registry.ts present identity administration through the Arbora identity API. | Authorized and denied generated-client tests against the live identity API confirm the admin UI enforces correct access.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 13
    },
    {
      "id": "WEBUI-IDENTITY-R003.1",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "Explicit no-auth mode with bounded anonymous policy",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**Explicit no-auth mode with bounded anonymous policy.** The operator can intentionally select no-auth for WebUI and its Arbora/EG composition. The UI clearly displays anonymous operation, its configured policy scope and the lack of confirmed human identity. Normal navigation and operations permitted by that policy work through the same UI/WebMCP dispatch. No synthetic logged-in principal, service bearer or no-op admission callback may masquerade as authentication. Network exposure obeys explicit host/origin policy; default qualification is isolated loopback. Anonymous provenance is distinguished from authenticated receipts. Operations requiring real identity, MFA, named approval or attended authenticated control must return a typed requirement/refusal, never fabricated proof. | Planned: The installed no-auth stack completes declared anonymous-policy journeys. It rejects out-of-scope/identity-required operations, cross-origin requests and accidental public exposure. UI/tool results identify the same anonymous scope.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 14
    },
    {
      "id": "WEBUI-IDENTITY-R003.2",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "Built-in EG authentication through Arbora",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**Built-in EG authentication through Arbora.** Provide built-in EG account/session authentication via Arbora-owned served identity operations and the existing WebUI session boundary. Login, session descriptors, authority and logout are composed from the real producer; WebUI stores no graph credentials or policy database. Browser HTTP and WebSocket requests carry the same validated context. | Planned: Test real composed EG login/session/use/logout with valid, invalid, expired, revoked and wrong-tenant sessions. Check HTTP/WebSocket parity and token protection.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 15
    },
    {
      "id": "WEBUI-IDENTITY-R003.3",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "External OIDC provider interoperability",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**External OIDC provider interoperability.** Support configured Keycloak and Okta through the shared OIDC/session contract, validating issuer, audience, callback/state/nonce, verifier and tenant/role mapping. Provider secrets remain server-side. Partial configuration and unavailable or invalid providers fail closed without falling back to EG or no-auth. Treat provider selection/configuration changes as operator-controlled changes, not an unauthenticated browser toggle. | Planned: Test OIDC protocol fixtures and each claimed live provider. Reject wrong issuer/audience/state, replay, unavailable discovery/JWKS and incomplete configuration. Unavailable live-provider evidence remains explicit.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 16
    },
    {
      "id": "WEBUI-IDENTITY-R010",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "Long-session renewal and mode-transition coherence",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**Long-session renewal and mode-transition coherence.** Auth modes share one server-authoritative lifecycle for expiry, bounded renewal, logout, revocation, tenant change and cancellation. In-flight UI and WebMCP calls use current admitted context, never old privileged state after transition. Renewal does not extend a revoked or logged-out session; concurrent requests coordinate renewal rather than multiplying credentials. Expired sessions require reauthentication without losing safe unsent drafts. No-auth has no invented auth renewal; changing into or out of it retires prior caches, streams, tools and receipts. | Planned: Test long-running HTTP/stream/WebSocket and manual/WebMCP flows across renewal, expiry, revocation/logout, multiple tabs and mode changes. Reject privilege carryover, duplicate effects and hidden downgrade.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 17
    },
    {
      "id": "WEBUI-IDENTITY-R003.1.1",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "Explicit anonymous source refusal boundary",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "7fae4bf34f52",
        "fae3dc4fb8be"
      ],
      "verified_by": [
        "tests/test_explicit_auth_modes.py:104",
        "tests/test_explicit_auth_modes.py:150",
        "tests/test_explicit_auth_modes.py:17",
        "tests/test_explicit_auth_modes.py:57",
        "tests/test_explicit_auth_modes.py:72"
      ],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**Explicit anonymous source refusal boundary.** Explicit no-auth binds no authenticated identity or grant. Default-empty exact read policy cannot admit direct enhanced effects. Presented credentials, unsafe exposure and cross-origin actions refuse. | Source mode tests cover anonymous provenance, policy refusal and ambient-authority cleanup. This does not deliver full no-auth journeys.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 19
    },
    {
      "id": "WEBUI-IDENTITY-R003.1.2",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "Complete installed anonymous journeys",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**Complete installed anonymous journeys.** Complete the parent no-auth navigation, visible policy and governed operations through shared UI/WebMCP dispatch. Preserve containment, confirmation and truthful anonymous receipts. | Installed positive and adversarial anonymous-policy journeys and native effect qualification remain required.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 20
    },
    {
      "id": "WEBUI-IDENTITY-R003.2.1",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "EG boundary configuration source refusal",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "7fae4bf34f52"
      ],
      "verified_by": [
        "tests/test_explicit_auth_modes.py:186"
      ],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**EG boundary configuration source refusal.** EG mode requires a typed host-owned EG session boundary. An arbitrary callback or absent owner refuses. No configuration failure changes the mode. | Source factory tests reject missing and untyped EG callbacks without provisioning credentials.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 21
    },
    {
      "id": "WEBUI-IDENTITY-R003.2.2",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "Installed EG identity journeys",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**Installed EG identity journeys.** Complete the parent real EG account, login, session, logout and HTTP/WebSocket context contract through Arbora. | Installed real producer/browser qualification remains required; source configuration refusal is not login support.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 22
    },
    {
      "id": "WEBUI-IDENTITY-R003.3.1",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "OIDC configuration source refusal",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "7fae4bf34f52"
      ],
      "verified_by": [
        "tests/test_explicit_auth_modes.py:177"
      ],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**OIDC configuration source refusal.** OIDC mode requires complete verifier and browser SSO configuration. It rejects an EG boundary and never silently changes provider mode. | Source factory tests reject incompatible owners and incomplete browser OIDC configuration.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 23
    },
    {
      "id": "WEBUI-IDENTITY-R003.3.2",
      "kind": "requirement",
      "parent": "WEBUI-IDENTITY",
      "source": "specs/identity-access/status.json",
      "title": "External provider interoperability qualification",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "WEBUI-IDENTITY \u2014 Browser identity, administration and elevation",
      "definition": "**External provider interoperability qualification.** Complete the parent OIDC contract for configured Keycloak and Okta. Validate real provider journeys and all protocol refusal cases. | Protocol fixtures and each claimed live provider remain required; configuration tests do not qualify provider interoperability.",
      "definition_source": "specs/identity-access/requirements.md",
      "definition_line": 24
    }
  ],
  "github": {
    "issues": {
      "available": true,
      "items": []
    },
    "pull_requests": {
      "available": true,
      "items": [
        {
          "number": 183,
          "title": "WIP: preserve edit-and-fork client specification",
          "html_url": "https://github.com/Knuckles-Team/overstory/pull/183",
          "created_at": "2026-10-25T06:19:46Z",
          "updated_at": "2026-10-25T06:21:12Z"
        }
      ]
    }
  },
  "spec_edges": [
    [
      "WEBUI-APPS",
      "depends on",
      "https://github.com/Knuckles-Team/arbora/blob/main/specs/dependency-ordered-release/spec.md"
    ],
    [
      "WEBUI-APPS",
      "depends on",
      "https://github.com/Knuckles-Team/arbora/blob/main/specs/hosted-api-operations/spec.md"
    ],
    [
      "WEBUI-DASH",
      "depends on",
      "WEBUI-API"
    ],
    [
      "WEBUI-DASH",
      "depends on",
      "WEBUI-APPS"
    ],
    [
      "WEBUI-DASH",
      "references",
      "https://github.com/Knuckles-Team/arbora/blob/main/specs/hosted-api-operations/spec.md"
    ]
  ]
}
