When gRPC lands: correct the dependency claims in README + ARCHITECTURE §1.4 #118
Labels
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: Cordy/Cairn#118
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Scheduled documentation debt from the peering decision (#100,
IMPLEMENTED-PEERING.md§7). Do not action before #102 merges — untilgoogle.golang.org/grpcis actually ingo.mod, the current claims are true and editing them would describe software that does not exist.Trigger: the commit that adds the gRPC dependency (#102, peering control plane).
What becomes false at that moment:
README.md— "Small trust surface. Four Go dependencies total:x/crypto(argon2id),go-oidc+x/oauth2(OIDC),go-ldap(LDAP),filippo.io/age(at-rest encryption) — plus exactly one vendored browser asset…"ARCHITECTURE.md§1.4 — the tiny-trust-surface commitment, which peering is a deliberate exception to.Proposed wording (Nikola to approve, not to be slipped in silently): the core file server keeps its four Go dependencies and one vendored browser asset; peering — opt-in, off unless configured — adds gRPC and protobuf, for control messages only, with the data plane on stdlib HTTP. §1.4 gains a paragraph recording that this was argued (draft recommended against it, option C chosen deliberately) rather than accreted, and noting the mitigations: four RPCs, generated code committed so customers never run
protoc, data plane independent and replaceable.Why this is an issue and not a comment: the "age is not post-quantum" line sat wrong in ARCHITECTURE.md until #28 forced a re-read. Marketing-adjacent claims decay silently; this one gets a tripwire.
Also fold in at the same time:
example.config.json+ the deployment handbook page gain thepeeringblock, and the handbook gets its peering page (#109 pipeline).Closed — what changed
Actioned in PR #122, the commit that put
google.golang.org/grpcandgoogle.golang.org/protobufintogo.mod.README.md— the claim was already stale before gRPC arrived: it said "Four Go dependencies total" whileARCHITECTURE.md§1.4 said five, and the list itself contained five. Now reads five for the core file server, and names peering's two additions as the one place the discipline was deliberately broken — opt-in, off unless configured, control messages only, data plane on stdlib HTTP.ARCHITECTURE.md§1.4 — gained a paragraph recording the exception as argued rather than accreted: why option C was chosen (the control surface is multi-method and must stay evolvable across two independently-operated instances, which is where schema discipline earns its cost), what bounds the blast radius (four RPCs, feature off unless configured, generated code committed so noprotocon customer machines, data plane already independent), and — since the point of the exercise was honesty — that a self-hoster enabling peering genuinely does audit a larger surface.Also corrected
Status: v0.3.x→v0.4.xwhile in there.What did NOT ship here, and why
The final paragraph of this issue also asked for
example.config.jsonand the handbook deployment page to gain thepeeringblock. That was deliberately left out: at the time, beyondpeering.statePaththose config fields did not exist. Documenting them would have described software that did not exist — the exact failure mode this issue was created to prevent.They now do exist (
stagingDir,transfersPath, plus the runtime settingspeeringEnabled/peeringMaxFileBytes/peeringBaseUrl), and the documentation work is carried on #124, which is trigger-based on #106 so the feature gets described once from fact rather than four times from intent.