🛠️ The System Hardening Problem
"By Sprint 8, your pipeline should not need you anymore for the parts you built in Sprint 3. If it still does, that's not a feature gap — that's unfinished automation."
Sprint 7 tested whether your team could run a professional Scrum cycle. Sprint 8 tests something different: whether the system you built can survive contact with reality without a human quietly patching it every week.
One real example from this cohort: a team hit an LLM API rate limit mid-pipeline last week. They didn't panic and they didn't rebuild anything — they simply switched to a non-rate-limited model and kept moving. That's the standard for Sprint 8. Not "never hit a failure" — recover from failure without a fire drill.
Sprint 8 exists to get every team there. Minimal human intervention is the centrepiece of this sprint. Every role's work this sprint should be judged against one question: if you were unavailable this week, would the pipeline still run?
The dangerous thing about an unhardened pipeline is that it looks fine right up until the week something breaks and nobody's around to fix it by hand. The question to ask isn't "did it run this week" — it's "what happens the week it doesn't?"
Monday: pipeline runs fine.
Tuesday–Thursday: an API call fails silently, or returns malformed data.
Friday: someone notices the output looks wrong, opens the code, patches it by hand.
Saturday: pipeline runs again — because a human intervened, not because the system recovered.
This is not resilience. This is a human pretending to be the system's error handling. A hardened pipeline catches the same failure automatically — retries, falls back, or flags it clearly — without anyone opening an editor.
By the end of Sprint 8, your team should be able to answer yes to each of these:
• Did this week's prediction run without anyone manually editing a data file or re-running a failed step?
• If an API call failed or returned bad data, did the pipeline handle it — retry, fallback, or a clear error — rather than silently producing wrong output?
• Could someone unfamiliar with your code trigger the whole pipeline from one command or one GitHub Actions run?
• Has your team started assigning who presents which segment on Demo Day?
If the answer to any of these is no, that's exactly what Sprint 8 is for. Sprint 9 is the final sprint, not a scramble to finish hardening.
It doesn't mean no humans ever touch the system. It means the weekly prediction cycle — fetch data, run agents, synthesize, score — completes without someone babysitting each step. A team member reviewing and approving the output before it's posted is expected. A team member manually re-running a crashed step or hand-fixing a data file every week is the thing to eliminate this sprint.
Every pipeline has a strict execution order. Violating it does not just delay one step — it collapses the entire sprint into Sunday night.
R8 cannot start until R3, R4, R5 have all committed. R7 cannot apply the Wild Card until R8 has logged all LLM responses. R9 cannot cut the tag until R7 has committed the final prediction. One missing link collapses the entire chain.
R2's job is to watch this chain. Not on Sunday. From Monday. The moment any link looks uncertain, R2 acts.
"R3 — your Almanac output needs to be committed by Wednesday noon. R8 is blocked until it lands. If something is stopping you, tell me now and we'll solve it together. If you need to swap the role with someone else this sprint, we can do that too."
That conversation on Tuesday takes two minutes. The equivalent conversation on Saturday takes two hours and produces a worse result.
GitHub Actions triggered after Sprint Day 5 (Friday) US market close — Saturday morning SGT. Run log is the evidence.
vW30Exact format: lowercase
v, capital W, two digits. The immutable record that the sprint was sealed on time.
New this sprint. R2 must commit a
standup_midweek_W30.md by Wednesday (Sprint Day 3) showing all roles checked in and any blockers surfaced. This is assessed.
The following are R2's mandatory deliverables this sprint. Each is assessable. Each must be committed to the repository with a timestamp that proves it happened before the stated deadline.
sprint_goal_W30.md committed before end of Monday. Discord sprint goal post timestamped.standup_midweek_W30.md.
standup_midweek_W30.md committed by Wednesday 23:59 SGT. Must name every role and their status. Blockers must include R2's response action — not just acknowledgement.standup_midweek_W30.md should have flagged it Wednesday.retrospective_W30.md committed before Sunday midnight. Must reference the mid-week check-in and whether it caught anything.| When | What happens | R2's responsibility |
|---|---|---|
| Day 1 (Mon) | SPRINT PLANNING Sprint goal, roles, DoD, dependency order reviewed. |
Facilitate. Ensure every role knows who depends on them. Commit sprint goal today. |
| Tue–Wed | EXECUTION + CHECK-IN R3–R5 agent work. R8 wires API calls. R6 confirms Friday fetch scheduled. |
Contact every role individually by Wednesday. Not a group message. Each person, each role status. Commit standup_midweek_W30.md by Day 3 (Wed):59. |
| Day 4 (Thu) | SYNTHESIS GATE R8 cannot run LLMs until R3, R4, R5 have all committed. This is the dependency gate. |
Confirm all agent outputs are committed before R8 starts. If not — escalate immediately, not tomorrow. |
| Sat morning SGT | AUTOMATED FETCH GitHub Actions collects Sprint Day 5 (Friday) US closes. No manual action needed if pipeline works. |
Monitor that the fetch ran. If it failed — R2 surfaces it to R9 immediately. |
| Day 6 (Sat) | HUMAN REVIEW R7 Wild Card. R9 merges all branches. R10 delta scoring begins. |
Confirm all branches merged by end of Saturday. Chase R10 if delta scoring hasn't started. |
| Day 7 (Sun) · 23:59 | SPRINT SEALEDvW30 tag cut. Discord submission posted. Retrospective committed. |
Confirm all DoD items checked. R2 signs off before R9 cuts the tag. |
standup_midweek_W30.md committed by Wednesday (Sprint Day 3) 23:59 SGT is mandatory. It must name every role, confirm their status, and document any blockers with R2's response action. A check-in that says "everyone is fine" with no specifics does not count.
By the end of Sprint 8, every team must have assigned which role presents which pipeline segment on Demo Day. Sprint 9 is the final sprint — it should not start with "who's presenting what" still undecided.
Start writing the narrative you'll present on Demo Day: Level 1 in Week 1 → where you are now. What changed, what broke, what you learned fixing it. This does not need to be polished this sprint — it needs to exist so Sprint 9 is refinement, not a first draft under pressure.
standup_midweek_W30.md. Open Monday presentation. Lead retrospective. Surface blockers before Sunday.vW30 tag before Sunday midnight. Show Actions log Monday.standup_midweek_W30.md committed by 23:59. Blockers surfaced and acted on today — not Sunday.Post in your team channel before Sunday Sprint Day 7 (Sunday) 23:59 SGT.
TEAM: Team __ / Practical __ SPRINT: 8 · vW30 GITHUB REPO: RELEASE LINK: ━━━ SM CHECK-IN (R2) ━━━ standup_midweek_W30.md committed by Sprint Day 3 (Wed): Y/N Blockers surfaced mid-week: Y/N If Y — what was the blocker and how was it resolved: Did any dependency slip past Wednesday: Y/N If Y — what will change in Sprint 8: ━━━ SPRINT GOAL ━━━ Our Sprint 8 goal was: Did we meet it: Y / Partial / N ━━━ PREDICTION ━━━ File committed (prediction_W30.json or .md): Y/N SPX direction + confidence: NDX direction + confidence: IWM direction + confidence: All 11 sectors covered: Y/N Human Score Wild Card applied: Y/N Wild Card reasoning: ━━━ PIPELINE ━━━ Automated fetch ran Sat morning SGT: Y/N GitHub Actions run URL: All branches merged before tag: Y/N ━━━ AGENTS (all committed before R8 synthesis) ━━━ Almanac R3 committed by Wed: Y/N Macro R4 committed by Wed: Y/N Technical R5 committed by Wed: Y/N ━━━ AI SYNTHESIS ━━━ LLM 1 via API: Y/N · model: LLM 2 via API: Y/N · model: Responses saved as files: Y/N Comparison table committed: Y/N ━━━ CALIBRATION ━━━ delta_W30.md committed: Y/N vW30 SPX direction correct: Y/N · error %: vW30 NDX direction correct: Y/N · error %: vW30 IWM direction correct: Y/N · error %: ━━━ SCRUM HEALTH ━━━ retrospective_W30.md committed: Y/N Every role R1–R10 ready to present Mon Sprint Day 8: Y/N One thing R2 will do differently in Sprint 8:
If your team is hitting rate limits or does not want to pay for API access, the following options are free, API-accessible, and capable enough for this pipeline. You do not need GPT-4 for market synthesis. You need consistent structured output — and all three options below deliver that.
Cost: Free. No credit card required.
Limits: 15 requests/minute · 1,000,000 tokens/day — far more than a weekly pipeline needs.
Get your key: aistudio.google.com → Sign in with Google → Get API key → Create API key.
Model string: gemini-1.5-flash
Store as: GitHub Secret GEMINI_API_KEY
Cost: Free. No credit card required.
Limits: 14,400 requests/day · 6,000 tokens/minute — effectively unlimited for a once-a-week pipeline.
Get your key: console.groq.com → Sign up → API Keys → Create API Key.
Model string: llama-3.1-70b-versatile
Store as: GitHub Secret GROQ_API_KEY
Cost: Free tier includes Llama 3.1 70B, Mistral 7B, Gemma 2 9B, Qwen 2.5 72B.
Get your key: openrouter.ai → Sign up → Keys → Create Key.
Model string: meta-llama/llama-3.1-70b-instruct:free
Store as: GitHub Secret OPENROUTER_API_KEY
Already used by Team A in this cohort — proven to work for this exact pipeline.
Rate limits are almost always caused by repeated testing — running the full pipeline manually multiple times during the week while developing. The fix is simple: test with short prompts and small inputs during development. Let the GitHub Actions workflow make the real call on Friday night. One call per model per sprint. Free tiers are designed for exactly this cadence — they are not designed for a developer calling the API 50 times in an hour.
Store your API key as a GitHub Secret (GEMINI_API_KEY, GROQ_API_KEY, etc). The workflow reads it from the secret. You never hardcode it in your script. You never paste it in Discord.
If your current API setup is working — keep it. These options are alternatives for teams who are hitting limits or do not want to pay. You do not need to switch if your pipeline is running correctly.
Posting "hey everyone how are you going" in the team channel is not a mid-week check-in. R2 must contact each role member individually, confirm their specific deliverable, confirm its status, and document the result in standup_midweek_W30.md. The file must name each role (R3, R4, R5...) with a status line and any blocker. Generic check-ins score zero.
This is the rule that Sprint 7 teams broke when dependencies collapsed. R8 synthesises what the agents have produced. If R8 synthesises without agent outputs — the synthesis is based on the LLMs' own knowledge, not your team's research. That is not a pipeline. That is prompt engineering. They are not the same thing.
Lowercase v, capital W, two digits. W30, vw30, v1.0.0 all result in no credit for the release. Put it on the DoD checklist. Check it explicitly. Do not rely on memory.
You are not being assessed on whether you predicted the market correctly. You are being assessed on whether your team ran a professional delivery cycle — planned, executed, reviewed, and retrospected — with a system that improves sprint over sprint. R2 is the role that makes that cycle work. Sprint 8 is R2's sprint.