Cut Step 7 workload, fix 512-char descriptions, stop the interrogation - #29
Merged
Pierre Malarme (pmalarme) merged 1 commit intoAug 18, 2026
Merged
Conversation
Three fixes to the Step 7 (multi-agent) experience, plus the prompt and
manifest problems it exposed downstream.
1. Step 7 asked participants to write ~310 lines of coordinator.py. The
starter file now ships almost complete — the instruction constants, the
Step 5 RAG provider, the Step 6 skills provider and trusted script
runner, the manager Coordinator and the GroupChatBuilder graph are all
wired — leaving one TODO: add HotelsSpecialist and ActivitiesSpecialist,
with FlightsSpecialist delivered as the worked example. The step doc
gains a slice -> Agent(...) mapping table (labelled with each field's
source file) and now gives main.py verbatim.
2. Deploying Step 7 failed with 400 invalid_payload — Foundry caps agent
description at 512 chars and the folded scalars in solutions 06, 07 and
09 measured 515, 568 and 500. Shortened to 413, 416 and 393, with a
callout in Step 7 and troubleshooting entries in Steps 6 and 7.
3. The deployed agent interrogated the traveler ("what dates? how many
travelers? which cabin class?") instead of planning. The Coordinator
gains a "Plan first, ask almost never" section and every specialist a
"never stop to ask — assume the obvious default and label it" boundary,
with self-contained defaults so Hotels and Activities work when Flights
hasn't run (Step 7 hotel-only requests, and the concurrent workflow in
Steps 8-9). Flights searches and prices both legs; the trip-length
default is three nights everywhere. Departure city has no sensible
default, so specialists report it missing and only the Coordinator may
close with that one question, after delivering the plan. Applied across
all 12 prompt locations (coordinator.py x4 and the agents/*/agent.yaml
slices).
Also removed the unused logger from the four coordinator.py files.
lint_steps.py: 0 failures. pytest: 154 passed.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: eff02da0-9879-4ce8-b4ec-d7626c2d1073
Pierre Malarme (pmalarme)
deleted the
pmalarme-simplify-step-7-and-prompts
branch
August 18, 2026 07:22
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Three problems surfaced while running Step 7 end to end:
coordinator.pyshipped as a near-empty scaffold, so participants had to write ~310 lines before anything ran.400 invalid_payload—"String length 568 exceeds maximum 512"ondescription.What changed
1. Step 7 workload cut to one TODO
.workshop/step_files/07/coordinator.pynow ships almost complete — the instruction constants, the Step 5 RAG provider, the Step 6 skills provider and trusted script runner, the managerCoordinator, and theGroupChatBuildergraph are all wired. OneTODOremains: addHotelsSpecialistandActivitiesSpecialist, withFlightsSpecialistdelivered as the worked example. Capability slicing is still the lesson; the boilerplate isn't.The step doc gets a slice →
Agent(...)mapping table (each row labelled with its source file — role fields come fromagent.yaml, capabilities fromagent.manifest.yaml) and now givesmain.pyverbatim.2. The 512-character description cap
Foundry caps agent
descriptionat 512 chars, and YAML folded scalars (>) add a trailing newline. Solutions 06, 07 and 09 measured 515, 568 and 500 — now 413, 416 and 393. Added a callout in Step 7 §4 and troubleshooting entries in Steps 6 and 7 so the next person recognises the error.3. Prompts that plan instead of interrogate
COORDINATOR_INSTRUCTIONSgains a "Plan first, ask almost never" section.GatherPreferencesnode in Steps 8–9.Applied across all 12 prompt locations: the
coordinator.pyconstants instep_files/07and solutions 07/08/09, plus theagents/*/agent.yamlslices in each (keeping the intended group-chat vs workflow wording variants).Also removed the unused
loggingimport andloggerfrom the fourcoordinator.pyfiles.Validation
python .workshop/scripts/lint_steps.py→ 0 failures, 2 pre-existing warningspython -m pytest .workshop/scripts/tests -q→ 154 passedcoordinator.pyfiles compile; everyagent*.yamlparsesReview notes
Docs, solutions and step files are kept in sync per the authoring rules. No new environment variables, no secrets, no auth changes — everything stays keyless via
DefaultAzureCredential.