"""Conformance test for the draft pilot-candidate Phase Manifests (WP-0008-T03, examples/pilot-candidates/). These are non-binding worked examples, not real Phases, but they must stay schema-conformant like examples/phase-001/ does. """ from __future__ import annotations import json import pytest from conftest import REPO_ROOT from target_revenue import validation PILOT_CANDIDATES_DIR = REPO_ROOT / "examples" / "pilot-candidates" 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", PILOT_CANDIDATE_NAMES) def test_pilot_candidate_manifest_carries_real_repo_provenance(name): """WP-0015-T06: each candidate's repo_id is the real Forgejo id (confirmed live against forgejo.coulomb.social), not a placeholder, and none carries a base_phase_id (all three are first-ever Phases).""" manifest = json.loads((PILOT_CANDIDATES_DIR / name / "manifest.json").read_text()) milestone_release = manifest["phase"]["milestone_release"] assert milestone_release["repo_hub"] == "forgejo-coulomb" assert milestone_release["repo_hub_uri"] == "https://forgejo.coulomb.social" assert isinstance(milestone_release["repo_id"], int) and milestone_release["repo_id"] > 0 assert milestone_release["repo_name"].startswith("coulomb/") assert "base_phase_id" not in manifest["phase"] @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"