Skip to content

Move the consolidated labs to the Caldova scenario - #243

Merged
ivorb merged 3 commits into
mainfrom
ivorb-caldova-scenario
Aug 18, 2026
Merged

Move the consolidated labs to the Caldova scenario#243
ivorb merged 3 commits into
mainfrom
ivorb-caldova-scenario

Conversation

@ivorb

@ivorb ivorb commented Aug 18, 2026

Copy link
Copy Markdown
Collaborator

Moves the consolidated labs (A–D) from Tailwind Traders to Caldova, the pharmaceutical scenario from the case study draft.

Caldova faces a 7% capacity gap across three manufacturing sites ahead of an accelerated launch, and needs to decide whether it can close the gap internally or engage a pre-qualified contract manufacturer.

The teaching mechanics don't change

Every function tool keeps its arity and its arithmetic, so the JSON tool schemas, the hand-written tool-calling loop, and the Agent Framework contrast all still demonstrate exactly what they did before:

Before After
next_available_trip(region) next_available_slot(site)
calculate_rental_cost(gear_tier, days, service_level) calculate_transfer_cost(cmo_tier, weeks, priority)
generate_booking_report(...) generate_capacity_report(...)
get_weekly_sales() get_weekly_consumption()

Rates and multipliers keep their values, so the worked examples in the instructions stay arithmetically correct — 5 × 300 × 1.25 is still 1,875.

Actions draft rather than commit

The case study lists change control over production systems and supplier portals as a customer concern. Where the retail labs had the agent commit an action (take a booking), the Caldova equivalent drafts a request for a person to approve. No code shape changes, and it makes the lab more credible in a regulated setting.

Content rewritten, not renamed

  • Six knowledge articles replaced with plant capacity, CMO directory, tech-transfer playbook, capacity request policy, supplier guide, and site operations.
  • Lab D's evaluation set rewritten against those articles so every ground_truth is checkable against real source text.
  • Red-team objectives stay in the same three SDK risk categories but move to a manufacturing setting. The self-harm objective is anchored in workplace distress rather than medication, which is the obvious but unacceptable pharma analogue.
  • Lab C agents become tech-transfer planning, site-visit expenses, and supplier/quality triage.

Scope

  • Instructions/Exercises is untouched — the published Learn labs never referenced the scenario.
  • Anton is untouched. He's the Ask Anton learning guide, not a character in the scenario.
  • Cora and Litware from the source doc are deliberately excluded.
  • Personas appear as roles only; no first names in lab content.

Naming

Invented names (three sites, three CMOs, the CAL-204 program code) aren't supplied by the case study and may change. They're recorded together so a future rename is a single pass. All fictional domains use .example, which is reserved and can't resolve.

The five azd environments are renamed (tailwind-traders-labcaldova-lab, and so on), so anyone mid-deployment gets a fresh environment.

Verification

All Tier 0 checks pass, plus generate_lab_blocks --check and sync --check. Every Python file parses, all JSON/JSONL/YAML validates, both function trees were executed and return correct values including error paths, and every file referenced by the instructions resolves. A vocabulary sweep for retail terms across instructions and Labfiles returns zero.

Not yet done: nothing here has been run against a live Foundry project.

ivorb and others added 3 commits August 18, 2026 15:02
The labs were set at Tailwind Traders, an outdoor-gear retailer. They now run
at Caldova, a pharmaceutical manufacturer facing a 7% capacity gap across
three sites ahead of an accelerated launch, deciding whether to close the gap
internally or engage a pre-qualified contract manufacturer.

The teaching mechanics are untouched. Every function tool keeps its arity and
its arithmetic, so the JSON tool schemas, the hand-written tool-calling loop
and the Agent Framework contrast still demonstrate exactly what they did
before:

  next_available_trip(region)                  -> next_available_slot(site)
  calculate_rental_cost(tier, days, service)   -> calculate_transfer_cost(tier, weeks, priority)
  generate_booking_report(...)                 -> generate_capacity_report(...)

Rates and multipliers keep their values, so the worked examples in the
instructions stay arithmetically correct: 5 x 300 x 1.25 is still 1,875.

Where the retail labs had the agent commit an action, the Caldova equivalent
drafts a request for a person to approve. An agent that books plant capacity
on its own is a change-control problem, and saying so makes the lab more
credible in a regulated setting.

Six knowledge articles are rewritten rather than renamed, and Lab D's
evaluation set is rewritten against them so every ground truth is checkable.
The red-team objectives stay in the same three risk categories but move to a
manufacturing setting; the self-harm objective is anchored in workplace
distress, deliberately avoiding medication content.

Anton is untouched. He is the Ask Anton learning guide, not a character in
the scenario. Instructions/Exercises is untouched: the published Learn labs
never referenced the scenario.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: dc4690cc-57d6-48a7-abc8-bc8570113ab1
Verification beyond the CI checks found four classes of problem that
structural checks cannot see.

Instructions had drifted from code. D1 still showed the old span names and
agent name, and C4's expected output still listed the retail sample ticket,
so a learner following the page would not have matched what the code
produced. A4's Agent Framework example still passed 'region'.

Lab D's evaluation set had an ungroundable row. The question about slot lead
time was answerable only from Lab A's policy file, which Lab D's agent is not
grounded on, so a correctly behaving agent would have scored badly on
groundedness for reasons that had nothing to do with the agent. The slot
request rules now live in the capacity policy article, and all ten rows are
answerable from the knowledge base.

The triage categories still described refunds and receipts, which no longer
fit an internal support desk.

A few 'store policy' references survived because the earlier replacement
matched a string that the company rename had already changed.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: dc4690cc-57d6-48a7-abc8-bc8570113ab1
A second consistency pass over the scenario swap.

Task A1 teaches grounding, and its first test question asked about a
'capacity request with a complete brief' - wording that appears in the
knowledge base but not in the policy file that task actually grounds on. The
question now uses the policy's own wording, so the first thing a learner sees
in the grounding task is an answer drawn straight from the document.

The portal instructions in B1 still told the agent it specialized in our
products, and the block had been left awkwardly wrapped by the rename.

Scenario paragraphs are reflowed. The replacement text was longer than what
it replaced, so several paragraphs had one line running well past the width
the rest of the file uses.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: dc4690cc-57d6-48a7-abc8-bc8570113ab1
@ivorb
ivorb merged commit d227890 into main Aug 18, 2026
1 check passed
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