cvpfus Codex commited on
Commit
0347c74
·
1 Parent(s): d1b4ad4

Render demo API checks in runbook

Browse files

Co-authored-by: Codex <codex@openai.com>

Files changed (7) hide show
  1. FIELD_NOTES.md +1 -1
  2. README.md +2 -2
  3. SUBMISSION.md +1 -1
  4. scripts/verify.py +3 -0
  5. static/app.css +36 -0
  6. static/app.js +11 -0
  7. static/index.html +1 -0
FIELD_NOTES.md CHANGED
@@ -28,7 +28,7 @@ The app exposes the same budget through `/api/model-budget`, including numeric `
28
 
29
  Runtime setup is also data-backed. `/api/runtime-setup` lists the app command, llama.cpp launch command, model-specific runtime paths, environment values, and fallbacks. The session panel renders a compact version so the demo can distinguish real model wiring from deterministic safety nets.
30
 
31
- The judge runbook lives at `/api/demo-script` and is rendered in the session panel. It keeps the live presentation repeatable by pairing visible actions with API checks for health, model budget, runtime setup, runtime status, image descriptions, reader narration, and speech.
32
 
33
  Submission readiness lives at `/api/submission-readiness`. It aggregates the demo-critical checks into one payload: model budget, award evidence, custom frontend assets, runtime setup, accessibility audit, image receipts, and executable demo API checks.
34
 
 
28
 
29
  Runtime setup is also data-backed. `/api/runtime-setup` lists the app command, llama.cpp launch command, model-specific runtime paths, environment values, and fallbacks. The session panel renders a compact version so the demo can distinguish real model wiring from deterministic safety nets.
30
 
31
+ The judge runbook lives at `/api/demo-script` and is rendered in the session panel with its API evidence checks. It keeps the live presentation repeatable by pairing visible actions with API checks for health, model budget, runtime setup, runtime status, image descriptions, reader narration, and speech.
32
 
33
  Submission readiness lives at `/api/submission-readiness`. It aggregates the demo-critical checks into one payload: model budget, award evidence, custom frontend assets, runtime setup, accessibility audit, image receipts, and executable demo API checks.
34
 
README.md CHANGED
@@ -75,7 +75,7 @@ The verifier checks syntax, static assets, Space metadata consistency, determini
75
 
76
  `/api/runtime-setup` exposes the commands, environment values, and fallback paths used for the model stack so the demo can be reproduced from the same data the UI displays.
77
 
78
- `/api/demo-script` exposes a compact judge runbook with the visible actions and API checks that prove the submission claims. The session panel renders those actions as the Judge Runbook.
79
 
80
  `/api/accessibility-audit` exposes structured evidence for semantic reading order, keyboard navigation, reader cursor state, shortcut safety, live narration, image alt text, transcript review, user-controlled playback, and fallback resilience.
81
 
@@ -120,7 +120,7 @@ Navigation commands interrupt current speech before starting the next request, m
120
 
121
  Reader-brain, image-description, speech, and image-generation responses include `elapsed_ms`. The session panel and transcript show recent latency so the Field Notes can discuss responsiveness with concrete numbers.
122
 
123
- The session panel renders the judge runbook from `/api/demo-script`, plus manifest-backed evidence for Tiny Titan, Llama Champion, Off-Brand, and Field Notes. A model-budget panel reads `/api/model-budget` so judges can see each role's parameter count in the live app.
124
 
125
  A submission-readiness panel reads `/api/submission-readiness`, giving judges one compact rollup of the claims the live app can prove.
126
 
 
75
 
76
  `/api/runtime-setup` exposes the commands, environment values, and fallback paths used for the model stack so the demo can be reproduced from the same data the UI displays.
77
 
78
+ `/api/demo-script` exposes a compact judge runbook with the visible actions and API checks that prove the submission claims. The session panel renders those actions and API evidence checks as the Judge Runbook.
79
 
80
  `/api/accessibility-audit` exposes structured evidence for semantic reading order, keyboard navigation, reader cursor state, shortcut safety, live narration, image alt text, transcript review, user-controlled playback, and fallback resilience.
81
 
 
120
 
121
  Reader-brain, image-description, speech, and image-generation responses include `elapsed_ms`. The session panel and transcript show recent latency so the Field Notes can discuss responsiveness with concrete numbers.
122
 
123
+ The session panel renders the judge runbook and API evidence checks from `/api/demo-script`, plus manifest-backed evidence for Tiny Titan, Llama Champion, Off-Brand, and Field Notes. A model-budget panel reads `/api/model-budget` so judges can see each role's parameter count in the live app.
124
 
125
  A submission-readiness panel reads `/api/submission-readiness`, giving judges one compact rollup of the claims the live app can prove.
126
 
SUBMISSION.md CHANGED
@@ -32,7 +32,7 @@ The prototype is designed for a live hackathon demo: every model-facing path has
32
  2. Turn on screen-reader mode and press `Space` or `Next` to narrate the first semantic node.
33
  3. Use `Heading`, `Image`, and `Summary` to navigate by article meaning instead of by raw page order.
34
  4. Show the session panel: transcript, runtime readiness, latency, judge runbook, award evidence, model budget, and runtime plan.
35
- 5. Mention that `/api/demo-script` exposes the same judge runbook as structured data.
36
 
37
  ## Evidence endpoints
38
 
 
32
  2. Turn on screen-reader mode and press `Space` or `Next` to narrate the first semantic node.
33
  3. Use `Heading`, `Image`, and `Summary` to navigate by article meaning instead of by raw page order.
34
  4. Show the session panel: transcript, runtime readiness, latency, judge runbook, award evidence, model budget, and runtime plan.
35
+ 5. Mention that `/api/demo-script` exposes the same judge runbook and API evidence checks as structured data.
36
 
37
  ## Evidence endpoints
38
 
scripts/verify.py CHANGED
@@ -39,9 +39,11 @@ def verify_static_assets() -> None:
39
  assert_true('aria-live="polite"' in index_html, "Article should expose an aria-live narration region")
40
  assert_true("transcriptLog" in index_html, "Article should expose a visible transcript log")
41
  assert_true("demoScriptList" in index_html, "Article should expose the judge demo runbook")
 
42
  assert_true("imageReceiptList" in index_html, "Article should expose generated image receipts")
43
  assert_true("submissionReadinessList" in index_html, "Article should expose submission readiness checks")
44
  assert_true("loadDemoScript" in app_js, "Frontend should render the structured demo script")
 
45
  assert_true("function haltPlayback" in app_js, "Reader controls should expose a shared playback halt helper")
46
  assert_true(
47
  "haltPlayback({ clearAutoAdvance: false });" in app_js,
@@ -204,6 +206,7 @@ def verify_routes() -> None:
204
  assert_true("transcriptLog" in home.text, "Home route should include transcript log")
205
  assert_true("demoScriptStatus" in home.text, "Home route should include demo script status")
206
  assert_true("demoScriptList" in home.text, "Home route should include demo script list")
 
207
  assert_true("awardEvidenceList" in home.text, "Home route should include award evidence list")
208
  assert_true("submissionReadinessStatus" in home.text, "Home route should include submission readiness status")
209
  assert_true("submissionReadinessList" in home.text, "Home route should include submission readiness list")
 
39
  assert_true('aria-live="polite"' in index_html, "Article should expose an aria-live narration region")
40
  assert_true("transcriptLog" in index_html, "Article should expose a visible transcript log")
41
  assert_true("demoScriptList" in index_html, "Article should expose the judge demo runbook")
42
+ assert_true("demoApiCheckList" in index_html, "Article should expose judge API evidence checks")
43
  assert_true("imageReceiptList" in index_html, "Article should expose generated image receipts")
44
  assert_true("submissionReadinessList" in index_html, "Article should expose submission readiness checks")
45
  assert_true("loadDemoScript" in app_js, "Frontend should render the structured demo script")
46
+ assert_true("payload.api_checks" in app_js, "Frontend should render structured demo API checks")
47
  assert_true("function haltPlayback" in app_js, "Reader controls should expose a shared playback halt helper")
48
  assert_true(
49
  "haltPlayback({ clearAutoAdvance: false });" in app_js,
 
206
  assert_true("transcriptLog" in home.text, "Home route should include transcript log")
207
  assert_true("demoScriptStatus" in home.text, "Home route should include demo script status")
208
  assert_true("demoScriptList" in home.text, "Home route should include demo script list")
209
+ assert_true("demoApiCheckList" in home.text, "Home route should include demo API check list")
210
  assert_true("awardEvidenceList" in home.text, "Home route should include award evidence list")
211
  assert_true("submissionReadinessStatus" in home.text, "Home route should include submission readiness status")
212
  assert_true("submissionReadinessList" in home.text, "Home route should include submission readiness list")
static/app.css CHANGED
@@ -390,6 +390,14 @@ dd {
390
  padding-left: 20px;
391
  }
392
 
 
 
 
 
 
 
 
 
393
  .award-list li {
394
  border: 1px solid var(--line);
395
  border-radius: 8px;
@@ -428,6 +436,34 @@ dd {
428
  font-size: 0.82rem;
429
  }
430
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
431
  .budget-list {
432
  display: grid;
433
  gap: 8px;
 
390
  padding-left: 20px;
391
  }
392
 
393
+ .demo-api-check-list {
394
+ display: grid;
395
+ gap: 8px;
396
+ margin: 12px 0 0;
397
+ padding: 0;
398
+ list-style: none;
399
+ }
400
+
401
  .award-list li {
402
  border: 1px solid var(--line);
403
  border-radius: 8px;
 
436
  font-size: 0.82rem;
437
  }
438
 
439
+ .demo-api-check-list li {
440
+ display: grid;
441
+ grid-template-columns: auto 1fr;
442
+ gap: 4px 8px;
443
+ border: 1px solid var(--line);
444
+ border-radius: 8px;
445
+ padding: 9px 10px;
446
+ background: var(--surface);
447
+ }
448
+
449
+ .demo-api-check-list span {
450
+ color: var(--accent-strong);
451
+ font-size: 0.74rem;
452
+ font-weight: 850;
453
+ }
454
+
455
+ .demo-api-check-list code {
456
+ overflow-wrap: anywhere;
457
+ font-size: 0.78rem;
458
+ }
459
+
460
+ .demo-api-check-list p {
461
+ grid-column: 1 / -1;
462
+ margin: 0;
463
+ color: var(--muted);
464
+ font-size: 0.78rem;
465
+ }
466
+
467
  .budget-list {
468
  display: grid;
469
  gap: 8px;
static/app.js CHANGED
@@ -19,6 +19,7 @@ const copyTranscriptButton = document.querySelector("#copyTranscriptButton");
19
  const clearTranscriptButton = document.querySelector("#clearTranscriptButton");
20
  const demoScriptStatus = document.querySelector("#demoScriptStatus");
21
  const demoScriptList = document.querySelector("#demoScriptList");
 
22
  const awardEvidenceList = document.querySelector("#awardEvidenceList");
23
  const submissionReadinessStatus = document.querySelector("#submissionReadinessStatus");
24
  const submissionReadinessList = document.querySelector("#submissionReadinessList");
@@ -244,6 +245,15 @@ async function loadDemoScript() {
244
  </li>
245
  `)
246
  .join("");
 
 
 
 
 
 
 
 
 
247
  } catch {
248
  demoScriptStatus.textContent = "Unavailable";
249
  demoScriptList.innerHTML = `
@@ -255,6 +265,7 @@ async function loadDemoScript() {
255
  <p>The structured demo script is unavailable.</p>
256
  </li>
257
  `;
 
258
  }
259
  }
260
 
 
19
  const clearTranscriptButton = document.querySelector("#clearTranscriptButton");
20
  const demoScriptStatus = document.querySelector("#demoScriptStatus");
21
  const demoScriptList = document.querySelector("#demoScriptList");
22
+ const demoApiCheckList = document.querySelector("#demoApiCheckList");
23
  const awardEvidenceList = document.querySelector("#awardEvidenceList");
24
  const submissionReadinessStatus = document.querySelector("#submissionReadinessStatus");
25
  const submissionReadinessList = document.querySelector("#submissionReadinessList");
 
245
  </li>
246
  `)
247
  .join("");
248
+ demoApiCheckList.innerHTML = payload.api_checks
249
+ .map((item) => `
250
+ <li>
251
+ <span>${escapeHtml(item.method)}</span>
252
+ <code>${escapeHtml(item.path)}</code>
253
+ <p>${escapeHtml(item.expect)}${item.sample_body ? " Sample body included." : ""}</p>
254
+ </li>
255
+ `)
256
+ .join("");
257
  } catch {
258
  demoScriptStatus.textContent = "Unavailable";
259
  demoScriptList.innerHTML = `
 
265
  <p>The structured demo script is unavailable.</p>
266
  </li>
267
  `;
268
+ demoApiCheckList.innerHTML = "";
269
  }
270
  }
271
 
static/index.html CHANGED
@@ -127,6 +127,7 @@
127
  <span id="demoScriptStatus">Loading</span>
128
  </div>
129
  <ol id="demoScriptList" class="demo-script-list" aria-label="Judge demo runbook"></ol>
 
130
  <div class="award-header">
131
  <h3>Award Evidence</h3>
132
  </div>
 
127
  <span id="demoScriptStatus">Loading</span>
128
  </div>
129
  <ol id="demoScriptList" class="demo-script-list" aria-label="Judge demo runbook"></ol>
130
+ <ul id="demoApiCheckList" class="demo-api-check-list" aria-label="Judge API evidence checks"></ul>
131
  <div class="award-header">
132
  <h3>Award Evidence</h3>
133
  </div>