{
  "version": 1,
  "repository": "Knuckles-Team/agent-terminal-ui",
  "revision": "4239e3b45d60e19bfbe3a16ba897670e0fb31b00",
  "captured_at": "2026-10-13T14:31:14.657931+00:00",
  "records": [
    {
      "id": "TUI-RUNTIME",
      "kind": "spec",
      "parent": null,
      "source": "specs/terminal-runtime/status.json",
      "title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "document": "specs/terminal-runtime/spec.md",
      "component": "Unassigned",
      "code_refs": [
        {
          "declared_in": "specs/terminal-runtime/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "agent_terminal_ui/app.py",
          "repository": "Knuckles-Team/agent-terminal-ui",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/agent-terminal-ui/blob/4239e3b45d60e19bfbe3a16ba897670e0fb31b00/agent_terminal_ui/app.py"
        },
        {
          "declared_in": "specs/terminal-runtime/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "agent_terminal_ui/client.py",
          "repository": "Knuckles-Team/agent-terminal-ui",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/agent-terminal-ui/blob/4239e3b45d60e19bfbe3a16ba897670e0fb31b00/agent_terminal_ui/client.py"
        },
        {
          "declared_in": "specs/terminal-runtime/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "agent_terminal_ui/commands.py",
          "repository": "Knuckles-Team/agent-terminal-ui",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/agent-terminal-ui/blob/4239e3b45d60e19bfbe3a16ba897670e0fb31b00/agent_terminal_ui/commands.py"
        },
        {
          "declared_in": "specs/terminal-runtime/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "agent_terminal_ui/commands.py:244",
          "repository": "Knuckles-Team/agent-terminal-ui",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/agent-terminal-ui/blob/4239e3b45d60e19bfbe3a16ba897670e0fb31b00/agent_terminal_ui/commands.py#L244"
        },
        {
          "declared_in": "specs/terminal-runtime/plan.md",
          "evidence": "file exists; coverage not verified",
          "label": "agent_terminal_ui/skills/agent-terminal-ui-development/SKILL.md",
          "repository": "Knuckles-Team/agent-terminal-ui",
          "role": "documentation",
          "url": "https://github.com/Knuckles-Team/agent-terminal-ui/blob/4239e3b45d60e19bfbe3a16ba897670e0fb31b00/agent_terminal_ui/skills/agent-terminal-ui-development/SKILL.md"
        },
        {
          "declared_in": "specs/terminal-runtime/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "`requirements.md`",
          "repository": "Knuckles-Team/agent-terminal-ui",
          "role": "documentation",
          "url": "https://github.com/Knuckles-Team/agent-terminal-ui/blob/4239e3b45d60e19bfbe3a16ba897670e0fb31b00/specs/terminal-runtime/requirements.md"
        },
        {
          "declared_in": "specs/terminal-runtime/spec.md",
          "evidence": "file exists; coverage not verified",
          "label": "`status.json`",
          "repository": "Knuckles-Team/agent-terminal-ui",
          "role": "implementation",
          "url": "https://github.com/Knuckles-Team/agent-terminal-ui/blob/4239e3b45d60e19bfbe3a16ba897670e0fb31b00/specs/terminal-runtime/status.json"
        }
      ],
      "relations": [],
      "plan_diagrams": [],
      "unparsed_references": []
    },
    {
      "id": "TUI-RUNTIME-R001",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Terminal operation client issues typed commands with pending approvals",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "d2b5cea055c8"
      ],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Terminal operation client issues typed commands with pending approvals.** Agent-terminal-ui's client and commands modules validate an operation ID and JSON input against the installed generated Graph OS registry before invoking it, and surface an A2A approval exchange as pending rather than granting it locally; approval actions stay unavailable until the corresponding Graph OS contract is proven end to end. | Command and client tests confirm invalid operations are rejected. Negative approval tests confirm pending approvals are never silently granted.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 10
    },
    {
      "id": "TUI-RUNTIME-R001.1",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Known op and object params produce one versioned request with correct envelope",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "d309979d133f"
      ],
      "verified_by": [
        "tests/test_client.py:359",
        "tests/test_client.py:377",
        "tests/test_client.py:396",
        "tests/test_client.py:439",
        "tests/test_client.py:472"
      ],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Known op and object params produce one versioned request with correct envelope.** Child slice of `TUI-RUNTIME-R001` (see tasks.md). | Unit command parser plus httpx.MockTransport. Installed generated registry artifact. Known op and object params produce one versioned request with correct envelope. Empty ID, malformed JSON, array input, unknown op, missing registry file and digest mismatch make zero effect requests",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 11
    },
    {
      "id": "TUI-RUNTIME-R001.2",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Verified caller header reaches remote GraphOS only over TLS",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "d309979d133f"
      ],
      "verified_by": [
        "tests/test_client.py:107",
        "tests/test_client.py:113",
        "tests/test_client.py:120",
        "tests/test_client.py:98"
      ],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Verified caller header reaches remote GraphOS only over TLS.** Child slice of `TUI-RUNTIME-R001` (see tasks.md). | Client transport with loopback and remote URLs, fake bearer. Verified caller header reaches remote GraphOS only over TLS. Remote HTTP, absent/invalid bearer, credential in exception/log/snapshot all fail",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 12
    },
    {
      "id": "TUI-RUNTIME-R001.3",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "One /confirm resumes exactly the issued plan",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "d309979d133f"
      ],
      "verified_by": [
        "tests/test_client.py:508",
        "tests/test_client.py:527",
        "tests/test_client.py:556",
        "tests/test_commands.py:732",
        "tests/test_commands.py:784"
      ],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**One /confirm resumes exactly the issued plan.** Child slice of `TUI-RUNTIME-R001` (see tasks.md). | A2A fake server that issues a PLAN with binding and expiry. One /confirm resumes exactly the issued plan. Tampered op/input/digest/subject, expired plan and replay are rejected before any effect. Server also rejects stale lease",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 13
    },
    {
      "id": "TUI-RUNTIME-R001.4",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Typed success renders and chat remains functional",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "00fa879f55f8",
        "d309979d133f"
      ],
      "verified_by": [
        "tests/test_client.py:196",
        "tests/test_client.py:208",
        "tests/test_client.py:232"
      ],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Typed success renders and chat remains functional.** Child slice of `TUI-RUNTIME-R001` (see tasks.md). | Mock error envelope, timeout, disconnect and malformed JSON. Typed success renders and chat remains functional. Every failure renders an error, leaves session usable and never reports success",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 14
    },
    {
      "id": "TUI-RUNTIME-R001.5",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Pending request is displayed. No effect is asserted",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "d309979d133f"
      ],
      "verified_by": [
        "tests/test_client.py:540",
        "tests/test_client.py:569",
        "tests/test_client.py:592",
        "tests/test_client.py:606",
        "tests/test_client.py:629"
      ],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Pending request is displayed. No effect is asserted.** Child slice of `TUI-RUNTIME-R001` (see tasks.md). | Pending A2A task with input-required and approval metadata. Pending request is displayed. No effect is asserted. Approvals., fleet grant, missing signed exchange and wrong pending-call binding are refused. Enabling approval requires separate served receipt",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 15
    },
    {
      "id": "TUI-RUNTIME-R001.6",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Base chat works. Compatible optional install enables /op",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "d309979d133f"
      ],
      "verified_by": [
        "tests/test_client.py:407",
        "tests/test_client.py:423",
        "tests/test_commands.py:768"
      ],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Base chat works. Compatible optional install enables /op.** Child slice of `TUI-RUNTIME-R001` (see tasks.md). | Clean Python 3.11 base environment and supported optional-client environment. Base chat works. Compatible optional install enables /op. No compatible client yields clear CLIENT_UNAVAILABLE and no untyped fallback",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 16
    },
    {
      "id": "TUI-RUNTIME-R001.7",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Legacy screens still render or use served replacement",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "d309979d133f"
      ],
      "verified_by": [
        "tests/test_client.py:688",
        "tests/test_commands.py:800",
        "tests/test_import_guard.py:46",
        "tests/test_import_guard.py:53",
        "tests/test_import_guard.py:63"
      ],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Legacy screens still render or use served replacement.** Child slice of `TUI-RUNTIME-R001` (see tasks.md). | Route/import inventory plus Textual pilot tests. Legacy screens still render or use served replacement. No agent_utilities.knowledge_graph import, duplicate transport or invisible command fallback",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 17
    },
    {
      "id": "TUI-RUNTIME-R002",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Terminal chat transport is reconciled with the current Graph OS boundary",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [
        "d2b5cea055c8",
        "d309979d133f"
      ],
      "verified_by": [
        "tests/test_client.py:136",
        "tests/test_client.py:261",
        "tests/test_client.py:285",
        "tests/test_client.py:313"
      ],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Terminal chat transport is reconciled with the current Graph OS boundary.** Agent-terminal-ui selects and implements one canonical transport for its primary conversational connection to Graph OS in place of the unmounted streaming and remote-procedure routes it currently expects, updates its client to that transport atomically, and removes the superseded code path. | Session, authentication, streaming and cancel behavior against the chosen transport are proven by integration tests before the superseded path is removed.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 18
    },
    {
      "id": "TUI-RUNTIME-R003",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Packaged development skill carries the rapid-delivery contract",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "1f9a26a46229"
      ],
      "verified_by": [
        "tests/test_skill_package.py:10"
      ],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Packaged development skill carries the rapid-delivery contract.** Add `agent_terminal_ui/skills/agent-terminal-ui-development/SKILL.md`, shaped like agent-webui's skill, with the five-minute lane rules. | `tests/test_skill_package.py::test_development_skill_packaged` asserts the file ships in the wheel and names the lane rules.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 19
    },
    {
      "id": "TUI-RUNTIME-R004",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Pre-commit runs the spec and sprawl hooks agent-webui runs",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Pre-commit runs the spec and sprawl hooks agent-webui runs.** Add the `spec-standard`, `check-public-specs`, `ste-staged`, `check-root-hygiene` and `check-gitignore-convergence` hook ids to `.pre-commit-config.yaml`. | `tests/test_precommit_hooks.py::test_spec_hooks_present` parses the config and asserts each id.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 20
    },
    {
      "id": "TUI-RUNTIME-R005",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Docs layout matches agent-webui",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "1f9a26a46229"
      ],
      "verified_by": [
        "tests/test_docs_layout.py:9"
      ],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Docs layout matches agent-webui.** Add `docs/start.md`, `docs/status.md`, `docs/deployment.md` and `docs/design-system.md`, and list them in `mkdocs.yml`. | `tests/test_docs_layout.py::test_docs_pages_in_nav` asserts each file exists and appears in the nav.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 21
    },
    {
      "id": "TUI-RUNTIME-R006",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Pyproject configures the pipelines hook sections",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "1f9a26a46229"
      ],
      "verified_by": [
        "tests/test_precommit_hooks.py:9"
      ],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Pyproject configures the pipelines hook sections.** Add `[tool.pipelines_hooks.public_surface]` and `[tool.pipelines_hooks.ste]` with `specs` in `paths` to `pyproject.toml`. | `tests/test_precommit_hooks.py::test_pipelines_hook_sections` parses `pyproject.toml` and asserts both sections.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 22
    },
    {
      "id": "TUI-RUNTIME-R007",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Release workflow caller matches agent-webui",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Release workflow caller matches agent-webui.** Add `.github/workflows/release.yml` calling the shared pipelines release workflow at `main`. | `tests/test_docs_layout.py::test_release_workflow_calls_pipelines` asserts the `uses:` line.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 23
    },
    {
      "id": "TUI-RUNTIME-R008",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Terminal theme tokens and accessibility are a stated contract",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Terminal theme tokens and accessibility are a stated contract.** `agent_terminal_ui/app.py` selects a Textual theme by name. State the token set, contrast floor and a no-colour fallback, as the design-system area in agent-webui does. | `tests/test_app_handlers.py::test_theme_tokens_and_no_color_fallback` asserts the default theme and the fallback.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 24
    },
    {
      "id": "TUI-RUNTIME-R009",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "AGENTS.md sections match agent-webui",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "1f9a26a46229"
      ],
      "verified_by": [
        "tests/test_docs_layout.py:17"
      ],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**AGENTS.md sections match agent-webui.** Add `Commands`, `Quality gates`, `Branching & isolation` and `Documentation` headings to `AGENTS.md`. | `tests/test_docs_layout.py::test_agents_md_headings` asserts the headings.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 25
    },
    {
      "id": "TUI-RUNTIME-R010",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Run harness surface is read-only and honest",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Run harness surface is read-only and honest.** The agent-terminal-ui client must display a run's current plan, context use against budget, applied harness configuration, cost and termination reason. The client reads only graph-os operations. | Children TUI-RUNTIME-R010.1 to TUI-RUNTIME-R010.6.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 26
    },
    {
      "id": "TUI-RUNTIME-R010.1",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Run operation wiring",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Run operation wiring.** Model: `GRAPHOS-OPS-R021.4.5` serves the summary; `.4` serves separately labelled aggregates; `.6` supplies registration. Behavior: The view must select one `run_id` through the existing client transport. Wiring: the production path in plan.md must reach this field. Refusal: Absent registration, timeout or denial must display unavailable without direct engine calls. | Evidence: planned `tests/test_run_inspector_contract.py::test_run_read_uses_graphos_operations`. A selected run must render through the served operation and existing client.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 27
    },
    {
      "id": "TUI-RUNTIME-R010.2",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Applied configuration",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Applied configuration.** Model: `GRAPHOS-OPS-R021.4.5` projects the decision edge owned by `EG-ORCH-VOCAB-R009.9`. Behavior: The view must display the recorded configuration reference and available `context_policy`, `plan_scaffold` and `action_space`. Wiring: the production path in plan.md must reach this field. Refusal: Missing or inaccessible configuration must not use defaults or the latest configuration. | Evidence: planned `tests/test_run_inspector_contract.py::test_harness_config_shown`. A committed configuration must retain its reference and values through the client.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 28
    },
    {
      "id": "TUI-RUNTIME-R010.3",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Context and cost",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Context and cost.** Model: `GRAPHOS-OPS-R021.4.5` maps `.2`, `.3` and `.8` of `EG-ORCH-VOCAB-R009`. Behavior: The view must label peak tokens, budget tokens and per-run USD cost separately. Wiring: the production path in plan.md must reach this field. Refusal: Null values must display unavailable; zero-solved abstention must not render zero cost. | Evidence: planned `tests/test_run_inspector_contract.py::test_context_and_cost_shown`. Measured zero must render as zero; aggregate cost must retain its solved-task label.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 29
    },
    {
      "id": "TUI-RUNTIME-R010.4",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Read-only current plan",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Read-only current plan.** Model: `GRAPHOS-OPS-R021.4.5` defines the snapshot boundary; `AU-HARNESS-R014` still lacks the required public export. Behavior: The view must display only an available authorized snapshot from `runs.get.current_plan`. Wiring: the production path in plan.md must reach this field. Refusal: Expired, wrong-run, regressing or unavailable snapshots must reveal no items or edit controls. | Evidence: planned `tests/test_run_inspector_contract.py::test_plan_read_only`. A fresh matching snapshot must preserve item order, revision and AU statuses.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 30
    },
    {
      "id": "TUI-RUNTIME-R010.5",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Distinct terminal reasons",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Distinct terminal reasons.** Model: `GRAPHOS-OPS-R021.4.5` maps `EG-ORCH-VOCAB-R009.1`. Behavior: The view must map each recorded terminal reason to a distinct label. Wiring: the production path in plan.md must reach this field. Refusal: Unknown or missing reasons must display unavailable; overflow and stuck must not collapse to generic failure. | Evidence: planned `tests/test_run_inspector_contract.py::test_termination_reasons_distinct`. Each of final_answer, context_overflow, stuck, step_budget and error must have its own label.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 31
    },
    {
      "id": "TUI-RUNTIME-R010.6",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Served surface proof",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Served surface proof.** Model: `GRAPHOS-OPS-R021.4.6` supplies registration and generated-client parity. Behavior: The test must enter the production UI and observe all fields through the real client and served operation. Wiring: the production path in plan.md must reach this field. Refusal: Denied reads after success must clear prior protected values; the UI must stay responsive without fabricated data. | Evidence: planned `tests/test_run_inspector_contract.py::test_run_surface_end_to_end`. A served fixture must render summary, configuration, context, cost and an available plan.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 32
    },
    {
      "id": "TUI-RUNTIME-R002.1",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Preserve original chat transport acceptance",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Preserve original chat transport acceptance.** Model: The terminal uses one canonical transport for its primary GraphOS conversation. This replaces its expected unmounted streaming and remote-procedure routes. Behavior: The client changes atomically to the chosen transport. Remove old paths only after the original integration acceptance passes. Wiring: Extend the existing client and session entry. Refusal: Keep old paths until proof passes. Evidence: Serve session, authentication, streaming and cancellation cases. | Integration tests cover session, authentication, streaming and cancellation against the chosen transport. Remove superseded paths only after those tests pass.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 39
    },
    {
      "id": "TUI-RUNTIME-R002.2",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Validate the host receipt and scope",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Validate the host receipt and scope.** Model: The v1 HostLaunchReceipt binds host, mode, endpoint, session, workspace, readiness and opaque log reference. The server binds reads to tenant, principal, host, workspace, generation and expiry. R010.7 defines HostLaunchRequest.web_logs, but the current receipt contract omits it. Behavior: GraphOS must bind the effective boolean into an authenticated receipt or handoff. Bind it to host, workspace, tenant and principal. The TUI validates every binding before a read. Wiring: Use GraphOS contracts GRAPHOS-HOST-R009.2 through R009.6 and R010.7. Refusal: Missing readiness, preference or scope, an unknown version, expiry or changed binding yields zero reads. Receipt data alone grants no authority. Evidence: A matching served receipt and preference succeeds. Alter each binding independently for negative cases. | A bound preference and matching receipt permit reads. Missing or changed fields yield zero reads.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 40
    },
    {
      "id": "TUI-RUNTIME-R002.3",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Define the terminal consumer adapter",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Define the terminal consumer adapter.** Model: The TUI defines one public adapter named agent_terminal_ui.app.run_host_terminal. It takes HostLaunchReceipt, AgentClient and an optional HostLogReader. Plan.md gives the exact type signature. Behavior: Borrow the injected client and reader. Read only the receipt's opaque authorized reference. Wiring: Reuse the application, client and MainScreen path. Refusal: Missing reader, reference or producer returns unavailable and makes zero reads. Do not add a route, router, gateway or filesystem reader. Evidence: Enter through the public adapter on the served terminal path. | A valid reference reaches the reader. A missing capability makes zero reads and reads no file path.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 41
    },
    {
      "id": "TUI-RUNTIME-R002.4",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Honor producer-selected modes and unify the log view",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Honor producer-selected modes and unify the log view.** Model: GraphOS selects terminal, web or both under R010.7. Child .2 defines the producer handoff prerequisite for web_logs. The TUI accepts only that bound preference. Behavior: Subscribe only in terminal or both mode when web_logs is true. A false or missing preference yields zero TUI reads while chat continues. Web mode always makes zero TUI reads. The required host redacted sink stays enabled. The /logs command and Ctrl+V use the same view. Wiring: Reuse CommandProcessor.cmd_logs, MainScreen.action_toggle_logs and RichLog. Refusal: Local input cannot override mode or preference. Unknown or unbound values return unavailable with zero reads. The TUI cannot disable the host sink. Render text literally and strip terminal controls. Evidence: Exercise all modes with enabled, disabled and absent preferences through the real selector and UI. | Terminal/both with enabled preference render one correlated record through /logs and Ctrl+V. Disabled, absent and web-mode cases make zero TUI reads. Chat continues and the host sink remains enabled.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 42
    },
    {
      "id": "TUI-RUNTIME-R002.5",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Enforce tenant scope and bound log lifecycle",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Enforce tenant scope and bound log lifecycle.** Model: HostLogBatch binds schema, scope, host, generation, tenant-local records, cursor and optional gap. Each record carries request correlation, sequence, timestamp, severity and redacted message. Behavior: Reauthorize every read and reconnect. Preserve order and report rotation gaps. Clear records and cursors after denial. Cancel the owned reader when the view closes. Wiring: Use one worker on the existing screen path. The adapter owns only subscription and view state. Refusal: Reject foreign, expired, revoked or regressing scopes and cursors. Never open a shared file, close a borrowed client or stop the host. Evidence: Observe per-tenant sequences, queue bounds, gaps, denial clearing and cancellation. Allow one read in flight and 128 records per batch. Limit each record to 16 KiB. Limit pending data to 128 records or 2 MiB. Keep 1000 rendered lines. Set one-second read and five-second cancellation timeouts. | Two tenants sharing one workspace receive only their own records and offsets. Rotation yields a gap. Denial clears state. Unmount cancels within five seconds.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 43
    },
    {
      "id": "TUI-RUNTIME-R002.6",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Prove the served consumer journey",
      "delivery_state": "SPECIFIED",
      "state": "specified",
      "done": false,
      "landed_in": [],
      "verified_by": [],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Prove the served consumer journey.** Model: Evidence names producer and consumer revisions, receipt version, bound web_logs preference, tenant scope and fixture seed. Behavior: Exercise terminal, web and both modes with the preference enabled and disabled on the actual GraphOS host and production TUI. Keep agent interaction available. Wiring: Use the normal request path, not an isolated helper. Refusal: Mocks do not prove served behavior. Missing preference or denied workspace scope yields zero unauthorized TUI reads. Slow rendering cannot block host HTTP. Evidence: Track request IDs, sequences, gaps, read counts, render time, HTTP response and revisions. Disabled preference cannot stop the required host sink. Save no credentials or raw sensitive logs. | Seed 116117 creates two tenants with separate principals in one workspace. Each emits 128 unique request IDs. Repeat the fixture twice. Normalize timestamps. Compare per-tenant ordered IDs, sequences and gaps. Cover every mode with preference on/off, rotation, reconnect, revocation and denial. Disabled cases make zero TUI reads while chat and the host sink continue. Keep request-to-render time below two seconds. Include a live HTTP response during slow rendering.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 44
    },
    {
      "id": "TUI-RUNTIME-R002.7",
      "kind": "requirement",
      "parent": "TUI-RUNTIME",
      "source": "specs/terminal-runtime/status.json",
      "title": "Native configured discovery",
      "delivery_state": "VERIFIED",
      "state": "verified",
      "done": true,
      "landed_in": [
        "e8711e7f49bf"
      ],
      "verified_by": [
        "native/agent-terminal-ui/src/main.rs:94",
        "native/agent-terminal-ui/tests/discovery.rs:110",
        "native/agent-terminal-ui/tests/discovery.rs:29",
        "native/agent-terminal-ui/tests/discovery.rs:50",
        "native/agent-terminal-ui/tests/discovery.rs:73"
      ],
      "parent_title": "TUI-RUNTIME \u2014 Terminal GraphOS operation client",
      "definition": "**Native configured discovery.** Model: Rust reads AGENT_URL and AGENT_BEARER_TOKEN. Behavior: Fetch the GraphOS Agent Card and render its name or a redacted error. Wiring: Use one authenticated HTTP client, Tokio and Ratatui. Refusal: Require TLS and credentials remotely; reject redirects, invalid cards and responses over 1 MiB. Local cancellation stops discovery only. No task submission, approval or remote cancellation is enabled. | Native HTTP fixture tests verify the request, credential transport, error refusal and cancellation. A terminal buffer test verifies the unavailable task actions. A served GraphOS receipt remains separate evidence.",
      "definition_source": "specs/terminal-runtime/requirements.md",
      "definition_line": 64
    }
  ],
  "github": {
    "issues": {
      "available": true,
      "items": []
    },
    "pull_requests": {
      "available": true,
      "items": []
    }
  },
  "spec_edges": []
}
