Skip to content

contributing

the repo is pfeifferj/specdoc, AGPL-3.0, default branch master. start with local development: the whole stack runs on one machine with no cluster and no github app.

where things live

what where
editor build inputs editor/UPSTREAM, editor/critic.bundle
editor rebrand overlay editor/overlay.sh, editor/branding/
editor source the critic branch inside the bundle, not this tree
spec board spec-board/server.js, tests in spec-board/test.js
docs (this site) docs/, mkdocs.yml
cluster manifests specdoc-infra

what CI checks on a pull request

  • node spec-board/test.js
  • the editor build inputs agree: the fork tree is reconstructed from editor/critic.bundle and the base commit is checked against the tag in editor/UPSTREAM
  • editor/overlay.sh still finds every string it rewrites, run against a real checkout of the fork. upstream moving a template is a build failure here rather than a silently unbranded image later
  • shellcheck on the shell scripts
  • mkdocs build --strict when docs change

conventions

  • conventional commits (feat:, fix:, docs:, refactor:, test:, chore:), subject in the imperative, body explaining why
  • lowercase headings and prose in these docs
  • comments explain why, never what
  • changing anything that stores, sends or publishes user data means updating the board's /privacy page in the same commit

how a change reaches production

merging to master is the deploy. a cronjob in the cluster notices the new commit within five minutes, builds both images, and an image trigger rolls each deployment to the new digest. see releases for the one exception, an upstream bump, and operations for what to check.