Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
225 commits
Select commit Hold shift + click to select a range
8044301
Remove Copilot on Rails feature
Jun 8, 2026
70dd310
Revert "Remove Copilot on Rails feature"
Jun 8, 2026
a59a761
Update Copilot on Rails views (#1449)
motm32 Jun 8, 2026
b9eaca9
Add `azure-debug-plan` custom agent and instructions (#1475)
MicroFish91 Jun 8, 2026
be42ab1
Add `azure-debug-generate` custom agent and instructions (#1478)
MicroFish91 Jun 8, 2026
4605511
Move skills to resources/agents instruction files (#1482)
nturinski Jun 8, 2026
bb92297
Improvements to dependency instructions for `azure-debug-generate` (#…
MicroFish91 Jun 9, 2026
a593097
Allow executing debug configurations in the project view (#1485)
MicroFish91 Jun 12, 2026
12b3b12
Improvements to compound launch/tasks & make sure TypeScript source m…
MicroFish91 Jun 15, 2026
9da8efa
add ui preview to planning doc (#1484)
nturinski Jun 15, 2026
4355450
Add command to download agent instruction files to workspace (#1488)
nturinski Jun 15, 2026
a151b0d
Add activation events for our extension when we detect CoR artifacts …
nturinski Jun 16, 2026
96eeffe
Change instructions to rename src folder to services for monorepos (#…
nturinski Jun 16, 2026
8e50ce2
Give folder names more service specific names (#1499)
nturinski Jun 17, 2026
f24654a
Improvements to prerequisite finding for `azure-debug-plan` (#1505)
MicroFish91 Jun 17, 2026
501d137
Autopilot Mode (#1497)
nturinski Jun 18, 2026
729299d
Make changes for accessibility and add loading view (#1494)
motm32 Jun 19, 2026
3910d84
Add fixes for next steps views to work properly (#1510)
motm32 Jun 22, 2026
48a5800
Forbid creating anything that is not app code (#1500)
nturinski Jun 23, 2026
f271d0a
Add prerequisite refresh (#1512)
motm32 Jun 23, 2026
205a334
Use a more service-centric planning paradigm (#1508)
nturinski Jun 23, 2026
f08ac6d
Fix view issues (#1513)
motm32 Jun 23, 2026
a432d9c
Make prerequisites logic shared, add a prerequisites view to the scaf…
MicroFish91 Jun 23, 2026
feae13c
Improve loading responsiveness of preview UI and add ability to write…
MicroFish91 Jun 23, 2026
6ccc4af
Add azure-project-integrate agent instructions (#1514)
nturinski Jun 23, 2026
ed8500f
Update instructions to properly capture multiple data stores on requi…
MicroFish91 Jun 23, 2026
4f7a2f6
Nat/integrate integration (#1517)
nturinski Jun 23, 2026
b881197
Fix comments showing up in the debug plan webview (#1520)
MicroFish91 Jun 23, 2026
61f52f3
add fix (#1521)
motm32 Jun 24, 2026
b0b4b51
Add refresh to scaffold prerequisites view (#1522)
motm32 Jun 24, 2026
b0ea35e
Fix feedback drawer issues (#1523)
motm32 Jun 24, 2026
9c26061
Multiple improvements to prerequisites listing and installation warni…
MicroFish91 Jun 25, 2026
6b737d2
Improve prerequisites detection (#1526)
MicroFish91 Jun 25, 2026
6e000d5
Fix lint for build (#1527)
MicroFish91 Jun 25, 2026
9679e7e
Add a warning about using python/.net (#1524)
nturinski Jun 30, 2026
44c8f4a
Increase max requests when using copilot on rails flow (#1531)
nturinski Jun 30, 2026
a634887
Change warning labels and remove some verbose comments (#1534)
nturinski Jun 30, 2026
94c698e
UI changes from feedback (#1529)
motm32 Jun 30, 2026
fab8c70
Greatly improve performance of requirements.json. (#1542)
nturinski Jul 8, 2026
47959c4
More UI fixes (#1541)
motm32 Jul 8, 2026
09c920e
Add "Create with Copilot" button when no folder is opened (#1544)
motm32 Jul 10, 2026
39e1613
Resume session (#1543)
nturinski Jul 14, 2026
f1d22c8
Increase max width (#1548)
motm32 Jul 15, 2026
b990c5a
Improve the UX preview plan project (#1545)
nturinski Jul 15, 2026
2eb35c2
CoR: Cherry pick MCP support, add CoR commands as MCP, wrap commands …
MicroFish91 Jul 16, 2026
9ee7255
Make it so autopilot carries over to new instances (#1539)
motm32 Jul 16, 2026
d0505fa
Add loading view for Running API tests (#1553)
motm32 Jul 16, 2026
6dec530
Requested small UI changes (#1551)
motm32 Jul 17, 2026
fef3b15
CoR: Add browser detection as part of identifying prerequisites and a…
MicroFish91 Jul 17, 2026
b3ed02f
Add a "Report issue" button to the loading views (#1559)
motm32 Jul 20, 2026
628fd83
Add a "Need help" button to loading views so users can easily resume …
motm32 Jul 20, 2026
14daf4c
CoR: Record local diagnostics metadata for originating prompt and cre…
MicroFish91 Jul 20, 2026
3605877
Add warning for Azure resources emulators with limited support (#1554)
motm32 Jul 22, 2026
a2b204a
Add telemetry for refreshing prerequisites (#1567)
motm32 Jul 22, 2026
b673f13
Add no-datastore project requirement (#1572)
alexweininger Jul 22, 2026
b365edc
Wait for custom agents before launch (#1571)
alexweininger Jul 22, 2026
7fe3664
Add a model selector to the landing page (#1573)
motm32 Jul 23, 2026
c2c9e48
Add telemetry for next steps buttons (#1566)
motm32 Jul 23, 2026
968131f
Improve deployment plan parsing (#1574)
alexweininger Jul 23, 2026
48df8ea
Open next steps view again after API tests are run (#1595)
motm32 Jul 24, 2026
4b70b20
Add telemetry and diagnostics for interactions with the local debug p…
MicroFish91 Jul 24, 2026
ecbff45
Add telemetry and diagnostics for interactions with the project scaff…
MicroFish91 Jul 24, 2026
8cbdcf6
Add telemetry and diagnostic for interactions with the requirements v…
motm32 Jul 24, 2026
8179c86
Add telemetry and diagnostics for interactions with the deployment pl…
MicroFish91 Jul 24, 2026
62e7700
Add some missing plan telemetry points (#1602)
MicroFish91 Jul 26, 2026
e2ce62c
CoR: Record ISO timestamps (#1605)
MicroFish91 Jul 27, 2026
74356cb
CoR: Record basic system / model specs for telemetry and diagnostics …
MicroFish91 Jul 27, 2026
3621f2e
CoR: Standardize command and telemetry ids (#1603)
MicroFish91 Jul 27, 2026
5cd76a9
CoR: Delete some dead code (#1612)
MicroFish91 Jul 27, 2026
bb9bb54
Add a warning for when the GHC4A extension/skills are not installed w…
motm32 Jul 28, 2026
9cd0225
Record autopilot telemetry automatically for all CoR commands (#1613)
MicroFish91 Jul 28, 2026
05b883d
CoR: Improve prerequisites detection to be more shell agnostic (#1558)
MicroFish91 Jul 28, 2026
f69cab0
CoR: Add extra telemetry for `openWithChatAgent` family of functions …
MicroFish91 Jul 28, 2026
3e2d1e9
Change agent to always opening the requirements view (#1621)
motm32 Jul 28, 2026
d0574eb
CoR: Add a way to report issue to GitHub with attached diagnostics in…
MicroFish91 Jul 28, 2026
0524202
Write the status for approved project plan (#1619)
motm32 Jul 28, 2026
14da9d0
Fix #1624: guard azd hook schema in deploy agent to stop deploy retry…
alexweininger Jul 29, 2026
d48fffa
Fix JSON formatting in settings.json
nturinski Jul 29, 2026
8d0c7b8
CoR: Remove `onStartupActivation` by making `Azure Project` view alwa…
MicroFish91 Jul 30, 2026
c4c4786
Harden scaffold instructions so the Approve-UI preview iframe reliaby…
nturinski Jul 30, 2026
6dc06fa
Merge from main (#1630)
nturinski Jul 30, 2026
7ba9115
Merge branch 'main' into feat/CoR
Jul 30, 2026
6372547
CoR: Separate system info recording behavior for diagnostics vs. tele…
MicroFish91 Jul 30, 2026
ffeb780
add deploy-ready prebuilt artifact contract (#1643)
nturinski Aug 3, 2026
a867edc
CoR: Invoke extension commands through the VS Code API (#1640)
MicroFish91 Aug 3, 2026
9c2938a
CoR: Record debug plan approval telemetry even when autopilot is acti…
MicroFish91 Aug 6, 2026
9961aa2
docs: add Create New Project with Copilot guide and support runbook (…
nturinski Aug 13, 2026
8b26ba6
CoR: Add recent-prompt history navigation for prompts on the landing …
MicroFish91 Aug 14, 2026
070f507
CoR: More improvements to local debug agent instructions (#1663)
MicroFish91 Aug 14, 2026
84265ac
Use the app onboarding pipeline (#1665)
nturinski Aug 14, 2026
f794593
scaffold: document monorepo self-contained deploy; bundling optional …
nturinski Aug 17, 2026
d59a797
CoR: Add debug session watcher for project debug telemetry (#1666)
nturinski Aug 17, 2026
936082f
Fix docker-compose credential corruption and blank local database cre…
alexweininger Aug 18, 2026
d9e058a
Merge branch 'main' into feat/CoR
Copilot Aug 20, 2026
298f04a
Fix lint errors in azure-deploy agent reference schema files
Copilot Aug 20, 2026
b01c7ae
CoR: Remove unnecessary prompt input property from some mcp tools (#1…
MicroFish91 Aug 20, 2026
398f7ed
CoR: Add `debugAnyway` as a default workspace setting (#1677)
MicroFish91 Aug 21, 2026
d93a9c9
CoR: In autopilot, reuse project-plan prerequisites for the debug pla…
MicroFish91 Aug 21, 2026
c586821
CoR: Ensure we are using the local harness during runs (#1680)
MicroFish91 Aug 22, 2026
309b01f
CoR: Resolve workspace trust errors that block GitHub Copilot Chat fr…
MicroFish91 Aug 24, 2026
4df6972
Add a deployment results view (#1687)
motm32 Aug 24, 2026
566e7f4
Add vally framework and graders for azure-project-plan (#1683)
motm32 Aug 25, 2026
d6e18de
Run the Vally project-plan eval on MSBench against a real extension b…
alexweininger Aug 25, 2026
55c2dda
Run the real Vally validators in MSBench as exec: assertions (#1695)
alexweininger Aug 25, 2026
2b1e646
Convert the eval scripts to TypeScript (#1696)
alexweininger Aug 25, 2026
e4e719f
Stop run.sh from reporting throttled and raced runs as results (#1698)
alexweininger Aug 26, 2026
28ac4d5
Raise the MSBench run timeouts so long end-to-end runs aren't killed …
alexweininger Aug 26, 2026
9a2373a
Fix the evals lint break left by the TypeScript conversion (#1705)
alexweininger Aug 26, 2026
3e47c9d
Verify what actually ran before trusting a run's results (#1701)
alexweininger Aug 26, 2026
a7449ca
Fail eval runs that die early instead of giving them partial credit (…
alexweininger Aug 26, 2026
49930fa
Add `evals/msbench/regrade.ts`: re-grade past MSBench runs for zero t…
alexweininger Aug 26, 2026
5d4e031
Add the scaffold-phase eval gates from #1693 (#1707)
alexweininger Aug 26, 2026
258482e
Add the local-debug eval gates from #1694 (#1708)
alexweininger Aug 26, 2026
bd0ed8f
Turn on MSBench run queueing, pin smoke mode off, and document the ar…
alexweininger Aug 26, 2026
9dd6d8f
Remove .vally.yaml paths that point at directories that never existed…
alexweininger Aug 26, 2026
13d1561
Delete the retired headless eval runner (#1709)
alexweininger Aug 26, 2026
cabaa4e
Measure what a real multi-turn chain costs, with the first multi-turn…
alexweininger Aug 26, 2026
ad41024
Count the sub-agent trajectories: reported uncached tokens were 2.5x …
alexweininger Aug 26, 2026
a41d578
Split the MSBench config into base, phase and stimulus layers (#1715)
alexweininger Aug 26, 2026
551e0e8
Add fidelity gates: did the agent build what it planned? (#1721)
alexweininger Aug 26, 2026
0d844fb
Audit the gates themselves, not just the product (#1718)
alexweininger Aug 26, 2026
fd85354
Add the runtime gates: does the generated project actually run? (#1719)
alexweininger Aug 26, 2026
c8ea2cf
Add a debug-breakpoint eval gate that hits a real breakpoint (#1717)
alexweininger Aug 26, 2026
5853938
Stop the grader scanner reading English as code (#1727)
alexweininger Aug 26, 2026
8f690c4
Refuse to audit a run MSBench has not marked complete (#1725)
alexweininger Aug 26, 2026
d196494
Make a project type a data file: the stack schema (#1726)
alexweininger Aug 26, 2026
fafab22
Let the health gate fail for the thing it exists to check (#1728)
alexweininger Aug 26, 2026
ed16387
Stop reporting "my parser found nothing" as "there is nothing to chec…
alexweininger Aug 26, 2026
7c0d331
Derive which gates a stack runs, instead of hand-wiring them (#1731)
alexweininger Aug 26, 2026
32c16ba
Flag gates that never fail and sometimes decline to answer (#1729)
alexweininger Aug 26, 2026
f3153fb
Record the part of a gate that nothing tests (#1732)
alexweininger Aug 26, 2026
ddbd1e7
Make "run.sh works on a clean machine" a check, not a comment (#1733)
alexweininger Aug 26, 2026
9707d01
Read the stack declaration, and stop asserting that a worker listens …
alexweininger Aug 26, 2026
b4603a8
Stop two runtime gates requiring the declaration they consume (#1736)
alexweininger Aug 26, 2026
03ce495
Tell gate-health which reds we already agreed to pay for (#1735)
alexweininger Aug 26, 2026
0f8d171
Stop a typo in the gate table from silently unwiring a gate (#1737)
alexweininger Aug 26, 2026
a199d50
Make the unexplained gate rows visible rather than clean (#1738)
alexweininger Aug 26, 2026
3d3336f
Stop the README implying the gate table is verified (#1739)
alexweininger Aug 26, 2026
67e65f0
Stop demanding a Database section from a project that has no datastor…
alexweininger Aug 26, 2026
cdf15ba
Wire the eight merged scaffold and debug graders to real MSBench stim…
alexweininger Aug 26, 2026
dcad7cb
Make the deny-list the default way to say "this fact must be somethin…
alexweininger Aug 26, 2026
35a7070
Wire the debug probe into MSBench, plus one cheap run to prove it ins…
alexweininger Aug 26, 2026
fc75c88
Stop gate-health rebuilding the declared-gap key by hand (#1742)
alexweininger Aug 26, 2026
c735167
Fix five places the MSBench docs and config disagreed with themselves…
alexweininger Aug 26, 2026
fe6fd24
Fix the two things that were only ever wrong on the machine that matt…
alexweininger Aug 26, 2026
5c29c51
CoR: Β Add first-launch browser debugging troubleshooting guidance for…
MicroFish91 Aug 26, 2026
4599961
CoR: Improve `azure-debug-generate` troubleshooting docs (#1745)
MicroFish91 Aug 26, 2026
f71349c
Probe the one mechanism a phase chain can still use, before building …
alexweininger Aug 26, 2026
3318bc1
Report a gate that never ran as not-attempted, not as a failure (#1747)
alexweininger Aug 26, 2026
9358472
CoR: Fix webview syntax error from apostrophes in initial data (#1748)
nturinski Aug 26, 2026
a872387
Fail the job when the assertions failed, instead of reporting green (…
alexweininger Aug 26, 2026
c635a49
Inventory ARM resources before and after deployment to give a clean u…
nturinski Aug 26, 2026
f4c9037
CoR: Add safe install links for prerequisites and standardize format …
MicroFish91 Aug 26, 2026
2d4ee8c
Seed the scaffold phase from real planner output, and notice when it …
nturinski Aug 26, 2026
14310d2
Fix lint failures in eval sources
Copilot Aug 26, 2026
7a4e2fc
Fix duplicate deployment plan fields
Copilot Aug 26, 2026
43df84f
Make the eval harness work on a clean Windows machine (#1751)
patverb Aug 27, 2026
9c626fa
Find the frontend where the plan put it, and let certification move a…
patverb Aug 27, 2026
410c131
Measure the eval harness against itself: func, --dind, turn shape, an…
nturinski Aug 28, 2026
4b01667
Add deploy-stage iac-compiles gate (#1754)
patverb Aug 28, 2026
b8ea49e
Make the runtime gates able to run, and find out what they say (#1755)
nturinski Aug 31, 2026
e92551f
fix: don't force the debug view when iterating via Next Steps (#1761)
nturinski Aug 31, 2026
ccf4c4d
Runtime gates: resolve dependencies the way Node does, not by one dir…
nturinski Aug 31, 2026
7a6057f
fix: drop deprecated Claude Opus 4.6 from the model list (#1762)
nturinski Aug 31, 2026
649bf84
fix: let users reopen the progress view after closing it early (#1760)
nturinski Aug 31, 2026
f25d5b0
Fix lint on feat/CoR: ignore grader-certification fixtures as a tree …
nturinski Sep 1, 2026
f7c4546
Scaffold: forbid tsconfig `paths` aliases for cross-workspace imports…
nturinski Sep 1, 2026
1b43164
safety-boundaries: count only what the agent wrote, so the gate can t…
nturinski Sep 1, 2026
730dd3b
Add 8 plan-phase scenario stimuli and two requirements grader flags (…
patverb Sep 2, 2026
6f5ef67
Automate the red-team prompts that can be, and state why the rest can…
nturinski Sep 3, 2026
1a60759
Phase1: feat(copilot-on-rails): add Podman as a local-debug container…
nturinski Sep 3, 2026
7b5d5f3
Prove the debug-breakpoint gate can run against a real Azure Function…
nturinski Sep 3, 2026
5b3f38d
Seed the scaffold suites with a plan the planner would actually emit …
nturinski Sep 3, 2026
d35b65a
fix(copilot-on-rails): disable Approve on an already-approved deploym…
nturinski Sep 9, 2026
2f03f24
fix(msbench): resolve build lint errors
Copilot Sep 9, 2026
48820eb
Say what the phase-reachability check actually proves (#1782)
nturinski Sep 9, 2026
0bcc0e4
Give the sequenced compound task the runOptions its siblings get (#1783)
nturinski Sep 9, 2026
fc8ae3b
Check that the seeded plan is one the planner would emit (#1784)
nturinski Sep 9, 2026
a5fc47b
Stop treating msbench-cli extract's exit code as proof it extracted (…
nturinski Sep 9, 2026
c032dba
CoR: Add a deployment results view opener to the Azure Project tree (…
motm32 Sep 9, 2026
a74e183
Check that a stimulus asserts each MCP tool is called, not just that …
nturinski Sep 9, 2026
276e6c8
Let a full refusal pass redteam-exfiltration-endpoint, anchored on en…
nturinski Sep 9, 2026
7491b18
feat(copilot-on-rails): add GPT-5.6 Sol and Terra to the model list (…
nturinski Sep 9, 2026
5db163a
CoR: Don't show warning when only our downloaded files are in the wor…
motm32 Sep 10, 2026
4c1240c
Validate the model MSBench actually runs, and pin it to one the agent…
nturinski Sep 10, 2026
71d8acc
Revert "Validate the model MSBench actually runs, and pin it to one t…
nturinski Sep 10, 2026
761263a
fix(copilot-on-rails): stop auto-opening the Azure portal on deploy (…
nturinski Sep 10, 2026
a1ba9bf
CoR: Hide mermaid diagram if and error occurs rendering it (#1822)
motm32 Sep 11, 2026
4b558ba
CoR: Small UI Changes (#1816)
motm32 Sep 11, 2026
2c2424a
Mandatory managed identity, no secrets/passwords, no Key Vault (azure…
nturinski Sep 11, 2026
c0a922b
Run post-deploy migrations via an access ladder instead of opening th…
nturinski Sep 11, 2026
5dacef3
CoR: Add telemetry for `azure-deploy` artifacts (#1831)
MicroFish91 Sep 12, 2026
b8273d7
CoR: Harden requirements parsing (#1836)
MicroFish91 Sep 14, 2026
4879c2f
CoR: Harden preview manifest parsing (#1837)
MicroFish91 Sep 14, 2026
051f735
CoR: Improve package metadata validation (#1835)
MicroFish91 Sep 14, 2026
88967a9
CoR: Improve JSON parse type safety (#1833)
MicroFish91 Sep 14, 2026
6f00485
CoR: No dangerous html setting & use "strict" mermaid rendering (#1834)
MicroFish91 Sep 14, 2026
a7f6859
CoR: Add a tool to verify each custom agent was launched correctly (#…
MicroFish91 Sep 14, 2026
4706308
CoR: Add lookup for available models instead of hard coding (#1845)
motm32 Sep 14, 2026
176312e
Fix the frontend-scaffold seam gate: one real bug, one vacuous fail (…
nturinski Sep 14, 2026
e349f96
Say whether a gate's numbers are about the agent or about a fixture (…
nturinski Sep 14, 2026
4fa463c
Charge imperative provisioning to the agent instead of skipping the g…
nturinski Sep 14, 2026
22e0781
Fix CoR CI import resolution (#1846)
nturinski Sep 14, 2026
1ccb471
fix(copilot-on-rails): require quoted mermaid labels in debug plan di…
nturinski Sep 14, 2026
fb527e4
Grade the integrate agent's seam swap, and unbreak certification on f…
nturinski Sep 14, 2026
ce26147
Refresh merged CoR agent asset baseline (#1847)
nturinski Sep 14, 2026
505bbba
Add Microsoft license headers to CoR code (#1848)
nturinski Sep 14, 2026
93cd955
CoR: Deduplicate custom agent launch reporting (#1849)
MicroFish91 Sep 14, 2026
306dda8
CoR: Fix deployment view not rendering (#1851)
motm32 Sep 14, 2026
32cfc10
fix(copilot-on-rails): activate extension from the welcome view Creat…
nturinski Sep 14, 2026
363a289
Sweep MSBench on two models, and stop calling unverifiable runs resul…
nturinski Sep 14, 2026
2ce6286
Re-record the agent asset baseline so feat/CoR builds green (#1853)
nturinski Sep 14, 2026
3467c6f
Merge branch 'main' into feat/CoR
MicroFish91 Sep 15, 2026
8ff051d
CoR: Add a deployment progress view (#1830)
motm32 Sep 15, 2026
e8c6381
CoR: Fix framework options for model-generated service labels (#1860)
MicroFish91 Sep 15, 2026
b716710
Nat/random fixes (#1861)
nturinski Sep 15, 2026
cb51889
Swap the Claude sweep slot to claude-sonnet-5, and stop voids faking …
nturinski Sep 15, 2026
569b36c
Simplify deployment confirmation progress (#1862)
motm32 Sep 15, 2026
13e3050
Restore the CoR source files #1861 overwrote from a stale branch (#1863)
nturinski Sep 15, 2026
2444d94
Drop GPT Astra from the supported model list (#1864)
nturinski Sep 15, 2026
c473433
Release 0.13.0: Create New Project with Copilot (#1865)
nturinski Sep 16, 2026
1e9987d
Set CORS on the API so a deployed frontend can call it (#1868)
nturinski Sep 16, 2026
c53849a
CoR: Simplify API login planning, provide pattern for dev vs. prod ad…
MicroFish91 Sep 16, 2026
002276c
Fix stale agent asset baseline hash (#1869)
MicroFish91 Sep 16, 2026
ee44684
CoR: Steer `azure-deploy` away from SWA internal `/api` when deployin…
MicroFish91 Sep 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
9 changes: 9 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
# evals/ and resources/agents/ must be LF in every working tree. Git for
# Windows sets core.autocrlf=true system-wide, so a plain Windows clone gets
# CRLF and three byte-exact checks fail locally while CI stays green:
# npm run certify manifest.json mutations search for strings with "\n"
# npm run stacks:check .wiring.md snapshots are compared byte-for-byte
# npm run drift sha256 over the raw bytes of resources/agents/**
evals/** text=auto eol=lf
resources/agents/** text=auto eol=lf

NOTICE.html linguist-vendored=true

.github/workflows/*.lock.yml linguist-generated=true merge=ours
81 changes: 81 additions & 0 deletions .github/instructions/copilot-on-rails-docs.instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
---
description: 'Keep the Create New Project with Copilot (Copilot on Rails) user guide and support runbook in sync whenever the feature changes.'
applyTo: "src/webviews/copilotOnRails/**, src/commands/copilotOnRails/**, src/chat/tools/copilotOnRails/**, src/utils/copilotOnRails/**, src/tree/project/**, resources/agents/**"
---

# Keep the Copilot on Rails docs in sync

You are editing the **Create New Project with Copilot** feature (codename *Copilot on Rails*, command prefix
`copilotOnRails.`). Its end-user guide and support/triage runbook lives at
[docs/copilot-create-project.md](../../docs/copilot-create-project.md).

**Rule:** any change to this feature's user-visible behavior, surfaces, or support flow must be reflected in
that document **in the same change**. Treat the doc as part of the feature β€” a change that alters behavior
without updating it is incomplete.

## When a change requires a doc update

Update the matching section of `docs/copilot-create-project.md` when you:

| Change | Section(s) to update |
| --- | --- |
| Add / rename / remove a `copilotOnRails.*` command (TS handler **or** `package.json` / `package.nls.json`) | UI surfaces reference (Part 3), Commands appendix, and the relevant stage |
| Add / rename / remove an MCP tool (`src/chat/tools/copilotOnRails/**`) | The MCP tools table and the pipeline diagram |
| Add / change / remove a webview or its behavior (`src/webviews/copilotOnRails/**`) | UI surfaces table, the stage that uses it, and its screenshot |
| Add / change / remove an agent or a hand-off (`resources/agents/**`) | The agents table, the Mermaid pipeline diagram, and the affected stage |
| Change a `.azure/*` artifact, the `.github/agents` download behavior, or a `workspaceState` key | Files & state |
| Change what diagnostics capture, or the Report Issue / Inspect Diagnostics behavior | Support & triage runbook, including the "What the diagnostics contain (privacy)" section |
| Change the launch / resume / empty-folder / autopilot flow | Launching, Resuming a session, and Autopilot mode |

**Security rule:** when CoR code starts reading a new agent or workspace artifact, consumes a new field,
constructs a path, command, or URL from artifact data, or renders artifact text as HTML or SVG, follow and
update [Safe parsing and rendering](../../docs/copilot-create-project.md#safe-parsing-and-rendering). Also
update **Files & state** when the artifact inventory changes.

## New or changed UI β€” flag screenshots to re-capture

Screenshots are captured by hand and stored separately, so the agent can't re-shoot them. When your change
touches the UI, **tell the developer which images to refresh** and why:

- **Altered an existing screen** (relabeled or moved control, restyled view, new or removed field, changed
copy, different states): its screenshot is now **stale even though the placeholder already exists**. Name
the affected file(s) and say in one line what changed.
- **Added a brand-new screen or state**: add the matching `πŸ“·` placeholder (the blockquote plus its centered
`<p align="center"><img …></p>` reference β€” images in this doc are centered, not raw `![]()`) and a
screenshot references section, then tell the dev it needs a first capture.
- **Removed a screen**: delete its placeholder and checklist entry, and note the removal.
- Never delete an existing placeholder just because its PNG is still missing β€” the images are captured
separately from the prose.
- When unsure whether a visual change is significant, flag it anyway.

Use this map from source area to the screenshot(s) it backs:

| You changed… | Screenshot(s) to re-capture |
| --- | --- |
| `src/tree/project/**`, the `azureProject` view / welcome content | `01-launch-azure-project-view.png`, `12-azure-project-progress-tree.png` |
| The launch / empty-folder / resume flow (`createProjectWithCopilot.ts`, `resume*`) | `02-empty-folder-prompt.png`, `11-resume-prompt.png` |
| `CreateProjectView` (prompt + model picker) | `03-create-project-prompt.png` |
| `RequirementsView` | `04-requirements-view.png` |
| `ScaffoldPlanView` / plan preview (incl. UI preview cards) | `05-plan-preview.png` |
| `FrontendPreviewView` (Approve UI) | `06-frontend-preview-approve-ui.png` |
| `ScaffoldNextStepsView` | `07-scaffold-next-steps.png` |
| `LocalPlanView` (debug plan) | `08-debug-plan-view.png` |
| `LocalDevNextStepsView` | `09-debug-next-steps.png` |
| `DeploymentPlanView` | `10-deployment-plan-view.png` |
| `DeployResultView` | `15-deployment-results-view.png` |
| `reportIssue` (issue template) | `13-report-issue-github.png` |
| `inspectDiagnostics` (JSON payload) | `14-inspect-diagnostics-json.png` |

## Before you finish

- **Report screenshots to the developer:** in your summary, list every image your change makes stale (by
filename, with a one-line reason) plus any placeholders you added or removed, so they can capture or
refresh them. If your change touched no UI, say so.
- Re-read the affected sections and confirm every command id, MCP tool name, agent name, file path, and
view→command mapping still matches the code you changed.
- Keep the reference tables and the Mermaid pipeline diagram accurate. When you edit that diagram, **wrap
every node label and edge label in double quotes** (`Plan["1 Β· azure-project-plan"]`,
`A -->|"@azure/storage-blob"| B`) β€” mermaid v11 reads a leading `@` in an unquoted label as edge-ID
syntax and fails to parse the whole diagram.
- If nothing user-visible changed (a pure internal refactor), no doc update is needed β€” note that briefly
instead of editing the doc.
125 changes: 125 additions & 0 deletions .github/workflows/agent-contracts.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
name: Agent Contracts

# The half of the Vally eval suite that needs no Copilot credentials.
#
# Running the agent itself now happens on MSBench (see msbench-evals.yml), but
# the checks below still earn their place in PR CI: they are fast, they need no
# token, and they guard the graders and agent assets that the MSBench run
# depends on. A broken grader or a drifted instruction file would otherwise only
# surface as a confusing eval failure much later.
#
# Deliberately absent: anything that drives a live agent. That now happens on
# MSBench (see msbench-evals.yml), and the files that did it headlessly β€”
# run-eval.cjs, check-copilot-auth.ts, check-gate-tools.ts and the SDK executor β€”
# have been deleted rather than left unreferenced in the tree.
on:
pull_request:
paths:
- 'evals/**'
- 'resources/agents/**'
- '.vally.yaml'
- '.github/workflows/agent-contracts.yml'
workflow_dispatch:

env:
NODE_VERSION: '22'

jobs:
contracts:
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: read
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}

- name: Install eval dependencies
run: npm ci
working-directory: evals

- name: Add Vally CLI to PATH
run: echo "$GITHUB_WORKSPACE/evals/node_modules/.bin" >> "$GITHUB_PATH"

# A rule removed from the shipped agent should not linger in the eval's
# copy of it, or the eval grades a prompt we no longer ship.
- name: Check agent instruction drift
run: npm run drift
working-directory: evals

# Graders run straight off TypeScript source, so a type error is a broken
# grader β€” catch it before it costs a full eval run.
- name: Type-check evals
run: npm run typecheck
working-directory: evals

# The grader import scanner decides what gets staged into the container, and a
# naive one already failed the build on a prose sentence. These cases are the
# ones it must get right β€” including that a genuine bare import STILL throws,
# since the guard's entire value is its ability to fail.
- name: Self-test the import scanner
run: npm run imports:self-test
working-directory: evals

# Prove the graders still detect the regressions they claim to detect.
- name: Certify graders
run: npm run certify
working-directory: evals

# Same idea one layer up: prove the stack schema still rejects the sixteen
# broken stack files it claims to reject. A schema that quietly accepts
# everything would let a stack requiring a binary the container does not
# have reach a paid run, which is the cost this check exists to avoid.
- name: Check stack schema
run: npm run stacks:check
working-directory: evals

# A SQL assertion has no grader filename, so its `comment` is the only
# stable identity it carries into stored run results. Rewording one forks
# that gate into a second identity with no history β€” silently, since the
# assertion still runs and still passes. The liveness sentinel reached ten
# different wordings across eleven stimuli before anyone noticed, and no
# identity scheme can repair that retroactively. Comments are the one place
# paraphrasing is normally harmless, so nothing but a check will stop it.
- name: Check shared assertion comments are canonical
run: npm run gates
working-directory: evals

# A phase runs a fixed set of agents, and an agent may only write what its
# instructions permit. An assertion whose evidence can only appear in an artifact
# the phase cannot produce reports green because nothing was able to go wrong.
- name: Check every assertion can fire in its phase
run: npm run phases:check
working-directory: evals

# The seed four scaffold/local-dev stimuli start from stands in for the planner's
# output. It drifted until it failed `validate-project-plan` outright, and nothing
# noticed for months: `certify` covers the certification fixtures and `drift` covers
# resources/agents/**, but the document between them was covered by neither.
- name: Check the seeded plan is one the planner would emit
run: npm run seed:contract
working-directory: evals

# Run through the evals package so the spec is actually linted: a bare
# `vally lint` at the repo root discovers no skills and silently passes.
- name: Lint eval specs
run: npm run lint
working-directory: evals

# `run.sh` promises a clean machine can execute it, and the MSBench eval job
# depends on that: it installs nothing before running `run.sh --skip-build`.
# A script it invokes that statically imports a package therefore fails on
# the one path where failure costs money. That rule was written down, in
# prose, and then broken by the next change to the same file family β€” so it
# is a mechanism now rather than a hope.
#
# Deliberately last: this step moves `evals/node_modules` aside and restores
# it in a `finally`. Running it after everything else means that even a
# catastrophic failure to restore cannot make an unrelated step fail with a
# confusing error.
- name: Check run.sh works on a clean machine
run: npm run clean-machine:check
working-directory: evals
160 changes: 160 additions & 0 deletions .github/workflows/msbench-evals.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
name: MSBench Evals

# Runs the project-plan eval on MSBench against a real VSIX build of this
# extension, rather than against agent instructions in isolation.
#
# Split into two jobs on purpose:
#
# build - packages the VSIX and asserts what ended up inside it, using the same
# guards run.sh applies locally. The shared build template
# (microsoft/vscode-azuretools jobs.yml) already compiles and packages,
# but it never inspects the archive, so a .vscodeignore rule that drops
# resources/agents/ passes every other check in the repo and then shows
# up as an agent that mysteriously ignores its instructions. Needs no
# credentials, so it catches that on a PR instead of in an MSBench run.
# eval - submits to MSBench. Needs Azure auth, so it is manual-only; see
# evals/msbench/README.md ("Running in CI") for the one-time setup.
#
# Unlike the credential-free gates in agent-contracts.yml, this cannot ride on
# GITHUB_TOKEN: MSBench runs on CES, which authenticates callers by Entra client id.
on:
pull_request:
paths:
- 'evals/msbench/**'
- '.github/workflows/msbench-evals.yml'
# The build job's lasting value is asserting what ends up *inside* the
# VSIX, which the shared build template does not check. Both inputs to
# that live outside evals/, so they have to trigger it themselves.
- '.vscodeignore'
- 'resources/agents/**'
workflow_dispatch:
inputs:
benchmark:
description: 'Benchmark instance to borrow for its container image'
required: false
default: 'vscbench.say_hello'
stimulus:
description: 'Stimulus to submit. The default is the cheapest one whose answer we already know.'
required: false
default: 'scaffold-unapproved-plan'
dataset:
description: 'Repo-relative dataset naming a custom container image. Leave empty for the stock image. Use evals/msbench/container/dataset.jsonl together with benchmark=corbench.cor_functions_host to get one with func.'
required: false
default: ''

env:
NODE_VERSION: '22'
PYTHON_VERSION: '3.12'

jobs:
# Everything that can be verified without credentials.
build:
runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: read
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}

# `stage-graders.ts` copies an allowlist of dependency-free packages out of
# evals/node_modules into the staged tree, so a grader's bare import (today
# `jsonc-parser`, for the JSON-with-comments in launch.json) resolves inside
# the container, which has no install step. It hard-errors rather than
# staging a partial tree, so without this the build job fails before the
# VSIX assertions it exists to run.
- name: Install eval dependencies
run: npm ci
working-directory: evals

- name: Build and verify the VSIX
run: ./evals/msbench/run.sh --build-only

- uses: actions/upload-artifact@v4
with:
name: msbench-vsix
path: evals/msbench/assets/extensions/*.vsix
retention-days: 7

eval:
# Manual only: the Azure identity has to be allowlisted by the MSBench team
# before this can pass, so running it on PRs would only ever be red.
if: github.event_name == 'workflow_dispatch'
needs: build
runs-on: ubuntu-latest
# A cold run is ~15 min; the timeout is generous so a slow queue does not
# look like a product failure.
timeout-minutes: 60
permissions:
contents: read
id-token: write # Fetch an OIDC token for azure/login.
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}

- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}

- uses: actions/download-artifact@v4
with:
name: msbench-vsix
path: evals/msbench/assets/extensions

# Needed here too, not just in `build`: `--skip-build` skips the VSIX, but
# graders are staged on every invocation because they are read straight off
# the working tree, and staging them needs evals/node_modules for the
# allowlisted packages.
- name: Install eval dependencies
run: npm ci
working-directory: evals

# run.sh mints the MSBench feed token with `az account get-access-token`,
# so it only needs an already-authenticated az. A self-hosted runner that
# is already signed in can skip this step entirely.
- name: Azure login
uses: azure/login@v2
with:
client-id: ${{ secrets.MSBENCH_AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.MSBENCH_AZURE_TENANT_ID }}
subscription-id: ${{ secrets.MSBENCH_AZURE_SUBSCRIPTION_ID }}

# STIMULUS is read from the environment by run.sh, the same way BENCHMARK
# is, so `--stimulus` on the command line still wins for a local run.
#
# It is set explicitly rather than left to run.sh's default, which is
# `photo-app-requirements` β€” a full planning run whose result would then
# have to be interpreted. The first CI runs are testing the *pipeline*, so
# they use a stimulus whose answer is already known locally (6/6 green):
# a red then means CI is broken, which is the only question being asked.
# A first run against an unknown-answer stimulus cannot separate "CI is
# misconfigured" from "the product changed".
- name: Run the MSBench eval
run: ./evals/msbench/run.sh --skip-build --output "$RUNNER_TEMP/report.json" --data_dir "$RUNNER_TEMP/msbench-data"
env:
BENCHMARK: ${{ inputs.benchmark }}
STIMULUS: ${{ inputs.stimulus }}
# Empty means the stock image, which is the default for every run that
# is not specifically exercising the custom one. Note the CI identity
# needs no registry permission either way: CES pulls the image with its
# own service principal, so the AcrPull grant is on that principal and
# nothing about it is caller- or machine-specific.
DATASET: ${{ inputs.dataset }}

# Keep the report and per-instance data so a failure can be diagnosed from
# the transcript and patch rather than by re-running.
- name: Upload run artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: msbench-results
path: |
${{ runner.temp }}/report.json
${{ runner.temp }}/msbench-data/**
if-no-files-found: ignore
Loading
Loading