A

Delivery structure

3 specs, 13 requirements, 1 with no code mapped
Knuckles-Team/tunnel-managerSpec delivery
Specs (3)
  • CONN-TUNNEL-MANAGER-CONNECTOR-CONTENT1
  • TM-INVENTORY3
  • CONN-TUNNEL-MANAGER-SDK9
Records not done
  • Requirementsall slices in all specs13
  • Requirements not donenot VERIFIED7
  • Specs not donewhole specs only3

Each spec shows its requirement count. Panel J lists every record.

B

Delivery states

count of total

Requirements (13)

SPECIFIED (specified)2 of 13 requirements
LANDED (landed)5 of 13 requirements
VERIFIED (verified)6 of 13 requirements

Specs (3)

SPECIFIED (specified)1 of 3 specs
LANDED (landed)2 of 3 specs

Each bar shows one state against all records of the same kind.

Percentages count current rows. Done means VERIFIED.

C

State definitions

delivery_state
StateDefinition
SPECIFIEDThe requirement is written. No code for it is on the default branch.
LANDEDA commit that carries its ID in a Spec trailer is on the default branch.
VERIFIEDIt is LANDED and a test bound to its ID exists.

A spec state is the lowest state of its rows. Done means VERIFIED.

Invalid state: 0

D

Specifications

specs/*/status.json
Spec / titleReq.LandedDoneSpec stateCode references
CONN-TUNNEL-MANAGER-CONNECTOR-CONTENTCONN-TUNNEL-MANAGER-CONNECTOR-CONTENT — The connector serves its packaged content11/10LANDEDspec.md documentation: file exists; coverage not verified
requirements.md documentation: file exists; coverage not verified
TM-INVENTORYTM-INVENTORY — One operator inventory authority31/31SPECIFIED`requirements.md` documentation: file exists; coverage not verified
`status.json` implementation: file exists; coverage not verified
contracts/inventory-volume.md documentation: file exists; coverage not verified
plan.md documentation: file exists; coverage not verified
tasks.md documentation: file exists; coverage not verified
test-spec.md documentation: file exists; coverage not verified
tunnel_manager/mcp_server.py implementation: file exists; coverage not verified
CONN-TUNNEL-MANAGER-SDKCONN-TUNNEL-MANAGER-SDK — Shared SDK capabilities in tunnel-manager99/95LANDEDtunnel_manager/connection_security.py implementation: file exists; coverage not verified
tunnel_manager/mcp_server.py implementation: file exists; coverage not verified
`requirements.md` documentation: file exists; coverage not verified
`status.json` implementation: file exists; coverage not verified

Landed counts LANDED and VERIFIED requirements. Done counts VERIFIED requirements only.

The spec state comes from the spec status file only.

U

Spec architecture

repository / component packages

Packages group specs by repository and declared component. Unassigned means no component was declared. Code links do not prove coverage. Mermaid source.

Knuckles-Team/tunnel-manager / Unassigned (3)

CONN-TUNNEL-MANAGER-CONNECTOR-CONTENT: no plan diagram declared.

CONN-TUNNEL-MANAGER-SDK: no plan diagram declared.

TM-INVENTORY: no plan diagram declared.

R

Spec relationships

declared dependencies and references

Depends on means a declared prerequisite. Extends and references do not imply prerequisite order. Shared code never creates dependencies. External targets are source declarations, not verified delivery.

Knuckles-Team/tunnel-manager / Unassigned
SpecRelationshipTargetEvidence
CONN-TUNNEL-MANAGER-CONNECTOR-CONTENTNo relationships declared; dependencies unknown
CONN-TUNNEL-MANAGER-SDKNo relationships declared; dependencies unknown
TM-INVENTORYNo relationships declared; dependencies unknown
G

Open issues and pull requests

open at capture

Issues

0 open at capture.

    Pull Requests

    0 open at capture.

      The build reads GitHub one time. This page makes no live API requests.

      J

      Record inventory

      16 records

      Each status file gives one spec row. Each requirement gives one more row. A record without a valid state shows INVALID. Expand a Definition to read the canonical requirement and verification text.

      All documented records (16 rows)
      ID / sourceKindParentStateCommit / test evidence
      CONN-TUNNEL-MANAGER-CONNECTOR-CONTENT
      CONN-TUNNEL-MANAGER-CONNECTOR-CONTENT — The connector serves its packaged content
      specNoneLANDEDNo recorded commit/test evidence
      CONN-TUNNEL-MANAGER-CONNECTOR-CONTENT-R001
      Default content
      Definition — CONN-TUNNEL-MANAGER-CONNECTOR-CONTENT / CONN-TUNNEL-MANAGER-CONNECTOR-CONTENT — The connector serves its packaged contentCanonical requirement and verification source
      **Default content.** `pyproject.toml` declares `tunnel-manager-mcp` as the single `scion_sdk.connector` entry point. The server lists the packaged `skill://` and `ontology://` resources and the packaged prompts with no `content=` argument. Proving test: `tests/test_default_content_surfaces.py`. | `resources/list` includes `skill://` and `ontology://`; `prompts/list` includes each packaged prompt.
      requirementCONN-TUNNEL-MANAGER-CONNECTOR-CONTENTLANDED3349a4f3eb56
      TM-INVENTORY
      TM-INVENTORY — One operator inventory authority
      specNoneSPECIFIEDNo recorded commit/test evidence
      TM-INVENTORY-R001
      One canonical host inventory path across surfaces
      Definition — TM-INVENTORY / TM-INVENTORY — One operator inventory authorityCanonical requirement and verification source
      **One canonical host inventory path across surfaces.** tunnel-manager resolves the shared host inventory from exactly one path, `$XDG_CONFIG_HOME/scion-sdk/inventory.yml` (using the XDG platform default when unset), with no working-directory, packaged-resource, legacy `.yaml`, or per-service fallback, and every CLI, library, MCP, and container surface reads that same file. | A fixture with only the canonical file present confirms every automatic reader resolves it, while a container-mount test confirms the deployed container reads the identical file read-only.
      requirementTM-INVENTORYSPECIFIEDNo recorded commit/test evidence
      TM-INVENTORY-R002
      Fleet name
      Definition — TM-INVENTORY / TM-INVENTORY — One operator inventory authorityCanonical requirement and verification source
      **Fleet name.** `pyproject.toml` declares `tunnel-manager-mcp` as the single `scion_sdk.connector` entry point. The content pack, the manifest `connector`, the fingerprints and the ingest binding all carry `tunnel-manager-mcp`. Proving test: `tests/test_fleet_name.py::test_connector_name_is_the_fleet_name`. | Every connector name in the package is `tunnel-manager-mcp`.
      requirementTM-INVENTORYVERIFIEDd3a8ecec3840
      tests/test_fleet_name.py:34
      TM-INVENTORY-R003
      SSH runs without a local username
      Definition — TM-INVENTORY / TM-INVENTORY — One operator inventory authorityCanonical requirement and verification source
      **SSH runs without a local username.** Every SSH connection uses the inventory entry's `user` explicitly and never depends on the local process username, so a container uid with no passwd entry and no `USER`/`LOGNAME` still connects. Tool failures are logged with their cause. The published image creates the runtime uid as a real user with a home directory. Proving test: `tests/test_no_local_username.py`. | With `getpass.getuser` raising `OSError`, a `Tunnel` built from an inventory entry resolves its username, and a failing tool call logs the underlying exception.
      requirementTM-INVENTORYSPECIFIEDNo recorded commit/test evidence
      CONN-TUNNEL-MANAGER-SDK
      CONN-TUNNEL-MANAGER-SDK — Shared SDK capabilities in tunnel-manager
      specNoneLANDEDNo recorded commit/test evidence
      CONN-TUNNEL-MANAGER-SDK-R001
      Secret references resolve through the SDK
      Definition — CONN-TUNNEL-MANAGER-SDK / CONN-TUNNEL-MANAGER-SDK — Shared SDK capabilities in tunnel-managerCanonical requirement and verification source
      **Secret references resolve through the SDK.** tunnel-manager must resolve each env:// and openbao:// SSH credential reference through the SDK credential resolver. It must not parse reference schemes itself This row follows `SCION-CENTRALIZED-CAPABILITIES-R009`. | A unit test resolves env:// and openbao:// references and rejects malformed ones
      requirementCONN-TUNNEL-MANAGER-SDKVERIFIEDd78dc1527bd4
      tests/test_connection_security.py:129
      CONN-TUNNEL-MANAGER-SDK-R002
      SDK floor and dependency set
      Definition — CONN-TUNNEL-MANAGER-SDK / CONN-TUNNEL-MANAGER-SDK — Shared SDK capabilities in tunnel-managerCanonical requirement and verification source
      **SDK floor and dependency set.** The package must require scion-sdk 0.3.11 or later. It must not pin requests This row follows `SCION-CENTRALIZED-CAPABILITIES-R040`. | pyproject.toml shows the floor and no requests pin
      requirementCONN-TUNNEL-MANAGER-SDKVERIFIED2ad135203ee0
      d78dc1527bd4
      tests/test_connection_security.py:144
      CONN-TUNNEL-MANAGER-SDK-R003
      Production wiring
      Definition — CONN-TUNNEL-MANAGER-SDK / CONN-TUNNEL-MANAGER-SDK — Shared SDK capabilities in tunnel-managerCanonical requirement and verification source
      **Production wiring.** `resolve_secret_ref` in `tunnel_manager/connection_security.py` calls `resolve_secret_reference`. The MCP tools in `tunnel_manager/mcp_server.py` call it for every `password_ref` | A test enters at the production entry point and reaches the wired call site.
      requirementCONN-TUNNEL-MANAGER-SDKVERIFIEDd78dc1527bd4
      tests/test_connection_security.py:129
      CONN-TUNNEL-MANAGER-SDK-R004
      Hot-path proof
      Definition — CONN-TUNNEL-MANAGER-SDK / CONN-TUNNEL-MANAGER-SDK — Shared SDK capabilities in tunnel-managerCanonical requirement and verification source
      **Hot-path proof.** A test calls `resolve_secret_ref` with an env:// reference set in the environment. The test reaches the SDK resolver and returns the value | The named integration test passes.
      requirementCONN-TUNNEL-MANAGER-SDKVERIFIEDd78dc1527bd4
      tests/test_connection_security.py:129
      CONN-TUNNEL-MANAGER-SDK-R005
      One wiring for every transport
      Definition — CONN-TUNNEL-MANAGER-SDK / CONN-TUNNEL-MANAGER-SDK — Shared SDK capabilities in tunnel-managerCanonical requirement and verification source
      **One wiring for every transport.** stdio, streamable HTTP with an explicit `--auth-type none`, and streamable HTTP with a JWT serve the same tools through scion-sdk's one actor and entitlement path. Nothing in tunnel-manager branches on transport. stdio and no-auth HTTP callers are the trusted local principal, and every alias is reachable. A JWT caller reaches the aliases its IdP roles, groups or `CONNECTOR_PRINCIPAL_GRANTS` entitle (`arbora=ssh:*` entitles the arbora service principal). A JWT request without a token gets HTTP 401. A refusal names its cause and never a secret. A known alias the caller is not entitled to gets `403 Refused: not entitled to ssh:<alias>` from both `tm_remote_*` and `tm_inventory_*`. `tunnel_manager_get_host` returns a typed `-32000` error. This row follows `SCION-CONNECTOR-CONTROL-R025` and `R025.3`. | `tests/test_served_actor_binding.py`; `tests/test_transport_parity_integration.py::test_jwt_refusals_name_their_cause`.
      requirementCONN-TUNNEL-MANAGER-SDKLANDED2d825f294f0a
      48f70b0ad8e4
      6325763c387a
      a91d2bdcce2b
      c698cefba2fc
      tests/test_served_actor_binding.py:103
      tests/test_served_actor_binding.py:114
      tests/test_served_actor_binding.py:138
      tests/test_served_actor_binding.py:75
      tests/test_served_actor_binding.py:84
      CONN-TUNNEL-MANAGER-SDK-R005.1
      One connection resolver
      Definition — CONN-TUNNEL-MANAGER-SDK / CONN-TUNNEL-MANAGER-SDK — Shared SDK capabilities in tunnel-managerCanonical requirement and verification source
      **One connection resolver.** `mcp_server.resolve_target` is the only place a host name becomes connection settings. `tm_remote`, `tm_inventory` on one host, `tm_system`, `tm_files` (both hosts of `diff_compare`) and `tm_security` use it. For each field the first set value wins: the caller's explicit argument, then the inventory alias (host vars, then group vars), then the `TUNNEL_*` settings, then the built-in default (port 22, `~/.ssh/config`). Tool parameters default to unset, so a parameter default never overrides the inventory. A name that is no alias, sent without an explicit user, is refused with `400 Unknown host alias: <name>`, the same from every tool. | `tests/test_transport_parity_integration.py` asserts that the listed port is the inventory group's port, not 22, and that both tools refuse an unknown alias identically.
      requirementCONN-TUNNEL-MANAGER-SDKLANDED2d825f294f0a
      CONN-TUNNEL-MANAGER-SDK-R005.2
      Every tool behaves the same on every transport
      Definition — CONN-TUNNEL-MANAGER-SDK / CONN-TUNNEL-MANAGER-SDK — Shared SDK capabilities in tunnel-managerCanonical requirement and verification source
      **Every tool behaves the same on every transport.** Against an in-process SSH host whose user and port live only in group vars, each of the 41 tools gives the same outcome over stdio, no-auth HTTP on 0.0.0.0, and JWT HTTP. `tm_inventory_run_command` and `tm_remote_run_command` on the alias return the command's stdout. | `tests/test_transport_parity_integration.py::test_stdio_serves_every_tool`, `::test_http_without_auth_serves_every_tool_identically` and `::test_http_with_jwt_serves_every_tool_identically`, run in CI.
      requirementCONN-TUNNEL-MANAGER-SDKLANDED2d825f294f0a
      CONN-TUNNEL-MANAGER-SDK-R005.3
      Failures name their cause; no host binaries
      Definition — CONN-TUNNEL-MANAGER-SDK / CONN-TUNNEL-MANAGER-SDK — Shared SDK capabilities in tunnel-managerCanonical requirement and verification source
      **Failures name their cause; no host binaries.** Every tool failure reports `Type: message`, sanitized of secrets and local paths, never a bare exception type. Key pairs are generated natively, so no `ssh-keygen` binary is needed. `check_ssh` reports key auth as working once a key-authenticated session succeeds; otherwise it reports it disabled only when `sshd_config` says `PubkeyAuthentication no`. `test_key_auth` keeps the target's port. Every destructive tool (`tm_remote_remove_host_key`, `tunnel_manager_remove_host`, `tm_operations` cancel) takes `confirm=true` when the client has no elicitation, with or without auth, on stdio and HTTP alike; the SDK refuses a client that cannot elicit and did not confirm with a message naming `confirm=true`, never a protocol error. Without either, it is refused as not confirmed, never failed with an error. A read-only inventory save reports `inventory is read-only: <path>`. | `tests/test_transport_parity_integration.py` (per-tool outcomes carry the cause). `tests/test_tm_remote_actions_characterize.py::TestRemoveHostKey::test_explicit_confirm_skips_elicitation`. `tests/test_transport_parity_integration.py::test_stdio_no_auth_destructive_call`, `::test_http_no_auth_localhost_destructive_call` and `::test_http_jwt_destructive_call` (real stdio, no-auth HTTP and JWT HTTP, with and without client elicitation). `tests/test_tunnel_manager.py::TestTunnel::test_check_ssh_server` and `::test_rotate_ssh_key`.
      requirementCONN-TUNNEL-MANAGER-SDKVERIFIED2d825f294f0a
      6325763c387a
      ecc589035a87
      tests/test_transport_parity_integration.py:763
      tests/test_transport_parity_integration.py:778
      tests/test_transport_parity_integration.py:810
      tests/test_transport_parity_integration.py:829
      CONN-TUNNEL-MANAGER-SDK-R006
      Windows portability
      Definition — CONN-TUNNEL-MANAGER-SDK / CONN-TUNNEL-MANAGER-SDK — Shared SDK capabilities in tunnel-managerCanonical requirement and verification source
      **Windows portability.** The package imports and runs on Windows with no POSIX-only API. Private files are hardened through `secure_descriptor` (`os.fchmod` 0o600 only where `os.fchmod` exists) and `secure_path` (0o600 on POSIX; `S_IREAD \| S_IWRITE` on Windows). The POSIX uid comes from `current_uid`, which is `None` where `os.getuid` is absent. Key pairs are generated natively and never by an `ssh-keygen` binary. On Windows, an SSH identity or known-hosts file that grants Everyone, Authenticated Users or BUILTIN\\Users access (write access, for known-hosts) is refused from its access-control list, since mode bits carry no group or other permission there. Proxy executables are trusted only in the Windows system and OpenSSH directories, compared case-insensitively. The Windows CI job runs the whole test suite and is a required check. | `tests/test_windows_portability.py`; `tests/test_host_key_security.py::test_known_hosts_rejects_symlinks_and_writable_files`; `tests/test_no_local_username.py::test_run_command_returns_specific_policy_cause`; the `Windows` job in `.github/workflows/windows-ci.yml`.
      requirementCONN-TUNNEL-MANAGER-SDKLANDED262f0a816132
      319f492360f2
      852d0ed19036
      b6dfabcaffbc
      TitleSpec delivery: tunnel-manager
      RepositoryKnuckles-Team/tunnel-manager
      Commitecc589035a87
      Captured (UTC)2026-11-01T09:42:03
      Snapshotsnapshot.json (v1)
      Sourcespecs/*/status.json
      Sheet1 of 1