Skip to content

Peer serving advertisement + resolvable keeper coordinate (ADR 0027 · Slice 1) #1341

Description

@jeonghun-jj-lee

Important

Problem — Peer attach/switch needs two things before anything can route: a machine must be able to advertise that it is serving (so the UI has something to attach to), and the directory keeper must be reachable by a resolvable coordinate. Today the roster carries per-machine rows but no "I am serving, reach me here" advertisement, and the keeper is only a role — finding it via the very roster.json it hosts is circular.
Approach — On the existing open capabilities axis, a peer writes a serving tag plus reach coordinates to its own roster row (single-writer self-report, unchanged). Separately, introduce a resolvable keeper bootstrap pointer (a sibling to the attach pointer) so "reach the keeper" does not depend on already having the roster. Neither touches server_mode or fleet.json.
Scope — in: the serving advertisement (tag + reach coordinates) as a placement-ready descriptor; the keeper bootstrap pointer. out: the resolver/pointer that consumes them (Slice 2); transport (Slice 3).
Assumptions — the merged host-owned roster + its GET/POST routes are the substrate; the capabilities axis is open and additive (ADR 0026).

Acceptance Criteria

  • serving_tag_present_on_roster == 1 — a peer that advertises writes a row carrying a serving tag + reach coordinates; a read of the roster shows the tag/coordinates present.
  • The advertisement is a placement-ready descriptor (reachable / serving / headroom fields), not a display-only chip.
  • A resolvable keeper bootstrap pointer exists and resolves the keeper's address WITHOUT reading the roster it hosts.
  • server_mode is unchanged by advertising; no fleet.json write occurs.

Testing Decisions

Extend the roster schema/route suites (the fleet_roster + roster-route tests); add a unit test for the bootstrap-pointer resolver. Reuse-first — no new harness.

Key Decisions

  • Advertisement lives on the open capabilities[] axis (serving) + reach coordinates; orthogonal to server_mode.
  • The keeper bootstrap pointer is a first-class, resolvable coordinate — deliberately not derived from roster.json.

Constraints & Invariants

  • Zero fleet.json/amicissimo change; one parser preserved (ADR 0023).
  • Single-writer self-report — a peer only ever writes its own row.

Prior Art

  • The host-owned roster schema + its GET/POST routes (fleet_roster, the roster service route).
  • The capability model and known-tag handling (compute/roaming).

Source

Part of #1340 (ADR 0027, Slice 1). Foundation: #1316. See ADR 0027 §4–§5.

Metadata

Metadata

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions