ADJCJH commited on
Commit
4fc704d
·
verified ·
1 Parent(s): abb09ea

Sync B2 live proof evidence

Browse files
docs/assets/agent-handoff-report.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "schema": "proofframe.agent_handoff.v1",
3
- "created_at": "2026-06-29T12:10:33Z",
4
  "ok": true,
5
  "mode": "handoff_ready",
6
  "repo_root": "/Users/junhaocheng/working-dir/ai-competitions/backblaze-proofframe",
 
1
  {
2
  "schema": "proofframe.agent_handoff.v1",
3
+ "created_at": "2026-07-01T10:56:41Z",
4
  "ok": true,
5
  "mode": "handoff_ready",
6
  "repo_root": "/Users/junhaocheng/working-dir/ai-competitions/backblaze-proofframe",
docs/assets/agent-handoff-report.md CHANGED
@@ -2,7 +2,7 @@
2
 
3
  Mode: `handoff_ready`
4
  OK: `true`
5
- Created: `2026-06-29T12:10:33Z`
6
  Repo root: `/Users/junhaocheng/working-dir/ai-competitions/backblaze-proofframe`
7
 
8
  ## AGENTS.md
 
2
 
3
  Mode: `handoff_ready`
4
  OK: `true`
5
+ Created: `2026-07-01T10:56:41Z`
6
  Repo root: `/Users/junhaocheng/working-dir/ai-competitions/backblaze-proofframe`
7
 
8
  ## AGENTS.md
docs/assets/b2-live-proof-evidence.json ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "ok": true,
3
+ "base_url": "http://127.0.0.1:8088",
4
+ "generation_backend": "mock",
5
+ "storage_backend": "b2",
6
+ "judge_brief_schema": "proofframe.judge_brief.v1",
7
+ "judge_safe_to_submit": false,
8
+ "judge_crosswalk_schema": "proofframe.judge_crosswalk.v1",
9
+ "judge_crosswalk_mode": "pre_live_crosswalk_ready",
10
+ "judge_crosswalk_safe_to_submit": false,
11
+ "judge_crosswalk_rows": 4,
12
+ "judge_decision_brief_schema": "proofframe.judge_decision_brief.v1",
13
+ "judge_decision_brief_mode": "pre_live_decision_ready",
14
+ "judge_decision_brief_safe_to_submit": false,
15
+ "judge_decision_brief_checks": 6,
16
+ "judge_evidence_index_schema": "proofframe.judge_evidence_index.v1",
17
+ "judge_evidence_index_mode": "pre_live_evidence_index_ready",
18
+ "judge_evidence_index_safe_to_submit": false,
19
+ "judge_evidence_index_links": 18,
20
+ "judge_final_closeout_schema": "proofframe.final_closeout_status.v1",
21
+ "judge_final_closeout_mode": "waiting_for_credentials",
22
+ "judge_final_closeout_health_ok": true,
23
+ "judge_final_closeout_safe_to_submit": false,
24
+ "judge_final_closeout_gates": 12,
25
+ "judge_video_publish_kit_schema": "proofframe.final_video_publish_kit.v1",
26
+ "judge_video_publish_kit_mode": "ready_for_final_upload",
27
+ "judge_video_publish_kit_safe_to_submit": false,
28
+ "judge_video_publish_kit_final_video_ready": false,
29
+ "judge_video_publish_kit_upload_checks": 4,
30
+ "judge_recording_schema": "proofframe.recording_assets.v1",
31
+ "judge_recording_mode": "mock_recording_ready",
32
+ "judge_recording_final_video_ready": false,
33
+ "judge_recording_shots": 6,
34
+ "judge_devpost_schema": "proofframe.devpost_form_kit.v1",
35
+ "judge_devpost_mode": "pre_live_form_ready",
36
+ "judge_devpost_final_form_ready": false,
37
+ "judge_devpost_fields": 19,
38
+ "judge_submit_checklist_schema": "proofframe.devpost_submission_checklist.v1",
39
+ "judge_submit_checklist_mode": "pre_submit_blocked",
40
+ "judge_submit_checklist_safe_to_submit": false,
41
+ "judge_submit_checklist_preflight": 6,
42
+ "campaign_id": "cmp_eb50ee437435",
43
+ "asset_id": "ast_fd2992abc237",
44
+ "asset_provider": "mock",
45
+ "asset_model": "mock-svg-v1",
46
+ "asset_storage_backend": "b2",
47
+ "asset_storage_key": "campaigns/cmp_eb50ee437435/media/cmp_eb50ee437435-variant-1.svg",
48
+ "asset_public_url_present": false,
49
+ "asset_status": "approved",
50
+ "asset_sha256": "f9fa34f549049d8a7a3873dab0208092e55545e2919bf928c0c07c8f2a651f56",
51
+ "manifest_storage_backend": "b2",
52
+ "manifest_key": "campaigns/cmp_eb50ee437435/manifests/cmp_eb50ee437435-manifest.json",
53
+ "manifest_sha256": "052cd97c85012c95ce479033e48acca3901028e579c1f3217e60a0f26126f980",
54
+ "packet_bytes": 998,
55
+ "judge_demo_campaign_id": "cmp_2606dc339088"
56
+ }
docs/assets/final-submission-control.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "schema": "proofframe.final_submission_control.v1",
3
- "created_at": "2026-07-01T10:54:27Z",
4
  "ok": true,
5
  "control_health_ok": true,
6
  "mode": "pre_live_control",
@@ -32,18 +32,18 @@
32
  "mode": "pre_live_safe",
33
  "summary": {
34
  "required": 6,
35
- "done": 1,
36
  "blocked": 0,
37
- "doing": 2,
38
  "todo": 3,
39
  "missing": 0
40
  },
41
  "evidence_status": "missing",
42
- "b2_evidence_status": "missing",
43
  "packet_status": "pre_live_packet_pending"
44
  },
45
  "task_statuses": {
46
- "T020": "doing",
47
  "T021": "doing",
48
  "T040": "done",
49
  "T041": "todo",
@@ -325,23 +325,16 @@
325
  "active_role_cwd_ok": null
326
  },
327
  "b2_live_evidence": {
328
- "ok": false,
329
- "status": "missing",
330
  "path": "docs/assets/b2-live-proof-evidence.json",
331
- "findings": [
332
- {
333
- "field": "docs/assets/b2-live-proof-evidence.json",
334
- "detail": "Evidence file is missing or invalid JSON."
335
- }
336
- ]
337
  },
338
  "credential_handoff": {
339
  "present": true,
340
  "mode": "missing_live_env",
341
  "ready": false,
342
  "missing_ids": [
343
- "b2_key_id",
344
- "b2_application_key",
345
  "genblaze_api_key"
346
  ],
347
  "secret_policy": "Report records only variable names and presence; credential values are never printed."
@@ -458,8 +451,8 @@
458
  {
459
  "id": "b2_live_proof",
460
  "label": "Backblaze B2 live proof captured",
461
- "ok": false,
462
- "detail": "T020 is doing; B2 evidence status is missing; final evidence status is missing.",
463
  "evidence": "tasks.json, docs/assets/b2-live-proof-evidence.json, and docs/assets/final-live-proof-evidence.json"
464
  },
465
  {
@@ -473,7 +466,7 @@
473
  "id": "credential_handoff",
474
  "label": "Live credential handoff is ready",
475
  "ok": false,
476
- "detail": "Credential handoff mode is missing_live_env; missing ids: b2_key_id, b2_application_key, genblaze_api_key.",
477
  "evidence": "docs/assets/live-credential-handoff.json"
478
  },
479
  {
@@ -534,13 +527,6 @@
534
  "detail": "Devpost submission checklist mode is pre_submit_blocked; safe_to_submit is False.",
535
  "evidence": "docs/assets/devpost-submission-checklist.json"
536
  },
537
- {
538
- "id": "b2_live_proof",
539
- "label": "Backblaze B2 live proof captured",
540
- "ok": false,
541
- "detail": "T020 is doing; B2 evidence status is missing; final evidence status is missing.",
542
- "evidence": "tasks.json, docs/assets/b2-live-proof-evidence.json, and docs/assets/final-live-proof-evidence.json"
543
- },
544
  {
545
  "id": "genblaze_live_proof",
546
  "label": "Genblaze live proof captured",
@@ -552,7 +538,7 @@
552
  "id": "credential_handoff",
553
  "label": "Live credential handoff is ready",
554
  "ok": false,
555
- "detail": "Credential handoff mode is missing_live_env; missing ids: b2_key_id, b2_application_key, genblaze_api_key.",
556
  "evidence": "docs/assets/live-credential-handoff.json"
557
  },
558
  {
@@ -601,13 +587,13 @@
601
  "warnings": [],
602
  "next_actions": [
603
  "Complete .env.final.local with B2_KEY_ID, B2_APPLICATION_KEY, and Genblaze/GMI API key values.",
604
- "Run the B2 live proof runner and save sanitized B2 evidence.",
605
  "Run the final B2 plus Genblaze proof runner and save sanitized final evidence.",
606
  "Record and upload the public demo video after live proof is captured.",
607
  "Verify the public video URL with python scripts/public_video_check.py --verify-url --strict-final.",
608
  "Regenerate the final Devpost submission checklist after the form kit and final control gates are current.",
609
  "Run and mark the final secret scan after live evidence/video assets are ready.",
610
- "Run final submission audit after proof, video, and secret scan pass."
 
611
  ],
612
  "operator_commands": [
613
  "python scripts/final_env_wizard.py --prefill-non-secret --output .env.final.local",
 
1
  {
2
  "schema": "proofframe.final_submission_control.v1",
3
+ "created_at": "2026-07-01T11:26:25Z",
4
  "ok": true,
5
  "control_health_ok": true,
6
  "mode": "pre_live_control",
 
32
  "mode": "pre_live_safe",
33
  "summary": {
34
  "required": 6,
35
+ "done": 2,
36
  "blocked": 0,
37
+ "doing": 1,
38
  "todo": 3,
39
  "missing": 0
40
  },
41
  "evidence_status": "missing",
42
+ "b2_evidence_status": "verified",
43
  "packet_status": "pre_live_packet_pending"
44
  },
45
  "task_statuses": {
46
+ "T020": "done",
47
  "T021": "doing",
48
  "T040": "done",
49
  "T041": "todo",
 
325
  "active_role_cwd_ok": null
326
  },
327
  "b2_live_evidence": {
328
+ "ok": true,
329
+ "status": "verified",
330
  "path": "docs/assets/b2-live-proof-evidence.json",
331
+ "findings": []
 
 
 
 
 
332
  },
333
  "credential_handoff": {
334
  "present": true,
335
  "mode": "missing_live_env",
336
  "ready": false,
337
  "missing_ids": [
 
 
338
  "genblaze_api_key"
339
  ],
340
  "secret_policy": "Report records only variable names and presence; credential values are never printed."
 
451
  {
452
  "id": "b2_live_proof",
453
  "label": "Backblaze B2 live proof captured",
454
+ "ok": true,
455
+ "detail": "T020 is done; B2 evidence status is verified; final evidence status is missing.",
456
  "evidence": "tasks.json, docs/assets/b2-live-proof-evidence.json, and docs/assets/final-live-proof-evidence.json"
457
  },
458
  {
 
466
  "id": "credential_handoff",
467
  "label": "Live credential handoff is ready",
468
  "ok": false,
469
+ "detail": "Credential handoff mode is missing_live_env; missing ids: genblaze_api_key.",
470
  "evidence": "docs/assets/live-credential-handoff.json"
471
  },
472
  {
 
527
  "detail": "Devpost submission checklist mode is pre_submit_blocked; safe_to_submit is False.",
528
  "evidence": "docs/assets/devpost-submission-checklist.json"
529
  },
 
 
 
 
 
 
 
530
  {
531
  "id": "genblaze_live_proof",
532
  "label": "Genblaze live proof captured",
 
538
  "id": "credential_handoff",
539
  "label": "Live credential handoff is ready",
540
  "ok": false,
541
+ "detail": "Credential handoff mode is missing_live_env; missing ids: genblaze_api_key.",
542
  "evidence": "docs/assets/live-credential-handoff.json"
543
  },
544
  {
 
587
  "warnings": [],
588
  "next_actions": [
589
  "Complete .env.final.local with B2_KEY_ID, B2_APPLICATION_KEY, and Genblaze/GMI API key values.",
 
590
  "Run the final B2 plus Genblaze proof runner and save sanitized final evidence.",
591
  "Record and upload the public demo video after live proof is captured.",
592
  "Verify the public video URL with python scripts/public_video_check.py --verify-url --strict-final.",
593
  "Regenerate the final Devpost submission checklist after the form kit and final control gates are current.",
594
  "Run and mark the final secret scan after live evidence/video assets are ready.",
595
+ "Run final submission audit after proof, video, and secret scan pass.",
596
+ "Submit Devpost after every preceding control item is green, then generate the public submission receipt."
597
  ],
598
  "operator_commands": [
599
  "python scripts/final_env_wizard.py --prefill-non-secret --output .env.final.local",
docs/assets/final-submission-control.md CHANGED
@@ -3,7 +3,7 @@
3
  Mode: `pre_live_control`
4
  Control health OK: `true`
5
  Safe to submit: `false`
6
- Created: `2026-07-01T10:54:27Z`
7
  Public demo: https://adjcjh-backblaze-proofframe.hf.space/?judge=1
8
  Repository: https://github.com/adjcjh777/backblaze-proofframe
9
 
@@ -19,8 +19,8 @@ Repository: https://github.com/adjcjh777/backblaze-proofframe
19
  ## Submission Gate
20
 
21
  - Mode: `pre_live_safe`
22
- - Tasks: `1 / 6` done
23
- - B2 evidence: `missing`
24
  - Live evidence: `missing`
25
  - Devpost packet: `pre_live_packet_pending`
26
 
@@ -49,9 +49,9 @@ Repository: https://github.com/adjcjh777/backblaze-proofframe
49
  | OK | Final launch plan exposes the current operator step | Launch plan mode is ready_for_credential_entry; current phase is credential_entry; next command is python scripts/final_env_wizard.py --output .env.final.local --missing-only --force. | `docs/assets/final-launch-plan.json` |
50
  | OK | Recording assets are ready | Recording assets mode is mock_recording_ready; public mock verified is False. | `docs/assets/recording-assets.json` |
51
  | OK | Control input reports match expected schemas | All input report schemas are current. | `docs/assets/*.json readiness reports` |
52
- | PENDING | Backblaze B2 live proof captured | T020 is doing; B2 evidence status is missing; final evidence status is missing. | `tasks.json, docs/assets/b2-live-proof-evidence.json, and docs/assets/final-live-proof-evidence.json` |
53
  | PENDING | Genblaze live proof captured | T021 is doing; final evidence status is missing. | `tasks.json and docs/assets/final-live-proof-evidence.json` |
54
- | PENDING | Live credential handoff is ready | Credential handoff mode is missing_live_env; missing ids: b2_key_id, b2_application_key, genblaze_api_key. | `docs/assets/live-credential-handoff.json` |
55
  | PENDING | Final public demo video URL is ready | Storyboard mode is mock_storyboard_ready; public video ready is False. | `docs/assets/demo-storyboard.json` |
56
  | PENDING | Final public demo video URL is accessible and safe | Public video check mode is pending_video_url; safe_to_submit is False. | `docs/assets/public-video-check.json` |
57
  | PENDING | Final recording gate is ready | Demo readiness mode is pre_live_mock_ready; final recording ready is False. | `docs/assets/demo-readiness-report.json` |
@@ -63,13 +63,13 @@ Repository: https://github.com/adjcjh777/backblaze-proofframe
63
  ## Next Actions
64
 
65
  - Complete .env.final.local with B2_KEY_ID, B2_APPLICATION_KEY, and Genblaze/GMI API key values.
66
- - Run the B2 live proof runner and save sanitized B2 evidence.
67
  - Run the final B2 plus Genblaze proof runner and save sanitized final evidence.
68
  - Record and upload the public demo video after live proof is captured.
69
  - Verify the public video URL with python scripts/public_video_check.py --verify-url --strict-final.
70
  - Regenerate the final Devpost submission checklist after the form kit and final control gates are current.
71
  - Run and mark the final secret scan after live evidence/video assets are ready.
72
  - Run final submission audit after proof, video, and secret scan pass.
 
73
 
74
  ## Operator Commands
75
 
 
3
  Mode: `pre_live_control`
4
  Control health OK: `true`
5
  Safe to submit: `false`
6
+ Created: `2026-07-01T11:26:25Z`
7
  Public demo: https://adjcjh-backblaze-proofframe.hf.space/?judge=1
8
  Repository: https://github.com/adjcjh777/backblaze-proofframe
9
 
 
19
  ## Submission Gate
20
 
21
  - Mode: `pre_live_safe`
22
+ - Tasks: `2 / 6` done
23
+ - B2 evidence: `verified`
24
  - Live evidence: `missing`
25
  - Devpost packet: `pre_live_packet_pending`
26
 
 
49
  | OK | Final launch plan exposes the current operator step | Launch plan mode is ready_for_credential_entry; current phase is credential_entry; next command is python scripts/final_env_wizard.py --output .env.final.local --missing-only --force. | `docs/assets/final-launch-plan.json` |
50
  | OK | Recording assets are ready | Recording assets mode is mock_recording_ready; public mock verified is False. | `docs/assets/recording-assets.json` |
51
  | OK | Control input reports match expected schemas | All input report schemas are current. | `docs/assets/*.json readiness reports` |
52
+ | OK | Backblaze B2 live proof captured | T020 is done; B2 evidence status is verified; final evidence status is missing. | `tasks.json, docs/assets/b2-live-proof-evidence.json, and docs/assets/final-live-proof-evidence.json` |
53
  | PENDING | Genblaze live proof captured | T021 is doing; final evidence status is missing. | `tasks.json and docs/assets/final-live-proof-evidence.json` |
54
+ | PENDING | Live credential handoff is ready | Credential handoff mode is missing_live_env; missing ids: genblaze_api_key. | `docs/assets/live-credential-handoff.json` |
55
  | PENDING | Final public demo video URL is ready | Storyboard mode is mock_storyboard_ready; public video ready is False. | `docs/assets/demo-storyboard.json` |
56
  | PENDING | Final public demo video URL is accessible and safe | Public video check mode is pending_video_url; safe_to_submit is False. | `docs/assets/public-video-check.json` |
57
  | PENDING | Final recording gate is ready | Demo readiness mode is pre_live_mock_ready; final recording ready is False. | `docs/assets/demo-readiness-report.json` |
 
63
  ## Next Actions
64
 
65
  - Complete .env.final.local with B2_KEY_ID, B2_APPLICATION_KEY, and Genblaze/GMI API key values.
 
66
  - Run the final B2 plus Genblaze proof runner and save sanitized final evidence.
67
  - Record and upload the public demo video after live proof is captured.
68
  - Verify the public video URL with python scripts/public_video_check.py --verify-url --strict-final.
69
  - Regenerate the final Devpost submission checklist after the form kit and final control gates are current.
70
  - Run and mark the final secret scan after live evidence/video assets are ready.
71
  - Run final submission audit after proof, video, and secret scan pass.
72
+ - Submit Devpost after every preceding control item is green, then generate the public submission receipt.
73
 
74
  ## Operator Commands
75
 
docs/assets/live-credential-handoff.json CHANGED
@@ -60,25 +60,30 @@
60
  {
61
  "id": "b2_key_id",
62
  "label": "Backblaze B2 key id",
63
- "ok": false,
64
  "accepted_names": [
65
  "B2_KEY_ID"
66
  ],
67
- "present_names": [],
 
 
68
  "expected": null,
69
- "remediation": "Set B2_KEY_ID for a least-privilege application key."
70
  },
71
  {
72
  "id": "b2_application_key",
73
  "label": "Backblaze B2 application key",
74
- "ok": false,
75
  "accepted_names": [
76
  "B2_APPLICATION_KEY",
77
  "B2_APP_KEY"
78
  ],
79
- "present_names": [],
 
 
 
80
  "expected": null,
81
- "remediation": "Set B2_APPLICATION_KEY or B2_APP_KEY."
82
  },
83
  {
84
  "id": "genblaze_api_key",
@@ -157,8 +162,6 @@
157
  }
158
  ],
159
  "missing_ids": [
160
- "b2_key_id",
161
- "b2_application_key",
162
  "genblaze_api_key"
163
  ],
164
  "next_commands": [
 
60
  {
61
  "id": "b2_key_id",
62
  "label": "Backblaze B2 key id",
63
+ "ok": true,
64
  "accepted_names": [
65
  "B2_KEY_ID"
66
  ],
67
+ "present_names": [
68
+ "B2_KEY_ID"
69
+ ],
70
  "expected": null,
71
+ "remediation": ""
72
  },
73
  {
74
  "id": "b2_application_key",
75
  "label": "Backblaze B2 application key",
76
+ "ok": true,
77
  "accepted_names": [
78
  "B2_APPLICATION_KEY",
79
  "B2_APP_KEY"
80
  ],
81
+ "present_names": [
82
+ "B2_APPLICATION_KEY",
83
+ "B2_APP_KEY"
84
+ ],
85
  "expected": null,
86
+ "remediation": ""
87
  },
88
  {
89
  "id": "genblaze_api_key",
 
162
  }
163
  ],
164
  "missing_ids": [
 
 
165
  "genblaze_api_key"
166
  ],
167
  "next_commands": [
docs/assets/live-credential-handoff.md CHANGED
@@ -12,10 +12,8 @@ This report records only variable names and presence checks. It never prints, ha
12
  - OK ProofFrame generation backend mode: `PROOFFRAME_GENERATION_BACKEND`; present `PROOFFRAME_GENERATION_BACKEND`; expected `genblaze`.
13
  - OK Backblaze B2 S3 endpoint: `B2_ENDPOINT_URL`, `B2_S3_ENDPOINT_URL`; present `B2_ENDPOINT_URL`.
14
  - OK Backblaze B2 bucket: `B2_BUCKET`; present `B2_BUCKET`.
15
- - MISSING Backblaze B2 key id: `B2_KEY_ID`; present none.
16
- Remediation: Set B2_KEY_ID for a least-privilege application key.
17
- - MISSING Backblaze B2 application key: `B2_APPLICATION_KEY`, `B2_APP_KEY`; present none.
18
- Remediation: Set B2_APPLICATION_KEY or B2_APP_KEY.
19
  - MISSING Genblaze/GMI API key: `GENBLAZE_API_KEY`, `GMI_API_KEY`; present none.
20
  Remediation: Set GENBLAZE_API_KEY or GMI_API_KEY.
21
  - OK Genblaze image model: `GENBLAZE_IMAGE_MODEL`; present `GENBLAZE_IMAGE_MODEL`.
 
12
  - OK ProofFrame generation backend mode: `PROOFFRAME_GENERATION_BACKEND`; present `PROOFFRAME_GENERATION_BACKEND`; expected `genblaze`.
13
  - OK Backblaze B2 S3 endpoint: `B2_ENDPOINT_URL`, `B2_S3_ENDPOINT_URL`; present `B2_ENDPOINT_URL`.
14
  - OK Backblaze B2 bucket: `B2_BUCKET`; present `B2_BUCKET`.
15
+ - OK Backblaze B2 key id: `B2_KEY_ID`; present `B2_KEY_ID`.
16
+ - OK Backblaze B2 application key: `B2_APPLICATION_KEY`, `B2_APP_KEY`; present `B2_APPLICATION_KEY`, `B2_APP_KEY`.
 
 
17
  - MISSING Genblaze/GMI API key: `GENBLAZE_API_KEY`, `GMI_API_KEY`; present none.
18
  Remediation: Set GENBLAZE_API_KEY or GMI_API_KEY.
19
  - OK Genblaze image model: `GENBLAZE_IMAGE_MODEL`; present `GENBLAZE_IMAGE_MODEL`.
docs/assets/public-api-smoke-evidence.json CHANGED
@@ -39,18 +39,18 @@
39
  "judge_submit_checklist_mode": "pre_submit_blocked",
40
  "judge_submit_checklist_safe_to_submit": false,
41
  "judge_submit_checklist_preflight": 6,
42
- "campaign_id": "cmp_6471fa12b0c3",
43
- "asset_id": "ast_9c6f1373b25e",
44
  "asset_provider": "mock",
45
  "asset_model": "mock-svg-v1",
46
  "asset_storage_backend": "local",
47
- "asset_storage_key": "cmp_6471fa12b0c3/cmp_6471fa12b0c3-variant-1.svg",
48
  "asset_public_url_present": true,
49
  "asset_status": "approved",
50
- "asset_sha256": "139ad9b66ba750f9b6a2d599eef3a98230a6609ca23740f4f140611d3c759bf6",
51
  "manifest_storage_backend": "local",
52
- "manifest_key": "cmp_6471fa12b0c3/cmp_6471fa12b0c3-manifest.json",
53
- "manifest_sha256": "1118c75292558341d24bdbfa1503bdaef24f66588d59302d3ffdfef5c507178b",
54
- "packet_bytes": 1534,
55
- "judge_demo_campaign_id": "cmp_7a59286c3003"
56
  }
 
39
  "judge_submit_checklist_mode": "pre_submit_blocked",
40
  "judge_submit_checklist_safe_to_submit": false,
41
  "judge_submit_checklist_preflight": 6,
42
+ "campaign_id": "cmp_10428c4206cc",
43
+ "asset_id": "ast_00b8d0a4c815",
44
  "asset_provider": "mock",
45
  "asset_model": "mock-svg-v1",
46
  "asset_storage_backend": "local",
47
+ "asset_storage_key": "cmp_10428c4206cc/cmp_10428c4206cc-variant-1.svg",
48
  "asset_public_url_present": true,
49
  "asset_status": "approved",
50
+ "asset_sha256": "b6bd6098e34e84c2d2785c1a0c7a06f772e9b84bf38c09b9227dd81b2308eb55",
51
  "manifest_storage_backend": "local",
52
+ "manifest_key": "cmp_10428c4206cc/cmp_10428c4206cc-manifest.json",
53
+ "manifest_sha256": "cb8bdec32a26e905303c22283f981527915167cb10456d8d7c7fc58bb2e2510b",
54
+ "packet_bytes": 1533,
55
+ "judge_demo_campaign_id": "cmp_f991d6029dfb"
56
  }
docs/assets/public-space-sync-report.json CHANGED
@@ -1,17 +1,17 @@
1
  {
2
  "schema": "proofframe.public_space_sync.v1",
3
- "created_at": "2026-07-01T10:48:58Z",
4
  "ok": true,
5
  "mode": "public_space_synced",
6
  "space_id": "ADJCJH/backblaze-proofframe",
7
  "public_host": "https://adjcjh-backblaze-proofframe.hf.space",
8
- "expected_sha": "54d801e018357c408fbfa2436cab014ad3300a14",
9
  "observed": {
10
- "space_sha": "54d801e018357c408fbfa2436cab014ad3300a14",
11
- "runtime_sha": "54d801e018357c408fbfa2436cab014ad3300a14",
12
  "runtime_stage": "RUNNING",
13
  "domain_ready": true,
14
- "last_modified": "2026-06-30T10:35:25.000Z",
15
  "health": {
16
  "ready": true,
17
  "storage_backend": "local",
@@ -32,9 +32,9 @@
32
  },
33
  "handoff_mode": "handoff_ready",
34
  "event_snapshot": {
35
- "checked_at": "2026-06-30T05:12:10Z",
36
- "age_days": 1,
37
- "participant_count_observed": 404,
38
  "submission_open": true,
39
  "requirements_ok": true,
40
  "criteria_ok": true
@@ -215,14 +215,14 @@
215
  "id": "space_metadata",
216
  "label": "Space metadata points at the expected commit",
217
  "ok": true,
218
- "detail": "Space sha is 54d801e018357c408fbfa2436cab014ad3300a14; expected 54d801e018357c408fbfa2436cab014ad3300a14.",
219
  "evidence": "https://huggingface.co/api/spaces/ADJCJH/backblaze-proofframe"
220
  },
221
  {
222
  "id": "runtime_ready",
223
  "label": "Space runtime is running the expected commit",
224
  "ok": true,
225
- "detail": "Runtime stage is RUNNING; runtime sha is 54d801e018357c408fbfa2436cab014ad3300a14; domain ready is True.",
226
  "evidence": "https://huggingface.co/api/spaces/ADJCJH/backblaze-proofframe/runtime"
227
  },
228
  {
@@ -236,7 +236,7 @@
236
  "id": "raw_event_snapshot",
237
  "label": "Raw Devpost event snapshot is public and fresh",
238
  "ok": true,
239
- "detail": "Event snapshot schema is proofframe.devpost_event_snapshot.v1; submission_open=True; age_days=1; participants=404.",
240
  "evidence": "https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/devpost-event-snapshot.json"
241
  },
242
  {
 
1
  {
2
  "schema": "proofframe.public_space_sync.v1",
3
+ "created_at": "2026-07-01T10:56:54Z",
4
  "ok": true,
5
  "mode": "public_space_synced",
6
  "space_id": "ADJCJH/backblaze-proofframe",
7
  "public_host": "https://adjcjh-backblaze-proofframe.hf.space",
8
+ "expected_sha": "abb09ea8fa92cae185fb08d65ae6419d85bc3c0e",
9
  "observed": {
10
+ "space_sha": "abb09ea8fa92cae185fb08d65ae6419d85bc3c0e",
11
+ "runtime_sha": "abb09ea8fa92cae185fb08d65ae6419d85bc3c0e",
12
  "runtime_stage": "RUNNING",
13
  "domain_ready": true,
14
+ "last_modified": "2026-07-01T10:55:40.000Z",
15
  "health": {
16
  "ready": true,
17
  "storage_backend": "local",
 
32
  },
33
  "handoff_mode": "handoff_ready",
34
  "event_snapshot": {
35
+ "checked_at": "2026-07-01T10:54:19Z",
36
+ "age_days": 0,
37
+ "participant_count_observed": 439,
38
  "submission_open": true,
39
  "requirements_ok": true,
40
  "criteria_ok": true
 
215
  "id": "space_metadata",
216
  "label": "Space metadata points at the expected commit",
217
  "ok": true,
218
+ "detail": "Space sha is abb09ea8fa92cae185fb08d65ae6419d85bc3c0e; expected abb09ea8fa92cae185fb08d65ae6419d85bc3c0e.",
219
  "evidence": "https://huggingface.co/api/spaces/ADJCJH/backblaze-proofframe"
220
  },
221
  {
222
  "id": "runtime_ready",
223
  "label": "Space runtime is running the expected commit",
224
  "ok": true,
225
+ "detail": "Runtime stage is RUNNING; runtime sha is abb09ea8fa92cae185fb08d65ae6419d85bc3c0e; domain ready is True.",
226
  "evidence": "https://huggingface.co/api/spaces/ADJCJH/backblaze-proofframe/runtime"
227
  },
228
  {
 
236
  "id": "raw_event_snapshot",
237
  "label": "Raw Devpost event snapshot is public and fresh",
238
  "ok": true,
239
+ "detail": "Event snapshot schema is proofframe.devpost_event_snapshot.v1; submission_open=True; age_days=0; participants=439.",
240
  "evidence": "https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/devpost-event-snapshot.json"
241
  },
242
  {
docs/assets/public-space-sync-report.md CHANGED
@@ -2,21 +2,21 @@
2
 
3
  Mode: `public_space_synced`
4
  OK: `true`
5
- Created: `2026-07-01T10:48:58Z`
6
  Space: `ADJCJH/backblaze-proofframe`
7
  Public host: https://adjcjh-backblaze-proofframe.hf.space
8
- Expected sha: `54d801e018357c408fbfa2436cab014ad3300a14`
9
- Runtime sha: `54d801e018357c408fbfa2436cab014ad3300a14`
10
  Runtime stage: `RUNNING`
11
 
12
  ## Checks
13
 
14
  | Status | Check | Detail | Evidence |
15
  | --- | --- | --- | --- |
16
- | OK | Space metadata points at the expected commit | Space sha is 54d801e018357c408fbfa2436cab014ad3300a14; expected 54d801e018357c408fbfa2436cab014ad3300a14. | https://huggingface.co/api/spaces/ADJCJH/backblaze-proofframe |
17
- | OK | Space runtime is running the expected commit | Runtime stage is RUNNING; runtime sha is 54d801e018357c408fbfa2436cab014ad3300a14; domain ready is True. | https://huggingface.co/api/spaces/ADJCJH/backblaze-proofframe/runtime |
18
  | OK | Raw handoff report is public and ready | Handoff schema is proofframe.agent_handoff.v1; mode is handoff_ready. | https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/agent-handoff-report.json |
19
- | OK | Raw Devpost event snapshot is public and fresh | Event snapshot schema is proofframe.devpost_event_snapshot.v1; submission_open=True; age_days=1; participants=404. | https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/devpost-event-snapshot.json |
20
  | OK | Raw final launch plan is public and phase-aware | Launch plan schema is proofframe.final_launch_plan.v1; mode is ready_for_credential_entry; current phase is credential_entry. | https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/final-launch-plan.json |
21
  | OK | Raw B2 key scope checklist is public and no-secret | Checklist schema is proofframe.b2_key_scope_checklist.v1; safe_to_commit=True; bucket=proofframe-demo-a6b4e49; prefix=campaigns/; confirmation=required_before_key_creation; required=['listAllBucketNames', 'writeFiles']. | https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/b2-key-scope-checklist.json |
22
  | OK | Raw judge brief is public and claim-safe | Judge brief schema is proofframe.judge_brief.v1; safe_to_submit is False. | https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/judge-brief.json |
 
2
 
3
  Mode: `public_space_synced`
4
  OK: `true`
5
+ Created: `2026-07-01T10:56:54Z`
6
  Space: `ADJCJH/backblaze-proofframe`
7
  Public host: https://adjcjh-backblaze-proofframe.hf.space
8
+ Expected sha: `abb09ea8fa92cae185fb08d65ae6419d85bc3c0e`
9
+ Runtime sha: `abb09ea8fa92cae185fb08d65ae6419d85bc3c0e`
10
  Runtime stage: `RUNNING`
11
 
12
  ## Checks
13
 
14
  | Status | Check | Detail | Evidence |
15
  | --- | --- | --- | --- |
16
+ | OK | Space metadata points at the expected commit | Space sha is abb09ea8fa92cae185fb08d65ae6419d85bc3c0e; expected abb09ea8fa92cae185fb08d65ae6419d85bc3c0e. | https://huggingface.co/api/spaces/ADJCJH/backblaze-proofframe |
17
+ | OK | Space runtime is running the expected commit | Runtime stage is RUNNING; runtime sha is abb09ea8fa92cae185fb08d65ae6419d85bc3c0e; domain ready is True. | https://huggingface.co/api/spaces/ADJCJH/backblaze-proofframe/runtime |
18
  | OK | Raw handoff report is public and ready | Handoff schema is proofframe.agent_handoff.v1; mode is handoff_ready. | https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/agent-handoff-report.json |
19
+ | OK | Raw Devpost event snapshot is public and fresh | Event snapshot schema is proofframe.devpost_event_snapshot.v1; submission_open=True; age_days=0; participants=439. | https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/devpost-event-snapshot.json |
20
  | OK | Raw final launch plan is public and phase-aware | Launch plan schema is proofframe.final_launch_plan.v1; mode is ready_for_credential_entry; current phase is credential_entry. | https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/final-launch-plan.json |
21
  | OK | Raw B2 key scope checklist is public and no-secret | Checklist schema is proofframe.b2_key_scope_checklist.v1; safe_to_commit=True; bucket=proofframe-demo-a6b4e49; prefix=campaigns/; confirmation=required_before_key_creation; required=['listAllBucketNames', 'writeFiles']. | https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/b2-key-scope-checklist.json |
22
  | OK | Raw judge brief is public and claim-safe | Judge brief schema is proofframe.judge_brief.v1; safe_to_submit is False. | https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/judge-brief.json |
docs/assets/public-space-upload-report.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "schema": "proofframe.public_space_upload.v1",
3
- "created_at": "2026-06-30T10:35:27Z",
4
  "mode": "uploaded",
5
  "ok": true,
6
  "execute": true,
@@ -8,7 +8,7 @@
8
  "repo_type": "space",
9
  "revision": "main",
10
  "space_raw_base": "https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main",
11
- "commit_message": "Sync ProofFrame public Space after final handoff waits",
12
  "ignore_patterns": [
13
  ".git/**",
14
  ".venv/**",
@@ -51,9 +51,9 @@
51
  ]
52
  },
53
  "file_plan": {
54
- "total_files": 14924,
55
- "included_count": 209,
56
- "excluded_count": 14715,
57
  "included_samples": [
58
  ".dockerignore",
59
  ".env.example",
@@ -125,8 +125,8 @@
125
  "upload": {
126
  "attempted": true,
127
  "ok": true,
128
- "commit_url": "https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/commit/54d801e018357c408fbfa2436cab014ad3300a14",
129
- "commit_oid": "54d801e018357c408fbfa2436cab014ad3300a14"
130
  },
131
  "secret_probe": {
132
  "attempted": true,
 
1
  {
2
  "schema": "proofframe.public_space_upload.v1",
3
+ "created_at": "2026-07-01T10:55:49Z",
4
  "mode": "uploaded",
5
  "ok": true,
6
  "execute": true,
 
8
  "repo_type": "space",
9
  "revision": "main",
10
  "space_raw_base": "https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main",
11
+ "commit_message": "Sync ProofFrame public Space after event refresh",
12
  "ignore_patterns": [
13
  ".git/**",
14
  ".venv/**",
 
51
  ]
52
  },
53
  "file_plan": {
54
+ "total_files": 14982,
55
+ "included_count": 210,
56
+ "excluded_count": 14772,
57
  "included_samples": [
58
  ".dockerignore",
59
  ".env.example",
 
125
  "upload": {
126
  "attempted": true,
127
  "ok": true,
128
+ "commit_url": "https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/commit/abb09ea8fa92cae185fb08d65ae6419d85bc3c0e",
129
+ "commit_oid": "abb09ea8fa92cae185fb08d65ae6419d85bc3c0e"
130
  },
131
  "secret_probe": {
132
  "attempted": true,
docs/assets/public-space-upload-report.md CHANGED
@@ -3,7 +3,7 @@
3
  Mode: `uploaded`
4
  OK: `true`
5
  Execute: `true`
6
- Created: `2026-06-30T10:35:27Z`
7
  Repo: `ADJCJH/backblaze-proofframe`
8
  Revision: `main`
9
  Raw base: https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main
@@ -11,8 +11,8 @@ Raw base: https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main
11
  ## Safety
12
 
13
  - Required ignore patterns OK: `true`
14
- - Included files: `209`
15
- - Excluded files: `14715`
16
  - Included sensitive files: `none`
17
 
18
  ## Sensitive File Checks
@@ -25,8 +25,8 @@ Raw base: https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main
25
  ## Upload
26
 
27
  - Upload OK: `true`
28
- - Commit: `54d801e018357c408fbfa2436cab014ad3300a14`
29
- - Commit URL: https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/commit/54d801e018357c408fbfa2436cab014ad3300a14
30
 
31
  ## Secret Probe
32
 
 
3
  Mode: `uploaded`
4
  OK: `true`
5
  Execute: `true`
6
+ Created: `2026-07-01T10:55:49Z`
7
  Repo: `ADJCJH/backblaze-proofframe`
8
  Revision: `main`
9
  Raw base: https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main
 
11
  ## Safety
12
 
13
  - Required ignore patterns OK: `true`
14
+ - Included files: `210`
15
+ - Excluded files: `14772`
16
  - Included sensitive files: `none`
17
 
18
  ## Sensitive File Checks
 
25
  ## Upload
26
 
27
  - Upload OK: `true`
28
+ - Commit: `abb09ea8fa92cae185fb08d65ae6419d85bc3c0e`
29
+ - Commit URL: https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/commit/abb09ea8fa92cae185fb08d65ae6419d85bc3c0e
30
 
31
  ## Secret Probe
32
 
docs/assets/secret-scan-report.json CHANGED
@@ -1,15 +1,15 @@
1
  {
2
  "schema": "proofframe.secret_scan.v1",
3
- "created_at": "2026-07-01T10:54:28Z",
4
  "mode": "clear",
5
  "ok": true,
6
  "root": ".",
7
  "findings": [],
8
  "counts": {
9
- "scanned_text_files": 234,
10
  "inventoried_binary_files": 6,
11
  "skipped_local_secret_files": 1,
12
- "skipped_hard_files": 14562,
13
  "findings": 0
14
  },
15
  "coverage": {
@@ -40,6 +40,7 @@
40
  "docs/assets/award-readiness-report.md",
41
  "docs/assets/b2-key-scope-checklist.json",
42
  "docs/assets/b2-key-scope-checklist.md",
 
43
  "docs/assets/b2-live-setup.json",
44
  "docs/assets/b2-live-setup.md",
45
  "docs/assets/demo-readiness-report.json",
@@ -228,6 +229,7 @@
228
  "tests/test_submission_bundle.py",
229
  "tests/test_submission_gate.py",
230
  "tests/test_task_cli.py",
 
231
  "var/storage/cmp_0fd2f50b9713/cmp_0fd2f50b9713-manifest.json",
232
  "var/storage/cmp_16201908a885/cmp_16201908a885-manifest.json",
233
  "var/storage/cmp_1917ba0aa34c/cmp_1917ba0aa34c-manifest.json",
 
1
  {
2
  "schema": "proofframe.secret_scan.v1",
3
+ "created_at": "2026-07-01T11:26:36Z",
4
  "mode": "clear",
5
  "ok": true,
6
  "root": ".",
7
  "findings": [],
8
  "counts": {
9
+ "scanned_text_files": 236,
10
  "inventoried_binary_files": 6,
11
  "skipped_local_secret_files": 1,
12
+ "skipped_hard_files": 14652,
13
  "findings": 0
14
  },
15
  "coverage": {
 
40
  "docs/assets/award-readiness-report.md",
41
  "docs/assets/b2-key-scope-checklist.json",
42
  "docs/assets/b2-key-scope-checklist.md",
43
+ "docs/assets/b2-live-proof-evidence.json",
44
  "docs/assets/b2-live-setup.json",
45
  "docs/assets/b2-live-setup.md",
46
  "docs/assets/demo-readiness-report.json",
 
229
  "tests/test_submission_bundle.py",
230
  "tests/test_submission_gate.py",
231
  "tests/test_task_cli.py",
232
+ "var/live-proof/b2-uvicorn.log",
233
  "var/storage/cmp_0fd2f50b9713/cmp_0fd2f50b9713-manifest.json",
234
  "var/storage/cmp_16201908a885/cmp_16201908a885-manifest.json",
235
  "var/storage/cmp_1917ba0aa34c/cmp_1917ba0aa34c-manifest.json",
docs/assets/secret-scan-report.md CHANGED
@@ -2,11 +2,11 @@
2
 
3
  Mode: `clear`
4
  OK: `true`
5
- Created: `2026-07-01T10:54:28Z`
6
 
7
  ## Counts
8
 
9
- - Scanned text files: `234`
10
  - Inventoried binary files: `6`
11
  - Skipped local secret files: `1`
12
  - Findings: `0`
 
2
 
3
  Mode: `clear`
4
  OK: `true`
5
+ Created: `2026-07-01T11:26:36Z`
6
 
7
  ## Counts
8
 
9
+ - Scanned text files: `236`
10
  - Inventoried binary files: `6`
11
  - Skipped local secret files: `1`
12
  - Findings: `0`
docs/assets/submission-audit-report.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "schema": "proofframe.submission_audit.v1",
3
- "created_at": "2026-07-01T10:54:27Z",
4
  "mode": "pre_submit_audit_blocked",
5
  "ok": false,
6
  "root": ".",
@@ -15,7 +15,7 @@
15
  "T042"
16
  ],
17
  "task_statuses": {
18
- "T020": "doing",
19
  "T021": "doing",
20
  "T040": "done",
21
  "T041A": "todo",
@@ -24,7 +24,7 @@
24
  },
25
  "final_evidence_path": "docs/assets/final-live-proof-evidence.json",
26
  "section_counts": {
27
- "tasks": 3,
28
  "files": 0,
29
  "schemas": 0,
30
  "final_evidence": 1,
@@ -34,12 +34,6 @@
34
  "final_control": 1
35
  },
36
  "findings": [
37
- {
38
- "gate": "T020",
39
- "status": "doing",
40
- "detail": "Integrate Backblaze B2-compatible storage is not done.",
41
- "evidence": "tasks.json"
42
- },
43
  {
44
  "gate": "T021",
45
  "status": "doing",
@@ -133,7 +127,7 @@
133
  {
134
  "gate": "final_submission_control.blocking_items",
135
  "status": "blocked",
136
- "detail": "Unexpected blockers remain before audit sign-off: b2_live_proof, credential_handoff, devpost_submission_checklist, final_recording, final_secret_scan, genblaze_live_proof, public_video, public_video_check",
137
  "evidence": "docs/assets/final-submission-control.json"
138
  }
139
  ],
 
1
  {
2
  "schema": "proofframe.submission_audit.v1",
3
+ "created_at": "2026-07-01T11:26:25Z",
4
  "mode": "pre_submit_audit_blocked",
5
  "ok": false,
6
  "root": ".",
 
15
  "T042"
16
  ],
17
  "task_statuses": {
18
+ "T020": "done",
19
  "T021": "doing",
20
  "T040": "done",
21
  "T041A": "todo",
 
24
  },
25
  "final_evidence_path": "docs/assets/final-live-proof-evidence.json",
26
  "section_counts": {
27
+ "tasks": 2,
28
  "files": 0,
29
  "schemas": 0,
30
  "final_evidence": 1,
 
34
  "final_control": 1
35
  },
36
  "findings": [
 
 
 
 
 
 
37
  {
38
  "gate": "T021",
39
  "status": "doing",
 
127
  {
128
  "gate": "final_submission_control.blocking_items",
129
  "status": "blocked",
130
+ "detail": "Unexpected blockers remain before audit sign-off: credential_handoff, devpost_submission_checklist, final_recording, final_secret_scan, genblaze_live_proof, public_video, public_video_check",
131
  "evidence": "docs/assets/final-submission-control.json"
132
  }
133
  ],
docs/assets/submission-audit-report.md CHANGED
@@ -2,12 +2,12 @@
2
 
3
  Mode: `pre_submit_audit_blocked`
4
  OK: `false`
5
- Created: `2026-07-01T10:54:27Z`
6
  Final evidence: `docs/assets/final-live-proof-evidence.json`
7
 
8
  ## Task Statuses
9
 
10
- - T020: `doing`
11
  - T021: `doing`
12
  - T040: `done`
13
  - T041A: `todo`
@@ -16,7 +16,7 @@ Final evidence: `docs/assets/final-live-proof-evidence.json`
16
 
17
  ## Section Findings
18
 
19
- - tasks: 3 finding(s)
20
  - files: OK
21
  - schemas: OK
22
  - final_evidence: 1 finding(s)
@@ -27,7 +27,6 @@ Final evidence: `docs/assets/final-live-proof-evidence.json`
27
 
28
  ## Findings
29
 
30
- - `T020` [doing]: Integrate Backblaze B2-compatible storage is not done. Evidence: `tasks.json`
31
  - `T021` [doing]: Integrate Genblaze-compatible generation is not done. Evidence: `tasks.json`
32
  - `T041A` [todo]: Run final secret scan is not done. Evidence: `tasks.json`
33
  - `final-live-proof-evidence` [missing]: docs/assets/final-live-proof-evidence.json is missing or invalid JSON. Evidence: `docs/assets/final-live-proof-evidence.json`
@@ -43,7 +42,7 @@ Final evidence: `docs/assets/final-live-proof-evidence.json`
43
  - `demo_readiness.final_recording_ready` [incomplete]: Final recording readiness gate is not ready. Evidence: `docs/assets/demo-readiness-report.json`
44
  - `recording_assets.final_video_ready` [incomplete]: Recording assets do not verify the final public video. Evidence: `docs/assets/recording-assets.json`
45
  - `live_credential_handoff.ready_for_live_proof` [incomplete]: Live credential handoff is not ready. Evidence: `docs/assets/live-credential-handoff.json`
46
- - `final_submission_control.blocking_items` [blocked]: Unexpected blockers remain before audit sign-off: b2_live_proof, credential_handoff, devpost_submission_checklist, final_recording, final_secret_scan, genblaze_live_proof, public_video, public_video_check Evidence: `docs/assets/final-submission-control.json`
47
 
48
  ## Next Commands
49
 
 
2
 
3
  Mode: `pre_submit_audit_blocked`
4
  OK: `false`
5
+ Created: `2026-07-01T11:26:25Z`
6
  Final evidence: `docs/assets/final-live-proof-evidence.json`
7
 
8
  ## Task Statuses
9
 
10
+ - T020: `done`
11
  - T021: `doing`
12
  - T040: `done`
13
  - T041A: `todo`
 
16
 
17
  ## Section Findings
18
 
19
+ - tasks: 2 finding(s)
20
  - files: OK
21
  - schemas: OK
22
  - final_evidence: 1 finding(s)
 
27
 
28
  ## Findings
29
 
 
30
  - `T021` [doing]: Integrate Genblaze-compatible generation is not done. Evidence: `tasks.json`
31
  - `T041A` [todo]: Run final secret scan is not done. Evidence: `tasks.json`
32
  - `final-live-proof-evidence` [missing]: docs/assets/final-live-proof-evidence.json is missing or invalid JSON. Evidence: `docs/assets/final-live-proof-evidence.json`
 
42
  - `demo_readiness.final_recording_ready` [incomplete]: Final recording readiness gate is not ready. Evidence: `docs/assets/demo-readiness-report.json`
43
  - `recording_assets.final_video_ready` [incomplete]: Recording assets do not verify the final public video. Evidence: `docs/assets/recording-assets.json`
44
  - `live_credential_handoff.ready_for_live_proof` [incomplete]: Live credential handoff is not ready. Evidence: `docs/assets/live-credential-handoff.json`
45
+ - `final_submission_control.blocking_items` [blocked]: Unexpected blockers remain before audit sign-off: credential_handoff, devpost_submission_checklist, final_recording, final_secret_scan, genblaze_live_proof, public_video, public_video_check Evidence: `docs/assets/final-submission-control.json`
46
 
47
  ## Next Commands
48
 
docs/assets/submission-bundle-manifest.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "schema": "proofframe.submission_bundle.v1",
3
- "created_at": "2026-06-30T10:37:46Z",
4
  "project": "ProofFrame",
5
  "repository_url": "https://github.com/adjcjh777/backblaze-proofframe",
6
  "public_demo_url": "https://adjcjh-backblaze-proofframe.hf.space/?judge=1",
@@ -20,9 +20,9 @@
20
  "mode": "pre_live_safe",
21
  "summary": {
22
  "required": 6,
23
- "done": 1,
24
  "blocked": 0,
25
- "doing": 2,
26
  "todo": 3,
27
  "missing": 0
28
  },
@@ -111,11 +111,11 @@
111
  ]
112
  },
113
  "next_actions": [
114
- "Run a live Backblaze B2 asset and manifest proof.",
115
  "Run a live Genblaze generation proof and capture provider metadata.",
116
  "Run the final submission audit after live proofs are captured.",
117
  "Run the final secret scan before recording or submitting.",
118
- "Submit the Devpost project after every preceding gate is done."
 
119
  ]
120
  },
121
  "closeout_gate": {
@@ -137,7 +137,7 @@
137
  "present": true,
138
  "schema": "proofframe.secret_scan.v1",
139
  "schema_ok": true,
140
- "created_at": "2026-06-30T10:37:16Z",
141
  "ready": true,
142
  "fresh_after_receipt": true,
143
  "findings": []
@@ -148,7 +148,7 @@
148
  "present": true,
149
  "schema": "proofframe.final_submission_control.v1",
150
  "schema_ok": true,
151
- "created_at": "2026-06-30T10:37:45Z",
152
  "ready": false,
153
  "fresh_after_receipt": true,
154
  "findings": [
@@ -162,7 +162,7 @@
162
  "present": true,
163
  "schema": "proofframe.final_closeout_status.v1",
164
  "schema_ok": true,
165
- "created_at": "2026-06-30T10:37:46Z",
166
  "ready": false,
167
  "fresh_after_receipt": true,
168
  "findings": [
@@ -339,7 +339,7 @@
339
  "label": "Machine-readable Devpost event snapshot",
340
  "present": true,
341
  "bytes": 2492,
342
- "sha256": "626886a6fcee619967fd84275ff6a8ad2fc1fb082bec6b8e399aa3a6f541ad6c"
343
  },
344
  {
345
  "id": "devpost_event_snapshot_md",
@@ -347,7 +347,7 @@
347
  "label": "Human-readable Devpost event snapshot",
348
  "present": true,
349
  "bytes": 1443,
350
- "sha256": "b0389eded15376692857a921b235a548190ec1004c80028f3c6c88fc69a805f3"
351
  },
352
  {
353
  "id": "agent_handoff_script",
@@ -363,7 +363,7 @@
363
  "label": "Machine-readable Agent handoff report",
364
  "present": true,
365
  "bytes": 2253,
366
- "sha256": "87711b3b8a5b15151a3ad911eb9b8fae75252654b42bd8e707b25e8f4a70a965"
367
  },
368
  {
369
  "id": "agent_handoff_md",
@@ -371,7 +371,7 @@
371
  "label": "Human-readable Agent handoff report",
372
  "present": true,
373
  "bytes": 1571,
374
- "sha256": "b64f0c7769d5867cb3a6c1079c51eb7911a7e817a0fd0bf0550cff17185fb6a6"
375
  },
376
  {
377
  "id": "public_space_sync_script",
@@ -387,7 +387,7 @@
387
  "label": "Machine-readable public Space sync report",
388
  "present": true,
389
  "bytes": 20606,
390
- "sha256": "e315ee991f39586ef9933bcce05e22e3effd4a7b13cc60d4f7b550b4b116672b"
391
  },
392
  {
393
  "id": "public_space_sync_md",
@@ -395,7 +395,7 @@
395
  "label": "Human-readable public Space sync report",
396
  "present": true,
397
  "bytes": 8673,
398
- "sha256": "68fb795359bcfd693f7e68f45ab88f2ccc80af4e76c6a15913bb34995d878bd7"
399
  },
400
  {
401
  "id": "public_space_upload_script",
@@ -410,8 +410,8 @@
410
  "path": "docs/assets/public-space-upload-report.json",
411
  "label": "Machine-readable public Space upload report",
412
  "present": true,
413
- "bytes": 4150,
414
- "sha256": "588c3fb8d14733f4d8ec7d4e1b215b060d9a9a3c655f1032e1d9d8137402cc03"
415
  },
416
  {
417
  "id": "public_space_upload_md",
@@ -419,7 +419,7 @@
419
  "label": "Human-readable public Space upload report",
420
  "present": true,
421
  "bytes": 1372,
422
- "sha256": "0b35af876a813c9cb206ac37e0f83ed5a0bd3e7a483d3b7fc1675a8bd00c84cf"
423
  },
424
  {
425
  "id": "public_demo_screenshot_script",
@@ -802,16 +802,16 @@
802
  "path": "docs/assets/final-submission-control.json",
803
  "label": "Machine-readable final control report",
804
  "present": true,
805
- "bytes": 24359,
806
- "sha256": "d2cf3949ba984a2591a8f8cd4bd4ea5b8e695b30a6555e226d16a2363175932a"
807
  },
808
  {
809
  "id": "final_submission_control_md",
810
  "path": "docs/assets/final-submission-control.md",
811
  "label": "Human-readable final control report",
812
  "present": true,
813
- "bytes": 7087,
814
- "sha256": "04a3aa516b2281bf659760edd82b004122c4c3c11eb2f86894c0c37278896c29"
815
  },
816
  {
817
  "id": "final_closeout_status_script",
@@ -827,7 +827,7 @@
827
  "label": "Machine-readable final closeout status",
828
  "present": true,
829
  "bytes": 12592,
830
- "sha256": "ad81b91c1035a28350ae9ebfbb7474e13a3cb186b72b3e4770e7653f507ec693"
831
  },
832
  {
833
  "id": "final_closeout_status_md",
@@ -922,16 +922,16 @@
922
  "path": "docs/assets/submission-audit-report.json",
923
  "label": "Machine-readable submission audit report",
924
  "present": true,
925
- "bytes": 5925,
926
- "sha256": "cf1121ff24b443e8088dfafb06844462c989559dcdefb3e0acc19c1f7a0cd86b"
927
  },
928
  {
929
  "id": "submission_audit_md",
930
  "path": "docs/assets/submission-audit-report.md",
931
  "label": "Human-readable submission audit report",
932
  "present": true,
933
- "bytes": 4459,
934
- "sha256": "dd3ed9a5c89591bfb0ed6150c59b5db3246ffc8583aaa7dc0fdcee4b16e661c7"
935
  },
936
  {
937
  "id": "devpost_receipt_script",
@@ -1002,8 +1002,8 @@
1002
  "path": "docs/assets/secret-scan-report.json",
1003
  "label": "Machine-readable secret scan report",
1004
  "present": true,
1005
- "bytes": 11871,
1006
- "sha256": "04215217a3a8693029819734db1f5ebe2530bd5ba47e75941ea758e1b1d9aa8e"
1007
  },
1008
  {
1009
  "id": "secret_scan_md",
@@ -1011,7 +1011,7 @@
1011
  "label": "Human-readable secret scan report",
1012
  "present": true,
1013
  "bytes": 846,
1014
- "sha256": "4f93112233868372a86f6bf77c60f2f128a1f15173d462ebd9ed38e6e399e024"
1015
  },
1016
  {
1017
  "id": "b2_live_setup_json",
@@ -1043,7 +1043,7 @@
1043
  "label": "Machine-readable B2 key scope checklist",
1044
  "present": true,
1045
  "bytes": 8235,
1046
- "sha256": "bd2b9e0e10706fe768c43c32dda9e7870bc23cb056620f130c48dacb7cd9c3de"
1047
  },
1048
  {
1049
  "id": "b2_key_scope_checklist_md",
@@ -1098,16 +1098,16 @@
1098
  "path": "docs/assets/live-credential-handoff.json",
1099
  "label": "Machine-readable live credential handoff",
1100
  "present": true,
1101
- "bytes": 4548,
1102
- "sha256": "08b0b09e257f62535a0800e00c91a5ffb8537c9fef9015b7a7f1be1acbe95eb8"
1103
  },
1104
  {
1105
  "id": "live_env_handoff_md",
1106
  "path": "docs/assets/live-credential-handoff.md",
1107
  "label": "Human-readable live credential handoff",
1108
  "present": true,
1109
- "bytes": 2261,
1110
- "sha256": "17742c751ea63313f1deccdd0c4260dddc539f190f4e0ff51db85e54bf9e590d"
1111
  },
1112
  {
1113
  "id": "final_env_wizard",
@@ -1131,7 +1131,7 @@
1131
  "label": "Machine-readable post-credential live proof plan",
1132
  "present": true,
1133
  "bytes": 8435,
1134
- "sha256": "30c716c29303c65accdf5678c8418262cb83652b248a9823994ba2d33f0aa23c"
1135
  },
1136
  {
1137
  "id": "post_credential_live_proof_md",
@@ -1139,7 +1139,7 @@
1139
  "label": "Human-readable post-credential live proof plan",
1140
  "present": true,
1141
  "bytes": 2780,
1142
- "sha256": "81ae854b8b7294a4b48bc3ced4909188ec9da63b2213d3fd4a8433c9d9513cb0"
1143
  },
1144
  {
1145
  "id": "public_claim_lint",
@@ -1218,8 +1218,8 @@
1218
  "path": "tasks.json",
1219
  "label": "Machine-readable task board",
1220
  "present": true,
1221
- "bytes": 72478,
1222
- "sha256": "76c2bf237562c2ec633d5c305c2140a408e22c789914981620a6231ddb9630bc"
1223
  },
1224
  {
1225
  "id": "local_ui_smoke",
 
1
  {
2
  "schema": "proofframe.submission_bundle.v1",
3
+ "created_at": "2026-07-01T11:26:25Z",
4
  "project": "ProofFrame",
5
  "repository_url": "https://github.com/adjcjh777/backblaze-proofframe",
6
  "public_demo_url": "https://adjcjh-backblaze-proofframe.hf.space/?judge=1",
 
20
  "mode": "pre_live_safe",
21
  "summary": {
22
  "required": 6,
23
+ "done": 2,
24
  "blocked": 0,
25
+ "doing": 1,
26
  "todo": 3,
27
  "missing": 0
28
  },
 
111
  ]
112
  },
113
  "next_actions": [
 
114
  "Run a live Genblaze generation proof and capture provider metadata.",
115
  "Run the final submission audit after live proofs are captured.",
116
  "Run the final secret scan before recording or submitting.",
117
+ "Submit the Devpost project after every preceding gate is done.",
118
+ "Capture final live proof evidence JSON."
119
  ]
120
  },
121
  "closeout_gate": {
 
137
  "present": true,
138
  "schema": "proofframe.secret_scan.v1",
139
  "schema_ok": true,
140
+ "created_at": "2026-07-01T11:26:17Z",
141
  "ready": true,
142
  "fresh_after_receipt": true,
143
  "findings": []
 
148
  "present": true,
149
  "schema": "proofframe.final_submission_control.v1",
150
  "schema_ok": true,
151
+ "created_at": "2026-07-01T11:26:25Z",
152
  "ready": false,
153
  "fresh_after_receipt": true,
154
  "findings": [
 
162
  "present": true,
163
  "schema": "proofframe.final_closeout_status.v1",
164
  "schema_ok": true,
165
+ "created_at": "2026-07-01T10:54:27Z",
166
  "ready": false,
167
  "fresh_after_receipt": true,
168
  "findings": [
 
339
  "label": "Machine-readable Devpost event snapshot",
340
  "present": true,
341
  "bytes": 2492,
342
+ "sha256": "5b7c1f2277d121b89dbc3c1d02ee646dbfbf9d52af4b2d481c5d270aba4f9d14"
343
  },
344
  {
345
  "id": "devpost_event_snapshot_md",
 
347
  "label": "Human-readable Devpost event snapshot",
348
  "present": true,
349
  "bytes": 1443,
350
+ "sha256": "cc2e49b18ae1776d0942e2dfedd8d2da093c61a5e086eb06b2e4033b1aaf9b9b"
351
  },
352
  {
353
  "id": "agent_handoff_script",
 
363
  "label": "Machine-readable Agent handoff report",
364
  "present": true,
365
  "bytes": 2253,
366
+ "sha256": "d4912010b69b8a18efb7101abb4840e4fbce51afb6ea4cfe39d854e21815e9ca"
367
  },
368
  {
369
  "id": "agent_handoff_md",
 
371
  "label": "Human-readable Agent handoff report",
372
  "present": true,
373
  "bytes": 1571,
374
+ "sha256": "04348bf2d799f2f0fdc8d41b167f19b1bcbe63c27d433d27610ac576885e4de0"
375
  },
376
  {
377
  "id": "public_space_sync_script",
 
387
  "label": "Machine-readable public Space sync report",
388
  "present": true,
389
  "bytes": 20606,
390
+ "sha256": "ad473ba938336977638e60008c9c8fc82c7b6f529962ad65a34a5b1b0a49e8a8"
391
  },
392
  {
393
  "id": "public_space_sync_md",
 
395
  "label": "Human-readable public Space sync report",
396
  "present": true,
397
  "bytes": 8673,
398
+ "sha256": "3ada1f215d807d27e5185d97c77ec68f5268a253ffe59c29cce8879ee55abff8"
399
  },
400
  {
401
  "id": "public_space_upload_script",
 
410
  "path": "docs/assets/public-space-upload-report.json",
411
  "label": "Machine-readable public Space upload report",
412
  "present": true,
413
+ "bytes": 4144,
414
+ "sha256": "f638daa8afd5ba7448632ca565afff9868c7c0822d6c33a8be6ca6a7d07f623e"
415
  },
416
  {
417
  "id": "public_space_upload_md",
 
419
  "label": "Human-readable public Space upload report",
420
  "present": true,
421
  "bytes": 1372,
422
+ "sha256": "cd5387813c1d989e496c494d95e04abc6f4d3b7b767dcfc4f132fe304c33b175"
423
  },
424
  {
425
  "id": "public_demo_screenshot_script",
 
802
  "path": "docs/assets/final-submission-control.json",
803
  "label": "Machine-readable final control report",
804
  "present": true,
805
+ "bytes": 23805,
806
+ "sha256": "599c0b971d58455bb5daa78e68e61fade629406021e96cb58e2731b89d558f9e"
807
  },
808
  {
809
  "id": "final_submission_control_md",
810
  "path": "docs/assets/final-submission-control.md",
811
  "label": "Human-readable final control report",
812
  "present": true,
813
+ "bytes": 7096,
814
+ "sha256": "580504b86d270bfe7d4a40da3015394d1adca02d217f0fcf6c2b36230b7b7a9f"
815
  },
816
  {
817
  "id": "final_closeout_status_script",
 
827
  "label": "Machine-readable final closeout status",
828
  "present": true,
829
  "bytes": 12592,
830
+ "sha256": "532bd71fdd7485ee1d6956f429304f8cec36b3af5b1623f8fba2945ecbe619bc"
831
  },
832
  {
833
  "id": "final_closeout_status_md",
 
922
  "path": "docs/assets/submission-audit-report.json",
923
  "label": "Machine-readable submission audit report",
924
  "present": true,
925
+ "bytes": 5759,
926
+ "sha256": "1abdb4af1b0c4e9726be4d7d91d03c374ac4bc4f3061581d85ab5b8ae2621b09"
927
  },
928
  {
929
  "id": "submission_audit_md",
930
  "path": "docs/assets/submission-audit-report.md",
931
  "label": "Human-readable submission audit report",
932
  "present": true,
933
+ "bytes": 4362,
934
+ "sha256": "fe2134a30bbfb05aa22d169f6eb4fed5a2ab8931c58d3f61f55660fe96fb6ed2"
935
  },
936
  {
937
  "id": "devpost_receipt_script",
 
1002
  "path": "docs/assets/secret-scan-report.json",
1003
  "label": "Machine-readable secret scan report",
1004
  "present": true,
1005
+ "bytes": 12005,
1006
+ "sha256": "fa4482048de6bcc086601a110f091644e31e398d98ff5f7420183965c0e4ee5d"
1007
  },
1008
  {
1009
  "id": "secret_scan_md",
 
1011
  "label": "Human-readable secret scan report",
1012
  "present": true,
1013
  "bytes": 846,
1014
+ "sha256": "d960c02de5417f75d8834ed0816056cb8e42440a4dd24bd9970982962fc42498"
1015
  },
1016
  {
1017
  "id": "b2_live_setup_json",
 
1043
  "label": "Machine-readable B2 key scope checklist",
1044
  "present": true,
1045
  "bytes": 8235,
1046
+ "sha256": "b72f6e8b2cc55e1fb08b62adddae0d6b99e365fda32e81c645f56edc09892736"
1047
  },
1048
  {
1049
  "id": "b2_key_scope_checklist_md",
 
1098
  "path": "docs/assets/live-credential-handoff.json",
1099
  "label": "Machine-readable live credential handoff",
1100
  "present": true,
1101
+ "bytes": 4499,
1102
+ "sha256": "b862543b787de78a63ed4d290441d766f1dd050777ed8039309c3e45000bca0c"
1103
  },
1104
  {
1105
  "id": "live_env_handoff_md",
1106
  "path": "docs/assets/live-credential-handoff.md",
1107
  "label": "Human-readable live credential handoff",
1108
  "present": true,
1109
+ "bytes": 2167,
1110
+ "sha256": "dd631bc9450e50e56b6560d46e6f75066ccd5a6f1935d656e157361ce3568125"
1111
  },
1112
  {
1113
  "id": "final_env_wizard",
 
1131
  "label": "Machine-readable post-credential live proof plan",
1132
  "present": true,
1133
  "bytes": 8435,
1134
+ "sha256": "58391cf9121b1711a67a005aa8f81c828cdb608f082b7fe412a5c6ee7778f232"
1135
  },
1136
  {
1137
  "id": "post_credential_live_proof_md",
 
1139
  "label": "Human-readable post-credential live proof plan",
1140
  "present": true,
1141
  "bytes": 2780,
1142
+ "sha256": "919c0e75c22a559c1fa6977ff95d327851e798399b2ce8cb47717f173fbff0a9"
1143
  },
1144
  {
1145
  "id": "public_claim_lint",
 
1218
  "path": "tasks.json",
1219
  "label": "Machine-readable task board",
1220
  "present": true,
1221
+ "bytes": 72989,
1222
+ "sha256": "74f1d6a55d1ee436747062ad0440aa4c780a41032ea628a0f3bebcb79d2f4919"
1223
  },
1224
  {
1225
  "id": "local_ui_smoke",
docs/assets/submission-bundle-manifest.md CHANGED
@@ -1,6 +1,6 @@
1
  # ProofFrame Submission Bundle
2
 
3
- Created: `2026-06-30T10:37:46Z`
4
  Repository: https://github.com/adjcjh777/backblaze-proofframe
5
  Public mock demo: https://adjcjh-backblaze-proofframe.hf.space/?judge=1
6
  Devpost packet mode: `pre_live_safe`
@@ -9,7 +9,7 @@ Final gate ready: `false`
9
 
10
  ## Current Gate
11
 
12
- - Tasks: 1 done / 6 required; 2 doing, 0 blocked, 3 todo.
13
  - Live evidence: `missing`
14
  - Devpost copy packet: `pre_live_packet_pending`
15
  - Final reports: `incomplete`
@@ -17,11 +17,11 @@ Final gate ready: `false`
17
 
18
  ## Next Actions
19
 
20
- - Run a live Backblaze B2 asset and manifest proof.
21
  - Run a live Genblaze generation proof and capture provider metadata.
22
  - Run the final submission audit after live proofs are captured.
23
  - Run the final secret scan before recording or submitting.
24
  - Submit the Devpost project after every preceding gate is done.
 
25
 
26
  ## Artifacts
27
 
@@ -38,17 +38,17 @@ Final gate ready: `false`
38
  - `docs/assets/devpost-submission-packet.json` (6270 bytes, sha256 `92b06cc47f68c410...`) - Machine-readable Devpost copy
39
  - `docs/assets/devpost-submission-packet.md` (5159 bytes, sha256 `00e03e34b62dfdfc...`) - Human-readable Devpost copy
40
  - `scripts/devpost_event_snapshot.py` (19728 bytes, sha256 `1389e03af0d481ea...`) - Official Devpost event snapshot checker
41
- - `docs/assets/devpost-event-snapshot.json` (2492 bytes, sha256 `626886a6fcee6199...`) - Machine-readable Devpost event snapshot
42
- - `docs/assets/devpost-event-snapshot.md` (1443 bytes, sha256 `b0389eded1537669...`) - Human-readable Devpost event snapshot
43
  - `scripts/agent_handoff_check.py` (14559 bytes, sha256 `3ef180b6a92eb987...`) - Agent Bus and Codex handoff path checker
44
- - `docs/assets/agent-handoff-report.json` (2253 bytes, sha256 `87711b3b8a5b1515...`) - Machine-readable Agent handoff report
45
- - `docs/assets/agent-handoff-report.md` (1571 bytes, sha256 `b64f0c7769d5867c...`) - Human-readable Agent handoff report
46
  - `scripts/public_space_sync.py` (84964 bytes, sha256 `52280330d9e7605b...`) - Public Hugging Face Space sync verifier
47
- - `docs/assets/public-space-sync-report.json` (20606 bytes, sha256 `e315ee991f39586e...`) - Machine-readable public Space sync report
48
- - `docs/assets/public-space-sync-report.md` (8673 bytes, sha256 `68fb795359bcfd69...`) - Human-readable public Space sync report
49
  - `scripts/public_space_upload.py` (12920 bytes, sha256 `38e4c3e665478e0b...`) - No-secret public Hugging Face Space upload helper
50
- - `docs/assets/public-space-upload-report.json` (4150 bytes, sha256 `588c3fb8d14733f4...`) - Machine-readable public Space upload report
51
- - `docs/assets/public-space-upload-report.md` (1372 bytes, sha256 `0b35af876a813c9c...`) - Human-readable public Space upload report
52
  - `scripts/public_demo_screenshot.py` (8926 bytes, sha256 `3eb5b0a003e383dd...`) - Public judge-mode screenshot verifier
53
  - `docs/assets/public-demo-screenshot-report.json` (2421 bytes, sha256 `e8ce08735a86a920...`) - Machine-readable public screenshot report
54
  - `docs/assets/public-demo-screenshot-report.md` (1418 bytes, sha256 `dce44c3bc2188131...`) - Human-readable public screenshot report
@@ -96,10 +96,10 @@ Final gate ready: `false`
96
  - `docs/assets/award-readiness-report.json` (11377 bytes, sha256 `66417f6e0c2a15d9...`) - Machine-readable award readiness report
97
  - `docs/assets/award-readiness-report.md` (4390 bytes, sha256 `5be57ca5d9cab53d...`) - Human-readable award readiness report
98
  - `scripts/final_submission_control.py` (32644 bytes, sha256 `6514cbdf2bfe8998...`) - Final submission control tower
99
- - `docs/assets/final-submission-control.json` (24359 bytes, sha256 `d2cf3949ba984a25...`) - Machine-readable final control report
100
- - `docs/assets/final-submission-control.md` (7087 bytes, sha256 `04a3aa516b2281bf...`) - Human-readable final control report
101
  - `scripts/final_closeout_status.py` (19027 bytes, sha256 `fef94acd01449141...`) - No-secret final closeout status report
102
- - `docs/assets/final-closeout-status.json` (12592 bytes, sha256 `ad81b91c1035a283...`) - Machine-readable final closeout status
103
  - `docs/assets/final-closeout-status.md` (2467 bytes, sha256 `218ef848c482db51...`) - Human-readable final closeout status
104
  - `scripts/final_operator_brief.py` (15912 bytes, sha256 `1e01afa36b48d9b8...`) - No-secret final operator brief
105
  - `docs/assets/final-operator-brief.json` (10142 bytes, sha256 `4fb10abaa1f654cf...`) - Machine-readable final operator brief
@@ -111,8 +111,8 @@ Final gate ready: `false`
111
  - `docs/assets/final-rehearsal-checklist.json` (17103 bytes, sha256 `ae398d43c900e40f...`) - Machine-readable final rehearsal checklist
112
  - `docs/assets/final-rehearsal-checklist.md` (7404 bytes, sha256 `026e07a2a99bf616...`) - Human-readable final rehearsal checklist
113
  - `scripts/submission_audit.py` (20684 bytes, sha256 `0f9a378c203bf7b6...`) - Pre-submit audit gate
114
- - `docs/assets/submission-audit-report.json` (5925 bytes, sha256 `cf1121ff24b443e8...`) - Machine-readable submission audit report
115
- - `docs/assets/submission-audit-report.md` (4459 bytes, sha256 `dd3ed9a5c89591bf...`) - Human-readable submission audit report
116
  - `scripts/devpost_submission_receipt.py` (9209 bytes, sha256 `76c55e8ff1aeaa52...`) - Public-safe Devpost submission receipt generator
117
  - `docs/assets/devpost-submission-receipt.json` (1298 bytes, sha256 `bf646cf968665c8c...`) - Machine-readable Devpost submission receipt
118
  - `docs/assets/devpost-submission-receipt.md` (996 bytes, sha256 `af2fa18349d5c017...`) - Human-readable Devpost submission receipt
@@ -121,24 +121,24 @@ Final gate ready: `false`
121
  - `docs/verification.md` (12499 bytes, sha256 `c92fd26c877d5c5f...`) - Local, CI, Docker, and live proof runbook
122
  - `.env.final.example` (363 bytes, sha256 `fb5fad4f14e2b0ad...`) - Redacted final B2 plus Genblaze env template
123
  - `scripts/secret_scan.py` (11105 bytes, sha256 `02aec3a4a6e9fd47...`) - Final secret scanner
124
- - `docs/assets/secret-scan-report.json` (11871 bytes, sha256 `04215217a3a86930...`) - Machine-readable secret scan report
125
- - `docs/assets/secret-scan-report.md` (846 bytes, sha256 `4f93112233868372...`) - Human-readable secret scan report
126
  - `docs/assets/b2-live-setup.json` (719 bytes, sha256 `a377923f48e112b1...`) - Non-secret B2 bucket setup record
127
  - `docs/assets/b2-live-setup.md` (864 bytes, sha256 `863b2a02e3d2824f...`) - Human-readable B2 bucket setup record
128
  - `scripts/b2_key_scope_checklist.py` (17240 bytes, sha256 `bb1e6140f10aa3ac...`) - No-secret Backblaze B2 application key scope checklist
129
- - `docs/assets/b2-key-scope-checklist.json` (8235 bytes, sha256 `bd2b9e0e10706fe7...`) - Machine-readable B2 key scope checklist
130
  - `docs/assets/b2-key-scope-checklist.md` (4527 bytes, sha256 `2fa660a7e0e19d0e...`) - Human-readable B2 key scope checklist
131
  - `scripts/genblaze_contract_check.py` (12455 bytes, sha256 `58bf94bc7d994415...`) - No-secret Genblaze/B2 SDK contract checker
132
  - `docs/assets/genblaze-contract-report.json` (5919 bytes, sha256 `0e30a126a206f946...`) - Machine-readable Genblaze SDK contract report
133
  - `docs/assets/genblaze-contract-report.md` (3166 bytes, sha256 `6bb4bdb7c7a39915...`) - Human-readable Genblaze SDK contract report
134
  - `scripts/run_b2_live_proof.py` (5781 bytes, sha256 `9678c0292a70cc0b...`) - One-command B2 storage proof runner
135
  - `scripts/live_env_handoff.py` (9451 bytes, sha256 `39c8de0b58c132c3...`) - Redacted live credential handoff gate
136
- - `docs/assets/live-credential-handoff.json` (4548 bytes, sha256 `08b0b09e257f6253...`) - Machine-readable live credential handoff
137
- - `docs/assets/live-credential-handoff.md` (2261 bytes, sha256 `17742c751ea63313...`) - Human-readable live credential handoff
138
  - `scripts/final_env_wizard.py` (18690 bytes, sha256 `0fd664973da43311...`) - Local final credential env wizard
139
  - `scripts/post_credential_live_proof.py` (17600 bytes, sha256 `244d2ecd9bb2f791...`) - Post-credential live proof sequence runner
140
- - `docs/assets/post-credential-live-proof-plan.json` (8435 bytes, sha256 `30c716c29303c65a...`) - Machine-readable post-credential live proof plan
141
- - `docs/assets/post-credential-live-proof-plan.md` (2780 bytes, sha256 `81ae854b8b7294a4...`) - Human-readable post-credential live proof plan
142
  - `scripts/claim_lint.py` (5190 bytes, sha256 `d8e9f53dfee772a1...`) - Fail-closed public claim lint
143
  - `scripts/demo_readiness.py` (8661 bytes, sha256 `d38ad138a2ca0d78...`) - Demo recording readiness gate
144
  - `docs/assets/demo-readiness-report.json` (3893 bytes, sha256 `ebd13ea05535dba2...`) - Machine-readable demo readiness report
@@ -148,7 +148,7 @@ Final gate ready: `false`
148
  - `docs/assets/recording-assets.md` (3867 bytes, sha256 `e3d2ef5dd86dfe33...`) - Human-readable recording asset report
149
  - `scripts/run_final_live_proof.py` (5814 bytes, sha256 `c6b9dc2fc9d7c670...`) - One-command final B2 plus Genblaze proof runner
150
  - `docs/submission.md` (4000 bytes, sha256 `b702417f1345fe39...`) - Registration and submission plan
151
- - `tasks.json` (72478 bytes, sha256 `76c2bf237562c2ec...`) - Machine-readable task board
152
  - `docs/assets/proofframe-local-ui-smoke.png` (364927 bytes, sha256 `cca671ad38bda4dc...`) - Local UI screenshot
153
  - `docs/assets/proofframe-review-console-smoke.png` (343618 bytes, sha256 `30620a33e3c7ab28...`) - Review console screenshot
154
  - `docs/assets/proofframe-hf-public-smoke.png` (741074 bytes, sha256 `5d6f68f7a4a2fdee...`) - Public mock demo screenshot
 
1
  # ProofFrame Submission Bundle
2
 
3
+ Created: `2026-07-01T11:26:25Z`
4
  Repository: https://github.com/adjcjh777/backblaze-proofframe
5
  Public mock demo: https://adjcjh-backblaze-proofframe.hf.space/?judge=1
6
  Devpost packet mode: `pre_live_safe`
 
9
 
10
  ## Current Gate
11
 
12
+ - Tasks: 2 done / 6 required; 1 doing, 0 blocked, 3 todo.
13
  - Live evidence: `missing`
14
  - Devpost copy packet: `pre_live_packet_pending`
15
  - Final reports: `incomplete`
 
17
 
18
  ## Next Actions
19
 
 
20
  - Run a live Genblaze generation proof and capture provider metadata.
21
  - Run the final submission audit after live proofs are captured.
22
  - Run the final secret scan before recording or submitting.
23
  - Submit the Devpost project after every preceding gate is done.
24
+ - Capture final live proof evidence JSON.
25
 
26
  ## Artifacts
27
 
 
38
  - `docs/assets/devpost-submission-packet.json` (6270 bytes, sha256 `92b06cc47f68c410...`) - Machine-readable Devpost copy
39
  - `docs/assets/devpost-submission-packet.md` (5159 bytes, sha256 `00e03e34b62dfdfc...`) - Human-readable Devpost copy
40
  - `scripts/devpost_event_snapshot.py` (19728 bytes, sha256 `1389e03af0d481ea...`) - Official Devpost event snapshot checker
41
+ - `docs/assets/devpost-event-snapshot.json` (2492 bytes, sha256 `5b7c1f2277d121b8...`) - Machine-readable Devpost event snapshot
42
+ - `docs/assets/devpost-event-snapshot.md` (1443 bytes, sha256 `cc2e49b18ae1776d...`) - Human-readable Devpost event snapshot
43
  - `scripts/agent_handoff_check.py` (14559 bytes, sha256 `3ef180b6a92eb987...`) - Agent Bus and Codex handoff path checker
44
+ - `docs/assets/agent-handoff-report.json` (2253 bytes, sha256 `d4912010b69b8a18...`) - Machine-readable Agent handoff report
45
+ - `docs/assets/agent-handoff-report.md` (1571 bytes, sha256 `04348bf2d799f2f0...`) - Human-readable Agent handoff report
46
  - `scripts/public_space_sync.py` (84964 bytes, sha256 `52280330d9e7605b...`) - Public Hugging Face Space sync verifier
47
+ - `docs/assets/public-space-sync-report.json` (20606 bytes, sha256 `ad473ba938336977...`) - Machine-readable public Space sync report
48
+ - `docs/assets/public-space-sync-report.md` (8673 bytes, sha256 `3ada1f215d807d27...`) - Human-readable public Space sync report
49
  - `scripts/public_space_upload.py` (12920 bytes, sha256 `38e4c3e665478e0b...`) - No-secret public Hugging Face Space upload helper
50
+ - `docs/assets/public-space-upload-report.json` (4144 bytes, sha256 `f638daa8afd5ba74...`) - Machine-readable public Space upload report
51
+ - `docs/assets/public-space-upload-report.md` (1372 bytes, sha256 `cd5387813c1d989e...`) - Human-readable public Space upload report
52
  - `scripts/public_demo_screenshot.py` (8926 bytes, sha256 `3eb5b0a003e383dd...`) - Public judge-mode screenshot verifier
53
  - `docs/assets/public-demo-screenshot-report.json` (2421 bytes, sha256 `e8ce08735a86a920...`) - Machine-readable public screenshot report
54
  - `docs/assets/public-demo-screenshot-report.md` (1418 bytes, sha256 `dce44c3bc2188131...`) - Human-readable public screenshot report
 
96
  - `docs/assets/award-readiness-report.json` (11377 bytes, sha256 `66417f6e0c2a15d9...`) - Machine-readable award readiness report
97
  - `docs/assets/award-readiness-report.md` (4390 bytes, sha256 `5be57ca5d9cab53d...`) - Human-readable award readiness report
98
  - `scripts/final_submission_control.py` (32644 bytes, sha256 `6514cbdf2bfe8998...`) - Final submission control tower
99
+ - `docs/assets/final-submission-control.json` (23805 bytes, sha256 `599c0b971d58455b...`) - Machine-readable final control report
100
+ - `docs/assets/final-submission-control.md` (7096 bytes, sha256 `580504b86d270bfe...`) - Human-readable final control report
101
  - `scripts/final_closeout_status.py` (19027 bytes, sha256 `fef94acd01449141...`) - No-secret final closeout status report
102
+ - `docs/assets/final-closeout-status.json` (12592 bytes, sha256 `532bd71fdd7485ee...`) - Machine-readable final closeout status
103
  - `docs/assets/final-closeout-status.md` (2467 bytes, sha256 `218ef848c482db51...`) - Human-readable final closeout status
104
  - `scripts/final_operator_brief.py` (15912 bytes, sha256 `1e01afa36b48d9b8...`) - No-secret final operator brief
105
  - `docs/assets/final-operator-brief.json` (10142 bytes, sha256 `4fb10abaa1f654cf...`) - Machine-readable final operator brief
 
111
  - `docs/assets/final-rehearsal-checklist.json` (17103 bytes, sha256 `ae398d43c900e40f...`) - Machine-readable final rehearsal checklist
112
  - `docs/assets/final-rehearsal-checklist.md` (7404 bytes, sha256 `026e07a2a99bf616...`) - Human-readable final rehearsal checklist
113
  - `scripts/submission_audit.py` (20684 bytes, sha256 `0f9a378c203bf7b6...`) - Pre-submit audit gate
114
+ - `docs/assets/submission-audit-report.json` (5759 bytes, sha256 `1abdb4af1b0c4e97...`) - Machine-readable submission audit report
115
+ - `docs/assets/submission-audit-report.md` (4362 bytes, sha256 `fe2134a30bbfb05a...`) - Human-readable submission audit report
116
  - `scripts/devpost_submission_receipt.py` (9209 bytes, sha256 `76c55e8ff1aeaa52...`) - Public-safe Devpost submission receipt generator
117
  - `docs/assets/devpost-submission-receipt.json` (1298 bytes, sha256 `bf646cf968665c8c...`) - Machine-readable Devpost submission receipt
118
  - `docs/assets/devpost-submission-receipt.md` (996 bytes, sha256 `af2fa18349d5c017...`) - Human-readable Devpost submission receipt
 
121
  - `docs/verification.md` (12499 bytes, sha256 `c92fd26c877d5c5f...`) - Local, CI, Docker, and live proof runbook
122
  - `.env.final.example` (363 bytes, sha256 `fb5fad4f14e2b0ad...`) - Redacted final B2 plus Genblaze env template
123
  - `scripts/secret_scan.py` (11105 bytes, sha256 `02aec3a4a6e9fd47...`) - Final secret scanner
124
+ - `docs/assets/secret-scan-report.json` (12005 bytes, sha256 `fa4482048de6bcc0...`) - Machine-readable secret scan report
125
+ - `docs/assets/secret-scan-report.md` (846 bytes, sha256 `d960c02de5417f75...`) - Human-readable secret scan report
126
  - `docs/assets/b2-live-setup.json` (719 bytes, sha256 `a377923f48e112b1...`) - Non-secret B2 bucket setup record
127
  - `docs/assets/b2-live-setup.md` (864 bytes, sha256 `863b2a02e3d2824f...`) - Human-readable B2 bucket setup record
128
  - `scripts/b2_key_scope_checklist.py` (17240 bytes, sha256 `bb1e6140f10aa3ac...`) - No-secret Backblaze B2 application key scope checklist
129
+ - `docs/assets/b2-key-scope-checklist.json` (8235 bytes, sha256 `b72f6e8b2cc55e1f...`) - Machine-readable B2 key scope checklist
130
  - `docs/assets/b2-key-scope-checklist.md` (4527 bytes, sha256 `2fa660a7e0e19d0e...`) - Human-readable B2 key scope checklist
131
  - `scripts/genblaze_contract_check.py` (12455 bytes, sha256 `58bf94bc7d994415...`) - No-secret Genblaze/B2 SDK contract checker
132
  - `docs/assets/genblaze-contract-report.json` (5919 bytes, sha256 `0e30a126a206f946...`) - Machine-readable Genblaze SDK contract report
133
  - `docs/assets/genblaze-contract-report.md` (3166 bytes, sha256 `6bb4bdb7c7a39915...`) - Human-readable Genblaze SDK contract report
134
  - `scripts/run_b2_live_proof.py` (5781 bytes, sha256 `9678c0292a70cc0b...`) - One-command B2 storage proof runner
135
  - `scripts/live_env_handoff.py` (9451 bytes, sha256 `39c8de0b58c132c3...`) - Redacted live credential handoff gate
136
+ - `docs/assets/live-credential-handoff.json` (4499 bytes, sha256 `b862543b787de78a...`) - Machine-readable live credential handoff
137
+ - `docs/assets/live-credential-handoff.md` (2167 bytes, sha256 `dd631bc9450e50e5...`) - Human-readable live credential handoff
138
  - `scripts/final_env_wizard.py` (18690 bytes, sha256 `0fd664973da43311...`) - Local final credential env wizard
139
  - `scripts/post_credential_live_proof.py` (17600 bytes, sha256 `244d2ecd9bb2f791...`) - Post-credential live proof sequence runner
140
+ - `docs/assets/post-credential-live-proof-plan.json` (8435 bytes, sha256 `58391cf9121b1711...`) - Machine-readable post-credential live proof plan
141
+ - `docs/assets/post-credential-live-proof-plan.md` (2780 bytes, sha256 `919c0e75c22a559c...`) - Human-readable post-credential live proof plan
142
  - `scripts/claim_lint.py` (5190 bytes, sha256 `d8e9f53dfee772a1...`) - Fail-closed public claim lint
143
  - `scripts/demo_readiness.py` (8661 bytes, sha256 `d38ad138a2ca0d78...`) - Demo recording readiness gate
144
  - `docs/assets/demo-readiness-report.json` (3893 bytes, sha256 `ebd13ea05535dba2...`) - Machine-readable demo readiness report
 
148
  - `docs/assets/recording-assets.md` (3867 bytes, sha256 `e3d2ef5dd86dfe33...`) - Human-readable recording asset report
149
  - `scripts/run_final_live_proof.py` (5814 bytes, sha256 `c6b9dc2fc9d7c670...`) - One-command final B2 plus Genblaze proof runner
150
  - `docs/submission.md` (4000 bytes, sha256 `b702417f1345fe39...`) - Registration and submission plan
151
+ - `tasks.json` (72989 bytes, sha256 `74f1d6a55d1ee436...`) - Machine-readable task board
152
  - `docs/assets/proofframe-local-ui-smoke.png` (364927 bytes, sha256 `cca671ad38bda4dc...`) - Local UI screenshot
153
  - `docs/assets/proofframe-review-console-smoke.png` (343618 bytes, sha256 `30620a33e3c7ab28...`) - Review console screenshot
154
  - `docs/assets/proofframe-hf-public-smoke.png` (741074 bytes, sha256 `5d6f68f7a4a2fdee...`) - Public mock demo screenshot
docs/todo.md CHANGED
@@ -34,6 +34,18 @@ python3 scripts/task.py doing T020 --note "Live B2 proof in progress"
34
  5. Run the final secret scan, strict form/storyboard/readiness gates, and `python scripts/submission_audit.py --strict-final`.
35
  6. Keep public claims frozen with `docs/public_claim_freeze.md` until real B2 and Genblaze evidence exists and the strict audit is green.
36
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  ## Recently Completed
38
 
39
  | Task | Result |
 
34
  5. Run the final secret scan, strict form/storyboard/readiness gates, and `python scripts/submission_audit.py --strict-final`.
35
  6. Keep public claims frozen with `docs/public_claim_freeze.md` until real B2 and Genblaze evidence exists and the strict audit is green.
36
 
37
+ ## Current Final Gate Status
38
+
39
+ Last refreshed: `2026-07-01`.
40
+
41
+ | Task | True status | Evidence |
42
+ | --- | --- | --- |
43
+ | T020 | `done` | B2 live proof passed with scoped standard key against bucket `proofframe-demo-a6b4e49` and prefix `campaigns/`; sanitized evidence is saved at `docs/assets/b2-live-proof-evidence.json`. Generation remains mock until T021. |
44
+ | T021 | `doing` | Genblaze adapter and SDK packages are ready; live proof still waits for local `GENBLAZE_API_KEY` entry. |
45
+ | T041 | `todo` | `docs/assets/submission-audit-report.json` is regenerated in `pre_submit_audit_blocked` mode with 17 findings. |
46
+ | T041A | `todo` | `docs/assets/secret-scan-report.json` is clear for the current pre-final tree; final scan remains after live proof, final public video, and Devpost artifacts exist. |
47
+ | T042 | `todo` | Official Devpost snapshot is fresh, `submission_open=true`, and observed participants are `439`; final submission waits for live proof, public video, strict audit, and receipt capture. |
48
+
49
  ## Recently Completed
50
 
51
  | Task | Result |
src/proofframe/storage.py CHANGED
@@ -24,6 +24,13 @@ def _manifest_bytes(manifest: CampaignManifest) -> bytes:
24
  return manifest.model_dump_json(indent=2).encode("utf-8")
25
 
26
 
 
 
 
 
 
 
 
27
  class LocalStorageBackend:
28
  """Filesystem storage used for tests and credential-free demos."""
29
 
@@ -90,6 +97,9 @@ class B2StorageBackend:
90
 
91
  name = "b2"
92
 
 
 
 
93
  @classmethod
94
  def from_settings(cls, settings: Settings) -> "B2StorageBackend":
95
  settings.require_b2()
 
24
  return manifest.model_dump_json(indent=2).encode("utf-8")
25
 
26
 
27
+ def _endpoint_with_scheme(endpoint_url: str) -> str:
28
+ endpoint = endpoint_url.strip()
29
+ if endpoint and "://" not in endpoint:
30
+ return f"https://{endpoint}"
31
+ return endpoint
32
+
33
+
34
  class LocalStorageBackend:
35
  """Filesystem storage used for tests and credential-free demos."""
36
 
 
97
 
98
  name = "b2"
99
 
100
+ def __post_init__(self) -> None:
101
+ self.endpoint_url = _endpoint_with_scheme(self.endpoint_url)
102
+
103
  @classmethod
104
  def from_settings(cls, settings: Settings) -> "B2StorageBackend":
105
  settings.require_b2()
tasks.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "project": "ProofFrame",
3
- "updated_at": "2026-06-30T10:34:17Z",
4
  "tasks": [
5
  {
6
  "id": "T001",
@@ -115,9 +115,9 @@
115
  "title": "Integrate Backblaze B2-compatible storage",
116
  "phase": "P2 Integrations",
117
  "owner": "executor",
118
- "status": "doing",
119
  "done_criteria": "B2 backend stores an asset and manifest using env-only credentials.",
120
- "notes": "B2 S3-compatible backend implemented with fake-client tests; Backblaze account registered and private bucket proofframe-demo-a6b4e49 created with endpoint s3.us-west-004.backblazeb2.com; scoped application key form is prepared but key creation/live verification still requires explicit confirmation."
121
  },
122
  {
123
  "id": "T021",
@@ -126,7 +126,7 @@
126
  "owner": "executor",
127
  "status": "doing",
128
  "done_criteria": "Generation adapter records provider/model metadata and fails closed without config.",
129
- "notes": "Genblaze/GMICloud image provider adapter implemented with official Pipeline API; live credentials/package run still required for final public claim."
130
  },
131
  {
132
  "id": "T084",
@@ -675,7 +675,7 @@
675
  "owner": "reviewer",
676
  "status": "todo",
677
  "done_criteria": "Reviewer signs off on rules, secrets, claims, and public artifacts.",
678
- "notes": ""
679
  },
680
  {
681
  "id": "T041A",
@@ -684,7 +684,7 @@
684
  "owner": "reviewer",
685
  "status": "todo",
686
  "done_criteria": "Secret scan covers repo, docs, screenshots, exported manifests, logs, and demo evidence before submission.",
687
- "notes": "No B2, Genblaze, provider, Devpost, cookie, signed URL, or test account secret may be committed or shown."
688
  },
689
  {
690
  "id": "T041B",
@@ -711,7 +711,7 @@
711
  "owner": "controller",
712
  "status": "todo",
713
  "done_criteria": "Devpost submission is accepted before 2026-08-04 05:00 Asia/Shanghai.",
714
- "notes": ""
715
  },
716
  {
717
  "id": "T042A",
 
1
  {
2
  "project": "ProofFrame",
3
+ "updated_at": "2026-07-01T11:25:32Z",
4
  "tasks": [
5
  {
6
  "id": "T001",
 
115
  "title": "Integrate Backblaze B2-compatible storage",
116
  "phase": "P2 Integrations",
117
  "owner": "executor",
118
+ "status": "done",
119
  "done_criteria": "B2 backend stores an asset and manifest using env-only credentials.",
120
+ "notes": "B2 live proof passed with scoped standard key against bucket proofframe-demo-a6b4e49 and prefix campaigns/; sanitized evidence saved at docs/assets/b2-live-proof-evidence.json. Generation remains mock until T021."
121
  },
122
  {
123
  "id": "T021",
 
126
  "owner": "executor",
127
  "status": "doing",
128
  "done_criteria": "Generation adapter records provider/model metadata and fails closed without config.",
129
+ "notes": "Genblaze/GMI adapter and SDK packages remain ready; 2026-07-01 final proof preflight confirms model and genblaze_core/genblaze_gmicloud/genblaze_s3 are available, but live proof is still blocked by missing local GENBLAZE_API_KEY."
130
  },
131
  {
132
  "id": "T084",
 
675
  "owner": "reviewer",
676
  "status": "todo",
677
  "done_criteria": "Reviewer signs off on rules, secrets, claims, and public artifacts.",
678
+ "notes": "2026-07-01 submission audit report regenerated in pre_submit_audit_blocked mode with 17 findings; final audit cannot pass until B2/Genblaze live evidence, final video, final secret scan, and Devpost receipt exist."
679
  },
680
  {
681
  "id": "T041A",
 
684
  "owner": "reviewer",
685
  "status": "todo",
686
  "done_criteria": "Secret scan covers repo, docs, screenshots, exported manifests, logs, and demo evidence before submission.",
687
+ "notes": "2026-07-01 pre-final secret scan report is clear and committed; final secret scan remains todo after live proof, final public video, and Devpost submission artifacts are generated."
688
  },
689
  {
690
  "id": "T041B",
 
711
  "owner": "controller",
712
  "status": "todo",
713
  "done_criteria": "Devpost submission is accepted before 2026-08-04 05:00 Asia/Shanghai.",
714
+ "notes": "Devpost submission remains todo; official event snapshot refreshed 2026-07-01 with submission_open=true and observed participants=439, but final submission must wait for live proof, public video, strict audit, and receipt capture."
715
  },
716
  {
717
  "id": "T042A",
tests/test_integrations.py CHANGED
@@ -162,3 +162,15 @@ def test_b2_backend_puts_media_and_manifest_with_fake_client():
162
  assert len(fake.puts) == 2
163
  assert fake.puts[0]["Bucket"] == "proof-bucket"
164
  assert fake.puts[0]["Metadata"]["sha256"] == stored_media.sha256
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  assert len(fake.puts) == 2
163
  assert fake.puts[0]["Bucket"] == "proof-bucket"
164
  assert fake.puts[0]["Metadata"]["sha256"] == stored_media.sha256
165
+
166
+
167
+ def test_b2_backend_normalizes_endpoint_without_scheme():
168
+ backend = B2StorageBackend(
169
+ endpoint_url="s3.us-west-004.backblazeb2.com",
170
+ bucket="proof-bucket",
171
+ key_id="key-id",
172
+ application_key="application-key",
173
+ client=FakeS3Client(),
174
+ )
175
+
176
+ assert backend.endpoint_url == "https://s3.us-west-004.backblazeb2.com"