75 lines
3.8 KiB
Markdown
75 lines
3.8 KiB
Markdown
## ADDED Requirements
|
|
|
|
### Requirement: Typed sequenced input envelope
|
|
The `input.sequenced.v1` payload SHALL begin with ASCII `VGI1`, a one-byte
|
|
event kind, and one-byte payload length. It SHALL contain exactly one bounded
|
|
keyboard, mouse-button, relative-mouse, UTF-8 scalar, or controller-state
|
|
event. False keyboard/mouse state and zeroed controller state are explicit
|
|
releases. Multibyte integer fields SHALL be big-endian. Unknown kinds,
|
|
length mismatches, malformed UTF-8, unsupported controller indices, and
|
|
reserved fields SHALL be rejected before provider translation.
|
|
|
|
#### Scenario: Keyboard state change
|
|
- **WHEN** a client sends a valid keyboard press or release envelope
|
|
- **THEN** the gateway forwards the corresponding typed provider input on its
|
|
reliable keyboard channel and records the pressed state for cleanup.
|
|
|
|
#### Scenario: Invalid input envelope
|
|
- **WHEN** a client sends an envelope with an unknown event kind, invalid
|
|
length, malformed UTF-8 scalar, or nonzero reserved field
|
|
- **THEN** the gateway rejects it without sending provider input or changing
|
|
pressed state.
|
|
|
|
### Requirement: Explicit input release
|
|
The typed input envelope SHALL represent release of each keyboard key,
|
|
mouse button, and controller state. Gateway cleanup SHALL send a typed release
|
|
for every accepted pressed state before provider disconnect; it SHALL NOT use
|
|
an implementation-specific release-all provider command.
|
|
|
|
#### Scenario: Tunnel cleanup with pressed input
|
|
- **WHEN** a tunnel closes after accepted pressed keyboard, mouse, or
|
|
controller input
|
|
- **THEN** the gateway emits the corresponding individual provider release
|
|
packets reliably before starting provider disconnect.
|
|
|
|
### Requirement: Bounded provider feedback control envelope
|
|
The bidirectional reliable control flow SHALL define an ASCII `VGF1` envelope
|
|
with a direction byte, type byte, big-endian payload length, and exact payload
|
|
bytes. Only host termination, rumble, and HDR feedback SHALL be valid from the
|
|
gateway to the client; only IDR and FEC/loss feedback SHALL be valid from the
|
|
client to the gateway. The envelope SHALL contain no provider address,
|
|
certificate, credential, or opaque provider packet.
|
|
|
|
#### Scenario: Host termination forwarding
|
|
- **WHEN** the Apollo adapter receives an authenticated host termination
|
|
packet
|
|
- **THEN** the gateway forwards a bounded `VGF1` termination envelope over
|
|
reliable Verse control and reports the provider state separately.
|
|
|
|
#### Scenario: Unauthorized or malformed feedback
|
|
- **WHEN** feedback is disabled by policy, has an invalid direction/type/length,
|
|
or contains a forbidden provider field
|
|
- **THEN** the gateway rejects it without forwarding or provider mutation.
|
|
|
|
### Requirement: Policy-bound text clipboard envelope
|
|
The reliable `clipboard.text.v1` flow SHALL carry only a typed UTF-8 text
|
|
envelope with exact direction and a bounded loop token. The Server SHALL mint
|
|
the enabled directions, maximum text bytes, and maximum updates per minute in
|
|
authenticated provider work. The gateway SHALL reject disabled direction,
|
|
unknown fields, files, file URLs, client folders, binary data, malformed UTF-8,
|
|
oversized values, rates above policy, and reflected/replayed loop tokens. It
|
|
SHALL not put clipboard content, provider routes, or credentials in telemetry,
|
|
audit, state, or errors.
|
|
|
|
#### Scenario: Clipboard audit metadata
|
|
- **WHEN** the gateway accepts, suppresses, or rejects a clipboard update
|
|
- **THEN** it sends an authenticated Server audit record with only direction,
|
|
bounded byte count, outcome, and a fixed reason; it never includes text or
|
|
the loop token.
|
|
|
|
#### Scenario: Reflected clipboard value
|
|
- **WHEN** a client-originated text value returns from the provider with the
|
|
matching retained token/value pair
|
|
- **THEN** the gateway suppresses the reflected update without a second
|
|
provider mutation or client delivery.
|