Skip to content

Split the tutorial into Cloud and Local lab courses, add a tutor skill - #3

Merged
sijie merged 1 commit into
mainfrom
feat/lab-courses-and-tutor
Oct 3, 2026
Merged

sijie merged 1 commit into
mainfrom
feat/lab-courses-and-tutor

Conversation

@sijie

@sijie sijie commented Oct 3, 2026

Copy link
Copy Markdown
Member

Summary

  • The README walkthrough becomes two lab courses, one file per lab, shaped like the Orca University labs:
    • Cloud (labs/cloud/): the course the hackathon runs, on a team card.
    • Local (labs/local/): the whole stack on a laptop.
  • The Local course runs Ursa for Kafka with a diskless topic, Oxia, RustFS, Karapace, RisingWave and RisingWave's MCP server (local/compose.yaml). ork local runs with the AI Gateway (local/engine.sh, which also lets the gateway reach the MCP server).
  • One switch, TUTORIAL_STACK=cloud|local in .env, picks the agent definitions, the SQL, Kafka auth, the vault and the state file on all three paths (CLI, Python, TypeScript).
  • A tutor skill, skills/data-agent-tutor, linked into .claude/skills and .agents/skills. docs/tutor.md explains how to start it.
  • lab-ork runs every lab check with the saved ids filled in. scripts/check-labs.sh lints lab structure and links, and CI gains local and labs jobs.

What stays as on main for the event

On a team card, the lab scripts, the agent definitions and the turn loop (open the event stream, then send) are main's. Python and TypeScript send first and replay from cursor 0 only on the local stack. ork local answers a stream opened on a quiet session only at its next keep-alive, 15 s later.

Verification

  • Suites:
    • pytest 207, vitest 226 + typecheck.
    • cli/tests/run.sh 151, local/tests/run.sh 36, scripts/tests/run.sh 25.
    • scripts/check-labs.sh, shellcheck and docker compose config -q are clean.
    • The shell suites and the lab linter also pass in ubuntu:24.04 (GNU stat, mawk).
  • The Local course, end to end, on macOS with claude-sonnet-4-6: a fresh reset on each of the CLI, Python and TypeScript paths, then every step and every check. That includes the approval and the denial in Lab 4. The pages show output from those runs, and labs/local/README.md says what was run.
  • The tutor skill: tested with subagent learners on two models. In every run it relayed the prerequisites and the clean-up, ran no command, opened no secret, and gave no answer before an attempt.

Not verified

  • Anything that needs a team card: SQL Workspace (Lab 2), the OAuth vault (Lab 3), the hosted SQL tools (Labs 3 and 4), and the Cloud checks against the hosted engine. labs/cloud/README.md says this to participants. The organizer checklist, kept outside this repo, lists what to confirm in a facilitator walk; replace that README section afterwards.
  • The two GitHub-source install commands for the tutor in docs/tutor.md: they need this branch merged.

Note

With claude-sonnet-4-6, the agent answers in Markdown with headings, tables and emoji, at more length than the prompts' "two or three sentences". The terminal shows the Markdown as it is. The prompts are unchanged here. Adding "Plain text, no Markdown" to them changes their fingerprints, which are pinned in the three test suites.

The single README walkthrough becomes two linear lab courses in the shape
of the Orca University labs: one file per lab, each with "Before you
start", three or four steps with a check, a quiz, a "Try it yourself"
task, a clean-up where one is needed, and a recap.

- labs/cloud: the course the hackathon runs, on a team card. Its lab
  scripts, agent definitions and turn loop are the ones main had.
- labs/local: the whole stack on a laptop. local/compose.yaml runs Ursa
  for Kafka (a diskless topic), Oxia, RustFS, Karapace, RisingWave and
  RisingWave's MCP server. local/engine.sh starts `ork local` with the AI
  Gateway and lets the gateway reach the MCP server; write-env.sh,
  sql.sh and down.sh do the rest.
- TUTORIAL_STACK=cloud|local in .env picks the agent definitions
  (agent/<stack>/), the SQL (sql/<stack>/), Kafka auth, the vault and
  the state file, on all three paths.
- Python and TypeScript send the message before they open the event
  stream on the local stack only: `ork local` answers a stream opened on
  a quiet session at its next keep-alive, 15 s later. A team card keeps
  main's order.
- Seeders replay data/login_events.jsonl into an empty topic; lab-ork
  runs every check with the saved ids filled in.
- skills/data-agent-tutor walks a learner through a course one step at a
  time; docs/tutor.md says how to start it.
- scripts/check-labs.sh lints the labs' structure and links; CI gains
  `local` and `labs` jobs.

The Local course was run end to end with the model answering, on the
CLI, Python and TypeScript paths. Nothing that needs a team card was run
for this change.
@sijie
sijie merged commit 2a5808f into main Oct 3, 2026
14 checks passed
@sijie
sijie deleted the feat/lab-courses-and-tutor branch October 3, 2026 03:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant