Spaces:
Sleeping
Sleeping
| import importlib.util | |
| import json | |
| from pathlib import Path | |
| SCRIPT_PATH = Path(__file__).resolve().parents[1] / "scripts" / "devpost_submission_preview.py" | |
| SPEC = importlib.util.spec_from_file_location("devpost_submission_preview", SCRIPT_PATH) | |
| devpost_submission_preview = importlib.util.module_from_spec(SPEC) | |
| assert SPEC.loader is not None | |
| SPEC.loader.exec_module(devpost_submission_preview) | |
| def write_json(root: Path, relative_path: str, payload: dict) -> None: | |
| path = root / relative_path | |
| path.parent.mkdir(parents=True, exist_ok=True) | |
| path.write_text(json.dumps(payload), encoding="utf-8") | |
| def packet(*, live: bool = False) -> dict: | |
| return { | |
| "schema": "proofframe.devpost_packet.v1", | |
| "mode": "post_live_verified" if live else "pre_live_safe", | |
| "project_name": "ProofFrame", | |
| "tagline": "B2-ready provenance desk for GenAI media.", | |
| "one_liner": "ProofFrame turns generated media into evidence packets.", | |
| "repository_url": "https://github.com/adjcjh777/backblaze-proofframe", | |
| "demo_url": "https://adjcjh-backblaze-proofframe.hf.space/?judge=1", | |
| "video_url": "https://youtu.be/final-proof" if live else "TBD after final B2 and Genblaze proof.", | |
| "short_description": "A review desk for generated media evidence packets.", | |
| "b2_usage": "B2 live proof is a final submission gate.", | |
| "genblaze_usage": "Genblaze live proof is a final submission gate.", | |
| "accomplishments": ["Working product.", "Public mock demo."], | |
| "whats_next": ["Live B2 proof.", "Live Genblaze proof."], | |
| } | |
| def form_kit(*, live: bool = False) -> dict: | |
| return { | |
| "schema": "proofframe.devpost_form_kit.v1", | |
| "mode": "final_form_ready" if live else "pre_live_form_ready", | |
| "mock_form_ready": True, | |
| "final_form_ready": live, | |
| "public_video_ready": live, | |
| "fields": [ | |
| { | |
| "id": "project_name", | |
| "label": "Project name", | |
| "ok_for_mock": True, | |
| "ok_for_final": True, | |
| }, | |
| { | |
| "id": "video_url", | |
| "label": "Demo video URL", | |
| "ok_for_mock": True, | |
| "ok_for_final": live, | |
| }, | |
| ], | |
| } | |
| def screenshot_report(*, ok: bool = True) -> dict: | |
| return { | |
| "schema": "proofframe.public_demo_screenshot.v1", | |
| "mode": "public_judge_screenshot_ready" if ok else "public_judge_screenshot_blocked", | |
| "ok": ok, | |
| "safe_to_commit": True, | |
| "screenshot": { | |
| "path": "docs/assets/proofframe-hf-public-smoke.png", | |
| "bytes": 741074 if ok else 100, | |
| "width": 1440, | |
| "height": 2692, | |
| }, | |
| "markers": {"visible_ok": ok, "html_ok": ok}, | |
| } | |
| def public_space_sync(*, ok: bool = True) -> dict: | |
| return { | |
| "schema": "proofframe.public_space_sync.v1", | |
| "mode": "public_space_synced" if ok else "public_space_mismatch", | |
| "ok": ok, | |
| "observed": { | |
| "public_demo_screenshot": { | |
| "ok": ok, | |
| "visible_ok": ok, | |
| "html_ok": ok, | |
| } | |
| }, | |
| } | |
| def final_control(*, live: bool = False) -> dict: | |
| return { | |
| "schema": "proofframe.final_submission_control.v1", | |
| "mode": "final_ready" if live else "pre_live_control", | |
| "safe_to_submit": live, | |
| "blocking_items": [] | |
| if live | |
| else [ | |
| { | |
| "id": "b2_live_proof", | |
| "label": "Backblaze B2 live proof captured", | |
| "detail": "T020 is doing.", | |
| "evidence": "tasks.json", | |
| }, | |
| { | |
| "id": "genblaze_live_proof", | |
| "label": "Genblaze live proof captured", | |
| "detail": "T021 is doing.", | |
| "evidence": "tasks.json", | |
| }, | |
| ], | |
| } | |
| def write_fixtures(root: Path, *, live: bool = False, screenshot_ok: bool = True) -> None: | |
| write_json(root, "docs/assets/devpost-submission-packet.json", packet(live=live)) | |
| write_json(root, "docs/assets/devpost-form-kit.json", form_kit(live=live)) | |
| write_json( | |
| root, | |
| "docs/assets/judge-brief.json", | |
| { | |
| "schema": "proofframe.judge_brief.v1", | |
| "judge_opening_30s": "ProofFrame is a media operations desk.", | |
| "links": { | |
| "public_demo": "https://adjcjh-backblaze-proofframe.hf.space/?judge=1", | |
| "repository": "https://github.com/adjcjh777/backblaze-proofframe", | |
| }, | |
| }, | |
| ) | |
| write_json( | |
| root, | |
| "docs/assets/judge-crosswalk.json", | |
| { | |
| "schema": "proofframe.judge_crosswalk.v1", | |
| "mode": "final_crosswalk_ready" if live else "pre_live_crosswalk_ready", | |
| "safe_to_submit": live, | |
| "official_criteria": [{"name": "Production Readiness", "present": True}], | |
| "rows": [{"id": "production"}], | |
| }, | |
| ) | |
| write_json(root, "docs/assets/public-demo-screenshot-report.json", screenshot_report(ok=screenshot_ok)) | |
| write_json(root, "docs/assets/public-space-sync-report.json", public_space_sync(ok=screenshot_ok)) | |
| write_json(root, "docs/assets/final-submission-control.json", final_control(live=live)) | |
| write_json( | |
| root, | |
| "docs/assets/devpost-submission-checklist.json", | |
| { | |
| "schema": "proofframe.devpost_submission_checklist.v1", | |
| "mode": "ready" if live else "pre_submit_blocked", | |
| "safe_to_submit": live, | |
| }, | |
| ) | |
| write_json( | |
| root, | |
| "docs/assets/submission-audit-report.json", | |
| { | |
| "schema": "proofframe.submission_audit.v1", | |
| "mode": "final_submit_ready" if live else "pre_submit_audit_blocked", | |
| "ok": live, | |
| }, | |
| ) | |
| write_json( | |
| root, | |
| "docs/assets/secret-scan-report.json", | |
| {"schema": "proofframe.secret_scan.v1", "mode": "clear", "ok": True}, | |
| ) | |
| def test_devpost_submission_preview_is_shareable_but_not_submittable_before_live_proof(tmp_path): | |
| write_fixtures(tmp_path) | |
| preview = devpost_submission_preview.build_preview(tmp_path) | |
| assert preview["schema"] == "proofframe.devpost_submission_preview.v1" | |
| assert preview["mode"] == "pre_live_preview_ready" | |
| assert preview["safe_to_share"] is True | |
| assert preview["safe_to_submit"] is False | |
| assert preview["field_rollup"]["mock_ready"] is True | |
| assert preview["field_rollup"]["final_ready"] is False | |
| assert {item["id"] for item in preview["submission_readiness"]["final_blockers"]} == { | |
| "b2_live_proof", | |
| "genblaze_live_proof", | |
| } | |
| assert "Do not claim completed live Backblaze B2 storage" in preview["claim_boundary"][1] | |
| def test_devpost_submission_preview_blocks_when_public_screenshot_is_not_verified(tmp_path): | |
| write_fixtures(tmp_path, screenshot_ok=False) | |
| preview = devpost_submission_preview.build_preview(tmp_path) | |
| assert preview["mode"] == "preview_blocked" | |
| assert preview["safe_to_share"] is False | |
| assert "Regenerate the public judge-mode screenshot report." in preview["next_actions"] | |
| def test_devpost_submission_preview_can_be_final_ready_after_live_gates(tmp_path): | |
| write_fixtures(tmp_path, live=True) | |
| preview = devpost_submission_preview.build_preview(tmp_path) | |
| assert preview["mode"] == "final_preview_ready" | |
| assert preview["safe_to_share"] is True | |
| assert preview["safe_to_submit"] is True | |
| assert preview["submission_readiness"]["final_blockers"] == [] | |
| def test_devpost_submission_preview_writes_outputs(tmp_path): | |
| write_fixtures(tmp_path) | |
| preview = devpost_submission_preview.build_preview(tmp_path) | |
| json_path = tmp_path / "out" / "preview.json" | |
| markdown_path = tmp_path / "out" / "preview.md" | |
| devpost_submission_preview.write_outputs(preview, json_path, markdown_path) | |
| saved = json.loads(json_path.read_text(encoding="utf-8")) | |
| markdown = markdown_path.read_text(encoding="utf-8") | |
| assert saved["schema"] == "proofframe.devpost_submission_preview.v1" | |
| assert "# ProofFrame Devpost Submission Preview" in markdown | |
| assert "## Final Blockers" in markdown | |