Skip to content

fleet(#1376): real-ssh two-engine e2e test — AC2/AC3 proof, CI-gated #1383

Description

@jeonghun-jj-lee

Important

Problem — AC2 (distinct-hosts resolver proof) and AC3 (real SSH transport, not a stub) from #1340 are unmet — the unit tests prove the resolver in isolation, but no test proves end-to-end "attach → traffic lands on the peer's engine over real SSH."
Approach — One CI-gated integration test: two local engines on two ports, ssh -L to localhost, assert engine/SSE traffic lands on the attached peer (distinct marker) while /amicode/roster lands on the keeper.
Scope — in: the real-ssh two-engine e2e test, CI configuration. out: resolver logic (Slice 1), attach lifecycle (Slice 2), serving advertisement (Slice 4).

Acceptance Criteria

  • Two engine instances run on distinct local ports during the test
  • An ssh -L forward connects the test client to the "peer" engine
  • Engine + SSE requests through the resolver land on the attached peer's engine (verified by a distinct response marker)
  • /amicode/roster requests land on the keeper (verified by a distinct response marker)
  • The test is CI-gated (runs in the main test suite, not opt-in)
  • p95 attach-to-first-response ≤ 2000 ms (AC4 bar from Peer fleet studios + compute federation (ADR 0027) #1340)

Testing Decisions

New integration test file (this IS the test). Model on the AC4 p95 harness from #1353 which already ran over real ssh -N in CI. The two engines can be lightweight mock HTTP servers that return distinct markers — they don't need to be full opencode instances.

Key Decisions

Constraints & Invariants

  • The test must clean up SSH processes on teardown (no orphaned ssh -N children).
  • The test must not depend on fleet enrollment state — it sets up its own lightweight fixture.

Prior Art

Source

Part of #1376. Blocked by #1378 (FleetPlane + resolver wiring) and #1381 (attach/detach lifecycle).

Activity

  1. added a commit that references this issue on Sep 21, 2026
  2. added a commit that references this issue on Sep 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions