The remaining task descriptions implied that downstream concerns (StorageIdentityProvider, irpc service layer, agent services, multi-node deployment) already exist. Updated to clearly distinguish: - spec-update-server: Phase 1 ships ConfigIdentityProvider, not irpc auth - spec-update-call-protocol: Phase 1 is local dispatch only; irpc and remote dispatch are contracted for later. Agent services are downstream concerns. - spec-update-overview: Note which crates exist now vs which are Phase 2+ contracts - review-spec-foundation: Add phase boundary check to acceptance criteria
3.9 KiB
id, name, status, depends_on, scope, risk, impact, level
| id | name | status | depends_on | scope | risk | impact | level | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| architecture/spec-update-server | Update server.md — add DynamicConfig, ForwardingPolicy, IdentityProvider references | pending |
|
narrow | medium | component | implementation |
Description
Update docs/architecture/server.md to reflect the architectural changes from Phase 1: DynamicConfig, ForwardingPolicy in channel handling, IdentityProvider replacing direct ServerAuthConfig reads, and the interface abstraction concept.
Phase boundary note: Phase 1 ships ConfigIdentityProvider (ArcSwap-backed) as the only IdentityProvider implementation. The irpc AuthProtocol and StorageIdentityProvider are contracted in the specs but not built yet. Server.md should describe what the server actually does in Phase 1 — reading auth from ArcSwap<DynamicConfig> via ConfigIdentityProvider — with a forward reference to identity.md for the full trait hierarchy. Don't describe irpc service wiring or SQLite-backed auth as if they exist.
The current server.md is thorough but reflects the alpha architecture where auth is read directly from ServerAuthConfig and there's no forwarding policy concept.
Changes needed:
- Update Authentication section: auth goes through
IdentityProvidertrait (reference identity.md, ADR-029), withConfigIdentityProvideras the Phase 1 impl reading fromArcSwap<DynamicConfig>(reference ADR-030). Note thatStorageIdentityProvideris a future implementation. - Add ForwardingPolicy check in Channel Handling section: before proxy spawn, evaluate ForwardingPolicy against Identity (reference configuration.md, ADR-031)
- Replace
Arc<ServerAuthConfig>withArc<ArcSwap<DynamicConfig>>in ServerHandler description (reference ADR-030) - Add note about Interface abstraction: SSH is one interface (Layer 2), ServerHandler logic maps to SshInterface (reference interface.md, ADR-026) — but detail is in interface.md, not here
- Update CLI interface section: mention
--configflag for TOML config,[[listeners]]for multi-transport - Update constraint about single transport: "Currently binds to a single transport" → note that multi-transport is coming per ADR-030
What stays the same: TLS cert provisioning, stealth mode, outbound proxy modes, logging/rate limiting, graceful shutdown, error handling, most CLI flags.
Acceptance Criteria
- Authentication section updated: references
IdentityProvidertrait withConfigIdentityProvideras Phase 1 impl, notesStorageIdentityProvideras future - Channel Handling section updated: ForwardingPolicy check before proxy spawn, reference ADR-031
- ServerHandler struct updated:
Arc<ArcSwap<DynamicConfig>>, notArc<ServerAuthConfig> - Note added about Interface abstraction pointing to interface.md and ADR-026
- CLI section mentions
--configflag (TOML) and[[listeners]]for multi-transport - Single-transport constraint softened (noted as current, changing per ADR-030)
- Phase boundary clear: what ships in Phase 1 vs what's contracted for later
last_updatedin YAML frontmatter updated- ADR table updated with references to 026, 028, 029, 030, 031
- References section updated to include configuration.md, identity.md, interface.md
References
- docs/architecture/server.md — current content to update
- docs/architecture/decisions/030-static-dynamic-config-split.md
- docs/architecture/decisions/031-forwarding-policy.md
- docs/architecture/decisions/028-auth-irpc-service.md
- docs/architecture/decisions/026-transport-interface-separation.md
Notes
To be filled by implementation agent
Summary
To be filled on completion