From 755302de1ff7e50617693c0b840f18005e014a34 Mon Sep 17 00:00:00 2001 From: "adi.david" Date: Fri, 28 Aug 2026 14:40:35 +0000 Subject: [PATCH 1/7] docs: document the Ask AI chat widget's bottom prompt trigger Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .../docs/pages/ask-fern/ask-ai-chat.mdx | 19 +++++++++++++++---- .../docs/pages/changelog/2026-08-28.mdx | 9 +++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 fern/products/docs/pages/changelog/2026-08-28.mdx diff --git a/fern/products/docs/pages/ask-fern/ask-ai-chat.mdx b/fern/products/docs/pages/ask-fern/ask-ai-chat.mdx index ccd9517b72..4e0daea0a9 100644 --- a/fern/products/docs/pages/ask-fern/ask-ai-chat.mdx +++ b/fern/products/docs/pages/ask-fern/ask-ai-chat.mdx @@ -1,6 +1,6 @@ --- title: Ask AI chat panel -description: Embed Fern's Ask AI chat panel in any React application, with a floating, inline, or custom trigger. +description: Embed Fern's Ask AI chat panel in any React application, with a floating launcher, a bottom prompt, an inline button, or a custom trigger. --- `AskAiChat` renders a sidebar panel with AI chat (no keyword search). It's one of the two components in the [`@fern-api/search-widget` package](/learn/docs/ai-features/ask-fern/search-widget/overview), which covers the prerequisites and the Content Security Policy the widget needs. @@ -51,7 +51,7 @@ description: Embed Fern's Ask AI chat panel in any React application, with a flo ``` - `theme` controls light and dark mode, and `accentColor` sets the accent used for the sparkles, the send button, and links in answers, in both modes. `trigger` chooses between the corner launcher (`floating`), an unpainted button you place and style yourself (`inline`), and no button at all (`none`). + `theme` controls light and dark mode, and `accentColor` sets the accent used for the sparkles, the send button, and links in answers, in both modes. `trigger` chooses between the corner launcher (`floating`), a prompt input centered at the bottom of the viewport (`prompt`), an unpainted button you place and style yourself (`inline`), and no button at all (`none`). ```tsx @@ -94,6 +94,7 @@ description: Embed Fern's Ask AI chat panel in any React application, with a flo * `AskAiChat.Root` holds the state and takes the configuration props: `domain`, `lang`, `searchLocale`, `placement`, `theme`, `accentColor`, `open`, `defaultOpen`, and `onOpenChange`. Its `children` is the subtree to wrap, the menu and the panel. * `AskAiChat.Trigger` is a real ` From 11d559f1772460748cff4fb9a511574209c8be9e Mon Sep 17 00:00:00 2001 From: "devin.logan" Date: Fri, 28 Aug 2026 18:28:03 +0000 Subject: [PATCH 2/7] docs: trim bottom prompt section and drop changelog entry Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .vale/styles/Microsoft/BiasFree.yml | 14 +++++++++++ .vale/styles/Microsoft/ExclamationPoints.yml | 7 ++++++ .vale/styles/Microsoft/Jargon.yml | 11 +++++++++ .vale/styles/Microsoft/Militaristic.yml | 24 +++++++++++++++++++ .vale/styles/Microsoft/QuestionMarks.yml | 7 ++++++ .vale/styles/Microsoft/UIVerbs.yml | 9 +++++++ .vale/styles/Microsoft/Uppercase.yml | 11 +++++++++ .../docs/pages/ask-fern/ask-ai-chat.mdx | 4 ++-- .../docs/pages/changelog/2026-08-28.mdx | 9 ------- 9 files changed, 85 insertions(+), 11 deletions(-) create mode 100644 .vale/styles/Microsoft/BiasFree.yml create mode 100644 .vale/styles/Microsoft/ExclamationPoints.yml create mode 100644 .vale/styles/Microsoft/Jargon.yml create mode 100644 .vale/styles/Microsoft/Militaristic.yml create mode 100644 .vale/styles/Microsoft/QuestionMarks.yml create mode 100644 .vale/styles/Microsoft/UIVerbs.yml create mode 100644 .vale/styles/Microsoft/Uppercase.yml delete mode 100644 fern/products/docs/pages/changelog/2026-08-28.mdx diff --git a/.vale/styles/Microsoft/BiasFree.yml b/.vale/styles/Microsoft/BiasFree.yml new file mode 100644 index 0000000000..261e39b3d5 --- /dev/null +++ b/.vale/styles/Microsoft/BiasFree.yml @@ -0,0 +1,14 @@ +extends: substitution +message: "Consider '%s' instead of '%s'." +link: https://learn.microsoft.com/en-us/style-guide/bias-free-communication +level: warning +ignorecase: true +action: + name: replace +# Culturally sensitive terms; see GenderBias.yml for gendered terms. +swap: + '(?:demilitarized zone|DMZ)': perimeter network + 'master/slave': master/subordinate + 'sanity check': quick check + 'spirit animal': role model + hangs: stops responding diff --git a/.vale/styles/Microsoft/ExclamationPoints.yml b/.vale/styles/Microsoft/ExclamationPoints.yml new file mode 100644 index 0000000000..774fedf825 --- /dev/null +++ b/.vale/styles/Microsoft/ExclamationPoints.yml @@ -0,0 +1,7 @@ +extends: existence +message: "Use exclamation points sparingly." +link: https://learn.microsoft.com/en-us/style-guide/punctuation/exclamation-points +level: suggestion +nonword: true +tokens: + - '\w!(?:\s|$)' diff --git a/.vale/styles/Microsoft/Jargon.yml b/.vale/styles/Microsoft/Jargon.yml new file mode 100644 index 0000000000..999d43667a --- /dev/null +++ b/.vale/styles/Microsoft/Jargon.yml @@ -0,0 +1,11 @@ +extends: substitution +message: "Consider using '%s' instead of the jargon '%s'." +link: https://learn.microsoft.com/en-us/style-guide/word-choice/avoid-jargon +level: suggestion +ignorecase: true +action: + name: replace +swap: + bucketize: group + glyph: symbol + leverage: take advantage of diff --git a/.vale/styles/Microsoft/Militaristic.yml b/.vale/styles/Microsoft/Militaristic.yml new file mode 100644 index 0000000000..45c0f027db --- /dev/null +++ b/.vale/styles/Microsoft/Militaristic.yml @@ -0,0 +1,24 @@ +extends: substitution +message: "Consider '%s' instead of '%s'." +link: https://learn.microsoft.com/en-us/style-guide/militaristic-language +level: suggestion +ignorecase: true +action: + name: replace +# The guide scopes its table to cybersecurity writing, so the generic verbs it +# also lists (combat, fight, guard, ward) are omitted here: without that context +# they'd fire on ordinary prose. +swap: + '(?:cyber ?)?kill chain': cyberattack chain + 'defense-in-depth approach': multilayered approach + 'external attack surface': external exposure + 'first line of defense': protection + 'frontline analysts': security analysts + 'locked down': secured + adversaries: threat actors + adversary: threat actor + attackers: cyberattackers + attacker: cyberattacker + blast radius: impact + fortifications: protection + frontlines: defense diff --git a/.vale/styles/Microsoft/QuestionMarks.yml b/.vale/styles/Microsoft/QuestionMarks.yml new file mode 100644 index 0000000000..2034033c05 --- /dev/null +++ b/.vale/styles/Microsoft/QuestionMarks.yml @@ -0,0 +1,7 @@ +extends: existence +message: "Use questions sparingly." +link: https://learn.microsoft.com/en-us/style-guide/punctuation/question-marks +level: suggestion +nonword: true +tokens: + - '\w\?(?:\s|$)' diff --git a/.vale/styles/Microsoft/UIVerbs.yml b/.vale/styles/Microsoft/UIVerbs.yml new file mode 100644 index 0000000000..ed6ef85a1c --- /dev/null +++ b/.vale/styles/Microsoft/UIVerbs.yml @@ -0,0 +1,9 @@ +extends: existence +message: "Use 'select' instead of the input-specific verb '%s'." +link: https://learn.microsoft.com/en-us/style-guide/procedures-instructions/describing-interactions-with-ui +level: warning +ignorecase: true +# 'right-click' and 'double-click' are explicitly allowed by the guide. +tokens: + - '(? ``` -Interacting with the page outside the chat closes it, and selecting the prompt again reopens the same conversation. Below 768px the chat is the same bottom drawer the corner launcher opens. `placement` doesn't apply in this mode, and the chat is wider than the corner card: override it with `--fern-ask-ai-prompt-card-width`. +`placement` doesn't apply in this mode. Set the chat width with `--fern-ask-ai-prompt-card-width`. ## Properties diff --git a/fern/products/docs/pages/changelog/2026-08-28.mdx b/fern/products/docs/pages/changelog/2026-08-28.mdx deleted file mode 100644 index 8871c5c774..0000000000 --- a/fern/products/docs/pages/changelog/2026-08-28.mdx +++ /dev/null @@ -1,9 +0,0 @@ -## Bottom prompt for the Ask AI chat widget - -ai, components - -The `AskAiChat` widget now accepts `trigger="prompt"`, which replaces the corner launcher with a single-line prompt input pinned to the bottom center of the viewport. Visitors type their question into the page, and the chat opens directly above the input with that question already in flight. - -Interacting with the page outside the chat closes it, selecting the prompt reopens the same conversation, and below 768px the chat is the same bottom drawer the corner launcher opens. - - From 235f72d38c8b430e40f84b07e42596c715d2fc3e Mon Sep 17 00:00:00 2001 From: "devin.logan" Date: Fri, 28 Aug 2026 18:28:09 +0000 Subject: [PATCH 3/7] chore: untrack vale style artifacts Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .vale/styles/Microsoft/AMPM.yml | 9 - .vale/styles/Microsoft/Accessibility.yml | 30 -- .vale/styles/Microsoft/Acronyms.yml | 64 ----- .vale/styles/Microsoft/Adverbs.yml | 272 ------------------ .vale/styles/Microsoft/Auto.yml | 11 - .vale/styles/Microsoft/Avoid.yml | 14 - .vale/styles/Microsoft/BiasFree.yml | 14 - .vale/styles/Microsoft/Contractions.yml | 50 ---- .vale/styles/Microsoft/Dashes.yml | 13 - .vale/styles/Microsoft/DateFormat.yml | 8 - .vale/styles/Microsoft/DateNumbers.yml | 40 --- .vale/styles/Microsoft/DateOrder.yml | 8 - .vale/styles/Microsoft/Ellipses.yml | 9 - .vale/styles/Microsoft/ExclamationPoints.yml | 7 - .vale/styles/Microsoft/FirstPerson.yml | 16 -- .vale/styles/Microsoft/Foreign.yml | 13 - .vale/styles/Microsoft/Gender.yml | 8 - .vale/styles/Microsoft/GenderBias.yml | 42 --- .vale/styles/Microsoft/GeneralURL.yml | 11 - .vale/styles/Microsoft/HeadingAcronyms.yml | 7 - .vale/styles/Microsoft/HeadingColons.yml | 8 - .vale/styles/Microsoft/HeadingPunctuation.yml | 13 - .vale/styles/Microsoft/Headings.yml | 28 -- .vale/styles/Microsoft/Hyphens.yml | 14 - .vale/styles/Microsoft/Jargon.yml | 11 - .vale/styles/Microsoft/Militaristic.yml | 24 -- .vale/styles/Microsoft/Negative.yml | 13 - .vale/styles/Microsoft/Ordinal.yml | 13 - .vale/styles/Microsoft/OxfordComma.yml | 8 - .vale/styles/Microsoft/Passive.yml | 183 ------------ .vale/styles/Microsoft/Percentages.yml | 7 - .vale/styles/Microsoft/Plurals.yml | 7 - .vale/styles/Microsoft/QuestionMarks.yml | 7 - .vale/styles/Microsoft/Quotes.yml | 7 - .vale/styles/Microsoft/RangeTime.yml | 13 - .vale/styles/Microsoft/Semicolon.yml | 8 - .vale/styles/Microsoft/SentenceLength.yml | 7 - .vale/styles/Microsoft/Spacing.yml | 8 - .vale/styles/Microsoft/Suspended.yml | 7 - .vale/styles/Microsoft/Terms.yml | 42 --- .vale/styles/Microsoft/UIVerbs.yml | 9 - .vale/styles/Microsoft/URLFormat.yml | 9 - .vale/styles/Microsoft/Units.yml | 16 -- .vale/styles/Microsoft/Uppercase.yml | 11 - .vale/styles/Microsoft/Vocab.yml | 25 -- .vale/styles/Microsoft/We.yml | 11 - .vale/styles/Microsoft/Wordiness.yml | 127 -------- .vale/styles/Microsoft/meta.json | 4 - 48 files changed, 1286 deletions(-) delete mode 100644 .vale/styles/Microsoft/AMPM.yml delete mode 100644 .vale/styles/Microsoft/Accessibility.yml delete mode 100644 .vale/styles/Microsoft/Acronyms.yml delete mode 100644 .vale/styles/Microsoft/Adverbs.yml delete mode 100644 .vale/styles/Microsoft/Auto.yml delete mode 100644 .vale/styles/Microsoft/Avoid.yml delete mode 100644 .vale/styles/Microsoft/BiasFree.yml delete mode 100644 .vale/styles/Microsoft/Contractions.yml delete mode 100644 .vale/styles/Microsoft/Dashes.yml delete mode 100644 .vale/styles/Microsoft/DateFormat.yml delete mode 100644 .vale/styles/Microsoft/DateNumbers.yml delete mode 100644 .vale/styles/Microsoft/DateOrder.yml delete mode 100644 .vale/styles/Microsoft/Ellipses.yml delete mode 100644 .vale/styles/Microsoft/ExclamationPoints.yml delete mode 100644 .vale/styles/Microsoft/FirstPerson.yml delete mode 100644 .vale/styles/Microsoft/Foreign.yml delete mode 100644 .vale/styles/Microsoft/Gender.yml delete mode 100644 .vale/styles/Microsoft/GenderBias.yml delete mode 100644 .vale/styles/Microsoft/GeneralURL.yml delete mode 100644 .vale/styles/Microsoft/HeadingAcronyms.yml delete mode 100644 .vale/styles/Microsoft/HeadingColons.yml delete mode 100644 .vale/styles/Microsoft/HeadingPunctuation.yml delete mode 100644 .vale/styles/Microsoft/Headings.yml delete mode 100644 .vale/styles/Microsoft/Hyphens.yml delete mode 100644 .vale/styles/Microsoft/Jargon.yml delete mode 100644 .vale/styles/Microsoft/Militaristic.yml delete mode 100644 .vale/styles/Microsoft/Negative.yml delete mode 100644 .vale/styles/Microsoft/Ordinal.yml delete mode 100644 .vale/styles/Microsoft/OxfordComma.yml delete mode 100644 .vale/styles/Microsoft/Passive.yml delete mode 100644 .vale/styles/Microsoft/Percentages.yml delete mode 100644 .vale/styles/Microsoft/Plurals.yml delete mode 100644 .vale/styles/Microsoft/QuestionMarks.yml delete mode 100644 .vale/styles/Microsoft/Quotes.yml delete mode 100644 .vale/styles/Microsoft/RangeTime.yml delete mode 100644 .vale/styles/Microsoft/Semicolon.yml delete mode 100644 .vale/styles/Microsoft/SentenceLength.yml delete mode 100644 .vale/styles/Microsoft/Spacing.yml delete mode 100644 .vale/styles/Microsoft/Suspended.yml delete mode 100644 .vale/styles/Microsoft/Terms.yml delete mode 100644 .vale/styles/Microsoft/UIVerbs.yml delete mode 100644 .vale/styles/Microsoft/URLFormat.yml delete mode 100644 .vale/styles/Microsoft/Units.yml delete mode 100644 .vale/styles/Microsoft/Uppercase.yml delete mode 100644 .vale/styles/Microsoft/Vocab.yml delete mode 100644 .vale/styles/Microsoft/We.yml delete mode 100644 .vale/styles/Microsoft/Wordiness.yml delete mode 100644 .vale/styles/Microsoft/meta.json diff --git a/.vale/styles/Microsoft/AMPM.yml b/.vale/styles/Microsoft/AMPM.yml deleted file mode 100644 index 8b9fed162a..0000000000 --- a/.vale/styles/Microsoft/AMPM.yml +++ /dev/null @@ -1,9 +0,0 @@ -extends: existence -message: Use 'AM' or 'PM' (preceded by a space). -link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/date-time-terms -level: error -nonword: true -tokens: - - '\d{1,2}[AP]M' - - '\d{1,2} ?[ap]m' - - '\d{1,2} ?[aApP]\.[mM]\.' diff --git a/.vale/styles/Microsoft/Accessibility.yml b/.vale/styles/Microsoft/Accessibility.yml deleted file mode 100644 index f5f4829392..0000000000 --- a/.vale/styles/Microsoft/Accessibility.yml +++ /dev/null @@ -1,30 +0,0 @@ -extends: existence -message: "Don't use language (such as '%s') that defines people by their disability." -link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/accessibility-terms -level: suggestion -ignorecase: true -tokens: - - a victim of - - able-bodied - - an epileptic - - birth defect - - crippled - - differently abled - - disabled - - dumb - - handicapped - - handicaps - - healthy person - - hearing-impaired - - lame - - maimed - - mentally handicapped - - missing a limb - - mute - - non-verbal - - normal person - - sight-impaired - - slow learner - - stricken with - - suffers from - - vision-impaired diff --git a/.vale/styles/Microsoft/Acronyms.yml b/.vale/styles/Microsoft/Acronyms.yml deleted file mode 100644 index 308ff7c0ed..0000000000 --- a/.vale/styles/Microsoft/Acronyms.yml +++ /dev/null @@ -1,64 +0,0 @@ -extends: conditional -message: "'%s' has no definition." -link: https://docs.microsoft.com/en-us/style-guide/acronyms -level: suggestion -ignorecase: false -# Ensures that the existence of 'first' implies the existence of 'second'. -first: '\b([A-Z]{3,5})\b' -second: '(?:\b[A-Z][a-z]+ )+\(([A-Z]{3,5})\)' -# ... with the exception of these: -exceptions: - - API - - ASP - - CLI - - CPU - - CSS - - CSV - - DEBUG - - DOM - - DPI - - FAQ - - GCC - - GDB - - GET - - GPU - - GTK - - GUI - - HTML - - HTTP - - HTTPS - - IDE - - JAR - - JSON - - JSX - - LESS - - LLDB - - NET - - NOTE - - NVDA - - OSS - - PATH - - PDF - - PHP - - POST - - RAM - - REPL - - RSA - - SCM - - SCSS - - SDK - - SQL - - SSH - - SSL - - SVG - - TBD - - TCP - - TODO - - URI - - URL - - USB - - UTF - - XML - - XSS - - YAML - - ZIP diff --git a/.vale/styles/Microsoft/Adverbs.yml b/.vale/styles/Microsoft/Adverbs.yml deleted file mode 100644 index 5619f99d8c..0000000000 --- a/.vale/styles/Microsoft/Adverbs.yml +++ /dev/null @@ -1,272 +0,0 @@ -extends: existence -message: "Remove '%s' if it's not important to the meaning of the statement." -link: https://docs.microsoft.com/en-us/style-guide/word-choice/use-simple-words-concise-sentences -ignorecase: true -level: warning -action: - name: remove -tokens: - - abnormally - - absentmindedly - - accidentally - - adventurously - - anxiously - - arrogantly - - awkwardly - - bashfully - - beautifully - - bitterly - - bleakly - - blindly - - blissfully - - boastfully - - boldly - - bravely - - briefly - - brightly - - briskly - - broadly - - busily - - calmly - - carefully - - carelessly - - cautiously - - cheerfully - - cleverly - - closely - - coaxingly - - colorfully - - continually - - coolly - - courageously - - crossly - - cruelly - - curiously - - daintily - - dearly - - deceivingly - - deeply - - defiantly - - deliberately - - delightfully - - diligently - - dimly - - doubtfully - - dreamily - - easily - - effectively - - elegantly - - energetically - - enormously - - enthusiastically - - excitedly - - extremely - - fairly - - faithfully - - famously - - ferociously - - fervently - - fiercely - - fondly - - foolishly - - fortunately - - frankly - - frantically - - freely - - frenetically - - frightfully - - furiously - - generally - - generously - - gently - - gladly - - gleefully - - gracefully - - gratefully - - greatly - - greedily - - happily - - hastily - - healthily - - heavily - - helplessly - - honestly - - hopelessly - - hungrily - - innocently - - inquisitively - - intensely - - intently - - interestingly - - inwardly - - irritably - - jaggedly - - jealously - - jovially - - joyfully - - joyously - - jubilantly - - judgmentally - - justly - - keenly - - kiddingly - - kindheartedly - - knavishly - - knowingly - - knowledgeably - - lazily - - lightly - - limply - - lively - - loftily - - longingly - - loosely - - loudly - - lovingly - - loyally - - madly - - majestically - - meaningfully - - mechanically - - merrily - - miserably - - mockingly - - mortally - - mysteriously - - naturally - - nearly - - neatly - - nervously - - nicely - - noisily - - obediently - - obnoxiously - - oddly - - offensively - - optimistically - - overconfidently - - painfully - - partially - - patiently - - perfectly - - playfully - - politely - - poorly - - positively - - potentially - - powerfully - - promptly - - properly - - punctually - - quaintly - - queasily - - queerly - - questionably - - quickly - - quietly - - quirkily - - quite - - quizzically - - randomly - - rapidly - - rarely - - readily - - really - - reassuringly - - recklessly - - regularly - - reluctantly - - repeatedly - - reproachfully - - restfully - - righteously - - rightfully - - rigidly - - roughly - - rudely - - safely - - scarcely - - scarily - - searchingly - - sedately - - seemingly - - selfishly - - separately - - seriously - - shakily - - sharply - - sheepishly - - shrilly - - shyly - - silently - - sleepily - - slowly - - smoothly - - softly - - solemnly - - solidly - - speedily - - stealthily - - sternly - - strictly - - suddenly - - supposedly - - surprisingly - - suspiciously - - sweetly - - swiftly - - sympathetically - - tenderly - - tensely - - terribly - - thankfully - - thoroughly - - thoughtfully - - tightly - - tremendously - - triumphantly - - truthfully - - ultimately - - unabashedly - - unaccountably - - unbearably - - unethically - - unexpectedly - - unfortunately - - unimpressively - - unnaturally - - unnecessarily - - urgently - - usefully - - uselessly - - utterly - - vacantly - - vaguely - - vainly - - valiantly - - vastly - - verbally - - very - - viciously - - victoriously - - violently - - vivaciously - - voluntarily - - warmly - - weakly - - wearily - - wetly - - wholly - - wildly - - willfully - - wisely - - woefully - - wonderfully - - worriedly - - yawningly - - yearningly - - yieldingly - - youthfully - - zealously - - zestfully - - zestily diff --git a/.vale/styles/Microsoft/Auto.yml b/.vale/styles/Microsoft/Auto.yml deleted file mode 100644 index 4da4393530..0000000000 --- a/.vale/styles/Microsoft/Auto.yml +++ /dev/null @@ -1,11 +0,0 @@ -extends: existence -message: "In general, don't hyphenate '%s'." -link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/a/auto -ignorecase: true -level: error -action: - name: convert - params: - - simple -tokens: - - 'auto-\w+' diff --git a/.vale/styles/Microsoft/Avoid.yml b/.vale/styles/Microsoft/Avoid.yml deleted file mode 100644 index dab7822c79..0000000000 --- a/.vale/styles/Microsoft/Avoid.yml +++ /dev/null @@ -1,14 +0,0 @@ -extends: existence -message: "Don't use '%s'. See the A-Z word list for details." -# See the A-Z word list -link: https://docs.microsoft.com/en-us/style-guide -ignorecase: true -level: error -tokens: - - abortion - - and so on - - app(?:lication)?s? (?:developer|program) - - app(?:lication)? file - - backbone - - backend - - contiguous selection diff --git a/.vale/styles/Microsoft/BiasFree.yml b/.vale/styles/Microsoft/BiasFree.yml deleted file mode 100644 index 261e39b3d5..0000000000 --- a/.vale/styles/Microsoft/BiasFree.yml +++ /dev/null @@ -1,14 +0,0 @@ -extends: substitution -message: "Consider '%s' instead of '%s'." -link: https://learn.microsoft.com/en-us/style-guide/bias-free-communication -level: warning -ignorecase: true -action: - name: replace -# Culturally sensitive terms; see GenderBias.yml for gendered terms. -swap: - '(?:demilitarized zone|DMZ)': perimeter network - 'master/slave': master/subordinate - 'sanity check': quick check - 'spirit animal': role model - hangs: stops responding diff --git a/.vale/styles/Microsoft/Contractions.yml b/.vale/styles/Microsoft/Contractions.yml deleted file mode 100644 index 8c81dcbce7..0000000000 --- a/.vale/styles/Microsoft/Contractions.yml +++ /dev/null @@ -1,50 +0,0 @@ -extends: substitution -message: "Use '%s' instead of '%s'." -link: https://docs.microsoft.com/en-us/style-guide/word-choice/use-contractions -level: error -ignorecase: true -action: - name: replace -swap: - are not: aren't - cannot: can't - could not: couldn't - did not: didn't - do not: don't - does not: doesn't - has not: hasn't - have not: haven't - how is: how's - is not: isn't - - 'it is(?!\.)': it's - 'it''s(?=\.)': it is - - should not: shouldn't - - "that is(?![.,])": that's - 'that''s(?=\.)': that is - - 'they are(?!\.)': they're - 'they''re(?=\.)': they are - - was not: wasn't - - 'we are(?!\.)': we're - 'we''re(?=\.)': we are - - 'we have(?!\.)': we've - 'we''ve(?=\.)': we have - - were not: weren't - - 'what is(?!\.)': what's - 'what''s(?=\.)': what is - - 'when is(?!\.)': when's - 'when''s(?=\.)': when is - - 'where is(?!\.)': where's - 'where''s(?=\.)': where is - - will not: won't diff --git a/.vale/styles/Microsoft/Dashes.yml b/.vale/styles/Microsoft/Dashes.yml deleted file mode 100644 index 72b05ba3e5..0000000000 --- a/.vale/styles/Microsoft/Dashes.yml +++ /dev/null @@ -1,13 +0,0 @@ -extends: existence -message: "Remove the spaces around '%s'." -link: https://docs.microsoft.com/en-us/style-guide/punctuation/dashes-hyphens/emes -ignorecase: true -nonword: true -level: error -action: - name: edit - params: - - trim - - " " -tokens: - - '\s[—–]\s|\s[—–]|[—–]\s' diff --git a/.vale/styles/Microsoft/DateFormat.yml b/.vale/styles/Microsoft/DateFormat.yml deleted file mode 100644 index 196531394a..0000000000 --- a/.vale/styles/Microsoft/DateFormat.yml +++ /dev/null @@ -1,8 +0,0 @@ -extends: existence -message: Use 'July 31, 2016' format, not '%s'. -link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/date-time-terms -ignorecase: true -level: error -nonword: true -tokens: - - '\d{1,2} (?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)|May|Jun(?:e)|Jul(?:y)|Aug(?:ust)|Sep(?:tember)?|Oct(?:ober)|Nov(?:ember)?|Dec(?:ember)?) \d{4}' diff --git a/.vale/styles/Microsoft/DateNumbers.yml b/.vale/styles/Microsoft/DateNumbers.yml deleted file mode 100644 index 14d46747ca..0000000000 --- a/.vale/styles/Microsoft/DateNumbers.yml +++ /dev/null @@ -1,40 +0,0 @@ -extends: existence -message: "Don't use ordinal numbers for dates." -link: https://docs.microsoft.com/en-us/style-guide/numbers#numbers-in-dates -level: error -nonword: true -ignorecase: true -raw: - - \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)|May|Jun(?:e)|Jul(?:y)|Aug(?:ust)|Sep(?:tember)?|Oct(?:ober)|Nov(?:ember)?|Dec(?:ember)?)\b\s* -tokens: - - first - - second - - third - - fourth - - fifth - - sixth - - seventh - - eighth - - ninth - - tenth - - eleventh - - twelfth - - thirteenth - - fourteenth - - fifteenth - - sixteenth - - seventeenth - - eighteenth - - nineteenth - - twentieth - - twenty-first - - twenty-second - - twenty-third - - twenty-fourth - - twenty-fifth - - twenty-sixth - - twenty-seventh - - twenty-eighth - - twenty-ninth - - thirtieth - - thirty-first diff --git a/.vale/styles/Microsoft/DateOrder.yml b/.vale/styles/Microsoft/DateOrder.yml deleted file mode 100644 index 12d69ba51e..0000000000 --- a/.vale/styles/Microsoft/DateOrder.yml +++ /dev/null @@ -1,8 +0,0 @@ -extends: existence -message: "Always spell out the name of the month." -link: https://docs.microsoft.com/en-us/style-guide/numbers#numbers-in-dates -ignorecase: true -level: error -nonword: true -tokens: - - '\b\d{1,2}/\d{1,2}/(?:\d{4}|\d{2})\b' diff --git a/.vale/styles/Microsoft/Ellipses.yml b/.vale/styles/Microsoft/Ellipses.yml deleted file mode 100644 index 320457a8bc..0000000000 --- a/.vale/styles/Microsoft/Ellipses.yml +++ /dev/null @@ -1,9 +0,0 @@ -extends: existence -message: "In general, don't use an ellipsis." -link: https://docs.microsoft.com/en-us/style-guide/punctuation/ellipses -nonword: true -level: warning -action: - name: remove -tokens: - - '\.\.\.' diff --git a/.vale/styles/Microsoft/ExclamationPoints.yml b/.vale/styles/Microsoft/ExclamationPoints.yml deleted file mode 100644 index 774fedf825..0000000000 --- a/.vale/styles/Microsoft/ExclamationPoints.yml +++ /dev/null @@ -1,7 +0,0 @@ -extends: existence -message: "Use exclamation points sparingly." -link: https://learn.microsoft.com/en-us/style-guide/punctuation/exclamation-points -level: suggestion -nonword: true -tokens: - - '\w!(?:\s|$)' diff --git a/.vale/styles/Microsoft/FirstPerson.yml b/.vale/styles/Microsoft/FirstPerson.yml deleted file mode 100644 index f58dea3142..0000000000 --- a/.vale/styles/Microsoft/FirstPerson.yml +++ /dev/null @@ -1,16 +0,0 @@ -extends: existence -message: "Use first person (such as '%s') sparingly." -link: https://docs.microsoft.com/en-us/style-guide/grammar/person -ignorecase: true -level: warning -nonword: true -tokens: - - (?:^|\s)I(?=\s) - - (?:^|\s)I(?=,\s) - - \bI'd\b - - \bI'll\b - - \bI'm\b - - \bI've\b - - \bme\b - - \bmy\b - - \bmine\b diff --git a/.vale/styles/Microsoft/Foreign.yml b/.vale/styles/Microsoft/Foreign.yml deleted file mode 100644 index 0d3d6002a9..0000000000 --- a/.vale/styles/Microsoft/Foreign.yml +++ /dev/null @@ -1,13 +0,0 @@ -extends: substitution -message: "Use '%s' instead of '%s'." -link: https://docs.microsoft.com/en-us/style-guide/word-choice/use-us-spelling-avoid-non-english-words -ignorecase: true -level: error -nonword: true -action: - name: replace -swap: - '\b(?:eg|e\.g\.)[\s,]': for example - '\b(?:ie|i\.e\.)[\s,]': that is - '\b(?:viz\.)[\s,]': namely - '\b(?:ergo)[\s,]': therefore diff --git a/.vale/styles/Microsoft/Gender.yml b/.vale/styles/Microsoft/Gender.yml deleted file mode 100644 index 47c0802479..0000000000 --- a/.vale/styles/Microsoft/Gender.yml +++ /dev/null @@ -1,8 +0,0 @@ -extends: existence -message: "Don't use '%s'." -link: https://github.com/MicrosoftDocs/microsoft-style-guide/blob/master/styleguide/grammar/nouns-pronouns.md#pronouns-and-gender -level: error -ignorecase: true -tokens: - - he/she - - s/he diff --git a/.vale/styles/Microsoft/GenderBias.yml b/.vale/styles/Microsoft/GenderBias.yml deleted file mode 100644 index fc987b94e9..0000000000 --- a/.vale/styles/Microsoft/GenderBias.yml +++ /dev/null @@ -1,42 +0,0 @@ -extends: substitution -message: "Consider using '%s' instead of '%s'." -ignorecase: true -level: error -action: - name: replace -swap: - (?:alumna|alumnus): graduate - (?:alumnae|alumni): graduates - air(?:m[ae]n|wom[ae]n): pilot(s) - anchor(?:m[ae]n|wom[ae]n): anchor(s) - authoress: author - camera(?:m[ae]n|wom[ae]n): camera operator(s) - door(?:m[ae]|wom[ae]n): concierge(s) - draft(?:m[ae]n|wom[ae]n): drafter(s) - fire(?:m[ae]n|wom[ae]n): firefighter(s) - fisher(?:m[ae]n|wom[ae]n): fisher(s) - fresh(?:m[ae]n|wom[ae]n): first-year student(s) - garbage(?:m[ae]n|wom[ae]n): waste collector(s) - lady lawyer: lawyer - ladylike: courteous - mail(?:m[ae]n|wom[ae]n): mail carriers - man and wife: husband and wife - man enough: strong enough - mankind: human kind - manmade: manufactured - manpower: personnel - middle(?:m[ae]n|wom[ae]n): intermediary - news(?:m[ae]n|wom[ae]n): journalist(s) - ombuds(?:man|woman): ombuds - oneupmanship: upstaging - poetess: poet - police(?:m[ae]n|wom[ae]n): police officer(s) - repair(?:m[ae]n|wom[ae]n): technician(s) - sales(?:m[ae]n|wom[ae]n): salesperson or sales people - service(?:m[ae]n|wom[ae]n): soldier(s) - steward(?:ess)?: flight attendant - tribes(?:m[ae]n|wom[ae]n): tribe member(s) - waitress: waiter - woman doctor: doctor - woman scientist[s]?: scientist(s) - work(?:m[ae]n|wom[ae]n): worker(s) diff --git a/.vale/styles/Microsoft/GeneralURL.yml b/.vale/styles/Microsoft/GeneralURL.yml deleted file mode 100644 index dcef503d99..0000000000 --- a/.vale/styles/Microsoft/GeneralURL.yml +++ /dev/null @@ -1,11 +0,0 @@ -extends: existence -message: "For a general audience, use 'address' rather than 'URL'." -link: https://docs.microsoft.com/en-us/style-guide/urls-web-addresses -level: warning -action: - name: replace - params: - - URL - - address -tokens: - - URL diff --git a/.vale/styles/Microsoft/HeadingAcronyms.yml b/.vale/styles/Microsoft/HeadingAcronyms.yml deleted file mode 100644 index 9dc3b6c2de..0000000000 --- a/.vale/styles/Microsoft/HeadingAcronyms.yml +++ /dev/null @@ -1,7 +0,0 @@ -extends: existence -message: "Avoid using acronyms in a title or heading." -link: https://docs.microsoft.com/en-us/style-guide/acronyms#be-careful-with-acronyms-in-titles-and-headings -level: warning -scope: heading -tokens: - - '[A-Z]{2,4}' diff --git a/.vale/styles/Microsoft/HeadingColons.yml b/.vale/styles/Microsoft/HeadingColons.yml deleted file mode 100644 index 7013c39148..0000000000 --- a/.vale/styles/Microsoft/HeadingColons.yml +++ /dev/null @@ -1,8 +0,0 @@ -extends: existence -message: "Capitalize '%s'." -link: https://docs.microsoft.com/en-us/style-guide/punctuation/colons -nonword: true -level: error -scope: heading -tokens: - - ':\s[a-z]' diff --git a/.vale/styles/Microsoft/HeadingPunctuation.yml b/.vale/styles/Microsoft/HeadingPunctuation.yml deleted file mode 100644 index 4954cb11ae..0000000000 --- a/.vale/styles/Microsoft/HeadingPunctuation.yml +++ /dev/null @@ -1,13 +0,0 @@ -extends: existence -message: "Don't use end punctuation in headings." -link: https://docs.microsoft.com/en-us/style-guide/punctuation/periods -nonword: true -level: warning -scope: heading -action: - name: edit - params: - - trim_right - - ".?!" -tokens: - - "[a-z][.?!]$" diff --git a/.vale/styles/Microsoft/Headings.yml b/.vale/styles/Microsoft/Headings.yml deleted file mode 100644 index 63624edc1b..0000000000 --- a/.vale/styles/Microsoft/Headings.yml +++ /dev/null @@ -1,28 +0,0 @@ -extends: capitalization -message: "'%s' should use sentence-style capitalization." -link: https://docs.microsoft.com/en-us/style-guide/capitalization -level: suggestion -scope: heading -match: $sentence -indicators: - - ':' -exceptions: - - Azure - - CLI - - Code - - Cosmos - - Docker - - Emmet - - I - - Kubernetes - - Linux - - macOS - - Marketplace - - MongoDB - - REPL - - Studio - - TypeScript - - URLs - - Visual - - VS - - Windows diff --git a/.vale/styles/Microsoft/Hyphens.yml b/.vale/styles/Microsoft/Hyphens.yml deleted file mode 100644 index 7e5731c995..0000000000 --- a/.vale/styles/Microsoft/Hyphens.yml +++ /dev/null @@ -1,14 +0,0 @@ -extends: existence -message: "'%s' doesn't need a hyphen." -link: https://docs.microsoft.com/en-us/style-guide/punctuation/dashes-hyphens/hyphens -level: warning -ignorecase: false -nonword: true -action: - name: edit - params: - - regex - - "-" - - " " -tokens: - - '\b[^\s-]+ly-\w+\b' diff --git a/.vale/styles/Microsoft/Jargon.yml b/.vale/styles/Microsoft/Jargon.yml deleted file mode 100644 index 999d43667a..0000000000 --- a/.vale/styles/Microsoft/Jargon.yml +++ /dev/null @@ -1,11 +0,0 @@ -extends: substitution -message: "Consider using '%s' instead of the jargon '%s'." -link: https://learn.microsoft.com/en-us/style-guide/word-choice/avoid-jargon -level: suggestion -ignorecase: true -action: - name: replace -swap: - bucketize: group - glyph: symbol - leverage: take advantage of diff --git a/.vale/styles/Microsoft/Militaristic.yml b/.vale/styles/Microsoft/Militaristic.yml deleted file mode 100644 index 45c0f027db..0000000000 --- a/.vale/styles/Microsoft/Militaristic.yml +++ /dev/null @@ -1,24 +0,0 @@ -extends: substitution -message: "Consider '%s' instead of '%s'." -link: https://learn.microsoft.com/en-us/style-guide/militaristic-language -level: suggestion -ignorecase: true -action: - name: replace -# The guide scopes its table to cybersecurity writing, so the generic verbs it -# also lists (combat, fight, guard, ward) are omitted here: without that context -# they'd fire on ordinary prose. -swap: - '(?:cyber ?)?kill chain': cyberattack chain - 'defense-in-depth approach': multilayered approach - 'external attack surface': external exposure - 'first line of defense': protection - 'frontline analysts': security analysts - 'locked down': secured - adversaries: threat actors - adversary: threat actor - attackers: cyberattackers - attacker: cyberattacker - blast radius: impact - fortifications: protection - frontlines: defense diff --git a/.vale/styles/Microsoft/Negative.yml b/.vale/styles/Microsoft/Negative.yml deleted file mode 100644 index d73221f539..0000000000 --- a/.vale/styles/Microsoft/Negative.yml +++ /dev/null @@ -1,13 +0,0 @@ -extends: existence -message: "Form a negative number with an en dash, not a hyphen." -link: https://docs.microsoft.com/en-us/style-guide/numbers -nonword: true -level: error -action: - name: edit - params: - - regex - - "-" - - "–" -tokens: - - '(?<=\s)-\d+(?:\.\d+)?\b' diff --git a/.vale/styles/Microsoft/Ordinal.yml b/.vale/styles/Microsoft/Ordinal.yml deleted file mode 100644 index e3483e380c..0000000000 --- a/.vale/styles/Microsoft/Ordinal.yml +++ /dev/null @@ -1,13 +0,0 @@ -extends: existence -message: "Don't add -ly to an ordinal number." -link: https://docs.microsoft.com/en-us/style-guide/numbers -level: error -action: - name: edit - params: - - trim - - ly -tokens: - - firstly - - secondly - - thirdly diff --git a/.vale/styles/Microsoft/OxfordComma.yml b/.vale/styles/Microsoft/OxfordComma.yml deleted file mode 100644 index 493b55c3ce..0000000000 --- a/.vale/styles/Microsoft/OxfordComma.yml +++ /dev/null @@ -1,8 +0,0 @@ -extends: existence -message: "Use the Oxford comma in '%s'." -link: https://docs.microsoft.com/en-us/style-guide/punctuation/commas -scope: sentence -level: suggestion -nonword: true -tokens: - - '(?:[^\s,]+,){1,} \w+ (?:and|or) \w+[.?!]' diff --git a/.vale/styles/Microsoft/Passive.yml b/.vale/styles/Microsoft/Passive.yml deleted file mode 100644 index 102d377cac..0000000000 --- a/.vale/styles/Microsoft/Passive.yml +++ /dev/null @@ -1,183 +0,0 @@ -extends: existence -message: "'%s' looks like passive voice." -ignorecase: true -level: suggestion -raw: - - \b(am|are|were|being|is|been|was|be)\b\s* -tokens: - - '[\w]+ed' - - awoken - - beat - - become - - been - - begun - - bent - - beset - - bet - - bid - - bidden - - bitten - - bled - - blown - - born - - bought - - bound - - bred - - broadcast - - broken - - brought - - built - - burnt - - burst - - cast - - caught - - chosen - - clung - - come - - cost - - crept - - cut - - dealt - - dived - - done - - drawn - - dreamt - - driven - - drunk - - dug - - eaten - - fallen - - fed - - felt - - fit - - fled - - flown - - flung - - forbidden - - foregone - - forgiven - - forgotten - - forsaken - - fought - - found - - frozen - - given - - gone - - gotten - - ground - - grown - - heard - - held - - hidden - - hit - - hung - - hurt - - kept - - knelt - - knit - - known - - laid - - lain - - leapt - - learnt - - led - - left - - lent - - let - - lighted - - lost - - made - - meant - - met - - misspelt - - mistaken - - mown - - overcome - - overdone - - overtaken - - overthrown - - paid - - pled - - proven - - put - - quit - - read - - rid - - ridden - - risen - - run - - rung - - said - - sat - - sawn - - seen - - sent - - set - - sewn - - shaken - - shaven - - shed - - shod - - shone - - shorn - - shot - - shown - - shrunk - - shut - - slain - - slept - - slid - - slit - - slung - - smitten - - sold - - sought - - sown - - sped - - spent - - spilt - - spit - - split - - spoken - - spread - - sprung - - spun - - stolen - - stood - - stridden - - striven - - struck - - strung - - stuck - - stung - - stunk - - sung - - sunk - - swept - - swollen - - sworn - - swum - - swung - - taken - - taught - - thought - - thrived - - thrown - - thrust - - told - - torn - - trodden - - understood - - upheld - - upset - - wed - - wept - - withheld - - withstood - - woken - - won - - worn - - wound - - woven - - written - - wrung diff --git a/.vale/styles/Microsoft/Percentages.yml b/.vale/styles/Microsoft/Percentages.yml deleted file mode 100644 index b68a7363f4..0000000000 --- a/.vale/styles/Microsoft/Percentages.yml +++ /dev/null @@ -1,7 +0,0 @@ -extends: existence -message: "Use a numeral plus the units." -link: https://docs.microsoft.com/en-us/style-guide/numbers -nonword: true -level: error -tokens: - - '\b[a-zA-z]+\spercent\b' diff --git a/.vale/styles/Microsoft/Plurals.yml b/.vale/styles/Microsoft/Plurals.yml deleted file mode 100644 index 1bb6660ade..0000000000 --- a/.vale/styles/Microsoft/Plurals.yml +++ /dev/null @@ -1,7 +0,0 @@ -extends: existence -message: "Don't add '%s' to a singular noun. Use plural instead." -ignorecase: true -level: error -link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/s/s-es -raw: - - '\(s\)|\(es\)' diff --git a/.vale/styles/Microsoft/QuestionMarks.yml b/.vale/styles/Microsoft/QuestionMarks.yml deleted file mode 100644 index 2034033c05..0000000000 --- a/.vale/styles/Microsoft/QuestionMarks.yml +++ /dev/null @@ -1,7 +0,0 @@ -extends: existence -message: "Use questions sparingly." -link: https://learn.microsoft.com/en-us/style-guide/punctuation/question-marks -level: suggestion -nonword: true -tokens: - - '\w\?(?:\s|$)' diff --git a/.vale/styles/Microsoft/Quotes.yml b/.vale/styles/Microsoft/Quotes.yml deleted file mode 100644 index 38f4976061..0000000000 --- a/.vale/styles/Microsoft/Quotes.yml +++ /dev/null @@ -1,7 +0,0 @@ -extends: existence -message: 'Punctuation should be inside the quotes.' -link: https://docs.microsoft.com/en-us/style-guide/punctuation/quotation-marks -level: error -nonword: true -tokens: - - '["“][^"”“]+["”][.,]' diff --git a/.vale/styles/Microsoft/RangeTime.yml b/.vale/styles/Microsoft/RangeTime.yml deleted file mode 100644 index 72d8bbfbe3..0000000000 --- a/.vale/styles/Microsoft/RangeTime.yml +++ /dev/null @@ -1,13 +0,0 @@ -extends: existence -message: "Use 'to' instead of a dash in '%s'." -link: https://docs.microsoft.com/en-us/style-guide/numbers -nonword: true -level: error -action: - name: edit - params: - - regex - - "[-–]" - - "to" -tokens: - - '\b(?:AM|PM)\s?[-–]\s?.+(?:AM|PM)\b' diff --git a/.vale/styles/Microsoft/Semicolon.yml b/.vale/styles/Microsoft/Semicolon.yml deleted file mode 100644 index 4d905467dd..0000000000 --- a/.vale/styles/Microsoft/Semicolon.yml +++ /dev/null @@ -1,8 +0,0 @@ -extends: existence -message: "Try to simplify this sentence." -link: https://docs.microsoft.com/en-us/style-guide/punctuation/semicolons -nonword: true -scope: sentence -level: suggestion -tokens: - - ';' diff --git a/.vale/styles/Microsoft/SentenceLength.yml b/.vale/styles/Microsoft/SentenceLength.yml deleted file mode 100644 index f248cf0513..0000000000 --- a/.vale/styles/Microsoft/SentenceLength.yml +++ /dev/null @@ -1,7 +0,0 @@ -extends: occurrence -message: "Try to keep sentences short (< 30 words)." -scope: sentence -level: suggestion -max: 30 -token: \b(\w+)\b - diff --git a/.vale/styles/Microsoft/Spacing.yml b/.vale/styles/Microsoft/Spacing.yml deleted file mode 100644 index bbd10e51df..0000000000 --- a/.vale/styles/Microsoft/Spacing.yml +++ /dev/null @@ -1,8 +0,0 @@ -extends: existence -message: "'%s' should have one space." -link: https://docs.microsoft.com/en-us/style-guide/punctuation/periods -level: error -nonword: true -tokens: - - '[a-z][.?!] {2,}[A-Z]' - - '[a-z][.?!][A-Z]' diff --git a/.vale/styles/Microsoft/Suspended.yml b/.vale/styles/Microsoft/Suspended.yml deleted file mode 100644 index 7282e9c9cf..0000000000 --- a/.vale/styles/Microsoft/Suspended.yml +++ /dev/null @@ -1,7 +0,0 @@ -extends: existence -message: "Don't use '%s' unless space is limited." -link: https://docs.microsoft.com/en-us/style-guide/punctuation/dashes-hyphens/hyphens -ignorecase: true -level: warning -tokens: - - '\w+- and \w+-' diff --git a/.vale/styles/Microsoft/Terms.yml b/.vale/styles/Microsoft/Terms.yml deleted file mode 100644 index 65fca10aaa..0000000000 --- a/.vale/styles/Microsoft/Terms.yml +++ /dev/null @@ -1,42 +0,0 @@ -extends: substitution -message: "Prefer '%s' over '%s'." -# term preference should be based on microsoft style guide, such as -link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/a/adapter -level: warning -ignorecase: true -action: - name: replace -swap: - "(?:agent|virtual assistant|intelligent personal assistant)": personal digital assistant - "(?:assembler|machine language)": assembly language - "(?:drive C:|drive C>|C: drive)": drive C - "(?:internet bot|web robot)s?": bot(s) - "(?:microsoft cloud|the cloud)": cloud - "(?:mobile|smart) ?phone": phone - "24/7": every day - "audio(?:-| )book": audiobook - "back(?:-| )light": backlight - "chat ?bots?": chatbot(s) - adaptor: adapter - administrate: administer - afterwards: afterward - alphabetic: alphabetical - alphanumerical: alphanumeric - an URL: a URL - anti-aliasing: antialiasing - anti-malware: antimalware - anti-spyware: antispyware - anti-virus: antivirus - appendixes: appendices - artificial intelligence: AI - caap: CaaP - conversation-as-a-platform: conversation as a platform - eb: EB - gb: GB - gbps: Gbps - kb: KB - keypress: keystroke - mb: MB - pb: PB - tb: TB - zb: ZB diff --git a/.vale/styles/Microsoft/UIVerbs.yml b/.vale/styles/Microsoft/UIVerbs.yml deleted file mode 100644 index ed6ef85a1c..0000000000 --- a/.vale/styles/Microsoft/UIVerbs.yml +++ /dev/null @@ -1,9 +0,0 @@ -extends: existence -message: "Use 'select' instead of the input-specific verb '%s'." -link: https://learn.microsoft.com/en-us/style-guide/procedures-instructions/describing-interactions-with-ui -level: warning -ignorecase: true -# 'right-click' and 'double-click' are explicitly allowed by the guide. -tokens: - - '(?=1.0.0" -} From b994fac3638dd540c636f4ad609bd4e9456b8d52 Mon Sep 17 00:00:00 2001 From: "devin.logan" Date: Fri, 28 Aug 2026 18:28:19 +0000 Subject: [PATCH 4/7] chore: restore vale Microsoft styles Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .vale/styles/Microsoft/AMPM.yml | 9 + .vale/styles/Microsoft/Accessibility.yml | 30 ++ .vale/styles/Microsoft/Acronyms.yml | 64 +++++ .vale/styles/Microsoft/Adverbs.yml | 272 ++++++++++++++++++ .vale/styles/Microsoft/Auto.yml | 11 + .vale/styles/Microsoft/Avoid.yml | 14 + .vale/styles/Microsoft/Contractions.yml | 50 ++++ .vale/styles/Microsoft/Dashes.yml | 13 + .vale/styles/Microsoft/DateFormat.yml | 8 + .vale/styles/Microsoft/DateNumbers.yml | 40 +++ .vale/styles/Microsoft/DateOrder.yml | 8 + .vale/styles/Microsoft/Ellipses.yml | 9 + .vale/styles/Microsoft/FirstPerson.yml | 16 ++ .vale/styles/Microsoft/Foreign.yml | 13 + .vale/styles/Microsoft/Gender.yml | 8 + .vale/styles/Microsoft/GenderBias.yml | 42 +++ .vale/styles/Microsoft/GeneralURL.yml | 11 + .vale/styles/Microsoft/HeadingAcronyms.yml | 7 + .vale/styles/Microsoft/HeadingColons.yml | 8 + .vale/styles/Microsoft/HeadingPunctuation.yml | 13 + .vale/styles/Microsoft/Headings.yml | 28 ++ .vale/styles/Microsoft/Hyphens.yml | 14 + .vale/styles/Microsoft/Negative.yml | 13 + .vale/styles/Microsoft/Ordinal.yml | 13 + .vale/styles/Microsoft/OxfordComma.yml | 8 + .vale/styles/Microsoft/Passive.yml | 183 ++++++++++++ .vale/styles/Microsoft/Percentages.yml | 7 + .vale/styles/Microsoft/Plurals.yml | 7 + .vale/styles/Microsoft/Quotes.yml | 7 + .vale/styles/Microsoft/RangeTime.yml | 13 + .vale/styles/Microsoft/Semicolon.yml | 8 + .vale/styles/Microsoft/SentenceLength.yml | 7 + .vale/styles/Microsoft/Spacing.yml | 8 + .vale/styles/Microsoft/Suspended.yml | 7 + .vale/styles/Microsoft/Terms.yml | 42 +++ .vale/styles/Microsoft/URLFormat.yml | 9 + .vale/styles/Microsoft/Units.yml | 16 ++ .vale/styles/Microsoft/Vocab.yml | 25 ++ .vale/styles/Microsoft/We.yml | 11 + .vale/styles/Microsoft/Wordiness.yml | 127 ++++++++ .vale/styles/Microsoft/meta.json | 4 + 41 files changed, 1203 insertions(+) create mode 100644 .vale/styles/Microsoft/AMPM.yml create mode 100644 .vale/styles/Microsoft/Accessibility.yml create mode 100644 .vale/styles/Microsoft/Acronyms.yml create mode 100644 .vale/styles/Microsoft/Adverbs.yml create mode 100644 .vale/styles/Microsoft/Auto.yml create mode 100644 .vale/styles/Microsoft/Avoid.yml create mode 100644 .vale/styles/Microsoft/Contractions.yml create mode 100644 .vale/styles/Microsoft/Dashes.yml create mode 100644 .vale/styles/Microsoft/DateFormat.yml create mode 100644 .vale/styles/Microsoft/DateNumbers.yml create mode 100644 .vale/styles/Microsoft/DateOrder.yml create mode 100644 .vale/styles/Microsoft/Ellipses.yml create mode 100644 .vale/styles/Microsoft/FirstPerson.yml create mode 100644 .vale/styles/Microsoft/Foreign.yml create mode 100644 .vale/styles/Microsoft/Gender.yml create mode 100644 .vale/styles/Microsoft/GenderBias.yml create mode 100644 .vale/styles/Microsoft/GeneralURL.yml create mode 100644 .vale/styles/Microsoft/HeadingAcronyms.yml create mode 100644 .vale/styles/Microsoft/HeadingColons.yml create mode 100644 .vale/styles/Microsoft/HeadingPunctuation.yml create mode 100644 .vale/styles/Microsoft/Headings.yml create mode 100644 .vale/styles/Microsoft/Hyphens.yml create mode 100644 .vale/styles/Microsoft/Negative.yml create mode 100644 .vale/styles/Microsoft/Ordinal.yml create mode 100644 .vale/styles/Microsoft/OxfordComma.yml create mode 100644 .vale/styles/Microsoft/Passive.yml create mode 100644 .vale/styles/Microsoft/Percentages.yml create mode 100644 .vale/styles/Microsoft/Plurals.yml create mode 100644 .vale/styles/Microsoft/Quotes.yml create mode 100644 .vale/styles/Microsoft/RangeTime.yml create mode 100644 .vale/styles/Microsoft/Semicolon.yml create mode 100644 .vale/styles/Microsoft/SentenceLength.yml create mode 100644 .vale/styles/Microsoft/Spacing.yml create mode 100644 .vale/styles/Microsoft/Suspended.yml create mode 100644 .vale/styles/Microsoft/Terms.yml create mode 100644 .vale/styles/Microsoft/URLFormat.yml create mode 100644 .vale/styles/Microsoft/Units.yml create mode 100644 .vale/styles/Microsoft/Vocab.yml create mode 100644 .vale/styles/Microsoft/We.yml create mode 100644 .vale/styles/Microsoft/Wordiness.yml create mode 100644 .vale/styles/Microsoft/meta.json diff --git a/.vale/styles/Microsoft/AMPM.yml b/.vale/styles/Microsoft/AMPM.yml new file mode 100644 index 0000000000..8b9fed162a --- /dev/null +++ b/.vale/styles/Microsoft/AMPM.yml @@ -0,0 +1,9 @@ +extends: existence +message: Use 'AM' or 'PM' (preceded by a space). +link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/date-time-terms +level: error +nonword: true +tokens: + - '\d{1,2}[AP]M' + - '\d{1,2} ?[ap]m' + - '\d{1,2} ?[aApP]\.[mM]\.' diff --git a/.vale/styles/Microsoft/Accessibility.yml b/.vale/styles/Microsoft/Accessibility.yml new file mode 100644 index 0000000000..f5f4829392 --- /dev/null +++ b/.vale/styles/Microsoft/Accessibility.yml @@ -0,0 +1,30 @@ +extends: existence +message: "Don't use language (such as '%s') that defines people by their disability." +link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/accessibility-terms +level: suggestion +ignorecase: true +tokens: + - a victim of + - able-bodied + - an epileptic + - birth defect + - crippled + - differently abled + - disabled + - dumb + - handicapped + - handicaps + - healthy person + - hearing-impaired + - lame + - maimed + - mentally handicapped + - missing a limb + - mute + - non-verbal + - normal person + - sight-impaired + - slow learner + - stricken with + - suffers from + - vision-impaired diff --git a/.vale/styles/Microsoft/Acronyms.yml b/.vale/styles/Microsoft/Acronyms.yml new file mode 100644 index 0000000000..308ff7c0ed --- /dev/null +++ b/.vale/styles/Microsoft/Acronyms.yml @@ -0,0 +1,64 @@ +extends: conditional +message: "'%s' has no definition." +link: https://docs.microsoft.com/en-us/style-guide/acronyms +level: suggestion +ignorecase: false +# Ensures that the existence of 'first' implies the existence of 'second'. +first: '\b([A-Z]{3,5})\b' +second: '(?:\b[A-Z][a-z]+ )+\(([A-Z]{3,5})\)' +# ... with the exception of these: +exceptions: + - API + - ASP + - CLI + - CPU + - CSS + - CSV + - DEBUG + - DOM + - DPI + - FAQ + - GCC + - GDB + - GET + - GPU + - GTK + - GUI + - HTML + - HTTP + - HTTPS + - IDE + - JAR + - JSON + - JSX + - LESS + - LLDB + - NET + - NOTE + - NVDA + - OSS + - PATH + - PDF + - PHP + - POST + - RAM + - REPL + - RSA + - SCM + - SCSS + - SDK + - SQL + - SSH + - SSL + - SVG + - TBD + - TCP + - TODO + - URI + - URL + - USB + - UTF + - XML + - XSS + - YAML + - ZIP diff --git a/.vale/styles/Microsoft/Adverbs.yml b/.vale/styles/Microsoft/Adverbs.yml new file mode 100644 index 0000000000..5619f99d8c --- /dev/null +++ b/.vale/styles/Microsoft/Adverbs.yml @@ -0,0 +1,272 @@ +extends: existence +message: "Remove '%s' if it's not important to the meaning of the statement." +link: https://docs.microsoft.com/en-us/style-guide/word-choice/use-simple-words-concise-sentences +ignorecase: true +level: warning +action: + name: remove +tokens: + - abnormally + - absentmindedly + - accidentally + - adventurously + - anxiously + - arrogantly + - awkwardly + - bashfully + - beautifully + - bitterly + - bleakly + - blindly + - blissfully + - boastfully + - boldly + - bravely + - briefly + - brightly + - briskly + - broadly + - busily + - calmly + - carefully + - carelessly + - cautiously + - cheerfully + - cleverly + - closely + - coaxingly + - colorfully + - continually + - coolly + - courageously + - crossly + - cruelly + - curiously + - daintily + - dearly + - deceivingly + - deeply + - defiantly + - deliberately + - delightfully + - diligently + - dimly + - doubtfully + - dreamily + - easily + - effectively + - elegantly + - energetically + - enormously + - enthusiastically + - excitedly + - extremely + - fairly + - faithfully + - famously + - ferociously + - fervently + - fiercely + - fondly + - foolishly + - fortunately + - frankly + - frantically + - freely + - frenetically + - frightfully + - furiously + - generally + - generously + - gently + - gladly + - gleefully + - gracefully + - gratefully + - greatly + - greedily + - happily + - hastily + - healthily + - heavily + - helplessly + - honestly + - hopelessly + - hungrily + - innocently + - inquisitively + - intensely + - intently + - interestingly + - inwardly + - irritably + - jaggedly + - jealously + - jovially + - joyfully + - joyously + - jubilantly + - judgmentally + - justly + - keenly + - kiddingly + - kindheartedly + - knavishly + - knowingly + - knowledgeably + - lazily + - lightly + - limply + - lively + - loftily + - longingly + - loosely + - loudly + - lovingly + - loyally + - madly + - majestically + - meaningfully + - mechanically + - merrily + - miserably + - mockingly + - mortally + - mysteriously + - naturally + - nearly + - neatly + - nervously + - nicely + - noisily + - obediently + - obnoxiously + - oddly + - offensively + - optimistically + - overconfidently + - painfully + - partially + - patiently + - perfectly + - playfully + - politely + - poorly + - positively + - potentially + - powerfully + - promptly + - properly + - punctually + - quaintly + - queasily + - queerly + - questionably + - quickly + - quietly + - quirkily + - quite + - quizzically + - randomly + - rapidly + - rarely + - readily + - really + - reassuringly + - recklessly + - regularly + - reluctantly + - repeatedly + - reproachfully + - restfully + - righteously + - rightfully + - rigidly + - roughly + - rudely + - safely + - scarcely + - scarily + - searchingly + - sedately + - seemingly + - selfishly + - separately + - seriously + - shakily + - sharply + - sheepishly + - shrilly + - shyly + - silently + - sleepily + - slowly + - smoothly + - softly + - solemnly + - solidly + - speedily + - stealthily + - sternly + - strictly + - suddenly + - supposedly + - surprisingly + - suspiciously + - sweetly + - swiftly + - sympathetically + - tenderly + - tensely + - terribly + - thankfully + - thoroughly + - thoughtfully + - tightly + - tremendously + - triumphantly + - truthfully + - ultimately + - unabashedly + - unaccountably + - unbearably + - unethically + - unexpectedly + - unfortunately + - unimpressively + - unnaturally + - unnecessarily + - urgently + - usefully + - uselessly + - utterly + - vacantly + - vaguely + - vainly + - valiantly + - vastly + - verbally + - very + - viciously + - victoriously + - violently + - vivaciously + - voluntarily + - warmly + - weakly + - wearily + - wetly + - wholly + - wildly + - willfully + - wisely + - woefully + - wonderfully + - worriedly + - yawningly + - yearningly + - yieldingly + - youthfully + - zealously + - zestfully + - zestily diff --git a/.vale/styles/Microsoft/Auto.yml b/.vale/styles/Microsoft/Auto.yml new file mode 100644 index 0000000000..4da4393530 --- /dev/null +++ b/.vale/styles/Microsoft/Auto.yml @@ -0,0 +1,11 @@ +extends: existence +message: "In general, don't hyphenate '%s'." +link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/a/auto +ignorecase: true +level: error +action: + name: convert + params: + - simple +tokens: + - 'auto-\w+' diff --git a/.vale/styles/Microsoft/Avoid.yml b/.vale/styles/Microsoft/Avoid.yml new file mode 100644 index 0000000000..dab7822c79 --- /dev/null +++ b/.vale/styles/Microsoft/Avoid.yml @@ -0,0 +1,14 @@ +extends: existence +message: "Don't use '%s'. See the A-Z word list for details." +# See the A-Z word list +link: https://docs.microsoft.com/en-us/style-guide +ignorecase: true +level: error +tokens: + - abortion + - and so on + - app(?:lication)?s? (?:developer|program) + - app(?:lication)? file + - backbone + - backend + - contiguous selection diff --git a/.vale/styles/Microsoft/Contractions.yml b/.vale/styles/Microsoft/Contractions.yml new file mode 100644 index 0000000000..8c81dcbce7 --- /dev/null +++ b/.vale/styles/Microsoft/Contractions.yml @@ -0,0 +1,50 @@ +extends: substitution +message: "Use '%s' instead of '%s'." +link: https://docs.microsoft.com/en-us/style-guide/word-choice/use-contractions +level: error +ignorecase: true +action: + name: replace +swap: + are not: aren't + cannot: can't + could not: couldn't + did not: didn't + do not: don't + does not: doesn't + has not: hasn't + have not: haven't + how is: how's + is not: isn't + + 'it is(?!\.)': it's + 'it''s(?=\.)': it is + + should not: shouldn't + + "that is(?![.,])": that's + 'that''s(?=\.)': that is + + 'they are(?!\.)': they're + 'they''re(?=\.)': they are + + was not: wasn't + + 'we are(?!\.)': we're + 'we''re(?=\.)': we are + + 'we have(?!\.)': we've + 'we''ve(?=\.)': we have + + were not: weren't + + 'what is(?!\.)': what's + 'what''s(?=\.)': what is + + 'when is(?!\.)': when's + 'when''s(?=\.)': when is + + 'where is(?!\.)': where's + 'where''s(?=\.)': where is + + will not: won't diff --git a/.vale/styles/Microsoft/Dashes.yml b/.vale/styles/Microsoft/Dashes.yml new file mode 100644 index 0000000000..72b05ba3e5 --- /dev/null +++ b/.vale/styles/Microsoft/Dashes.yml @@ -0,0 +1,13 @@ +extends: existence +message: "Remove the spaces around '%s'." +link: https://docs.microsoft.com/en-us/style-guide/punctuation/dashes-hyphens/emes +ignorecase: true +nonword: true +level: error +action: + name: edit + params: + - trim + - " " +tokens: + - '\s[—–]\s|\s[—–]|[—–]\s' diff --git a/.vale/styles/Microsoft/DateFormat.yml b/.vale/styles/Microsoft/DateFormat.yml new file mode 100644 index 0000000000..196531394a --- /dev/null +++ b/.vale/styles/Microsoft/DateFormat.yml @@ -0,0 +1,8 @@ +extends: existence +message: Use 'July 31, 2016' format, not '%s'. +link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/date-time-terms +ignorecase: true +level: error +nonword: true +tokens: + - '\d{1,2} (?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)|May|Jun(?:e)|Jul(?:y)|Aug(?:ust)|Sep(?:tember)?|Oct(?:ober)|Nov(?:ember)?|Dec(?:ember)?) \d{4}' diff --git a/.vale/styles/Microsoft/DateNumbers.yml b/.vale/styles/Microsoft/DateNumbers.yml new file mode 100644 index 0000000000..14d46747ca --- /dev/null +++ b/.vale/styles/Microsoft/DateNumbers.yml @@ -0,0 +1,40 @@ +extends: existence +message: "Don't use ordinal numbers for dates." +link: https://docs.microsoft.com/en-us/style-guide/numbers#numbers-in-dates +level: error +nonword: true +ignorecase: true +raw: + - \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)|May|Jun(?:e)|Jul(?:y)|Aug(?:ust)|Sep(?:tember)?|Oct(?:ober)|Nov(?:ember)?|Dec(?:ember)?)\b\s* +tokens: + - first + - second + - third + - fourth + - fifth + - sixth + - seventh + - eighth + - ninth + - tenth + - eleventh + - twelfth + - thirteenth + - fourteenth + - fifteenth + - sixteenth + - seventeenth + - eighteenth + - nineteenth + - twentieth + - twenty-first + - twenty-second + - twenty-third + - twenty-fourth + - twenty-fifth + - twenty-sixth + - twenty-seventh + - twenty-eighth + - twenty-ninth + - thirtieth + - thirty-first diff --git a/.vale/styles/Microsoft/DateOrder.yml b/.vale/styles/Microsoft/DateOrder.yml new file mode 100644 index 0000000000..12d69ba51e --- /dev/null +++ b/.vale/styles/Microsoft/DateOrder.yml @@ -0,0 +1,8 @@ +extends: existence +message: "Always spell out the name of the month." +link: https://docs.microsoft.com/en-us/style-guide/numbers#numbers-in-dates +ignorecase: true +level: error +nonword: true +tokens: + - '\b\d{1,2}/\d{1,2}/(?:\d{4}|\d{2})\b' diff --git a/.vale/styles/Microsoft/Ellipses.yml b/.vale/styles/Microsoft/Ellipses.yml new file mode 100644 index 0000000000..320457a8bc --- /dev/null +++ b/.vale/styles/Microsoft/Ellipses.yml @@ -0,0 +1,9 @@ +extends: existence +message: "In general, don't use an ellipsis." +link: https://docs.microsoft.com/en-us/style-guide/punctuation/ellipses +nonword: true +level: warning +action: + name: remove +tokens: + - '\.\.\.' diff --git a/.vale/styles/Microsoft/FirstPerson.yml b/.vale/styles/Microsoft/FirstPerson.yml new file mode 100644 index 0000000000..f58dea3142 --- /dev/null +++ b/.vale/styles/Microsoft/FirstPerson.yml @@ -0,0 +1,16 @@ +extends: existence +message: "Use first person (such as '%s') sparingly." +link: https://docs.microsoft.com/en-us/style-guide/grammar/person +ignorecase: true +level: warning +nonword: true +tokens: + - (?:^|\s)I(?=\s) + - (?:^|\s)I(?=,\s) + - \bI'd\b + - \bI'll\b + - \bI'm\b + - \bI've\b + - \bme\b + - \bmy\b + - \bmine\b diff --git a/.vale/styles/Microsoft/Foreign.yml b/.vale/styles/Microsoft/Foreign.yml new file mode 100644 index 0000000000..0d3d6002a9 --- /dev/null +++ b/.vale/styles/Microsoft/Foreign.yml @@ -0,0 +1,13 @@ +extends: substitution +message: "Use '%s' instead of '%s'." +link: https://docs.microsoft.com/en-us/style-guide/word-choice/use-us-spelling-avoid-non-english-words +ignorecase: true +level: error +nonword: true +action: + name: replace +swap: + '\b(?:eg|e\.g\.)[\s,]': for example + '\b(?:ie|i\.e\.)[\s,]': that is + '\b(?:viz\.)[\s,]': namely + '\b(?:ergo)[\s,]': therefore diff --git a/.vale/styles/Microsoft/Gender.yml b/.vale/styles/Microsoft/Gender.yml new file mode 100644 index 0000000000..47c0802479 --- /dev/null +++ b/.vale/styles/Microsoft/Gender.yml @@ -0,0 +1,8 @@ +extends: existence +message: "Don't use '%s'." +link: https://github.com/MicrosoftDocs/microsoft-style-guide/blob/master/styleguide/grammar/nouns-pronouns.md#pronouns-and-gender +level: error +ignorecase: true +tokens: + - he/she + - s/he diff --git a/.vale/styles/Microsoft/GenderBias.yml b/.vale/styles/Microsoft/GenderBias.yml new file mode 100644 index 0000000000..fc987b94e9 --- /dev/null +++ b/.vale/styles/Microsoft/GenderBias.yml @@ -0,0 +1,42 @@ +extends: substitution +message: "Consider using '%s' instead of '%s'." +ignorecase: true +level: error +action: + name: replace +swap: + (?:alumna|alumnus): graduate + (?:alumnae|alumni): graduates + air(?:m[ae]n|wom[ae]n): pilot(s) + anchor(?:m[ae]n|wom[ae]n): anchor(s) + authoress: author + camera(?:m[ae]n|wom[ae]n): camera operator(s) + door(?:m[ae]|wom[ae]n): concierge(s) + draft(?:m[ae]n|wom[ae]n): drafter(s) + fire(?:m[ae]n|wom[ae]n): firefighter(s) + fisher(?:m[ae]n|wom[ae]n): fisher(s) + fresh(?:m[ae]n|wom[ae]n): first-year student(s) + garbage(?:m[ae]n|wom[ae]n): waste collector(s) + lady lawyer: lawyer + ladylike: courteous + mail(?:m[ae]n|wom[ae]n): mail carriers + man and wife: husband and wife + man enough: strong enough + mankind: human kind + manmade: manufactured + manpower: personnel + middle(?:m[ae]n|wom[ae]n): intermediary + news(?:m[ae]n|wom[ae]n): journalist(s) + ombuds(?:man|woman): ombuds + oneupmanship: upstaging + poetess: poet + police(?:m[ae]n|wom[ae]n): police officer(s) + repair(?:m[ae]n|wom[ae]n): technician(s) + sales(?:m[ae]n|wom[ae]n): salesperson or sales people + service(?:m[ae]n|wom[ae]n): soldier(s) + steward(?:ess)?: flight attendant + tribes(?:m[ae]n|wom[ae]n): tribe member(s) + waitress: waiter + woman doctor: doctor + woman scientist[s]?: scientist(s) + work(?:m[ae]n|wom[ae]n): worker(s) diff --git a/.vale/styles/Microsoft/GeneralURL.yml b/.vale/styles/Microsoft/GeneralURL.yml new file mode 100644 index 0000000000..dcef503d99 --- /dev/null +++ b/.vale/styles/Microsoft/GeneralURL.yml @@ -0,0 +1,11 @@ +extends: existence +message: "For a general audience, use 'address' rather than 'URL'." +link: https://docs.microsoft.com/en-us/style-guide/urls-web-addresses +level: warning +action: + name: replace + params: + - URL + - address +tokens: + - URL diff --git a/.vale/styles/Microsoft/HeadingAcronyms.yml b/.vale/styles/Microsoft/HeadingAcronyms.yml new file mode 100644 index 0000000000..9dc3b6c2de --- /dev/null +++ b/.vale/styles/Microsoft/HeadingAcronyms.yml @@ -0,0 +1,7 @@ +extends: existence +message: "Avoid using acronyms in a title or heading." +link: https://docs.microsoft.com/en-us/style-guide/acronyms#be-careful-with-acronyms-in-titles-and-headings +level: warning +scope: heading +tokens: + - '[A-Z]{2,4}' diff --git a/.vale/styles/Microsoft/HeadingColons.yml b/.vale/styles/Microsoft/HeadingColons.yml new file mode 100644 index 0000000000..7013c39148 --- /dev/null +++ b/.vale/styles/Microsoft/HeadingColons.yml @@ -0,0 +1,8 @@ +extends: existence +message: "Capitalize '%s'." +link: https://docs.microsoft.com/en-us/style-guide/punctuation/colons +nonword: true +level: error +scope: heading +tokens: + - ':\s[a-z]' diff --git a/.vale/styles/Microsoft/HeadingPunctuation.yml b/.vale/styles/Microsoft/HeadingPunctuation.yml new file mode 100644 index 0000000000..4954cb11ae --- /dev/null +++ b/.vale/styles/Microsoft/HeadingPunctuation.yml @@ -0,0 +1,13 @@ +extends: existence +message: "Don't use end punctuation in headings." +link: https://docs.microsoft.com/en-us/style-guide/punctuation/periods +nonword: true +level: warning +scope: heading +action: + name: edit + params: + - trim_right + - ".?!" +tokens: + - "[a-z][.?!]$" diff --git a/.vale/styles/Microsoft/Headings.yml b/.vale/styles/Microsoft/Headings.yml new file mode 100644 index 0000000000..63624edc1b --- /dev/null +++ b/.vale/styles/Microsoft/Headings.yml @@ -0,0 +1,28 @@ +extends: capitalization +message: "'%s' should use sentence-style capitalization." +link: https://docs.microsoft.com/en-us/style-guide/capitalization +level: suggestion +scope: heading +match: $sentence +indicators: + - ':' +exceptions: + - Azure + - CLI + - Code + - Cosmos + - Docker + - Emmet + - I + - Kubernetes + - Linux + - macOS + - Marketplace + - MongoDB + - REPL + - Studio + - TypeScript + - URLs + - Visual + - VS + - Windows diff --git a/.vale/styles/Microsoft/Hyphens.yml b/.vale/styles/Microsoft/Hyphens.yml new file mode 100644 index 0000000000..7e5731c995 --- /dev/null +++ b/.vale/styles/Microsoft/Hyphens.yml @@ -0,0 +1,14 @@ +extends: existence +message: "'%s' doesn't need a hyphen." +link: https://docs.microsoft.com/en-us/style-guide/punctuation/dashes-hyphens/hyphens +level: warning +ignorecase: false +nonword: true +action: + name: edit + params: + - regex + - "-" + - " " +tokens: + - '\b[^\s-]+ly-\w+\b' diff --git a/.vale/styles/Microsoft/Negative.yml b/.vale/styles/Microsoft/Negative.yml new file mode 100644 index 0000000000..d73221f539 --- /dev/null +++ b/.vale/styles/Microsoft/Negative.yml @@ -0,0 +1,13 @@ +extends: existence +message: "Form a negative number with an en dash, not a hyphen." +link: https://docs.microsoft.com/en-us/style-guide/numbers +nonword: true +level: error +action: + name: edit + params: + - regex + - "-" + - "–" +tokens: + - '(?<=\s)-\d+(?:\.\d+)?\b' diff --git a/.vale/styles/Microsoft/Ordinal.yml b/.vale/styles/Microsoft/Ordinal.yml new file mode 100644 index 0000000000..e3483e380c --- /dev/null +++ b/.vale/styles/Microsoft/Ordinal.yml @@ -0,0 +1,13 @@ +extends: existence +message: "Don't add -ly to an ordinal number." +link: https://docs.microsoft.com/en-us/style-guide/numbers +level: error +action: + name: edit + params: + - trim + - ly +tokens: + - firstly + - secondly + - thirdly diff --git a/.vale/styles/Microsoft/OxfordComma.yml b/.vale/styles/Microsoft/OxfordComma.yml new file mode 100644 index 0000000000..493b55c3ce --- /dev/null +++ b/.vale/styles/Microsoft/OxfordComma.yml @@ -0,0 +1,8 @@ +extends: existence +message: "Use the Oxford comma in '%s'." +link: https://docs.microsoft.com/en-us/style-guide/punctuation/commas +scope: sentence +level: suggestion +nonword: true +tokens: + - '(?:[^\s,]+,){1,} \w+ (?:and|or) \w+[.?!]' diff --git a/.vale/styles/Microsoft/Passive.yml b/.vale/styles/Microsoft/Passive.yml new file mode 100644 index 0000000000..102d377cac --- /dev/null +++ b/.vale/styles/Microsoft/Passive.yml @@ -0,0 +1,183 @@ +extends: existence +message: "'%s' looks like passive voice." +ignorecase: true +level: suggestion +raw: + - \b(am|are|were|being|is|been|was|be)\b\s* +tokens: + - '[\w]+ed' + - awoken + - beat + - become + - been + - begun + - bent + - beset + - bet + - bid + - bidden + - bitten + - bled + - blown + - born + - bought + - bound + - bred + - broadcast + - broken + - brought + - built + - burnt + - burst + - cast + - caught + - chosen + - clung + - come + - cost + - crept + - cut + - dealt + - dived + - done + - drawn + - dreamt + - driven + - drunk + - dug + - eaten + - fallen + - fed + - felt + - fit + - fled + - flown + - flung + - forbidden + - foregone + - forgiven + - forgotten + - forsaken + - fought + - found + - frozen + - given + - gone + - gotten + - ground + - grown + - heard + - held + - hidden + - hit + - hung + - hurt + - kept + - knelt + - knit + - known + - laid + - lain + - leapt + - learnt + - led + - left + - lent + - let + - lighted + - lost + - made + - meant + - met + - misspelt + - mistaken + - mown + - overcome + - overdone + - overtaken + - overthrown + - paid + - pled + - proven + - put + - quit + - read + - rid + - ridden + - risen + - run + - rung + - said + - sat + - sawn + - seen + - sent + - set + - sewn + - shaken + - shaven + - shed + - shod + - shone + - shorn + - shot + - shown + - shrunk + - shut + - slain + - slept + - slid + - slit + - slung + - smitten + - sold + - sought + - sown + - sped + - spent + - spilt + - spit + - split + - spoken + - spread + - sprung + - spun + - stolen + - stood + - stridden + - striven + - struck + - strung + - stuck + - stung + - stunk + - sung + - sunk + - swept + - swollen + - sworn + - swum + - swung + - taken + - taught + - thought + - thrived + - thrown + - thrust + - told + - torn + - trodden + - understood + - upheld + - upset + - wed + - wept + - withheld + - withstood + - woken + - won + - worn + - wound + - woven + - written + - wrung diff --git a/.vale/styles/Microsoft/Percentages.yml b/.vale/styles/Microsoft/Percentages.yml new file mode 100644 index 0000000000..b68a7363f4 --- /dev/null +++ b/.vale/styles/Microsoft/Percentages.yml @@ -0,0 +1,7 @@ +extends: existence +message: "Use a numeral plus the units." +link: https://docs.microsoft.com/en-us/style-guide/numbers +nonword: true +level: error +tokens: + - '\b[a-zA-z]+\spercent\b' diff --git a/.vale/styles/Microsoft/Plurals.yml b/.vale/styles/Microsoft/Plurals.yml new file mode 100644 index 0000000000..1bb6660ade --- /dev/null +++ b/.vale/styles/Microsoft/Plurals.yml @@ -0,0 +1,7 @@ +extends: existence +message: "Don't add '%s' to a singular noun. Use plural instead." +ignorecase: true +level: error +link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/s/s-es +raw: + - '\(s\)|\(es\)' diff --git a/.vale/styles/Microsoft/Quotes.yml b/.vale/styles/Microsoft/Quotes.yml new file mode 100644 index 0000000000..38f4976061 --- /dev/null +++ b/.vale/styles/Microsoft/Quotes.yml @@ -0,0 +1,7 @@ +extends: existence +message: 'Punctuation should be inside the quotes.' +link: https://docs.microsoft.com/en-us/style-guide/punctuation/quotation-marks +level: error +nonword: true +tokens: + - '["“][^"”“]+["”][.,]' diff --git a/.vale/styles/Microsoft/RangeTime.yml b/.vale/styles/Microsoft/RangeTime.yml new file mode 100644 index 0000000000..72d8bbfbe3 --- /dev/null +++ b/.vale/styles/Microsoft/RangeTime.yml @@ -0,0 +1,13 @@ +extends: existence +message: "Use 'to' instead of a dash in '%s'." +link: https://docs.microsoft.com/en-us/style-guide/numbers +nonword: true +level: error +action: + name: edit + params: + - regex + - "[-–]" + - "to" +tokens: + - '\b(?:AM|PM)\s?[-–]\s?.+(?:AM|PM)\b' diff --git a/.vale/styles/Microsoft/Semicolon.yml b/.vale/styles/Microsoft/Semicolon.yml new file mode 100644 index 0000000000..4d905467dd --- /dev/null +++ b/.vale/styles/Microsoft/Semicolon.yml @@ -0,0 +1,8 @@ +extends: existence +message: "Try to simplify this sentence." +link: https://docs.microsoft.com/en-us/style-guide/punctuation/semicolons +nonword: true +scope: sentence +level: suggestion +tokens: + - ';' diff --git a/.vale/styles/Microsoft/SentenceLength.yml b/.vale/styles/Microsoft/SentenceLength.yml new file mode 100644 index 0000000000..f248cf0513 --- /dev/null +++ b/.vale/styles/Microsoft/SentenceLength.yml @@ -0,0 +1,7 @@ +extends: occurrence +message: "Try to keep sentences short (< 30 words)." +scope: sentence +level: suggestion +max: 30 +token: \b(\w+)\b + diff --git a/.vale/styles/Microsoft/Spacing.yml b/.vale/styles/Microsoft/Spacing.yml new file mode 100644 index 0000000000..bbd10e51df --- /dev/null +++ b/.vale/styles/Microsoft/Spacing.yml @@ -0,0 +1,8 @@ +extends: existence +message: "'%s' should have one space." +link: https://docs.microsoft.com/en-us/style-guide/punctuation/periods +level: error +nonword: true +tokens: + - '[a-z][.?!] {2,}[A-Z]' + - '[a-z][.?!][A-Z]' diff --git a/.vale/styles/Microsoft/Suspended.yml b/.vale/styles/Microsoft/Suspended.yml new file mode 100644 index 0000000000..7282e9c9cf --- /dev/null +++ b/.vale/styles/Microsoft/Suspended.yml @@ -0,0 +1,7 @@ +extends: existence +message: "Don't use '%s' unless space is limited." +link: https://docs.microsoft.com/en-us/style-guide/punctuation/dashes-hyphens/hyphens +ignorecase: true +level: warning +tokens: + - '\w+- and \w+-' diff --git a/.vale/styles/Microsoft/Terms.yml b/.vale/styles/Microsoft/Terms.yml new file mode 100644 index 0000000000..65fca10aaa --- /dev/null +++ b/.vale/styles/Microsoft/Terms.yml @@ -0,0 +1,42 @@ +extends: substitution +message: "Prefer '%s' over '%s'." +# term preference should be based on microsoft style guide, such as +link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/a/adapter +level: warning +ignorecase: true +action: + name: replace +swap: + "(?:agent|virtual assistant|intelligent personal assistant)": personal digital assistant + "(?:assembler|machine language)": assembly language + "(?:drive C:|drive C>|C: drive)": drive C + "(?:internet bot|web robot)s?": bot(s) + "(?:microsoft cloud|the cloud)": cloud + "(?:mobile|smart) ?phone": phone + "24/7": every day + "audio(?:-| )book": audiobook + "back(?:-| )light": backlight + "chat ?bots?": chatbot(s) + adaptor: adapter + administrate: administer + afterwards: afterward + alphabetic: alphabetical + alphanumerical: alphanumeric + an URL: a URL + anti-aliasing: antialiasing + anti-malware: antimalware + anti-spyware: antispyware + anti-virus: antivirus + appendixes: appendices + artificial intelligence: AI + caap: CaaP + conversation-as-a-platform: conversation as a platform + eb: EB + gb: GB + gbps: Gbps + kb: KB + keypress: keystroke + mb: MB + pb: PB + tb: TB + zb: ZB diff --git a/.vale/styles/Microsoft/URLFormat.yml b/.vale/styles/Microsoft/URLFormat.yml new file mode 100644 index 0000000000..4e24aa59fe --- /dev/null +++ b/.vale/styles/Microsoft/URLFormat.yml @@ -0,0 +1,9 @@ +extends: substitution +message: Use 'of' (not 'for') to describe the relationship of the word URL to a resource. +ignorecase: true +link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/u/url +level: suggestion +action: + name: replace +swap: + URL for: URL of diff --git a/.vale/styles/Microsoft/Units.yml b/.vale/styles/Microsoft/Units.yml new file mode 100644 index 0000000000..f062418ee0 --- /dev/null +++ b/.vale/styles/Microsoft/Units.yml @@ -0,0 +1,16 @@ +extends: existence +message: "Don't spell out the number in '%s'." +link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/units-of-measure-terms +level: error +raw: + - '[a-zA-Z]+\s' +tokens: + - '(?:centi|milli)?meters' + - '(?:kilo)?grams' + - '(?:kilo)?meters' + - '(?:mega)?pixels' + - cm + - inches + - lb + - miles + - pounds diff --git a/.vale/styles/Microsoft/Vocab.yml b/.vale/styles/Microsoft/Vocab.yml new file mode 100644 index 0000000000..eebe97b15e --- /dev/null +++ b/.vale/styles/Microsoft/Vocab.yml @@ -0,0 +1,25 @@ +extends: existence +message: "Verify your use of '%s' with the A-Z word list." +link: 'https://docs.microsoft.com/en-us/style-guide' +level: suggestion +ignorecase: true +tokens: + - above + - accessible + - actionable + - against + - alarm + - alert + - alias + - allows? + - and/or + - as well as + - assure + - author + - avg + - beta + - ensure + - he + - insure + - sample + - she diff --git a/.vale/styles/Microsoft/We.yml b/.vale/styles/Microsoft/We.yml new file mode 100644 index 0000000000..97c901c1ba --- /dev/null +++ b/.vale/styles/Microsoft/We.yml @@ -0,0 +1,11 @@ +extends: existence +message: "Try to avoid using first-person plural like '%s'." +link: https://docs.microsoft.com/en-us/style-guide/grammar/person#avoid-first-person-plural +level: warning +ignorecase: true +tokens: + - we + - we'(?:ve|re) + - ours? + - us + - let's diff --git a/.vale/styles/Microsoft/Wordiness.yml b/.vale/styles/Microsoft/Wordiness.yml new file mode 100644 index 0000000000..8a4fea7483 --- /dev/null +++ b/.vale/styles/Microsoft/Wordiness.yml @@ -0,0 +1,127 @@ +extends: substitution +message: "Consider using '%s' instead of '%s'." +link: https://docs.microsoft.com/en-us/style-guide/word-choice/use-simple-words-concise-sentences +ignorecase: true +level: suggestion +action: + name: replace +swap: + "sufficient number(?: of)?": enough + (?:extract|take away|eliminate): remove + (?:in order to|as a means to): to + (?:inform|let me know): tell + (?:previous|prior) to: before + (?:utilize|make use of): use + a (?:large)? majority of: most + a (?:large)? number of: many + a myriad of: myriad + adversely impact: hurt + all across: across + all of a sudden: suddenly + all of these: these + all of(?! a sudden| these): all + all-time record: record + almost all: most + almost never: seldom + along the lines of: similar to + an adequate number of: enough + an appreciable number of: many + an estimated: about + any and all: all + are in agreement: agree + as a matter of fact: in fact + as a means of: to + as a result of: because of + as of yet: yet + as per: per + at a later date: later + at all times: always + at the present time: now + at this point in time: at this point + based in large part on: based on + based on the fact that: because + basic necessity: necessity + because of the fact that: because + came to a realization: realized + came to an abrupt end: ended abruptly + carry out an evaluation of: evaluate + close down: close + closed down: closed + complete stranger: stranger + completely separate: separate + concerning the matter of: regarding + conduct a review of: review + conduct an investigation: investigate + conduct experiments: experiment + continue on: continue + despite the fact that: although + disappear from sight: disappear + doomed to fail: doomed + drag and drop: drag + drag-and-drop: drag + due to the fact that: because + during the period of: during + during the time that: while + emergency situation: emergency + establish connectivity: connect + except when: unless + excessive number: too many + extend an invitation: invite + fall down: fall + fell down: fell + for the duration of: during + gather together: gather + has the ability to: can + has the capacity to: can + has the opportunity to: could + hold a meeting: meet + if this is not the case: if not + in a careful manner: carefully + in a thoughtful manner: thoughtfully + in a timely manner: timely + in addition: also + in an effort to: to + in between: between + in lieu of: instead of + in many cases: often + in most cases: usually + in order to: to + in some cases: sometimes + in spite of the fact that: although + in spite of: despite + in the (?:very)? near future: soon + in the event that: if + in the neighborhood of: roughly + in the vicinity of: close to + it would appear that: apparently + lift up: lift + made reference to: referred to + make reference to: refer to + mix together: mix + none at all: none + not in a position to: unable + not possible: impossible + of major importance: important + perform an assessment of: assess + pertaining to: about + place an order: order + plays a key role in: is essential to + present time: now + readily apparent: apparent + some of the: some + span across: span + subsequent to: after + successfully complete: complete + take action: act + take into account: consider + the question as to whether: whether + there is no doubt but that: doubtless + this day and age: this age + this is a subject that: this subject + time (?:frame|period): time + under the provisions of: under + until such time as: until + used for fuel purposes: used for fuel + whether or not: whether + with regard to: regarding + with the exception of: except for diff --git a/.vale/styles/Microsoft/meta.json b/.vale/styles/Microsoft/meta.json new file mode 100644 index 0000000000..297719bbbf --- /dev/null +++ b/.vale/styles/Microsoft/meta.json @@ -0,0 +1,4 @@ +{ + "feed": "https://github.com/errata-ai/Microsoft/releases.atom", + "vale_version": ">=1.0.0" +} From 2091b1fe6fbae6e738d014c820b826a3c7de4261 Mon Sep 17 00:00:00 2001 From: "devin.logan" Date: Fri, 28 Aug 2026 18:29:32 +0000 Subject: [PATCH 5/7] docs: drop framing of prompt mode as a change Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- fern/products/docs/pages/ask-fern/ask-ai-chat.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fern/products/docs/pages/ask-fern/ask-ai-chat.mdx b/fern/products/docs/pages/ask-fern/ask-ai-chat.mdx index 6cf672317f..b31b658246 100644 --- a/fern/products/docs/pages/ask-fern/ask-ai-chat.mdx +++ b/fern/products/docs/pages/ask-fern/ask-ai-chat.mdx @@ -135,7 +135,7 @@ description: Embed Fern's Ask AI chat panel in any React application, with a flo ## Bottom prompt -`trigger="prompt"` replaces the corner launcher with a single-line input pinned to the bottom center of the viewport. Sending a question opens the chat directly above the input with that question already in flight. +`trigger="prompt"` renders a single-line input pinned to the bottom center of the viewport instead of a button. Sending a question opens the chat directly above the input with that question already in flight. ```tsx From 536f6f30ac665d197e23c75ab7251b2413a7e655 Mon Sep 17 00:00:00 2001 From: "devin.logan" Date: Fri, 28 Aug 2026 18:32:05 +0000 Subject: [PATCH 6/7] docs: fold bottom prompt section into the trigger param Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- fern/products/docs/pages/ask-fern/ask-ai-chat.mdx | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/fern/products/docs/pages/ask-fern/ask-ai-chat.mdx b/fern/products/docs/pages/ask-fern/ask-ai-chat.mdx index b31b658246..73084e1a9d 100644 --- a/fern/products/docs/pages/ask-fern/ask-ai-chat.mdx +++ b/fern/products/docs/pages/ask-fern/ask-ai-chat.mdx @@ -133,16 +133,6 @@ description: Embed Fern's Ask AI chat panel in any React application, with a flo -## Bottom prompt - -`trigger="prompt"` renders a single-line input pinned to the bottom center of the viewport instead of a button. Sending a question opens the chat directly above the input with that question already in flight. - -```tsx - -``` - -`placement` doesn't apply in this mode. Set the chat width with `--fern-ask-ai-prompt-card-width`. - ## Properties All standard HTML button attributes are also supported and forwarded to the trigger button. @@ -172,7 +162,7 @@ All standard HTML button attributes are also supported and forwarded to the trig - `floating` renders a styled launcher pinned to a corner of the viewport. `inline` renders an unpainted button to place and style yourself, such as in a nav bar. Both carry the sparkle icon and an `Ask AI` label by default. `prompt` renders the composer itself, centered at the bottom of the viewport, and the chat rises from it on send: see [Bottom prompt](#bottom-prompt). `none` renders no trigger at all, for [driving the open state from your own UI](#custom-triggers). + `floating` renders a styled launcher pinned to a corner of the viewport. `inline` renders an unpainted button to place and style yourself, such as in a nav bar. Both carry the sparkle icon and an `Ask AI` label by default. `prompt` renders a single-line input pinned to the bottom center of the viewport instead of a button, and sending a question opens the chat directly above it with that question already in flight. It ignores `placement`, and takes its width from `--fern-ask-ai-prompt-card-width`. `none` renders no trigger at all, for [driving the open state from your own UI](#custom-triggers). @@ -188,7 +178,7 @@ All standard HTML button attributes are also supported and forwarded to the trig - The corner the launcher and card anchor to. + The corner the launcher and card anchor to. Ignored when `trigger` is `prompt`. From eb75b20685c1ab296509e9394761698a409cf03c Mon Sep 17 00:00:00 2001 From: "adi.david" Date: Fri, 28 Aug 2026 19:49:24 +0000 Subject: [PATCH 7/7] docs: correct the prompt trigger's width variables Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- fern/products/docs/pages/ask-fern/ask-ai-chat.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fern/products/docs/pages/ask-fern/ask-ai-chat.mdx b/fern/products/docs/pages/ask-fern/ask-ai-chat.mdx index 73084e1a9d..38a37fd5ee 100644 --- a/fern/products/docs/pages/ask-fern/ask-ai-chat.mdx +++ b/fern/products/docs/pages/ask-fern/ask-ai-chat.mdx @@ -162,7 +162,7 @@ All standard HTML button attributes are also supported and forwarded to the trig - `floating` renders a styled launcher pinned to a corner of the viewport. `inline` renders an unpainted button to place and style yourself, such as in a nav bar. Both carry the sparkle icon and an `Ask AI` label by default. `prompt` renders a single-line input pinned to the bottom center of the viewport instead of a button, and sending a question opens the chat directly above it with that question already in flight. It ignores `placement`, and takes its width from `--fern-ask-ai-prompt-card-width`. `none` renders no trigger at all, for [driving the open state from your own UI](#custom-triggers). + `floating` renders a styled launcher pinned to a corner of the viewport. `inline` renders an unpainted button to place and style yourself, such as in a nav bar. Both carry the sparkle icon and an `Ask AI` label by default. `prompt` renders a single-line input pinned to the bottom center of the viewport instead of a button, and sending a question opens the chat directly above it with that question already in flight. It ignores `placement`, sizes the input with `--fern-ask-ai-prompt-width` and `--fern-ask-ai-prompt-width-focus`, and the chat it opens with `--fern-ask-ai-prompt-card-width`. Below 768px the chat is the same bottom drawer the corner launcher opens. `none` renders no trigger at all, for [driving the open state from your own UI](#custom-triggers).