Add info-tech-canon as first dry-run pilot candidate, exercise onboarding routine

Maintainer chose info-tech-canon (outside the original four product
lines) as the actual first repo to build up the practical
Phase-declaration routine on, explicitly confirmed as a dry run, not a
T05 go-live decision.

Adds a third draft, non-binding manifest
(examples/pilot-candidates/info-tech-canon-service-surface/): the
cumulative service surface across ITC-WP-0001-0012 (all finished),
Product-defining (100x). Flags a notable complication rather than
smoothing it over: this repo's current LICENSE is already MIT-0, so a
real Phase here would mean replacing an already-open license with
restricted pre-conversion TRSL terms - a materially different step
than the other two candidates.

Exercised the full onboarding routine end-to-end against a real,
ephemeral local instance of the hosted Trust Service (Docker Postgres,
migrations applied, binky Licensor token seeded, uvicorn running the
actual service/app.py): register-phase -> append-entry -> status all
worked via scripts/trf_onboard.py exactly as
specs/TrustServiceOnboarding.md describes, no code changes needed.
Dry-run infrastructure torn down afterward; only the draft manifest
files persist.
This commit is contained in:
tegwick 2026-07-29 23:15:42 +02:00
parent a29d781d92
commit b0f61b2d8b
7 changed files with 122 additions and 17 deletions

View file

@ -16,20 +16,21 @@ from target_revenue import validation
PILOT_CANDIDATES_DIR = REPO_ROOT / "examples" / "pilot-candidates"
@pytest.mark.parametrize(
"name",
["net-kingdom-local-identity", "railiance-vergabe-teilnahme"],
)
PILOT_CANDIDATE_NAMES = [
"net-kingdom-local-identity",
"railiance-vergabe-teilnahme",
"info-tech-canon-service-surface",
]
@pytest.mark.parametrize("name", PILOT_CANDIDATE_NAMES)
def test_pilot_candidate_manifest_is_conformant(name):
manifest = json.loads((PILOT_CANDIDATES_DIR / name / "manifest.json").read_text())
validation.validate_phase_manifest(manifest)
assert manifest["phase"]["id"].startswith("trsl:phase:draft-")
@pytest.mark.parametrize(
"name",
["net-kingdom-local-identity", "railiance-vergabe-teilnahme"],
)
@pytest.mark.parametrize("name", PILOT_CANDIDATE_NAMES)
def test_pilot_candidate_ledger_is_empty_draft_state(name):
ledger = json.loads((PILOT_CANDIDATES_DIR / name / "ledger.json").read_text())
assert ledger == [], "draft candidates must not carry any real ledger entries"