Skip to content

Update 04 Agentic CLM MicroHack model fleet: drop Claude (→ gpt-5.4), switch renewal to gpt-5.4-nano - #412

Merged
Marco Weber (qxsch) merged 154 commits into
microsoft:mainfrom
glejdis:glejdis-clm-gpt-4.1-mini
Aug 12, 2026
Merged

Update 04 Agentic CLM MicroHack model fleet: drop Claude (→ gpt-5.4), switch renewal to gpt-5.4-nano#412
Marco Weber (qxsch) merged 154 commits into
microsoft:mainfrom
glejdis:glejdis-clm-gpt-4.1-mini

Conversation

@glejdis

@glejdis glejdisshkembi (glejdis) commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Follow-up to #404 (merged) updating the model fleet for the 04_Agentic_Contract_Lifecycle_Management MicroHack.

What changed

  • Intake & Drafting agent: now runs on gpt-5.4 (shared with the orchestrator) instead of Anthropic Claude Opus 4.8. All Claude/Anthropic deploy machinery is removed (marketplace attestation params, quota preflight, deployClaudeModel bicep param, Anthropic SDK fallback, anthropic dependency).
  • Obligation & Renewal agent: switched from gpt-5-mini to gpt-5.4-nano (version 2025-04-14, GlobalStandard) — the lightweight, high-frequency mini tier available in swedencentral.
  • Net fleet: 3 deploymentsgpt-5.4 (orchestrator + drafting), gpt-5.6-sol (clause & risk), gpt-5.4-nano (renewal).
  • Challenge 1 screenshots: added 9 step screenshots (fork, Codespace, az login, azd up, portal resource group, Foundry deployments, smoke test) wired into their slots in challenges/challenge-01.md.

Scope

Updates config, requirements.txt, infra (resources.bicep / main.bicep + regenerated azuredeploy.json), deploy scripts (deploy-lab.ps1 / deploy.ps1 / deploy.sh), CI, and all challenge/walkthrough/README docs. Diagrams (SVG / .mmd) are intentionally left unchanged.

Verified: az bicep build compiles, py_compile passes, and no residual claude / gpt-5-mini / gpt-4.1-mini references remain in code or docs.

Recent fixes (MCP / Challenge 4)

  • MCP server 421 Invalid Host header: the Container Apps-hosted clm-mcp server rejected Foundry/orchestrator tool calls because FastMCP's DNS-rebinding protection defaults to a localhost-only Host allowlist, which the public ACA FQDN fails. src/mcp_server/server.py now disables that protection on the public HTTPS transport (opt-in lockdown via MCP_ALLOWED_HOSTS). Existing labs must redeploy the server to pick up the new image.
  • Self-diagnosing orchestrator: src/orchestrator_mcp.py now probes a failed CLM_MCP_URL and, on 421, tells the candidate the server is running an old image and to redeploy (bash deploy/mcp-server/deploy.sh) — instead of the opaque MCP server failed to initialize: Cancelled via cancel scope. A matching troubleshooting TIP was added to Challenge 4 Part C.

Intake & Drafting now runs on gpt-5.4 (shared with the orchestrator) instead of Anthropic Claude Opus 4.8, and the Obligation & Renewal agent runs on gpt-4.1-mini (2025-04-14, GlobalStandard) instead of gpt-5-mini. Updates config, requirements, infra (bicep + regenerated ARM), deploy scripts, CI, and all docs under 04_Agentic_Contract_Lifecycle_Management. Diagrams (SVG/.mmd) left unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0fac447f-3cf0-4144-a2ed-d08060ed7dbc
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 1b2ceb92-7f36-4509-828e-6425aa8e6adc
Replace the Obligation & Renewal agent's lightweight model (gpt-4.1-mini)
with gpt-5.4-nano across code, infra, and docs in the 04 Agentic CLM
MicroHack: MODEL_RENEWAL default, Bicep/ARM deployment names, deploy
scripts, CI eval workflow, challenge and walkthrough guides, and the Ch3
bake-off. Pinned model version and historical gpt-4o-mini deprecation
notes are unchanged; image assets (.png/.svg) are not touched.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 8fce816f-a3e7-4004-aee5-159b20e67f1e
@glejdis glejdisshkembi (glejdis) changed the title Update 04 Agentic CLM MicroHack model fleet: drop Claude (→ gpt-5.4), switch renewal to gpt-4.1-mini Update 04 Agentic CLM MicroHack model fleet: drop Claude (→ gpt-5.4), switch renewal to gpt-5.4-nano Aug 3, 2026
glejdisshkembi (glejdis) and others added 25 commits August 3, 2026 19:03
Mirror remaining delta from glejdis/microhack-aiagents@main on top of the
gpt-5.4-nano model switch:
- Add 9 Challenge 1 step screenshots wired into challenge-01.md slots
  (fork, Codespace, az login, azd up, portal RG, Foundry deployments, smoke).
- Refresh challenge-01.md, README, and marketing deck.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 56e340cf-1118-41ad-b0d0-8812f357f5f4
…n-admin tenants

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0fac447f-3cf0-4144-a2ed-d08060ed7dbc
…n-admin tenants

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0fac447f-3cf0-4144-a2ed-d08060ed7dbc
Replace the architecture.png diagram (images/ and images/diagrams/) in the
04 Agentic CLM MicroHack with the refreshed diagram showing the
Obligation & Renewal agent on GPT 5.4 nano.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 8fce816f-a3e7-4004-aee5-159b20e67f1e
…ck docs)

My previous commit was based on a pre-sync copy and reverted the .png screenshot refs added by the content sync; this restores them while keeping the Task 6 Path B changes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0fac447f-3cf0-4144-a2ed-d08060ed7dbc
Replace images/diagrams/user-journey.png in the 04 Agentic CLM MicroHack
with the refreshed Contract Manager journey diagram showing the
Obligation & Renewal and Proactive Alert agents on GPT 5.4 nano.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 8fce816f-a3e7-4004-aee5-159b20e67f1e
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0fac447f-3cf0-4144-a2ed-d08060ed7dbc
…in README

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0fac447f-3cf0-4144-a2ed-d08060ed7dbc
…media-compressed)

489 MB source deck compressed to 64 MB (re-encoded embedded videos to H.264/AAC capped at 1280w; downscaled/quantized images and GIFs) so it fits GitHub's 100 MB per-file limit. Structure verified intact (1547/1547 entries, 117 slides load).

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 0fac447f-3cf0-4144-a2ed-d08060ed7dbc
Remove the 9 step SVGs in images/challenge-01/steps that have a real PNG
twin (01-08, 10) and repoint solution-01.md's references to the PNGs.
The 5 svg-only steps (09, 11-14) are kept until real screenshots exist.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 03271468-6418-4ab5-822b-2890df1a432e
Follow-up to 788bde9, which deleted the placeholder SVGs but missed the solution-01.md repoint, leaving broken image links. Point 01,04,05,06,07,08,10 at their PNG twins; 09 stays SVG.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 03271468-6418-4ab5-822b-2890df1a432e
…dry Playground

intake_drafting_agent.py uses FoundryChatClient, which runs the tool-calling
loop in-process, so the agent never registers server-side and does not appear
in the Foundry portal Agents list or Playground. publish_agent.py publishes the
same agent (name, persona, gpt-5.4, Foundry IQ grounding) as a persistent Foundry
agent version via AIProjectClient.agents.create_version, so it shows in the
Playground for the Task 4 sample prompts/screenshots. Docs updated in
challenge-02.md and solution-02.md to explain the in-process vs. portal paths.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 03271468-6418-4ab5-822b-2890df1a432e
…optional

Two fixes for this nested copy:
- The Foundry publish/Playground note landed under Task 1 (before the kb_setup
  screenshot) instead of Task 4 (before the Playground screenshot), because this
  file has extra earlier screenshot slots than the standalone repo. Moved the note
  in challenge-02.md and solution-02.md to Task 4 where it belongs.
- Clarify that publishing the agent (publish_agent.py) is an OPTIONAL Playground
  convenience, not required; --delete is optional, not cleanup you must run. Add a
  Challenge 3 note that Tracing / Agent Monitoring are populated by OpenTelemetry
  telemetry from running the in-process demos, not by a registered agent, so an
  empty Assets -> Agents list is expected and deleting a published agent does not
  affect monitoring.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 03271468-6418-4ab5-822b-2890df1a432e
Mirror the three real Challenge 02 screenshots (kb-setup, agent demo,
Foundry Playground) from microhack-aiagents main (PR microsoft#21) into the hack
and repoint challenge-02.md and solution-02.md image slots from
placeholder .svg to the real .png, matching the standalone repo.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 03271468-6418-4ab5-822b-2890df1a432e
The three Challenge 02 screenshot slots now use the real PNGs, so the
placeholder .svg files are unreferenced. Delete them, matching the
standalone repo.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 03271468-6418-4ab5-822b-2890df1a432e
Re-encode the marketing deck's media to keep the committed .pptx well
under GitHub's 100MB limit, matching the standalone repo:
- MP4 videos re-encoded to H.264 720p (CRF 30): ~303MB -> ~45MB
- Large opaque PNGs converted to JPEG; alpha PNGs quantized/downscaled
  (cap 1280px): ~151MB -> ~9MB
- Animated GIFs re-encoded to 480px/96-color palette: ~46MB -> ~4MB

All 128 slides, 2364 shapes and 573 media parts preserved and verified
loadable; no broken relationships.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 03271468-6418-4ab5-822b-2890df1a432e
Mirror of microhack-aiagents main a8a550c. The Challenge 3 quality gate averaged
groundedness over all 16 rows, including 3 refusal + 2 tool_call rows whose
correct answer is deliberately not grounded in the row's context snippet — they
score low and drag the mean below --gate 4.0 even for a well-built agent. Compute
the gate over the groundable categories only (grounded_qa + clause_risk), show
both numbers in the scorecard, and add a hint + docs pointing a genuinely low
score at an empty/unconnected clm-corpus AI Search index.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 03271468-6418-4ab5-822b-2890df1a432e
Mirror of microhack-aiagents main c3040c0. The renewal model was renamed to
gpt-5.4-nano but the version was left at 2025-04-14 (the gpt-4.1 family version),
which Azure rejects during azd up template validation because no
'gpt-5.4-nano @ 2025-04-14' exists in the swedencentral catalog. The catalog
offers gpt-5.4-nano at 2026-03-17 (GlobalStandard), so pin that across
resources.bicep, azuredeploy.json, deploy.sh, deploy.ps1, and the challenge-01
docs; keep 2025-04-14 only in the stale-fork detection lists.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 03271468-6418-4ab5-822b-2890df1a432e
azure-ai-evaluation pulls in NLTK, whose import-time security finder blocks
import regex unless Python runs with -P / PYTHONSAFEPATH, crashing
python src/evaluators.py before any row is scored. Pre-import regex so it's
cached in sys.modules before nltk loads; add a troubleshooting row.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 03271468-6418-4ab5-822b-2890df1a432e
The earlier regex pre-import was whack-a-mole: NLTK (pulled in by
azure-ai-evaluation) blocks *several* helper libs (regex, defusedxml, ...) via
its import-time security finder unless Python runs in safe-path mode. Getting
past regex just surfaced the same block on defusedxml.

Fix at the root: evaluators.py, safety_eval.py and red_team.py now re-run
themselves once under PYTHONSAFEPATH (via subprocess) when not already in
safe-path mode, so the guard stands down for every such module. Each script
re-adds its own dirs to sys.path explicitly, so safe-path mode doesn't break
sibling imports. Verified end-to-end against a simulated NLTK guard.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 03271468-6418-4ab5-822b-2890df1a432e
azure-ai-evaluation pulls in NLTK, whose inisec.py import guard blocks
regex/defusedxml/wordnet when they resolve to a path inside the current
working directory. Because the hack venv lives inside the repo (./.venv),
every site-package counts as "inside cwd" and imports are blocked. -P /
PYTHONSAFEPATH do not help -- the guard checks Path.cwd(), not sys.path.

Replace the ineffective PYTHONSAFEPATH self-relaunch in evaluators.py,
safety_eval.py and red_team.py with a _preload_eval_sdk() shim that imports
the azure-ai-evaluation -> NLTK chain once from a throwaway temp directory,
so the guard sees those modules as outside cwd and caches them. Update the
challenge-03 troubleshooting row with the real root cause + cd-outside-repo
workaround.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 03271468-6418-4ab5-822b-2890df1a432e
The Challenge 3 quality gate grounds on the clm-corpus Azure AI Search index,
which is seeded in Challenge 1. If a participant runs the evaluation before
seeding (or built the index schema via the SharePoint path without crawling any
documents), every groundable row scores low and the gate fails with a confusing
"groundedness below threshold" instead of the real cause.

- evaluators.py: add a best-effort _corpus_document_count() preflight that runs
  before the (slow, LLM-judged) eval. A definitive 0 stops early with the exact
  seed_corpus.py / kb_setup.py fix (exit 4); an unknown count never blocks.
- challenge-03.md: list "Challenge 1 corpus seeded (non-zero doc count)" as an
  explicit prerequisite.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 03271468-6418-4ab5-822b-2890df1a432e
The New Foundry portal has no project-level Tracing menu item; tracing and
monitoring moved under Build -> agent/model -> Monitor (or the search bar).
Update Task 1/Task 2 + the 'No spans' troubleshooting row to cover both the
New Foundry and classic click-paths, and make tracing_setup.py's console
hint UI-neutral to match.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 03271468-6418-4ab5-822b-2890df1a432e
The quality gate only prints an aggregate groundedness number, so a low score
(e.g. 2.8) gives no signal about WHY. --explain prints each row's category,
query, response, groundedness score AND the LLM judge's own groundedness_reason,
so participants can see which groundable rows lose points and why. Update the
'gate fails low' troubleshooting row to diagnose (check doc count, then --explain)
instead of assuming an empty index.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 03271468-6418-4ab5-822b-2890df1a432e
The GroundednessEvaluator scores each agent response against the row's context field. The 11 gated rows (grounded_qa + clause_risk) used terse one-line context snippets, so the drafting agent's thorough, corpus-grounded answers were penalized for adding true detail not present in the snippet (fallback ranges, DoA signature bands, carve-out lists). --explain confirmed every gated row scored 2.0 with the judge noting correct-but-adds-details-not-in-context, while rows whose context was already complete scored 4.0-5.0.

Enrich each gated row's context with the fuller authoritative passages that already exist in the corpus (MSA/NDA template clauses, Standard Clause Library CL-01..CL-12 positions, Contracting Policy P-2, Delegation of Authority DOA-1, Negotiation Playbook fallbacks). Queries, ground truths, and categories are unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 03271468-6418-4ab5-822b-2890df1a432e
glejdisshkembi (glejdis) and others added 29 commits August 11, 2026 11:05
Challenge-01: remove confusing Path C (shared-tenant corpus variant)
from Task 5.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 7ceb0541-1624-4040-bd74-c20395e5ed63
Challenge-02: add 'what this agent is' orientation at top of Task 2.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 7ceb0541-1624-4040-bd74-c20395e5ed63
Challenge-02: drop duplicated 'What good looks like' table + CT-4821
JSON from Task 4.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 7ceb0541-1624-4040-bd74-c20395e5ed63
… Challenge 6

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 43d3974f-5d29-4ae8-a120-77f4ca35428c
Challenge-02 solution: enrich into a real answer key (full INSTRUCTIONS,
'what correct looks like' per capability, acceptance-checks table).

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 7ceb0541-1624-4040-bd74-c20395e5ed63
…il steps

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 43d3974f-5d29-4ae8-a120-77f4ca35428c
…ublishing

- intake_drafting_agent persona: always retrieve the approved template from
  the knowledge base before drafting; never ask the user to supply one; mark
  any missing details as [PLACEHOLDERS]
- Challenge 2 Task 3: refresh the demo to the real six prompts (draft, 3x
  cited Q&A, CT-4821 tool call, refusal); fix the "four-prompt" wording
- Progressive publishing: each challenge publishes only its own agent via
  --agent (Ch2 intake-drafting, Ch4 clause-risk, Ch5 obligation-renewal)
- Add "Publish to Foundry & test in the Playground" as a named step and
  renumber optional content safety accordingly

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2131e192-9edc-47a7-92a2-14c05655a4b1
… screenshots

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 43d3974f-5d29-4ae8-a120-77f4ca35428c
Challenge-03: clean up Task 2 (Generate traffic) into clear
connect/run/open steps.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 7ceb0541-1624-4040-bd74-c20395e5ed63
Challenge-03: simplify Task 2 (Generate traffic) to the New
Foundry path only; drop the New/Classic portal table.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 7ceb0541-1624-4040-bd74-c20395e5ed63
…check

The Foundry portal Monitor tab showed a permanent 'Setup incomplete: Verifying access' banner because the lab granted participants only AI/Search roles - never a monitoring read role on the connected App Insights / Log Analytics, so the data-plane access check never passed (and never self-healed).

Grant Monitoring Reader (App Insights) + Log Analytics Reader (Log Analytics workspace) to the lab user in infra/resources.bicep + azuredeploy.json user-role block, in the deploy-lab.ps1 multi-user loop (idempotent, remediates existing labs), and to the signed-in user in deploy.ps1/deploy.sh. Add a Challenge 3 troubleshooting row (challenge + solution) with the immediate portal fix.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 43d3974f-5d29-4ae8-a120-77f4ca35428c
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 43d3974f-5d29-4ae8-a120-77f4ca35428c
…+ solution

Task 4's intro jumped straight to 'gpt-5.4 vs gpt-5.4-nano on the same scorecard' with no context. Add a plain-language explainer (A/B test, same eval/only the model changes, quality vs latency/cost trade-off) to challenge-03.md, and a fuller walkthrough with a worked reading of the side-by-side table + the model-choice trade-off to solution-03.md.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 43d3974f-5d29-4ae8-a120-77f4ca35428c
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2131e192-9edc-47a7-92a2-14c05655a4b1
Challenge-03 solution: explain the clm_rubric evaluator in one
section before Task 3 (concept + code + Foundry-portal build), align
the scorecard/bake-off/quality gate with src/evaluators.py, and add
the Task 2 run + trace-trajectory screenshots.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 7ceb0541-1624-4040-bd74-c20395e5ed63
Challenge-03: promote the clm_rubric evaluator to Task 3 in both the
challenge and solution (renumber the following tasks), expand the
quality-gate explanation, and add the bake-off screenshot.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 7ceb0541-1624-4040-bd74-c20395e5ed63
Challenge-03: add the rubric evaluator screenshot to Task 3 (the
Create-evaluator dialog showing the auto-generated clm_rubric
dimensions and weights).

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 7ceb0541-1624-4040-bd74-c20395e5ed63
Mirror of glejdis/microhack-aiagents main. solution-03 gains the 5-step
New Foundry Create-evaluation run flow (create -> target agent -> existing
traces -> add ClmRubricEvaluator -> review/submit) and challenge-03 gets the
matching text-only steps. Also syncs the upstream rubric-creation screenshots
(03-rubric-*) referenced by solution-03.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2131e192-9edc-47a7-92a2-14c05655a4b1
…urn detail)

Mirror of glejdis/microhack-aiagents main. Extends the Task 3 portal run
flow with the Completed run scoring 100% overall and the run detail view
(overall metric strip + per-turn Detailed metrics table with View JSON).

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2131e192-9edc-47a7-92a2-14c05655a4b1
Mirror of glejdis/microhack-aiagents main. Task 4 Part A shows deploy.sh
output (build/push, Container App created, managed identity, live /mcp
endpoint) and how to copy CLM_MCP_URL for Parts B/C.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2131e192-9edc-47a7-92a2-14c05655a4b1
Mirror of glejdis/microhack-aiagents main. Task 1 states the baseline scan
provides the before-number for the Task 4 hardening comparison; Task 2
explains --strategies tests obfuscated/encoded attacks native safety misses.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2131e192-9edc-47a7-92a2-14c05655a4b1
Challenge-06: replace the Task 1 red-team scorecard screenshot with a
clean baseline scan (Overall ASR 0.0%, 0/8 attacks) and update the
alt text to match; the solution shares the same image.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 7ceb0541-1624-4040-bd74-c20395e5ed63
…ound

Mirror of glejdis/microhack-aiagents main. Brings the restructured Task 6
setup ("Register your own app" single-tenant flow) and adds the Dev Tunnels
CLI install + devtunnel user login before hosting (step 4), plus a
troubleshooting row — Codespaces don't ship the devtunnel CLI.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2131e192-9edc-47a7-92a2-14c05655a4b1
…ev tunnel + Open in Teams)

Bring microsoft#412's solution-05.md in line with main: adds the detailed
single-tenant app + Azure Bot registration steps (task6-app-*, task6-create-azure-bot,
task6-enable-teams-channel) plus new steps 7-8 for the Dev Tunnels CLI install/host
(task6-devtunnel-install) and the Open-in-Teams channel action (task6-open-in-teams),
each with an explanation. Ships all 8 referenced task6 images so no links break.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2131e192-9edc-47a7-92a2-14c05655a4b1
Adds deploy/capture-bot (deploy.sh, deploy.ps1, README) so the throwaway
capture bot can run on Azure Container Apps instead of local + dev tunnel.
Dockerfile CMD dispatches on APP_ROLE; capture bot binds CAPTURE_BOT_HOST
and now echoes TEAMS_SERVICE_URL + TEAMS_CONVERSATION_ID in its Teams reply
so the deployed (container) case can copy them into a local .env.
Challenge + solution Task 6 restructured into Option A (local+tunnel) /
Option B (deploy), plus a troubleshooting row for the Teams permission gate.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2131e192-9edc-47a7-92a2-14c05655a4b1
…olution step 7

Rewrites solution-05.md step 7 to match challenges/challenge-05.md Task 6:
present the public-endpoint choice as Option A (local + dev tunnel) vs
Option B (deploy to Azure) instead of dev-tunnel-primary with deploy as an
afterthought. Keeps the devtunnel screenshot under Option A.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2131e192-9edc-47a7-92a2-14c05655a4b1
…7 Option B

Adds task6-deploy-capture-bot.png (a successful deploy/capture-bot/deploy.sh
run showing the printed Messaging endpoint + follow-up log/delete commands)
under Option B, keeping the dev-tunnel screenshot under Option A.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2131e192-9edc-47a7-92a2-14c05655a4b1
The Teams install/sideload gate blocks the capture-bot step for many
tenants, making Tasks 5-7 (proactive alerts) unrunnable. Remove the whole
optional extension and its delivery code/images; keep the Obligation &
Renewal agent (used by the C1 smoke test, C3 tracing demo, and publish).

- Docs: challenge-05.md + solution-05.md trimmed to publish-only (Tasks 1-4);
  README, coach-guide, src/README, images READMEs, copilot-instructions updated
- Code: delete proactive_alerts.py, capture_reference_bot.py, deploy/capture-bot/;
  revert Dockerfile to MCP-only; drop botbuilder/aiohttp deps; drop the
  MICROSOFT_APP_*/TEAMS_* env scaffolding (.env.example, write_env, deploy.sh/ps1)
- Diagrams: remove the proactive-alert edge from architecture.mmd and the
  README mermaid; regenerate the C1 azure-resources diagram label

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2131e192-9edc-47a7-92a2-14c05655a4b1
Mirror latest Challenge 6 state from glejdis/microhack-aiagents@main:
- Update challenge-06.md and solution-06.md (guardrail/safety walkthrough)
- Refresh 02-redteam-scorecard.png
- Add guardrail step images (create-menu, pii-datatypes, controls, review,
  blocked) and safety-eval images (prompts, summary, safety-gate-dryrun)
- Remove superseded images (02-safety-gate.png/.svg,
  05-guardrails-protected-materials.png, 06-guardrails-select-agents.png)

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2131e192-9edc-47a7-92a2-14c05655a4b1
@qxsch
Marco Weber (qxsch) merged commit 369d0f5 into microsoft:main Aug 12, 2026
2 checks 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.

2 participants