Version rotated Belgian holdout corpora
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s

This commit is contained in:
Jens
2026-07-29 17:23:36 +02:00
parent 8c9a58948b
commit 037f875575
2 changed files with 31 additions and 1 deletions
+10 -1
View File
@@ -28,6 +28,13 @@ def parse_slugs(raw: str) -> set[str]:
return {value.strip() for value in raw.split(",") if value.strip()}
def validate_dataset_version(value: str) -> str:
version = value.strip()
if not version or any(character not in "abcdefghijklmnopqrstuvwxyz0123456789-" for character in version):
raise ValueError("dataset version must be a lowercase canonical slug")
return version
def write_json(path: Path, payload: dict[str, Any]) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(json.dumps(payload, indent=2), encoding="utf-8")
@@ -64,6 +71,7 @@ def main() -> int:
parser.add_argument("--test-samples", required=True)
parser.add_argument("--background-samples", required=True)
parser.add_argument("--internal-val-samples", required=True)
parser.add_argument("--version", required=True)
parser.add_argument("--output-dir", type=Path, required=True)
args = parser.parse_args()
@@ -105,7 +113,7 @@ def main() -> int:
raise SystemExit(f"manifest samples have no source tiles: {missing_tiles}")
rotated_manifest = json.loads(json.dumps(manifest))
rotated_manifest["dataset_version"] = "building-be-v30-rotated-holdouts-r1"
rotated_manifest["dataset_version"] = validate_dataset_version(args.version)
rotated_manifest["immutable"] = True
assignment = {slug: role for role, slugs in role_slugs.items() for slug in slugs}
for sample in rotated_manifest["samples"]:
@@ -171,6 +179,7 @@ def main() -> int:
evidence = {
"schema_version": 1, "status": "ok", "strategy": "fresh-former-train-holdout-rotation",
"source_manifest": str(args.corpus_manifest), "source_manifest_sha256": sha256(args.corpus_manifest),
"dataset_version": rotated_manifest["dataset_version"],
"source_summary_sha256": summary_hashes, "rotated_manifest": str(manifest_path),
"rotated_manifest_sha256": sha256(manifest_path),
"spatial_leakage_status": leakage["status"],