- Seven task files under tasks/implementation/: w5-decline-matrix, w5-e2e-server, w5-e2e-client, w5-fuzz-harness, w5-release-readiness, review-wave-5 (pure review), w5-publish (over the gate) - Four independent implementation tasks (disjoint files) over the landed waves; release readiness over all four; the gate stays a pure review; the publish is its own task (the alkgit pattern) - Interpretations recorded: gate-then-publish split, e2e vehicle placement, matrix-runner vehicle, fuzz exposure shape, the crate-qualified alkssh-v0.1.0 tag, no version bump (0.1.0 is the manifest value) - Plan doc: wave-5 row -> decomposed + the decomposition record Verification: taskgraph validate (42 tasks) clean
3.8 KiB
3.8 KiB
id, name, status, depends_on, scope, risk, impact, level
| id | name | status | depends_on | scope | risk | impact | level | |
|---|---|---|---|---|---|---|---|---|
| w5-e2e-client | Wave 5 — real-tool e2e, client direction (the door against a real sshd) | pending |
|
moderate | medium | phase | implementation |
Description
The client-direction real-tool e2e — the reverse-runner shape
re-landed against a real sshd (docs/plans/implementation.md
§Wave 5, the real-tool e2e bullet's client half; the wave-4 client
rows ran against the in-process fake sshd double, and the wave-4
gate named real-sshd e2e wave-5 territory explicitly). A dedicated
new binary (decide + record the placement — tests/e2e_client.rs
reusing tests/common is the recommended posture, disjoint from the
matrix task's binaries), under the check-gated
skipped-with-reason posture:
- The sshd fixture — a spawned real OpenSSH server the dial
targets: host key generated (ed25519), a listen port picked, the
HostKeyPolicyaccepting the fixture's known fingerprint (the case-1 pin posture — the policy seam consumed against a real presented key), a generated ed25519 user key authorized in the fixture'sauthorized_keys(the decrypt-at-dial path over the in-memory vault double). The fixture's exact shape (spawned per-test vs a shared per-binary instance; the sshd_config knobs — publickey-only, no password) decided + recorded. - The op rows against real sshd — exec (exit-status parity
through a real server's reaping), the direct-tcpip dial (a real
TCP connection through the server's forwarding —
-L-shaped), the-Rleg:tcpip_forwardwith the port-0 mint against a real server's actually-bound reply, the server-initiatedforwarded-tcpipopen served through the acceptor registry (the reverse-runner consumer pattern end to end), the cancel form tearing the real listen down. - The decline rows against a real server — the sftp client-side
placeholder decline (
subsystemsftp → the typed decline), the unfeatured direct-tcpip decline (the connection stays usable — the typed-open decline mirror's real-server row), the host-key policy mismatch hard-decline (a wrong-fingerprint fixture → no dial, the case-1 posture against a real presented key). - Every skip reasoned (no
sshdin the environment / fixture constraints), every finding fixed in-task or booked for the gate — never absorbed silently.
Acceptance Criteria
- The sshd fixture lands (spawned real server, ed25519 host + user keys, the policy pin posture); its shape decided + recorded
- Exec, direct-tcpip, and the
-Rleg (port-0 mint + accepted arrival + cancel) green against real sshd (or reasoned-skipped) - The decline rows green: sftp placeholder, unfeatured direct-tcpip (connection stays usable), host-key mismatch hard-decline
- Every finding fixed in-task or booked for the gate (recorded)
cargo test(+ the builds the new binary rides), clippy ×2 (-D warnings), fmt,cargo doc --no-depsgreen
References
- docs/plans/implementation.md §Wave 5 (the real-tool e2e bullet),
§Wave 4 (the fake-
sshdposture this task's real server replaces for e2e) - docs/architecture/client.md (the dial surface, op rows, the acceptor), docs/research/reverse-runner.md (the consumer pattern the client direction serves)
- docs/research/poc-2*.md / the reverse-runner extraction (the
real-
sshdclient-direction evidence this re-lands against the shipped crate) - tests/client_dial.rs, tests/client_ops.rs, tests/client_reverse_listen.rs (the double-driven rows this task mirrors against the real server), tests/common/sshd_double.rs (the double's semantics — what the real fixture must match)
Notes
To be filled by implementation agent
Summary
To be filled on completion