docs: resolve OQ-TN-14 — unix in via local, stdio out (alktty owns process stdio)
Split the last open substrate-placement question: - Unix: ships with the local feature v1 (dial_unix — same halves shape as TCP; the wire enum already carried unix per ADR-001; the params task's schema list includes all three values) - Stdio: OUT of scope — a spawned process's stdin/stdout/stderr IS alktty's pipe mode (LocalTtyBackend + tokio::process + Stdio::piped, alktty tty-local.md): three multiplexed logical streams + the exit-code control chunk (alktty ADR-004) + signal forwarding (REQ-TTY-02). A stdio bridge here would be alktty's runner mode with the terminal stripped out — a strictly worse duplicate that also drops the semantics that matter (a byte tunnel has neither exit codes nor signals). Remote command execution composes via alktty on the same channels substrate. Updated: open-questions.md OQ-TN-14 (resolved), overview.md feature gate + deps + OQ summary, producer.md OQ ref, OQ-TN-10 promotion (#3 split), phase-0-findings + both POC summaries' resolution notes, params task (schema enum includes unix), local-socket-halves task (unix ships, stdio does NOT — with the composition rationale), oq-tn-14-tracker task repurposed (boundary-maintenance: re-opens only if a consumer needs stdio-without-process-semantics — which would need its own ADR, or if the alktty/alktunnels boundary needs sharpening). Verified: taskgraph valid (12 tasks, no cycles)
This commit is contained in:
@@ -34,12 +34,12 @@ pub enum Substrate { Tcp, Udp, Unix }
|
||||
|
||||
- `deny_unknown_fields` is the loud-rejection posture (ADR-001: unknown
|
||||
fields fail schema validation, never silently ignored).
|
||||
- `Substrate::Unix` is included in the type (the wire enum per ADR-001)
|
||||
but NOT in the open-op schema's enum list v1 (`["tcp", "udp"]`) until
|
||||
OQ-TN-14 resolves — an older producer rejecting a newer substrate is
|
||||
the SSH "unknown channel type" posture; the schema list is the
|
||||
authoritative gate. Document this asymmetry in the type docs (type
|
||||
extensible, schema conservative).
|
||||
- `Substrate::Unix` is included in the type AND in the open-op schema's
|
||||
enum list v1 (`["tcp", "udp", "unix"]` — OQ-TN-14 resolved: unix has
|
||||
an implementation path via the `local` feature). The schema list is
|
||||
the authoritative gate for newer-substrate negotiation: an older
|
||||
producer rejecting a newer substrate value is the SSH "unknown
|
||||
channel type" posture (loud, not silent).
|
||||
|
||||
### The open-op spec (in producer.rs or params.rs — put it where
|
||||
`tunnels/producer-open-op` can consume; the spec builder lives in
|
||||
@@ -56,7 +56,8 @@ pub fn tunnel_open_spec() -> OperationSpec
|
||||
- `OperationType::Sub`; `Visibility::External`; channel-open marker
|
||||
`ChannelOpenSpec::new(TUNNEL_ALPN)`.
|
||||
- `input_schema`: `{resource: string (required), substrate: string enum
|
||||
["tcp","udp"] (required)}` — JSON Schema Draft shape as the POCs used.
|
||||
["tcp","udp","unix"] (required)}` — JSON Schema Draft shape as the
|
||||
POCs used (unix in the list per OQ-TN-14's resolution).
|
||||
- `output_schema`: `{channel_id: integer > 0}`.
|
||||
- `AccessControl.required_scopes: [TUNNEL_OPEN_SCOPE]` (ADR-006).
|
||||
- `description`: a one-line human hint (round-trips through discovery;
|
||||
|
||||
Reference in New Issue
Block a user