Files
alkssh/tasks/implementation/w5-e2e-client.md
T
glm-5.3-flash f0c4127c28 docs(tasks): decompose wave 5 — validation & release
- 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
2026-10-30 00:47:33 +00:00

3.8 KiB
Raw Blame History

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
review-wave-4
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 HostKeyPolicy accepting 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's authorized_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 -R leg: tcpip_forward with the port-0 mint against a real server's actually-bound reply, the server-initiated forwarded-tcpip open 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 (subsystem sftp → 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 sshd in 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 -R leg (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-deps green

References

  • docs/plans/implementation.md §Wave 5 (the real-tool e2e bullet), §Wave 4 (the fake-sshd posture 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-sshd client-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