Added the ProperDocs Documentation Website - #30
Merged
Conversation
Added a documentation website, built with ProperDocs (`properdocs.yml`, `requirements.txt`) on top of the existing hand-written `docs/` tree, so `docs_dir` needs no separate source folder. The site gets a generated "API Reference" section built at deploy time from the framework's XML documentation comments, via a new `gen-files` hook (`docs/build/generate-api-docs.py`) that shells out to the `xmldoc2md` local tool (newly pinned in `.config/dotnet-tools.json`). Because Roslyn never expands `<inheritdoc/>` in the emitted XML documentation file, `clinet-core` now also references `SauceControl.InheritDoc` (`PrivateAssets="all"`) to rewrite it into real text as a build step, so the generated API docs are not full of empty members. Three more build hooks handle the smaller pieces: copying the favicon to the site root, rewriting links that point outside `docs_dir` into absolute GitHub URLs, and injecting the "API Reference" nav entry into the overview page. A new light/dark logo and favicon set was added under `docs/assets/`, along with CSS that teaches the site's Material theme to honor GitHub's `#gh-dark-mode-only` / `#gh-light-mode-only` image suffixes and to swap the header logo with the color scheme. A new "Docs" GitHub Actions workflow (`.github/workflows/docs.yml`) builds and deploys the site to GitHub Pages on every push to `main`. Restructured the documentation to make room for this. Merged `docs/developer-manual/architecture/` into a single `docs/developer-manual/architecture.md`, renamed `contributing.md` to `contribution-guide.md` and `tooling/formatting-dprint.md` to `tooling/code-formatting-dprint.md`, and moved `design/DESIGN.md` to `docs/developer-manual/logo-design.md`, adding a small new `design/README.md` that just lists the asset files left behind. Added a new "Documentation Website" article describing all of the above, and updated `CLAUDE.md` and the various indexes to match. The website's own build output goes into `build/documentation-website/` (`site_dir` in `properdocs.yml`), which meant a top-level `build/` directory now existed in the repository for the first time. While touching that, the C# projects' `bin/`/`obj/` output was redirected into it too, so all build output — the website's and the .NET projects' alike — lives in the same place: a new `Directory.Build.props` under `source/` (shared by `clinet-core` and `sample-app`, keyed off each project's own folder name) and another under `tests/unit-tests` do the redirecting. `.gitignore`, the shared VS Code settings, and the CSpell ignore list were all updated from the old `bin/`/`obj/` patterns to `build/`, and `.gitignore` also picks up `node_modules/`, `.venv/`, and `__pycache__/` for the new NPM and Python tooling the website needed. Added shared VS Code `launch.json` and `tasks.json` files with a "Debug Sample App" launch configuration and its matching build task. The website's Python dependencies needed pinning in a new `requirements.txt` to match this project's policy of never using version ranges (see Dependency Management), and since that pinning had to be introduced anyway, the linters got the same treatment on the NPM side: a new `package.json` / `package-lock.json` pins `dprint`, `cspell`, and `markdownlint-cli2` instead of installing global, unlocked versions in CI and in the pre-commit hooks in `.claude/settings.json` — both now run `npm ci` once and invoke the linters through `npx`. Finally, added a `CLAUDE.md` golden rule that changes are never staged or committed automatically — only the user does that, by hand — matching a new "Never Stage or Commit Automatically" section in the commit-messages article. This work was done with the help of Claude Code, which built the ProperDocs site and its build hooks, wrote the GitHub Pages workflow, redirected the build output, migrated the linters to `npm`, and updated the documentation to match. Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Added a documentation website, built with ProperDocs (
properdocs.yml,requirements.txt) on top of the existing hand-writtendocs/tree, sodocs_dirneeds no separate source folder. The site gets a generated "API Reference" section built at deploy time from the framework's XML documentation comments, via a newgen-fileshook (docs/build/generate-api-docs.py) that shells out to thexmldoc2mdlocal tool (newly pinned in.config/dotnet-tools.json). Because Roslyn never expands<inheritdoc/>in the emitted XML documentation file,clinet-corenow also referencesSauceControl.InheritDoc(PrivateAssets="all") to rewrite it into real text as a build step, so the generated API docs are not full of empty members. Three more build hooks handle the smaller pieces: copying the favicon to the site root, rewriting links that point outsidedocs_dirinto absolute GitHub URLs, and injecting the "API Reference" nav entry into the overview page. A new light/dark logo and favicon set was added underdocs/assets/, along with CSS that teaches the site's Material theme to honor GitHub's#gh-dark-mode-only/#gh-light-mode-onlyimage suffixes and to swap the header logo with the color scheme. A new "Docs" GitHub Actions workflow (.github/workflows/docs.yml) builds and deploys the site to GitHub Pages on every push tomain.Restructured the documentation to make room for this. Merged
docs/developer-manual/architecture/into a singledocs/developer-manual/architecture.md, renamedcontributing.mdtocontribution-guide.mdandtooling/formatting-dprint.mdtotooling/code-formatting-dprint.md, and moveddesign/DESIGN.mdtodocs/developer-manual/logo-design.md, adding a small newdesign/README.mdthat just lists the asset files left behind. Added a new "Documentation Website" article describing all of the above, and updatedCLAUDE.mdand the various indexes to match.The website's own build output goes into
build/documentation-website/(site_dirinproperdocs.yml), which meant a top-levelbuild/directory now existed in the repository for the first time. While touching that, the C# projects'bin//obj/output was redirected into it too, so all build output — the website's and the .NET projects' alike — lives in the same place: a newDirectory.Build.propsundersource/(shared byclinet-coreandsample-app, keyed off each project's own folder name) and another undertests/unit-testsdo the redirecting..gitignore, the shared VS Code settings, and the CSpell ignore list were all updated from the oldbin//obj/patterns tobuild/, and.gitignorealso picks upnode_modules/,.venv/, and__pycache__/for the new NPM and Python tooling the website needed. Added shared VS Codelaunch.jsonandtasks.jsonfiles with a "Debug Sample App" launch configuration and its matching build task.The website's Python dependencies needed pinning in a new
requirements.txtto match this project's policy of never using version ranges (see Dependency Management), and since that pinning had to be introduced anyway, the linters got the same treatment on the NPM side: a newpackage.json/package-lock.jsonpinsdprint,cspell, andmarkdownlint-cli2instead of installing global, unlocked versions in CI and in the pre-commit hooks in.claude/settings.json— both now runnpm cionce and invoke the linters throughnpx.Finally, added a
CLAUDE.mdgolden rule that changes are never staged or committed automatically — only the user does that, by hand — matching a new "Never Stage or Commit Automatically" section in the commit-messages article.This work was done with the help of Claude Code, which built the ProperDocs site and its build hooks, wrote the GitHub Pages workflow, redirected the build output, migrated the linters to
npm, and updated the documentation to match.Closes issue #25.