Skip to content

feat(enroll): operator enrollment driver for coordinator onboarding#16

Merged
NetworkTheoryAppliedResearchInstitute merged 1 commit into
mainfrom
feat/operator-enrollment-driver
Jul 14, 2026
Merged

feat(enroll): operator enrollment driver for coordinator onboarding#16
NetworkTheoryAppliedResearchInstitute merged 1 commit into
mainfrom
feat/operator-enrollment-driver

Conversation

@NetworkTheoryAppliedResearchInstitute

Copy link
Copy Markdown
Contributor

Builds the HTTP driver that brings Cloudy up as an operator on a SoHoLINK-class coordinator, and closes the loop end-to-end against the live coordinator.

What

internal/enroll + cmd/cloudy-enroll drive the coordinator's operator onboarding lifecycle:

apply → register the 7-key set → email verification → conformance suites A/B → automatic activation

  • The onboarding endpoints are plain JSON on the coordinator's portal surface, not the /v0 node-side wire internal/coord speaks — so this is a separate minimal HTTP+JSON client, kept deliberately distinct from coord.Client.
  • Reuses internal/opcred for key custody and for computing conformance answers through the real protocol canon. Suite C is graded coordinator-side and needs no operator response, so there is no suite-C step (matches opcred's deliberate no-AnswerC).
  • The out-of-band email code is supplied via an injected CodeSource — an interactive stdin prompt, or a polled file (-code-file) for automated/containerized bring-up.
  • enroll.Client exposes each step plus an Enroll() orchestration; a 409 on apply is tolerated for idempotent re-runs.

Test

  • Contract test (enroll_test.go): an httptest coordinator that grades conformance with the real sohocloud-protocol/operator verifier — byte-equality oracle + ConformanceResponse.Verify for suite A, OperatorTransmission.Verify for suite B. A companion test answers with a foreign keyset and asserts the grade fails, proving the grading isn't a rubber stamp.
  • Live: verified end-to-end against the running SoHoLINK coordinator (redeployed from main, /v0 operator-auth active). The driver enrolled an operator to active (7 active keys, conformance passed), and the activated credential then authenticated on /v0 (a signed operator transmission passed OperatorAuth; the same call without the header is 401). The test operator was removed afterward so the coordinator is back to zero operators for the real bring-up.

CONFORMANCE.md

Adds the internal/enroll component row and a labeled built entry, per the ride-along rule.

Note: real federation still awaits the Go 1.27 / ML-DSA-65 migration; this proves the enrollment + auth machinery on today's Ed25519 build.

Author does not self-merge — for review.

internal/enroll + cmd/cloudy-enroll drive a coordinator's operator
onboarding lifecycle end to end: apply -> register the 7-key set ->
email verification -> conformance suites A/B -> automatic activation.

The onboarding endpoints are plain JSON on the coordinator's PORTAL
surface, not the /v0 node-side wire internal/coord speaks, so this is a
separate minimal HTTP+JSON client. It reuses internal/opcred for key
custody and for computing conformance answers through the real protocol
canon; Suite C is graded coordinator-side and needs no operator response.
The out-of-band email code is supplied via an injected CodeSource (an
interactive prompt, or a polled file for automated/containerized bring-up).

- enroll.Client with per-step methods (Apply/RegisterKeys/VerifyStart/
  VerifyCheck/ConformanceStart/ConformanceSubmit) plus an Enroll()
  orchestration; a 409 on Apply is tolerated for idempotent re-runs.
- Contract test: an httptest coordinator that grades conformance with the
  REAL sohocloud-protocol operator verifier (byte-equality oracle +
  ConformanceResponse.Verify for A, OperatorTransmission.Verify for B); a
  foreign-keyset run must fail, proving the grade is not a rubber stamp.
- cmd/cloudy-enroll wires it as a CLI (-gen-keys, -code-file/-code-wait).
- CONFORMANCE.md: internal/enroll component row + labeled built entry.

Verified end to end against a live SoHoLINK coordinator: the enrolled
operator reached active and its credential then authenticated on /v0.

Signed-off-by: Jodson Graves <info@ntari.org>
@NetworkTheoryAppliedResearchInstitute
NetworkTheoryAppliedResearchInstitute merged commit 76f7417 into main Jul 14, 2026
1 check passed
@NetworkTheoryAppliedResearchInstitute
NetworkTheoryAppliedResearchInstitute deleted the feat/operator-enrollment-driver branch July 14, 2026 13:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant