Skip to main content

Tooling Reference

Files​

FileContract
mise.tomlDeclares project tools, environment, and named tasks.
mise.lockProject-owned resolved downloads; commit it.
hk.pklDefines the shared check/fix/pre-commit step map.
.config/rumdl.tomlConfigures Markdown linting and deterministic fixes.
.editorconfigKeeps editor output on UTF-8, LF, final newlines, and no trailing spaces.
_typos.tomlIgnores hash-like identifiers while retaining typo checks elsewhere.
contextlint.config.jsonChecks documentation links, anchors, and image targets.
cog.tomlConfigures Conventional Commits and concise changelogs.
.config/cog-changelog.teraRenders plain Markdown changelogs without author noise.
scripts/enable-docs-deployment.pyConfigures workflow-built Pages through external gh.
scripts/serve-pages.pyServes the assembled Pages site locally, resolving paths the way GitHub Pages does.
.github/workflows/validate.ymlRuns locked mise run check and the test suites on pull requests and releases.
website/docusaurus.config.tsConfigures the Docusaurus site, Markdown parsing, Mermaid, search, and OpenAPI generation.
website/sidebars.tsDefines documentation navigation; every durable page is registered here.
website/package-lock.jsonLocks the documentation site's npm dependencies; commit it.
site/The product page served at the Pages root, and brand.css, the color and font tokens the docs share.
.github/workflows/pages.ymlBuilds the gated Pages site on pushes to main, when a successful E2E report run on main calls it, or on manual dispatch.

Checks​

mise run check runs these hk steps; mise run fix applies the fixes for the steps that have one. Each step runs only when matching files change.

AreaSteps
Repository hygieneByte-order marks, case conflicts, executable shebangs, symlinks, large files, merge conflicts, private keys, mixed line endings, trailing whitespace, final newlines, and smart quotes.
Toolingmise config formatting.
Markdown and docsrumdl, markdown-table-formatter, contextlint for links, anchors, and images, typos, and docs, which builds the site.
Deploymentcompose-stack and frps-render; see Local Stack.
Serverserver-compile with warnings as errors, server-deps for unused lock entries, and server-format.
Clientgo-fmt (gofumpt, then goimports with local import grouping), go-mod for module tidiness, and go-lint.
Commit messagesCocogitto, Conventional Commit format, line lengths, required scopes, and the Beads: footer.

Custom steps exist only where hk has no equivalent built-in, and independent steps run in parallel without ordering constraints.

Container build caches​

The server and Caddy image workflows use BuildKit's GitHub Actions cache backend (API v2) to reuse unchanged layers across fresh hosted runners. The existing Docker actions provide cache access without new registry credentials or secrets. Cache exports use mode=max to include intermediate dependency and compilation layers, with distinct scopes so the three build targets do not overwrite one another:

  • .github/workflows/build_server_image.yml: server-image.
  • .github/workflows/build_caddy_image.yml: caddy-proxy-test for the exported proxy-test binary and caddy-image for the final image.

Cache availability follows GitHub's branch-access rules and eviction policy; the first build or a cache miss still needs a normal build. Exports use ignore-error=true so a read-only cache or failed cache upload does not turn a successful image build into a failure. Missing cache entries are rebuilt.

Caching does not eliminate base-image metadata requests or the BuildKit bootstrap image pull during builder setup. Docker Hub timeouts and pull-rate limits can still fail those pulls. No Docker Hub login is configured by these workflows. GHCR publication happens only when the Release workflow calls them with a version, or from a manual dispatch with push enabled; see Releasing. See Docker's cache guidance.

Commit messages and changelogs​

Changelog-visible feat, fix, perf, and refactor commits require a scope. The commit hook also checks Conventional Commit syntax, a 72-character subject, 100-character body lines, and an optional canonical Beads: footer; the Beads, length, and scope checks skip Git comments and stop before scissors or diff sections. cog changelog omits internal build, chore, CI, documentation, release, style, and test commits, and renders breaking changes as plain Markdown.

cog.toml accepts any syntactically valid scope. To constrain scopes, add a scopes = ["..."] allowlist, document each subsystem here, update AGENTS.md to match, and run cog check.

Tasks​

TaskDefined inBehavior
checkrootRun every hk check without fixing.
fixrootApply deterministic hk fixes.
lockrootRegenerate every mise.lock; --bump upgrades to the latest versions.
docs:installrootInstall site dependencies with npm ci when the npm lock changes.
docs:buildrootBuild the site into website/build.
docs:serverootServe the site with hot reload on port 3000 or a supplied port.
site:buildrootBuild the docs and assemble the Pages site into _site/nixstasis: the product page at the root, the docs under docs/.
site:serverootBuild the Pages site and serve it at http://127.0.0.1:3000/nixstasis/ or a supplied port.
docs:deployment:enablerootConfigure GitHub Pages and enable its deployment gate through gh.
deploy:dev.mise/tasks/deploy/dev.shManage the local Compose stack; see Local Stack.
deploy:dev:seed.mise/tasks/deploy/dev/seed.shSeed fixture data into the local stack's database.
test, test:coveragepackages/clientRun Go tests with the race detector and coverage; print the coverage summary.
test:packagingpackages/clientVerify the native SSH packaging contracts; requires Linux and GNU stat.
build, build:local, cleanpackages/clientBuild the client binary, run the CLI locally, remove build artifacts.
release:check, release:snapshot, release:snapshot:archives, release:snapshot:native, release:snapshot:run, release:verifypackages/clientValidate GoReleaser configuration, build snapshot artifacts, and verify release artifacts.
mock-apipackages/clientRun the mock server API.
e2e:scaffoldpackages/clientGenerate an E2E journey scaffold.

Platforms and environment​

Linux is the supported runtime, release, and packaging-validation platform. The tool locks cover linux-x64, linux-arm64, and macos-arm64; Intel macOS is not locked, and macOS downloads do not establish macOS product or packaging support.

The mise environment routes Git hooks through mise with HK_MISE=1 and sets GIT_CONFIG_PARAMETERS="'merge.ff=only'", so Git rejects merges that would need a merge commit. gh is an external prerequisite for administrative tasks, not a mise tool. Pages deployment triggers and permissions are described in GitHub Pages Deployment.