Skip to content

docs: add MkDocs documentation site with Diátaxis structure#91

Open
jmgilman wants to merge 15 commits into
masterfrom
docs/mkdocs-site
Open

docs: add MkDocs documentation site with Diátaxis structure#91
jmgilman wants to merge 15 commits into
masterfrom
docs/mkdocs-site

Conversation

@jmgilman

@jmgilman jmgilman commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a Material for MkDocs documentation site under docs/, following a Diátaxis information architecture. Structure and decisions follow the approved proposal (session 052).

17 pages, left sidebar with collapsing groups:

  • Developer Guide (tutorial + how-tos): getting-started, networks, funding, connecting-tools
  • Operator Guide (how-tos): installation, db-sync, testing
  • Reference (generic): cli, cardanonetwork, cardanodbsync, environment, configuration
  • Recipes: every examples/ manifest, mirrored verbatim
  • Troubleshooting (how-to) and Concepts: architecture, security
  • Audience-grouped guides; Reference / Recipes / Concepts stay generic. Single-source-of-truth: CLI flags + the YACD_* contract live only in the CLI reference, CRD fields only in the CRD references, manifests only in Recipes.

Migrates docs/host-access.md into developer/connecting-tools.md.

Tooling

  • mkdocs.yml (Material theme, default collapsing nav)
  • Moon tasks root:docs and root:docs-serve (mkdocs run through uv)
  • .github/workflows/docs.yml: mkdocs build --strict on PRs touching docs; deploy to GitHub Pages on merge to master

How it was built and verified

Drafted by per-page agents grounded in the actual code, then two review passes:

  1. Accuracy — each page audited against the Go types / CRD YAML / values.yaml / cmd/options.go and the real CLI --help. Fixed in place (removed an invented kubectl prerequisite, de-duplicated manifests into Recipes, corrected a mis-attributed "admission webhook", fixed connect wrongly described as setting YACD_*, etc.).
  2. Executemkdocs build --strict is clean (no broken links/nav); helm lint/helm template pass; every documented CLI flag/default matches the binary; all 8 recipe manifests byte-match examples/ and pass CRD-schema + --dry-run validation.

Live smoke: the documented commands were run against a real yacd devnet. info, exec ... query tip, run (YACD_* injection) all behaved as documented. The live run found and fixed two host-workflow bugs the static drafts missed:

  • yacd topup must be wrapped in yacd run (with --faucet-url "$YACD_FAUCET_URL") to reach the cluster-internal faucet from a host; bare topup fails DNS resolution.
  • yacd list needs -A to show a network that lives in its own namespace.

Notes

  • This is a first complete draft. Prose is accurate and code-grounded but could use an editorial polish pass.
  • GitHub Pages must be enabled (Settings → Pages → Source: GitHub Actions) before the deploy job will publish.

🤖 Generated with Claude Code

Adds a Material for MkDocs documentation site under docs/ with a 17-page
Diátaxis information architecture: audience-grouped Developer and Operator
guides over generic Reference, Recipes, Troubleshooting, and Concepts sections.
Migrates docs/host-access.md into developer/connecting-tools.md.

Tooling: mkdocs.yml (Material theme, collapsing left-sidebar nav), Moon tasks
root:docs and root:docs-serve (mkdocs run through uv), and a GitHub Pages CI
workflow (build --strict on PRs, deploy to Pages on master).

Drafted grounded in the code and verified end to end: mkdocs build --strict is
clean, CLI flags/defaults match the binary, all recipe manifests byte-match
examples/ and pass CRD-schema + dry-run validation, and the documented commands
were run against a live yacd devnet. The live run corrected two host-workflow
bugs the static drafts missed: yacd topup must be wrapped in yacd run to reach
the cluster-internal faucet, and yacd list needs -A to show a network in its own
namespace.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kusari-inspector

kusari-inspector Bot commented Jun 3, 2026

Copy link
Copy Markdown

Kusari Inspector

Kusari Analysis Results:

Proceed with these changes

✅ No Flagged Issues Detected
All values appear to be within acceptable risk parameters.

Both analyses are clean from a critical-risk standpoint. The dependency analysis found no pinned version dependency changes requiring review. The code analysis identified one actionable medium-severity finding: the actions/checkout step in .github/workflows/docs.yml does not set persist-credentials: false, which means Git credentials unnecessarily persist in the runner environment after checkout. The overall risk remains low because the workflow already operates under minimal permissions (contents: read) and all actions are pinned to full commit SHAs, limiting the blast radius of any potential credential exposure. The WebSocket (ws://) findings were confirmed false positives present only in Markdown documentation. We recommend adding persist-credentials: false to the actions/checkout step as a best-practice hygiene improvement before or shortly after merging: - uses: actions/checkout@de0fac2 with: persist-credentials: false

Note

View full detailed analysis result for more information on the output and the checks that were run.


@kusari-inspector rerun - Trigger a re-analysis of this PR
@kusari-inspector feedback [your message] - Send feedback to our AI and team
See Kusari's documentation for setup and configuration.
Commit: 406dabf, performed at: 2026-06-06T22:17:03Z

Found this helpful? Give it a 👍 or 👎 reaction!

Comment thread .github/workflows/docs.yml Outdated
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

@kusari-inspector kusari-inspector Bot Jun 3, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actions/checkout is pinned to a mutable version tag (@v4). If this tag is reassigned to a malicious commit, arbitrary code could run in your workflow. Pin this action to a specific immutable commit SHA.

Comment thread .github/workflows/docs.yml Outdated
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v4

@kusari-inspector kusari-inspector Bot Jun 3, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

astral-sh/setup-uv is a third-party action pinned only to a mutable tag (@v4). Third-party actions carry additional supply-chain risk compared to GitHub-owned actions. Pin this action to a specific immutable commit SHA.

Comment thread .github/workflows/docs.yml Outdated
- uses: astral-sh/setup-uv@v4
- name: Build docs
run: uv run --with mkdocs-material==9.7.6 mkdocs build --strict
- uses: actions/upload-pages-artifact@v3

@kusari-inspector kusari-inspector Bot Jun 3, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actions/upload-pages-artifact is pinned to a mutable version tag (@V3). Pin this action to a specific immutable commit SHA.

Comment thread .github/workflows/docs.yml Outdated
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- uses: actions/configure-pages@v5

@kusari-inspector kusari-inspector Bot Jun 3, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actions/configure-pages is pinned to a mutable version tag (@v5) and runs in a job with pages: write and id-token: write permissions. A supply-chain compromise here could enable unauthorized deployments or OIDC token abuse. Pin this action to a specific immutable commit SHA.

Comment thread .github/workflows/docs.yml Outdated
steps:
- uses: actions/configure-pages@v5
- id: deployment
uses: actions/deploy-pages@v4

@kusari-inspector kusari-inspector Bot Jun 3, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actions/deploy-pages is pinned to a mutable version tag (@v4) and runs with elevated permissions (pages: write, id-token: write). This is the highest-risk unpinned action in this workflow. We strongly recommend pinning this action to a specific immutable commit SHA before merging.

State that `yacd devnet` needs Docker running, and that the CLI downloads and
caches a pinned, checksum-verified k3d binary on first use (under
~/.local/share/yacd/bin), so the slower first run is not surprising. Applied to
the getting-started tutorial, the Home teaser, and the CLI reference. Link k3d
and Docker at their first mention on each page.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kusari-inspector

Copy link
Copy Markdown

Kusari PR Analysis rerun based on - 6919013 performed at: 2026-06-03T02:19:25Z - link to updated analysis

Enable Material's automatic color mode: the site follows the operating system's
light/dark preference by default, with a header toggle to switch between auto,
light (default scheme), and dark (slate scheme). No custom colors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kusari-inspector

Copy link
Copy Markdown

Kusari PR Analysis rerun based on - 3624a22 performed at: 2026-06-03T02:50:36Z - link to updated analysis

In the getting-started tutorial, the reminder to keep the wallet address and
network magic (and that the Try: commands are the next steps) reads better as a
Material note admonition than as inline prose.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kusari-inspector

Copy link
Copy Markdown

Kusari PR Analysis rerun based on - b09dfdd performed at: 2026-06-03T02:51:28Z - link to updated analysis

jmgilman and others added 2 commits June 3, 2026 12:17
…-namespaces list)

Align the docs branch with PR #93 (merged): `yacd list` now defaults to all
namespaces (`-A` removed); `yacd topup NAME LOVELACE` takes a positional lovelace
and self-forwards the faucet/Kupo, so the `yacd run` wrapper and `--faucet-url`
are no longer needed; and the new `yacd init` prints a commented, ready-to-run
environment template.

Make `yacd init > yacd.yaml` the default starting point in the "Defining
networks" guide (scaffold, edit, `yacd up`), add an `init` reference section and
Commands-table entry, and revert the now-stale `list -A` / topup-under-`run`
examples added earlier. Verified: mkdocs build --strict clean; `yacd init` ->
`yacd up --dry-run` renders a valid CardanoNetwork; init/topup/list `--help`
match the docs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kusari-inspector

Copy link
Copy Markdown

Kusari PR Analysis rerun based on - bf7fd98 performed at: 2026-06-03T19:27:47Z - link to updated analysis

jmgilman and others added 2 commits June 3, 2026 19:43
Session 058 added `yacd install`, a CLI-native operator install that renders the
bundled chart in-memory and SSA-applies it (no Helm/OCI/Docker). Per the
co-equal decision, operator/installation.md now presents `yacd install` and
`helm install` as tabbed equals across Install / Upgrading / image-verification /
Uninstall, with shared Prerequisites and Verify. The CLI reference gains an
`install` section + Commands-table row (namespace default yacd-system, --wait/
--timeout/--dry-run/-f/--set/--set-string, operational-values-only + digest-pin
nuance, the Plan: dry-run line). Light cross-links from configuration.md,
networks.md (the verbs need an installed operator), and the Home routing.

Verified: mkdocs build --strict clean; `yacd install --help` matches; live smoke
on a fresh k3d cluster — dry-run (install, installed none -> v0.1.1) -> real
install (yacd-system created, manager Ready, CRDs registered) -> re-apply
dry-run -> `yacd up demo` reconciled to Ready -> clean teardown.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kusari-inspector

Copy link
Copy Markdown

Kusari PR Analysis rerun based on - b6bb381 performed at: 2026-06-04T02:50:58Z - link to updated analysis

jmgilman and others added 3 commits June 4, 2026 19:09
…ion install pin, 0.2.0

Sessions 059 and 061 removed the in-cluster HTTP faucet entirely: `yacd topup`
is gone, `spec.chainAPI.{faucet,wallet}` and the FaucetReady/WalletReady
conditions are deleted, and the YACD_FAUCET_* env vars and endpoints.json
faucetUrl are removed. Funding is now CLI-native: every local network gets a
genesis-funded `faucet` wallet, and `yacd wallet {list,add,topup,export,remove}`
builds, signs, and submits transactions directly over Ogmios/Kupo.

- Rewrote funding.md around `yacd wallet`; updated getting-started step 5,
  connecting-tools, testing, troubleshooting, recipes, index, and the
  architecture/security concepts to the wallet model (security now covers wallet
  key custody + local signing instead of the deleted topup trust gate).
- reference/cli.md: replaced the `topup` section with a `wallet` section, dropped
  the faucet rows from the YACD_* contract / endpoints.json / list / info,
  retabled the Commands list.
- reference/cardanonetwork.md / environment.md: removed the faucet/wallet spec,
  status, conditions, and explicit-field rows.
- Install (#109/#87): operator is now appVersion-tag-pinned (not digest); fixed
  the install docs (`image.*` all repoint now), bumped version references to
  0.2.0/v0.2.0, and dropped the removed faucet image/flag from configuration.md.

Verified: mkdocs build --strict clean; full residual-reference sweep clean;
`yacd wallet`/`install` --help match. Live smoke pending.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kusari-inspector

Copy link
Copy Markdown

Kusari PR Analysis rerun based on - 5248816 performed at: 2026-06-05T02:32:31Z - link to updated analysis

jmgilman and others added 2 commits June 5, 2026 22:57
Sessions 060 (design + P1) and 062 (P2+P3, release v0.2.1) added directly
reachable chain-API access so the CLI can skip the per-command port-forward.

- reference/cardanonetwork.md: added `service` (ServiceExposureSpec: type
  ClusterIP|NodePort, nodePort) + `externalURL` to the ogmios/kupo spec, an
  "External access" explainer, and `externalURL` on ServiceEndpointStatus.
- reference/cli.md: `--ogmios-url`/`--kupo-url` on wallet add/topup; a new
  "Chain access resolution" section (flag > YACD_*_URL env > probed externalURL >
  port-forward); run/devnet/YACD_* updated (devnet now exposes Ogmios/Kupo on
  localhost:1337/1442; the env vars are inputs too).
- developer/connecting-tools.md + getting-started.md + concepts/architecture.md:
  the resolver / host-reachable devnet narrative (also dropped a stale "faucet"
  from the run-forwards list missed in the faucet-removal pass).
- environment.md: noted the optional ogmios/kupo service/externalURL fields.
- troubleshooting.md: devnet host-port collision + unreachable-externalURL note.
- Version refs bumped 0.2.0 -> 0.2.1.

Verified: mkdocs build --strict clean; residual sweep clean; wallet
add|topup --help show the new flags. Live smoke pending.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kusari-inspector

Copy link
Copy Markdown

Kusari PR Analysis rerun based on - 9a7291a performed at: 2026-06-06T06:07:23Z - link to updated analysis

Kusari flagged the docs Pages workflow's actions as pinned to mutable tags
(elevated risk given pages:write/id-token:write on the deploy job). Pin all five
to commit SHAs, matching the repo's existing convention (reusing the
actions/checkout v6.0.2 pin).
@kusari-inspector

Copy link
Copy Markdown

Kusari PR Analysis rerun based on - 406dabf performed at: 2026-06-06T22:17:30Z - link to updated analysis

Pages is enabled with the GitHub Actions source; the site publishes at
https://meigma.github.io/yacd/. Set site_url so canonical links and the
generated sitemap use the correct base.
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.

1 participant