{
  "schemaVersion": 1,
  "canonicalUrl": "https://comp.anu.edu.au/courses/comp4020-agentic-coding-studio/",
  "course": {
    "code": "COMP4020 / COMP8020",
    "title": "Agentic Coding Studio",
    "session": "Semester 2, 2026",
    "startDate": "2026-07-27",
    "endDate": "2026-10-30",
    "description": "A studio-based course on rapidly prototyping web apps with LLM-based coding agents. Each week pairs a lecture on concepts and techniques with a studio crit session where you demo your work-in-progress prototype and get feedback from peers and tutors.",
    "tags": [],
    "learningOutcomes": [
      "design, build and test full-stack web applications using a rapid-prototyping process",
      "explain how LLM-based coding agents work, including model capabilities, tool use and context management",
      "design and evaluate different LLM agent workflows for software development",
      "apply principles from the scholarly literature to work-in-progress and finalised software prototypes"
    ]
  },
  "timezone": "Australia/Canberra",
  "nodes": [
    {
      "id": "topics/agent-loops",
      "type": "topics",
      "title": "Agent loops",
      "description": "Every coding agent is the same small machine: a model, a set of tools, and a loop that runs until the job is done",
      "tags": [
        "agentic-coding"
      ],
      "related": [
        "topics/backpressure",
        "topics/agentic-tool-catalogue",
        "topics/context-engineering",
        "topics/github-pages-deployment",
        "lectures/week-1"
      ]
    },
    {
      "id": "topics/agentic-tool-catalogue",
      "type": "topics",
      "title": "Agentic coding tool catalogue",
      "description": "A tour of the agents, harnesses, MCP servers and other tools used in agentic coding",
      "tags": [
        "agentic-coding"
      ],
      "related": [
        "topics/agent-loops",
        "topics/generating-images",
        "topics/skills",
        "topics/spec-driven-development",
        "topics/task-tracking"
      ]
    },
    {
      "id": "topics/ai-use-and-integrity",
      "type": "topics",
      "title": "AI use and academic integrity",
      "description": "Using AI tools in this course is allowed and expected, for students and convenors/tutors alike — this page gives a bit more detail on what that means in practice",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/assessment",
        "topics/llm-access",
        "topics/crit-agents",
        "topics/ethics"
      ]
    },
    {
      "id": "topics/assessment",
      "type": "topics",
      "title": "Assessment",
      "description": "The model behind the three assignments and how everything is marked: the shared rubric, what you submit, deadlines, extensions, and appeals",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/ai-use-and-integrity",
        "topics/participation",
        "topics/studio-crit-model",
        "topics/whats-yours-in-the-work",
        "crits/01-forgotten-web",
        "crits/02-unsolicited-redesign",
        "crits/03-a1-retro",
        "crits/04-instrument",
        "crits/05-game",
        "crits/06-a2-retro",
        "crits/07-anu-system",
        "crits/08-its-alive",
        "crits/09-all-at-once",
        "crits/10-fly-by-instruments",
        "assessments/assignment-1",
        "assessments/assignment-2",
        "assessments/final-project",
        "lectures/week-1",
        "lectures/week-2",
        "lectures/week-5"
      ]
    },
    {
      "id": "topics/backpressure",
      "type": "topics",
      "title": "Backpressure",
      "description": "Most of harness engineering is giving good negative feedback: the model generates, and the harness rejects what's wrong, fast and automatically",
      "tags": [
        "agentic-coding"
      ],
      "related": [
        "topics/modern-web-best-practices",
        "topics/task-tracking",
        "topics/studio-crit-model",
        "topics/evaluating-agent-output",
        "topics/agent-loops",
        "topics/context-engineering",
        "topics/end-to-end-tracing",
        "topics/github-actions-basics",
        "topics/skills",
        "topics/spec-driven-development",
        "topics/static-site-generators",
        "crits/05-game",
        "lectures/week-3",
        "lectures/week-5",
        "lectures/week-6"
      ]
    },
    {
      "id": "topics/claude-code-cheatsheet",
      "type": "topics",
      "title": "Claude Code cheatsheet",
      "description": "CLAUDE.md, /clear, plan mode, and the rest of the Claude Code habits the course uses, all on one page",
      "tags": [
        "admin",
        "agentic-coding"
      ],
      "related": [
        "topics/onboard",
        "topics/skills",
        "topics/spec-driven-development",
        "lectures/week-2",
        "lectures/week-3",
        "lectures/week-4"
      ]
    },
    {
      "id": "topics/code-of-conduct",
      "type": "topics",
      "title": "Code of conduct",
      "description": "How we treat each other in this course",
      "tags": [
        "admin"
      ],
      "related": []
    },
    {
      "id": "topics/communication",
      "type": "topics",
      "title": "Communication",
      "description": "Where to go for what, and what each channel is actually for",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/course-as-experiment",
        "lectures/week-1"
      ]
    },
    {
      "id": "topics/context-engineering",
      "type": "topics",
      "title": "Context engineering",
      "description": "The context window is the agent's working memory. Keep one coherent task in it, load what the task needs, and start clean when the work changes",
      "tags": [
        "agentic-coding"
      ],
      "related": [
        "topics/agent-loops",
        "topics/backpressure",
        "topics/skills",
        "topics/task-tracking",
        "topics/llm-access",
        "topics/evidence-of-practice",
        "topics/interactive-pages",
        "lectures/week-4"
      ]
    },
    {
      "id": "topics/course-as-experiment",
      "type": "topics",
      "title": "This course is an experiment",
      "description": "COMP4020/8020 is running for the first time, so here's how we'll keep you in the loop, and keep things fair, as it evolves",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/course-overview",
        "topics/communication",
        "topics/software-and-platforms",
        "topics/crit-agents",
        "topics/ethics",
        "topics/following-along",
        "lectures/week-1"
      ]
    },
    {
      "id": "topics/course-overview",
      "type": "topics",
      "title": "Course overview",
      "description": "Learning outcomes, structure, and expectations",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/course-as-experiment",
        "lectures/week-1"
      ]
    },
    {
      "id": "topics/crit-agents",
      "type": "topics",
      "title": "Crit agents",
      "description": "The named agents, one per crit group, that sit the same coursework you do and remember what they built with you",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/studio-crit-model",
        "topics/course-as-experiment",
        "topics/ai-use-and-integrity",
        "topics/following-along",
        "lectures/week-1"
      ]
    },
    {
      "id": "topics/decision-records",
      "type": "topics",
      "title": "Decision records",
      "description": "An architecture decision record is a short document capturing one decision, its context and its consequences, kept in the repo beside the code",
      "tags": [
        "agentic-coding"
      ],
      "related": [
        "topics/evidence-of-practice",
        "lectures/week-8"
      ]
    },
    {
      "id": "topics/end-to-end-tracing",
      "type": "topics",
      "title": "End-to-end tracing",
      "description": "Follow one working request across every boundary before asking the agent to change it, then verify the same path after the edit",
      "tags": [
        "agentic-coding"
      ],
      "related": [
        "topics/forms-and-state",
        "topics/backpressure",
        "topics/spec-driven-development",
        "lectures/week-7"
      ]
    },
    {
      "id": "topics/enrolment",
      "type": "topics",
      "title": "Enrolment",
      "description": "Permission codes, crit-group registration, late enrolments, pre-requisites, the census date, and joining after week 1",
      "tags": [
        "admin"
      ],
      "related": []
    },
    {
      "id": "topics/ethics",
      "type": "topics",
      "title": "Ethics",
      "description": "Should this course even exist? And should you take it?",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/software-and-platforms",
        "topics/course-as-experiment",
        "topics/ai-use-and-integrity"
      ]
    },
    {
      "id": "topics/evaluating-agent-output",
      "type": "topics",
      "title": "Evaluating agent output",
      "description": "The agent says it's done. Verifying that claim means running the thing, and keeping enough understanding of it to answer for what shipped",
      "tags": [
        "agentic-coding"
      ],
      "related": [
        "topics/backpressure",
        "topics/studio-crit-model",
        "topics/modern-web-best-practices",
        "topics/evidence-of-practice",
        "topics/github-actions-basics",
        "lectures/week-5"
      ]
    },
    {
      "id": "topics/evidence-of-practice",
      "type": "topics",
      "title": "Evidence of practice",
      "description": "Reconstruct one consequential decision from the transcript and the git log, diagnose the habit behind it, and change the practice from evidence rather than memory",
      "tags": [
        "agentic-coding"
      ],
      "related": [
        "topics/evaluating-agent-output",
        "topics/context-engineering",
        "topics/decision-records",
        "lectures/week-6"
      ]
    },
    {
      "id": "topics/following-along",
      "type": "topics",
      "title": "Following along from outside",
      "description": "The coursework is public end to end. Here's what anyone, or anything, outside the enrolled cohort can and can't do with it",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/course-as-experiment",
        "topics/crit-agents"
      ]
    },
    {
      "id": "topics/forms-and-state",
      "type": "topics",
      "title": "Forms and state",
      "description": "A form turns a user's action into a request; the server validates it, changes state and returns the next representation",
      "tags": [
        "web"
      ],
      "related": [
        "topics/how-browsers-work",
        "topics/running-in-production",
        "topics/end-to-end-tracing",
        "topics/persistence",
        "lectures/week-7"
      ]
    },
    {
      "id": "topics/generating-images",
      "type": "topics",
      "title": "Generating images",
      "description": "How to generate images for your prototypes --- placeholders first, then a third-party text-to-image API",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/llm-access",
        "topics/agentic-tool-catalogue",
        "topics/onboard"
      ]
    },
    {
      "id": "topics/github-actions-basics",
      "type": "topics",
      "title": "GitHub Actions basics",
      "description": "CI is one idea — a check that runs the moment you push, on a machine that isn't yours. GitHub Actions is the instance you happen to be using",
      "tags": [
        "web"
      ],
      "related": [
        "topics/backpressure",
        "topics/evaluating-agent-output",
        "topics/github-pages-deployment",
        "topics/hosting-access",
        "topics/running-in-production",
        "lectures/week-6"
      ]
    },
    {
      "id": "topics/github-pages-deployment",
      "type": "topics",
      "title": "GitHub Pages deployment",
      "description": "You deploy from the first crit onwards, and GitHub Pages is how: push a commit, and a URL goes live",
      "tags": [
        "web"
      ],
      "related": [
        "topics/agent-loops",
        "topics/github-actions-basics",
        "topics/how-browsers-work",
        "topics/static-site-generators",
        "lectures/week-1",
        "lectures/week-3"
      ]
    },
    {
      "id": "topics/hosting-access",
      "type": "topics",
      "title": "Your hosting access",
      "description": "Every full-stack repo deploys to its own app on Fly.io — use the course token to deploy within the default resource limits",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/onboard",
        "topics/software-and-platforms",
        "topics/github-actions-basics",
        "topics/running-in-production",
        "lectures/week-7"
      ]
    },
    {
      "id": "topics/how-browsers-work",
      "type": "topics",
      "title": "How browsers work",
      "description": "Request, response, parse, render: what actually happens between typing a URL and pixels on screen",
      "tags": [
        "web"
      ],
      "related": [
        "topics/modern-web-best-practices",
        "topics/github-pages-deployment",
        "topics/forms-and-state",
        "lectures/week-2"
      ]
    },
    {
      "id": "topics/interactive-pages",
      "type": "topics",
      "title": "Interactive pages",
      "description": "Scrollytelling and playful interactivity in the neal.fun and pudding.cool genre, which is about as far as static goes",
      "tags": [
        "web"
      ],
      "related": [
        "topics/static-site-generators",
        "topics/context-engineering",
        "topics/modern-web-best-practices"
      ]
    },
    {
      "id": "topics/lecture-demos",
      "type": "topics",
      "title": "The lecture-demos repo",
      "description": "The public repo the live demo runs in. Clone it in week 1, pull to follow along, and reset at the start of each lecture",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/lecture-structure",
        "topics/onboard",
        "lectures/week-1",
        "lectures/week-2"
      ]
    },
    {
      "id": "topics/lecture-structure",
      "type": "topics",
      "title": "The lecture structure",
      "description": "How a lecture runs: one live demo launched on the premise you set and left running, two check-ins where you push it further, and Q&A to close",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/studio-crit-model",
        "topics/lecture-demos",
        "topics/onboard",
        "lectures/week-1"
      ]
    },
    {
      "id": "topics/llm-access",
      "type": "topics",
      "title": "Your LLM access",
      "description": "The course issues you a Claude API key. This page covers wiring it into Claude Code, what gets logged, and how your usage allocation works",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/software-and-platforms",
        "topics/onboard",
        "topics/ai-use-and-integrity",
        "topics/context-engineering",
        "topics/generating-images",
        "lectures/week-1",
        "lectures/week-4"
      ]
    },
    {
      "id": "topics/modern-web-best-practices",
      "type": "topics",
      "title": "Modern web best practices",
      "description": "Give the agent current guidance, verify the running artefact in a browser and add specialised checks only when they answer a specific question",
      "tags": [
        "web"
      ],
      "related": [
        "topics/backpressure",
        "topics/evaluating-agent-output",
        "topics/how-browsers-work",
        "topics/interactive-pages"
      ]
    },
    {
      "id": "topics/onboard",
      "type": "topics",
      "title": "Onboarding",
      "description": "The whole course setup as a terse checklist: accounts, tools, your API key, and the course skills plugin, each linking to the full how-to",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/software-and-platforms",
        "topics/llm-access",
        "topics/claude-code-cheatsheet",
        "topics/generating-images",
        "topics/hosting-access",
        "topics/lecture-demos",
        "topics/lecture-structure",
        "topics/participation",
        "lectures/week-1",
        "lectures/week-6"
      ]
    },
    {
      "id": "topics/participation",
      "type": "topics",
      "title": "Your participation",
      "description": "Everything the course asks of you, as one list — the week-1 setup, the weekly rhythm, the assignment deadlines and the standing responsibilities — with links to the detail",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/onboard",
        "topics/assessment",
        "topics/studio-crit-model",
        "lectures/week-1"
      ]
    },
    {
      "id": "topics/persistence",
      "type": "topics",
      "title": "Persistence",
      "description": "A full-stack app keeps its data in a database that outlives the process; a schema says what that data may be, and migrations record how it changes",
      "tags": [
        "web"
      ],
      "related": [
        "topics/forms-and-state",
        "topics/running-in-production",
        "lectures/week-8"
      ]
    },
    {
      "id": "topics/running-in-production",
      "type": "topics",
      "title": "Running in production",
      "description": "A deployed system needs durable data, protected secrets and enough logging to diagnose failures without exposing its users",
      "tags": [
        "web"
      ],
      "related": [
        "topics/hosting-access",
        "topics/github-actions-basics",
        "topics/forms-and-state",
        "topics/persistence",
        "lectures/week-7"
      ]
    },
    {
      "id": "topics/skills",
      "type": "topics",
      "title": "Skills",
      "description": "A skill packages instructions and scripts once, so the agent can load it on demand instead of you explaining the same thing every session",
      "tags": [
        "agentic-coding"
      ],
      "related": [
        "topics/context-engineering",
        "topics/backpressure",
        "topics/claude-code-cheatsheet",
        "topics/agentic-tool-catalogue",
        "lectures/week-4",
        "lectures/week-5"
      ]
    },
    {
      "id": "topics/software-and-platforms",
      "type": "topics",
      "title": "Software and platforms",
      "description": "What each platform is, who pays for what, and the course policies that come with working agentically on ANU infrastructure",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/course-as-experiment",
        "topics/ethics",
        "topics/hosting-access",
        "topics/llm-access",
        "topics/onboard",
        "crits/07-anu-system",
        "lectures/week-1"
      ]
    },
    {
      "id": "topics/spec-driven-development",
      "type": "topics",
      "title": "Spec-driven development",
      "description": "Read the problem and context in the brief, treat the spec as fixed, plan a response with the agent, then turn checkable clauses into tests",
      "tags": [
        "agentic-coding"
      ],
      "related": [
        "topics/task-tracking",
        "topics/agentic-tool-catalogue",
        "topics/backpressure",
        "topics/claude-code-cheatsheet",
        "topics/end-to-end-tracing",
        "lectures/week-2"
      ]
    },
    {
      "id": "topics/static-site-generators",
      "type": "topics",
      "title": "Static site generators",
      "description": "A static site generator is the build step between the content you write and the pages you ship",
      "tags": [
        "web"
      ],
      "related": [
        "topics/github-pages-deployment",
        "topics/backpressure",
        "topics/interactive-pages",
        "lectures/week-3"
      ]
    },
    {
      "id": "topics/studio-crit-model",
      "type": "topics",
      "title": "The studio crit model",
      "description": "How a studio crit works and how it's marked: the five beats of the session, the feedback protocol, and the two marks available each week",
      "tags": [
        "admin"
      ],
      "related": [
        "topics/assessment",
        "topics/crit-agents",
        "topics/task-tracking",
        "topics/backpressure",
        "topics/evaluating-agent-output",
        "topics/lecture-structure",
        "topics/participation",
        "topics/whats-yours-in-the-work",
        "crits/01-forgotten-web",
        "crits/02-unsolicited-redesign",
        "crits/03-a1-retro",
        "crits/04-instrument",
        "crits/05-game",
        "crits/06-a2-retro",
        "crits/07-anu-system",
        "crits/08-its-alive",
        "crits/09-all-at-once",
        "crits/10-fly-by-instruments",
        "lectures/week-1",
        "lectures/week-6"
      ]
    },
    {
      "id": "topics/task-tracking",
      "type": "topics",
      "title": "Task tracking",
      "description": "A structured task list, held outside the agent's context window, is the plan's external source of truth",
      "tags": [
        "agentic-coding"
      ],
      "related": [
        "topics/agentic-tool-catalogue",
        "topics/backpressure",
        "topics/context-engineering",
        "topics/spec-driven-development",
        "topics/studio-crit-model",
        "lectures/week-2",
        "lectures/week-3",
        "lectures/week-4"
      ]
    },
    {
      "id": "topics/whats-yours-in-the-work",
      "type": "topics",
      "title": "What's yours in the work",
      "description": "When the agent writes the code, what's left is your taste, your standards and your judgement. You record those decisions for every deliverable",
      "tags": [
        "agentic-coding"
      ],
      "related": [
        "topics/studio-crit-model",
        "topics/assessment",
        "lectures/week-2",
        "lectures/week-5"
      ]
    },
    {
      "id": "crits/01-forgotten-web",
      "type": "crits",
      "title": "Forgotten web",
      "description": "The opening build: a simple text-first site you can ship on day one.",
      "tags": [],
      "related": [
        "topics/studio-crit-model",
        "topics/assessment",
        "lectures/week-1"
      ],
      "spec": [
        "deployed and live at its public GitHub Pages URL by the cutoff",
        "it is a real site — a handful of pages of readable content, each reachable from the home page",
        "the look commits to a web era the modern web has forgotten",
        "built with plain HTML and CSS, no JavaScript",
        "the starter's invariant checks pass — the basics any good website owes its reader",
        "the repo shows the process — commits that grew with the work, a process overview in PROCESS.md, and the week's reflection in reflections/crit-1.md",
        "you can account for how you directed, grounded and corrected the agent"
      ],
      "meta": {
        "num": 1,
        "week": 2
      }
    },
    {
      "id": "crits/02-unsolicited-redesign",
      "type": "crits",
      "title": "Unsolicited redesign",
      "description": "The content is given this week, and serving it well is the brief.",
      "tags": [],
      "related": [
        "topics/studio-crit-model",
        "topics/assessment",
        "lectures/week-2"
      ],
      "spec": [
        "deployed and live at its public GitHub Pages URL by the cutoff",
        "the organisation is real (and your page includes a link to their real site), and you can say why you like them — and what their current site gets wrong",
        "your site serves their real information — who they are, what they do, how to find them — restructured and rewritten, not pasted wholesale",
        "static, no backend — Astro is the course default from this week, but any static stack (or hand-written HTML) is a legitimate choice",
        "compared to the original, yours is better in some way you can articulate",
        "the starter's invariant checks pass — the basics any good website owes its reader",
        "the repo shows the process — commits that grew with the work, a process overview in PROCESS.md, and the week's reflection in reflections/crit-2.md",
        "you can account for how you directed, grounded and corrected the agent"
      ],
      "meta": {
        "num": 2,
        "week": 3
      }
    },
    {
      "id": "crits/03-a1-retro",
      "type": "crits",
      "title": "Assignment 1 retro",
      "description": "A brief demo of your Assignment 1 prototype, then articulate the breakthrough.",
      "tags": [],
      "related": [
        "assessments/assignment-1",
        "topics/studio-crit-model",
        "topics/assessment",
        "lectures/week-3",
        "lectures/week-4"
      ],
      "spec": [
        "the written breakthrough is submitted by the cutoff",
        "it names something specific — a prompt, a harness change, an insight — not \"better prompts\"",
        "it shows the before/after: what the agent was doing, what changed it, and why it worked",
        "a short demo of your Assignment 1 prototype, presented in the session"
      ],
      "meta": {
        "num": 3,
        "week": 4,
        "repoOf": "assessments/assignment-1"
      }
    },
    {
      "id": "crits/04-instrument",
      "type": "crits",
      "title": "An instrument",
      "description": "Judgement week: an agent can build a synth but can't hear the result, so your ear is the harness.",
      "tags": [],
      "related": [
        "topics/studio-crit-model",
        "topics/assessment",
        "lectures/week-4"
      ],
      "spec": [
        "deployed and live at its public GitHub Pages URL by the cutoff",
        "the browser is the instrument — sound is made live in the page by the player, not played back",
        "it is expressive: the player's choices shape what they hear, and two players sound different",
        "a stranger can play it uninstructed — the opening screen invites the first sound",
        "playable with whatever is at hand — mouse, keyboard or touch",
        "there is no way to play it wrong — no score, no fail state",
        "the starter's invariant checks pass",
        "the repo shows the process — commits that grew with the work, a process overview in PROCESS.md, and the week's reflection in reflections/crit-4.md",
        "you can account for how you directed, grounded and corrected the work"
      ],
      "meta": {
        "num": 4,
        "week": 5
      }
    },
    {
      "id": "crits/05-game",
      "type": "crits",
      "title": "A game",
      "description": "A small game gives tests and human judgement different jobs.",
      "tags": [],
      "related": [
        "topics/backpressure",
        "topics/studio-crit-model",
        "topics/assessment",
        "lectures/week-5"
      ],
      "spec": [
        "deployed and live at its public GitHub Pages URL by the cutoff",
        "it can be lost: a wrong move is possible, and play ends somewhere — a win, a loss or a finish",
        "it teaches itself: no instructions anywhere, on screen or off — the opening screen invites the first move, and play teaches whatever comes next",
        "a stranger can pick it up and reach an ending inside five minutes",
        "one rule of the game has a focused automated test, and one change you made came from playing the finished game rather than reading its code",
        "the repo shows the process — commits that grew with the work, a process overview in PROCESS.md, and the week's reflection in reflections/crit-5.md",
        "you can account for how you directed, grounded and corrected the work"
      ],
      "meta": {
        "num": 5,
        "week": 6
      }
    },
    {
      "id": "crits/06-a2-retro",
      "type": "crits",
      "title": "Assignment 2 retro",
      "description": "A brief demo of your Assignment 2 prototype, then articulate the breakthrough.",
      "tags": [],
      "related": [
        "assessments/assignment-2",
        "crits/07-anu-system",
        "topics/studio-crit-model",
        "topics/assessment",
        "lectures/week-6"
      ],
      "spec": [
        "your Assignment 2 PROCESS.md is written up in the repo by the cutoff — it is what the shipped mark reads",
        "the breakthrough you present from it names something specific — a prompt, a harness change, an insight — not \"better prompts\"",
        "it shows the before/after: what the agent was doing, what changed it, and why it worked",
        "a short demo of your Assignment 2 prototype, presented in the session"
      ],
      "meta": {
        "num": 6,
        "week": 7,
        "repoOf": "assessments/assignment-2"
      }
    },
    {
      "id": "crits/07-anu-system",
      "type": "crits",
      "title": "Build the ANU system you wish existed",
      "description": "The first full-stack crit, and the week the database gets real.",
      "tags": [],
      "related": [
        "topics/studio-crit-model",
        "topics/assessment",
        "topics/software-and-platforms",
        "crits/06-a2-retro",
        "lectures/week-7"
      ],
      "spec": [
        "the app loads at its *.fly.dev URL by the cutoff",
        "it models a slice of a real ANU system you actually deal with, wired end to end",
        "the core flow persists across a reload — create something, and it's still there",
        "the repo shows the process — commits that grew with the work, a process overview in PROCESS.md, and the week's reflection in reflections/crit-7.md",
        "you can account for how you directed, grounded and corrected the work"
      ],
      "meta": {
        "num": 7,
        "week": 8
      }
    },
    {
      "id": "crits/08-its-alive",
      "type": "crits",
      "title": "It's alive!",
      "description": "The final project starts here, and the bar is proof of life.",
      "tags": [],
      "related": [
        "topics/studio-crit-model",
        "topics/assessment",
        "assessments/final-project",
        "lectures/week-8"
      ],
      "spec": [
        "the app is deployed at its *.fly.dev URL by the cutoff",
        "it's alive: a stranger can visit, do the core thing, and find their trace still there when they come back",
        "a first version of what good means for this app is in README.md and published at /readme/, and you can say what you read or looked at to get there",
        "the repo goes public at the cutoff and stays public",
        "the repo shows the process — commits that grew with the work, a process overview in PROCESS.md, and the week's reflection in reflections/crit-8.md",
        "you can account for how you directed, grounded and corrected the work"
      ],
      "meta": {
        "num": 8,
        "week": 9,
        "repoOf": "assessments/final-project",
        "promptFor": "crits/09-all-at-once"
      }
    },
    {
      "id": "crits/09-all-at-once",
      "type": "crits",
      "title": "All at once",
      "description": "The final project goes real-time, and your pod uses it together.",
      "tags": [],
      "related": [
        "topics/studio-crit-model",
        "topics/assessment",
        "assessments/final-project",
        "lectures/week-9"
      ],
      "spec": [
        "your final project is real-time by the brief's definition, deployed by the cutoff: a change one person makes appears in every other open session within about a second, with no reload",
        "one decision about how the app behaves when several people use it at once is made and written down in the repo, and you can say why",
        "the repo shows the process — commits that grew with the work, a process overview in PROCESS.md, and the week's reflection in reflections/crit-9.md",
        "you can account for how you directed, grounded and corrected the work"
      ],
      "meta": {
        "num": 9,
        "week": 10,
        "repoOf": "assessments/final-project",
        "riffOf": 8,
        "promptFor": "crits/10-fly-by-instruments"
      }
    },
    {
      "id": "crits/10-fly-by-instruments",
      "type": "crits",
      "title": "Fly by instruments",
      "description": "Two people your app tells apart, read from its logs.",
      "tags": [],
      "related": [
        "topics/studio-crit-model",
        "topics/assessment",
        "assessments/final-project",
        "lectures/week-10"
      ],
      "spec": [
        "your final project is multi-user by the brief's definition, deployed by the cutoff: two or more people, each in their own browser, act on shared state, and the app tells them apart",
        "what each person may see and change is checked on the server, and that decision is written down in the repo with why",
        "your final project logs who did what, server-side, and the logging outlives the crit",
        "at the crit two of your pod use the app from its URL alone, in separate Chrome profiles, while you narrate from the logs: no clicking through your own UI",
        "the repo shows the process — commits that grew with the work, a process overview in PROCESS.md, and the week's reflection in reflections/crit-10.md",
        "you can account for how you directed, grounded and corrected the work"
      ],
      "meta": {
        "num": 10,
        "week": 11,
        "repoOf": "assessments/final-project",
        "riffOf": 8,
        "riffSeeds": {
          "shitao": "comp4020-riff8-baishi-2",
          "bada": "comp4020-riff8-baishi-2"
        },
        "promptFor": "assessments/final-project"
      }
    },
    {
      "id": "assessments/assignment-1",
      "type": "assessments",
      "title": "Assignment 1",
      "description": "The first individual prototype: an interactive explainer built with an agentic workflow, marked on the legibility of your process and your response to the brief.",
      "tags": [],
      "related": [
        "assessments/assignment-2",
        "topics/assessment",
        "crits/03-a1-retro",
        "lectures/week-2",
        "lectures/week-3",
        "lectures/week-4"
      ],
      "spec": [
        "deployed and live at its public GitHub Pages URL by the deadline",
        "static and client-side throughout, and the starter's invariant checks pass",
        "it works at both marking viewports (desktop and phone)",
        "the visitor does something that changes what they see — state the core interaction plainly enough to write a test for it",
        "one strong idea with a point of view, and nothing else",
        "evidence of process is in the repo: PROCESS.md, your CLAUDE.md, reflections/assignment-1.md, and a commit history that grew with the work"
      ],
      "meta": {
        "week": 4,
        "due": "2026-08-17T12:00:00+10:00",
        "weight": 20,
        "heroImageAlt": "A hand turning one ring of a giant eucalyptus seed pod opened out like an orrery, in a three-ink risograph print",
        "repoPrefix": "comp4020-ass1"
      }
    },
    {
      "id": "assessments/assignment-2",
      "type": "assessments",
      "title": "Assignment 2",
      "description": "The second individual prototype: a whole course website for a course of your own design, marked on the legibility of your process and your response to the brief.",
      "tags": [],
      "related": [
        "assessments/final-project",
        "topics/assessment",
        "crits/06-a2-retro",
        "assessments/assignment-1",
        "lectures/week-5",
        "lectures/week-6"
      ],
      "spec": [
        "deployed and live at its public GitHub Pages URL by the deadline, working at both marking viewports",
        "one niche course at Slop University, under a SLOPxxxx code that keeps the three digits your repo arrived with, running across twelve dated teaching weeks",
        "at least one lecture carries a real deck, linked from its page",
        "assessment that adds up to 100%",
        "your own checks in `spec/`, protecting the promises your course makes that the build cannot; `pnpm check` and `pnpm check:evidence` pass",
        "evidence of process is in the repo: PROCESS.md, CLAUDE.md, and a commit history that grew with the work"
      ],
      "meta": {
        "week": 7,
        "due": "2026-09-21T12:00:00+10:00",
        "weight": 20,
        "heroImageAlt": "The quad of an invented university, mid-century teaching buildings among gum trees with long raking shadows, in a risograph print",
        "repoPrefix": "comp4020-ass2"
      }
    },
    {
      "id": "assessments/final-project",
      "type": "assessments",
      "title": "Final Project",
      "description": "The full-stack capstone: a deployed multi-user app with a persistent backend, a definition of good that you make and defend, and a portfolio showing how you built it.",
      "tags": [],
      "related": [
        "topics/assessment",
        "crits/08-its-alive",
        "crits/09-all-at-once",
        "crits/10-fly-by-instruments",
        "assessments/assignment-2",
        "lectures/week-8",
        "lectures/week-9",
        "lectures/week-10",
        "lectures/week-12"
      ],
      "spec": [
        "deployed and live at its *.fly.dev URL by the deadline, working at both marking viewports",
        "it's multi-user: two or more people, each in their own browser, act on shared state, and the app tells them apart by whatever it decides counts as a person",
        "it's real-time: a change one person makes appears in every other open session showing it within about a second, with no reload or other action by the viewer",
        "it persists: what someone does in your app is still there when they, or anyone else, come back, across sessions, restarts and redeploys",
        "it's good, by a definition you make and defend: `README.md` says what good means here, and the deployed app publishes it in full at `/readme/`",
        "your own checks in `spec/`, protecting the promises your app makes that the build cannot; `pnpm check` and `pnpm check:evidence` pass",
        "evidence of process is in the repo: PROCESS.md, CLAUDE.md, and a commit history that grew with the work; PROCESS.md makes the case for the stack and agent workflow you chose",
        "COMP8020 only: the critical research note, `research-note.md` in the repo root — a cited position on good agentic development practice, 600–800 words"
      ],
      "meta": {
        "week": 12,
        "due": "2026-11-09T12:00:00+11:00",
        "weight": 40,
        "heroImageAlt": "Fire-blackened eucalypt trunks pushing dense epicormic shoots and new leaves, in a three-ink risograph print",
        "repoPrefix": "comp4020-final"
      }
    },
    {
      "id": "lectures/week-1",
      "type": "lectures",
      "title": "Week 1: Introduction",
      "description": "Welcome to the Agentic Coding Studio",
      "tags": [],
      "related": [
        "topics/course-overview",
        "topics/studio-crit-model",
        "topics/agent-loops",
        "topics/github-pages-deployment",
        "topics/participation",
        "topics/assessment",
        "topics/communication",
        "topics/llm-access",
        "topics/onboard",
        "topics/course-as-experiment",
        "topics/lecture-structure",
        "topics/lecture-demos",
        "topics/crit-agents",
        "topics/software-and-platforms",
        "crits/01-forgotten-web"
      ],
      "meta": {
        "author": "COMP4020",
        "week": 1
      }
    },
    {
      "id": "lectures/week-2",
      "type": "lectures",
      "title": "Week 2: Specs and self-portrait",
      "description": "The brief poses the problem, the spec is the contract, and your response is a self-portrait of the developer you want to be",
      "tags": [],
      "related": [
        "topics/spec-driven-development",
        "topics/how-browsers-work",
        "topics/claude-code-cheatsheet",
        "topics/task-tracking",
        "topics/whats-yours-in-the-work",
        "topics/assessment",
        "topics/lecture-demos",
        "crits/02-unsolicited-redesign",
        "assessments/assignment-1"
      ],
      "meta": {
        "author": "COMP4020",
        "week": 2
      }
    },
    {
      "id": "lectures/week-3",
      "type": "lectures",
      "title": "Week 3: Backpressure",
      "description": "Harness engineering is the art of giving good negative feedback — the model generates; the harness rejects what's wrong, fast and automatically",
      "tags": [],
      "related": [
        "topics/backpressure",
        "topics/static-site-generators",
        "topics/claude-code-cheatsheet",
        "topics/task-tracking",
        "topics/github-pages-deployment",
        "crits/03-a1-retro",
        "assessments/assignment-1"
      ],
      "meta": {
        "author": "COMP4020",
        "week": 3
      }
    },
    {
      "id": "lectures/week-4",
      "type": "lectures",
      "title": "Week 4: Context engineering",
      "description": "The agent's working memory as a designed resource — and, on the web side, the ceiling of static: neal.fun / pudding.cool-style interactive pages",
      "tags": [],
      "related": [
        "topics/context-engineering",
        "topics/skills",
        "topics/claude-code-cheatsheet",
        "topics/task-tracking",
        "topics/llm-access",
        "crits/03-a1-retro",
        "crits/04-instrument",
        "assessments/assignment-1"
      ],
      "meta": {
        "author": "COMP4020",
        "week": 4
      }
    },
    {
      "id": "lectures/week-5",
      "type": "lectures",
      "title": "Week 5: Verification",
      "description": "The agent says it's done — but has anyone run it, and do you still understand it? Verification, and the cognitive debt that green checks don't measure",
      "tags": [],
      "related": [
        "topics/evaluating-agent-output",
        "topics/backpressure",
        "topics/skills",
        "topics/assessment",
        "topics/whats-yours-in-the-work",
        "crits/05-game",
        "assessments/assignment-2"
      ],
      "meta": {
        "author": "COMP4020",
        "week": 5
      }
    },
    {
      "id": "lectures/week-6",
      "type": "lectures",
      "title": "Week 6: Evidence of practice",
      "description": "Read the transcript and the git log closely, reconstruct one consequential decision, and write what you learned into the harness, which the next session loads",
      "tags": [],
      "related": [
        "topics/evidence-of-practice",
        "topics/github-actions-basics",
        "topics/backpressure",
        "topics/studio-crit-model",
        "topics/onboard",
        "crits/06-a2-retro",
        "assessments/assignment-2"
      ],
      "meta": {
        "author": "COMP4020",
        "week": 6
      }
    },
    {
      "id": "lectures/week-7",
      "type": "lectures",
      "title": "Week 7: Full stack",
      "description": "A2 shipped Monday, and the course goes full-stack. Once there’s a server, state has two more places to live; find them, check changes against the running app, and deploy it to Fly",
      "tags": [],
      "related": [
        "topics/end-to-end-tracing",
        "topics/forms-and-state",
        "topics/running-in-production",
        "topics/hosting-access",
        "crits/07-anu-system"
      ],
      "meta": {
        "author": "COMP4020",
        "week": 7
      }
    },
    {
      "id": "lectures/week-8",
      "type": "lectures",
      "title": "Week 8: Decision records and persistence",
      "description": "The final project brief is out; then architecture decision records, and how a full-stack app keeps its data across restarts and schema changes",
      "tags": [],
      "related": [
        "assessments/final-project",
        "topics/decision-records",
        "topics/persistence",
        "crits/08-its-alive"
      ],
      "meta": {
        "author": "COMP4020",
        "week": 8
      }
    },
    {
      "id": "lectures/week-9",
      "type": "lectures",
      "title": "Week 9: Subagents and real-time",
      "description": "What a subagent is and when to use one, then how a change one person makes reaches everyone else's screen",
      "tags": [],
      "related": [
        "assessments/final-project",
        "crits/09-all-at-once"
      ],
      "meta": {
        "author": "COMP4020",
        "week": 9
      }
    },
    {
      "id": "lectures/week-10",
      "type": "lectures",
      "title": "Week 10: Logs, harnesses and multi-user apps",
      "description": "What a deployed app should log, and how two agent harnesses — Claude Code and pi — read the same logs; then what a multi-user app has to handle — telling people apart, what each may do, and two of them acting at once",
      "tags": [],
      "related": [
        "assessments/final-project",
        "crits/10-fly-by-instruments"
      ],
      "meta": {
        "author": "COMP4020",
        "week": 10
      }
    },
    {
      "id": "lectures/week-12",
      "type": "lectures",
      "title": "Week 12: Ask me anything",
      "description": "The final lecture, run as an AMA from the questions you posted to the Ed megathread",
      "tags": [],
      "related": [
        "assessments/final-project"
      ],
      "meta": {
        "author": "COMP4020",
        "week": 12
      }
    }
  ],
  "edges": [
    {
      "from": "topics/agent-loops",
      "to": "topics/backpressure"
    },
    {
      "from": "topics/agent-loops",
      "to": "topics/agentic-tool-catalogue"
    },
    {
      "from": "topics/ai-use-and-integrity",
      "to": "topics/assessment"
    },
    {
      "from": "topics/ai-use-and-integrity",
      "to": "topics/llm-access"
    },
    {
      "from": "topics/ai-use-and-integrity",
      "to": "topics/crit-agents"
    },
    {
      "from": "topics/backpressure",
      "to": "topics/modern-web-best-practices"
    },
    {
      "from": "topics/backpressure",
      "to": "topics/task-tracking"
    },
    {
      "from": "topics/backpressure",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "topics/backpressure",
      "to": "topics/evaluating-agent-output"
    },
    {
      "from": "topics/claude-code-cheatsheet",
      "to": "topics/onboard"
    },
    {
      "from": "topics/context-engineering",
      "to": "topics/agent-loops"
    },
    {
      "from": "topics/context-engineering",
      "to": "topics/backpressure"
    },
    {
      "from": "topics/context-engineering",
      "to": "topics/skills"
    },
    {
      "from": "topics/context-engineering",
      "to": "topics/task-tracking"
    },
    {
      "from": "topics/context-engineering",
      "to": "topics/llm-access"
    },
    {
      "from": "topics/course-as-experiment",
      "to": "topics/course-overview"
    },
    {
      "from": "topics/course-as-experiment",
      "to": "topics/communication"
    },
    {
      "from": "topics/course-as-experiment",
      "to": "topics/software-and-platforms"
    },
    {
      "from": "topics/crit-agents",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "topics/crit-agents",
      "to": "topics/course-as-experiment"
    },
    {
      "from": "topics/decision-records",
      "to": "topics/evidence-of-practice"
    },
    {
      "from": "topics/end-to-end-tracing",
      "to": "topics/forms-and-state"
    },
    {
      "from": "topics/end-to-end-tracing",
      "to": "topics/backpressure"
    },
    {
      "from": "topics/end-to-end-tracing",
      "to": "topics/spec-driven-development"
    },
    {
      "from": "topics/ethics",
      "to": "topics/software-and-platforms"
    },
    {
      "from": "topics/ethics",
      "to": "topics/course-as-experiment"
    },
    {
      "from": "topics/ethics",
      "to": "topics/ai-use-and-integrity"
    },
    {
      "from": "topics/evaluating-agent-output",
      "to": "topics/backpressure"
    },
    {
      "from": "topics/evaluating-agent-output",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "topics/evaluating-agent-output",
      "to": "topics/modern-web-best-practices"
    },
    {
      "from": "topics/evidence-of-practice",
      "to": "topics/evaluating-agent-output"
    },
    {
      "from": "topics/evidence-of-practice",
      "to": "topics/context-engineering"
    },
    {
      "from": "topics/following-along",
      "to": "topics/course-as-experiment"
    },
    {
      "from": "topics/following-along",
      "to": "topics/crit-agents"
    },
    {
      "from": "topics/forms-and-state",
      "to": "topics/how-browsers-work"
    },
    {
      "from": "topics/forms-and-state",
      "to": "topics/running-in-production"
    },
    {
      "from": "topics/generating-images",
      "to": "topics/llm-access"
    },
    {
      "from": "topics/generating-images",
      "to": "topics/agentic-tool-catalogue"
    },
    {
      "from": "topics/generating-images",
      "to": "topics/onboard"
    },
    {
      "from": "topics/github-actions-basics",
      "to": "topics/backpressure"
    },
    {
      "from": "topics/github-actions-basics",
      "to": "topics/evaluating-agent-output"
    },
    {
      "from": "topics/github-actions-basics",
      "to": "topics/github-pages-deployment"
    },
    {
      "from": "topics/github-pages-deployment",
      "to": "topics/agent-loops"
    },
    {
      "from": "topics/hosting-access",
      "to": "topics/onboard"
    },
    {
      "from": "topics/hosting-access",
      "to": "topics/software-and-platforms"
    },
    {
      "from": "topics/hosting-access",
      "to": "topics/github-actions-basics"
    },
    {
      "from": "topics/how-browsers-work",
      "to": "topics/modern-web-best-practices"
    },
    {
      "from": "topics/how-browsers-work",
      "to": "topics/github-pages-deployment"
    },
    {
      "from": "topics/interactive-pages",
      "to": "topics/static-site-generators"
    },
    {
      "from": "topics/interactive-pages",
      "to": "topics/context-engineering"
    },
    {
      "from": "topics/interactive-pages",
      "to": "topics/modern-web-best-practices"
    },
    {
      "from": "topics/lecture-demos",
      "to": "topics/lecture-structure"
    },
    {
      "from": "topics/lecture-demos",
      "to": "topics/onboard"
    },
    {
      "from": "topics/lecture-structure",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "topics/lecture-structure",
      "to": "topics/lecture-demos"
    },
    {
      "from": "topics/lecture-structure",
      "to": "topics/onboard"
    },
    {
      "from": "topics/llm-access",
      "to": "topics/software-and-platforms"
    },
    {
      "from": "topics/llm-access",
      "to": "topics/onboard"
    },
    {
      "from": "topics/modern-web-best-practices",
      "to": "topics/backpressure"
    },
    {
      "from": "topics/onboard",
      "to": "topics/software-and-platforms"
    },
    {
      "from": "topics/onboard",
      "to": "topics/llm-access"
    },
    {
      "from": "topics/participation",
      "to": "topics/onboard"
    },
    {
      "from": "topics/participation",
      "to": "topics/assessment"
    },
    {
      "from": "topics/participation",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "topics/persistence",
      "to": "topics/forms-and-state"
    },
    {
      "from": "topics/persistence",
      "to": "topics/running-in-production"
    },
    {
      "from": "topics/running-in-production",
      "to": "topics/hosting-access"
    },
    {
      "from": "topics/running-in-production",
      "to": "topics/github-actions-basics"
    },
    {
      "from": "topics/skills",
      "to": "topics/context-engineering"
    },
    {
      "from": "topics/skills",
      "to": "topics/backpressure"
    },
    {
      "from": "topics/skills",
      "to": "topics/claude-code-cheatsheet"
    },
    {
      "from": "topics/skills",
      "to": "topics/agentic-tool-catalogue"
    },
    {
      "from": "topics/spec-driven-development",
      "to": "topics/task-tracking"
    },
    {
      "from": "topics/spec-driven-development",
      "to": "topics/agentic-tool-catalogue"
    },
    {
      "from": "topics/spec-driven-development",
      "to": "topics/backpressure"
    },
    {
      "from": "topics/spec-driven-development",
      "to": "topics/claude-code-cheatsheet"
    },
    {
      "from": "topics/static-site-generators",
      "to": "topics/github-pages-deployment"
    },
    {
      "from": "topics/static-site-generators",
      "to": "topics/backpressure"
    },
    {
      "from": "topics/studio-crit-model",
      "to": "topics/assessment"
    },
    {
      "from": "topics/studio-crit-model",
      "to": "topics/crit-agents"
    },
    {
      "from": "topics/studio-crit-model",
      "to": "topics/task-tracking"
    },
    {
      "from": "topics/task-tracking",
      "to": "topics/agentic-tool-catalogue"
    },
    {
      "from": "topics/whats-yours-in-the-work",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "topics/whats-yours-in-the-work",
      "to": "topics/assessment"
    },
    {
      "from": "crits/01-forgotten-web",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "crits/01-forgotten-web",
      "to": "topics/assessment"
    },
    {
      "from": "crits/02-unsolicited-redesign",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "crits/02-unsolicited-redesign",
      "to": "topics/assessment"
    },
    {
      "from": "crits/03-a1-retro",
      "to": "assessments/assignment-1"
    },
    {
      "from": "crits/03-a1-retro",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "crits/03-a1-retro",
      "to": "topics/assessment"
    },
    {
      "from": "crits/04-instrument",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "crits/04-instrument",
      "to": "topics/assessment"
    },
    {
      "from": "crits/05-game",
      "to": "topics/backpressure"
    },
    {
      "from": "crits/05-game",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "crits/05-game",
      "to": "topics/assessment"
    },
    {
      "from": "crits/06-a2-retro",
      "to": "assessments/assignment-2"
    },
    {
      "from": "crits/06-a2-retro",
      "to": "crits/07-anu-system"
    },
    {
      "from": "crits/06-a2-retro",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "crits/06-a2-retro",
      "to": "topics/assessment"
    },
    {
      "from": "crits/07-anu-system",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "crits/07-anu-system",
      "to": "topics/assessment"
    },
    {
      "from": "crits/07-anu-system",
      "to": "topics/software-and-platforms"
    },
    {
      "from": "crits/08-its-alive",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "crits/08-its-alive",
      "to": "topics/assessment"
    },
    {
      "from": "crits/08-its-alive",
      "to": "assessments/final-project"
    },
    {
      "from": "crits/09-all-at-once",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "crits/09-all-at-once",
      "to": "topics/assessment"
    },
    {
      "from": "crits/09-all-at-once",
      "to": "assessments/final-project"
    },
    {
      "from": "crits/10-fly-by-instruments",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "crits/10-fly-by-instruments",
      "to": "topics/assessment"
    },
    {
      "from": "crits/10-fly-by-instruments",
      "to": "assessments/final-project"
    },
    {
      "from": "assessments/assignment-1",
      "to": "assessments/assignment-2"
    },
    {
      "from": "assessments/assignment-1",
      "to": "topics/assessment"
    },
    {
      "from": "assessments/assignment-2",
      "to": "assessments/final-project"
    },
    {
      "from": "assessments/assignment-2",
      "to": "topics/assessment"
    },
    {
      "from": "assessments/final-project",
      "to": "topics/assessment"
    },
    {
      "from": "lectures/week-1",
      "to": "topics/course-overview"
    },
    {
      "from": "lectures/week-1",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "lectures/week-1",
      "to": "topics/agent-loops"
    },
    {
      "from": "lectures/week-1",
      "to": "topics/github-pages-deployment"
    },
    {
      "from": "lectures/week-1",
      "to": "topics/participation"
    },
    {
      "from": "lectures/week-1",
      "to": "topics/assessment"
    },
    {
      "from": "lectures/week-1",
      "to": "topics/communication"
    },
    {
      "from": "lectures/week-1",
      "to": "topics/llm-access"
    },
    {
      "from": "lectures/week-1",
      "to": "topics/onboard"
    },
    {
      "from": "lectures/week-1",
      "to": "topics/course-as-experiment"
    },
    {
      "from": "lectures/week-1",
      "to": "topics/lecture-structure"
    },
    {
      "from": "lectures/week-1",
      "to": "topics/lecture-demos"
    },
    {
      "from": "lectures/week-1",
      "to": "topics/crit-agents"
    },
    {
      "from": "lectures/week-1",
      "to": "topics/software-and-platforms"
    },
    {
      "from": "lectures/week-1",
      "to": "crits/01-forgotten-web"
    },
    {
      "from": "lectures/week-2",
      "to": "topics/spec-driven-development"
    },
    {
      "from": "lectures/week-2",
      "to": "topics/how-browsers-work"
    },
    {
      "from": "lectures/week-2",
      "to": "topics/claude-code-cheatsheet"
    },
    {
      "from": "lectures/week-2",
      "to": "topics/task-tracking"
    },
    {
      "from": "lectures/week-2",
      "to": "topics/whats-yours-in-the-work"
    },
    {
      "from": "lectures/week-2",
      "to": "topics/assessment"
    },
    {
      "from": "lectures/week-2",
      "to": "topics/lecture-demos"
    },
    {
      "from": "lectures/week-2",
      "to": "crits/02-unsolicited-redesign"
    },
    {
      "from": "lectures/week-2",
      "to": "assessments/assignment-1"
    },
    {
      "from": "lectures/week-3",
      "to": "topics/backpressure"
    },
    {
      "from": "lectures/week-3",
      "to": "topics/static-site-generators"
    },
    {
      "from": "lectures/week-3",
      "to": "topics/claude-code-cheatsheet"
    },
    {
      "from": "lectures/week-3",
      "to": "topics/task-tracking"
    },
    {
      "from": "lectures/week-3",
      "to": "topics/github-pages-deployment"
    },
    {
      "from": "lectures/week-3",
      "to": "crits/03-a1-retro"
    },
    {
      "from": "lectures/week-3",
      "to": "assessments/assignment-1"
    },
    {
      "from": "lectures/week-4",
      "to": "topics/context-engineering"
    },
    {
      "from": "lectures/week-4",
      "to": "topics/skills"
    },
    {
      "from": "lectures/week-4",
      "to": "topics/claude-code-cheatsheet"
    },
    {
      "from": "lectures/week-4",
      "to": "topics/task-tracking"
    },
    {
      "from": "lectures/week-4",
      "to": "topics/llm-access"
    },
    {
      "from": "lectures/week-4",
      "to": "crits/03-a1-retro"
    },
    {
      "from": "lectures/week-4",
      "to": "crits/04-instrument"
    },
    {
      "from": "lectures/week-4",
      "to": "assessments/assignment-1"
    },
    {
      "from": "lectures/week-5",
      "to": "topics/evaluating-agent-output"
    },
    {
      "from": "lectures/week-5",
      "to": "topics/backpressure"
    },
    {
      "from": "lectures/week-5",
      "to": "topics/skills"
    },
    {
      "from": "lectures/week-5",
      "to": "topics/assessment"
    },
    {
      "from": "lectures/week-5",
      "to": "topics/whats-yours-in-the-work"
    },
    {
      "from": "lectures/week-5",
      "to": "crits/05-game"
    },
    {
      "from": "lectures/week-5",
      "to": "assessments/assignment-2"
    },
    {
      "from": "lectures/week-6",
      "to": "topics/evidence-of-practice"
    },
    {
      "from": "lectures/week-6",
      "to": "topics/github-actions-basics"
    },
    {
      "from": "lectures/week-6",
      "to": "topics/backpressure"
    },
    {
      "from": "lectures/week-6",
      "to": "topics/studio-crit-model"
    },
    {
      "from": "lectures/week-6",
      "to": "topics/onboard"
    },
    {
      "from": "lectures/week-6",
      "to": "crits/06-a2-retro"
    },
    {
      "from": "lectures/week-6",
      "to": "assessments/assignment-2"
    },
    {
      "from": "lectures/week-7",
      "to": "topics/end-to-end-tracing"
    },
    {
      "from": "lectures/week-7",
      "to": "topics/forms-and-state"
    },
    {
      "from": "lectures/week-7",
      "to": "topics/running-in-production"
    },
    {
      "from": "lectures/week-7",
      "to": "topics/hosting-access"
    },
    {
      "from": "lectures/week-7",
      "to": "crits/07-anu-system"
    },
    {
      "from": "lectures/week-8",
      "to": "assessments/final-project"
    },
    {
      "from": "lectures/week-8",
      "to": "topics/decision-records"
    },
    {
      "from": "lectures/week-8",
      "to": "topics/persistence"
    },
    {
      "from": "lectures/week-8",
      "to": "crits/08-its-alive"
    },
    {
      "from": "lectures/week-9",
      "to": "assessments/final-project"
    },
    {
      "from": "lectures/week-9",
      "to": "crits/09-all-at-once"
    },
    {
      "from": "lectures/week-10",
      "to": "assessments/final-project"
    },
    {
      "from": "lectures/week-10",
      "to": "crits/10-fly-by-instruments"
    },
    {
      "from": "lectures/week-12",
      "to": "assessments/final-project"
    }
  ]
}