vW4 CP3405 · Design Thinking III
TR3 2026
Starts Monday 28 Sep — dashboard live Tuesday 29 Sep — prediction locks Wednesday 30 Sep 23:59 SGT — everything else due Saturday 3 Oct 23:59 SGT (not Sunday) — presented Monday 5 Oct

Sprint 4 — vW4 — Predict Three Markets, Defend Your Call

Last sprint you automated. This sprint your team makes a real call on three markets, locks it, and can explain it out loud. Then you build the last two stages of the system architecture: measuring how far off you were, and deciding what to change.

The Sprint Goal

Lock a three-market prediction by Wednesday night, defend it on Monday, then work out how far off you were (the delta) and decide one concrete change for next sprint (the prescription), and show the whole chain on your team dashboard. The dashboard also shows who holds each role, and tracks your team's GitHub and FigJam activity, and it stays live and up to date all week.

Two New Ideas This Sprint: Delta and Prescription

These are Stages 6 and 7 of the system architecture. They are new this sprint, so here they are in plain words. In Scrum terms: your prediction is the sprint's work, the delta is your Sprint Review of it, and the prescription is your Retrospective action item.

Delta = the gap between what you predicted and what actually happened. It answers three questions:
  1. How far off were you? The size of the error.
  2. Was the direction right? Did you call up when it went down?
  3. Which agent pulled you furthest the wrong way? Look at what each of your agents (Almanac, Macro, Technical) and the LLMs said that week, and see which one pointed furthest from what happened and how much your final call leaned on it.
Prescription = the one change you make because of the delta. It is not a general reflection like "we should be more careful". It is a specific change to how you make next sprint's call. That usually means changing how much you lean on an agent (its "weight"), or adding a check to your process. You don't need any maths: "we lean less on the Almanac and more on Technical, because the Almanac was furthest off" counts. A number is optional.

Worked example (invented numbers, not real markets)

StepExample
What you predictedA market's closing level of 5,000, up from last Friday's close of 4,980
What actually happenedIt closed at 5,050
Delta: how far off50 points, which is about 1.0% of 5,050
Delta: directionRight. It went up, as you called
Delta: which agentThe Technical agent said "up strongly" and the Macro agent said "up". The Almanac agent said "down" and pulled the final call lower than the market went. So the Almanac contributed most to the miss
Prescription"Lean less on the Almanac agent for the next call, because its 'down' view was furthest from the outcome. Add a check: if the Almanac disagrees with both other agents, R5 must ask why before we accept it."
Your version uses your own Sprint 3 numbers. Take your team's Sprint 3 S&P 500 prediction and the actual close, 7,743.41 (the close of market on Friday 25 Sep). Work out the delta, then write one prescription. R4 leads on the delta, and R4 and R1 write the prescription together.

Prediction Challenge — Three Markets

Deadline: Wednesday 30 Sep, 23:59 Singapore time. Miss it and your team has no entry this week. Nothing can be added afterwards.
MarketYou predictWhere to read itOwner
S&P 500 (^GSPC)The closing level on Friday 2 OctYahoo Finance · ^GSPC historyR2
Nasdaq-100 (^NDX)The closing level on Friday 2 OctYahoo Finance · ^NDX historyR3
Gold futures /GC, December 2026 (GCZ26.CMX)Direction only: UP or DOWN. Will Friday 2 Oct's close be above or below Friday 25 Sep's close?Yahoo Finance · GCZ26.CMX (then click Historical Data)R4

How to read the close

The close is the close of market on Friday. Markets don't trade on Saturday, so Friday's close is the last price of Friday's New York session. That lands early Saturday morning in Singapore (stocks about 4:00 pm New York = 04:00 SGT; gold futures about 5:00 pm New York = 05:00 SGT). Check Saturday morning or later.

  1. Open the market's Historical Data page on Yahoo Finance, set to Daily.
  2. Find the row for the date.
  3. Read the Close column. Not Adj Close.

Source of record: Yahoo Finance, so every team is scored against the same number. If it's unreachable for the two indices, use Google Finance and say so in your commit message. For gold, use the same source for both Fridays.

Gold example (invented numbers): Friday 25 Sep close 3,000 and Friday 2 Oct close 3,040 means UP. The size of the move doesn't matter, only the direction. An identical close counts as no result. GCZ26.CMX means gold futures (GC), December (Z), 2026, on COMEX. Always use this exact contract for both Fridays, because a different contract month has a different price.

Your Entry: predictions/vW4.json

One file, one prediction per team, on main in your team repo.

{
  "sprint": "vW4",
  "team": "team-N",
  "team_call": { "spx_close": 0.00, "ndx_close": 0.00, "gold_direction": "UP" },
  "why": {
    "spx":  "One sentence: what you relied on for this call.",
    "ndx":  "One sentence.",
    "gold": "One sentence."
  },
  "leads": { "spx": "github-username (R2)", "ndx": "github-username (R3)", "gold": "github-username (R4)" },
  "r1_confirms": true
}

What counts as your entry

Whatever is on main at Wednesday 23:59 Singapore time, judged by when GitHub received your push (not the date on your commit). After that, the prediction is fixed.

Defend It on Monday

You must be able to defend your prediction in the practical on Monday 5 Oct. It's an oral conversation, not a written test, and it isn't marked. We take your one sentence and ask about the real thinking behind it: which agent output, which LLM view, what the Human Score decided, and why. Any team member can be asked, not just the owner of that market.
WeakGood (invented examples)
"I think the market will go up.""Support near 4,960 held twice last week and Friday's jobs report is the main risk, so I expect a modest rise."
"Gold will fall.""Rate-cut expectations were pushed out after the inflation data, which usually weighs on gold, and it has failed twice at its recent high, so I say DOWN."

A good sentence names something specific we can ask about: a level, a dated event, a pattern and where it came from. Keep the files behind it committed before the deadline (your R2 and R3 outputs, the LLM log, the Human Score) so you can open them on the day.

The Backlog — All Six Roles, In Concert

R1Product Owner & Scrum Master: file the entry, check every sentence

File predictions/vW4.json and name the three owners. Chase the three owners for their sentences, and check none is missing. Commit checkin/wednesday.md by Wednesday 12:00 — use the check-in template: contact each role member individually and write down what they actually did and what’s blocking them, in their own terms, not a one-word label and not a copy of the group chat. Confirm every teammate has GitHub write access and FigJam edit access before the Wednesday deadline. Keep data/roles.json: the student name and GitHub username in each role R1–R6, for every sprint so far, with a new entry at the start of each sprint because roles rotate. Also update data/figjam_status.json every day: the cards in each FigJam column and, for every Done card, its Discord message link. With R4, write the prescription.

DONE MEANS — a complete entry filed before Wednesday 23:59, a per-role check-in committed, every FigJam card moved to Done linking a Discord message, and a FigJam status file updated every day.
R2Almanac & Macro: back the calls, own the S&P 500 call

Almanac and macro outputs covering all three markets, committed before the LLMs are queried. You own the S&P 500 call and its sentence.

DONE MEANS — outputs committed for all three markets, and an S&P 500 sentence you can defend.
R3Technical: back the calls, own the Nasdaq-100 call

Technical outputs covering all three markets, committed before the LLMs are queried. You own the Nasdaq-100 call and its sentence. With R6, create instruments.json: one file listing every ticker and its Yahoo source, so no script hard-codes a ticker.

DONE MEANS — technical outputs for all three markets, a Nasdaq-100 sentence you can defend, and instruments.json committed.
R4Data & Calibration: own the gold call, measure the miss

You own the gold call and its sentence. Record the Friday closes, with the source URL, in actuals/vW4.json. Then work out the delta (explained above) for your Sprint 3 S&P 500 prediction with a small script, and save it as delta/vW4.json with a short narrative. With R1, write the prescription, one specific change for next sprint, in prescriptions/vW4.json.

DONE MEANS — a gold sentence you can defend, a delta produced by a committed script (not worked out by hand), and one specific change for next sprint, justified by the delta.
R5Human Score & UI: judge the calls, build the dashboard

Human Score on each of the three markets in human-score/vW4.json: confirm, adjust or override the owner's number, with the reason written down. Then build your team dashboard at ui/index.html (see below) and keep it live all week: the Roles, GitHub and FigJam panels by Tuesday night, the Predictions panel with the prediction on Wednesday, the rest by Saturday.

DONE MEANS — a Human Score for all three markets before the deadline, and a dashboard with all eight panels, live and current all week, reading committed data files.
R6LLM & GitHub: query the models, ship the release

Query ChatGPT, Gemini and DeepSeek with identical prompts on all three markets. Build Stage 3, LLM Synthesis (llm-synthesis/vW4.json): where the models agreed and diverged, per market, before the Human Score, plus a narrative. Commit all evidence, keep the folder clean, create the vW4 release tag, and verify the link. Write a small script that reads your repo's commits for the current sprint and writes data/github_activity.json, keeping the entries for earlier sprints. Run it and commit the result every day.

DONE MEANS — synthesis committed before the Wednesday deadline, a clean repo, a release tag that opens, and a GitHub activity file refreshed every day.

Your Dashboard: Your Live Weekly Tracker

Your dashboard is how your team's week is tracked. It must be live and up to date all week, not built at the end. We will open it at any point during the week. If a panel is empty or out of date, that is what we will ask about.

Style it however you like. The structure is the same for every team, so anyone can find what they're looking for.

PanelAttributeReadsLive by
Roles: for every sprint so far, the student name in each role R1–R6, with the current sprint highlighteddata-panel="roles"data/roles.jsonTue 29 Sep 23:59, then a new entry each sprint
GitHub Activity: for each sprint, commits per role and per student, last commit time, the ten latest commitsdata-panel="github"data/github_activity.jsonTue 29 Sep 23:59, then refreshed daily
FigJam Activity: the cards in To Do, In Progress, Review and Done, with a Discord link on every Done carddata-panel="figjam"data/figjam_status.jsonTue 29 Sep 23:59, then updated daily
Predictions: the three calls, each owner, each one-sentence reasondata-panel="predictions"predictions/vW4.jsonWed 30 Sep 23:59
LLM Synthesisdata-panel="llm-synthesis"llm-synthesis/vW4.jsonSat 3 Oct 23:59
Human Scoredata-panel="human-score"human-score/vW4.jsonSat 3 Oct 23:59
Delta: predicted vs actual, how far off, right or wrong direction, which agent pulled you offdata-panel="delta"delta/vW4.jsonSat 3 Oct 23:59
Prescription: the one change for next sprintdata-panel="prescription"prescriptions/vW4.jsonSat 3 Oct 23:59

What the Roles, GitHub and FigJam panels should show (invented data)

Real activity, not just links. A link to your repo or your board is not enough. The panels show what your team has actually done, so a gap is visible midweek while there's still time to fix it. Every panel also shows when it was last updated.

Roles, one row per sprint, so the rotation is visible:

SprintR1R2R3R4R5R6
vW3Alex TanBen LeeChen WeiDana NgEli KohFay Lim
vW4 (this sprint)Fay LimAlex TanBen LeeChen WeiDana NgEli Koh

GitHub Activity, last updated Tue 29 Sep 21:40:

RoleWhoCommits since MonLast commit
R1student-a4Tue 20:12
R2student-b3Tue 18:30
R3student-c5Tue 21:05
R4student-d0none yet
R5student-e6Tue 21:40
R6student-f2Mon 22:15

Plus the ten latest commits (role, author, message, time).

FigJam Activity, last updated Tue 29 Sep 21:30:

To DoIn ProgressReviewDone
Write gold sentence (R4)
Build delta script (R4)
Release tag vW4 (R6)
Technical outputs (R3)
Dashboard panels (R5)
Almanac and macro notes (R2)Wednesday check-in (R1) + Discord link
Access confirmed (R1) + Discord link

Notice that R4 has no commits yet in the first table. That is exactly what this panel is for.

Tuesday's first version: you can fill in data/github_activity.json and data/figjam_status.json by hand to get the panels live. After that they must be refreshed every day.

Keeping it fresh

What goes in each file

FileRequired fields
data/roles.jsonfor every sprint so far (vW1, vW2, vW3, vW4…): the sprint's start date and, for each of R1–R6, the student's name and GitHub username
data/github_activity.jsonupdated_at; for each sprint, per role: the student's name, commits and last commit time; the ten latest commits (role, author, message, time)
data/figjam_status.jsonupdated_at, board_url; the four columns, each a list of cards (title, owner role); every Done card also has its discord_link
llm-synthesis/vW4.jsonper market: each model's view, whether they agree (yes/no), the divergence note; plus narrative
human-score/vW4.jsonper market: score, decision (confirm / adjust / override), justification
delta/vW4.jsonmarket, predicted, actual, error, error_pct, direction_correct, the agent that pulled you furthest off; plus narrative
prescriptions/vW4.jsonthe agent, the change (lean more or less on it, or add a check), the reason

Then: Write It Up and Present

Bring your locked prediction, your dashboard, and your delta and prescription to Monday's session. Be ready to show the dashboard, not just describe it.
Use the Sprint 4 Presentation Template (PowerPoint, downloadable). Same six-role structure as before, updated for this sprint — three-market Prediction Challenge on the cover, Delta & Prescription table on R4's slide, and a role-rotation slide right after it.

Everything You Hand In

Everything else is due Saturday 3 Oct at 23:59 Singapore time. Not Sunday. Nothing is due on Sunday 4 Oct.
WhatOwnerDue
predictions/vW4.json: the team's call on all three markets, one sentence per call, R1 confirmationR1 (owners write the sentences)Wed 30 Sep 23:59
R2 and R3 outputs, llm-synthesis/vW4.json, human-score/vW4.json, all committed before the deadlineR2, R3, R6, R5Wed 30 Sep 23:59
Roles, GitHub Activity and FigJam Activity panels live in ui/index.html, then refreshed every dayR5 (panels), R1 (roles and FigJam files), R6 (GitHub file)Tue 29 Sep 23:59, then daily
Predictions panel live in ui/index.htmlR5Wed 30 Sep 23:59
checkin/wednesday.md: individual per-role statusR1Wed 30 Sep 12:00
actuals/vW4.json, delta/vW4.json and its scriptR4Sat 3 Oct 23:59
prescriptions/vW4.jsonR4 + R1Sat 3 Oct 23:59
Dashboard with all eight panels, currentR5Sat 3 Oct 23:59
instruments.jsonR6 + R3Sat 3 Oct 23:59
Release tag vW4, link verifiedR6Sat 3 Oct 23:59
Working commits from every role R1–R6, at least 5 eachAll sixSat 3 Oct 23:59
Every FigJam card in Done links a Discord messageR1Sat 3 Oct 23:59
Three real deadlines. Tuesday night: dashboard live with roles, GitHub and FigJam activity. Wednesday night: the prediction (R1's check-in is due earlier, at Wednesday 12:00). Saturday night, 3 Oct 23:59: everything else. Not Sunday, and not Monday morning. The dashboard is refreshed every day in between. Monday is presentation day, not build day.

Monday 5 Oct — Start With Your Progress

Before your presentation proper, every team opens with a short live progress block. Live means the real thing open on screen, not screenshots.

Then your presentation, and the oral defense of your prediction.

Timeline

When (Singapore time)What
Mon 28 SepSprint 4 starts
Tue 29 Sep 23:59Dashboard live with Roles, GitHub and FigJam panels, updated with real data
Wed 30 Sep 12:00Individual per-role check-in committed (R1)
Wed 30 Sep 23:59Prediction locked: file, sentences, R1 confirmation and the Predictions panel
Fri 2 OctThe target Friday. The US close lands early Saturday morning Singapore time
Sat 3 Oct 23:59Everything else due (Saturday, not Sunday)
Sun 4 OctNothing is due. Your work is reviewed ahead of Monday
Mon 5 OctLive progress block, presentation, oral defense