ADJCJH commited on
Commit
1ec221d
·
verified ·
1 Parent(s): 931c763

Sync no-secret credential handoff f1d71c2

Browse files
docs/assets/devpost-submission-preview.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "schema": "proofframe.devpost_submission_preview.v1",
3
- "created_at": "2026-06-29T14:05:09Z",
4
  "mode": "pre_live_preview_ready",
5
  "ok": true,
6
  "safe_to_share": true,
@@ -68,7 +68,7 @@
68
  {
69
  "id": "credential_handoff",
70
  "label": "Live credential handoff is ready",
71
- "detail": "Credential handoff mode is missing_live_env; missing ids: storage_backend_mode, generation_backend_mode, b2_endpoint, b2_bucket, b2_key_id, b2_application_key, genblaze_api_key, genblaze_image_model.",
72
  "evidence": "docs/assets/live-credential-handoff.json"
73
  },
74
  {
 
1
  {
2
  "schema": "proofframe.devpost_submission_preview.v1",
3
+ "created_at": "2026-06-30T04:37:54Z",
4
  "mode": "pre_live_preview_ready",
5
  "ok": true,
6
  "safe_to_share": true,
 
68
  {
69
  "id": "credential_handoff",
70
  "label": "Live credential handoff is ready",
71
+ "detail": "Credential handoff mode is missing_live_env; missing ids: b2_key_id, b2_application_key, genblaze_api_key.",
72
  "evidence": "docs/assets/live-credential-handoff.json"
73
  },
74
  {
docs/assets/devpost-submission-preview.md CHANGED
@@ -59,7 +59,7 @@ ProofFrame includes a Genblaze/GMICloud provider adapter built around the offici
59
  - `devpost_submission_checklist`: Final Devpost web submission checklist is ready - Devpost submission checklist mode is pre_submit_blocked; safe_to_submit is False.
60
  - `b2_live_proof`: live Backblaze B2 proof - T020 is doing; B2 evidence status is missing; final evidence status is missing.
61
  - `genblaze_live_proof`: live Genblaze proof - T021 is doing; final evidence status is missing.
62
- - `credential_handoff`: Live credential handoff is ready - Credential handoff mode is missing_live_env; missing ids: storage_backend_mode, generation_backend_mode, b2_endpoint, b2_bucket, b2_key_id, b2_application_key, genblaze_api_key, genblaze_image_model.
63
  - `public_video`: final public video - Storyboard mode is mock_storyboard_ready; public video ready is False.
64
  - `public_video_check`: public video URL check - Public video check mode is pending_video_url; safe_to_submit is False.
65
  - `final_recording`: Final recording gate is ready - Demo readiness mode is pre_live_mock_ready; final recording ready is False.
 
59
  - `devpost_submission_checklist`: Final Devpost web submission checklist is ready - Devpost submission checklist mode is pre_submit_blocked; safe_to_submit is False.
60
  - `b2_live_proof`: live Backblaze B2 proof - T020 is doing; B2 evidence status is missing; final evidence status is missing.
61
  - `genblaze_live_proof`: live Genblaze proof - T021 is doing; final evidence status is missing.
62
+ - `credential_handoff`: Live credential handoff is ready - Credential handoff mode is missing_live_env; missing ids: b2_key_id, b2_application_key, genblaze_api_key.
63
  - `public_video`: final public video - Storyboard mode is mock_storyboard_ready; public video ready is False.
64
  - `public_video_check`: public video URL check - Public video check mode is pending_video_url; safe_to_submit is False.
65
  - `final_recording`: Final recording gate is ready - Demo readiness mode is pre_live_mock_ready; final recording ready is False.
docs/assets/final-closeout-status.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "schema": "proofframe.final_closeout_status.v1",
3
- "created_at": "2026-06-30T04:04:26Z",
4
  "ok": true,
5
  "mode": "waiting_for_credentials",
6
  "phase": "credential_entry",
@@ -34,6 +34,7 @@
34
  "public_video_ready": null,
35
  "project_url": null,
36
  "missing_artifacts": null,
 
37
  "findings_count": 0
38
  },
39
  "credential_handoff": {
@@ -56,6 +57,11 @@
56
  "public_video_ready": null,
57
  "project_url": null,
58
  "missing_artifacts": null,
 
 
 
 
 
59
  "findings_count": 0
60
  },
61
  "b2_evidence": {
@@ -98,6 +104,7 @@
98
  "public_video_ready": null,
99
  "project_url": null,
100
  "missing_artifacts": null,
 
101
  "findings_count": 0
102
  },
103
  "video_publish_kit": {
@@ -120,6 +127,7 @@
120
  "public_video_ready": null,
121
  "project_url": null,
122
  "missing_artifacts": null,
 
123
  "findings_count": 0
124
  },
125
  "devpost_checklist": {
@@ -142,6 +150,7 @@
142
  "public_video_ready": null,
143
  "project_url": null,
144
  "missing_artifacts": null,
 
145
  "findings_count": 0
146
  },
147
  "devpost_preview": {
@@ -164,6 +173,7 @@
164
  "public_video_ready": null,
165
  "project_url": null,
166
  "missing_artifacts": null,
 
167
  "findings_count": 0
168
  },
169
  "devpost_receipt": {
@@ -186,6 +196,7 @@
186
  "public_video_ready": null,
187
  "project_url": null,
188
  "missing_artifacts": null,
 
189
  "findings_count": 3
190
  },
191
  "secret_scan": {
@@ -208,6 +219,7 @@
208
  "public_video_ready": null,
209
  "project_url": null,
210
  "missing_artifacts": null,
 
211
  "findings_count": 0
212
  },
213
  "submission_audit": {
@@ -230,6 +242,7 @@
230
  "public_video_ready": null,
231
  "project_url": null,
232
  "missing_artifacts": null,
 
233
  "findings_count": 17
234
  },
235
  "submission_bundle": {
@@ -252,6 +265,7 @@
252
  "public_video_ready": null,
253
  "project_url": null,
254
  "missing_artifacts": [],
 
255
  "findings_count": 0
256
  },
257
  "public_space_sync": {
@@ -274,6 +288,7 @@
274
  "public_video_ready": null,
275
  "project_url": null,
276
  "missing_artifacts": null,
 
277
  "findings_count": 0
278
  }
279
  },
@@ -296,7 +311,7 @@
296
  "id": "credential_handoff",
297
  "label": "Live credential handoff is ready",
298
  "ok": false,
299
- "detail": "Credential handoff mode is missing_live_env.",
300
  "evidence": "docs/assets/live-credential-handoff.json"
301
  },
302
  {
 
1
  {
2
  "schema": "proofframe.final_closeout_status.v1",
3
+ "created_at": "2026-06-30T04:37:42Z",
4
  "ok": true,
5
  "mode": "waiting_for_credentials",
6
  "phase": "credential_entry",
 
34
  "public_video_ready": null,
35
  "project_url": null,
36
  "missing_artifacts": null,
37
+ "missing_ids": null,
38
  "findings_count": 0
39
  },
40
  "credential_handoff": {
 
57
  "public_video_ready": null,
58
  "project_url": null,
59
  "missing_artifacts": null,
60
+ "missing_ids": [
61
+ "b2_key_id",
62
+ "b2_application_key",
63
+ "genblaze_api_key"
64
+ ],
65
  "findings_count": 0
66
  },
67
  "b2_evidence": {
 
104
  "public_video_ready": null,
105
  "project_url": null,
106
  "missing_artifacts": null,
107
+ "missing_ids": null,
108
  "findings_count": 0
109
  },
110
  "video_publish_kit": {
 
127
  "public_video_ready": null,
128
  "project_url": null,
129
  "missing_artifacts": null,
130
+ "missing_ids": null,
131
  "findings_count": 0
132
  },
133
  "devpost_checklist": {
 
150
  "public_video_ready": null,
151
  "project_url": null,
152
  "missing_artifacts": null,
153
+ "missing_ids": null,
154
  "findings_count": 0
155
  },
156
  "devpost_preview": {
 
173
  "public_video_ready": null,
174
  "project_url": null,
175
  "missing_artifacts": null,
176
+ "missing_ids": null,
177
  "findings_count": 0
178
  },
179
  "devpost_receipt": {
 
196
  "public_video_ready": null,
197
  "project_url": null,
198
  "missing_artifacts": null,
199
+ "missing_ids": null,
200
  "findings_count": 3
201
  },
202
  "secret_scan": {
 
219
  "public_video_ready": null,
220
  "project_url": null,
221
  "missing_artifacts": null,
222
+ "missing_ids": null,
223
  "findings_count": 0
224
  },
225
  "submission_audit": {
 
242
  "public_video_ready": null,
243
  "project_url": null,
244
  "missing_artifacts": null,
245
+ "missing_ids": null,
246
  "findings_count": 17
247
  },
248
  "submission_bundle": {
 
265
  "public_video_ready": null,
266
  "project_url": null,
267
  "missing_artifacts": [],
268
+ "missing_ids": null,
269
  "findings_count": 0
270
  },
271
  "public_space_sync": {
 
288
  "public_video_ready": null,
289
  "project_url": null,
290
  "missing_artifacts": null,
291
+ "missing_ids": null,
292
  "findings_count": 0
293
  }
294
  },
 
311
  "id": "credential_handoff",
312
  "label": "Live credential handoff is ready",
313
  "ok": false,
314
+ "detail": "Credential handoff mode is missing_live_env; missing ids: b2_key_id, b2_application_key, genblaze_api_key.",
315
  "evidence": "docs/assets/live-credential-handoff.json"
316
  },
317
  {
docs/assets/final-closeout-status.md CHANGED
@@ -14,7 +14,7 @@ This closeout report stores only task statuses, report metadata, public URLs, an
14
  | --- | --- | --- | --- |
15
  | OK | `report_inventory` | All standing control reports are present; live evidence files may be absent before credentials. | `docs/assets/*.json` |
16
  | OK | `ci_and_public_demo` | Public Space sync mode is public_space_synced; ok is True. | `docs/assets/public-space-sync-report.json` |
17
- | BLOCKED | `credential_handoff` | Credential handoff mode is missing_live_env. | `docs/assets/live-credential-handoff.json` |
18
  | BLOCKED | `b2_live_proof` | T020 is doing; evidence present is False. | `docs/assets/b2-live-proof-evidence.json` |
19
  | BLOCKED | `genblaze_live_proof` | T021 is doing; final evidence present is False. | `docs/assets/final-live-proof-evidence.json` |
20
  | BLOCKED | `public_video` | Public video mode is pending_video_url; video kit final_video_ready is False. | `docs/assets/public-video-check.json` |
 
14
  | --- | --- | --- | --- |
15
  | OK | `report_inventory` | All standing control reports are present; live evidence files may be absent before credentials. | `docs/assets/*.json` |
16
  | OK | `ci_and_public_demo` | Public Space sync mode is public_space_synced; ok is True. | `docs/assets/public-space-sync-report.json` |
17
+ | BLOCKED | `credential_handoff` | Credential handoff mode is missing_live_env; missing ids: b2_key_id, b2_application_key, genblaze_api_key. | `docs/assets/live-credential-handoff.json` |
18
  | BLOCKED | `b2_live_proof` | T020 is doing; evidence present is False. | `docs/assets/b2-live-proof-evidence.json` |
19
  | BLOCKED | `genblaze_live_proof` | T021 is doing; final evidence present is False. | `docs/assets/final-live-proof-evidence.json` |
20
  | BLOCKED | `public_video` | Public video mode is pending_video_url; video kit final_video_ready is False. | `docs/assets/public-video-check.json` |
docs/assets/final-launch-plan.json CHANGED
@@ -1,15 +1,15 @@
1
  {
2
  "schema": "proofframe.final_launch_plan.v1",
3
- "created_at": "2026-06-29T12:24:34Z",
4
  "ok": false,
5
- "mode": "blocked_at_credential_entry",
6
  "repo_root": "/Users/junhaocheng/working-dir/ai-competitions/backblaze-proofframe",
7
  "current_phase": "credential_entry",
8
  "summary": {
9
  "total": 6,
10
  "done": 0,
11
- "ready": 0,
12
- "blocked": 6
13
  },
14
  "task_statuses": {
15
  "T020": "doing",
@@ -23,8 +23,8 @@
23
  {
24
  "id": "credential_entry",
25
  "title": "Enter final credentials locally",
26
- "status": "blocked",
27
- "detail": "Credential handoff is missing unexpected setup values; regenerate .env.final.local prefill.",
28
  "command": "python scripts/final_env_wizard.py --output .env.final.local --missing-only --force",
29
  "expected_artifacts": [
30
  "docs/assets/b2-key-scope-checklist.md reviewed before key creation",
@@ -124,7 +124,7 @@
124
  }
125
  ],
126
  "next_command": "python scripts/final_env_wizard.py --output .env.final.local --missing-only --force",
127
- "next_detail": "Credential handoff is missing unexpected setup values; regenerate .env.final.local prefill.",
128
  "safety_policy": {
129
  "no_secret_values_in_report": true,
130
  "never_commit": [
 
1
  {
2
  "schema": "proofframe.final_launch_plan.v1",
3
+ "created_at": "2026-06-30T04:37:54Z",
4
  "ok": false,
5
+ "mode": "ready_for_credential_entry",
6
  "repo_root": "/Users/junhaocheng/working-dir/ai-competitions/backblaze-proofframe",
7
  "current_phase": "credential_entry",
8
  "summary": {
9
  "total": 6,
10
  "done": 0,
11
+ "ready": 1,
12
+ "blocked": 5
13
  },
14
  "task_statuses": {
15
  "T020": "doing",
 
23
  {
24
  "id": "credential_entry",
25
  "title": "Enter final credentials locally",
26
+ "status": "ready",
27
+ "detail": "Only expected secret ids are missing; operator can enter them locally.",
28
  "command": "python scripts/final_env_wizard.py --output .env.final.local --missing-only --force",
29
  "expected_artifacts": [
30
  "docs/assets/b2-key-scope-checklist.md reviewed before key creation",
 
124
  }
125
  ],
126
  "next_command": "python scripts/final_env_wizard.py --output .env.final.local --missing-only --force",
127
+ "next_detail": "Only expected secret ids are missing; operator can enter them locally.",
128
  "safety_policy": {
129
  "no_secret_values_in_report": true,
130
  "never_commit": [
docs/assets/final-launch-plan.md CHANGED
@@ -1,22 +1,22 @@
1
  # ProofFrame Final Launch Plan
2
 
3
- Mode: `blocked_at_credential_entry`
4
  Current phase: `credential_entry`
5
  Complete: `false`
6
- Progress: `0 / 6` done; `0` ready, `6` blocked.
7
 
8
  ## Next Command
9
 
10
  ```bash
11
  python scripts/final_env_wizard.py --output .env.final.local --missing-only --force
12
  ```
13
- Credential handoff is missing unexpected setup values; regenerate .env.final.local prefill.
14
 
15
  ## Phases
16
 
17
  ### credential_entry - Enter final credentials locally
18
- - Status: `blocked`
19
- - Detail: Credential handoff is missing unexpected setup values; regenerate .env.final.local prefill.
20
  - Command:
21
  ```bash
22
  python scripts/final_env_wizard.py --output .env.final.local --missing-only --force
 
1
  # ProofFrame Final Launch Plan
2
 
3
+ Mode: `ready_for_credential_entry`
4
  Current phase: `credential_entry`
5
  Complete: `false`
6
+ Progress: `0 / 6` done; `1` ready, `5` blocked.
7
 
8
  ## Next Command
9
 
10
  ```bash
11
  python scripts/final_env_wizard.py --output .env.final.local --missing-only --force
12
  ```
13
+ Only expected secret ids are missing; operator can enter them locally.
14
 
15
  ## Phases
16
 
17
  ### credential_entry - Enter final credentials locally
18
+ - Status: `ready`
19
+ - Detail: Only expected secret ids are missing; operator can enter them locally.
20
  - Command:
21
  ```bash
22
  python scripts/final_env_wizard.py --output .env.final.local --missing-only --force
docs/assets/final-operator-brief.json CHANGED
@@ -1,7 +1,7 @@
1
  {
2
  "schema": "proofframe.final_operator_brief.v1",
3
- "mode": "needs_operator_setup",
4
- "ready_for_secret_entry": false,
5
  "safe_to_submit": false,
6
  "task_statuses": {
7
  "T020": "doing",
@@ -30,27 +30,22 @@
30
  "present": true,
31
  "mode": "missing_live_env",
32
  "ready": false,
33
- "source": "process environment",
34
  "missing_ids": [
35
- "storage_backend_mode",
36
- "generation_backend_mode",
37
- "b2_endpoint",
38
- "b2_bucket",
39
  "b2_key_id",
40
  "b2_application_key",
41
- "genblaze_api_key",
42
- "genblaze_image_model"
43
  ],
44
- "missing_only_expected_secrets": false,
45
  "required_presence": {
46
- "storage_backend_mode": false,
47
- "generation_backend_mode": false,
48
- "b2_endpoint": false,
49
- "b2_bucket": false,
50
  "b2_key_id": false,
51
  "b2_application_key": false,
52
  "genblaze_api_key": false,
53
- "genblaze_image_model": false
54
  }
55
  },
56
  "reports": {
 
1
  {
2
  "schema": "proofframe.final_operator_brief.v1",
3
+ "mode": "credential_entry_ready",
4
+ "ready_for_secret_entry": true,
5
  "safe_to_submit": false,
6
  "task_statuses": {
7
  "T020": "doing",
 
30
  "present": true,
31
  "mode": "missing_live_env",
32
  "ready": false,
33
+ "source": ".env.final.local",
34
  "missing_ids": [
 
 
 
 
35
  "b2_key_id",
36
  "b2_application_key",
37
+ "genblaze_api_key"
 
38
  ],
39
+ "missing_only_expected_secrets": true,
40
  "required_presence": {
41
+ "storage_backend_mode": true,
42
+ "generation_backend_mode": true,
43
+ "b2_endpoint": true,
44
+ "b2_bucket": true,
45
  "b2_key_id": false,
46
  "b2_application_key": false,
47
  "genblaze_api_key": false,
48
+ "genblaze_image_model": true
49
  }
50
  },
51
  "reports": {
docs/assets/final-operator-brief.md CHANGED
@@ -1,7 +1,7 @@
1
  # ProofFrame Final Operator Brief
2
 
3
- Mode: `needs_operator_setup`
4
- Ready for secret entry: `false`
5
  Safe to submit: `false`
6
 
7
  ## Current Blockers
@@ -15,10 +15,10 @@ Safe to submit: `false`
15
 
16
  ## Credential Handoff
17
 
18
- - Source: `process environment`
19
  - Mode: `missing_live_env`
20
- - Missing ids: `storage_backend_mode, generation_backend_mode, b2_endpoint, b2_bucket, b2_key_id, b2_application_key, genblaze_api_key, genblaze_image_model`
21
- - Missing only expected secrets: `false`
22
 
23
  ## B2 Setup
24
 
 
1
  # ProofFrame Final Operator Brief
2
 
3
+ Mode: `credential_entry_ready`
4
+ Ready for secret entry: `true`
5
  Safe to submit: `false`
6
 
7
  ## Current Blockers
 
15
 
16
  ## Credential Handoff
17
 
18
+ - Source: `.env.final.local`
19
  - Mode: `missing_live_env`
20
+ - Missing ids: `b2_key_id, b2_application_key, genblaze_api_key`
21
+ - Missing only expected secrets: `true`
22
 
23
  ## B2 Setup
24
 
docs/assets/final-submission-control.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "schema": "proofframe.final_submission_control.v1",
3
- "created_at": "2026-06-29T14:05:09Z",
4
  "ok": true,
5
  "control_health_ok": true,
6
  "mode": "pre_live_control",
@@ -175,7 +175,7 @@
175
  "path": "docs/assets/final-launch-plan.json",
176
  "schema_ok": true,
177
  "schema": "proofframe.final_launch_plan.v1",
178
- "mode": "blocked_at_credential_entry",
179
  "ok": false,
180
  "score": null,
181
  "max_score": null,
@@ -188,7 +188,7 @@
188
  "public_video_ready": null,
189
  "current_phase": "credential_entry",
190
  "next_command": "python scripts/final_env_wizard.py --output .env.final.local --missing-only --force",
191
- "next_detail": "Credential handoff is missing unexpected setup values; regenerate .env.final.local prefill.",
192
  "bus_status": null,
193
  "active_role_cwd_ok": null
194
  },
@@ -340,14 +340,9 @@
340
  "mode": "missing_live_env",
341
  "ready": false,
342
  "missing_ids": [
343
- "storage_backend_mode",
344
- "generation_backend_mode",
345
- "b2_endpoint",
346
- "b2_bucket",
347
  "b2_key_id",
348
  "b2_application_key",
349
- "genblaze_api_key",
350
- "genblaze_image_model"
351
  ],
352
  "secret_policy": "Report records only variable names and presence; credential values are never printed."
353
  },
@@ -443,7 +438,7 @@
443
  "id": "final_launch_plan",
444
  "label": "Final launch plan exposes the current operator step",
445
  "ok": true,
446
- "detail": "Launch plan mode is blocked_at_credential_entry; current phase is credential_entry; next command is python scripts/final_env_wizard.py --output .env.final.local --missing-only --force.",
447
  "evidence": "docs/assets/final-launch-plan.json"
448
  },
449
  {
@@ -478,7 +473,7 @@
478
  "id": "credential_handoff",
479
  "label": "Live credential handoff is ready",
480
  "ok": false,
481
- "detail": "Credential handoff mode is missing_live_env; missing ids: storage_backend_mode, generation_backend_mode, b2_endpoint, b2_bucket, b2_key_id, b2_application_key, genblaze_api_key, genblaze_image_model.",
482
  "evidence": "docs/assets/live-credential-handoff.json"
483
  },
484
  {
@@ -557,7 +552,7 @@
557
  "id": "credential_handoff",
558
  "label": "Live credential handoff is ready",
559
  "ok": false,
560
- "detail": "Credential handoff mode is missing_live_env; missing ids: storage_backend_mode, generation_backend_mode, b2_endpoint, b2_bucket, b2_key_id, b2_application_key, genblaze_api_key, genblaze_image_model.",
561
  "evidence": "docs/assets/live-credential-handoff.json"
562
  },
563
  {
@@ -643,10 +638,10 @@
643
  "python scripts/submission_bundle.py --strict-final"
644
  ],
645
  "launch_plan": {
646
- "mode": "blocked_at_credential_entry",
647
  "current_phase": "credential_entry",
648
  "next_command": "python scripts/final_env_wizard.py --output .env.final.local --missing-only --force",
649
- "next_detail": "Credential handoff is missing unexpected setup values; regenerate .env.final.local prefill.",
650
  "path": "docs/assets/final-launch-plan.json"
651
  },
652
  "claim_boundary": "Public demo remains local/mock and pre_live_safe until final live B2 plus Genblaze proof is captured."
 
1
  {
2
  "schema": "proofframe.final_submission_control.v1",
3
+ "created_at": "2026-06-30T04:35:43Z",
4
  "ok": true,
5
  "control_health_ok": true,
6
  "mode": "pre_live_control",
 
175
  "path": "docs/assets/final-launch-plan.json",
176
  "schema_ok": true,
177
  "schema": "proofframe.final_launch_plan.v1",
178
+ "mode": "ready_for_credential_entry",
179
  "ok": false,
180
  "score": null,
181
  "max_score": null,
 
188
  "public_video_ready": null,
189
  "current_phase": "credential_entry",
190
  "next_command": "python scripts/final_env_wizard.py --output .env.final.local --missing-only --force",
191
+ "next_detail": "Only expected secret ids are missing; operator can enter them locally.",
192
  "bus_status": null,
193
  "active_role_cwd_ok": null
194
  },
 
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."
348
  },
 
438
  "id": "final_launch_plan",
439
  "label": "Final launch plan exposes the current operator step",
440
  "ok": true,
441
+ "detail": "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.",
442
  "evidence": "docs/assets/final-launch-plan.json"
443
  },
444
  {
 
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
  {
 
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
  {
 
638
  "python scripts/submission_bundle.py --strict-final"
639
  ],
640
  "launch_plan": {
641
+ "mode": "ready_for_credential_entry",
642
  "current_phase": "credential_entry",
643
  "next_command": "python scripts/final_env_wizard.py --output .env.final.local --missing-only --force",
644
+ "next_detail": "Only expected secret ids are missing; operator can enter them locally.",
645
  "path": "docs/assets/final-launch-plan.json"
646
  },
647
  "claim_boundary": "Public demo remains local/mock and pre_live_safe until final live B2 plus Genblaze proof is captured."
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-06-29T14:05:09Z`
7
  Public demo: https://adjcjh-backblaze-proofframe.hf.space/?judge=1
8
  Repository: https://github.com/adjcjh777/backblaze-proofframe
9
 
@@ -26,10 +26,10 @@ Repository: https://github.com/adjcjh777/backblaze-proofframe
26
 
27
  ## Launch Plan
28
 
29
- - Mode: `blocked_at_credential_entry`
30
  - Current phase: `credential_entry`
31
  - Next command: `python scripts/final_env_wizard.py --output .env.final.local --missing-only --force`
32
- - Detail: Credential handoff is missing unexpected setup values; regenerate .env.final.local prefill.
33
  - Source: `docs/assets/final-launch-plan.json`
34
 
35
  ## Warnings
@@ -46,12 +46,12 @@ Repository: https://github.com/adjcjh777/backblaze-proofframe
46
  | OK | Official Devpost event snapshot is fresh | Snapshot checked at 2026-06-29T11:21:01Z; submission open is True; age days is 0. | `docs/assets/devpost-event-snapshot.json` |
47
  | OK | Agent handoff metadata points at the current repo | Agent handoff mode is handoff_ready; ok is True; bus status is skipped; active role cwd ok is None. | `docs/assets/agent-handoff-report.json` |
48
  | OK | Public Space is synced to the current judge-facing demo | Public Space sync mode is public_space_synced; ok is True. | `docs/assets/public-space-sync-report.json` |
49
- | OK | Final launch plan exposes the current operator step | Launch plan mode is blocked_at_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: storage_backend_mode, generation_backend_mode, b2_endpoint, b2_bucket, b2_key_id, b2_application_key, genblaze_api_key, genblaze_image_model. | `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` |
 
3
  Mode: `pre_live_control`
4
  Control health OK: `true`
5
  Safe to submit: `false`
6
+ Created: `2026-06-30T04:35:43Z`
7
  Public demo: https://adjcjh-backblaze-proofframe.hf.space/?judge=1
8
  Repository: https://github.com/adjcjh777/backblaze-proofframe
9
 
 
26
 
27
  ## Launch Plan
28
 
29
+ - Mode: `ready_for_credential_entry`
30
  - Current phase: `credential_entry`
31
  - Next command: `python scripts/final_env_wizard.py --output .env.final.local --missing-only --force`
32
+ - Detail: Only expected secret ids are missing; operator can enter them locally.
33
  - Source: `docs/assets/final-launch-plan.json`
34
 
35
  ## Warnings
 
46
  | OK | Official Devpost event snapshot is fresh | Snapshot checked at 2026-06-29T11:21:01Z; submission open is True; age days is 0. | `docs/assets/devpost-event-snapshot.json` |
47
  | OK | Agent handoff metadata points at the current repo | Agent handoff mode is handoff_ready; ok is True; bus status is skipped; active role cwd ok is None. | `docs/assets/agent-handoff-report.json` |
48
  | OK | Public Space is synced to the current judge-facing demo | Public Space sync mode is public_space_synced; ok is True. | `docs/assets/public-space-sync-report.json` |
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` |
docs/assets/final-video-publish-kit.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "schema": "proofframe.final_video_publish_kit.v1",
3
- "created_at": "2026-06-29T13:53:29Z",
4
  "ok": true,
5
  "mode": "ready_for_final_upload",
6
  "safe_to_share": true,
 
1
  {
2
  "schema": "proofframe.final_video_publish_kit.v1",
3
+ "created_at": "2026-06-30T04:35:02Z",
4
  "ok": true,
5
  "mode": "ready_for_final_upload",
6
  "safe_to_share": true,
docs/assets/final-video-publish-kit.md CHANGED
@@ -4,7 +4,7 @@ Mode: `ready_for_final_upload`
4
  OK: `true`
5
  Safe to submit: `false`
6
  Final video ready: `false`
7
- Created: `2026-06-29T13:53:29Z`
8
 
9
  ## Upload Copy
10
 
 
4
  OK: `true`
5
  Safe to submit: `false`
6
  Final video ready: `false`
7
+ Created: `2026-06-30T04:35:02Z`
8
 
9
  ## Upload Copy
10
 
docs/assets/judge-crosswalk.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "schema": "proofframe.judge_crosswalk.v1",
3
- "created_at": "2026-06-29T12:10:33Z",
4
  "mode": "pre_live_crosswalk_ready",
5
  "ok": true,
6
  "safe_to_submit": false,
 
1
  {
2
  "schema": "proofframe.judge_crosswalk.v1",
3
+ "created_at": "2026-06-30T04:37:54Z",
4
  "mode": "pre_live_crosswalk_ready",
5
  "ok": true,
6
  "safe_to_submit": false,
docs/assets/judge-crosswalk.md CHANGED
@@ -1,6 +1,6 @@
1
  # ProofFrame Judge Crosswalk
2
 
3
- Created: `2026-06-29T12:10:33Z`
4
  Mode: `pre_live_crosswalk_ready`
5
  OK: `true`
6
  Safe to submit: `false`
 
1
  # ProofFrame Judge Crosswalk
2
 
3
+ Created: `2026-06-30T04:37:54Z`
4
  Mode: `pre_live_crosswalk_ready`
5
  OK: `true`
6
  Safe to submit: `false`
docs/assets/judge-decision-brief.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "schema": "proofframe.judge_decision_brief.v1",
3
- "created_at": "2026-06-29T13:53:29Z",
4
  "ok": true,
5
  "mode": "pre_live_decision_ready",
6
  "safe_to_share": true,
 
1
  {
2
  "schema": "proofframe.judge_decision_brief.v1",
3
+ "created_at": "2026-06-30T04:37:54Z",
4
  "ok": true,
5
  "mode": "pre_live_decision_ready",
6
  "safe_to_share": true,
docs/assets/judge-decision-brief.md CHANGED
@@ -3,7 +3,7 @@
3
  Mode: `pre_live_decision_ready`
4
  OK: `true`
5
  Safe to submit: `false`
6
- Created: `2026-06-29T13:53:29Z`
7
 
8
  ProofFrame turns generated media into auditable, approval-ready asset packets.
9
 
 
3
  Mode: `pre_live_decision_ready`
4
  OK: `true`
5
  Safe to submit: `false`
6
+ Created: `2026-06-30T04:37:54Z`
7
 
8
  ProofFrame turns generated media into auditable, approval-ready asset packets.
9
 
docs/assets/judge-evidence-index.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "schema": "proofframe.judge_evidence_index.v1",
3
- "created_at": "2026-06-29T13:53:29Z",
4
  "ok": true,
5
  "mode": "pre_live_evidence_index_ready",
6
  "safe_to_share": true,
@@ -96,7 +96,7 @@
96
  "path": "docs/assets/final-submission-control.md",
97
  "raw_url": "https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/final-submission-control.md",
98
  "present": true,
99
- "bytes": 7203
100
  },
101
  {
102
  "id": "final_closeout_status",
@@ -107,7 +107,7 @@
107
  "path": "docs/assets/final-closeout-status.md",
108
  "raw_url": "https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/final-closeout-status.md",
109
  "present": true,
110
- "bytes": 2353
111
  },
112
  {
113
  "id": "devpost_preview",
@@ -118,7 +118,7 @@
118
  "path": "docs/assets/devpost-submission-preview.md",
119
  "raw_url": "https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/devpost-submission-preview.md",
120
  "present": true,
121
- "bytes": 5500
122
  },
123
  {
124
  "id": "submission_checklist",
 
1
  {
2
  "schema": "proofframe.judge_evidence_index.v1",
3
+ "created_at": "2026-06-30T04:37:54Z",
4
  "ok": true,
5
  "mode": "pre_live_evidence_index_ready",
6
  "safe_to_share": true,
 
96
  "path": "docs/assets/final-submission-control.md",
97
  "raw_url": "https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/final-submission-control.md",
98
  "present": true,
99
+ "bytes": 7087
100
  },
101
  {
102
  "id": "final_closeout_status",
 
107
  "path": "docs/assets/final-closeout-status.md",
108
  "raw_url": "https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/final-closeout-status.md",
109
  "present": true,
110
+ "bytes": 2467
111
  },
112
  {
113
  "id": "devpost_preview",
 
118
  "path": "docs/assets/devpost-submission-preview.md",
119
  "raw_url": "https://huggingface.co/spaces/ADJCJH/backblaze-proofframe/raw/main/docs/assets/devpost-submission-preview.md",
120
  "present": true,
121
+ "bytes": 5407
122
  },
123
  {
124
  "id": "submission_checklist",
docs/assets/judge-evidence-index.md CHANGED
@@ -3,7 +3,7 @@
3
  Mode: `pre_live_evidence_index_ready`
4
  OK: `true`
5
  Safe to submit: `false`
6
- Created: `2026-06-29T13:53:29Z`
7
  Public demo: https://adjcjh-backblaze-proofframe.hf.space/?judge=1
8
  Repository: https://github.com/adjcjh777/backblaze-proofframe
9
 
 
3
  Mode: `pre_live_evidence_index_ready`
4
  OK: `true`
5
  Safe to submit: `false`
6
+ Created: `2026-06-30T04:37:54Z`
7
  Public demo: https://adjcjh-backblaze-proofframe.hf.space/?judge=1
8
  Repository: https://github.com/adjcjh777/backblaze-proofframe
9
 
docs/assets/live-credential-handoff.json CHANGED
@@ -2,52 +2,60 @@
2
  "schema": "proofframe.live_credential_handoff.v1",
3
  "ok": false,
4
  "mode": "missing_live_env",
5
- "source": "process environment",
6
  "required": [
7
  {
8
  "id": "storage_backend_mode",
9
  "label": "ProofFrame storage backend mode",
10
- "ok": false,
11
  "accepted_names": [
12
  "PROOFFRAME_STORAGE_BACKEND"
13
  ],
14
- "present_names": [],
 
 
15
  "expected": "b2",
16
- "remediation": "Set PROOFFRAME_STORAGE_BACKEND=b2."
17
  },
18
  {
19
  "id": "generation_backend_mode",
20
  "label": "ProofFrame generation backend mode",
21
- "ok": false,
22
  "accepted_names": [
23
  "PROOFFRAME_GENERATION_BACKEND"
24
  ],
25
- "present_names": [],
 
 
26
  "expected": "genblaze",
27
- "remediation": "Set PROOFFRAME_GENERATION_BACKEND=genblaze."
28
  },
29
  {
30
  "id": "b2_endpoint",
31
  "label": "Backblaze B2 S3 endpoint",
32
- "ok": false,
33
  "accepted_names": [
34
  "B2_ENDPOINT_URL",
35
  "B2_S3_ENDPOINT_URL"
36
  ],
37
- "present_names": [],
 
 
38
  "expected": null,
39
- "remediation": "Set B2_ENDPOINT_URL from the Backblaze bucket S3 endpoint."
40
  },
41
  {
42
  "id": "b2_bucket",
43
  "label": "Backblaze B2 bucket",
44
- "ok": false,
45
  "accepted_names": [
46
  "B2_BUCKET"
47
  ],
48
- "present_names": [],
 
 
49
  "expected": null,
50
- "remediation": "Set B2_BUCKET to the dedicated demo bucket name."
51
  },
52
  {
53
  "id": "b2_key_id",
@@ -87,13 +95,15 @@
87
  {
88
  "id": "genblaze_image_model",
89
  "label": "Genblaze image model",
90
- "ok": false,
91
  "accepted_names": [
92
  "GENBLAZE_IMAGE_MODEL"
93
  ],
94
- "present_names": [],
 
 
95
  "expected": null,
96
- "remediation": "Set GENBLAZE_IMAGE_MODEL to the verified image model."
97
  }
98
  ],
99
  "optional": [
@@ -122,35 +132,34 @@
122
  {
123
  "id": "genblaze_aspect_ratio",
124
  "label": "Genblaze aspect ratio",
125
- "ok": false,
126
  "accepted_names": [
127
  "GENBLAZE_ASPECT_RATIO"
128
  ],
129
- "present_names": [],
 
 
130
  "expected": null,
131
  "remediation": ""
132
  },
133
  {
134
  "id": "genblaze_timeout",
135
  "label": "Genblaze timeout seconds",
136
- "ok": false,
137
  "accepted_names": [
138
  "GENBLAZE_TIMEOUT_SECONDS"
139
  ],
140
- "present_names": [],
 
 
141
  "expected": null,
142
  "remediation": ""
143
  }
144
  ],
145
  "missing_ids": [
146
- "storage_backend_mode",
147
- "generation_backend_mode",
148
- "b2_endpoint",
149
- "b2_bucket",
150
  "b2_key_id",
151
  "b2_application_key",
152
- "genblaze_api_key",
153
- "genblaze_image_model"
154
  ],
155
  "next_commands": [
156
  "python scripts/final_env_wizard.py --prefill-non-secret --output .env.final.local",
 
2
  "schema": "proofframe.live_credential_handoff.v1",
3
  "ok": false,
4
  "mode": "missing_live_env",
5
+ "source": ".env.final.local",
6
  "required": [
7
  {
8
  "id": "storage_backend_mode",
9
  "label": "ProofFrame storage backend mode",
10
+ "ok": true,
11
  "accepted_names": [
12
  "PROOFFRAME_STORAGE_BACKEND"
13
  ],
14
+ "present_names": [
15
+ "PROOFFRAME_STORAGE_BACKEND"
16
+ ],
17
  "expected": "b2",
18
+ "remediation": ""
19
  },
20
  {
21
  "id": "generation_backend_mode",
22
  "label": "ProofFrame generation backend mode",
23
+ "ok": true,
24
  "accepted_names": [
25
  "PROOFFRAME_GENERATION_BACKEND"
26
  ],
27
+ "present_names": [
28
+ "PROOFFRAME_GENERATION_BACKEND"
29
+ ],
30
  "expected": "genblaze",
31
+ "remediation": ""
32
  },
33
  {
34
  "id": "b2_endpoint",
35
  "label": "Backblaze B2 S3 endpoint",
36
+ "ok": true,
37
  "accepted_names": [
38
  "B2_ENDPOINT_URL",
39
  "B2_S3_ENDPOINT_URL"
40
  ],
41
+ "present_names": [
42
+ "B2_ENDPOINT_URL"
43
+ ],
44
  "expected": null,
45
+ "remediation": ""
46
  },
47
  {
48
  "id": "b2_bucket",
49
  "label": "Backblaze B2 bucket",
50
+ "ok": true,
51
  "accepted_names": [
52
  "B2_BUCKET"
53
  ],
54
+ "present_names": [
55
+ "B2_BUCKET"
56
+ ],
57
  "expected": null,
58
+ "remediation": ""
59
  },
60
  {
61
  "id": "b2_key_id",
 
95
  {
96
  "id": "genblaze_image_model",
97
  "label": "Genblaze image model",
98
+ "ok": true,
99
  "accepted_names": [
100
  "GENBLAZE_IMAGE_MODEL"
101
  ],
102
+ "present_names": [
103
+ "GENBLAZE_IMAGE_MODEL"
104
+ ],
105
  "expected": null,
106
+ "remediation": ""
107
  }
108
  ],
109
  "optional": [
 
132
  {
133
  "id": "genblaze_aspect_ratio",
134
  "label": "Genblaze aspect ratio",
135
+ "ok": true,
136
  "accepted_names": [
137
  "GENBLAZE_ASPECT_RATIO"
138
  ],
139
+ "present_names": [
140
+ "GENBLAZE_ASPECT_RATIO"
141
+ ],
142
  "expected": null,
143
  "remediation": ""
144
  },
145
  {
146
  "id": "genblaze_timeout",
147
  "label": "Genblaze timeout seconds",
148
+ "ok": true,
149
  "accepted_names": [
150
  "GENBLAZE_TIMEOUT_SECONDS"
151
  ],
152
+ "present_names": [
153
+ "GENBLAZE_TIMEOUT_SECONDS"
154
+ ],
155
  "expected": null,
156
  "remediation": ""
157
  }
158
  ],
159
  "missing_ids": [
 
 
 
 
160
  "b2_key_id",
161
  "b2_application_key",
162
+ "genblaze_api_key"
 
163
  ],
164
  "next_commands": [
165
  "python scripts/final_env_wizard.py --prefill-non-secret --output .env.final.local",
docs/assets/live-credential-handoff.md CHANGED
@@ -2,35 +2,30 @@
2
 
3
  Mode: `missing_live_env`
4
  Ready for live proof: `false`
5
- Source: `process environment`
6
 
7
  This report records only variable names and presence checks. It never prints, hashes, stores, or commits credential values.
8
 
9
  ## Required Values
10
 
11
- - MISSING ProofFrame storage backend mode: `PROOFFRAME_STORAGE_BACKEND`; present none; expected `b2`.
12
- Remediation: Set PROOFFRAME_STORAGE_BACKEND=b2.
13
- - MISSING ProofFrame generation backend mode: `PROOFFRAME_GENERATION_BACKEND`; present none; expected `genblaze`.
14
- Remediation: Set PROOFFRAME_GENERATION_BACKEND=genblaze.
15
- - MISSING Backblaze B2 S3 endpoint: `B2_ENDPOINT_URL`, `B2_S3_ENDPOINT_URL`; present none.
16
- Remediation: Set B2_ENDPOINT_URL from the Backblaze bucket S3 endpoint.
17
- - MISSING Backblaze B2 bucket: `B2_BUCKET`; present none.
18
- Remediation: Set B2_BUCKET to the dedicated demo bucket name.
19
  - MISSING Backblaze B2 key id: `B2_KEY_ID`; present none.
20
  Remediation: Set B2_KEY_ID for a least-privilege application key.
21
  - MISSING Backblaze B2 application key: `B2_APPLICATION_KEY`, `B2_APP_KEY`; present none.
22
  Remediation: Set B2_APPLICATION_KEY or B2_APP_KEY.
23
  - MISSING Genblaze/GMI API key: `GENBLAZE_API_KEY`, `GMI_API_KEY`; present none.
24
  Remediation: Set GENBLAZE_API_KEY or GMI_API_KEY.
25
- - MISSING Genblaze image model: `GENBLAZE_IMAGE_MODEL`; present none.
26
- Remediation: Set GENBLAZE_IMAGE_MODEL to the verified image model.
27
 
28
  ## Optional Values
29
 
30
  - UNSET B2 public base URL: `B2_PUBLIC_BASE_URL`; present none.
31
  - UNSET B2 region for Genblaze sink: `B2_REGION`; present none.
32
- - UNSET Genblaze aspect ratio: `GENBLAZE_ASPECT_RATIO`; present none.
33
- - UNSET Genblaze timeout seconds: `GENBLAZE_TIMEOUT_SECONDS`; present none.
34
 
35
  ## Next Commands
36
 
 
2
 
3
  Mode: `missing_live_env`
4
  Ready for live proof: `false`
5
+ Source: `.env.final.local`
6
 
7
  This report records only variable names and presence checks. It never prints, hashes, stores, or commits credential values.
8
 
9
  ## Required Values
10
 
11
+ - OK ProofFrame storage backend mode: `PROOFFRAME_STORAGE_BACKEND`; present `PROOFFRAME_STORAGE_BACKEND`; expected `b2`.
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`.
 
22
 
23
  ## Optional Values
24
 
25
  - UNSET B2 public base URL: `B2_PUBLIC_BASE_URL`; present none.
26
  - UNSET B2 region for Genblaze sink: `B2_REGION`; present none.
27
+ - SET Genblaze aspect ratio: `GENBLAZE_ASPECT_RATIO`; present `GENBLAZE_ASPECT_RATIO`.
28
+ - SET Genblaze timeout seconds: `GENBLAZE_TIMEOUT_SECONDS`; present `GENBLAZE_TIMEOUT_SECONDS`.
29
 
30
  ## Next Commands
31
 
docs/assets/recording-assets.json CHANGED
@@ -9,7 +9,7 @@
9
  {
10
  "path": "README.md",
11
  "present": true,
12
- "bytes": 14783
13
  },
14
  {
15
  "path": "docs/demo_script.md",
@@ -104,12 +104,12 @@
104
  {
105
  "path": "docs/assets/final-submission-control.json",
106
  "present": true,
107
- "bytes": 24359
108
  },
109
  {
110
  "path": "docs/assets/final-submission-control.md",
111
  "present": true,
112
- "bytes": 7087
113
  },
114
  {
115
  "path": "docs/assets/proofframe-local-ui-smoke.png",
 
9
  {
10
  "path": "README.md",
11
  "present": true,
12
+ "bytes": 15285
13
  },
14
  {
15
  "path": "docs/demo_script.md",
 
104
  {
105
  "path": "docs/assets/final-submission-control.json",
106
  "present": true,
107
+ "bytes": 24404
108
  },
109
  {
110
  "path": "docs/assets/final-submission-control.md",
111
  "present": true,
112
+ "bytes": 7110
113
  },
114
  {
115
  "path": "docs/assets/proofframe-local-ui-smoke.png",
docs/assets/submission-audit-report.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "schema": "proofframe.submission_audit.v1",
3
- "created_at": "2026-06-29T14:05:09Z",
4
  "mode": "pre_submit_audit_blocked",
5
  "ok": false,
6
  "root": ".",
 
1
  {
2
  "schema": "proofframe.submission_audit.v1",
3
+ "created_at": "2026-06-30T04:37:54Z",
4
  "mode": "pre_submit_audit_blocked",
5
  "ok": false,
6
  "root": ".",
docs/assets/submission-audit-report.md CHANGED
@@ -2,7 +2,7 @@
2
 
3
  Mode: `pre_submit_audit_blocked`
4
  OK: `false`
5
- Created: `2026-06-29T14:05:09Z`
6
  Final evidence: `docs/assets/final-live-proof-evidence.json`
7
 
8
  ## Task Statuses
 
2
 
3
  Mode: `pre_submit_audit_blocked`
4
  OK: `false`
5
+ Created: `2026-06-30T04:37:54Z`
6
  Final evidence: `docs/assets/final-live-proof-evidence.json`
7
 
8
  ## Task Statuses
docs/assets/submission-bundle-manifest.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "schema": "proofframe.submission_bundle.v1",
3
- "created_at": "2026-06-30T04:04:26Z",
4
  "project": "ProofFrame",
5
  "repository_url": "https://github.com/adjcjh777/backblaze-proofframe",
6
  "public_demo_url": "https://adjcjh-backblaze-proofframe.hf.space/?judge=1",
@@ -148,7 +148,7 @@
148
  "present": true,
149
  "schema": "proofframe.final_submission_control.v1",
150
  "schema_ok": true,
151
- "created_at": "2026-06-29T14:05:09Z",
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-30T04:04:26Z",
166
  "ready": false,
167
  "fresh_after_receipt": true,
168
  "findings": [
@@ -176,7 +176,7 @@
176
  "present": true,
177
  "schema": "proofframe.final_video_publish_kit.v1",
178
  "schema_ok": true,
179
- "created_at": "2026-06-29T13:53:29Z",
180
  "ready": false,
181
  "fresh_after_receipt": true,
182
  "findings": [
@@ -190,12 +190,12 @@
190
  "present": true,
191
  "schema": "proofframe.final_launch_plan.v1",
192
  "schema_ok": true,
193
- "created_at": "2026-06-29T12:24:34Z",
194
  "ready": false,
195
  "fresh_after_receipt": true,
196
  "findings": [
197
  "Expected ok=True, got False.",
198
- "Expected mode='submitted', got 'blocked_at_credential_entry'."
199
  ]
200
  },
201
  {
@@ -204,7 +204,7 @@
204
  "present": true,
205
  "schema": "proofframe.devpost_submission_preview.v1",
206
  "schema_ok": true,
207
- "created_at": "2026-06-29T14:05:09Z",
208
  "ready": false,
209
  "fresh_after_receipt": true,
210
  "findings": [
@@ -218,7 +218,7 @@
218
  "present": true,
219
  "schema": "proofframe.judge_decision_brief.v1",
220
  "schema_ok": true,
221
- "created_at": "2026-06-29T13:53:29Z",
222
  "ready": false,
223
  "fresh_after_receipt": true,
224
  "findings": [
@@ -378,8 +378,8 @@
378
  "path": "scripts/public_space_sync.py",
379
  "label": "Public Hugging Face Space sync verifier",
380
  "present": true,
381
- "bytes": 81453,
382
- "sha256": "5225228afd83701bc69dbd5bffa4c9ae5d6db1a321c72eca96351317695745a0"
383
  },
384
  {
385
  "id": "public_space_sync_json",
@@ -458,16 +458,16 @@
458
  "path": "docs/assets/devpost-submission-preview.json",
459
  "label": "Machine-readable Devpost preview",
460
  "present": true,
461
- "bytes": 11704,
462
- "sha256": "7168c8a968a382927a534e53500898fbeb86fa40116e529bace350b0dc4e5761"
463
  },
464
  {
465
  "id": "devpost_preview_md",
466
  "path": "docs/assets/devpost-submission-preview.md",
467
  "label": "Human-readable Devpost preview",
468
  "present": true,
469
- "bytes": 5500,
470
- "sha256": "1c7d8bb8a6b223b8b73adc2945a33aa6d2969eb5a7e68044f811042692730c50"
471
  },
472
  {
473
  "id": "devpost_submission_checklist_script",
@@ -531,7 +531,7 @@
531
  "label": "Machine-readable judge crosswalk",
532
  "present": true,
533
  "bytes": 10219,
534
- "sha256": "e26e13908b3c49772b3a1e3e5cacd8f9a4d693a98d6daf930eaa7175f4c78bb4"
535
  },
536
  {
537
  "id": "judge_crosswalk_md",
@@ -539,7 +539,7 @@
539
  "label": "Human-readable judge crosswalk",
540
  "present": true,
541
  "bytes": 6157,
542
- "sha256": "e1e713256f84dfbf9bd62524a7b3a36ddadfcbc2c94c7731502ac0a513ed856d"
543
  },
544
  {
545
  "id": "judge_decision_brief_script",
@@ -555,7 +555,7 @@
555
  "label": "Machine-readable judge decision brief",
556
  "present": true,
557
  "bytes": 8137,
558
- "sha256": "bbff5925ade063f81fd40900351091513b721922b03daf7c4b413d648c08dcd0"
559
  },
560
  {
561
  "id": "judge_decision_brief_md",
@@ -563,7 +563,7 @@
563
  "label": "Human-readable judge decision brief",
564
  "present": true,
565
  "bytes": 3835,
566
- "sha256": "229bced696b84abcae13a683426a0fad7033aa9b226aa58c337f5d9298b04c61"
567
  },
568
  {
569
  "id": "judge_evidence_index_script",
@@ -579,7 +579,7 @@
579
  "label": "Machine-readable judge evidence index",
580
  "present": true,
581
  "bytes": 10456,
582
- "sha256": "4c6e43173ca9574294dc6285fb18a0bc35196617b7190a8b1a9eba7e695a6f14"
583
  },
584
  {
585
  "id": "judge_evidence_index_md",
@@ -587,15 +587,15 @@
587
  "label": "Human-readable judge evidence index",
588
  "present": true,
589
  "bytes": 4473,
590
- "sha256": "4a2d727b6dbb823ba2ef577c045718d26c55eee9cabfe81bb7ea152ba3320e97"
591
  },
592
  {
593
  "id": "frontend_ui",
594
  "path": "apps/web/index.html",
595
  "label": "Browser proof ledger UI",
596
  "present": true,
597
- "bytes": 69266,
598
- "sha256": "82044f3d69e6bea41b15567e16dbf4e16d8e5e807ef41de087a6b48f20aeb7a2"
599
  },
600
  {
601
  "id": "demo_script",
@@ -675,7 +675,7 @@
675
  "label": "Machine-readable final video publish kit",
676
  "present": true,
677
  "bytes": 5366,
678
- "sha256": "344571b3ad5178c5b9d8cab6ee93c8d1e832924f94821bb9862bc848075d522f"
679
  },
680
  {
681
  "id": "final_video_publish_kit_md",
@@ -683,7 +683,7 @@
683
  "label": "Human-readable final video publish kit",
684
  "present": true,
685
  "bytes": 2727,
686
- "sha256": "3ba376d90dc228dbfeda410aafe38b2701aa123b91604fd24bec6659da90c250"
687
  },
688
  {
689
  "id": "public_video_check_script",
@@ -778,40 +778,40 @@
778
  "path": "docs/assets/final-submission-control.json",
779
  "label": "Machine-readable final control report",
780
  "present": true,
781
- "bytes": 24733,
782
- "sha256": "787a19c2738f50e69d252afeb148adce79b45a70334dd6405b5e94138f940209"
783
  },
784
  {
785
  "id": "final_submission_control_md",
786
  "path": "docs/assets/final-submission-control.md",
787
  "label": "Human-readable final control report",
788
  "present": true,
789
- "bytes": 7203,
790
- "sha256": "e9683b1ba45a880ed91b5350bee619d1efc93c9d864b0d3fa02cac219b2022f9"
791
  },
792
  {
793
  "id": "final_closeout_status_script",
794
  "path": "scripts/final_closeout_status.py",
795
  "label": "No-secret final closeout status report",
796
  "present": true,
797
- "bytes": 18713,
798
- "sha256": "a223697809ac23c8d43dacab4b667304f17d9f0c06dc19be0249585e1105ed85"
799
  },
800
  {
801
  "id": "final_closeout_status_json",
802
  "path": "docs/assets/final-closeout-status.json",
803
  "label": "Machine-readable final closeout status",
804
  "present": true,
805
- "bytes": 12150,
806
- "sha256": "ec4dadf4a2ce5d1130a64bc340d79112a2cc793c517c92f51a89987de2e4be28"
807
  },
808
  {
809
  "id": "final_closeout_status_md",
810
  "path": "docs/assets/final-closeout-status.md",
811
  "label": "Human-readable final closeout status",
812
  "present": true,
813
- "bytes": 2405,
814
- "sha256": "0e4e126cd6981e0bc6e162596788a96d3435a3831471fad61c3106c23ad36461"
815
  },
816
  {
817
  "id": "final_operator_brief_script",
@@ -826,16 +826,16 @@
826
  "path": "docs/assets/final-operator-brief.json",
827
  "label": "Machine-readable final operator brief",
828
  "present": true,
829
- "bytes": 9688,
830
- "sha256": "a476cd6d9cb063f278041d62159d029a35c2389c38e3fdcb83ee9b6e641c5b12"
831
  },
832
  {
833
  "id": "final_operator_brief_md",
834
  "path": "docs/assets/final-operator-brief.md",
835
  "label": "Human-readable final operator brief",
836
  "present": true,
837
- "bytes": 4081,
838
- "sha256": "8695e2860f2eefc57c89d2a4a8d89938f5c8c2cdba1b8a79a678487f283dbd4f"
839
  },
840
  {
841
  "id": "final_launch_plan_script",
@@ -850,16 +850,16 @@
850
  "path": "docs/assets/final-launch-plan.json",
851
  "label": "Machine-readable final launch plan",
852
  "present": true,
853
- "bytes": 5735,
854
- "sha256": "8f53b073baa10aa7435ea56a1db7a921d1b37b5c8ea929749516859538e4f616"
855
  },
856
  {
857
  "id": "final_launch_plan_md",
858
  "path": "docs/assets/final-launch-plan.md",
859
  "label": "Human-readable final launch plan",
860
  "present": true,
861
- "bytes": 4641,
862
- "sha256": "0ced5df934a41bf969bee40bb212b65c5110981a1347aa169063dc6ba4096be3"
863
  },
864
  {
865
  "id": "final_rehearsal_script",
@@ -899,7 +899,7 @@
899
  "label": "Machine-readable submission audit report",
900
  "present": true,
901
  "bytes": 5925,
902
- "sha256": "f0b9ef2fc3c40a818648c2c09e9746c65f471c21b82424a3ba430668d98eadea"
903
  },
904
  {
905
  "id": "submission_audit_md",
@@ -907,7 +907,7 @@
907
  "label": "Human-readable submission audit report",
908
  "present": true,
909
  "bytes": 4459,
910
- "sha256": "ba55928af98821d63a8aee9a842ababd7e9c8c9490d32412a495fc83f03d5d12"
911
  },
912
  {
913
  "id": "devpost_receipt_script",
@@ -1074,16 +1074,16 @@
1074
  "path": "docs/assets/live-credential-handoff.json",
1075
  "label": "Machine-readable live credential handoff",
1076
  "present": true,
1077
- "bytes": 4647,
1078
- "sha256": "fbc4ca9fa12a6882fc8477fd9c3d89df2e14c9121bc461bde42460eea9f455a3"
1079
  },
1080
  {
1081
  "id": "live_env_handoff_md",
1082
  "path": "docs/assets/live-credential-handoff.md",
1083
  "label": "Human-readable live credential handoff",
1084
  "present": true,
1085
- "bytes": 2479,
1086
- "sha256": "46b34fc8e72589c21b3b7bf636420b127b7a0c1ce0f32c2696758a2a44f38529"
1087
  },
1088
  {
1089
  "id": "final_env_wizard",
@@ -1163,7 +1163,7 @@
1163
  "label": "Machine-readable recording asset report",
1164
  "present": true,
1165
  "bytes": 7826,
1166
- "sha256": "4eb6792bdb0f7f6a00c6162574e766923a3b42ff7e334296862b689a632598a0"
1167
  },
1168
  {
1169
  "id": "recording_assets_md",
@@ -1194,8 +1194,8 @@
1194
  "path": "tasks.json",
1195
  "label": "Machine-readable task board",
1196
  "present": true,
1197
- "bytes": 66140,
1198
- "sha256": "3aff88e0602af30c91dbaff3fcd7ba894036659c3617fc5ab5cc2b59d84d6e91"
1199
  },
1200
  {
1201
  "id": "local_ui_smoke",
 
1
  {
2
  "schema": "proofframe.submission_bundle.v1",
3
+ "created_at": "2026-06-30T04:37:54Z",
4
  "project": "ProofFrame",
5
  "repository_url": "https://github.com/adjcjh777/backblaze-proofframe",
6
  "public_demo_url": "https://adjcjh-backblaze-proofframe.hf.space/?judge=1",
 
148
  "present": true,
149
  "schema": "proofframe.final_submission_control.v1",
150
  "schema_ok": true,
151
+ "created_at": "2026-06-30T04:35:43Z",
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-06-30T04:37:42Z",
166
  "ready": false,
167
  "fresh_after_receipt": true,
168
  "findings": [
 
176
  "present": true,
177
  "schema": "proofframe.final_video_publish_kit.v1",
178
  "schema_ok": true,
179
+ "created_at": "2026-06-30T04:35:02Z",
180
  "ready": false,
181
  "fresh_after_receipt": true,
182
  "findings": [
 
190
  "present": true,
191
  "schema": "proofframe.final_launch_plan.v1",
192
  "schema_ok": true,
193
+ "created_at": "2026-06-30T04:37:54Z",
194
  "ready": false,
195
  "fresh_after_receipt": true,
196
  "findings": [
197
  "Expected ok=True, got False.",
198
+ "Expected mode='submitted', got 'ready_for_credential_entry'."
199
  ]
200
  },
201
  {
 
204
  "present": true,
205
  "schema": "proofframe.devpost_submission_preview.v1",
206
  "schema_ok": true,
207
+ "created_at": "2026-06-30T04:37:54Z",
208
  "ready": false,
209
  "fresh_after_receipt": true,
210
  "findings": [
 
218
  "present": true,
219
  "schema": "proofframe.judge_decision_brief.v1",
220
  "schema_ok": true,
221
+ "created_at": "2026-06-30T04:37:54Z",
222
  "ready": false,
223
  "fresh_after_receipt": true,
224
  "findings": [
 
378
  "path": "scripts/public_space_sync.py",
379
  "label": "Public Hugging Face Space sync verifier",
380
  "present": true,
381
+ "bytes": 84344,
382
+ "sha256": "80b323e5a2df2661c97d2023b1d30c7a0436f1dd2a6a8460645a1cce696dbd3c"
383
  },
384
  {
385
  "id": "public_space_sync_json",
 
458
  "path": "docs/assets/devpost-submission-preview.json",
459
  "label": "Machine-readable Devpost preview",
460
  "present": true,
461
+ "bytes": 11611,
462
+ "sha256": "39092feea8eb3ea846c8b67085c4b8e57679d6e656d1b6867c1d5a211b74a0b6"
463
  },
464
  {
465
  "id": "devpost_preview_md",
466
  "path": "docs/assets/devpost-submission-preview.md",
467
  "label": "Human-readable Devpost preview",
468
  "present": true,
469
+ "bytes": 5407,
470
+ "sha256": "760d948b804fbe97cc61f437643c3f0b23748b864ed112076d3c2ed910b8a9fe"
471
  },
472
  {
473
  "id": "devpost_submission_checklist_script",
 
531
  "label": "Machine-readable judge crosswalk",
532
  "present": true,
533
  "bytes": 10219,
534
+ "sha256": "cc69963305eb8fe13a5ca0c06bb07c2af58659768d89b17f11388192cd85a68c"
535
  },
536
  {
537
  "id": "judge_crosswalk_md",
 
539
  "label": "Human-readable judge crosswalk",
540
  "present": true,
541
  "bytes": 6157,
542
+ "sha256": "5e9e3a621839dd8787c9c2e7c7d7f2d8c99687fa0a8faa491989a6e418d4f575"
543
  },
544
  {
545
  "id": "judge_decision_brief_script",
 
555
  "label": "Machine-readable judge decision brief",
556
  "present": true,
557
  "bytes": 8137,
558
+ "sha256": "4a34a962a383da11b3d3a79f21cce707e717375c7772fff1d37b4000f5e2c2f7"
559
  },
560
  {
561
  "id": "judge_decision_brief_md",
 
563
  "label": "Human-readable judge decision brief",
564
  "present": true,
565
  "bytes": 3835,
566
+ "sha256": "cce02254cec75331bc7c0cd43912975db54c20df887d93a1204ad9e507a4e3b2"
567
  },
568
  {
569
  "id": "judge_evidence_index_script",
 
579
  "label": "Machine-readable judge evidence index",
580
  "present": true,
581
  "bytes": 10456,
582
+ "sha256": "850436cba02ad7c2ab3831fb6435950b6e032692fba9a14ad25d9c87bfdea41d"
583
  },
584
  {
585
  "id": "judge_evidence_index_md",
 
587
  "label": "Human-readable judge evidence index",
588
  "present": true,
589
  "bytes": 4473,
590
+ "sha256": "d6557b290286eb6268c93bf80cd029ae26e0faf1b50548c7edd80dd6e4c95fe4"
591
  },
592
  {
593
  "id": "frontend_ui",
594
  "path": "apps/web/index.html",
595
  "label": "Browser proof ledger UI",
596
  "present": true,
597
+ "bytes": 69407,
598
+ "sha256": "9259d14a3b671a977c2a81ec46771b05a84148ddfa8dd5b6bc1caf2e70cbf519"
599
  },
600
  {
601
  "id": "demo_script",
 
675
  "label": "Machine-readable final video publish kit",
676
  "present": true,
677
  "bytes": 5366,
678
+ "sha256": "bca2ad3796f4c0674ead31a52b584a1816563307dcd83dad862e9a734d580e6c"
679
  },
680
  {
681
  "id": "final_video_publish_kit_md",
 
683
  "label": "Human-readable final video publish kit",
684
  "present": true,
685
  "bytes": 2727,
686
+ "sha256": "411f69489c0e6e54dafc20bc34e67f9a8e75e2d30d2db0728dd3ba5c8dd5f10b"
687
  },
688
  {
689
  "id": "public_video_check_script",
 
778
  "path": "docs/assets/final-submission-control.json",
779
  "label": "Machine-readable final control report",
780
  "present": true,
781
+ "bytes": 24359,
782
+ "sha256": "063182a9b2c1515272ef53a0786b97ef2f5f66843625ee28e29062f4a6d0fc60"
783
  },
784
  {
785
  "id": "final_submission_control_md",
786
  "path": "docs/assets/final-submission-control.md",
787
  "label": "Human-readable final control report",
788
  "present": true,
789
+ "bytes": 7087,
790
+ "sha256": "6121f44a7e9661d330a8a402c16a1b1136f1b7b217fa11deb8f917cac68ac5f1"
791
  },
792
  {
793
  "id": "final_closeout_status_script",
794
  "path": "scripts/final_closeout_status.py",
795
  "label": "No-secret final closeout status report",
796
  "present": true,
797
+ "bytes": 19027,
798
+ "sha256": "fef94acd01449141de6c4961bdf75078489b58fbb70e05b9bf007e3d91a976d2"
799
  },
800
  {
801
  "id": "final_closeout_status_json",
802
  "path": "docs/assets/final-closeout-status.json",
803
  "label": "Machine-readable final closeout status",
804
  "present": true,
805
+ "bytes": 12592,
806
+ "sha256": "6c0b30d08c1e48cea375560226a3e2ecdaa0de494d7c22d23e39701e505bc0fe"
807
  },
808
  {
809
  "id": "final_closeout_status_md",
810
  "path": "docs/assets/final-closeout-status.md",
811
  "label": "Human-readable final closeout status",
812
  "present": true,
813
+ "bytes": 2467,
814
+ "sha256": "218ef848c482db5150c539b763a219b076ce5a3cb7a6ab939fa6b38a5afe4747"
815
  },
816
  {
817
  "id": "final_operator_brief_script",
 
826
  "path": "docs/assets/final-operator-brief.json",
827
  "label": "Machine-readable final operator brief",
828
  "present": true,
829
+ "bytes": 9547,
830
+ "sha256": "e04883b31eb3872bbef8292478c42d40281f04c4f73e72babca3086eeba3ebae"
831
  },
832
  {
833
  "id": "final_operator_brief_md",
834
  "path": "docs/assets/final-operator-brief.md",
835
  "label": "Human-readable final operator brief",
836
  "present": true,
837
+ "bytes": 3985,
838
+ "sha256": "4e035a35fea178fa2d5dbe9e52f3e8368844d0ba5d88b4ea2e4651c24c1f5394"
839
  },
840
  {
841
  "id": "final_launch_plan_script",
 
850
  "path": "docs/assets/final-launch-plan.json",
851
  "label": "Machine-readable final launch plan",
852
  "present": true,
853
+ "bytes": 5690,
854
+ "sha256": "c5713815ec24421ac78d80e1bde143ecff476b2694ad2ee1c55b89c858769915"
855
  },
856
  {
857
  "id": "final_launch_plan_md",
858
  "path": "docs/assets/final-launch-plan.md",
859
  "label": "Human-readable final launch plan",
860
  "present": true,
861
+ "bytes": 4596,
862
+ "sha256": "7747b3177be9562ad5c2568d812c55372564a4fbff17dd8e49e5d33e021aa810"
863
  },
864
  {
865
  "id": "final_rehearsal_script",
 
899
  "label": "Machine-readable submission audit report",
900
  "present": true,
901
  "bytes": 5925,
902
+ "sha256": "5bcad4983e67226d218d2348e25ec70af0a6d9722612b6732a2c602792660fa2"
903
  },
904
  {
905
  "id": "submission_audit_md",
 
907
  "label": "Human-readable submission audit report",
908
  "present": true,
909
  "bytes": 4459,
910
+ "sha256": "4b6e04e23f6593ee017eba0fef76d2093e10634caed8f2da5f106d282b248b2f"
911
  },
912
  {
913
  "id": "devpost_receipt_script",
 
1074
  "path": "docs/assets/live-credential-handoff.json",
1075
  "label": "Machine-readable live credential handoff",
1076
  "present": true,
1077
+ "bytes": 4548,
1078
+ "sha256": "08b0b09e257f62535a0800e00c91a5ffb8537c9fef9015b7a7f1be1acbe95eb8"
1079
  },
1080
  {
1081
  "id": "live_env_handoff_md",
1082
  "path": "docs/assets/live-credential-handoff.md",
1083
  "label": "Human-readable live credential handoff",
1084
  "present": true,
1085
+ "bytes": 2261,
1086
+ "sha256": "17742c751ea63313f1deccdd0c4260dddc539f190f4e0ff51db85e54bf9e590d"
1087
  },
1088
  {
1089
  "id": "final_env_wizard",
 
1163
  "label": "Machine-readable recording asset report",
1164
  "present": true,
1165
  "bytes": 7826,
1166
+ "sha256": "568ec3fed5266f57bef28881d2e2e8af8218a865a98dc10efbf0fa853a91c375"
1167
  },
1168
  {
1169
  "id": "recording_assets_md",
 
1194
  "path": "tasks.json",
1195
  "label": "Machine-readable task board",
1196
  "present": true,
1197
+ "bytes": 67156,
1198
+ "sha256": "3947c60f73ca33cd828ab8c9cd2e78bbf2b25a51bdde10a4ab8bfa8552575cbc"
1199
  },
1200
  {
1201
  "id": "local_ui_smoke",
docs/assets/submission-bundle-manifest.md CHANGED
@@ -1,6 +1,6 @@
1
  # ProofFrame Submission Bundle
2
 
3
- Created: `2026-06-30T04:04:26Z`
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`
@@ -43,7 +43,7 @@ Final gate ready: `false`
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` (81453 bytes, sha256 `5225228afd83701b...`) - Public Hugging Face Space sync verifier
47
  - `docs/assets/public-space-sync-report.json` (19087 bytes, sha256 `13a2b0ef06e5cc71...`) - Machine-readable public Space sync report
48
  - `docs/assets/public-space-sync-report.md` (8038 bytes, sha256 `0472c57e5efe9f18...`) - Human-readable public Space sync report
49
  - `scripts/public_demo_screenshot.py` (8926 bytes, sha256 `3eb5b0a003e383dd...`) - Public judge-mode screenshot verifier
@@ -53,8 +53,8 @@ Final gate ready: `false`
53
  - `docs/assets/devpost-form-kit.json` (12483 bytes, sha256 `96196519c036e0aa...`) - Machine-readable Devpost form kit
54
  - `docs/assets/devpost-form-kit.md` (7496 bytes, sha256 `f6beeb3fe9e7f94d...`) - Human-readable Devpost form kit
55
  - `scripts/devpost_submission_preview.py` (17329 bytes, sha256 `28ed8703ca6479fc...`) - One-page claim-safe Devpost preview
56
- - `docs/assets/devpost-submission-preview.json` (11704 bytes, sha256 `7168c8a968a38292...`) - Machine-readable Devpost preview
57
- - `docs/assets/devpost-submission-preview.md` (5500 bytes, sha256 `1c7d8bb8a6b223b8...`) - Human-readable Devpost preview
58
  - `scripts/devpost_submission_checklist.py` (11252 bytes, sha256 `78b8e1b70da428fd...`) - No-secret final Devpost web submission checklist
59
  - `docs/assets/devpost-submission-checklist.json` (16428 bytes, sha256 `bea72137b1e7df2a...`) - Machine-readable final Devpost submission checklist
60
  - `docs/assets/devpost-submission-checklist.md` (9319 bytes, sha256 `e45546c7334e78e3...`) - Human-readable final Devpost submission checklist
@@ -62,15 +62,15 @@ Final gate ready: `false`
62
  - `docs/assets/judge-brief.json` (3734 bytes, sha256 `59bdfd6a30e05d49...`) - Machine-readable judge brief
63
  - `docs/assets/judge-brief.md` (3000 bytes, sha256 `b487a7644c255c45...`) - Human-readable judge brief
64
  - `scripts/judge_crosswalk.py` (17642 bytes, sha256 `d9153174e330fd53...`) - Official criteria to evidence crosswalk
65
- - `docs/assets/judge-crosswalk.json` (10219 bytes, sha256 `e26e13908b3c4977...`) - Machine-readable judge crosswalk
66
- - `docs/assets/judge-crosswalk.md` (6157 bytes, sha256 `e1e713256f84dfbf...`) - Human-readable judge crosswalk
67
  - `scripts/judge_decision_brief.py` (14954 bytes, sha256 `8505d14ada46c7ac...`) - Public-safe judge decision brief builder
68
- - `docs/assets/judge-decision-brief.json` (8137 bytes, sha256 `bbff5925ade063f8...`) - Machine-readable judge decision brief
69
- - `docs/assets/judge-decision-brief.md` (3835 bytes, sha256 `229bced696b84abc...`) - Human-readable judge decision brief
70
  - `scripts/judge_evidence_index.py` (13831 bytes, sha256 `efbf5dee17eab7f8...`) - Public-safe judge evidence index builder
71
- - `docs/assets/judge-evidence-index.json` (10456 bytes, sha256 `4c6e43173ca95742...`) - Machine-readable judge evidence index
72
- - `docs/assets/judge-evidence-index.md` (4473 bytes, sha256 `4a2d727b6dbb823b...`) - Human-readable judge evidence index
73
- - `apps/web/index.html` (69266 bytes, sha256 `82044f3d69e6bea4...`) - Browser proof ledger UI
74
  - `docs/demo_script.md` (5856 bytes, sha256 `fbabf38ff87cca9b...`) - Video shot list and narration
75
  - `scripts/demo_storyboard.py` (11025 bytes, sha256 `e5d75956d6d4a20b...`) - Machine-checked demo video storyboard
76
  - `docs/assets/demo-storyboard.json` (4514 bytes, sha256 `192f9dc7f55eaaa1...`) - Machine-readable demo storyboard
@@ -80,8 +80,8 @@ Final gate ready: `false`
80
  - `docs/assets/demo-video-draft.md` (1562 bytes, sha256 `1b041908b73020d6...`) - Human-readable demo video draft report
81
  - `docs/assets/proofframe-demo-draft.mp4` (747727 bytes, sha256 `7c943ee37b96a865...`) - Public-safe mock demo video draft
82
  - `scripts/final_video_publish_kit.py` (12256 bytes, sha256 `651a73d338ae1f4b...`) - Final public video upload copy and gate kit
83
- - `docs/assets/final-video-publish-kit.json` (5366 bytes, sha256 `344571b3ad5178c5...`) - Machine-readable final video publish kit
84
- - `docs/assets/final-video-publish-kit.md` (2727 bytes, sha256 `3ba376d90dc228db...`) - Human-readable final video publish kit
85
  - `scripts/public_video_check.py` (14919 bytes, sha256 `ca4e127967c6b81d...`) - Public demo video URL verifier
86
  - `docs/assets/public-video-check.json` (2977 bytes, sha256 `63b844b631ff61b8...`) - Machine-readable public video check
87
  - `docs/assets/public-video-check.md` (1701 bytes, sha256 `990cd0e1a0bd4814...`) - Human-readable public video check
@@ -93,23 +93,23 @@ Final gate ready: `false`
93
  - `docs/assets/award-readiness-report.json` (11377 bytes, sha256 `66417f6e0c2a15d9...`) - Machine-readable award readiness report
94
  - `docs/assets/award-readiness-report.md` (4390 bytes, sha256 `5be57ca5d9cab53d...`) - Human-readable award readiness report
95
  - `scripts/final_submission_control.py` (32644 bytes, sha256 `6514cbdf2bfe8998...`) - Final submission control tower
96
- - `docs/assets/final-submission-control.json` (24733 bytes, sha256 `787a19c2738f50e6...`) - Machine-readable final control report
97
- - `docs/assets/final-submission-control.md` (7203 bytes, sha256 `e9683b1ba45a880e...`) - Human-readable final control report
98
- - `scripts/final_closeout_status.py` (18713 bytes, sha256 `a223697809ac23c8...`) - No-secret final closeout status report
99
- - `docs/assets/final-closeout-status.json` (12150 bytes, sha256 `ec4dadf4a2ce5d11...`) - Machine-readable final closeout status
100
- - `docs/assets/final-closeout-status.md` (2405 bytes, sha256 `0e4e126cd6981e0b...`) - Human-readable final closeout status
101
  - `scripts/final_operator_brief.py` (15305 bytes, sha256 `06367d7eddaf62ef...`) - No-secret final operator brief
102
- - `docs/assets/final-operator-brief.json` (9688 bytes, sha256 `a476cd6d9cb063f2...`) - Machine-readable final operator brief
103
- - `docs/assets/final-operator-brief.md` (4081 bytes, sha256 `8695e2860f2eefc5...`) - Human-readable final operator brief
104
  - `scripts/final_launch_plan.py` (17492 bytes, sha256 `dc2766d5f424c1ac...`) - No-secret final launch phase plan
105
- - `docs/assets/final-launch-plan.json` (5735 bytes, sha256 `8f53b073baa10aa7...`) - Machine-readable final launch plan
106
- - `docs/assets/final-launch-plan.md` (4641 bytes, sha256 `0ced5df934a41bf9...`) - Human-readable final launch plan
107
  - `scripts/final_rehearsal.py` (18265 bytes, sha256 `7b0b844fcce35158...`) - No-secret final submission rehearsal checklist
108
  - `docs/assets/final-rehearsal-checklist.json` (17425 bytes, sha256 `38baeca09639120d...`) - Machine-readable final rehearsal checklist
109
  - `docs/assets/final-rehearsal-checklist.md` (7493 bytes, sha256 `25d7183644dc714b...`) - Human-readable final rehearsal checklist
110
  - `scripts/submission_audit.py` (20684 bytes, sha256 `0f9a378c203bf7b6...`) - Pre-submit audit gate
111
- - `docs/assets/submission-audit-report.json` (5925 bytes, sha256 `f0b9ef2fc3c40a81...`) - Machine-readable submission audit report
112
- - `docs/assets/submission-audit-report.md` (4459 bytes, sha256 `ba55928af98821d6...`) - Human-readable submission audit report
113
  - `scripts/devpost_submission_receipt.py` (9209 bytes, sha256 `76c55e8ff1aeaa52...`) - Public-safe Devpost submission receipt generator
114
  - `docs/assets/devpost-submission-receipt.json` (1298 bytes, sha256 `bf646cf968665c8c...`) - Machine-readable Devpost submission receipt
115
  - `docs/assets/devpost-submission-receipt.md` (996 bytes, sha256 `af2fa18349d5c017...`) - Human-readable Devpost submission receipt
@@ -130,8 +130,8 @@ Final gate ready: `false`
130
  - `docs/assets/genblaze-contract-report.md` (3166 bytes, sha256 `6bb4bdb7c7a39915...`) - Human-readable Genblaze SDK contract report
131
  - `scripts/run_b2_live_proof.py` (5781 bytes, sha256 `9678c0292a70cc0b...`) - One-command B2 storage proof runner
132
  - `scripts/live_env_handoff.py` (9451 bytes, sha256 `39c8de0b58c132c3...`) - Redacted live credential handoff gate
133
- - `docs/assets/live-credential-handoff.json` (4647 bytes, sha256 `fbc4ca9fa12a6882...`) - Machine-readable live credential handoff
134
- - `docs/assets/live-credential-handoff.md` (2479 bytes, sha256 `46b34fc8e72589c2...`) - Human-readable live credential handoff
135
  - `scripts/final_env_wizard.py` (16314 bytes, sha256 `a22d696bc534a61f...`) - Local final credential env wizard
136
  - `scripts/post_credential_live_proof.py` (17108 bytes, sha256 `aec873007c4cb809...`) - Post-credential live proof sequence runner
137
  - `docs/assets/post-credential-live-proof-plan.json` (9127 bytes, sha256 `c98417e979fac562...`) - Machine-readable post-credential live proof plan
@@ -141,11 +141,11 @@ Final gate ready: `false`
141
  - `docs/assets/demo-readiness-report.json` (3893 bytes, sha256 `ebd13ea05535dba2...`) - Machine-readable demo readiness report
142
  - `docs/assets/demo-readiness-report.md` (1768 bytes, sha256 `39fcc67011a5eaa9...`) - Human-readable demo readiness report
143
  - `scripts/recording_assets.py` (18340 bytes, sha256 `8c15f362298fa92c...`) - Public-safe recording asset gate
144
- - `docs/assets/recording-assets.json` (7826 bytes, sha256 `4eb6792bdb0f7f6a...`) - Machine-readable recording asset report
145
  - `docs/assets/recording-assets.md` (3867 bytes, sha256 `e3d2ef5dd86dfe33...`) - Human-readable recording asset report
146
  - `scripts/run_final_live_proof.py` (5814 bytes, sha256 `c6b9dc2fc9d7c670...`) - One-command final B2 plus Genblaze proof runner
147
  - `docs/submission.md` (4000 bytes, sha256 `b702417f1345fe39...`) - Registration and submission plan
148
- - `tasks.json` (66140 bytes, sha256 `3aff88e0602af30c...`) - Machine-readable task board
149
  - `docs/assets/proofframe-local-ui-smoke.png` (364927 bytes, sha256 `cca671ad38bda4dc...`) - Local UI screenshot
150
  - `docs/assets/proofframe-review-console-smoke.png` (343618 bytes, sha256 `30620a33e3c7ab28...`) - Review console screenshot
151
  - `docs/assets/proofframe-hf-public-smoke.png` (741074 bytes, sha256 `5d6f68f7a4a2fdee...`) - Public mock demo screenshot
 
1
  # ProofFrame Submission Bundle
2
 
3
+ Created: `2026-06-30T04:37:54Z`
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`
 
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` (84344 bytes, sha256 `80b323e5a2df2661...`) - Public Hugging Face Space sync verifier
47
  - `docs/assets/public-space-sync-report.json` (19087 bytes, sha256 `13a2b0ef06e5cc71...`) - Machine-readable public Space sync report
48
  - `docs/assets/public-space-sync-report.md` (8038 bytes, sha256 `0472c57e5efe9f18...`) - Human-readable public Space sync report
49
  - `scripts/public_demo_screenshot.py` (8926 bytes, sha256 `3eb5b0a003e383dd...`) - Public judge-mode screenshot verifier
 
53
  - `docs/assets/devpost-form-kit.json` (12483 bytes, sha256 `96196519c036e0aa...`) - Machine-readable Devpost form kit
54
  - `docs/assets/devpost-form-kit.md` (7496 bytes, sha256 `f6beeb3fe9e7f94d...`) - Human-readable Devpost form kit
55
  - `scripts/devpost_submission_preview.py` (17329 bytes, sha256 `28ed8703ca6479fc...`) - One-page claim-safe Devpost preview
56
+ - `docs/assets/devpost-submission-preview.json` (11611 bytes, sha256 `39092feea8eb3ea8...`) - Machine-readable Devpost preview
57
+ - `docs/assets/devpost-submission-preview.md` (5407 bytes, sha256 `760d948b804fbe97...`) - Human-readable Devpost preview
58
  - `scripts/devpost_submission_checklist.py` (11252 bytes, sha256 `78b8e1b70da428fd...`) - No-secret final Devpost web submission checklist
59
  - `docs/assets/devpost-submission-checklist.json` (16428 bytes, sha256 `bea72137b1e7df2a...`) - Machine-readable final Devpost submission checklist
60
  - `docs/assets/devpost-submission-checklist.md` (9319 bytes, sha256 `e45546c7334e78e3...`) - Human-readable final Devpost submission checklist
 
62
  - `docs/assets/judge-brief.json` (3734 bytes, sha256 `59bdfd6a30e05d49...`) - Machine-readable judge brief
63
  - `docs/assets/judge-brief.md` (3000 bytes, sha256 `b487a7644c255c45...`) - Human-readable judge brief
64
  - `scripts/judge_crosswalk.py` (17642 bytes, sha256 `d9153174e330fd53...`) - Official criteria to evidence crosswalk
65
+ - `docs/assets/judge-crosswalk.json` (10219 bytes, sha256 `cc69963305eb8fe1...`) - Machine-readable judge crosswalk
66
+ - `docs/assets/judge-crosswalk.md` (6157 bytes, sha256 `5e9e3a621839dd87...`) - Human-readable judge crosswalk
67
  - `scripts/judge_decision_brief.py` (14954 bytes, sha256 `8505d14ada46c7ac...`) - Public-safe judge decision brief builder
68
+ - `docs/assets/judge-decision-brief.json` (8137 bytes, sha256 `4a34a962a383da11...`) - Machine-readable judge decision brief
69
+ - `docs/assets/judge-decision-brief.md` (3835 bytes, sha256 `cce02254cec75331...`) - Human-readable judge decision brief
70
  - `scripts/judge_evidence_index.py` (13831 bytes, sha256 `efbf5dee17eab7f8...`) - Public-safe judge evidence index builder
71
+ - `docs/assets/judge-evidence-index.json` (10456 bytes, sha256 `850436cba02ad7c2...`) - Machine-readable judge evidence index
72
+ - `docs/assets/judge-evidence-index.md` (4473 bytes, sha256 `d6557b290286eb62...`) - Human-readable judge evidence index
73
+ - `apps/web/index.html` (69407 bytes, sha256 `9259d14a3b671a97...`) - Browser proof ledger UI
74
  - `docs/demo_script.md` (5856 bytes, sha256 `fbabf38ff87cca9b...`) - Video shot list and narration
75
  - `scripts/demo_storyboard.py` (11025 bytes, sha256 `e5d75956d6d4a20b...`) - Machine-checked demo video storyboard
76
  - `docs/assets/demo-storyboard.json` (4514 bytes, sha256 `192f9dc7f55eaaa1...`) - Machine-readable demo storyboard
 
80
  - `docs/assets/demo-video-draft.md` (1562 bytes, sha256 `1b041908b73020d6...`) - Human-readable demo video draft report
81
  - `docs/assets/proofframe-demo-draft.mp4` (747727 bytes, sha256 `7c943ee37b96a865...`) - Public-safe mock demo video draft
82
  - `scripts/final_video_publish_kit.py` (12256 bytes, sha256 `651a73d338ae1f4b...`) - Final public video upload copy and gate kit
83
+ - `docs/assets/final-video-publish-kit.json` (5366 bytes, sha256 `bca2ad3796f4c067...`) - Machine-readable final video publish kit
84
+ - `docs/assets/final-video-publish-kit.md` (2727 bytes, sha256 `411f69489c0e6e54...`) - Human-readable final video publish kit
85
  - `scripts/public_video_check.py` (14919 bytes, sha256 `ca4e127967c6b81d...`) - Public demo video URL verifier
86
  - `docs/assets/public-video-check.json` (2977 bytes, sha256 `63b844b631ff61b8...`) - Machine-readable public video check
87
  - `docs/assets/public-video-check.md` (1701 bytes, sha256 `990cd0e1a0bd4814...`) - Human-readable public video check
 
93
  - `docs/assets/award-readiness-report.json` (11377 bytes, sha256 `66417f6e0c2a15d9...`) - Machine-readable award readiness report
94
  - `docs/assets/award-readiness-report.md` (4390 bytes, sha256 `5be57ca5d9cab53d...`) - Human-readable award readiness report
95
  - `scripts/final_submission_control.py` (32644 bytes, sha256 `6514cbdf2bfe8998...`) - Final submission control tower
96
+ - `docs/assets/final-submission-control.json` (24359 bytes, sha256 `063182a9b2c15152...`) - Machine-readable final control report
97
+ - `docs/assets/final-submission-control.md` (7087 bytes, sha256 `6121f44a7e9661d3...`) - Human-readable final control report
98
+ - `scripts/final_closeout_status.py` (19027 bytes, sha256 `fef94acd01449141...`) - No-secret final closeout status report
99
+ - `docs/assets/final-closeout-status.json` (12592 bytes, sha256 `6c0b30d08c1e48ce...`) - Machine-readable final closeout status
100
+ - `docs/assets/final-closeout-status.md` (2467 bytes, sha256 `218ef848c482db51...`) - Human-readable final closeout status
101
  - `scripts/final_operator_brief.py` (15305 bytes, sha256 `06367d7eddaf62ef...`) - No-secret final operator brief
102
+ - `docs/assets/final-operator-brief.json` (9547 bytes, sha256 `e04883b31eb3872b...`) - Machine-readable final operator brief
103
+ - `docs/assets/final-operator-brief.md` (3985 bytes, sha256 `4e035a35fea178fa...`) - Human-readable final operator brief
104
  - `scripts/final_launch_plan.py` (17492 bytes, sha256 `dc2766d5f424c1ac...`) - No-secret final launch phase plan
105
+ - `docs/assets/final-launch-plan.json` (5690 bytes, sha256 `c5713815ec24421a...`) - Machine-readable final launch plan
106
+ - `docs/assets/final-launch-plan.md` (4596 bytes, sha256 `7747b3177be9562a...`) - Human-readable final launch plan
107
  - `scripts/final_rehearsal.py` (18265 bytes, sha256 `7b0b844fcce35158...`) - No-secret final submission rehearsal checklist
108
  - `docs/assets/final-rehearsal-checklist.json` (17425 bytes, sha256 `38baeca09639120d...`) - Machine-readable final rehearsal checklist
109
  - `docs/assets/final-rehearsal-checklist.md` (7493 bytes, sha256 `25d7183644dc714b...`) - Human-readable final rehearsal checklist
110
  - `scripts/submission_audit.py` (20684 bytes, sha256 `0f9a378c203bf7b6...`) - Pre-submit audit gate
111
+ - `docs/assets/submission-audit-report.json` (5925 bytes, sha256 `5bcad4983e67226d...`) - Machine-readable submission audit report
112
+ - `docs/assets/submission-audit-report.md` (4459 bytes, sha256 `4b6e04e23f6593ee...`) - Human-readable submission audit report
113
  - `scripts/devpost_submission_receipt.py` (9209 bytes, sha256 `76c55e8ff1aeaa52...`) - Public-safe Devpost submission receipt generator
114
  - `docs/assets/devpost-submission-receipt.json` (1298 bytes, sha256 `bf646cf968665c8c...`) - Machine-readable Devpost submission receipt
115
  - `docs/assets/devpost-submission-receipt.md` (996 bytes, sha256 `af2fa18349d5c017...`) - Human-readable Devpost submission receipt
 
130
  - `docs/assets/genblaze-contract-report.md` (3166 bytes, sha256 `6bb4bdb7c7a39915...`) - Human-readable Genblaze SDK contract report
131
  - `scripts/run_b2_live_proof.py` (5781 bytes, sha256 `9678c0292a70cc0b...`) - One-command B2 storage proof runner
132
  - `scripts/live_env_handoff.py` (9451 bytes, sha256 `39c8de0b58c132c3...`) - Redacted live credential handoff gate
133
+ - `docs/assets/live-credential-handoff.json` (4548 bytes, sha256 `08b0b09e257f6253...`) - Machine-readable live credential handoff
134
+ - `docs/assets/live-credential-handoff.md` (2261 bytes, sha256 `17742c751ea63313...`) - Human-readable live credential handoff
135
  - `scripts/final_env_wizard.py` (16314 bytes, sha256 `a22d696bc534a61f...`) - Local final credential env wizard
136
  - `scripts/post_credential_live_proof.py` (17108 bytes, sha256 `aec873007c4cb809...`) - Post-credential live proof sequence runner
137
  - `docs/assets/post-credential-live-proof-plan.json` (9127 bytes, sha256 `c98417e979fac562...`) - Machine-readable post-credential live proof plan
 
141
  - `docs/assets/demo-readiness-report.json` (3893 bytes, sha256 `ebd13ea05535dba2...`) - Machine-readable demo readiness report
142
  - `docs/assets/demo-readiness-report.md` (1768 bytes, sha256 `39fcc67011a5eaa9...`) - Human-readable demo readiness report
143
  - `scripts/recording_assets.py` (18340 bytes, sha256 `8c15f362298fa92c...`) - Public-safe recording asset gate
144
+ - `docs/assets/recording-assets.json` (7826 bytes, sha256 `568ec3fed5266f57...`) - Machine-readable recording asset report
145
  - `docs/assets/recording-assets.md` (3867 bytes, sha256 `e3d2ef5dd86dfe33...`) - Human-readable recording asset report
146
  - `scripts/run_final_live_proof.py` (5814 bytes, sha256 `c6b9dc2fc9d7c670...`) - One-command final B2 plus Genblaze proof runner
147
  - `docs/submission.md` (4000 bytes, sha256 `b702417f1345fe39...`) - Registration and submission plan
148
+ - `tasks.json` (67156 bytes, sha256 `3947c60f73ca33cd...`) - Machine-readable task board
149
  - `docs/assets/proofframe-local-ui-smoke.png` (364927 bytes, sha256 `cca671ad38bda4dc...`) - Local UI screenshot
150
  - `docs/assets/proofframe-review-console-smoke.png` (343618 bytes, sha256 `30620a33e3c7ab28...`) - Review console screenshot
151
  - `docs/assets/proofframe-hf-public-smoke.png` (741074 bytes, sha256 `5d6f68f7a4a2fdee...`) - Public mock demo screenshot
docs/todo.md CHANGED
@@ -48,3 +48,4 @@ python3 scripts/task.py doing T020 --note "Live B2 proof in progress"
48
  | T089 | Review findings hardened: real live credential handoff output, T020/T021 done checks, public raw closeout validation, and strict bundle closeout freshness are covered. |
49
  | T090 | Final closeout status is now available through `/api/judge/final-closeout`, a judge-mode UI panel/link, API smoke, and public Space HTML marker validation. |
50
  | T091 | Final closeout public sync now accepts both pre-final fail-closed and final-ready all-green states, validates the API against raw evidence, and keeps the UI next command visible. |
 
 
48
  | T089 | Review findings hardened: real live credential handoff output, T020/T021 done checks, public raw closeout validation, and strict bundle closeout freshness are covered. |
49
  | T090 | Final closeout status is now available through `/api/judge/final-closeout`, a judge-mode UI panel/link, API smoke, and public Space HTML marker validation. |
50
  | T091 | Final closeout public sync now accepts both pre-final fail-closed and final-ready all-green states, validates the API against raw evidence, and keeps the UI next command visible. |
51
+ | T092 | No-secret live credential handoff regenerated from `.env.final.local`; remaining local credential blockers are narrowed to `b2_key_id`, `b2_application_key`, and `genblaze_api_key`. |
scripts/final_closeout_status.py CHANGED
@@ -95,6 +95,7 @@ def report_status(root: Path, report_id: str, relative_path: str, schema: str) -
95
  "public_video_ready": report.get("public_video_ready"),
96
  "project_url": report.get("project_url"),
97
  "missing_artifacts": report.get("missing_artifacts"),
 
98
  "findings_count": len(report.get("findings") or []),
99
  }
100
 
@@ -119,6 +120,12 @@ def credential_handoff_ready(report: dict[str, Any]) -> bool:
119
  return bool(report.get("ok") is True and report.get("mode") == "live_env_ready")
120
 
121
 
 
 
 
 
 
 
122
  def submission_bundle_inputs_ready(report: dict[str, Any]) -> bool:
123
  return bool(
124
  report["present"]
@@ -182,7 +189,7 @@ def build_report(root: Path = ROOT) -> dict[str, Any]:
182
  "credential_handoff",
183
  "Live credential handoff is ready",
184
  credential_handoff_ready(credential_handoff),
185
- f"Credential handoff mode is {credential_handoff.get('mode')}.",
186
  credential_handoff["path"],
187
  ),
188
  gate_item(
 
95
  "public_video_ready": report.get("public_video_ready"),
96
  "project_url": report.get("project_url"),
97
  "missing_artifacts": report.get("missing_artifacts"),
98
+ "missing_ids": report.get("missing_ids"),
99
  "findings_count": len(report.get("findings") or []),
100
  }
101
 
 
120
  return bool(report.get("ok") is True and report.get("mode") == "live_env_ready")
121
 
122
 
123
+ def credential_handoff_detail(report: dict[str, Any]) -> str:
124
+ missing = [str(item) for item in report.get("missing_ids", []) if item]
125
+ suffix = f"; missing ids: {', '.join(missing)}" if missing else ""
126
+ return f"Credential handoff mode is {report.get('mode')}{suffix}."
127
+
128
+
129
  def submission_bundle_inputs_ready(report: dict[str, Any]) -> bool:
130
  return bool(
131
  report["present"]
 
189
  "credential_handoff",
190
  "Live credential handoff is ready",
191
  credential_handoff_ready(credential_handoff),
192
+ credential_handoff_detail(credential_handoff),
193
  credential_handoff["path"],
194
  ),
195
  gate_item(
tasks.json CHANGED
@@ -200,6 +200,15 @@
200
  "done_criteria": "",
201
  "notes": "Addressed independent reviewer finding: public Space sync now accepts both pre-final fail-closed and final_closeout_ready all-green status, validates /api/judge/final-closeout against raw closeout evidence, API smoke enforces required gates/secret policy, and the UI always shows the next command."
202
  },
 
 
 
 
 
 
 
 
 
203
  {
204
  "id": "T030",
205
  "title": "Run browser smoke test",
 
200
  "done_criteria": "",
201
  "notes": "Addressed independent reviewer finding: public Space sync now accepts both pre-final fail-closed and final_closeout_ready all-green status, validates /api/judge/final-closeout against raw closeout evidence, API smoke enforces required gates/secret policy, and the UI always shows the next command."
202
  },
203
+ {
204
+ "id": "T092",
205
+ "title": "Refresh no-secret live credential handoff from local env",
206
+ "phase": "P4 Submit",
207
+ "owner": "controller",
208
+ "status": "done",
209
+ "done_criteria": "",
210
+ "notes": "Generated docs/assets/live-credential-handoff.* from .env.final.local without printing values; non-secret B2 bucket/endpoint and backend modes are present, and remaining secret blockers are narrowed to b2_key_id, b2_application_key, and genblaze_api_key."
211
+ },
212
  {
213
  "id": "T030",
214
  "title": "Run browser smoke test",
tests/test_final_closeout_status.py CHANGED
@@ -178,6 +178,8 @@ def test_closeout_status_waits_for_credentials_in_pre_live_state(tmp_path):
178
  assert report["mode"] == "waiting_for_credentials"
179
  assert report["phase"] == "credential_entry"
180
  assert ".env.final.local" in report["next_command"]
 
 
181
 
182
 
183
  def test_closeout_status_can_be_final_ready(tmp_path):
 
178
  assert report["mode"] == "waiting_for_credentials"
179
  assert report["phase"] == "credential_entry"
180
  assert ".env.final.local" in report["next_command"]
181
+ gates = {gate["id"]: gate for gate in report["gates"]}
182
+ assert "missing ids: storage_backend_mode, generation_backend_mode" in gates["credential_handoff"]["detail"]
183
 
184
 
185
  def test_closeout_status_can_be_final_ready(tmp_path):