Skip to content

docs: scaffold docs.reqnroll.net content site with devcontainer (issue #63) - #413

Merged
clrudolphi merged 48 commits into
masterfrom
docs/site-content-drafting
Aug 7, 2026
Merged

docs: scaffold docs.reqnroll.net content site with devcontainer (issue #63)#413
clrudolphi merged 48 commits into
masterfrom
docs/site-content-drafting

Conversation

@clrudolphi

@clrudolphi clrudolphi commented Jul 31, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Adds docs/site/ide-support/ authoring the user-facing documentation for the Reqnroll IDE Support (Preview) extensions, per the outline proposed in ToDo: Create Documentation for docs.reqnroll.net #63.
  • Adds a dev container (docs/site/.devcontainer/) plus conf.py/requirements.txt/Makefile mirroring reqnroll/Reqnroll's docs/.devcontainer setup, so the tree builds/previews standalone with Sphinx from this repo.
  • Drafts real prose for every page in the outline (installation per-IDE, upgrading, feature overview matrix, editing/navigation feature pages, defining steps, settings, EditorConfig, troubleshooting), sourced from docs/LSP-IDE-Support-Feature-Designs.md.
  • Revises the outline (see docs/site/OUTLINE.md) to add F24 (Hook Match CodeLens) and F25 (Hook Match Count CodeLens), which shipped after the original ToDo: Create Documentation for docs.reqnroll.net #63 comment and were missing from §5h.
  • Screenshot/gif capture points are marked TODO(media) pending a live IDE session — no fabricated media.
  • Publishing to docs.reqnroll.net is not automated yet; see docs/site/README.md for the proposed sync-PR approach from ToDo: Create Documentation for docs.reqnroll.net #63's second comment.

Test plan

  • sphinx-build runs clean from docs/site/ (only expected warning: README.md not in a toctree, since it's a repo readme, not a doc page)
  • Review page content for accuracy against the current extensions before merge
  • Capture and drop in real screenshots/gifs at each TODO(media) marker

🤖 Generated with Claude Code

clrudolphi and others added 30 commits July 30, 2026 19:05
…#63)

Adds docs/site/ide-support/ mirroring reqnroll/Reqnroll's MyST/Sphinx doc
conventions, with a devcontainer/requirements.txt/conf.py copied from that
repo's docs/.devcontainer so contributors can build and preview without
checking it out. Drafts real content for every page in the issue #63
outline, revised to add F24/F25 (Hook Match CodeLens) which shipped after
the outline was last updated. Screenshot/gif capture points are marked
TODO(media) pending a live IDE session.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The Rider install page was the only one written against the
not-yet-published, build-from-source state, inconsistent with the VS/VS
Code pages which already assume marketplace availability. Align it with
the same assumption used elsewhere in these docs.
The legacy Visual Studio extension docs page this settings table lives on
will eventually be retired, and the settings themselves don't change, so
copy the content in directly rather than pointing readers at a page we'll
need to have copied over anyway.
Checked src/Rider: ReqnrollFeatureOnTypeFormattingHandler.kt (with unit
tests) implements on-type "|" table realignment, and
ReqnrollLspServerDescriptor.lspFormattingSupport wires whole-document
Format through the platform's built-in LspFormattingService, both
confirmed against the real Rider 2024.3.5 jar per the code comments there.
Unlike the completion case (#414), this is a real, tested implementation,
not just a suggestive comment — no follow-up issue needed, the page can
state it as fact.
Converts syntax-highlighting.md's single TODO(media) note into a tab-set
with one tab per IDE (Visual Studio/VS Code/Rider), each with its own
sync key. Verified live in a browser: selecting a tab writes to
sessionStorage and is still selected after navigating to another page and
back, so a reader's IDE choice carries across the whole site for the rest
of their session.

Adds sphinx_design to requirements.txt/conf.py, and documents the
:sync: vs/vscode/rider convention in README.md for converting the
remaining TODO(media) pages. Note for the eventual sync into
reqnroll/Reqnroll: that repo's own conf.py doesn't load sphinx_design yet
and will need it added.
Applies the sphinx-design tab-set pattern (verified in the syntax-
highlighting.md proof of concept) across the rest of the site: every
editing/navigation feature page with an IDE-varying screenshot or gif now
uses a :sync: vs/vscode/rider tab-set, so a reader's IDE choice carries
across all of them.

Also, three content fixes:

- Move Rename Step from navigation-features/ to editing-features/ — it's
  an editing-time refactor, not a navigation feature. Updated its
  toctrees, the feature-overview.md table, and troubleshooting.md's link.

- Split New Project / Item Templates out of defining-steps.md into its
  own page (new-project-templates.md), added to the landing page toctree
  and feature-overview.md. It's a distinct, Visual-Studio-only feature
  from step-definition scaffolding, not a subsection of it.

- Document, per IDE and inside the relevant tab, exactly how to invoke
  every feature that requires a custom Reqnroll menu or context-menu
  entry rather than a generic IDE gesture (Find Step Usages, Find Unused
  Step Definitions, Hook Navigation, Rename Step's ambiguous-binding
  picker, Comment/Uncomment's menu fallback) — sourced from the actual
  command placement in src/VisualStudio (ReqnrollMenu.cs, each command's
  CommandConfiguration) and src/Rider/plugin.xml, plus the VS Code
  package.json contributions. This closes a real gap: find-usages.md
  previously told Visual Studio users the native "Find All References"
  doesn't work and to "use the entry point documented above" without ever
  naming what that entry point was.
…bled

Both extensions can be installed at once without conflict, but running
both enabled simultaneously is not supported (duplicate diagnostics,
CodeLens, etc. on the same .feature files). The previous wording only
said installing one doesn't disable the other, which reads as
implicitly endorsing running both at once. Corrected on the landing
page, the troubleshooting FAQ, and the Visual Studio install page, with
the fix pointing readers at Extensions > Manage Extensions to disable
whichever one they're not using.
Adds a tab-set section to troubleshooting.md covering, per IDE, where
Reqnroll's LSP server/extension logs are written and how (if at all) to
raise verbosity: VS Code's reqnroll.trace.server setting, Visual Studio's
REQNROLLVS_DEBUG env var (extension-side only, doesn't touch the server's
own log level), and Rider (no user-facing control at all). Sourced from
SynchronousFileLogger/LspIdeSupportLogger/Program.cs (VS/server),
lspInspectorLogger.ts + package.json (VS Code), and
ReqnrollDebugLogger.kt (Rider).

Checked for an existing tracking issue before filing a new one: #291
("No shared user-configuration story across the three clients") already
covers exactly this gap, so the docs link it rather than duplicating it.
…ture

The opening paragraph led with "single LSP server behind three thin
clients" — implementation detail end users don't care about. Reworded to
lead with what matters to them: Reqnroll now supports all three major
IDEs with the same advanced feature set and a consistent experience
across them.
Merges installation/visual-studio.md, vscode.md, and rider.md into a
single installation/index.md with a Visual Studio/VS Code/Rider tab-set
(:sync: vs/vscode/rider), matching the pattern used everywhere else on
the site. Verified live: tabs render correctly including the nested
admonitions inside each tab, and switching tabs works.

Fixes the one incoming link (troubleshooting.md) that pointed at the now-
deleted installation/visual-studio.md.
…docs

From the competitive documentation assessment:

- New keyboard-shortcuts.md (per-IDE tab-set) consolidates every Reqnroll
  command's shortcut/menu location in one place, sourced from what's
  already documented (and verified) on each feature page, plus each IDE's
  well-known native defaults for format/rename/go-to-declaration/quick-fix
  (clearly labeled as native, not Reqnroll-specific).

- Quick Start and Gherkin dialect/language support are already covered
  thoroughly in the main Reqnroll docs (docs.reqnroll.net) rather than
  being IDE-support-specific — link out to them (quickstart guide from
  the landing page, Feature Language reference from the two pages that
  mention dialect support) instead of duplicating that content here.

- Upgrading.md's "Release notes" section now points at the actual GitHub
  Releases page as the authoritative changelog, rather than only
  describing each IDE's native (and easy-to-miss) changelog surface.
…folders

Every page's screenshots/gifs get a sibling folder with the page's own
base name (e.g. editing-features/syntax-highlighting.md's media lives at
editing-features/syntax-highlighting/), never a shared/centralized asset
folder. This makes the embed path from any page always exactly one
segment down (<page-name>/<file>) regardless of tree depth, so there's
no path-depth arithmetic to get wrong -- the main pain point called out
with the legacy docs' unorganized media.

Naming: <ide>[-<variant>].<ext>, where <ide> is always vs/vscode/rider
(the same vocabulary already used for :sync: keys and the support-matrix
columns), extension alone conveys screenshot vs. gif, and <variant> is
only added when a page needs more than one asset per IDE.

Every existing TODO(media) note (59 of them) now states its exact
**Target:** path, and the destination folders (holding a .gitkeep) exist
for every one. Verified end-to-end with a throwaway test image + build:
MyST/Sphinx resolves and copies these sibling-folder image references
correctly with no extra configuration.

README.md's Media section rewritten to document the convention and the
fulfill-a-TODO workflow.
Adds a "Capture conventions" section to README.md covering environment
(Windows for all three IDEs, a named light theme per IDE rather than
"default" since the three don't agree, default window layout, fixed
scaling/font size, the shared Quickstart sample project as fixture),
framing (crop to the relevant pane rather than whole-window or extreme
close-up, split view for cross-file cause/effect, overlays off except on
their own page, a consistent max embed width), and gif-specific guidance
(enlarged pointer + click highlighting, pause on the payoff frame, keep
short and compressed).

Adjusts two of the originally proposed norms after discussion: "white
background matching IDE default" is inconsistent across IDEs since VS
Code's real default is dark, Visual Studio's is blue, and only Rider's is
actually light -- named a specific light theme per IDE instead. "Full-
screen captures only" is replaced with "crop to the relevant pane" --
a literal whole-window shot becomes illegible once shrunk to embed width
for anything as small as a squiggle or a single CodeLens annotation;
reserved full-window captures for install/settings pages where the
chrome itself is the subject.
Adds a three-slide carousel (Visual Studio / VS Code / Rider) between the
opening paragraph and the Preview status callout on ide-support/index.md.
Self-contained: sphinx_design's {div} directive builds the slide
structure (so images route through Sphinx's normal asset pipeline once
captured, rather than raw <img> tags that Sphinx wouldn't know to copy),
and a single {raw} html block carries the CSS/JS -- no new dependency
beyond sphinx_design, already required for the per-IDE tab-sets.

Behavior: auto-advances every 5s, pauses on hover/focus, has prev/next
buttons and dot indicators (ARIA-labeled, dots use role="tablist"), and
skips autoplay under prefers-reduced-motion while keeping manual controls
available.

Caught and fixed a real bug before verifying further: the initial colon-
fence nesting had the outer {div} fence shorter than the inner slide
fences, which silently dropped two of the three slides (only the first
rendered). Colon fences need to nest the other way -- outer longer than
inner. Verified the fix live: all 3 slides present, dots/prev/next
generated, dot-click navigation and aria-selected both correct, and
autoplay genuinely advanced a slide during manual testing.

Ships with TODO(media) placeholders (index/vs.png, index/vscode.png,
index/rider.png) like every other page, not fabricated images. README.md
notes the one thing to preserve when filling these in: the
reqnroll-hero-slide div wrapper the carousel JS depends on.
Root cause: a bare <img> as a direct flex item ignores flex-basis/
min-height:0 sizing because it's a replaced element with its own
intrinsic aspect ratio -- it rendered at its natural aspect-ratio-derived
size regardless of the flex box's actual height, overflowed the fixed-
height carousel, and got clipped by its overflow:hidden (visible as the
top of the screenshot being cut off once a real image was dropped in;
the source PNG itself was never cropped).

Fix: wrap the image in its own plain div (reqnroll-hero-media, no
intrinsic ratio of its own) that correctly participates in the flex
layout, then absolutely-position the <img> inside it with
object-fit: contain. Verified live via getBoundingClientRect(): image box
now sits entirely within the slide bounds, letterboxed correctly, no
overflow.

Also fixes the alt text on the Visual Studio slide, which had a stray
"Rider for..." (VS Code and Rider slides still TODO placeholders,
unaffected). README.md's hero-carousel exception note updated with the
corrected markup shape and the colon-fence nesting rule (outer fence
must be longer than inner -- backwards from what's visually intuitive).
…trix

- Move Defining Steps under editing-features/ (was a top-level page) --
  it's an editing-time action (a quick-fix on an unmatched step), not a
  standalone top-level concern. Fixed its own relative link to
  New Project / Item Templates and every incoming reference
  (editing-features/index.md, ide-support/index.md, new-project-
  templates.md, keyboard-shortcuts.md, OUTLINE.md).

- Reorder Editing Features so Document Outline is followed by Defining
  Steps, Rename Step, Code Lens, Inlay Hints, per request.

- Unify terminology: the matrix said "Step Definition Scaffolding," every
  other page said "Defining Steps" -- now consistently "Defining Steps"
  everywhere, matching the page title.

- Code Lens question: kept it in Editing Features rather than moving to
  Navigation. Rationale -- Find Step Usages/Hook Navigation are invoked
  commands (you do something); Code Lens is a passive annotation you see
  unprompted while reading code, same category as diagnostics/inlay
  hints. Added explicit two-way cross-links instead of merging the
  sections: a "Also surfaced via Code Lens" callout on the Navigation
  Features matrix section, and a tip on find-usages.md/hook-navigation.md
  pointing back to Code Lens as the passive alternative.

- Rewrote the feature-overview matrix's legend and every rating. The old
  legend exposed internal implementation classification the end user
  can't act on (warning triangle = "needs a small IDE-side setting" with
  no setting ever named; wrench = "custom Reqnroll code was required," an
  implementation detail, not something readers care about). Re-derived
  every cell from what each feature's own page actually says works --
  almost every wrench/warning in the old matrix turned out to just mean
  "works fine, implemented differently," and is now a plain checkmark.
  The three symbols left mean exactly one thing each: works, works-with-
  a-caveat-see-the-note, or not-available-see-the-alternative. Grouped
  into Editing / Navigation / Project Setup sections matching the site's
  own page structure, and every real caveat now has a footnote that
  names the actual thing to expect (e.g. Rider completion/scaffolding
  unconfirmed and tracked in #414, VS's Find All References not routing
  to Reqnroll bindings, VS's native Document Outline not supporting
  .feature files at all).

Verified live: rebuilt clean (only the two expected non-toctree
warnings), confirmed the Editing Features sidebar order and the
restructured matrix both render as intended.
…-highlighting

Replaces the TODO(media) placeholders with the actual captures now that
they exist, for the four Editing Features pages that had a VS tab pending.
Embed width is capped for the three-column tab layout, so fine detail in
a capture (a squiggle, a single inlay hint) can be hard to make out.
Clicking any content image now opens it near-full-size over a dark
overlay; dismiss with another click, the close button, or Esc.

Implemented as plain static CSS/JS registered via html_css_files/
html_js_files rather than a Sphinx extension, so nothing new needs adding
to requirements.txt when this syncs into reqnroll/Reqnroll — just the two
files plus two conf.py lines, working under whatever theme that repo uses
since [role="main"] is the standard Sphinx main-content landmark.
Explains the candidate-file targeting shipped for #417: existing binding
files that already cover the feature are offered first (appended to),
with a new-file option alongside; notes that Visual Studio's own quick-fix
menu can show the two in either order (alphabetical-by-title fallback),
unlike VS Code/Rider which preserve the intended order.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Restructures rename-step.md so each IDE tab documents three distinct
scenarios instead of one generic "renaming a step" gif:
- Renaming from the .feature file
- Renaming from the C# binding expression
- Renaming an ambiguously bound step, with the disambiguation picker
  shown (Visual Studio and Rider only -- VS Code doesn't support
  disambiguation, per the existing known-limitation admonition, so its
  tab only gets the first two slots)

Target paths: vs-feature.gif/vs-cs.gif/vs-picker.gif,
vscode-feature.gif/vscode-cs.gif, rider-feature.gif/rider-cs.gif/
rider-picker.gif.

The existing rename-step/vs.gif was already captured before this
restructure -- confirmed with the user which of the three scenarios it
actually shows (feature-side rename) rather than guessing from a single
extracted frame, renamed it to vs-feature.gif, and embedded it in place
of that slot's TODO.
The "known limitation" admonition applies only to VS Code but was
rendering below the whole tab-set, visible regardless of which tab was
selected. Moved it inside the VS Code tab-item specifically.

Hit the same colon-fence nesting bug as the hero carousel: the
admonition's ::: (3 colons) collided with the outer :::{tab-set} (also
3 colons) -- nested colon fences need the outer one to be longer, so
bumped the tab-set to ::::  (4 colons). Without this the Rider tab
silently vanished from the build with no warning. Verified live: all
three tabs present, admonition confirmed nested inside the VS Code
tab-content div specifically (not Visual Studio's or Rider's).

Also tightened wording on the other two tabs that referenced "the note
below" / "tabs above" -- those no longer make sense with the note living
inside one specific tab instead of below the whole tab-set.
Fulfills the VS TODO(media) slots for Code Folding, Code Lens, Comment/
Uncomment, and Inlay Hints, plus the two remaining Rename Step VS gifs
(cs-side rename, ambiguous-binding picker).

Also two accuracy fixes found while capturing:
- Visual Studio does not show the inlay-hint hover tooltip (a VS
  limitation) -- the hint labels themselves still render normally.
- Code Lens click behavior spelled out precisely per direction: from a
  .cs binding file, clicking opens a results window to navigate matches;
  from a .feature file, clicking a hook lens opens a pop-up of matching
  binding methods, double-click to navigate.
… window

Known-limitation addition to F24's design doc: VS's classic CodeLens
Details popup includes a generic "Dock Popup" affordance, but the docked
frame it creates has no data channel wired to
CodeLensDetailsDescriptor/GetDetailsAsync, and no extensibility point was
found (via decompilation or SDK docs) for a custom data point to populate
it. Treat it as unsupported for this lens kind; a persistent populated
results window should reuse the Find-All-References plumbing instead, as
F25 already does.
… collision)

Root cause of the Code Lens page showing the Formatting gif: Sphinx
copies every referenced image into one shared, flat _build/html/_images/
folder using only the basename -- it does not preserve subdirectories.
Our naming convention deliberately reused bare names like "vs.gif" in
every sibling media folder, so a dozen genuinely different files all
collided on the same output basename. Sphinx disambiguates with a
numeric suffix (vs.gif, vs1.gif, vs2.gif...) assigned by document
processing order, and that assignment silently shifts whenever a new
same-named file is added -- especially across incremental
(sphinx-autobuild) rebuilds rather than a clean one. The symptom is
exactly this: a page renders someone else's image, no error or warning
anywhere. Confirmed by inspecting the actual _images/ output and each
page's rendered <img src> against source file sizes, not by guessing.

Fix: every media filename now repeats its own page-name as a prefix
(vs.gif -> code-lens-vs.gif, defining-steps-vs.gif, etc.), making every
basename unique site-wide regardless of build order. Renamed all 13
already-captured files and updated every TODO(media) Target line and
image embed across the whole site (~20 files) to match, plus every
example in README.md's Media section, which now explains why the prefix
is load-bearing rather than redundant.

Verified with a full clean rebuild: zero numeric-suffix collision
artifacts in _images/, and confirmed live in the browser that
code-lens.html now renders code-lens-vs.gif specifically.
Ports the full content of reqnroll/Reqnroll's
docs/ide-integrations/visual-studio/settings.md into settings.md's
Visual Studio tab, rather than only linking out to it: the "Add Reqnroll
configuration file" flow, the reqnroll.json JSON-schema IntelliSense
note, and the full ide section reference (editor/traceability/reqnroll/
bindingDiscovery sub-sections, converted from bullet lists to tables
where that reads better, with their examples intact).

Adapted rather than copied verbatim: internal links repointed at our own
site (../installation/configuration.md -> the absolute docs.reqnroll.net
URL, editorconfig.md -> our own EditorConfig page), and the two legacy
page's hotlinked screenshots replaced with our own TODO(media) capture
slots (config-file template screenshot, IntelliSense screenshot) per our
media convention rather than pointing at reqnroll/Reqnroll's _static
assets.

The four sub-section headings are level-4, one level past what
myst_heading_anchors auto-generates site-wide -- added explicit
(target)= anchors for each rather than changing that setting globally.
Verified live: the four in-page links (editor/traceability/reqnroll/
bindingDiscovery) all resolve, and the full ported content renders
correctly nested inside the Visual Studio tab specifically.
Downloads vs-integration-config-file.png and
vs-integration-config-intellisense.png from reqnroll/Reqnroll's own
docs/_static/images/ (same org, same content already being ported in the
prior commit) and embeds them in place of their TODO(media) placeholders,
renamed to our own convention (settings-vs-config-file.png,
settings-vs-intellisense.png).

Verified live: both images load and decode correctly in the built page.
@clrudolphi

Copy link
Copy Markdown
Collaborator Author

As of commit 9eb4bf5, the documentation and screen shots for Visual Studio are scope complete.

Points to docs/site/ide-support/ so it's discoverable from the repo
root, alongside the sync plan and issue #63 for the content outline.
…projects

When a .feature file is linked into more than one project, Code Lens,
Go to Hooks, diagnostics, and highlighting all reflect the file's home
project (wherever it physically lives on disk) regardless of which
project's node it was opened from. This is deterministic, by-design
behavior rather than a bug, but was previously undocumented and
surfaced as confusing during a live-testing session.

Adds a troubleshooting FAQ entry explaining it, cross-referenced from
Hook Navigation and Code Lens where the behavior is actually visible.
@clrudolphi clrudolphi linked an issue Aug 3, 2026 that may be closed by this pull request
completion.md: Rider completion confirmed working live (auto-negotiates
via the IntelliJ platform's generic LSP completion support, no
Rider-specific plugin code) -- replaced the "verify before relying"
warning with a confirmation note, and dropped the "wait for #414" gate
on capturing its gif.

feature-overview.md: Keyword & Step Completion's Rider cell is now a
plain checkmark instead of the shared "unconfirmed, see #414" caveat.

#414 also flagged the related F6 step-scaffolding question (Defining
Steps) as worth checking in the same session -- that one's still
unconfirmed, so split it into #437 rather than losing it when #414
closed, and repointed defining-steps.md's own admonition/TODO(media)
note and the matrix's Defining Steps footnote at the new issue.

Closed #414 on GitHub with a comment explaining the split.
defining-steps.md: Rider's F6 quick-fix confirmed working live --
auto-negotiates via the IntelliJ platform's generic LSP code-action
support (same mechanism diagnostics/completion use), no Rider-specific
plugin code needed. Replaced the "verify before documenting" warning
with a confirmation note and dropped the #437 gate on capturing its gif.

feature-overview.md: Defining Steps' Rider cell is now a plain checkmark
instead of the "unconfirmed, see #437" caveat; renumbered the remaining
footnotes (1-5) now that footnote 1 (#437) is gone.

Closed #437 on GitHub with a comment confirming the live test result.
defining-steps.md: added a "Sync vs. async skeleton style" section
confirming the generated step-definition skeleton's sync/async and
regex/Cucumber-Expression style always comes from the project's
trace.stepDefinitionSkeletonStyle setting in reqnroll.json, not from
sibling binding conventions in the target file. Links to the Reqnroll
Configuration Reference's trace section and the step-matching styles
reference for what each value produces.

Verified with a throwaway test driving the real reqnroll.json ->
DeveroomConfiguration -> CodeActionHandler pipeline against both the
sync and async setting values (test not kept). Considered also
matrixing sync/async into the offered code-action variants but decided
against it -- it would multiply the lightbulb menu past the existing
per-request action cap for a decision that's meant to be project-wide,
not per-invocation.

Closed #380 on GitHub with a comment explaining both the verification
and the UX decision to leave behavior as-is.
Drop the "confirmed live, see #380" sentence -- the section itself
documents the behavior; the issue reference isn't needed for readers.
@clrudolphi
clrudolphi force-pushed the docs/site-content-drafting branch from ccaa821 to 295c30f Compare August 4, 2026 02:15
…293)

Matches the command/action display-text change in #442: VS's Extensions
menu entry and Rider's two Rename Step context-menu entries (.feature
and .cs side) are now all "Reqnroll: Rename Step", same as VS Code's
existing "Reqnroll: Rename Step". Updates rename-step.md and
keyboard-shortcuts.md to match what end users will actually see.
…abot is live (#441)

Confirmed-stale fix: src/Rider/CONTRIBUTING.md said the committed Gradle
wrapper was "pinned to 8.10" (twice) and warned about a system Gradle
9.6.1 being ahead of it -- Dependabot's gradle-dependencies group bumped
the wrapper itself to 9.6.1 (#435), so both the number and the direction
of the warning were now wrong. Reworded to point at
gradle-wrapper.properties as the source of truth instead of restating a
number, and reframed the compat-break story as a dated historical
incident rather than a claim about current versions.

Applied the same "point at the source, don't restate a value Dependabot
can move independently of this prose" treatment to the .NET SDK 10.0
mentions in src/VSCode, src/VisualStudio, and src/LSP's CONTRIBUTING.md
(now cross-referenced to the net10.0 TargetFramework instead of a bare
number).

Two version pins get the opposite treatment -- kept as exact numbers,
but now explicitly flagged as intentional so a future pass doesn't
wrongly genericize them:
- VS Code 1.96 minimum (vscode-languageclient v10 compatibility) -- now
  stated with its reason in src/VSCode/CONTRIBUTING.md, and the
  Architecture doc's second, previously bare restatement of the same
  number now points back at the first instead of duplicating it.
- typescript capped at ^5.9.3 in package.json (typescript-eslint peer
  dependency conflict, b65a915) -- this pin previously had no prose
  explanation anywhere in CONTRIBUTING.md; added one, including why the
  caret range itself is what stops Dependabot from proposing a breaking
  bump.

Verified JDK 21 (already cross-referenced to jvmToolchain(21) inline)
and Rider platformVersion (already points at gradle.properties, never
restates the number) needed no change -- both already followed the
pattern this audit is establishing everywhere else. Node.js 22 in
src/VSCode/CONTRIBUTING.md left as plain prose: nothing in the repo
enforces or could silently drift it out of sync (no engines.node in
package.json), so there's no better source of truth to point at.

Left the "lightweight CI check to catch future drift" idea from the
issue unimplemented -- it's explicitly called out there as optional,
and infrequent-touch prose like this doesn't obviously justify the
CI-maintenance cost; noting it as a judgment call rather than doing it
speculatively.
@clrudolphi
clrudolphi marked this pull request as ready for review August 7, 2026 17:09
@clrudolphi
clrudolphi merged commit 71a5e39 into master Aug 7, 2026
17 checks passed
@clrudolphi
clrudolphi deleted the docs/site-content-drafting branch August 7, 2026 19:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ToDo: Create Documentation for docs.reqnroll.net

1 participant