Switch cookie consent runtime to WCP API - #1403
Conversation
Frontend HTML artifact readyThe latest frontend build uploaded the This comment updates automatically when a new frontend build artifact is uploaded. |
There was a problem hiding this comment.
Pull request overview
This PR migrates the site’s cookie-consent runtime from the @jop-software/astro-cookieconsent / vanilla-cookieconsent stack to Microsoft WCP’s wcp-consent.js API, keeping the existing header/footer “cookie preferences” entry points but wiring them to siteConsent.manageConsent() and restyling the WCP UI to match Aspire.
Changes:
- Replace consent initialization/runtime with an inline WCP initializer in
Head.astroand update cookie preference buttons to use a newdata-cookie-manage-consenthook. - Remove the old cookie consent configuration, custom styles, and npm dependencies; add
wcp-consent.cssand import it viasite.css. - Adjust Playwright e2e tests to avoid WCP banner overlap and remove tests that asserted old
cc_cookie-based consent state.
Reviewed changes
Copilot reviewed 13 out of 14 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/frontend/tests/e2e/ui-regressions.spec.ts | Removes consent-category assertions tied to the previous cookie-consent stack. |
| src/frontend/tests/e2e/integrations-gallery.spec.ts | Adds a pre-paint CSS suppression to prevent WCP banner overlap in local EU runs. |
| src/frontend/tests/e2e/helpers.ts | Deletes helpers that interacted with the old preferences modal / cc_cookie. |
| src/frontend/src/styles/wcp-consent.css | New WCP banner + preferences-dialog restyling scoped to stable WCP container IDs/roles. |
| src/frontend/src/styles/site.css | Switches imported consent stylesheet to wcp-consent.css. |
| src/frontend/src/styles/cookieconsent-custom.css | Removes old vanilla-cookieconsent customization stylesheet. |
| src/frontend/src/components/starlight/SocialIcons.astro | Updates cookie button to data-cookie-manage-consent. |
| src/frontend/src/components/starlight/Header.astro | Updates header cookie buttons to data-cookie-manage-consent. |
| src/frontend/src/components/starlight/Head.astro | Loads WCP CDN script and initializes consent + consent-change handling and theming sync. |
| src/frontend/src/components/FooterSocials.astro | Updates footer cookie button to data-cookie-manage-consent. |
| src/frontend/pnpm-lock.yaml | Drops @jop-software/astro-cookieconsent and vanilla-cookieconsent from the lockfile. |
| src/frontend/package.json | Removes old cookie-consent dependencies. |
| src/frontend/config/cookie.config.ts | Deletes the old cookie-consent configuration (categories/translations). |
| src/frontend/astro.config.mjs | Removes cookie-consent integration plugin wiring. |
Files not reviewed (1)
- src/frontend/pnpm-lock.yaml: Generated file
Comments suppressed due to low confidence (1)
src/frontend/tests/e2e/ui-regressions.spec.ts:226
- The PR replaces the cookie-consent runtime but removes the e2e coverage that verified consent choices affected analytics consent/categories. There doesn’t appear to be replacement coverage for the new WCP flow, so regressions in the consent wiring (manage-consent buttons, consent-change reload, etc.) could slip through unnoticed.
test('footer preferences persist theme and keyboard style selections', async ({ page }) => {
await page.goto('/get-started/aspire-vscode-extension/');
await dismissCookieConsentIfVisible(page);
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Pull request was converted to draft
David Pine (IEvangelist)
left a comment
There was a problem hiding this comment.
🤖 Automated docs-accuracy review (doc-pr-reviewer)
Verdict: COMMENT — no docs-accuracy issues found, because this PR changes no documentation content.
Summary
| PR head reviewed | 11b5d24aa6943dd71e7e63e679cc2c2a39d3e0ea (base main) |
| Source-of-truth repos read (Phase A) | none needed — no in-scope Aspire claims exist to verify |
| Claims extracted | 0 verifiable Aspire claims (all changes are site infrastructure + a third-party consent library) |
| Per-verdict counts | verified: 0 · verified-with-nuance: 0 · unverifiable: 0 · contradicted: 0 · out-of-scope: n/a |
| Phase B (doc-tester) | not run — 0 changed documentation routes; see reason below |
All 14 changed files live under src/frontend/ and are site infrastructure (Astro config, .astro components, CSS, cookie config, package.json/lockfile, and e2e tests). There are no content/docs/** .md/.mdx pages, integration docs, CLI docs, or API-reference changes in this diff, so the skill's docs-accuracy machinery has nothing to check.
Phase A — Claim verification
Result: no verifiable Aspire documentation claims found.
Every factual/API assertion in this diff is about Microsoft's WCP (Web Consent Platform) wcp-consent.js runtime — e.g. window.WcpConsent.init(...), wcp.themes.dark/light, siteConsent.getConsent(), siteConsent.onConsentChanged(...), siteConsent.isConsentRequired, siteConsent.manageConsent(), the theme-changed event, and the stable container IDs #wcpConsentBannerCtrl / #wcpCookiePreferenceCtrl.
WCP is not owned by any of this skill's sources of truth (microsoft/aspire, CommunityToolkit/Aspire, Azure/azure-sdk-for-net), so those repos cannot confirm or contradict this surface. Per the skill's protocol these are knowledge gaps, not verifiable claims — I have not fabricated a verdict for them. If any external validation is desired, the authoritative source is Microsoft's WCP/1DS consent documentation and the live CDN payload at https://wcpstatic.microsoft.com/mscc/lib/v2/wcp-consent.js, none of which are in scope for this reviewer.
No contradicted or unverifiable in-scope claims → no inline claim comments to post.
Phase B — Doc-tester results
Not run. Reason: 0 documentation routes are affected by this diff, so there is no doc content to exercise as a "blind new user."
The only behavioral change is the site-wide cookie-consent banner. Note (from the PR's own code comments) that a doc-tester render pass would produce little signal here regardless:
- The WCP banner is geo-gated — the PR states it "never renders in CI" and is only shown to certain regions (e.g. EU), so it would not reliably appear on a local dev server.
- The banner/prefs UI is injected by a live external CDN (
wcpstatic.microsoft.com), whose payload is outside the repo and outside the skill's sources of truth.
Per this session's guidance, no local pnpm dev server or Playwright automation was started for this non-doc PR.
Notes for the author (non-blocking, outside skill scope)
This reviewer only judges documentation accuracy; it does not assess the correctness of the WCP integration itself, CSS behavior, or the e2e test changes. Those are best covered by the frontend e2e suite and a human/functional review of the WCP banner in a geo-region where it renders. This review makes no claim that the WCP wiring is correct — only that there is nothing here for a docs-accuracy check to verify.
Generated by the doc-pr-reviewer skill. Phase A read no source-of-truth repos (no in-scope claims); Phase B was not run (no changed doc routes).
Two fixes for the Copilot review comments on #1403, both in the WCP initializer in Head.astro: - Remove the toLegacyCategories / syncConsentState path that only ever wrote window.__aspireConsentCategories, a global nothing in the frontend (or anywhere in the repo) reads. This also drops the astro:page-load handler and getConsent() calls that existed solely to feed that dead global, removing a runtime side effect with no consumer. - Resolve the WCP init theme through toWcpThemeName instead of dereferencing wcp.themes.dark/light directly. If a future WCP payload omits or renames themes, the direct access threw, the throw was swallowed by the surrounding try/catch, and initialization stopped permanently with no retry. toWcpThemeName already falls back to a plain string, and init now reschedules itself on exceptions within the existing bounded window. Validated locally against the WCP CDN: consent still initializes (US -> consent not required, manage-cookies buttons hidden), the removed global is now undefined, and there are no console errors. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
Adam Ratzman (adamint)
left a comment
There was a problem hiding this comment.
I think this stops analytics site-wide — worth checking before it merges.
The consent decision isn't wired to anything
config/head.attrs.ts:70-96 ships all three analytics scripts as type: 'text/plain' with data-category="analytics". That's the vanilla-cookieconsent activation contract — manageScriptTags defaults to true and the deleted config never overrode it, so the old stack was the thing flipping them to executable. This PR removes that and nothing takes over: grepping src/ for getConsent|getConsentFor|text/plain only hits head.attrs.ts, and Head.astro:363-399 never calls siteConsent.getConsent().
Production still serves <script type="text/plain" src="/scripts/analytics/1ds.js" defer data-category="analytics">, so after this lands 1DS/App Insights stops collecting everywhere — including regions where consent isn't required. The banner would be recording a choice that nothing acts on, which is a worse place to be than the scan failure we're fixing.
Looks like it was closer earlier: 1a62a356 deleted the getConsent() calls while resolving the Copilot thread, rather than wiring up the consumer.
The banner covers the header
Head.astro:310-315 inserts the placeholder as document.body.firstChild with position:fixed; top:0; z-index:2147483647, and nothing adds compensating padding-top. Our header is also fixed at top:0 with z-index:10 (site.css:1570), so while the banner is up the logo, search, theme toggle and the Manage cookies button itself sit underneath it. Tabbing into the header puts focus behind the banner, which is 2.4.11. At 320px it takes a big slice of the viewport and can't be scrolled away.
Reject is visually weaker than Accept
WCP renders all three buttons with the same class on purpose. wcp-consent.css:104-129 makes Accept a filled CTA and Reject a transparent ghost whose only affordance is a color-mix(... 30%, transparent) border — that computes to 1.89:1 light / 2.71:1 dark, so it fails 1.4.11 too. Given the whole point here is passing WCP validation, de-emphasizing Reject seems likely to work against us.
The deleted tests were the ones that would have caught the first issue
cookie consent reject-all keeps analytics disabled and cookie preferences and accept-all enable analytics tracking consent (ui-regressions.spec.ts:228-250) were the only assertions that consent was recorded and that the analytics category followed the user's choice. openCookiePreferences is gone too, which was the one asserting the button actually opens a dialog. The single surviving reference at :104-108 blocks the WCP CDN, so it asserts the button exists while guaranteeing it's inert.
Could we stub window.WcpConsent and assert the four buttons call manageConsent(), plus that the analytics scripts become executable after accept? That'd cover the gap.
Smaller things
Head.astro:277-287callspreventDefault()unconditionally then does nothing when WCP didn't load. The failsafe at:236-249deliberately keeps the buttons visible and init gives up silently after 15s, so an EU visitor with an ad blocker gets a completely dead button. Hide them on give-up, or swap to a privacy-statement link?Head.astro:319-361— I don't thinktheme-changedis a WCP event. I pulledwcp-consent.jsoff the CDN and it has zero occurrences of it, and nowindow.addEventListenercalls at all. SonotifyWcpThemeChanged/watchThemeChangeslook like ~40 lines of dead code plus a permanent MutationObserver on<html>. (Caveat: I could only reach the not-required payload from here.)Head.astro:386and:389registeronConsentChangedtwice — once viainit's 4th arg, once on the instance — and the bundle fires both lists, so that's twosetTimeout(reload, 0)per interaction. The reload is also unconditional; dismissing the banner mid-page loses scroll position and any open search..github/astro.instructions.md:341still describes the old stack and tells agents to dismiss a bottom-right modal by clicking "Reject all". That's now wrong on position, on region-gating, and on the third button's label (it's "More info").- nit:
frontend-build.yml:88-95still setsE2E_TESTS: 1with a comment pointing at the deletedcookie.config.ts.
For what it's worth, the integration mechanics look right — I checked that there's no CSP anywhere in the repo, no <ClientRouter /> (so no double-registration across navigations), the WcpConsent.init signature matches, all 15 locales resolve safely, the nth-of-type button mapping is correct, the scroll lock does release, and package.json/lockfile are consistent. It's the consumer side that's missing.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
Fully restyle the WCP cookie banner and preferences dialog to match the Aspire theme via the team-owned wcp-consent.css (our colors, spacing, WCAG AA contrast, and the brand icon). The dialog now re-themes live when the user toggles light/dark, and the underlying page is scroll-locked while the preferences dialog is open. Remove the last remnants of the old vanilla-cookieconsent integration: - delete config/cookie.config.ts and the old cookieconsent-custom.css - drop @jop-software/astro-cookieconsent + vanilla-cookieconsent deps - remove the 2 obsolete behavioral cookie e2e tests and their dead helpers; the WCP banner is geo-gated/CDN-loaded and can't be exercised in CI, so compliance is verified by the WCP scan instead - rework the integrations-gallery banner suppression to hide the WCP banner element instead of pre-seeding the removed cc_cookie shape Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
WCP reports whether consent is required for the visitor's region. Where it is not (e.g. the US) there is nothing to manage, so hide the four "Manage cookies" buttons instead of leaving inert controls on the page. The WCP runtime sets a data-consent-not-required flag on <html> once it knows the region; a CSS rule hides .cookie-consent-btn when the flag is present. The flag is primed from localStorage before paint so returning visitors in non-required regions don't see the buttons flash in. Defaulting to visible keeps this failsafe: if WCP is slow or blocked we never hide a control a required region needs. display:none also makes the site tour auto-skip its cookie-preferences step, so no tour changes are needed. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
The compact-header-order regression asserts the full set of header controls, including the "Manage cookies" button. That button is now region-gated: WCP hides it where consent isn't required, which is how most CI runner IPs resolve, so the test could see a shorter header and fail. Block the WCP CDN for this test so it always exercises the failsafe default (every control present), keeping the expected order stable regardless of the runner's geo. The site-tour e2e test needs no change; it advances until "Finish" without counting steps, so it tolerates the cookie step being skipped. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
Two fixes for the Copilot review comments on #1403, both in the WCP initializer in Head.astro: - Remove the toLegacyCategories / syncConsentState path that only ever wrote window.__aspireConsentCategories, a global nothing in the frontend (or anywhere in the repo) reads. This also drops the astro:page-load handler and getConsent() calls that existed solely to feed that dead global, removing a runtime side effect with no consumer. - Resolve the WCP init theme through toWcpThemeName instead of dereferencing wcp.themes.dark/light directly. If a future WCP payload omits or renames themes, the direct access threw, the throw was swallowed by the surrounding try/catch, and initialization stopped permanently with no retry. toWcpThemeName already falls back to a plain string, and init now reschedules itself on exceptions within the existing bounded window. Validated locally against the WCP CDN: consent still initializes (US -> consent not required, manage-cookies buttons hidden), the removed global is now undefined, and there are no console errors. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
Implements every point from adamint's review on #1403. Critical: - Analytics never loaded under WCP. The three analytics scripts still ship inert (type="text/plain" data-category="analytics") from the previous cookie library, but WCP is a consent-collection API and does not manage script tags, so nothing re-activated them. Head.astro now bridges the gap: on init it reads siteConsent.getConsent().Analytics and, when granted (default where consent isn't required, e.g. the US), promotes each inert script to an executable clone. onConsentChanged reloads, so a later grant re-applies via the same path. Verified locally: all three scripts flip from text/plain to active on the US default-grant page. Accessibility: - The geo-gated banner is a fixed top strip that painted over the fixed Starlight header (z-index 10), hiding nav/search (WCAG 2.4.11). A new ResizeObserver (trackBannerHeight) publishes the banner's live height as --wcp-banner-height, and CSS translates .page (the body-level wrapper that contains every fixed control) down by that amount only while the banner is in the DOM. It is a no-op with no banner (0px), so the US is unaffected. Verified: injecting a 60px banner shifts the header to top:60 uncovered. - Reject / Manage-cookies ghost buttons used a 30% border that failed WCAG 1.4.11 non-text contrast (1.90:1 light / 2.70:1 dark). Bumped to 55% (3.73:1 / 5.82:1) on the banner and the dialog reset button. Cleanups: - Guard openManageConsent so preventDefault only fires when WCP's dialog actually opened, not on every click. - Replace the dead `theme-changed` CustomEvent (WCP has no such listener) with the real re-theme hook, siteConsent.applyTheme(themeObject), driven by the existing data-theme observer. - Register onConsentChanged once via init's callback argument; drop the redundant siteConsent.onConsentChanged(...) call that double-registered it (WCP stores callbacks in a list, so it fired two reloads per change). - Refresh the Cookie Consent + screenshot sections of astro.instructions.md to describe WCP (geo-gated top strip, Accept/Reject/More info, MSCC cookie) instead of the removed jop-software library. - Drop the dead E2E_TESTS env (read nowhere) from frontend-build.yml and the two playwright configs, plus the stale cookie.config.ts comment. Tests: - Restore the consent regression coverage adamint flagged as deleted. New tests/e2e/cookie-consent.spec.ts stubs window.WcpConsent (blocking the real CDN) so it can assert the behavior that only exists at runtime: analytics scripts are promoted from inert to executable when Analytics consent is granted, stay inert when it is withheld, and every server-rendered manage-cookies control routes a click to siteConsent.manageConsent(). Green across the desktop, tablet, and mobile projects. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
1a62a35 to
ac4720f
Compare
|
Thanks for the thorough pass, Adam Ratzman (@adamint) — the substantive points were right, the consumer side was genuinely missing. All addressed in The consent decision isn't wired to anythingFixed. WCP is consent-collection only — it doesn't flip script tags the way vanilla-cookieconsent's The banner covers the headerFixed. A Reject is visually weaker than AcceptContrast fixed; prominence intentionally kept. The ghost border went 30% → 55% The deleted testsRestored as a stub-based e2e ( Smaller things
Thanks also for verifying the mechanics (no CSP, no |
James Newton-King (JamesNK)
left a comment
There was a problem hiding this comment.
Approved with two non-blocking inline comments: please clarify the intended execution-order contract for the dynamically activated analytics scripts, and reconcile the theme update path with the live WCP v2 siteConsent API.
Adam Ratzman (adamint)
left a comment
There was a problem hiding this comment.
The WCP migration itself looks good — the old library is fully removed, the bridge is clean, and the site degrades gracefully when the CDN is blocked. But I can't approve this yet: JamesNK flagged two things that are both real, and I went and measured them.
1. Analytics is dead on the default path.
activateAnalyticsScripts() rebuilds each inert script with document.createElement('script') and copies attributes, but never sets next.async = false. Dynamically-created scripts default to async = true, and the copied defer is a no-op for non-parser-inserted scripts, so execution order is gone. The three scripts are order-dependent and each bails silently — 1ds.js:9 returns if oneDS is undefined, track.js:4 returns if window.analytics.__initialized isn't set.
I tested this with the real built assets and the real 140 KB 1DS SDK, served so location.origin === 'https://aspire.dev' (needed, because 1ds.js:4 early-returns on any other origin — worth knowing, it means localhost testing can never exercise this path).
Before, with consent granted:
{ activated: true, hasAnalytics: "undefined", initialized: <absent>, hasOneDS: "object" }
[track] Analytics not initialized, skipping event tracking setup.
Fetch completion order: 1ds.js 169ms, track.js 169ms, SDK 364ms. The two tiny same-origin scripts win the race, so oneDS doesn't exist yet when 1ds.js runs.
After adding exactly one line, next.async = false;:
{ activated: true, hasAnalytics: "object", initialized: true, hasOneDS: "object" }
[track] Event tracking bound.
Fetch order was identical (SDK still last). Only async changed. 3/3 runs dead unpatched, 3/3 initialized patched — deterministic, not a race we got unlucky on.
The reason this is easy to miss is that all three scripts still fetch successfully, so a network-panel check looks perfectly green while nothing initializes. And this is the default path — isConsentRequired=false for US traffic means analytics is granted automatically, so it's most of the traffic, not an edge case.
So the suggestion of adding a comment saying ordering is unimportant would be the wrong way out — ordering is load-bearing.
2. applyTheme is being called with the wrong type, so it always throws.
applyWcpTheme() passes resolveWcpTheme(...), which returns wcp.themes.dark / wcp.themes.light — an object — on exactly the path that's guarded by if (!wcp || !wcp.themes) return;. I pulled the live library to check what it actually wants:
e.prototype.applyTheme=function(e){
if(!this.themes[e]) throw new Error("Theme not found error");
var t=this.themes[e]; s.applyTheme(t)
}
// themes={light:…,dark:…,"high-contrast":…}It's a string key. this.themes[<object>] is undefined, so it throws every time, and withSiteConsent's try/catch swallows it. The comment above resolveWcpTheme says applyTheme "reads color fields off the theme OBJECT" — that's true of the module-private s.applyTheme, but the public method on the prototype takes a key. So the WCP-internal re-theme never actually happens.
siteConsent.applyTheme(isDark ? 'dark' : 'light') should do it. Also worth noting the 5th theme arg to wcp.init(...) is ignored by this build — init=function(e,t,n,r,i,a) never references i — so if we're relying on it for initial theming, we aren't getting it.
Both of these are masked by the e2e stub, which defines applyTheme(){} accepting anything and stubs out the script bodies. Not a criticism of using a stub — the real banner is server-side IP-geo-gated and genuinely can't be driven from a US runner — but it's worth knowing the stub can't catch either of these.
Non-blocking:
- The new spec covers granted and denied but not the consent-changed/reload path; the stub ignores
init's 4th arg (onConsentChanged). The removedui-regressionstests did cover accept/reject persistence, so there's a small net loss there. wcp-consent.csscommentsbutton:nth-of-type(3)as "Manage cookies", but the live banner's third action is "More info" (astro.instructions.mdhas it right). Just the CSS comment.pnpm-lock.yamlbumps a transitivesatteri0.9.3 → 0.9.4 with nopackage.jsonchange — intended, or regeneration drift?
Everything else checked out: production build ran clean (13,857 pages), the real CDN loads with zero console errors, all manage-consent controls route to manageConsent(), analytics stays inert when consent is withheld, and the site still renders with the CDN blocked. cookie-consent.spec.ts was 9/9.
Happy to approve once async = false and the applyTheme argument are sorted.
adamint's CHANGES_REQUESTED (with JamesNK's two inline notes) caught two real
bugs the e2e stub had masked. Both verified against the live library and fixed.
1. Analytics was dead on the default (US) path. activateAnalyticsScripts()
rebuilds each inert script with document.createElement('script') but never
reset `async`. Dynamically-created scripts default to async=true and the
copied `defer` is a no-op for them, so the two tiny same-origin scripts
(1ds.js, track.js) won the race against the ~140 KB 1DS SDK and each bailed
silently (1ds.js returns without `oneDS`; track.js returns without
`window.analytics.__initialized`). Set `next.async = false` so they execute
in insertion (document) order. Since consent isn't required in the US,
Analytics is auto-granted there, so this was most traffic, not an edge case.
2. applyTheme always threw. WCP v2's public `siteConsent.applyTheme(name)`
takes a string theme KEY and looks it up in its internal map; we were
passing `wcp.themes.dark/.light` (an object), so `this.themes[object]` was
undefined -> "Theme not found error", swallowed by withSiteConsent's
try/catch. resolveWcpTheme now returns the 'dark'|'light' string for both
applyTheme and init, so the WCP-internal re-theme actually runs on toggle.
(init's 5th theme arg is ignored by the current CDN build; our CSS overrides
theme the visible surfaces regardless.)
Tests: strengthen the stub so it can no longer hide either bug and add the
missing coverage adamint flagged.
- applyTheme now validates its argument (string key in the themes map) and
throws otherwise, exactly like the live library; a permissive stub could not
catch a wrong-argument regression.
- New assertion: every promoted analytics script has async===false.
- New test: toggling data-theme drives applyTheme with the string key.
- New test: WCP's onConsentChanged (init's 4th arg, now captured by the stub)
reloads the page — restores the accept/reject-persistence coverage lost with
the old ui-regressions tests.
Verified the strengthened guards fail when either fix is reverted, and pass with
both applied: cookie-consent.spec.ts is 15/15 across desktop/tablet/mobile.
Also:
- Revert an unintended pnpm-lock transitive drift (satteri 0.9.3 -> 0.9.4) so
the lockfile diff is only the removed cookie-consent packages.
- Fix a stale CSS comment: the banner's third action is "More info", not
"Manage cookies".
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
Brings the branch up to date with main (security dependency remediation #1392 + interaction-service docs #1408) so it's no longer behind or conflicting. Conflicts were limited to package.json and pnpm-lock.yaml, where main's dependency bumps overlapped this PR's removal of the cookie-consent library. Resolved by keeping main's bumped versions and re-removing the two cookie packages (@jop-software/astro-cookieconsent and vanilla-cookieconsent) plus their lockfile entries. Verified the resolved package.json has an identical dependency-name set to the branch (only versions differ) and that neither file retains any cookie-consent reference. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
|
Adam Ratzman (@adamint) — you nailed both. They're real, both fixed in 1. Analytics dead on the default path — fixedAdded exactly 2.
|
Changes addressed concern
* Revise interaction service API documentation (#1408)
Updated section headings and clarified usage instructions for the interaction service API.
* [auto-sec] Consolidate aspire.dev frontend dependency security remediations (#1392)
* build(deps): bump the npm-all group across 1 directory with 32 updates
Bumps the npm-all group with 32 updates in the /src/frontend directory:
| Package | From | To |
| --- | --- | --- |
| [@astrojs/markdown-remark](https://github.com/withastro/astro/tree/HEAD/packages/markdown/remark) | `7.2.0` | `7.2.1` |
| [@astrojs/mdx](https://github.com/withastro/astro/tree/HEAD/packages/integrations/mdx) | `7.0.0` | `7.0.3` |
| [@astrojs/rss](https://github.com/withastro/astro/tree/HEAD/packages/astro-rss) | `4.0.18` | `4.0.19` |
| [@astrojs/starlight](https://github.com/withastro/starlight/tree/HEAD/packages/starlight) | `0.41.1` | `0.41.3` |
| [@catppuccin/starlight](https://github.com/catppuccin/starlight/tree/HEAD/packages/catppuccin-starlight) | `2.0.1` | `2.1.0` |
| [@expressive-code/plugin-collapsible-sections](https://github.com/expressive-code/expressive-code/tree/HEAD/packages/@expressive-code/plugin-collapsible-sections) | `0.44.0` | `0.44.1` |
| [@expressive-code/plugin-line-numbers](https://github.com/expressive-code/expressive-code/tree/HEAD/packages/@expressive-code/plugin-line-numbers) | `0.44.0` | `0.44.1` |
| [@fontsource-variable/fira-code](https://github.com/fontsource/font-files/tree/HEAD/fonts/variable/fira-code) | `5.2.7` | `5.3.0` |
| [@fontsource-variable/outfit](https://github.com/fontsource/font-files/tree/HEAD/fonts/variable/outfit) | `5.2.8` | `5.3.0` |
| [@fontsource-variable/rubik](https://github.com/fontsource/font-files/tree/HEAD/fonts/variable/rubik) | `5.2.8` | `5.3.0` |
| [@fontsource/poppins](https://github.com/fontsource/font-files/tree/HEAD/fonts/google/poppins) | `5.2.7` | `5.3.0` |
| [asciinema-player](https://github.com/asciinema/asciinema-player) | `3.16.0` | `3.17.0` |
| [astro](https://github.com/withastro/astro/tree/HEAD/packages/astro) | `7.0.3` | `7.1.3` |
| [astro-expressive-code](https://github.com/expressive-code/expressive-code/tree/HEAD/packages/astro-expressive-code) | `0.44.0` | `0.44.1` |
| [satori](https://github.com/vercel/satori) | `0.26.0` | `0.28.1` |
| [satteri](https://github.com/bruits/satteri) | `0.9.4` | `0.9.5` |
| [sharp](https://github.com/lovell/sharp) | `0.34.5` | `0.35.3` |
| [starlight-github-alerts](https://github.com/HiDeoo/starlight-github-alerts/tree/HEAD/packages/starlight-github-alerts) | `0.3.0` | `0.4.0` |
| [starlight-links-validator](https://github.com/HiDeoo/starlight-links-validator/tree/HEAD/packages/starlight-links-validator) | `0.25.1` | `0.25.2` |
| [starlight-llms-txt](https://github.com/delucis/starlight-llms-txt/tree/HEAD/packages/starlight-llms-txt) | `0.10.0` | `0.11.0` |
| [starlight-page-actions](https://github.com/dlcastillop/starlight-page-actions/tree/HEAD/packages/starlight-page-actions) | `0.6.2` | `0.7.0` |
| [@iconify-json/material-icon-theme](https://github.com/iconify/icon-sets) | `1.2.68` | `1.2.69` |
| [@types/hast](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/hast) | `3.0.4` | `3.0.5` |
| [@unocss/astro](https://github.com/unocss/unocss/tree/HEAD/packages-integrations/astro) | `66.6.8` | `66.7.5` |
| [astro-embed](https://github.com/delucis/astro-embed/tree/HEAD/packages/astro-embed) | `0.13.0` | `0.13.1` |
| [eslint](https://github.com/eslint/eslint) | `10.6.0` | `10.7.0` |
| [prettier](https://github.com/prettier/prettier) | `3.9.1` | `3.9.5` |
| [tsx](https://github.com/privatenumber/tsx) | `4.22.4` | `4.23.1` |
| [typescript](https://github.com/microsoft/TypeScript) | `6.0.3` | `7.0.2` |
| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.62.0` | `8.65.0` |
| [unocss](https://github.com/unocss/unocss/tree/HEAD/packages-presets/unocss) | `66.6.8` | `66.7.5` |
| [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.9` | `4.1.10` |
Updates `@astrojs/markdown-remark` from 7.2.0 to 7.2.1
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/markdown/remark/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/@astrojs/markdown-remark@7.2.1/packages/markdown/remark)
Updates `@astrojs/mdx` from 7.0.0 to 7.0.3
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/integrations/mdx/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/@astrojs/mdx@7.0.3/packages/integrations/mdx)
Updates `@astrojs/rss` from 4.0.18 to 4.0.19
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/astro-rss/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/@astrojs/rss@4.0.19/packages/astro-rss)
Updates `@astrojs/starlight` from 0.41.1 to 0.41.3
- [Release notes](https://github.com/withastro/starlight/releases)
- [Changelog](https://github.com/withastro/starlight/blob/main/packages/starlight/CHANGELOG.md)
- [Commits](https://github.com/withastro/starlight/commits/@astrojs/starlight@0.41.3/packages/starlight)
Updates `@catppuccin/starlight` from 2.0.1 to 2.1.0
- [Release notes](https://github.com/catppuccin/starlight/releases)
- [Changelog](https://github.com/catppuccin/starlight/blob/main/packages/catppuccin-starlight/CHANGELOG.md)
- [Commits](https://github.com/catppuccin/starlight/commits/v2.1.0/packages/catppuccin-starlight)
Updates `@expressive-code/plugin-collapsible-sections` from 0.44.0 to 0.44.1
- [Release notes](https://github.com/expressive-code/expressive-code/releases)
- [Changelog](https://github.com/expressive-code/expressive-code/blob/main/packages/@expressive-code/plugin-collapsible-sections/CHANGELOG.md)
- [Commits](https://github.com/expressive-code/expressive-code/commits/@expressive-code/plugin-collapsible-sections@0.44.1/packages/@expressive-code/plugin-collapsible-sections)
Updates `@expressive-code/plugin-line-numbers` from 0.44.0 to 0.44.1
- [Release notes](https://github.com/expressive-code/expressive-code/releases)
- [Changelog](https://github.com/expressive-code/expressive-code/blob/main/packages/@expressive-code/plugin-line-numbers/CHANGELOG.md)
- [Commits](https://github.com/expressive-code/expressive-code/commits/@expressive-code/plugin-line-numbers@0.44.1/packages/@expressive-code/plugin-line-numbers)
Updates `@fontsource-variable/fira-code` from 5.2.7 to 5.3.0
- [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/variable/fira-code)
Updates `@fontsource-variable/outfit` from 5.2.8 to 5.3.0
- [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/variable/outfit)
Updates `@fontsource-variable/rubik` from 5.2.8 to 5.3.0
- [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/variable/rubik)
Updates `@fontsource/poppins` from 5.2.7 to 5.3.0
- [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/google/poppins)
Updates `asciinema-player` from 3.16.0 to 3.17.0
- [Release notes](https://github.com/asciinema/asciinema-player/releases)
- [Commits](https://github.com/asciinema/asciinema-player/compare/v3.16.0...v3.17.0)
Updates `astro` from 7.0.3 to 7.1.3
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/astro/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/astro@7.1.3/packages/astro)
Updates `astro-expressive-code` from 0.44.0 to 0.44.1
- [Release notes](https://github.com/expressive-code/expressive-code/releases)
- [Changelog](https://github.com/expressive-code/expressive-code/blob/main/packages/astro-expressive-code/CHANGELOG.md)
- [Commits](https://github.com/expressive-code/expressive-code/commits/astro-expressive-code@0.44.1/packages/astro-expressive-code)
Updates `satori` from 0.26.0 to 0.28.1
- [Release notes](https://github.com/vercel/satori/releases)
- [Commits](https://github.com/vercel/satori/compare/0.26.0...0.28.1)
Updates `satteri` from 0.9.4 to 0.9.5
- [Release notes](https://github.com/bruits/satteri/releases)
- [Commits](https://github.com/bruits/satteri/compare/satteri-v0.9.4...satteri-v0.9.5)
Updates `sharp` from 0.34.5 to 0.35.3
- [Release notes](https://github.com/lovell/sharp/releases)
- [Commits](https://github.com/lovell/sharp/compare/v0.34.5...v0.35.3)
Updates `starlight-github-alerts` from 0.3.0 to 0.4.0
- [Release notes](https://github.com/HiDeoo/starlight-github-alerts/releases)
- [Changelog](https://github.com/HiDeoo/starlight-github-alerts/blob/main/packages/starlight-github-alerts/CHANGELOG.md)
- [Commits](https://github.com/HiDeoo/starlight-github-alerts/commits/starlight-github-alerts@0.4.0/packages/starlight-github-alerts)
Updates `starlight-links-validator` from 0.25.1 to 0.25.2
- [Release notes](https://github.com/HiDeoo/starlight-links-validator/releases)
- [Changelog](https://github.com/HiDeoo/starlight-links-validator/blob/main/packages/starlight-links-validator/CHANGELOG.md)
- [Commits](https://github.com/HiDeoo/starlight-links-validator/commits/starlight-links-validator@0.25.2/packages/starlight-links-validator)
Updates `starlight-llms-txt` from 0.10.0 to 0.11.0
- [Release notes](https://github.com/delucis/starlight-llms-txt/releases)
- [Changelog](https://github.com/delucis/starlight-llms-txt/blob/main/packages/starlight-llms-txt/CHANGELOG.md)
- [Commits](https://github.com/delucis/starlight-llms-txt/commits/starlight-llms-txt@0.11.0/packages/starlight-llms-txt)
Updates `starlight-page-actions` from 0.6.2 to 0.7.0
- [Release notes](https://github.com/dlcastillop/starlight-page-actions/releases)
- [Commits](https://github.com/dlcastillop/starlight-page-actions/commits/v0.7.0/packages/starlight-page-actions)
Updates `@iconify-json/material-icon-theme` from 1.2.68 to 1.2.69
- [Commits](https://github.com/iconify/icon-sets/commits)
Updates `@types/hast` from 3.0.4 to 3.0.5
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/hast)
Updates `@unocss/astro` from 66.6.8 to 66.7.5
- [Release notes](https://github.com/unocss/unocss/releases)
- [Commits](https://github.com/unocss/unocss/commits/v66.7.5/packages-integrations/astro)
Updates `astro-embed` from 0.13.0 to 0.13.1
- [Release notes](https://github.com/delucis/astro-embed/releases)
- [Changelog](https://github.com/delucis/astro-embed/blob/main/packages/astro-embed/CHANGELOG.md)
- [Commits](https://github.com/delucis/astro-embed/commits/astro-embed@0.13.1/packages/astro-embed)
Updates `eslint` from 10.6.0 to 10.7.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v10.6.0...v10.7.0)
Updates `prettier` from 3.9.1 to 3.9.5
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.9.1...3.9.5)
Updates `tsx` from 4.22.4 to 4.23.1
- [Release notes](https://github.com/privatenumber/tsx/releases)
- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs)
- [Commits](https://github.com/privatenumber/tsx/compare/v4.22.4...v4.23.1)
Updates `typescript` from 6.0.3 to 7.0.2
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Commits](https://github.com/microsoft/TypeScript/commits)
Updates `typescript-eslint` from 8.62.0 to 8.65.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.65.0/packages/typescript-eslint)
Updates `unocss` from 66.6.8 to 66.7.5
- [Release notes](https://github.com/unocss/unocss/releases)
- [Commits](https://github.com/unocss/unocss/commits/v66.7.5/packages-presets/unocss)
Updates `vitest` from 4.1.9 to 4.1.10
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.10/packages/vitest)
---
updated-dependencies:
- dependency-name: "@astrojs/markdown-remark"
dependency-version: 7.2.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@astrojs/mdx"
dependency-version: 7.0.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@astrojs/rss"
dependency-version: 4.0.19
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@astrojs/starlight"
dependency-version: 0.41.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@catppuccin/starlight"
dependency-version: 2.1.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: "@expressive-code/plugin-collapsible-sections"
dependency-version: 0.44.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@expressive-code/plugin-line-numbers"
dependency-version: 0.44.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@fontsource-variable/fira-code"
dependency-version: 5.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: "@fontsource-variable/outfit"
dependency-version: 5.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: "@fontsource-variable/rubik"
dependency-version: 5.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: "@fontsource/poppins"
dependency-version: 5.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: asciinema-player
dependency-version: 3.17.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: astro
dependency-version: 7.1.3
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: astro-expressive-code
dependency-version: 0.44.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: satori
dependency-version: 0.28.1
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: satteri
dependency-version: 0.9.5
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: sharp
dependency-version: 0.35.3
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: starlight-github-alerts
dependency-version: 0.4.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: starlight-links-validator
dependency-version: 0.25.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: starlight-llms-txt
dependency-version: 0.11.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: starlight-page-actions
dependency-version: 0.7.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: "@iconify-json/material-icon-theme"
dependency-version: 1.2.69
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@types/hast"
dependency-version: 3.0.5
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@unocss/astro"
dependency-version: 66.7.5
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: astro-embed
dependency-version: 0.13.1
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: eslint
dependency-version: 10.7.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: prettier
dependency-version: 3.9.5
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: tsx
dependency-version: 4.23.1
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: typescript
dependency-version: 7.0.2
dependency-type: direct:development
update-type: version-update:semver-major
dependency-group: npm-all
- dependency-name: typescript-eslint
dependency-version: 8.65.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: unocss
dependency-version: 66.7.5
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: vitest
dependency-version: 4.1.10
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-all
...
Signed-off-by: dependabot[bot] <support@github.com>
* fix: revert typescript 7.x to 6.x to restore twoslash/expressive-code compatibility
TypeScript 7.0 ('Corsa') is a native Go rewrite that removes the programmatic
JS API entirely. twoslash accesses ts.ModuleKind.Cjs which is undefined in TS7,
causing ec.config.mjs -> expressive-code-twoslash -> twoslash to crash at build
time with: 'The requested module expressive-code-twoslash does not provide an
export named default' and related CJS/ESM resolution failures.
Fix:
- Revert typescript ^7.0.2 -> ^6.0.3 in package.json
- Update pnpm-lock.yaml: swap integrity hash, version specifier, remove the
@typescript/typescript-* platform-native binaries (TS7-only), and fix all
peer-dep snapshot keys to reference typescript@6.0.3
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(frontend): skip canonicalizing redirects while prerendering
Astro 7.1 runs middleware while prerendering the .md/.json API and schema endpoints, so the trailing-slash redirects were baked into dist/ as redirect stubs that shadowed the real prerendered markdown/JSON and broke the api-markdown-routes and schema-routes E2E checks. Guard the redirects behind context.isPrerendered so they only apply to on-demand (SSR/dev) requests.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 572347d9-75da-4b54-9a3d-f9589ef4e39b
* fix(security): bump dompurify to 3.4.12 (GHSA-c2j3-45gr-mqc4) and tighten brace-expansion override
- dompurify@<3.4.12: '>=3.4.12' — GHSA-c2j3-45gr-mqc4 (low): bypass in
CUSTOM_ELEMENT_HANDLING, fixed in 3.4.12
- brace-expansion@<5.0.7: '>=5.0.7' — GHSA-3jxr-9vmj-r5cp (high): DoS via
exponential-time expansion, 5.0.7 is the patched version
- postcss@8.5.20 already satisfies GHSA-r28c-9q8g-f849 (<=8.5.17) via existing
override; no change needed
- GHSA-mh99-v99m-4gvg (brace-expansion <=5.0.7): no upstream fix available,
documented as unfixable in canonical PR body
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 572347d9-75da-4b54-9a3d-f9589ef4e39b
* Redact connection-string passwords in generated package docs (#1410)
* Redact connection-string passwords in generated package docs
PackageJsonGenerator copies package XML doc comments verbatim into the frontend
data JSON. Several packages document example connection strings containing a
literal placeholder password (e.g. SqlServer's GetConnectionString returns
"Server=host,port;User ID=sa;Password=password;TrustServerCertificate=true").
These are not real secrets, but the literal Password=<value> token trips 1ES /
CredScan push protection (SEC101/037 SqlLegacyCredentials, VS403654) when the
public repo is mirrored to the internal AzDO remote, blocking the deploy and
deploy-vnext-release branch syncs.
Add DocumentationSanitizer.RedactConnectionStringPasswords, applied to text,
inline-code and code-block doc nodes, which rewrites connection-string
Password=/Pwd= literals to <password>. C# default parameter values
(password = null) are left untouched because the match requires no whitespace
around '='. Regenerate the four affected data files accordingly.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4125af76-bbc2-4532-adee-98add8fdb6b7
* Address PR review: markdown-safe placeholder, cover example nodes, nullable API
- Use "{password}" instead of "<password>". Angle brackets are dropped as raw
HTML when doc nodes render to Markdown (csharp-api-markdown.ts concatenates
text without escaping), which would hide the value in connection-string
examples. "{password}" is also the existing placeholder convention already
used across the generated data (e.g. mysql://{user}:{password}@{host}).
- Sanitize the <example> extraction paths in ExtractDocExample (plain-text
code, description text nodes, and example code) so connection-string
passwords there cannot re-trigger CredScan in future data refreshes.
- Make DocumentationSanitizer.RedactConnectionStringPasswords nullable-aware
(string? in/out) to match its behavior and drop the null-forgiving operator
in tests. Exclude '{'/'}' from the value class to keep redaction idempotent.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4125af76-bbc2-4532-adee-98add8fdb6b7
* Use "Placeholder" redaction token per 1ES recommendation
The connection-string password sanitizer redacted values to `{password}`.
Switch the token to a bare `Placeholder`, which is the value 1ES
recommends for scrubbed credential examples in generated content.
Update the sanitizer unit-test expectations to match, and update the four
affected package data files. The pre-existing `{password}` doc template
tokens in those files (author-written placeholders, not sanitizer output)
are intentionally left unchanged.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 8c2fe46b-fcb4-48bf-8c62-5f9d3d7a470e
* fix(PackageJsonGenerator): tighten redaction regex and close doc gaps
Two hardening fixes to the connection-string password redaction added in
this PR.
F1 - the redaction regex over-consumed trailing delimiters. The value
character class only excluded ';', quotes, comma, whitespace, backslash,
and brace/angle markers. A value immediately followed by a markdown or
URI delimiter ('`', ')', ']', '&', '|') swallowed that delimiter into the
match, so an inline-code fence lost its closing backtick and a link label
lost its closing paren, corrupting the rendered doc. The class now also
stops at those delimiters. A trailing sentence period is preserved by
trimming it off the captured value in the replacement callback rather
than excluding '.' from the class, which would truncate legitimate dotted
values.
F4 - two documentation paths reached the generated JSON unsanitized. Enum
member descriptions (Description = ExtractSummary(f)) and <see href="...">
link labels were emitted verbatim, so a connection string in an enum
member's <summary> or a link label bypassed redaction. Both now run
through the sanitizer. This changes no committed data (no such values
exist in the current package set); the fix is preventive.
Also refreshes the sanitizer comment and XML docs to describe the
Placeholder token and the widened exclusion set.
Tests: added markdown/URI delimiter and trailing-period cases to the
sanitizer unit tests, and an end-to-end test asserting an enum member
whose summary contains a connection string is redacted in the generated
JSON. All 31 tests pass.
chore: sanitize placeholder connection strings in generated pkg JSON
**BYPASS_SECRET_SCANNING** — false-positive SEC101/037 placeholder in
generated pkgs/*.json, unblocking the internal mirror for historical
commit 6058fcf. Forward fix regenerates the affected files.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 8c2fe46b-fcb4-48bf-8c62-5f9d3d7a470e
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Ankit Jain <radical@gmail.com>
Copilot-Session: 4125af76-bbc2-4532-adee-98add8fdb6b7
Copilot-Session: 8c2fe46b-fcb4-48bf-8c62-5f9d3d7a470e
* fix: Normalize terminology in sample updates (#1397)
* fix: Normalize terminology in sample updates
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: febf329c-97d8-41aa-bd42-43273bc57fe7
* test: Preserve spacing in terminology updates
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: febf329c-97d8-41aa-bd42-43273bc57fe7
* fix: Handle Markdown wrappers and word boundaries in terminology normalizer
Address review feedback on #1397:
- Require .NET to sit at a non-word boundary so tokens like ASP.NET Aspire and Microsoft.NET Aspire are left intact instead of corrupted into ASPAspire / MicrosoftAspire.
- Consume Markdown emphasis/link openers (**, [) between the article and the term so 'a **.NET Aspire**' and 'a [.NET Aspire](url)' correct the article to 'an'.
- Add regression tests for bold/link article correction and word-boundary cases.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
* refactor: Make terminology normalizer data-driven
Replace the hardcoded replace-chain with a small TerminologyRule table so a new deprecated term is a single entry (pattern/replacement/optional article). Article correction, Markdown-wrapper tolerance, and word-boundary guarding are now applied generically per rule.
Also add the 'dotnet aspire' -> 'Aspire' rule that was present in .github/forbidden-words.json but missing from the normalizer, and cover it with tests.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
* fix: Bound terminology terms by alphanumeric edges and cover Markdown wrappers
Replaces the per-rule mix of \\b\/\(?<!\w)\ boundaries with uniform alphanumeric edge guards applied centrally, so a rule core can never fuse into a longer token (e.g. \.NET AspireX\) and authors cannot forget a boundary. Underscore and inline-code wrappers now normalize correctly (\_.NET Aspire_\, \\.NET Aspire\\), and the generated-data invariant now covers the \dotnet aspire\ spelling.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
* fix: Skip code regions and leave C# untouched in terminology normalizer
The normalizer ran a plain pass over raw Markdown and appHostCode, which could rewrite runnable sample commands (e.g. 'dotnet aspire run' -> 'Aspire run') inside fenced/inline code and corrupt compilable C#. Now fenced blocks and inline code are copied through verbatim, appHostCode is left untouched (it renders as C#, not prose), and the entry point is null-safe. Adds code-skip, mixed prose+code, idempotence, and null tests, and replaces the deprecated-term scan with an idempotence-based invariant.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: febf329c-97d8-41aa-bd42-43273bc57fe7
Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
* Switch cookie consent runtime to WCP API (#1403)
* Switch cookie consent runtime to WCP API
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
* Theme WCP consent UI, add scroll-lock, prune obsolete cookie tests
Fully restyle the WCP cookie banner and preferences dialog to match the
Aspire theme via the team-owned wcp-consent.css (our colors, spacing,
WCAG AA contrast, and the brand icon). The dialog now re-themes live when
the user toggles light/dark, and the underlying page is scroll-locked
while the preferences dialog is open.
Remove the last remnants of the old vanilla-cookieconsent integration:
- delete config/cookie.config.ts and the old cookieconsent-custom.css
- drop @jop-software/astro-cookieconsent + vanilla-cookieconsent deps
- remove the 2 obsolete behavioral cookie e2e tests and their dead
helpers; the WCP banner is geo-gated/CDN-loaded and can't be exercised
in CI, so compliance is verified by the WCP scan instead
- rework the integrations-gallery banner suppression to hide the WCP
banner element instead of pre-seeding the removed cc_cookie shape
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
* Hide "Manage cookies" buttons where consent isn't required
WCP reports whether consent is required for the visitor's region. Where it
is not (e.g. the US) there is nothing to manage, so hide the four "Manage
cookies" buttons instead of leaving inert controls on the page.
The WCP runtime sets a data-consent-not-required flag on <html> once it
knows the region; a CSS rule hides .cookie-consent-btn when the flag is
present. The flag is primed from localStorage before paint so returning
visitors in non-required regions don't see the buttons flash in. Defaulting
to visible keeps this failsafe: if WCP is slow or blocked we never hide a
control a required region needs. display:none also makes the site tour
auto-skip its cookie-preferences step, so no tour changes are needed.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
* Keep header-order e2e test deterministic when consent isn't required
The compact-header-order regression asserts the full set of header
controls, including the "Manage cookies" button. That button is now
region-gated: WCP hides it where consent isn't required, which is how most
CI runner IPs resolve, so the test could see a shorter header and fail.
Block the WCP CDN for this test so it always exercises the failsafe default
(every control present), keeping the expected order stable regardless of
the runner's geo. The site-tour e2e test needs no change; it advances until
"Finish" without counting steps, so it tolerates the cookie step being
skipped.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
* Address PR review: drop dead consent global, harden WCP init
Two fixes for the Copilot review comments on #1403, both in the WCP
initializer in Head.astro:
- Remove the toLegacyCategories / syncConsentState path that only ever
wrote window.__aspireConsentCategories, a global nothing in the frontend
(or anywhere in the repo) reads. This also drops the astro:page-load
handler and getConsent() calls that existed solely to feed that dead
global, removing a runtime side effect with no consumer.
- Resolve the WCP init theme through toWcpThemeName instead of
dereferencing wcp.themes.dark/light directly. If a future WCP payload
omits or renames themes, the direct access threw, the throw was swallowed
by the surrounding try/catch, and initialization stopped permanently with
no retry. toWcpThemeName already falls back to a plain string, and init
now reschedules itself on exceptions within the existing bounded window.
Validated locally against the WCP CDN: consent still initializes (US ->
consent not required, manage-cookies buttons hidden), the removed global is
now undefined, and there are no console errors.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
* Address review 4790741647: wire analytics, fix banner overlap + a11y
Implements every point from adamint's review on #1403.
Critical:
- Analytics never loaded under WCP. The three analytics scripts still ship
inert (type="text/plain" data-category="analytics") from the previous
cookie library, but WCP is a consent-collection API and does not manage
script tags, so nothing re-activated them. Head.astro now bridges the gap:
on init it reads siteConsent.getConsent().Analytics and, when granted
(default where consent isn't required, e.g. the US), promotes each inert
script to an executable clone. onConsentChanged reloads, so a later grant
re-applies via the same path. Verified locally: all three scripts flip
from text/plain to active on the US default-grant page.
Accessibility:
- The geo-gated banner is a fixed top strip that painted over the fixed
Starlight header (z-index 10), hiding nav/search (WCAG 2.4.11). A new
ResizeObserver (trackBannerHeight) publishes the banner's live height as
--wcp-banner-height, and CSS translates .page (the body-level wrapper that
contains every fixed control) down by that amount only while the banner is
in the DOM. It is a no-op with no banner (0px), so the US is unaffected.
Verified: injecting a 60px banner shifts the header to top:60 uncovered.
- Reject / Manage-cookies ghost buttons used a 30% border that failed WCAG
1.4.11 non-text contrast (1.90:1 light / 2.70:1 dark). Bumped to 55%
(3.73:1 / 5.82:1) on the banner and the dialog reset button.
Cleanups:
- Guard openManageConsent so preventDefault only fires when WCP's dialog
actually opened, not on every click.
- Replace the dead `theme-changed` CustomEvent (WCP has no such listener)
with the real re-theme hook, siteConsent.applyTheme(themeObject), driven
by the existing data-theme observer.
- Register onConsentChanged once via init's callback argument; drop the
redundant siteConsent.onConsentChanged(...) call that double-registered it
(WCP stores callbacks in a list, so it fired two reloads per change).
- Refresh the Cookie Consent + screenshot sections of astro.instructions.md
to describe WCP (geo-gated top strip, Accept/Reject/More info, MSCC
cookie) instead of the removed jop-software library.
- Drop the dead E2E_TESTS env (read nowhere) from frontend-build.yml and the
two playwright configs, plus the stale cookie.config.ts comment.
Tests:
- Restore the consent regression coverage adamint flagged as deleted. New
tests/e2e/cookie-consent.spec.ts stubs window.WcpConsent (blocking the real
CDN) so it can assert the behavior that only exists at runtime: analytics
scripts are promoted from inert to executable when Analytics consent is
granted, stay inert when it is withheld, and every server-rendered
manage-cookies control routes a click to siteConsent.manageConsent(). Green
across the desktop, tablet, and mobile projects.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
* Fix WCP analytics ordering and applyTheme arg (review 4797687282)
adamint's CHANGES_REQUESTED (with JamesNK's two inline notes) caught two real
bugs the e2e stub had masked. Both verified against the live library and fixed.
1. Analytics was dead on the default (US) path. activateAnalyticsScripts()
rebuilds each inert script with document.createElement('script') but never
reset `async`. Dynamically-created scripts default to async=true and the
copied `defer` is a no-op for them, so the two tiny same-origin scripts
(1ds.js, track.js) won the race against the ~140 KB 1DS SDK and each bailed
silently (1ds.js returns without `oneDS`; track.js returns without
`window.analytics.__initialized`). Set `next.async = false` so they execute
in insertion (document) order. Since consent isn't required in the US,
Analytics is auto-granted there, so this was most traffic, not an edge case.
2. applyTheme always threw. WCP v2's public `siteConsent.applyTheme(name)`
takes a string theme KEY and looks it up in its internal map; we were
passing `wcp.themes.dark/.light` (an object), so `this.themes[object]` was
undefined -> "Theme not found error", swallowed by withSiteConsent's
try/catch. resolveWcpTheme now returns the 'dark'|'light' string for both
applyTheme and init, so the WCP-internal re-theme actually runs on toggle.
(init's 5th theme arg is ignored by the current CDN build; our CSS overrides
theme the visible surfaces regardless.)
Tests: strengthen the stub so it can no longer hide either bug and add the
missing coverage adamint flagged.
- applyTheme now validates its argument (string key in the themes map) and
throws otherwise, exactly like the live library; a permissive stub could not
catch a wrong-argument regression.
- New assertion: every promoted analytics script has async===false.
- New test: toggling data-theme drives applyTheme with the string key.
- New test: WCP's onConsentChanged (init's 4th arg, now captured by the stub)
reloads the page — restores the accept/reject-persistence coverage lost with
the old ui-regressions tests.
Verified the strengthened guards fail when either fix is reverted, and pass with
both applied: cookie-consent.spec.ts is 15/15 across desktop/tablet/mobile.
Also:
- Revert an unintended pnpm-lock transitive drift (satteri 0.9.3 -> 0.9.4) so
the lockfile diff is only the removed cookie-consent packages.
- Fix a stale CSS comment: the banner's third action is "More info", not
"Manage cookies".
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
* Clarify third-party link guidelines (#1399)
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f983d401-1730-48ef-a79a-8d398376fcd3
* fix: pin brace-expansion 5.0.8 to address GHSA-mh99-v99m-4gvg (#1412)
Dependabot alert #106: brace-expansion DoS (GHSA-mh99-v99m-4gvg, HIGH).
- Widen the conditional override to brace-expansion@<5.0.8: '>=5.0.8' in
pnpm-workspace.yaml.
- Pin brace-expansion to 5.0.8 in pnpm-lock.yaml (now published to the feed;
integrity sha512-JZyDyq3D4A...), fully clearing the alert. balanced-match
dependency unchanged (4.0.4).
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix: normalize Aspire terminology in generated API reference data (#1413)
* fix: normalize Aspire terminology in generated API reference data
The Forbidden Words check fails on the bot's integration-data PRs
(e.g. microsoft/aspire.dev#1411) because the deprecated terms live in
ingestion paths that #1397's normalizer never covered:
- src/data/pkgs/*.json (C# API docs; kind:"text" prose nodes)
- src/data/ts-modules/*.json (TS API docs; description/returns/remarks)
- sample appHostCode (code comments; previously excluded)
#1397 only normalized sample title/description/readme[Raw] and the
integration package description, so regenerated API reference prose and
sample AppHost comments kept reintroducing the deprecated terms verbatim
from upstream XML/JSDoc docs.
This extends normalization to those paths, reusing the single source of
truth in aspire-terminology.ts (kept in sync with
.github/forbidden-words.json):
- aspire-terminology.ts: add normalizeAspireTerminologyInCode(), which
rewrites deprecated terms in code comments only, preserving strings,
char/template literals, and executable code so samples still compile.
- normalize-generated-api-data.ts: format-preserving raw-text pass over
the generated API JSON. Normalizes prose only (kind:"text" nodes and
description/returns/remarks), leaving code/cref/langword nodes and all
.NET-escaped bytes (CRLF, astral \u escapes) byte-for-byte identical.
- update-ts-api.ts: normalize ts-modules before the twoslash bundle is
derived, so aspire.d.ts hover tooltips are normalized too.
- update-integration-data.ps1: normalize pkgs after the C# API generator.
- update-samples.ts: normalize appHostCode comments.
The committed data is already clean (a plain grep over-counts the plural
"app hosts", which the boundary-anchored rule never matches), so this is
a scripts+tests change with no data churn. Adds unit tests for both new
normalizers.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d775be1b-bee3-432e-bbfc-7a4861f3bc05
* fix: preserve commands in code comments
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix: preserve nested interpolation strings
Replace the regex comment tokenizer with a stateful scanner so nested C# interpolation strings and raw strings remain byte-for-byte unchanged while adjacent comments are normalized.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: a9940fd9-999f-4e50-9192-96c023b14792
* fix: normalize comments inside interpolation expressions
Comments nested inside C# interpolation ({ }) and TypeScript template
${ } expressions previously bypassed terminology normalization: the
scanner advanced past them while skipping the surrounding literal.
Thread a comment-span accumulator through interpolation traversal so
those executable-code comments are normalized while nested string,
char, and raw literals stay byte-for-byte identical. Adds C# and TS
regression cases, including a comment paired with a preserved nested
string literal.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d775be1b-bee3-432e-bbfc-7a4861f3bc05
Copilot-Session: a9940fd9-999f-4e50-9192-96c023b14792
* chore: Update integration data and GitHub stats (8/4/26) (#1424)
* chore: Update integration data and GitHub stats (8/4/26)
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix: restore AppHost casing in generated API data
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
---------
Co-authored-by: aspire-repo-bot[bot] <aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
* Pin compromised Keyv ecosystem releases (#1425)
Add exact pnpm overrides for the 11 malicious releases identified by Snyk without changing the current dependency graph.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4a7187e8-18d4-4432-9c78-4ebb8c25d78e
* Add pr-review skill and .agents/skills README index (#1422)
Adds a code-quality pr-review skill (C#/TypeScript/Astro/HTML/CSS) focused on critical issues and test coverage, plus a README indexing all skills.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Redesign the Aspire landing page experience (#1420)
* Redesign the landing page experience
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
* Landing page UX polish: carousel autoplay, AI sparkle, caret + footer
- DashboardCarousel: replace interval autoplay with a rAF progress engine;
add a bottom-left play/pause button + progress bar (stage presentation),
manual nav drops into paused manual mode, Play resumes from the current
slide. Homepage carousel now autoplays (autoplay={true}).
- HomeAgentBadge: swap the star for the AI sparkle (material-symbols
auto-awesome) with glow/twinkle; enlarge popover text.
- AppHostBuilder: left-align caret on blank lines; move typing-animation
checkbox to the bottom-left under the code box.
- Footer: map disclosure animate open/close with scroll adjustment.
- Update homepage e2e tests for the new autoplay + manual-pause behavior.
NOTE: DashboardCarousel play/pause button + progress bar CSS is not yet
added (renders unstyled). Remaining follow-ups tracked separately.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Style dashboard carousel playback controls + freeze progress on pause
- Add CSS for the bottom-left play/pause button (matching the model-story
toggle, dark/purple stage palette) and the under-image progress bar,
gated to the stage presentation via [data-playback='on'].
- Raise the in-stage button above the active slide (z-index 120) so a real
pointer click hits the button instead of the image/zoom target.
- Freeze the progress fill at its current fraction while paused instead of
resetting to 0, so Play resumes visually from where it stopped.
- Add en i18n keys landing.dashboardCarousel.play/.pause (other locales
fall back to English via tt()).
Verified live: autoplay advances, progress fills, play/pause toggles and
swaps icons, manual nav drops into paused manual mode, Play resumes; no
console errors; controls hidden on the coverflow (docs) presentation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Polish mobile radar, footer bottom row, and slow carousel
- HomeEnvironment: on mobile, lift the bottom-left database resource clear
of the pause control and tuck the floating nodes closer to the radar's
extending lines (verified across Local/Test/Production at 390px and 360px).
- Footer: stack the bottom row (copyright / "Made with love" / SHA) into a
single left-aligned column at <=52rem so the items align cleanly on
mobile/tablet and the SHA no longer collides with the scroll-to-top button.
- DashboardCarousel: slow autoplay cadence from 5.5s to 7s per slide.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Emulate dashboard, realistic terminal, and lightbox nav
Polish the landing page "one application model" (glue-work) section and the
dashboard carousel:
- Replace the static dashboard screenshot in the glue-work section with an
animated, emulated resources table that mirrors the real Aspire dashboard:
rows come online staggered (Starting -> Running), URLs fade in, and a live
"N of 4 resources running" counter tracks progress. Snaps to the final
running state on manual tab selection or reduced motion.
- Rewrite the model-story terminal to faithful `aspire run` output: build and
start status lines plus the AppHost / Dashboard / Logs summary grid with a
login-token dashboard URL. Long lines now wrap on narrow viewports instead of
clipping.
- Add prev/next navigation to the dashboard carousel's zoom lightbox. Arrow
buttons (and Left/Right keys) flip through every view without unzooming; the
carousel rests on the last-viewed slide when the lightbox closes. Buttons are
theme-aware and respect reduced motion.
- Vary a repetitive AI badge label and drop the redundant environment tab
underline animation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Enlarge AppHost code panel font to match other model-story tabs
The AppHost code snippet rendered at a much smaller font than the
Topology and Dashboard panels, making it hard to read. Bump the code
font/line-height to match the dashboard panel (clamp(0.74rem, 1.15vw,
0.86rem)), trim the padding, and grow the model-story stage height
(clamp(24rem, 37vw, 28rem)) so the 17-line TypeScript variant still
fits without clipping. Also enlarge the mobile code font accordingly.
Verified across 384-1440px in both themes: code font now matches the
dashboard exactly with no vertical clipping; Topology and Dashboard
tabs still look good with the extra room.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Clean up redesigned landing page: remove dead components, localize, a11y
Final cleanup pass on the landing-page redesign:
- Delete 7 unused legacy homepage components (FreeAndOpenSourceAside +
quotes data, IntegrationGrid, LanguagesSupported, LocalVsProdEnvironments,
SimpleCard, TestimonialCarousel) and drop their unit/e2e/prop-contract tests.
- Render the redesigned <HomePage /> from every locale index.mdx and switch the
Starlight hero to isHomepage() so the new hero shows on all locale homepages.
- Add a localized `home` i18n namespace to en.json and translate it into all
14 locales (115 strings each), preserving {{placeholders}} and <strong> markup.
- Add a localizedHref() helper for locale-aware internal links.
- Accessibility: switch the model-story code block to Expressive Code for WCAG AA
contrast in both themes, add Escape-dismiss to the agent-badge tooltip
(WCAG 1.4.13), and keep decorative regions fully out of the tab order.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Polish announcement banner styles
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Complete landing page redesign refinements
Finish the runtime story, responsive motion gating, dashboard media, accessible custom selects, localized shared controls, and regression coverage across the landing experience.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
* Fix homepage CI rendering
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
* Harden homepage E2E checks
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
* Relocate carousel playback control and glide slides
Move the stage playback button into the footer controls row so it sits bottom-left alongside the prev/next buttons, and remove the redundant visible slide description. Add a directional transform + opacity transition so views glide between slides instead of hard-cutting.
Update the homepage dashboard-tour e2e test to match: assert the playback button shares the controls row (left of prev/next), the slide description is gone, and the active slide animates.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Address landing-page review: fix CustomSelect scroll close, freeze dashboard on pause, localize carousel play/pause
- CustomSelect: ignore scroll events originating inside the fixed listbox so scrolling the menu (wheel/touch or keyboard scrollIntoView) no longer dismisses it, keeping below-the-fold locales reachable while preserving close-on-page-scroll/resize.
- HomePage: clearDashTimers() in pause() so the emulated dashboard stops populating while the runtime story is paused.
- i18n: add translated dashboardCarousel.play/.pause to all 14 non-English locales.
- e2e: add regression test that scrolls inside the language listbox and pages to the last option, asserting the menu stays open.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Fix homepage testing link
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
* Refine landing page feedback
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* docs: add trusted repository CLI guidance (#1426)
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 937c958a-8043-40ee-8c89-4395dc892a57
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: James Newton-King <james@newtonking.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Ankit Jain <radical@gmail.com>
Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: aspire-repo-bot[bot] <aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Adam Ratzman <adam@adamratzman.com>
Co-authored-by: Jose Perez Rodriguez <joperezr@microsoft.com>
Copilot-Session: 572347d9-75da-4b54-9a3d-f9589ef4e39b
Copilot-Session: 4125af76-bbc2-4532-adee-98add8fdb6b7
Copilot-Session: 8c2fe46b-fcb4-48bf-8c62-5f9d3d7a470e
Copilot-Session: febf329c-97d8-41aa-bd42-43273bc57fe7
Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
Copilot-Session: f983d401-1730-48ef-a79a-8d398376fcd3
Copilot-Session: d775be1b-bee3-432e-bbfc-7a4861f3bc05
Copilot-Session: a9940fd9-999f-4e50-9192-96c023b14792
Copilot-Session: 4a7187e8-18d4-4432-9c78-4ebb8c25d78e
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
Copilot-Session: 937c958a-8043-40ee-8c89-4395dc892a57
Copilot-Session: 58ba82e5-9eb1-4c4b-8e6f-230ea7cbaef7
* Revise interaction service API documentation (#1408)
Updated section headings and clarified usage instructions for the interaction service API.
* [auto-sec] Consolidate aspire.dev frontend dependency security remediations (#1392)
* build(deps): bump the npm-all group across 1 directory with 32 updates
Bumps the npm-all group with 32 updates in the /src/frontend directory:
| Package | From | To |
| --- | --- | --- |
| [@astrojs/markdown-remark](https://github.com/withastro/astro/tree/HEAD/packages/markdown/remark) | `7.2.0` | `7.2.1` |
| [@astrojs/mdx](https://github.com/withastro/astro/tree/HEAD/packages/integrations/mdx) | `7.0.0` | `7.0.3` |
| [@astrojs/rss](https://github.com/withastro/astro/tree/HEAD/packages/astro-rss) | `4.0.18` | `4.0.19` |
| [@astrojs/starlight](https://github.com/withastro/starlight/tree/HEAD/packages/starlight) | `0.41.1` | `0.41.3` |
| [@catppuccin/starlight](https://github.com/catppuccin/starlight/tree/HEAD/packages/catppuccin-starlight) | `2.0.1` | `2.1.0` |
| [@expressive-code/plugin-collapsible-sections](https://github.com/expressive-code/expressive-code/tree/HEAD/packages/@expressive-code/plugin-collapsible-sections) | `0.44.0` | `0.44.1` |
| [@expressive-code/plugin-line-numbers](https://github.com/expressive-code/expressive-code/tree/HEAD/packages/@expressive-code/plugin-line-numbers) | `0.44.0` | `0.44.1` |
| [@fontsource-variable/fira-code](https://github.com/fontsource/font-files/tree/HEAD/fonts/variable/fira-code) | `5.2.7` | `5.3.0` |
| [@fontsource-variable/outfit](https://github.com/fontsource/font-files/tree/HEAD/fonts/variable/outfit) | `5.2.8` | `5.3.0` |
| [@fontsource-variable/rubik](https://github.com/fontsource/font-files/tree/HEAD/fonts/variable/rubik) | `5.2.8` | `5.3.0` |
| [@fontsource/poppins](https://github.com/fontsource/font-files/tree/HEAD/fonts/google/poppins) | `5.2.7` | `5.3.0` |
| [asciinema-player](https://github.com/asciinema/asciinema-player) | `3.16.0` | `3.17.0` |
| [astro](https://github.com/withastro/astro/tree/HEAD/packages/astro) | `7.0.3` | `7.1.3` |
| [astro-expressive-code](https://github.com/expressive-code/expressive-code/tree/HEAD/packages/astro-expressive-code) | `0.44.0` | `0.44.1` |
| [satori](https://github.com/vercel/satori) | `0.26.0` | `0.28.1` |
| [satteri](https://github.com/bruits/satteri) | `0.9.4` | `0.9.5` |
| [sharp](https://github.com/lovell/sharp) | `0.34.5` | `0.35.3` |
| [starlight-github-alerts](https://github.com/HiDeoo/starlight-github-alerts/tree/HEAD/packages/starlight-github-alerts) | `0.3.0` | `0.4.0` |
| [starlight-links-validator](https://github.com/HiDeoo/starlight-links-validator/tree/HEAD/packages/starlight-links-validator) | `0.25.1` | `0.25.2` |
| [starlight-llms-txt](https://github.com/delucis/starlight-llms-txt/tree/HEAD/packages/starlight-llms-txt) | `0.10.0` | `0.11.0` |
| [starlight-page-actions](https://github.com/dlcastillop/starlight-page-actions/tree/HEAD/packages/starlight-page-actions) | `0.6.2` | `0.7.0` |
| [@iconify-json/material-icon-theme](https://github.com/iconify/icon-sets) | `1.2.68` | `1.2.69` |
| [@types/hast](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/hast) | `3.0.4` | `3.0.5` |
| [@unocss/astro](https://github.com/unocss/unocss/tree/HEAD/packages-integrations/astro) | `66.6.8` | `66.7.5` |
| [astro-embed](https://github.com/delucis/astro-embed/tree/HEAD/packages/astro-embed) | `0.13.0` | `0.13.1` |
| [eslint](https://github.com/eslint/eslint) | `10.6.0` | `10.7.0` |
| [prettier](https://github.com/prettier/prettier) | `3.9.1` | `3.9.5` |
| [tsx](https://github.com/privatenumber/tsx) | `4.22.4` | `4.23.1` |
| [typescript](https://github.com/microsoft/TypeScript) | `6.0.3` | `7.0.2` |
| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.62.0` | `8.65.0` |
| [unocss](https://github.com/unocss/unocss/tree/HEAD/packages-presets/unocss) | `66.6.8` | `66.7.5` |
| [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.9` | `4.1.10` |
Updates `@astrojs/markdown-remark` from 7.2.0 to 7.2.1
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/markdown/remark/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/@astrojs/markdown-remark@7.2.1/packages/markdown/remark)
Updates `@astrojs/mdx` from 7.0.0 to 7.0.3
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/integrations/mdx/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/@astrojs/mdx@7.0.3/packages/integrations/mdx)
Updates `@astrojs/rss` from 4.0.18 to 4.0.19
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/astro-rss/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/@astrojs/rss@4.0.19/packages/astro-rss)
Updates `@astrojs/starlight` from 0.41.1 to 0.41.3
- [Release notes](https://github.com/withastro/starlight/releases)
- [Changelog](https://github.com/withastro/starlight/blob/main/packages/starlight/CHANGELOG.md)
- [Commits](https://github.com/withastro/starlight/commits/@astrojs/starlight@0.41.3/packages/starlight)
Updates `@catppuccin/starlight` from 2.0.1 to 2.1.0
- [Release notes](https://github.com/catppuccin/starlight/releases)
- [Changelog](https://github.com/catppuccin/starlight/blob/main/packages/catppuccin-starlight/CHANGELOG.md)
- [Commits](https://github.com/catppuccin/starlight/commits/v2.1.0/packages/catppuccin-starlight)
Updates `@expressive-code/plugin-collapsible-sections` from 0.44.0 to 0.44.1
- [Release notes](https://github.com/expressive-code/expressive-code/releases)
- [Changelog](https://github.com/expressive-code/expressive-code/blob/main/packages/@expressive-code/plugin-collapsible-sections/CHANGELOG.md)
- [Commits](https://github.com/expressive-code/expressive-code/commits/@expressive-code/plugin-collapsible-sections@0.44.1/packages/@expressive-code/plugin-collapsible-sections)
Updates `@expressive-code/plugin-line-numbers` from 0.44.0 to 0.44.1
- [Release notes](https://github.com/expressive-code/expressive-code/releases)
- [Changelog](https://github.com/expressive-code/expressive-code/blob/main/packages/@expressive-code/plugin-line-numbers/CHANGELOG.md)
- [Commits](https://github.com/expressive-code/expressive-code/commits/@expressive-code/plugin-line-numbers@0.44.1/packages/@expressive-code/plugin-line-numbers)
Updates `@fontsource-variable/fira-code` from 5.2.7 to 5.3.0
- [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/variable/fira-code)
Updates `@fontsource-variable/outfit` from 5.2.8 to 5.3.0
- [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/variable/outfit)
Updates `@fontsource-variable/rubik` from 5.2.8 to 5.3.0
- [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/variable/rubik)
Updates `@fontsource/poppins` from 5.2.7 to 5.3.0
- [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/google/poppins)
Updates `asciinema-player` from 3.16.0 to 3.17.0
- [Release notes](https://github.com/asciinema/asciinema-player/releases)
- [Commits](https://github.com/asciinema/asciinema-player/compare/v3.16.0...v3.17.0)
Updates `astro` from 7.0.3 to 7.1.3
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/astro/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/astro@7.1.3/packages/astro)
Updates `astro-expressive-code` from 0.44.0 to 0.44.1
- [Release notes](https://github.com/expressive-code/expressive-code/releases)
- [Changelog](https://github.com/expressive-code/expressive-code/blob/main/packages/astro-expressive-code/CHANGELOG.md)
- [Commits](https://github.com/expressive-code/expressive-code/commits/astro-expressive-code@0.44.1/packages/astro-expressive-code)
Updates `satori` from 0.26.0 to 0.28.1
- [Release notes](https://github.com/vercel/satori/releases)
- [Commits](https://github.com/vercel/satori/compare/0.26.0...0.28.1)
Updates `satteri` from 0.9.4 to 0.9.5
- [Release notes](https://github.com/bruits/satteri/releases)
- [Commits](https://github.com/bruits/satteri/compare/satteri-v0.9.4...satteri-v0.9.5)
Updates `sharp` from 0.34.5 to 0.35.3
- [Release notes](https://github.com/lovell/sharp/releases)
- [Commits](https://github.com/lovell/sharp/compare/v0.34.5...v0.35.3)
Updates `starlight-github-alerts` from 0.3.0 to 0.4.0
- [Release notes](https://github.com/HiDeoo/starlight-github-alerts/releases)
- [Changelog](https://github.com/HiDeoo/starlight-github-alerts/blob/main/packages/starlight-github-alerts/CHANGELOG.md)
- [Commits](https://github.com/HiDeoo/starlight-github-alerts/commits/starlight-github-alerts@0.4.0/packages/starlight-github-alerts)
Updates `starlight-links-validator` from 0.25.1 to 0.25.2
- [Release notes](https://github.com/HiDeoo/starlight-links-validator/releases)
- [Changelog](https://github.com/HiDeoo/starlight-links-validator/blob/main/packages/starlight-links-validator/CHANGELOG.md)
- [Commits](https://github.com/HiDeoo/starlight-links-validator/commits/starlight-links-validator@0.25.2/packages/starlight-links-validator)
Updates `starlight-llms-txt` from 0.10.0 to 0.11.0
- [Release notes](https://github.com/delucis/starlight-llms-txt/releases)
- [Changelog](https://github.com/delucis/starlight-llms-txt/blob/main/packages/starlight-llms-txt/CHANGELOG.md)
- [Commits](https://github.com/delucis/starlight-llms-txt/commits/starlight-llms-txt@0.11.0/packages/starlight-llms-txt)
Updates `starlight-page-actions` from 0.6.2 to 0.7.0
- [Release notes](https://github.com/dlcastillop/starlight-page-actions/releases)
- [Commits](https://github.com/dlcastillop/starlight-page-actions/commits/v0.7.0/packages/starlight-page-actions)
Updates `@iconify-json/material-icon-theme` from 1.2.68 to 1.2.69
- [Commits](https://github.com/iconify/icon-sets/commits)
Updates `@types/hast` from 3.0.4 to 3.0.5
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/hast)
Updates `@unocss/astro` from 66.6.8 to 66.7.5
- [Release notes](https://github.com/unocss/unocss/releases)
- [Commits](https://github.com/unocss/unocss/commits/v66.7.5/packages-integrations/astro)
Updates `astro-embed` from 0.13.0 to 0.13.1
- [Release notes](https://github.com/delucis/astro-embed/releases)
- [Changelog](https://github.com/delucis/astro-embed/blob/main/packages/astro-embed/CHANGELOG.md)
- [Commits](https://github.com/delucis/astro-embed/commits/astro-embed@0.13.1/packages/astro-embed)
Updates `eslint` from 10.6.0 to 10.7.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v10.6.0...v10.7.0)
Updates `prettier` from 3.9.1 to 3.9.5
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.9.1...3.9.5)
Updates `tsx` from 4.22.4 to 4.23.1
- [Release notes](https://github.com/privatenumber/tsx/releases)
- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs)
- [Commits](https://github.com/privatenumber/tsx/compare/v4.22.4...v4.23.1)
Updates `typescript` from 6.0.3 to 7.0.2
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Commits](https://github.com/microsoft/TypeScript/commits)
Updates `typescript-eslint` from 8.62.0 to 8.65.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.65.0/packages/typescript-eslint)
Updates `unocss` from 66.6.8 to 66.7.5
- [Release notes](https://github.com/unocss/unocss/releases)
- [Commits](https://github.com/unocss/unocss/commits/v66.7.5/packages-presets/unocss)
Updates `vitest` from 4.1.9 to 4.1.10
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.10/packages/vitest)
---
updated-dependencies:
- dependency-name: "@astrojs/markdown-remark"
dependency-version: 7.2.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@astrojs/mdx"
dependency-version: 7.0.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@astrojs/rss"
dependency-version: 4.0.19
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@astrojs/starlight"
dependency-version: 0.41.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@catppuccin/starlight"
dependency-version: 2.1.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: "@expressive-code/plugin-collapsible-sections"
dependency-version: 0.44.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@expressive-code/plugin-line-numbers"
dependency-version: 0.44.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@fontsource-variable/fira-code"
dependency-version: 5.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: "@fontsource-variable/outfit"
dependency-version: 5.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: "@fontsource-variable/rubik"
dependency-version: 5.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: "@fontsource/poppins"
dependency-version: 5.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: asciinema-player
dependency-version: 3.17.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: astro
dependency-version: 7.1.3
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: astro-expressive-code
dependency-version: 0.44.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: satori
dependency-version: 0.28.1
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: satteri
dependency-version: 0.9.5
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: sharp
dependency-version: 0.35.3
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: starlight-github-alerts
dependency-version: 0.4.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: starlight-links-validator
dependency-version: 0.25.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: starlight-llms-txt
dependency-version: 0.11.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: starlight-page-actions
dependency-version: 0.7.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: "@iconify-json/material-icon-theme"
dependency-version: 1.2.69
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@types/hast"
dependency-version: 3.0.5
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@unocss/astro"
dependency-version: 66.7.5
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: astro-embed
dependency-version: 0.13.1
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: eslint
dependency-version: 10.7.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: prettier
dependency-version: 3.9.5
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: tsx
dependency-version: 4.23.1
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: typescript
dependency-version: 7.0.2
dependency-type: direct:development
update-type: version-update:semver-major
dependency-group: npm-all
- dependency-name: typescript-eslint
dependency-version: 8.65.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: unocss
dependency-version: 66.7.5
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: vitest
dependency-version: 4.1.10
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-all
...
Signed-off-by: dependabot[bot] <support@github.com>
* fix: revert typescript 7.x to 6.x to restore twoslash/expressive-code compatibility
TypeScript 7.0 ('Corsa') is a native Go rewrite that removes the programmatic
JS API entirely. twoslash accesses ts.ModuleKind.Cjs which is undefined in TS7,
causing ec.config.mjs -> expressive-code-twoslash -> twoslash to crash at build
time with: 'The requested module expressive-code-twoslash does not provide an
export named default' and related CJS/ESM resolution failures.
Fix:
- Revert typescript ^7.0.2 -> ^6.0.3 in package.json
- Update pnpm-lock.yaml: swap integrity hash, version specifier, remove the
@typescript/typescript-* platform-native binaries (TS7-only), and fix all
peer-dep snapshot keys to reference typescript@6.0.3
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(frontend): skip canonicalizing redirects while prerendering
Astro 7.1 runs middleware while prerendering the .md/.json API and schema endpoints, so the trailing-slash redirects were baked into dist/ as redirect stubs that shadowed the real prerendered markdown/JSON and broke the api-markdown-routes and schema-routes E2E checks. Guard the redirects behind context.isPrerendered so they only apply to on-demand (SSR/dev) requests.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 572347d9-75da-4b54-9a3d-f9589ef4e39b
* fix(security): bump dompurify to 3.4.12 (GHSA-c2j3-45gr-mqc4) and tighten brace-expansion override
- dompurify@<3.4.12: '>=3.4.12' — GHSA-c2j3-45gr-mqc4 (low): bypass in
CUSTOM_ELEMENT_HANDLING, fixed in 3.4.12
- brace-expansion@<5.0.7: '>=5.0.7' — GHSA-3jxr-9vmj-r5cp (high): DoS via
exponential-time expansion, 5.0.7 is the patched version
- postcss@8.5.20 already satisfies GHSA-r28c-9q8g-f849 (<=8.5.17) via existing
override; no change needed
- GHSA-mh99-v99m-4gvg (brace-expansion <=5.0.7): no upstream fix available,
documented as unfixable in canonical PR body
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 572347d9-75da-4b54-9a3d-f9589ef4e39b
* Redact connection-string passwords in generated package docs (#1410)
* Redact connection-string passwords in generated package docs
PackageJsonGenerator copies package XML doc comments verbatim into the frontend
data JSON. Several packages document example connection strings containing a
literal placeholder password (e.g. SqlServer's GetConnectionString returns
"Server=host,port;User ID=sa;Password=password;TrustServerCertificate=true").
These are not real secrets, but the literal Password=<value> token trips 1ES /
CredScan push protection (SEC101/037 SqlLegacyCredentials, VS403654) when the
public repo is mirrored to the internal AzDO remote, blocking the deploy and
deploy-vnext-release branch syncs.
Add DocumentationSanitizer.RedactConnectionStringPasswords, applied to text,
inline-code and code-block doc nodes, which rewrites connection-string
Password=/Pwd= literals to <password>. C# default parameter values
(password = null) are left untouched because the match requires no whitespace
around '='. Regenerate the four affected data files accordingly.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4125af76-bbc2-4532-adee-98add8fdb6b7
* Address PR review: markdown-safe placeholder, cover example nodes, nullable API
- Use "{password}" instead of "<password>". Angle brackets are dropped as raw
HTML when doc nodes render to Markdown (csharp-api-markdown.ts concatenates
text without escaping), which would hide the value in connection-string
examples. "{password}" is also the existing placeholder convention already
used across the generated data (e.g. mysql://{user}:{password}@{host}).
- Sanitize the <example> extraction paths in ExtractDocExample (plain-text
code, description text nodes, and example code) so connection-string
passwords there cannot re-trigger CredScan in future data refreshes.
- Make DocumentationSanitizer.RedactConnectionStringPasswords nullable-aware
(string? in/out) to match its behavior and drop the null-forgiving operator
in tests. Exclude '{'/'}' from the value class to keep redaction idempotent.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4125af76-bbc2-4532-adee-98add8fdb6b7
* Use "Placeholder" redaction token per 1ES recommendation
The connection-string password sanitizer redacted values to `{password}`.
Switch the token to a bare `Placeholder`, which is the value 1ES
recommends for scrubbed credential examples in generated content.
Update the sanitizer unit-test expectations to match, and update the four
affected package data files. The pre-existing `{password}` doc template
tokens in those files (author-written placeholders, not sanitizer output)
are intentionally left unchanged.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 8c2fe46b-fcb4-48bf-8c62-5f9d3d7a470e
* fix(PackageJsonGenerator): tighten redaction regex and close doc gaps
Two hardening fixes to the connection-string password redaction added in
this PR.
F1 - the redaction regex over-consumed trailing delimiters. The value
character class only excluded ';', quotes, comma, whitespace, backslash,
and brace/angle markers. A value immediately followed by a markdown or
URI delimiter ('`', ')', ']', '&', '|') swallowed that delimiter into the
match, so an inline-code fence lost its closing backtick and a link label
lost its closing paren, corrupting the rendered doc. The class now also
stops at those delimiters. A trailing sentence period is preserved by
trimming it off the captured value in the replacement callback rather
than excluding '.' from the class, which would truncate legitimate dotted
values.
F4 - two documentation paths reached the generated JSON unsanitized. Enum
member descriptions (Description = ExtractSummary(f)) and <see href="...">
link labels were emitted verbatim, so a connection string in an enum
member's <summary> or a link label bypassed redaction. Both now run
through the sanitizer. This changes no committed data (no such values
exist in the current package set); the fix is preventive.
Also refreshes the sanitizer comment and XML docs to describe the
Placeholder token and the widened exclusion set.
Tests: added markdown/URI delimiter and trailing-period cases to the
sanitizer unit tests, and an end-to-end test asserting an enum member
whose summary contains a connection string is redacted in the generated
JSON. All 31 tests pass.
chore: sanitize placeholder connection strings in generated pkg JSON
**BYPASS_SECRET_SCANNING** — false-positive SEC101/037 placeholder in
generated pkgs/*.json, unblocking the internal mirror for historical
commit 6058fcf. Forward fix regenerates the affected files.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 8c2fe46b-fcb4-48bf-8c62-5f9d3d7a470e
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Ankit Jain <radical@gmail.com>
Copilot-Session: 4125af76-bbc2-4532-adee-98add8fdb6b7
Copilot-Session: 8c2fe46b-fcb4-48bf-8c62-5f9d3d7a470e
* fix: Normalize terminology in sample updates (#1397)
* fix: Normalize terminology in sample updates
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: febf329c-97d8-41aa-bd42-43273bc57fe7
* test: Preserve spacing in terminology updates
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: febf329c-97d8-41aa-bd42-43273bc57fe7
* fix: Handle Markdown wrappers and word boundaries in terminology normalizer
Address review feedback on #1397:
- Require .NET to sit at a non-word boundary so tokens like ASP.NET Aspire and Microsoft.NET Aspire are left intact instead of corrupted into ASPAspire / MicrosoftAspire.
- Consume Markdown emphasis/link openers (**, [) between the article and the term so 'a **.NET Aspire**' and 'a [.NET Aspire](url)' correct the article to 'an'.
- Add regression tests for bold/link article correction and word-boundary cases.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
* refactor: Make terminology normalizer data-driven
Replace the hardcoded replace-chain with a small TerminologyRule table so a new deprecated term is a single entry (pattern/replacement/optional article). Article correction, Markdown-wrapper tolerance, and word-boundary guarding are now applied generically per rule.
Also add the 'dotnet aspire' -> 'Aspire' rule that was present in .github/forbidden-words.json but missing from the normalizer, and cover it with tests.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
* fix: Bound terminology terms by alphanumeric edges and cover Markdown wrappers
Replaces the per-rule mix of \\b\/\(?<!\w)\ boundaries with uniform alphanumeric edge guards applied centrally, so a rule core can never fuse into a longer token (e.g. \.NET AspireX\) and authors cannot forget a boundary. Underscore and inline-code wrappers now normalize correctly (\_.NET Aspire_\, \\.NET Aspire\\), and the generated-data invariant now covers the \dotnet aspire\ spelling.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
* fix: Skip code regions and leave C# untouched in terminology normalizer
The normalizer ran a plain pass over raw Markdown and appHostCode, which could rewrite runnable sample commands (e.g. 'dotnet aspire run' -> 'Aspire run') inside fenced/inline code and corrupt compilable C#. Now fenced blocks and inline code are copied through verbatim, appHostCode is left untouched (it renders as C#, not prose), and the entry point is null-safe. Adds code-skip, mixed prose+code, idempotence, and null tests, and replaces the deprecated-term scan with an idempotence-based invariant.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: febf329c-97d8-41aa-bd42-43273bc57fe7
Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
* Switch cookie consent runtime to WCP API (#1403)
* Switch cookie consent runtime to WCP API
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
* Theme WCP consent UI, add scroll-lock, prune obsolete cookie tests
Fully restyle the WCP cookie banner and preferences dialog to match the
Aspire theme via the team-owned wcp-consent.css (our colors, spacing,
WCAG AA contrast, and the brand icon). The dialog now re-themes live when
the user toggles light/dark, and the underlying page is scroll-locked
while the preferences dialog is open.
Remove the last remnants of the old vanilla-cookieconsent integration:
- delete config/cookie.config.ts and the old cookieconsent-custom.css
- drop @jop-software/astro-cookieconsent + vanilla-cookieconsent deps
- remove the 2 obsolete behavioral cookie e2e tests and their dead
helpers; the WCP banner is geo-gated/CDN-loaded and can't be exercised
in CI, so compliance is verified by the WCP scan instead
- rework the integrations-gallery banner suppression to hide the WCP
banner element instead of pre-seeding the removed cc_cookie shape
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
* Hide "Manage cookies" buttons where consent isn't required
WCP reports whether consent is required for the visitor's region. Where it
is not (e.g. the US) there is nothing to manage, so hide the four "Manage
cookies" buttons instead of leaving inert controls on the page.
The WCP runtime sets a data-consent-not-required flag on <html> once it
knows the region; a CSS rule hides .cookie-consent-btn when the flag is
present. The flag is primed from localStorage before paint so returning
visitors in non-required regions don't see the buttons flash in. Defaulting
to visible keeps this failsafe: if WCP is slow or blocked we never hide a
control a required region needs. display:none also makes the site tour
auto-skip its cookie-preferences step, so no tour changes are needed.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
* Keep header-order e2e test deterministic when consent isn't required
The compact-header-order regression asserts the full set of header
controls, including the "Manage cookies" button. That button is now
region-gated: WCP hides it where consent isn't required, which is how most
CI runner IPs resolve, so the test could see a shorter header and fail.
Block the WCP CDN for this test so it always exercises the failsafe default
(every control present), keeping the expected order stable regardless of
the runner's geo. The site-tour e2e test needs no change; it advances until
"Finish" without counting steps, so it tolerates the cookie step being
skipped.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
* Address PR review: drop dead consent global, harden WCP init
Two fixes for the Copilot review comments on #1403, both in the WCP
initializer in Head.astro:
- Remove the toLegacyCategories / syncConsentState path that only ever
wrote window.__aspireConsentCategories, a global nothing in the frontend
(or anywhere in the repo) reads. This also drops the astro:page-load
handler and getConsent() calls that existed solely to feed that dead
global, removing a runtime side effect with no consumer.
- Resolve the WCP init theme through toWcpThemeName instead of
dereferencing wcp.themes.dark/light directly. If a future WCP payload
omits or renames themes, the direct access threw, the throw was swallowed
by the surrounding try/catch, and initialization stopped permanently with
no retry. toWcpThemeName already falls back to a plain string, and init
now reschedules itself on exceptions within the existing bounded window.
Validated locally against the WCP CDN: consent still initializes (US ->
consent not required, manage-cookies buttons hidden), the removed global is
now undefined, and there are no console errors.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
* Address review 4790741647: wire analytics, fix banner overlap + a11y
Implements every point from adamint's review on #1403.
Critical:
- Analytics never loaded under WCP. The three analytics scripts still ship
inert (type="text/plain" data-category="analytics") from the previous
cookie library, but WCP is a consent-collection API and does not manage
script tags, so nothing re-activated them. Head.astro now bridges the gap:
on init it reads siteConsent.getConsent().Analytics and, when granted
(default where consent isn't required, e.g. the US), promotes each inert
script to an executable clone. onConsentChanged reloads, so a later grant
re-applies via the same path. Verified locally: all three scripts flip
from text/plain to active on the US default-grant page.
Accessibility:
- The geo-gated banner is a fixed top strip that painted over the fixed
Starlight header (z-index 10), hiding nav/search (WCAG 2.4.11). A new
ResizeObserver (trackBannerHeight) publishes the banner's live height as
--wcp-banner-height, and CSS translates .page (the body-level wrapper that
contains every fixed control) down by that amount only while the banner is
in the DOM. It is a no-op with no banner (0px), so the US is unaffected.
Verified: injecting a 60px banner shifts the header to top:60 uncovered.
- Reject / Manage-cookies ghost buttons used a 30% border that failed WCAG
1.4.11 non-text contrast (1.90:1 light / 2.70:1 dark). Bumped to 55%
(3.73:1 / 5.82:1) on the banner and the dialog reset button.
Cleanups:
- Guard openManageConsent so preventDefault only fires when WCP's dialog
actually opened, not on every click.
- Replace the dead `theme-changed` CustomEvent (WCP has no such listener)
with the real re-theme hook, siteConsent.applyTheme(themeObject), driven
by the existing data-theme observer.
- Register onConsentChanged once via init's callback argument; drop the
redundant siteConsent.onConsentChanged(...) call that double-registered it
(WCP stores callbacks in a list, so it fired two reloads per change).
- Refresh the Cookie Consent + screenshot sections of astro.instructions.md
to describe WCP (geo-gated top strip, Accept/Reject/More info, MSCC
cookie) instead of the removed jop-software library.
- Drop the dead E2E_TESTS env (read nowhere) from frontend-build.yml and the
two playwright configs, plus the stale cookie.config.ts comment.
Tests:
- Restore the consent regression coverage adamint flagged as deleted. New
tests/e2e/cookie-consent.spec.ts stubs window.WcpConsent (blocking the real
CDN) so it can assert the behavior that only exists at runtime: analytics
scripts are promoted from inert to executable when Analytics consent is
granted, stay inert when it is withheld, and every server-rendered
manage-cookies control routes a click to siteConsent.manageConsent(). Green
across the desktop, tablet, and mobile projects.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
* Fix WCP analytics ordering and applyTheme arg (review 4797687282)
adamint's CHANGES_REQUESTED (with JamesNK's two inline notes) caught two real
bugs the e2e stub had masked. Both verified against the live library and fixed.
1. Analytics was dead on the default (US) path. activateAnalyticsScripts()
rebuilds each inert script with document.createElement('script') but never
reset `async`. Dynamically-created scripts default to async=true and the
copied `defer` is a no-op for them, so the two tiny same-origin scripts
(1ds.js, track.js) won the race against the ~140 KB 1DS SDK and each bailed
silently (1ds.js returns without `oneDS`; track.js returns without
`window.analytics.__initialized`). Set `next.async = false` so they execute
in insertion (document) order. Since consent isn't required in the US,
Analytics is auto-granted there, so this was most traffic, not an edge case.
2. applyTheme always threw. WCP v2's public `siteConsent.applyTheme(name)`
takes a string theme KEY and looks it up in its internal map; we were
passing `wcp.themes.dark/.light` (an object), so `this.themes[object]` was
undefined -> "Theme not found error", swallowed by withSiteConsent's
try/catch. resolveWcpTheme now returns the 'dark'|'light' string for both
applyTheme and init, so the WCP-internal re-theme actually runs on toggle.
(init's 5th theme arg is ignored by the current CDN build; our CSS overrides
theme the visible surfaces regardless.)
Tests: strengthen the stub so it can no longer hide either bug and add the
missing coverage adamint flagged.
- applyTheme now validates its argument (string key in the themes map) and
throws otherwise, exactly like the live library; a permissive stub could not
catch a wrong-argument regression.
- New assertion: every promoted analytics script has async===false.
- New test: toggling data-theme drives applyTheme with the string key.
- New test: WCP's onConsentChanged (init's 4th arg, now captured by the stub)
reloads the page — restores the accept/reject-persistence coverage lost with
the old ui-regressions tests.
Verified the strengthened guards fail when either fix is reverted, and pass with
both applied: cookie-consent.spec.ts is 15/15 across desktop/tablet/mobile.
Also:
- Revert an unintended pnpm-lock transitive drift (satteri 0.9.3 -> 0.9.4) so
the lockfile diff is only the removed cookie-consent packages.
- Fix a stale CSS comment: the banner's third action is "More info", not
"Manage cookies".
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
* Clarify third-party link guidelines (#1399)
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f983d401-1730-48ef-a79a-8d398376fcd3
* fix: pin brace-expansion 5.0.8 to address GHSA-mh99-v99m-4gvg (#1412)
Dependabot alert #106: brace-expansion DoS (GHSA-mh99-v99m-4gvg, HIGH).
- Widen the conditional override to brace-expansion@<5.0.8: '>=5.0.8' in
pnpm-workspace.yaml.
- Pin brace-expansion to 5.0.8 in pnpm-lock.yaml (now published to the feed;
integrity sha512-JZyDyq3D4A...), fully clearing the alert. balanced-match
dependency unchanged (4.0.4).
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix: normalize Aspire terminology in generated API reference data (#1413)
* fix: normalize Aspire terminology in generated API reference data
The Forbidden Words check fails on the bot's integration-data PRs
(e.g. microsoft/aspire.dev#1411) because the deprecated terms live in
ingestion paths that #1397's normalizer never covered:
- src/data/pkgs/*.json (C# API docs; kind:"text" prose nodes)
- src/data/ts-modules/*.json (TS API docs; description/returns/remarks)
- sample appHostCode (code comments; previously excluded)
#1397 only normalized sample title/description/readme[Raw] and the
integration package description, so regenerated API reference prose and
sample AppHost comments kept reintroducing the deprecated terms verbatim
from upstream XML/JSDoc docs.
This extends normalization to those paths, reusing the single source of
truth in aspire-terminology.ts (kept in sync with
.github/forbidden-words.json):
- aspire-terminology.ts: add normalizeAspireTerminologyInCode(), which
rewrites deprecated terms in code comments only, preserving strings,
char/template literals, and executable code so samples still compile.
- normalize-generated-api-data.ts: format-preserving raw-text pass over
the generated API JSON. Normalizes prose only (kind:"text" nodes and
description/returns/remarks), leaving code/cref/langword nodes and all
.NET-escaped bytes (CRLF, astral \u escapes) byte-for-byte identical.
- update-ts-api.ts: normalize ts-modules before the twoslash bundle is
derived, so aspire.d.ts hover tooltips are normalized too.
- update-integration-data.ps1: normalize pkgs after the C# API generator.
- update-samples.ts: normalize appHostCode comments.
The committed data is already clean (a plain grep over-counts the plural
"app hosts", which the boundary-anchored rule never matches), so this is
a scripts+tests change with no data churn. Adds unit tests for both new
normalizers.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d775be1b-bee3-432e-bbfc-7a4861f3bc05
* fix: preserve commands in code comments
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix: preserve nested interpolation strings
Replace the regex comment tokenizer with a stateful scanner so nested C# interpolation strings and raw strings remain byte-for-byte unchanged while adjacent comments are normalized.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: a9940fd9-999f-4e50-9192-96c023b14792
* fix: normalize comments inside interpolation expressions
Comments nested inside C# interpolation ({ }) and TypeScript template
${ } expressions previously bypassed terminology normalization: the
scanner advanced past them while skipping the surrounding literal.
Thread a comment-span accumulator through interpolation traversal so
those executable-code comments are normalized while nested string,
char, and raw literals stay byte-for-byte identical. Adds C# and TS
regression cases, including a comment paired with a preserved nested
string literal.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d775be1b-bee3-432e-bbfc-7a4861f3bc05
Copilot-Session: a9940fd9-999f-4e50-9192-96c023b14792
* chore: Update integration data and GitHub stats (8/4/26) (#1424)
* chore: Update integration data and GitHub stats (8/4/26)
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix: restore AppHost casing in generated API data
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
---------
Co-authored-by: aspire-repo-bot[bot] <aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
* Pin compromised Keyv ecosystem releases (#1425)
Add exact pnpm overrides for the 11 malicious releases identified by Snyk without changing the current dependency graph.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4a7187e8-18d4-4432-9c78-4ebb8c25d78e
* Add pr-review skill and .agents/skills README index (#1422)
Adds a code-quality pr-review skill (C#/TypeScript/Astro/HTML/CSS) focused on critical issues and test coverage, plus a README indexing all skills.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Redesign the Aspire landing page experience (#1420)
* Redesign the landing page experience
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
* Landing page UX polish: carousel autoplay, AI sparkle, caret + footer
- DashboardCarousel: replace interval autoplay with a rAF progress engine;
add a bottom-left play/pause button + progress bar (stage presentation),
manual nav drops into paused manual mode, Play resumes from the current
slide. Homepage carousel now autoplays (autoplay={true}).
- HomeAgentBadge: swap the star for the AI sparkle (material-symbols
auto-awesome) with glow/twinkle; enlarge popover text.
- AppHostBuilder: left-align caret on blank lines; move typing-animation
checkbox to the bottom-left under the code box.
- Footer: map disclosure animate open/close with scroll adjustment.
- Update homepage e2e tests for the new autoplay + manual-pause behavior.
NOTE: DashboardCarousel play/pause button + progress bar CSS is not yet
added (renders unstyled). Remaining follow-ups tracked separately.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Style dashboard carousel playback controls + freeze progress on pause
- Add CSS for the bottom-left play/pause button (matching the model-story
toggle, dark/purple stage palette) and the under-image progress bar,
gated to the stage presentation via [data-playback='on'].
- Raise the in-stage button above the active slide (z-index 120) so a real
pointer click hits the button instead of the image/zoom target.
- Freeze the progress fill at its current fraction while paused instead of
resetting to 0, so Play resumes visually from where it stopped.
- Add en i18n keys landing.dashboardCarousel.play/.pause (other locales
fall back to English via tt()).
Verified live: autoplay advances, progress fills, play/pause toggles and
swaps icons, manual nav drops into paused manual mode, Play resumes; no
console errors; controls hidden on the coverflow (docs) presentation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Polish mobile radar, footer bottom row, and slow carousel
- HomeEnvironment: on mobile, lift the bottom-left database resource clear
of the pause control and tuck the floating nodes closer to the radar's
extending lines (verified across Local/Test/Production at 390px and 360px).
- Footer: stack the bottom row (copyright / "Made with love" / SHA) into a
single left-aligned column at <=52rem so the items align cleanly on
mobile/tablet and the SHA no longer collides with the scroll-to-top button.
- DashboardCarousel: slow autoplay cadence from 5.5s to 7s per slide.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Emulate dashboard, realistic terminal, and lightbox nav
Polish the landing page "one application model" (glue-work) section and the
dashboard carousel:
- Replace the static dashboard screenshot in the glue-work section with an
animated, emulated resources table that mirrors the real Aspire dashboard:
rows come online staggered (Starting -> Running), URLs fade in, and a live
"N of 4 resources running" counter tracks progress. Snaps to the final
running state on manual tab selection or reduced motion.
- Rewrite the model-story terminal to faithful `aspire run` output: build and
start status lines plus the AppHost / Dashboard / Logs summary grid with a
login-token dashboard URL. Long lines now wrap on narrow viewports instead of
clipping.
- Add prev/next navigation to the dashboard carousel's zoom lightbox. Arrow
buttons (and Left/Right keys) flip through every view without unzooming; the
carousel rests on the last-viewed slide when the lightbox closes. Buttons are
theme-aware and respect reduced motion.
- Vary a repetitive AI badge label and drop the redundant environment tab
underline animation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Enlarge AppHost code panel font to match other model-story tabs
The AppHost code snippet rendered at a much smaller font than the
Topology and Dashboard panels, making it hard to read. Bump the code
font/line-height to match the dashboard panel (clamp(0.74rem, 1.15vw,
0.86rem)), trim the padding, and grow the model-story stage height
(clamp(24rem, 37vw, 28rem)) so the 17-line TypeScript variant still
fits without clipping. Also enlarge the mobile code font accordingly.
Verified across 384-1440px in both themes: code font now matches the
dashboard exactly with no vertical clipping; Topology and Dashboard
tabs still look good with the extra room.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Clean up redesigned landing page: remove dead components, localize, a11y
Final cleanup pass on the landing-page redesign:
- Delete 7 unused legacy homepage components (FreeAndOpenSourceAside +
quotes data, IntegrationGrid, LanguagesSupported, LocalVsProdEnvironments,
SimpleCard, TestimonialCarousel) and drop their unit/e2e/prop-contract tests.
- Render the redesigned <HomePage /> from every locale index.mdx and switch the
Starlight hero to isHomepage() so the new hero shows on all locale homepages.
- Add a localized `home` i18n namespace to en.json and translate it into all
14 locales (115 strings each), preserving {{placeholders}} and <strong> markup.
- Add a localizedHref() helper for locale-aware internal links.
- Accessibility: switch the model-story code block to Expressive Code for WCAG AA
contrast in both themes, add Escape-dismiss to the agent-badge tooltip
(WCAG 1.4.13), and keep decorative regions fully out of the tab order.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* Polish announcement banner styles
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Complete landing page redesign refinements
Finish the runtime story, responsive motion gating, dashboard media, accessible custom selects, localized shared controls, and regression coverage across the landing experience.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
* Fix homepage CI rendering
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
* Harden homepage E2E checks
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
* Relocate carousel playback control and glide slides
Move the stage playback button into the footer controls row so it sits bottom-left alongside the prev/next buttons, and remove the redundant visible slide description. Add a directional transform + opacity transition so views glide between slides instead of hard-cutting.
Update the homepage dashboard-tour e2e test to match: assert the playback button shares the controls row (left of prev/next), the slide description is gone, and the active slide animates.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Address landing-page review: fix CustomSelect scroll close, freeze dashboard on pause, localize carousel play/pause
- CustomSelect: ignore scroll events originating inside the fixed listbox so scrolling the menu (wheel/touch or keyboard scrollIntoView) no longer dismisses it, keeping below-the-fold locales reachable while preserving close-on-page-scroll/resize.
- HomePage: clearDashTimers() in pause() so the emulated dashboard stops populating while the runtime story is paused.
- i18n: add translated dashboardCarousel.play/.pause to all 14 non-English locales.
- e2e: add regression test that scrolls inside the language listbox and pages to the last option, asserting the menu stays open.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Fix homepage testing link
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
* Refine landing page feedback
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cf454734-c35f-4adc-b261-3036f0323c62
Copilot-Session: f9785116-08b1-4e47-89f2-a11dfdf75420
* docs: add trusted repository CLI guidance (#1426)
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 937c958a-8043-40ee-8c89-4395dc892a57
* [docs] Expand 13.2 Connection property suffix breaking change with migration guidance (#944)
* [docs] Expand 13.2 Connection property suffix breaking change with migration guidance
The 13.2 `Connection property suffix` breaking change was only a single
sentence on the live changelog, which left readers without enough detail
to confidently migrate apps upgrading directly from 13.0 to 13.2.
Expand the section with:
- A short explanation of the rename pattern (properties whose value is the
name of a sub-entity now end with `Name`).
- A canonical table covering all 15 affected resource types grouped by
rename (`Database` -> `DatabaseName`, `Model` -> `ModelName`,
`ConsumerGroup` -> `ConsumerGroupName`).
- Before/after environment-variable examples showing the impact on
consuming apps that read connection properties through `WithReference`.
- Before/after C# examples for `GetConnectionProperty` callers in the
AppHost.
- A migration checklist for searching solutions, including a clear note
that C# apps consuming the standard Aspire client integrations do not
need source changes.
- Cross-link to the partial 13.1 changelog entry, with the 13.2 entry as
the canonical reference.
Anchor `#connection-property-suffix` is preserved so external links
keep working.
Fixes #413
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: clarify connection property environment names
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
* Document Aspire 13.3 `WithEnvironment` unification and compatibility shim mappings (#1162)
* Initial plan
* docs: document 13.3 WithEnvironment unification and shim mappings
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* [auto-sec] frontend deps: postcss>=8.5.23, brace-expansion>=5.0.9, mermaid 11.16.1 (#1431)
* [auto-sec] frontend: bump postcss>=8.5.23 & brace-expansion>=5.0.9
Raise pnpm override floors and refresh the lockfile to clear two open
Dependabot alerts in src/frontend:
- brace-expansion 5.0.8 -> 5.0.9 (HIGH, GHSA-rgw5-rvv9-x895): DoS via
unbounded intermediate arrays (bypasses CVE-2026-14257 mitigation).
- postcss 8.5.20 -> 8.5.25 (MEDIUM, GHSA-fxqj-rqcc-2cmp): arbitrary
.map read via attacker-controlled sourceMappingURL when from unset.
Lockfile changes folded from Dependabot #1423 (postcss) plus the
isolated brace-expansion entry from #1421; no other package versions
changed. Override floors in pnpm-workspace.yaml match the lock.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* chore(deps): bump mermaid from 11.16.0 to 11.16.1 in /src/frontend
Bumps [mermaid](https://github.com/mermaid-js/mermaid) from 11.16.0 to 11.16.1.
- [Release notes](https://github.com/mermaid-js/mermaid/releases)
- [Commits](https://github.com/mermaid-js/mermaid/compare/mermaid@11.16.0...mermaid@11.16.1)
---
updated-dependencies:
- dependency-name: mermaid
dependency-version: 11.16.1
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
* fix(deps): pin transitive nanoid to aged 3.3.16 to satisfy pnpm minimum-release-age policy
postcss>=8.5.23 pulled nanoid@3.3.18 (published <24h ago), tripping
ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION in frontend-build. nanoid has no
open advisory; pin to 3.3.16 (matches main, satisfies postcss ^3.3.11).
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: David Pine <dapine@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Update AppHost eventing docs to use typed helper APIs (#1168)
* Initial plan
* Update AppHost eventing helper docs
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
* Finalize eventing helper doc updates
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
* Address eventing docs review feedback
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Add declarative auto-expiry to docs announcement banner (#1448)
* Add declarative auto-expiry to docs announcement banner
Version-update banners never got removed: if a reader saw one but never
clicked dismiss, it lingered on every visit. Add two optional frontmatter
fields nested under `banner`:
- `expiresOn`: absolute YYYY-MM-DD sunset that hides the banner for everyone
(and skips rendering at build time once past).
- `autoDismissAfterDays`: per-reader window that auto-hides N days after the
reader first sees it, tracked in localStorage.
Either condition (or manual dismiss) hides the banner; both compose. Decision
logic lives in a pure, unit-tested helper (src/utils/banner-expiry.ts) mirrored
inline in Banner.astro, which reuses the existing show/collapse paths so the
sidebar banner-height tracking keeps working. Rolls out autoDismissAfterDays: 14
to the current Aspire 13.4 banners across all locales.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Address PR review: top-level expiry fields, shared helper, hardened parse
- Move banner expiry metadata to top-level frontmatter keys
(bannerExpiresOn / bannerAutoDismissAfterDays). Nested banner.* keys were
stripped by Starlight's built-in banner schema and reached the component as
null; top-level coerced dates survive intact (like publishDate).
- Banner.astro client script now imports resolveBannerVisibility/parseFirstSeen
from banner-expiry.ts (bundled module + data-* config) instead of mirroring
the logic inline, so shipped behavior can't diverge from the unit tests.
- Add parseFirstSeen(): reject non-integer/zero/negative/future stored
first-seen values (Number.parseInt salvaged junk like "12abc"/"-5" into a
1970-era time that hid the banner permanently). Invalid values now self-heal
as a fresh first view.
- Add rendered-Banner.astro regression test proving expiry metadata reaches the
component; extend helper unit tests for parseFirstSeen + self-heal.
- Update docs content (18 pages) and astro.instructions.md.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Fix banner-render test: Astro emits empty attrs as bare attributes
Astro serializes an empty-string attribute value (data-expires-on set to '')
as a bare boolean attribute, not data-expires-on="". Assert the bare form
instead. Production is unaffected: the client reads an empty dataset value as
null (no expiry configured).
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* [auto-sec] src/frontend: js-yaml + nanoid HIGH alerts (GHSA-5p4m-2wfm-xmqj, GHSA-2v37-7h3g-55p8) (#1455)
* [auto-sec] Bump js-yaml 4.3.0->5.2.2 and nanoid 3.3.16->3.3.17 in src/frontend
Transitive security remediation via pnpm overrides:
- js-yaml >=4.0.0 <4.3.1 -> 5.2.2 (GHSA-5p4m-2wfm-xmqj, HIGH)
advisory-patched 4.3.1 is not published to the registry; 5.2.2 is the
lowest fetchable version clearing the range (same argparse dep, no new
transitives).
- nanoid <3.3.17 -> 3.3.17 (GHSA-2v37-7h3g-55p8, HIGH)
pnpm-lock.yaml updated with registry-verified integrity (npm pack).
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Use js-yaml 4.3.1 (advisory patch) instead of 5.2.2 to avoid ESM default-export break
js-yaml 5.x is pure ESM and removed the CommonJS default export, which breaks the
Astro build (The requested module 'js-yaml' does not provide an export named 'default').
4.3.1 is the actual GHSA-5p4m-2wfm-xmqj patched release on the 4.x line (same argparse
^2.0.1 dependency, same API), so it clears the alert without breaking the build.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: David Pine <dapine@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Document environment variable naming conventions for resources (#498)
* Initial plan
* Add environment variables naming convention documentation
Create new fundamentals/environment-variables.mdx page documenting:
- Connection string naming (ConnectionStrings__{resource-name})
- Endpoint URL naming (RESOURCE_NAME_SCHEME)
- Service discovery variables (services__name__scheme__index)
- Resource property naming (RESOURCE_NAME_PROPERTY)
- Name encoding rules (hyphens to underscores, uppercasing)
- Examples for C#, Python, and JavaScript
- Custom environment variables with WithEnvironment
Update sidebar, Python, JavaScript, and service discovery pages with
cross-references to the new page.
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
* Fix JavaScript connection string example to use bracket notation with hyphen
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
* Address review feedback: rewrite intro, use txt code blocks, add LearnMore, remove unused imports
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
* Fix LearnMore component formatting to match existing patterns
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
* Replace stacked LearnMore components with standard See also section
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
* Add npx astro telemetry disable to CI workflows and devcontainer
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
* docs: fix inaccurate Customize Azure resources page (#946)
Rework the Customize Azure resources guide to use accurate, current APIs:
- Replace the strongly-typed PrivateEndpoint example with the higher-level
AddPrivateEndpoint builder (C# and TypeScript).
- Use AddBicepTemplate with a valid Bicep output and WithParameter/GetOutput.
- Add a "Pass parameters and read outputs" section covering the full
WithParameter value union, backed by twoslash type updates.
- Correct the "Inspect generated Bicep" steps to use `aspire publish`.
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Harden API data generation and fix C# deep links (#1461)
* Harden generated API data pipeline
Make package and TypeScript generation fail closed, add semantic validation and transactional publication, preserve generated metadata fidelity, and restore stable C# API member deep links.
Co-authored-by: Copilot App <223556219+Copilot@…
* [docs] Document timestamp search qualifier for telemetry filtering (#1181)
* docs: document timestamp search qualifier for telemetry filtering
Documents the new 'timestamp' search qualifier added in
microsoft/aspire#17816. Users can now filter traces and structured
logs by date/time using ISO 8601 strings with comparison operators
(>, >=, <, <=) in the dashboard filter bar.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Move timestamp qualifier docs to shared CLI references
Co-authored-by: JamesNK <303201+JamesNK@users.noreply.github.com>
* Fix severity casing in timestamp search example
Co-authored-by: JamesNK <303201+JamesNK@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: James Newton-King <james@newtonking.com>
* Apply suggestion from @JamesNK
* Apply suggestion from @JamesNK
* docs: clarify date-only timestamp search values
Co-authored-by: JamesNK <303201+JamesNK@users.noreply.github.com>
* Apply suggestion from @JamesNK
* Apply suggestion from @JamesNK
* Update timestamp example dates to use 2026
---------
Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: JamesNK <303201+JamesNK@users.noreply.github.com>
Co-authored-by: James Newton-King <james@newtonking.com>
* [docs] Fix persistent container endpoint proxy default docs (#1227)
* Fix persistent container endpoint proxy default docs
Persistent containers use proxied endpoints by default (same as session
containers), while persistent executables and projects default to proxyless
endpoints. Also document that proxyless container endpoints with only a
targetPort immediately allocate the targetPort as the host port.
Corrects docs that previously stated all persistent resources default to
proxyless endpoints.
Documents changes from microsoft/aspire#17960.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Negstad <50252651+danegsta@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Add Aspire 13.5 release scaffold
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* [docs] Update Foundry Local docs to reflect CLI-based lifecycle (aspire#17889) (#1210)
* docs: update Foundry Local section to reflect CLI-based lifecycle
The Foundry Local integration now uses the installed 'foundry' CLI
(foundry service start/stop/list and foundry model download/load)
instead of the FoundryLocalManager in-proc APIs. Aspire manages the
entire service lifecycle automatically.
Update docs to:
- Clarify users do not need to pre-start Foundry Local
- State that the 'foundry' CLI must be on PATH
- Describe the automatic start/stop lifecycle management
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Sébastien Ros <sebastienros@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* docs: document coding agent telemetry detection (aspire#18065)
Add a new row to the CLI telemetry data points table for Aspire CLI 13.5
documenting the new coding agent detection telemetry.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* [docs] Add WithTerminal() interactive terminal sessions page (#1244)
* docs: add WithTerminal() interactive terminal sessions page
Documents the WithTerminal() experimental API introduced in Aspire 13.5:
- Basic usage (C# and TypeScript)
- Custom terminal dimensions
- Multi-replica support
- Dashboard terminal view
- aspire terminal attach / aspire terminal ps CLI commands
Closes microsoft/aspire#17866 (docs obligation)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: address PR review feedback for withterminal docs
- remove redundant sidebar translations block
- clean up unused import and wording updates
- fix CLI reference link target
- remove duplicate build/run call in dimensions sample
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Mitch Denny <midenn@orangecake.local>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: update 13.5 banners and release notes
- Update all banners (18 files across English and 16 locale variants) from 13.4 to 13.5 with engaging messaging
- Replace 13.5 placeholder release notes with comprehensive content from the official changelog
- Include detailed release highlights covering AppHost, CLI, Dashboard, and Extensions improvements
- Document breaking changes (ServiceProvider renamed, PublishAsConnectionString obsolete, aspire ps --resources flag removed)
- Maintain consistent tone and voice with prior What's new articles
Changes cover:
- Interactive terminal sessions with WithTerminal()
- Polyglot IInteractionService across TypeScript, Python, Go, Java, Rust
- User-defined resource command arguments
- TypeScript AppHost stability fixes and optimizations
- Custom health checks for TypeScript AppHosts
- CLI enhancements (npm package, embedded skills bundle)
- Dashboard telemetry improvements (timestamp filtering, better error messages)
- VS Code extension enhancements (Dashboard side panel, Bun debugging, resource commands)
- Foundry Local integration CLI updates
- And more bug fixes and improvements
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Document OS information check in aspire doctor command
Add documentation for the new operating system check introduced in
microsoft/aspire#18252. The check appears in the Environment section
of `aspire doctor` output and includes structured metadata in JSON
format.
Changes:
- Update Environment checks description to mention OS reporting
- Add OS check to sample table output
- Add operating-system entry to JSON output example
- Document the osType/displayName/version/description metadata fields
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix broken WithTerminal link in 13.5 whats-new (#1281)
Point to /app-host/withterminal/ which is the correct slug for the
interactive terminal sessions page, fixing the starlight-links-validator
CI failure.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add dashboard troubleshooting page (#1255)
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* [docs] Add deprecation notices to GitHub Models integration docs (#1279)
* Add deprecation notices to GitHub Models integration docs
The GitHub Models service is no longer available to new customers.
Aspire.Hosting.GitHub.Models is sunset in 13.5 — all public APIs are
marked [Obsolete] and the package is hidden from aspire add. Add a
:::caution callout to all three GitHub Models documentation pages to
surface this to existing users.
Documents changes from microsoft/aspire#18405.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: add GitHub Models sunset to 13.5 breaking changes
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: recommend Azure AI Foundry integration as GitHub Models replacement
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: David Pine <david.pine@microsoft.com>
---------
Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Sebastien Ros <sebastienros@gmail.com>
Co-authored-by: David Pine <david.pine@microsoft.com>
* Fix forbidden phrases flagged by CI (#1301)
Replace 'app host' with 'AppHost' in dashboard troubleshooting docs and reword the VS Code extension branding note to avoid the literal '.NET Aspire' phrase.
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: mention Cohere and MistralAI model families in Foundry host docs (#1297)
Documents the available FoundryModel provider families including
Cohere and MistralAI, which gained new model descriptors
(CohereCommandAPlus052026 and MistralMedium35) in Aspire 13.5.
Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* [docs] Clarify C# file-based AppHost launch profile location (#1176)
* docs: clarify C# file-based AppHost launch profile location
The empty C# AppHost template (created with `aspire new`) stores launch
profiles in `apphost.run.json`, not in `aspire.config.json`. The
`aspire.config.json` for this template only contains the `appHost.path`
reference pointing at `apphost.cs`.
Update the AppHost configuration page to distinguish between:
- Project-based AppHosts: profiles in `Properties/launchSettings.json`
- File-based AppHosts: profiles in `apphost.run.json`, with
`aspire.config.json` holding only the entry-point reference
This aligns the documentation with the fix in microsoft/aspire#17781,
which corrected a regression where the file-based template was
incorrectly emitting a duplicate `profiles` block in `aspire.config.json`.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* [docs] Document icon fallback behavior for resource commands (#1277)
* docs: document icon fallback behavior for resource commands
When a resource command specifies an unrecognized iconName, the
dashboard now renders a QuestionCircle (question mark circle) icon
as a fallback instead of displaying the raw display-name text.
For highlighted commands (IsHighlighted = true) with no iconName,
the dashboard uses a Flash icon by default so the inline action
button stays compact and never overflows the resource row.
Documents changes from microsoft/aspire#18389.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Apply suggestion from @JamesNK
---------
Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: James Newton-King <james@newtonking.com>
* [docs] Add Nix installation path for Aspire CLI (#1286)
* docs: Add Nix installation path for Aspire CLI
Documents the first-party Nix flake for the Aspire CLI introduced in
microsoft/aspire#18410:
- Adds a 'Nix' tab to the Install CLI package manager section, with
nix run, nix profile add, and flake.nix usage examples
- Updates the 'aspire update --self' section to describe how Nix installs
print profile/flake update guidance instead of a binary download
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: address Nix CLI review comments
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: fix Nix flake CLI example
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Fowler <davidfowl@gmail.com>
* Address aspire doctor doc feedback
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* [docs] Document proxyless endpoint port pre-allocation (Aspire 13.5) (#1199)
* docs: document proxyless container endpoint on-demand allocation
Documents the on-demand port allocation behavior for dynamic proxyless
container endpoints introduced in Aspire 13.5 (microsoft/aspire#17851).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: update proxyless endpoint port allocation
Co-authored-by: danegsta <50252651+danegsta@users.noreply.github.com>
* docs: align proxyless port allocation docs
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* docs: clarify proxyless container port wording
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* docs: remove redundant proxyless port text
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: danegsta <50252651+danegsta@users.noreply.github.com>
Co-authored-by: David Negstad <David.Negstad@microsoft.com>
* Add Aspire version placeholders to release docs (#1314)
* Add Aspire version placeholders to release docs
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Remove generated Nix icon safelist entry
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Document release version placeholder checks
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Document current version placeholder review guidance
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Use version placeholder in seed database packages
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Fix OOM in aspire-version-placeholders build hook (#1318)
* Fix OOM in aspire-version-placeholders build hook
The astro:build:done hook re-walked the entire dist tree with a single
recursive Promise.all, holding the contents of every .html/.md/.txt file
(tens of thousands across all locales, including the large llms-full.txt
assets) in memory at once. On the full production build that exhausted the
default ~4 GB Node heap and crashed with 'JavaScript heap out of memory'.
That broad walk was almost entirely redundant. The remarkAspireVersionPlaceholders
remark plugin is already wired into markdown.remarkPlugins, so placeholders
are replaced before render: .html pages are correct, and llms*.txt is sourced
from rendered HTML via render(entry). The reference/**/*.md endpoints come from
API/sample data, not docs content. The only generated artifact that still
contains raw placeholders is the per-page .md copies emitted by
starlight-page-actions, which viteStaticCopy's raw src/content/docs/** through
a regex-only transform that bypasses the remark pipeline.
Scope the post-build pass to .md files only and stream them through a bounded
worker pool (default concurrency 16). Peak memory is now proportional to the
concurrency limit, and the bulk of dist (.html plus the large .txt assets) is
no longer re-read. Replacement semantics are unchanged.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Address PR review: normalize concurrency and clarify test comment
- Guard against a non-finite/0/negative concurrency value: normalize to a
finite positive integer (falling back to the default) before computing the
worker count, so a stray NaN can't collapse the pool to an empty array and
silently skip every file. Adds a regression test passing NaN.
- Reword the scoping test comment so it no longer implies the seeded
.html/.txt/.mdx fixtures were already replaced; clarify the assertion is that
this pass intentionally leaves every non-.md extension untouched.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Add Kubernetes persistent volume documentation (#1328)
* Add Kubernetes persistent volume documentation
Document the first-class KubernetesPersistentVolumeResource feature
(microsoft/aspire PR #16929): a dedicated Persistent volumes on
Kubernetes page under deployment/kubernetes, a concise pointer in the
Kubernetes integration reference, sidebar wiring, and cross-links from
related Kubernetes and data-persistence pages.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Lead persistent volumes page with AddPersistentVolume API
Refocus the opening on the AddPersistentVolume fluent API with a minimal
example up front, rather than the KubernetesPersistentVolumeResource class
name, matching how developers think in terms of AppHost APIs.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Fix TypeScript persistent-volume examples and parameter method names
- Correct withDataVolume TS calls to pass an options object
(withDataVolume({ name: 'pg-data' })) instead of a name string; the
TypeScript binding takes WithDataVolumeOptions, not a string.
- Clarify the config-method table: in TypeScript the parameter-accepting
variants are separate methods (withPvStorageClassParam,
withPvCapacityParam, withVolumeAnnotationParam), not overloads of the
string methods.
Verified against the shipped Aspire 13.5.0-preview.1 package by compiling
and publishing both examples with the dev CLI.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Mitch Denny <midenn@orangecake.local>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Mitch Denny <midenn@Mac.localdomain>
* Add WithTerminal docs and aspire terminal CLI reference (#1329)
* Add WithTerminal docs and aspire terminal CLI reference
Document the experimental WithTerminal() AppHost API for exposing
interactive terminal sessions on resources, plus the aspire terminal,
aspire terminal attach, and aspire terminal ps CLI commands. Wires the
new pages into the docs and reference sidebars and repoints the 13.5
what's-new link to the new slug.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Frame no-auto-debugger as a temporary NOTE callout
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Give C# and TypeScript equal billing in with-terminal docs
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Consolidate WithTerminal docs onto with-terminal.mdx
Remove the duplicate withterminal.mdx (from #1244) in favor of the
kebab-case with-terminal.mdx, matching the app-host directory naming
convention. Fold in the dashboard section and the TypeScript config
tracking issue reference.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Address PR review: self-contained snippets and ASPIRETERMINAL001 guidance
Add the #pragma warning disable ASPIRETERMINAL001 suppression to the C#
examples, make the Experimental aside actionable, and make the configure
and replicas snippets self-contained (full builder bootstrap + run) for
both C# and TypeScript.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Mitch Denny <midenn@Mac.localdomain>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Document AI agent skill-usage telemetry (#1229)
* Document AI agent skill usage telemetry in CLI telemetry reference
Extend the Microsoft-collected CLI telemetry page to cover the agent telemetry
hooks installed by 'aspire agent init': the three event types
(skill_invocation, tool_invocation, reference_file_read), the exact
low-cardinality fields recorded, the privacy guarantees (only Aspire-owned
skill/tool names and skill-relative reference paths; never absolute paths, repo
or user names, file contents, or tool arguments), and the
ASPIRE_CLI_AGENT_TELEMETRY_OPTOUT / --no-telemetry-hooks opt-out paths.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Simplify CLI telemetry docs to a single opt-out
Remove the AI-only opt-out section (ASPIRE_CLI_AGENT_TELEMETRY_OPTOUT) and the
'aspire agent init --no-telemetry-hooks' note. The single
ASPIRE_CLI_TELEMETRY_OPTOUT switch disables all CLI telemetry including AI
agent skill usage. Soften the over-claimed opt-out re-check wording.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Alistair Matthews <alistairwebdojo@live.com>
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Alistair Matthews <alistairwebdojo@live.com>
* Document --skills and --skill-locations flags for init and new commands (#1348)
Add documentation for the --skills and --skill-locations options on
aspire init and aspire new commands. These flags were added in
microsoft/aspire#18191 and microsoft/aspire#18192 to support
non-interactive mode for controlling which agent skills are installed
during initialization.
* Document PromptProgressAsync API and add TypeScript examples to interaction service (#1347)
- Add PromptProgressAsync to the interaction service docs with C# and TypeScript examples
- Add CommandProgressOptions section to custom resource commands page
- Integrate TypeScript tabs throughout interaction service documentation
- Update method table and context notes to include PromptProgressAsync
Documents changes from microsoft/aspire#18493
* [docs] CLI: mention 'Stopping Aspire...' feedback message on Ctrl+C (#1353)
* docs: mention 'Stopping Aspire...' feedback message on Ctrl+C
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: David Pine <IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* docs: note graceful backchannel stream cancellation during aspire run shutdown (#1356)
Co-authored-by: David Pine <IEvangelist@users.noreply.github.com>
* docs: document command return values for custom resource commands (#1161)
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
Address review feedback: add TypeScript Markdown example, fix heading style, imp
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
* [docs] Update Bun integration docs for first-party Aspire.Hosting.JavaScript support (#1354)
* docs: update Bun integration page for first-party Aspire.Hosting.JavaScript support
* Apply suggestion from @IEvangelist
* Update bun-apps.mdx
---------
Co-authored-by: David Pine <IEvangelist@users.noreply.github.com>
* Address PR review feedback for release 13.5 docs
- search-filter: fix 'stored with UTC' -> 'stored in UTC'
- configuration: move AppHost type into code-block titles, drop redundant labels
- with-terminal: reword title/seoTitle to 'using WithTerminal', scope experimental Aside to C#, move C#/TypeScript notes inside their TabItems, split dashboard sentence
- troubleshooting: clarify firewall/security software wording
- persistent-volumes: move experimental Aside into C# TabItem, add prerequisites intro, split StatefulSet sentence
- compute/kubernetes: clarify durable storage steps
- terminal command docs: 'using WithTerminal' wording and reworded descriptions
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d03541af-fa62-4d7c-a158-4ece169249af
* [docs] Document automatic HTTPS certificate generation for non-.NET AppHosts (#1355)
* docs: document automatic HTTPS certificate generation for non-.NET AppHosts
Documents the new behavior introduced in microsoft/aspire#17454:
- When aspire run starts a non-.NET AppHost (e.g., TypeScript) in
non-interactive mode and no HTTPS dev certificate exists, the CLI
now automatically generates one.
- The ASPIRE_CLI_GENERATE_HTTPS_CERTIFICATE environment variable can
be set to 'false' to opt out of automatic certificate generation.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Update src/frontend/src/content/docs/app-host/certificate-configuration.mdx
---------
Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Document Go polyglot options flattening breaking change (#1360)
* Dcument Go polyglot options flattening breaking change
* Update documentation on DTOs and code generator behavior
Clarified the behavior of TypeScript and Go code generators regarding optional parameters and DTOs.
* [docs] Obsolete PublishAsConnectionString migration guidance (#1237)
* docs: document PublishAsConnectionString obsolete, update examples to use AddConnectionString
- Update 'Parameter example' in external-parameters.mdx to use
execution-context-based pattern (IsRunMode) instead of the now-obsolete
PublishAsConnectionString() API
- Update the Japanese localized version of external-parameters.mdx to match
- Mark PublishAsConnectionString as obsolete in the azure/overview.mdx API
table and add a migration caution callout showing the AddConnectionString
pattern with execution context
Relates to microsoft/aspire#18044
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>
* ci: retrigger CI run [skip-notes]
* docs: fix PublishAsConnectionString migration samples
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: e7ae5d3e-2af9-48ae-8920-cb7c103217a3
---------
Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
* Document Aspire VS Code AppHost polling (#1382)
Add VS Code extension documentation for showing running AppHosts before workspace discovery completes, the new appHosts polling setting, and the deprecated global setting name.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Document aspire stop --force resource cleanup (#1387)
* Document aspire stop force cleanup
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 45afd624-6e7c-4ee8-84c2-6dbda91702f5
* Apply suggestions from code review
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: David Pine <david.pine@microsoft.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* [docs] Update aspire run/stop graceful shutdown documentation (#1291)
* docs: update aspire run/stop graceful shutdown docs for #17814
- Expand aspire-run.mdx 'Stopping the AppHost' section with the full
three-step shutdown ladder (cooperative cancellation → graceful wait →
automatic force-kill) and clarify the second Ctrl+C behavior.
- Add a Windows note about isolated console session for tsx/npm AppHosts.
- Correct aspire-stop.mdx description: signal targets the AppHost process
directly, not an intermediary CLI process.
Source: microsoft/aspire#17814
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: remove resource/AppHost shutdown conflation from aspire run and stop docs
Co-authored-by: danegsta <50252651+danegsta@users.noreply.github.com>
* Update aspire-run.mdx
---------
Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: danegsta <50252651+danegsta@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>
* [docs] Update 13.4 what's new: aspire.config.json template profiles regression fix (#1192)
* docs: clarify aspire.config.json template regression fix for C# empty AppHost
The C# empty AppHost template (aspire new aspire-empty) in Aspire 13.4
was generating a duplicate profiles block in aspire.config.json that
was also present in apphost.run.json. This regression is fixed in
microsoft/aspire#17820: launch profiles now live exclusively in
apphost.run.json and aspire.config.json is minimal (AppHost path only).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* [docs] Document aspire stop socket cleanup for detached AppHosts (#1283)
* docs: document aspire stop socket cleanup for detached AppHosts
After aspire stop confirms the AppHost process has terminated, it now
removes the backchannel socket file. This prevents stale-socket errors
when running subsequent commands (aspire add, aspire describe, etc.)
after the stop/detach workflow.
Documents the fix from microsoft/aspire#18296 (fixes #17587).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* docs: clarify aspire stop resource cleanup
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 98420587-acfe-4dcc-863d-84663af05421
---------
Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Copilot-Session: 98420587-acfe-4dcc-863d-84663af05421
* [docs] Document WithExplicitStart() callback deferral behavior (#1194)
* docs: document WithExplicitStart() callback deferral behavior
Add a new 'Defer resource start with explicit start' section to
resource-lifetimes.mdx explaining how WithExplicitStart() interacts
with execution configuration callbacks (WithEnvironment, WithArgs):
- Session-scoped explicit-start resources defer DCP registration until
manual start, so callbacks run only when the user starts the resource
from the dashboard.
- Persistent explicit-start resources are registered immediately (to
detect existing instances), but use a Spec.Start patch on manual
start so callbacks are not re-evaluated a second time.
Documents microsoft/aspire#17825.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* docs: add persistence diagnostic guidance
Clarify the explicit-start examples and document ASPIREPERSISTENCE001 suppression options.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ca76c036-8248-4cdc-a1b2-0d4a1bef31f3
---------
Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Copilot-Session: ca76c036-8248-4cdc-a1b2-0d4a1bef31f3
* Merge main into release/13.5 (#1427)
* Revise interaction service API documentation (#1408)
Updated section headings and clarified usage instructions for the interaction service API.
* [auto-sec] Consolidate aspire.dev frontend dependency security remediations (#1392)
* build(deps): bump the npm-all group across 1 directory with 32 updates
Bumps the npm-all group with 32 updates in the /src/frontend directory:
| Package | From | To |
| --- | --- | --- |
| [@astrojs/markdown-remark](https://github.com/withastro/astro/tree/HEAD/packages/markdown/remark) | `7.2.0` | `7.2.1` |
| [@astrojs/mdx](https://github.com/withastro/astro/tree/HEAD/packages/integrations/mdx) | `7.0.0` | `7.0.3` |
| [@astrojs/rss](https://github.com/withastro/astro/tree/HEAD/packages/astro-rss) | `4.0.18` | `4.0.19` |
| [@astrojs/starlight](https://github.com/withastro/starlight/tree/HEAD/packages/starlight) | `0.41.1` | `0.41.3` |
| [@catppuccin/starlight](https://github.com/catppuccin/starlight/tree/HEAD/packages/catppuccin-starlight) | `2.0.1` | `2.1.0` |
| [@expressive-code/plugin-collapsible-sections](https://github.com/expressive-code/expressive-code/tree/HEAD/packages/@expressive-code/plugin-collapsible-sections) | `0.44.0` | `0.44.1` |
| [@expressive-code/plugin-line-numbers](https://github.com/expressive-code/expressive-code/tree/HEAD/packages/@expressive-code/plugin-line-numbers) | `0.44.0` | `0.44.1` |
| [@fontsource-variable/fira-code](https://github.com/fontsource/font-files/tree/HEAD/fonts/variable/fira-code) | `5.2.7` | `5.3.0` |
| [@fontsource-variable/outfit](https://github.com/fontsource/font-files/tree/HEAD/fonts/variable/outfit) | `5.2.8` | `5.3.0` |
| [@fontsource-variable/rubik](https://github.com/fontsource/font-files/tree/HEAD/fonts/variable/rubik) | `5.2.8` | `5.3.0` |
| [@fontsource/poppins](https://github.com/fontsource/font-files/tree/HEAD/fonts/google/poppins) | `5.2.7` | `5.3.0` |
| [asciinema-player](https://github.com/asciinema/asciinema-player) | `3.16.0` | `3.17.0` |
| [astro](https://github.com/withastro/astro/tree/HEAD/packages/astro) | `7.0.3` | `7.1.3` |
| [astro-expressive-code](https://github.com/expressive-code/expressive-code/tree/HEAD/packages/astro-expressive-code) | `0.44.0` | `0.44.1` |
| [satori](https://github.com/vercel/satori) | `0.26.0` | `0.28.1` |
| [satteri](https://github.com/bruits/satteri) | `0.9.4` | `0.9.5` |
| [sharp](https://github.com/lovell/sharp) | `0.34.5` | `0.35.3` |
| [starlight-github-alerts](https://github.com/HiDeoo/starlight-github-alerts/tree/HEAD/packages/starlight-github-alerts) | `0.3.0` | `0.4.0` |
| [starlight-links-validator](https://github.com/HiDeoo/starlight-links-validator/tree/HEAD/packages/starlight-links-validator) | `0.25.1` | `0.25.2` |
| [starlight-llms-txt](https://github.com/delucis/starlight-llms-txt/tree/HEAD/packages/starlight-llms-txt) | `0.10.0` | `0.11.0` |
| [starlight-page-actions](https://github.com/dlcastillop/starlight-page-actions/tree/HEAD/packages/starlight-page-actions) | `0.6.2` | `0.7.0` |
| [@iconify-json/material-icon-theme](https://github.com/iconify/icon-sets) | `1.2.68` | `1.2.69` |
| [@types/hast](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/hast) | `3.0.4` | `3.0.5` |
| [@unocss/astro](https://github.com/unocss/unocss/tree/HEAD/packages-integrations/astro) | `66.6.8` | `66.7.5` |
| [astro-embed](https://github.com/delucis/astro-embed/tree/HEAD/packages/astro-embed) | `0.13.0` | `0.13.1` |
| [eslint](https://github.com/eslint/eslint) | `10.6.0` | `10.7.0` |
| [prettier](https://github.com/prettier/prettier) | `3.9.1` | `3.9.5` |
| [tsx](https://github.com/privatenumber/tsx) | `4.22.4` | `4.23.1` |
| [typescript](https://github.com/microsoft/TypeScript) | `6.0.3` | `7.0.2` |
| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.62.0` | `8.65.0` |
| [unocss](https://github.com/unocss/unocss/tree/HEAD/packages-presets/unocss) | `66.6.8` | `66.7.5` |
| [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.9` | `4.1.10` |
Updates `@astrojs/markdown-remark` from 7.2.0 to 7.2.1
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/markdown/remark/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/@astrojs/markdown-remark@7.2.1/packages/markdown/remark)
Updates `@astrojs/mdx` from 7.0.0 to 7.0.3
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/integrations/mdx/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/@astrojs/mdx@7.0.3/packages/integrations/mdx)
Updates `@astrojs/rss` from 4.0.18 to 4.0.19
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/astro-rss/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/@astrojs/rss@4.0.19/packages/astro-rss)
Updates `@astrojs/starlight` from 0.41.1 to 0.41.3
- [Release notes](https://github.com/withastro/starlight/releases)
- [Changelog](https://github.com/withastro/starlight/blob/main/packages/starlight/CHANGELOG.md)
- [Commits](https://github.com/withastro/starlight/commits/@astrojs/starlight@0.41.3/packages/starlight)
Updates `@catppuccin/starlight` from 2.0.1 to 2.1.0
- [Release notes](https://github.com/catppuccin/starlight/releases)
- [Changelog](https://github.com/catppuccin/starlight/blob/main/packages/catppuccin-starlight/CHANGELOG.md)
- [Commits](https://github.com/catppuccin/starlight/commits/v2.1.0/packages/catppuccin-starlight)
Updates `@expressive-code/plugin-collapsible-sections` from 0.44.0 to 0.44.1
- [Release notes](https://github.com/expressive-code/expressive-code/releases)
- [Changelog](https://github.com/expressive-code/expressive-code/blob/main/packages/@expressive-code/plugin-collapsible-sections/CHANGELOG.md)
- [Commits](https://github.com/expressive-code/expressive-code/commits/@expressive-code/plugin-collapsible-sections@0.44.1/packages/@expressive-code/plugin-collapsible-sections)
Updates `@expressive-code/plugin-line-numbers` from 0.44.0 to 0.44.1
- [Release notes](https://github.com/expressive-code/expressive-code/releases)
- [Changelog](https://github.com/expressive-code/expressive-code/blob/main/packages/@expressive-code/plugin-line-numbers/CHANGELOG.md)
- [Commits](https://github.com/expressive-code/expressive-code/commits/@expressive-code/plugin-line-numbers@0.44.1/packages/@expressive-code/plugin-line-numbers)
Updates `@fontsource-variable/fira-code` from 5.2.7 to 5.3.0
- [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/variable/fira-code)
Updates `@fontsource-variable/outfit` from 5.2.8 to 5.3.0
- [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/variable/outfit)
Updates `@fontsource-variable/rubik` from 5.2.8 to 5.3.0
- [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/variable/rubik)
Updates `@fontsource/poppins` from 5.2.7 to 5.3.0
- [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/google/poppins)
Updates `asciinema-player` from 3.16.0 to 3.17.0
- [Release notes](https://github.com/asciinema/asciinema-player/releases)
- [Commits](https://github.com/asciinema/asciinema-player/compare/v3.16.0...v3.17.0)
Updates `astro` from 7.0.3 to 7.1.3
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/astro/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/astro@7.1.3/packages/astro)
Updates `astro-expressive-code` from 0.44.0 to 0.44.1
- [Release notes](https://github.com/expressive-code/expressive-code/releases)
- [Changelog](https://github.com/expressive-code/expressive-code/blob/main/packages/astro-expressive-code/CHANGELOG.md)
- [Commits](https://github.com/expressive-code/expressive-code/commits/astro-expressive-code@0.44.1/packages/astro-expressive-code)
Updates `satori` from 0.26.0 to 0.28.1
- [Release notes](https://github.com/vercel/satori/releases)
- [Commits](https://github.com/vercel/satori/compare/0.26.0...0.28.1)
Updates `satteri` from 0.9.4 to 0.9.5
- [Release notes](https://github.com/bruits/satteri/releases)
- [Commits](https://github.com/bruits/satteri/compare/satteri-v0.9.4...satteri-v0.9.5)
Updates `sharp` from 0.34.5 to 0.35.3
- [Release notes](https://github.com/lovell/sharp/releases)
- [Commits](https://github.com/lovell/sharp/compare/v0.34.5...v0.35.3)
Updates `starlight-github-alerts` from 0.3.0 to 0.4.0
- [Release notes](https://github.com/HiDeoo/starlight-github-alerts/releases)
- [Changelog](https://github.com/HiDeoo/starlight-github-alerts/blob/main/packages/starlight-github-alerts/CHANGELOG.md)
- [Commits](https://github.com/HiDeoo/starlight-github-alerts/commits/starlight-github-alerts@0.4.0/packages/starlight-github-alerts)
Updates `starlight-links-validator` from 0.25.1 to 0.25.2
- [Release notes](https://github.com/HiDeoo/starlight-links-validator/releases)
- [Changelog](https://github.com/HiDeoo/starlight-links-validator/blob/main/packages/starlight-links-validator/CHANGELOG.md)
- [Commits](https://github.com/HiDeoo/starlight-links-validator/commits/starlight-links-validator@0.25.2/packages/starlight-links-validator)
Updates `starlight-llms-txt` from 0.10.0 to 0.11.0
- [Release notes](https://github.com/delucis/starlight-llms-txt/releases)
- [Changelog](https://github.com/delucis/starlight-llms-txt/blob/main/packages/starlight-llms-txt/CHANGELOG.md)
- [Commits](https://github.com/delucis/starlight-llms-txt/commits/starlight-llms-txt@0.11.0/packages/starlight-llms-txt)
Updates `starlight-page-actions` from 0.6.2 to 0.7.0
- [Release notes](https://github.com/dlcastillop/starlight-page-actions/releases)
- [Commits](https://github.com/dlcastillop/starlight-page-actions/commits/v0.7.0/packages/starlight-page-actions)
Updates `@iconify-json/material-icon-theme` from 1.2.68 to 1.2.69
- [Commits](https://github.com/iconify/icon-sets/commits)
Updates `@types/hast` from 3.0.4 to 3.0.5
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/hast)
Updates `@unocss/astro` from 66.6.8 to 66.7.5
- [Release notes](https://github.com/unocss/unocss/releases)
- [Commits](https://github.com/unocss/unocss/commits/v66.7.5/packages-integrations/astro)
Updates `astro-embed` from 0.13.0 to 0.13.1
- [Release notes](https://github.com/delucis/astro-embed/releases)
- [Changelog](https://github.com/delucis/astro-embed/blob/main/packages/astro-embed/CHANGELOG.md)
- [Commits](https://github.com/delucis/astro-embed/commits/astro-embed@0.13.1/packages/astro-embed)
Updates `eslint` from 10.6.0 to 10.7.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v10.6.0...v10.7.0)
Updates `prettier` from 3.9.1 to 3.9.5
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.9.1...3.9.5)
Updates `tsx` from 4.22.4 to 4.23.1
- [Release notes](https://github.com/privatenumber/tsx/releases)
- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs)
- [Commits](https://github.com/privatenumber/tsx/compare/v4.22.4...v4.23.1)
Updates `typescript` from 6.0.3 to 7.0.2
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Commits](https://github.com/microsoft/TypeScript/commits)
Updates `typescript-eslint` from 8.62.0 to 8.65.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.65.0/packages/typescript-eslint)
Updates `unocss` from 66.6.8 to 66.7.5
- [Release notes](https://github.com/unocss/unocss/releases)
- [Commits](https://github.com/unocss/unocss/commits/v66.7.5/packages-presets/unocss)
Updates `vitest` from 4.1.9 to 4.1.10
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.10/packages/vitest)
---
updated-dependencies:
- dependency-name: "@astrojs/markdown-remark"
dependency-version: 7.2.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@astrojs/mdx"
dependency-version: 7.0.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@astrojs/rss"
dependency-version: 4.0.19
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@astrojs/starlight"
dependency-version: 0.41.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@catppuccin/starlight"
dependency-version: 2.1.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: "@expressive-code/plugin-collapsible-sections"
dependency-version: 0.44.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@expressive-code/plugin-line-numbers"
dependency-version: 0.44.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@fontsource-variable/fira-code"
dependency-version: 5.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: "@fontsource-variable/outfit"
dependency-version: 5.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: "@fontsource-variable/rubik"
dependency-version: 5.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: "@fontsource/poppins"
dependency-version: 5.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: asciinema-player
dependency-version: 3.17.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: astro
dependency-version: 7.1.3
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: astro-expressive-code
dependency-version: 0.44.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: satori
dependency-version: 0.28.1
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: satteri
dependency-version: 0.9.5
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: sharp
dependency-version: 0.35.3
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: starlight-github-alerts
dependency-version: 0.4.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: starlight-links-validator
dependency-version: 0.25.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: starlight-llms-txt
dependency-version: 0.11.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: starlight-page-actions
dependency-version: 0.7.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: "@iconify-json/material-icon-theme"
dependency-version: 1.2.69
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@types/hast"
dependency-version: 3.0.5
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: "@unocss/astro"
dependency-version: 66.7.5
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: astro-embed
dependency-version: 0.13.1
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: eslint
dependency-version: 10.7.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: prettier
dependency-version: 3.9.5
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-all
- dependency-name: tsx
dependency-version: 4.23.1
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: typescript
dependency-version: 7.0.2
dependency-type: direct:development
update-type: version-update:semver-major
dependency-group: npm-all
- dependency-name: typescript-eslint
dependency-version: 8.65.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: unocss
dependency-version: 66.7.5
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: npm-all
- dependency-name: vitest
dependency-version: 4.1.10
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-all
...
Signed-off-by: dependabot[bot] <support@github.com>
* fix: revert typescript 7.x to 6.x to restore twoslash/expressive-code compatibility
TypeScript 7.0 ('Corsa') is a native Go rewrite that removes the programmatic
JS API entirely. twoslash accesses ts.ModuleKind.Cjs which is undefined in TS7,
causing ec.config.mjs -> expressive-code-twoslash -> twoslash to crash at build
time with: 'The requested module expressive-code-twoslash does not provide an
export named default' and related CJS/ESM resolution failures.
Fix:
- Revert typescript ^7.0.2 -> ^6.0.3 in package.json
- Update pnpm-lock.yaml: swap integrity hash, version specifier, remove the
@typescript/typescript-* platform-native binaries (TS7-only), and fix all
peer-dep snapshot keys to reference typescript@6.0.3
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* fix(frontend): skip canonicalizing redirects while prerendering
Astro 7.1 runs middleware while prerendering the .md/.json API and schema endpoints, so the trailing-slash redirects were baked into dist/ as redirect stubs that shadowed the real prerendered markdown/JSON and broke the api-markdown-routes and schema-routes E2E checks. Guard the redirects behind context.isPrerendered so they only apply to on-demand (SSR/dev) requests.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 572347d9-75da-4b54-9a3d-f9589ef4e39b
* fix(security): bump dompurify to 3.4.12 (GHSA-c2j3-45gr-mqc4) and tighten brace-expansion override
- dompurify@<3.4.12: '>=3.4.12' — GHSA-c2j3-45gr-mqc4 (low): bypass in
CUSTOM_ELEMENT_HANDLING, fixed in 3.4.12
- brace-expansion@<5.0.7: '>=5.0.7' — GHSA-3jxr-9vmj-r5cp (high): DoS via
exponential-time expansion, 5.0.7 is the patched version
- postcss@8.5.20 already satisfies GHSA-r28c-9q8g-f849 (<=8.5.17) via existing
override; no change needed
- GHSA-mh99-v99m-4gvg (brace-expansion <=5.0.7): no upstream fix available,
documented as unfixable in canonical PR body
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 572347d9-75da-4b54-9a3d-f9589ef4e39b
* Redact connection-string passwords in generated package docs (#1410)
* Redact connection-string passwords in generated package docs
PackageJsonGenerator copies package XML doc comments verbatim into the frontend
data JSON. Several packages document example connection strings containing a
literal placeholder password (e.g. SqlServer's GetConnectionString returns
"Server=host,port;User ID=sa;Password=password;TrustServerCertificate=true").
These are not real secrets, but the literal Password=<value> token trips 1ES /
CredScan push protection (SEC101/037 SqlLegacyCredentials, VS403654) when the
public repo is mirrored to the internal AzDO remote, blocking the deploy and
deploy-vnext-release branch syncs.
Add DocumentationSanitizer.RedactConnectionStringPasswords, applied to text,
inline-code and code-block doc nodes, which rewrites connection-string
Password=/Pwd= literals to <password>. C# default parameter values
(password = null) are left untouched because the match requires no whitespace
around '='. Regenerate the four affected data files accordingly.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4125af76-bbc2-4532-adee-98add8fdb6b7
* Address PR review: markdown-safe placeholder, cover example nodes, nullable API
- Use "{password}" instead of "<password>". Angle brackets are dropped as raw
HTML when doc nodes render to Markdown (csharp-api-markdown.ts concatenates
text without escaping), which would hide the value in connection-string
examples. "{password}" is also the existing placeholder convention already
used across the generated data (e.g. mysql://{user}:{password}@{host}).
- Sanitize the <example> extraction paths in ExtractDocExample (plain-text
code, description text nodes, and example code) so connection-string
passwords there cannot re-trigger CredScan in future data refreshes.
- Make DocumentationSanitizer.RedactConnectionStringPasswords nullable-aware
(string? in/out) to match its behavior and drop the null-forgiving operator
in tests. Exclude '{'/'}' from the value class to keep redaction idempotent.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4125af76-bbc2-4532-adee-98add8fdb6b7
* Use "Placeholder" redaction token per 1ES recommendation
The connection-string password sanitizer redacted values to `{password}`.
Switch the token to a bare `Placeholder`, which is the value 1ES
recommends for scrubbed credential examples in generated content.
Update the sanitizer unit-test expectations to match, and update the four
affected package data files. The pre-existing `{password}` doc template
tokens in those files (author-written placeholders, not sanitizer output)
are intentionally left unchanged.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 8c2fe46b-fcb4-48bf-8c62-5f9d3d7a470e
* fix(PackageJsonGenerator): tighten redaction regex and close doc gaps
Two hardening fixes to the connection-string password redaction added in
this PR.
F1 - the redaction regex over-consumed trailing delimiters. The value
character class only excluded ';', quotes, comma, whitespace, backslash,
and brace/angle markers. A value immediately followed by a markdown or
URI delimiter ('`', ')', ']', '&', '|') swallowed that delimiter into the
match, so an inline-code fence lost its closing backtick and a link label
lost its closing paren, corrupting the rendered doc. The class now also
stops at those delimiters. A trailing sentence period is preserved by
trimming it off the captured value in the replacement callback rather
than excluding '.' from the class, which would truncate legitimate dotted
values.
F4 - two documentation paths reached the generated JSON unsanitized. Enum
member descriptions (Description = ExtractSummary(f)) and <see href="...">
link labels were emitted verbatim, so a connection string in an enum
member's <summary> or a link label bypassed redaction. Both now run
through the sanitizer. This changes no committed data (no such values
exist in the current package set); the fix is preventive.
Also refreshes the sanitizer comment and XML docs to describe the
Placeholder token and the widened exclusion set.
Tests: added markdown/URI delimiter and trailing-period cases to the
sanitizer unit tests, and an end-to-end test asserting an enum member
whose summary contains a connection string is redacted in the generated
JSON. All 31 tests pass.
chore: sanitize placeholder connection strings in generated pkg JSON
**BYPASS_SECRET_SCANNING** — false-positive SEC101/037 placeholder in
generated pkgs/*.json, unblocking the internal mirror for historical
commit 6058fcf. Forward fix regenerates the affected files.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 8c2fe46b-fcb4-48bf-8c62-5f9d3d7a470e
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Ankit Jain <radical@gmail.com>
Copilot-Session: 4125af76-bbc2-4532-adee-98add8fdb6b7
Copilot-Session: 8c2fe46b-fcb4-48bf-8c62-5f9d3d7a470e
* fix: Normalize terminology in sample updates (#1397)
* fix: Normalize terminology in sample updates
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: febf329c-97d8-41aa-bd42-43273bc57fe7
* test: Preserve spacing in terminology updates
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: febf329c-97d8-41aa-bd42-43273bc57fe7
* fix: Handle Markdown wrappers and word boundaries in terminology normalizer
Address review feedback on #1397:
- Require .NET to sit at a non-word boundary so tokens like ASP.NET Aspire and Microsoft.NET Aspire are left intact instead of corrupted into ASPAspire / MicrosoftAspire.
- Consume Markdown emphasis/link openers (**, [) between the article and the term so 'a **.NET Aspire**' and 'a [.NET Aspire](url)' correct the article to 'an'.
- Add regression tests for bold/link article correction and word-boundary cases.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
* refactor: Make terminology normalizer data-driven
Replace the hardcoded replace-chain with a small TerminologyRule table so a new deprecated term is a single entry (pattern/replacement/optional article). Article correction, Markdown-wrapper tolerance, and word-boundary guarding are now applied generically per rule.
Also add the 'dotnet aspire' -> 'Aspire' rule that was present in .github/forbidden-words.json but missing from the normalizer, and cover it with tests.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
* fix: Bound terminology terms by alphanumeric edges and cover Markdown wrappers
Replaces the per-rule mix of \\b\/\(?<!\w)\ boundaries with uniform alphanumeric edge guards applied centrally, so a rule core can never fuse into a longer token (e.g. \.NET AspireX\) and authors cannot forget a boundary. Underscore and inline-code wrappers now normalize correctly (\_.NET Aspire_\, \\.NET Aspire\\), and the generated-data invariant now covers the \dotnet aspire\ spelling.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
* fix: Skip code regions and leave C# untouched in terminology normalizer
The normalizer ran a plain pass over raw Markdown and appHostCode, which could rewrite runnable sample commands (e.g. 'dotnet aspire run' -> 'Aspire run') inside fenced/inline code and corrupt compilable C#. Now fenced blocks and inline code are copied through verbatim, appHostCode is left untouched (it renders as C#, not prose), and the entry point is null-safe. Adds code-skip, mixed prose+code, idempotence, and null tests, and replaces the deprecated-term scan with an idempotence-based invariant.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: febf329c-97d8-41aa-bd42-43273bc57fe7
Copilot-Session: 020561bf-2df6-4f8b-a730-1c72d0f6cc5e
* Switch cookie consent runtime to WCP API (#1403)
* Switch cookie consent runtime to WCP API
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
* Theme WCP consent UI, add scroll-lock, prune obsolete cookie tests
Fully restyle the WCP cookie banner and preferences dialog to match the
Aspire theme via the team-owned wcp-consent.css (our colors, spacing,
WCAG AA contrast, and the brand icon). The dialog now re-themes live when
the user toggles light/dark, and the underlying page is scroll-locked
while the preferences dialog is open.
Remove the last remnants of the old vanilla-cookieconsent integration:
- delete config/cookie.config.ts and the old cookieconsent-custom.css
- drop @jop-software/astro-cookieconsent + vanilla-cookieconsent deps
- remove the 2 obsolete behavioral cookie e2e tests and their dead
helpers; the WCP banner is geo-gated/CDN-loaded and can't be exercised
in CI, so compliance is verified by the WCP scan instead
- rework the integrations-gallery banner suppression to hide the WCP
banner element instead of pre-seeding the removed cc_cookie shape
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4182d84d-5dc1-4c74-be09-15995a872350
* Hide "Manage cookies" buttons where consent isn't required
WCP reports whether consent is required for the visitor's region. Where it
is not (e.g. the US) there is nothing to manage, so hide the four "Manage
cookies" buttons instead of leaving inert controls on the page.
The WCP runtime sets a data-consent-not-required flag on <html> once it
knows the region; a CSS rule hides .cookie-consent-btn when the flag is
present. The flag is primed from localStorage before paint so returning
visitors in non-required regions don't see the buttons flash in. Defaulting
to visible keeps this failsafe: if WCP is slow or blocked we never hide a
control a required region needs. display:none also makes the site tour
auto-skip its cookie-preferences step, so no tour changes are needed.
Co-authored-by: Copilot App <223556219+Copi…
Summary
wcp-consent.jsAPIsiteConsent.manageConsent()Why this fixes the scan issue
WCP validation expects WCP consent behavior (
WcpConsent+MSCCconsent model). The current implementation was using a different consent stack (cc_cookie), which can render a banner for users but still fail WCP banner validation heuristics.Validation
pnpm -C src/frontend lint