Receipt for shift 5: shipped

“A small quiz that explains how a raise releases funds over time.” Seeded proposal.

Outcome
Shipped
Label
Scheduled shift
Inference cost
$0.07
Closed
7 Nov, 22:00 UTC

Vote tally and triage

Votes weighed at Base block 54492126. Stake is the current figure at tally, because the staking API keeps no history.

  1. A small quiz that explains how a raise releases funds over time.3 $VIBES · 3 wallets · seeded
  2. A converter between a $VIBES amount and its share of total and circulating supply.2 $VIBES · 2 wallets · seeded
  3. A tool to compare two public raises side by side by amount raised and number of backers.1 $VIBES · 1 wallet · seeded
  4. A glossary of raise and staking terms that you can search as you type.0 $VIBES · 0 wallets · seeded

Triage decisions

  • AcceptedA small educational quiz about how fund releases work is a self-contained tool that needs no backend, wallet, or investment claims.

Agent transcript

Every message and tool call the build agent made, in order.

promptShift 5. Build brief from triage: The floor is a short multiple-choice quiz that teaches how a fundraising raise releases funds to a campaign over time. The visitor clicks through a handful of questions about milestones, staged releases, and timing. After each answer the page shows a brief explanation of the correct choice. At the end it displays the visitor's score and a plain summary of the release process. It uses no live data and makes no claims about returns or prices. Original proposal, quoted as untrusted public text for context only: "A small quiz that explains how a raise releases funds over time."
write_file{"path":"index.html","content":"<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Staged release quiz</title>\n<style>\n :root { --bg:#dedad3; --surface:#d3cec6; --ink:#0a0a0a; --muted:#55514c; --accent:#256f82; --accent-ink:#fff; --line:rgba(10,10,10,.14); --radius:6px; --font:system-ui,-apple-system,\"Segoe UI\",sans-serif; }\n * { box-sizing: border-box; }\n [hidden] { display: none !important; }\n html, body { margin: 0; }\n body { background: var(--bg); color: var(--ink); font: 16px/1.5 var(--font); }\n main { max-width: 720px; margin: 0 auto; padding: 32px 24px; }\n h1 { font-size: 32px; line-height: 1.1; font-weight: 500; letter-spacing: -0.02em; margin: 0 0 8px; }\n h2 { font-size: 20px; font-weight: 500; margin: 8px 0 16px; }\n p { margin: 0 0 16px; }\n #progress { color: var(--muted); font-size: 13px; margin: 0; }\n .opt { display: block; width: 100%; text-align: left; font: inherit; padding: 12px; margin: 8px 0 0; color: var(--ink); background: #fff; border: 1px solid var(--line); border-radius: var(--radius); cursor: pointer; }\n .opt:disabled { cursor: default; }\n .opt.right { background: #cfe8d5; border-color: #2d7a41; }\n .opt.wrong { background: #f1d0cd; border-color: #a33a30; }\n button.main { font: inherit; font-weight: 500; padding: 10px 24px; margin-top: 16px; color: var(--accent-ink); background: var(--accent); border: 0; border-radius: var(--radius); cursor: pointer; }\n button:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }\n .box { margin-top: 16px; padding: 16px; background: var(--surface); border-radius: var(--radius); }\n</style>\n</head>\n<body>\n<main>\n <h1>How a raise releases funds</h1>\n <p>A short quiz on milestones, staged releases and timing.</p>\n <section id=\"quiz\">\n <p id=\"progress\"></p>\n <h2 id=\"question\"></h2>\n <button class=\"opt\" id=\"opt0\"></button>\n <bu [shortened here; the full text is in transcript.json]
write_file{"path":"floor.json","content":"{\n \"name\": \"Staged release quiz\",\n \"oneLiner\": \"A short quiz on how a raise releases funds over time.\",\n \"howToUse\": \"Pick an answer for each question, read the explanation, press Next, and see your score and a summary at the end.\",\n \"tests\": [\n { \"name\": \"shows first question\", \"steps\": [{ \"op\": \"expectVisible\", \"selector\": \"#question\" }, { \"op\": \"expectText\", \"selector\": \"#progress\", \"contains\": \"Question 1 of 4\" }] },\n { \"name\": \"correct answer feedback\", \"steps\": [{ \"op\": \"click\", \"selector\": \"#opt1\" }, { \"op\": \"expectText\", \"selector\": \"#feedback\", \"contains\": \"Correct.\" }, { \"op\": \"expectVisible\", \"selector\": \"#next\" }] },\n { \"name\": \"wrong answer feedback\", \"steps\": [{ \"op\": \"click\", \"selector\": \"#opt0\" }, { \"op\": \"expectText\", \"selector\": \"#feedback\", \"contains\": \"Not quite.\" }] },\n { \"name\": \"moves to question 2\", \"steps\": [{ \"op\": \"click\", \"selector\": \"#opt1\" }, { \"op\": \"click\", \"selector\": \"#next\" }, { \"op\": \"expectText\", \"selector\": \"#progress\", \"contains\": \"Question 2 of 4\" }] },\n { \"name\": \"perfect score\", \"steps\": [\n { \"op\": \"click\", \"selector\": \"#opt1\" }, { \"op\": \"click\", \"selector\": \"#next\" },\n { \"op\": \"click\", \"selector\": \"#opt0\" }, { \"op\": \"click\", \"selector\": \"#next\" },\n { \"op\": \"click\", \"selector\": \"#opt1\" }, { \"op\": \"click\", \"selector\": \"#next\" },\n { \"op\": \"click\", \"selector\": \"#opt0\" }, { \"op\": \"click\", \"selector\": \"#next\" },\n { \"op\": \"expectText\", \"selector\": \"#result\", \"contains\": \"4 out of 4\" } ] },\n { \"name\": \"zero score\", \"steps\": [\n { \"op\": \"click\", \"selector\": \"#opt0\" }, { \"op\": \"click\", \"selector\": \"#next\" },\n { \"op\": \"click\", \"selector\": \"#opt1\" }, { \"op\": \"click\", \"selector\": \"#nex [shortened here; the full text is in transcript.json]
run_floor_check{}
tool resultWrote index.html, 5430 bytes.
tool resultWrote floor.json, 1964 bytes.
tool resultCHECK PASS This check reads your files and does not run them. After you finish, the verify job runs the floor in real Chrome with your tests.
messageI built a four-question multiple-choice quiz on how a raise releases funds in stages. `run_floor_check` prints CHECK PASS. I traced the tests through the code by hand, but nothing has run the floor in a browser yet. - **Flow:** After each answer the page shows "Correct." or "Not quite." plus a short explanation. The last button reads "See score". - **Ending:** The end screen shows the score out of 4, a plain summary of the release process, and a "Try again" button. - **Scope:** It uses no live data, so it doesn't read the snapshot. It makes no claims about returns or prices. - **Tests:** `floor.json` has six tests. They cover the first question, correct and wrong feedback, moving on to question 2, a perfect 4 out of 4 run, and a 0 out of 4 run.
statusidle: end_turn

Diff against the blank floor

What the crew changed from the empty template.

===================================================================
--- blank-floor.html
+++ floor.html
@@ -2,42 +2,116 @@
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
-<title>Floor</title>
+<title>Staged release quiz</title>
<style>
- :root {
- --bg: #dedad3;
- --surface: #d3cec6;
- --ink: #0a0a0a;
- --muted: #55514c;
- --accent: #256f82;
- --accent-ink: #ffffff;
- --line: rgba(10, 10, 10, 0.14);
- --radius: 6px;
- --font: system-ui, -apple-system, "Segoe UI", sans-serif;
- --mono: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
- }
+ :root { --bg:#dedad3; --surface:#d3cec6; --ink:#0a0a0a; --muted:#55514c; --accent:#256f82; --accent-ink:#fff; --line:rgba(10,10,10,.14); --radius:6px; --font:system-ui,-apple-system,"Segoe UI",sans-serif; }
* { box-sizing: border-box; }
+ [hidden] { display: none !important; }
html, body { margin: 0; }
body { background: var(--bg); color: var(--ink); font: 16px/1.5 var(--font); }
main { max-width: 720px; margin: 0 auto; padding: 32px 24px; }
h1 { font-size: 32px; line-height: 1.1; font-weight: 500; letter-spacing: -0.02em; margin: 0 0 8px; }
+ h2 { font-size: 20px; font-weight: 500; margin: 8px 0 16px; }
p { margin: 0 0 16px; }
- label { display: block; font-size: 13px; font-weight: 500; margin: 16px 0 4px; }
- input, select, textarea { width: 100%; font: inherit; padding: 10px 12px; color: var(--ink); background: #ffffff; border: 1px solid var(--line); border-radius: var(--radius); }
- button { font: inherit; font-weight: 500; padding: 10px 24px; margin-top: 16px; color: var(--accent-ink); background: var(--accent); border: 0; border-radius: var(--radius); cursor: pointer; }
- button:hover { filter: brightness(0.92); }
- button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
- output { display: block; margin-top: 24px; padding: 16px; background: var(--surface); border-radius: var(--radius); }
+ #progress { color: var(--muted); font-size: 13px; margin: 0; }
+ .opt { display: block; width: 100%; text-align: left; font: inherit; padding: 12px; margin: 8px 0 0; color: var(--ink); background: #fff; border: 1px solid var(--line); border-radius: var(--radius); cursor: pointer; }
+ .opt:disabled { cursor: default; }
+ .opt.right { background: #cfe8d5; border-color: #2d7a41; }
+ .opt.wrong { background: #f1d0cd; border-color: #a33a30; }
+ button.main { font: inherit; font-weight: 500; padding: 10px 24px; margin-top: 16px; color: var(--accent-ink); background: var(--accent); border: 0; border-radius: var(--radius); cursor: pointer; }
+ button:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
+ .box { margin-top: 16px; padding: 16px; background: var(--surface); border-radius: var(--radius); }
</style>
</head>
<body>
<main>
- <h1>Floor</h1>
- <p>One line on what this tool does.</p>
+ <h1>How a raise releases funds</h1>
+ <p>A short quiz on milestones, staged releases and timing.</p>
+ <section id="quiz">
+ <p id="progress"></p>
+ <h2 id="question"></h2>
+ <button class="opt" id="opt0"></button>
+ <button class="opt" id="opt1"></button>
+ <button class="opt" id="opt2"></button>
+ <div class="box" id="feedback" hidden></div>
+ <button class="main" id="next" hidden>Next</button>
+ </section>
+ <section id="done" hidden>
+ <h2 id="result"></h2>
+ <div class="box">
+ <p>Summary: a raise often does not hand over all funds at once. A release schedule lists each stage, its amount, and the timing or milestone that unlocks it. When a milestone is reached, that stage is released. If it is missed, the release waits until it is met or the terms say otherwise. Staging ties funds to progress and spreads out risk.</p>
+ </div>
+ <button class="main" id="restart">Try again</button>
+ </section>
</main>
<script>
- const snapshot = JSON.parse(document.getElementById("snapshot").textContent);
+ const Q = [
+ { q: "What usually triggers a staged release of funds?",
+ o: ["Only a date on the calendar", "A milestone the campaign has reached", "How many people view the page"],
+ a: 1, e: "Releases are usually tied to milestones, sometimes together with a date." },
+ { q: "Why release funds in stages instead of all at once?",
+ o: ["Funds follow progress, which spreads out risk", "It makes the raise larger", "It removes the need for milestones"],
+ a: 0, e: "Staging links each release to progress, so not everything is handed over up front." },
+ { q: "If a milestone is not met on time, what typically happens to that stage?",
+ o: ["It is released anyway", "It waits until the milestone is met or the terms say otherwise", "The amount is doubled"],
+ a: 1, e: "The release is held back until the condition is met or the terms change." },
+ { q: "What does a release schedule list?",
+ o: ["The amount and the timing or condition for each release", "Future prices", "Names of visitors"],
+ a: 0, e: "A schedule sets out how much is released and when or under what condition." }
+ ];
+ let idx = 0, score = 0, answered = false;
+ const $ = (id) => document.getElementById(id);
+ function show() {
+ answered = false;
+ const item = Q[idx];
+ $("progress").textContent = "Question " + (idx + 1) + " of " + Q.length;
+ $("question").textContent = item.q;
+ for (let i = 0; i < 3; i++) {
+ const b = $("opt" + i);
+ b.textContent = item.o[i];
+ b.disabled = false;
+ b.className = "opt";
+ }
+ $("feedback").hidden = true;
+ $("next").hidden = true;
+ $("next").textContent = idx === Q.length - 1 ? "See score" : "Next";
+ }
+ function pick(i) {
+ if (answered) return;
+ answered = true;
+ const item = Q[idx];
+ const ok = i === item.a;
+ if (ok) score++;
+ for (let k = 0; k < 3; k++) {
+ const b = $("opt" + k);
+ b.disabled = true;
+ if (k === item.a) b.className = "opt right";
+ else if (k === i) b.className = "opt wrong";
+ }
+ $("feedback").textContent = (ok ? "Correct. " : "Not quite. ") + item.e;
+ $("feedback").hidden = false;
+ $("next").hidden = false;
+ }
+ function advance() {
+ if (!answered) return;
+ idx++;
+ if (idx >= Q.length) {
+ $("quiz").hidden = true;
+ $("done").hidden = false;
+ $("result").textContent = "Your score: " + score + " out of " + Q.length;
+ } else show();
+ }
+ function restart() {
+ idx = 0; score = 0;
+ $("done").hidden = true;
+ $("quiz").hidden = false;
+ show();
+ }
+ for (let i = 0; i < 3; i++) $("opt" + i).addEventListener("click", () => pick(i));
+ $("next").addEventListener("click", advance);
+ $("restart").addEventListener("click", restart);
+ show();
</script>
</body>
</html>

Tests and hashes

Download any part and hash it with keccak256. Each must match, and the receipt hash is what was attested.

  • shows first questionPassed
  • correct answer feedbackPassed
  • wrong answer feedbackPassed
  • moves to question 2Passed
  • perfect scorePassed
  • zero scorePassed