4.3 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 | completed |
|
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
Rewrote Authentication section around IdentityProvider trait with Phase 1/Phase 2 boundary. Added ForwardingPolicy check before proxy spawn. Added Interface Abstraction section (ServerHandler → SshInterface refactoring). Added --config flag and listeners TOML to CLI section. Softened single-transport constraint. Added ADRs 026/028/029/030/031 to design decisions and references section.
Summary
Server spec updated for IdentityProvider, ForwardingPolicy, DynamicConfig, and Interface abstraction. Phase 1 boundary clear. All acceptance criteria met.