Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions evals/agent-assets.lock.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"agentAssetsHash": "0185898b38122ae24c2fd215a02fd55ed3ccfdbfe1524e4953d3b2e326fd68b0",
"agentAssetsHash": "3609a526c5581390a2ef1ffd02c99942a6d2d9ad563a0741017853e965d827e0",
"scope": "azure-debug-generate.agent.md, azure-debug-generate/**, azure-debug-plan.agent.md, azure-debug-plan/**, azure-deploy.agent.md, azure-deploy/**, azure-project-integrate.agent.md, azure-project-integrate/**, azure-project-plan.agent.md, azure-project-plan/**, azure-project-scaffold.agent.md, azure-project-scaffold/**, shared-references/**",
"updatedAt": "2026-09-03T16:43:05.908Z",
"updatedAt": "2026-09-03T20:36:26.571Z",
"files": {
"azure-debug-generate.agent.md": "c9849fb6271193d104ef30161071bebe95fd29c6abea3a5c6d081416a5ebe8a6",
"azure-debug-generate/.metadata.json": "c0ccce18678415f23db0073d48cc646f2de446e7821c99c3130553548d958e0c",
Expand All @@ -10,10 +10,10 @@
"azure-debug-generate/references/emulators/_template.md": "76950ec0d9552fe55cf9e9d8f1685f79c1fef74206babef817499fb38303fe09",
"azure-debug-generate/references/emulators/azurite.md": "f17b3cda9716d39fede3078774000aad545c9b4b7bda11913f6f63905e15da1b",
"azure-debug-generate/references/emulators/postgres.md": "874ad86df90c0fda48adb5434d4cbb1f720762b1434a90f4494b5c16c72cf4ec",
"azure-debug-generate/references/generate.md": "e09b615fb44a46aafce8610abc314d2759376c4045a6040d394f62e4cdb54656",
"azure-debug-generate/references/generate.md": "a8948d12d6737f5bb282d607354321193c306163141155647fbbff40b8aa45d2",
"azure-debug-generate/references/limited-support.md": "427285f71f2eb4102c86d19dd079363b20900f722a5cf67158764dd973473b3a",
"azure-debug-generate/references/migrations.md": "e1b2723a9bd6b8554a1f9133b1b7483f86af217d06642ae7520e5e7816f05dd2",
"azure-debug-generate/references/multi-service.md": "09e4bf742d3b07236bee21787895dd010bdca7d08e4272034f21f4a32a15be34",
"azure-debug-generate/references/multi-service.md": "d1b0014a27023a17052a19fb3f1f983a15b7119f7460ebb9fc23dabdd20cec05",
"azure-debug-generate/references/preflight.md": "6df0fec6568fb4f92a21a87230d8bd9ca5b92dc0e69dacf11122a8827e6941a5",
"azure-debug-generate/references/project-types/_template.md": "b4e03b4c572cb49ad529eacc1ece920045a53979f8b47e454f6e22c0695e6da7",
"azure-debug-generate/references/project-types/frontend-spa/debug-adapters/_template.md": "5f4793706ae3cd74b10f2d7601cdaa01a6ffd4431aa3d569be32cabef5c8291b",
Expand Down
13 changes: 13 additions & 0 deletions evals/check-agent-drift.ts
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,19 @@ const contracts: Contract[] = [
pattern: /`?\/api\/health`?/,
grader: "plan-structure-valid (Route Definitions)",
},
{
// The sequenced compound task is reachable both directly and as a compound's
// `preLaunchTask`, so it is the task likeliest to be invoked twice — and it was
// the one task whose literal template omitted `runOptions`. A real run copied the
// template faithfully and produced 6 conforming tasks out of 7, failing
// `debug-config` with `invalidTaskRunOptions` on exactly the task the template
// shipped without it. Pinning the template, not the prose, because the template is
// what the agent copied.
file: "azure-debug-generate/references/multi-service.md",
name: "compound-task-run-options",
pattern: /"dependsOrder":\s*"sequence",\s*\n\s*"runOptions":\s*\{\s*"instanceLimit":\s*1,\s*"instancePolicy":\s*"silent"\s*\}/,
grader: "debug-config-structurally-sound (invalidTaskRunOptions)",
},
];

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,9 @@ Use the **Service Root** column from the plan's Services table to determine the

### Task `runOptions` Rules

Every task generated for the debug chain (install, clean, watch, build, top-level, and emulator tasks) **must** include `runOptions` with `instanceLimit: 1` and `instancePolicy: "silent"`. This prevents duplicate task instances and silently skips re-invocations when a task is already running (e.g., from compound + individual `preLaunchTask` chains).
**Every** task in `tasks.json` must include `runOptions` with `instanceLimit: 1` and `instancePolicy: "silent"` — install, clean, watch, build, top-level, emulator, **and the sequenced compound task** from [multi-service.md](multi-service.md) § Compound Debug Configuration. There is no task type this is optional for; if you are writing a `"label"`, you are writing `runOptions` beside it.

This prevents duplicate task instances and silently skips re-invocations when a task is already running (e.g., from compound + individual `preLaunchTask` chains). The compound task is the one that needs it most, not least: it is reachable both directly and as a `preLaunchTask`, so it is the likeliest to be invoked twice.

### Start Emulators Task

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ When a frontend service proxies to a local backend (e.g., a dev server proxy for
"{backend-service-id}: {backend-top-level-task}",
"{frontend-service-id}: {frontend-top-level-task}"
],
"dependsOrder": "sequence"
"dependsOrder": "sequence",
"runOptions": { "instanceLimit": 1, "instancePolicy": "silent" }
}
```

Expand Down
Loading