✅ Verification checklist
Run in order. Each step must produce the expected output before proceeding.
1. systemd service
systemctl status cdsr --no-pagerExpected: Active: active (running) with Main PID present.
2. code-server loopback health
curl -sf http://127.0.0.1:52224/healthzExpected (no editor session): JSON {"status":"expired","lastHeartbeat":0}
Expected (with browser session connected): JSON {"status":"alive",...}
curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:52224/Expected: 200
3. app host requires Authelia
curl -sSI https://cdsr.loca.zone/Expected: HTTP/1.1 302 with Location: https://auth.loca.zone/?rd=https%3A%2F%2Fcdsr.loca.zone%2F&rm=HEAD (or equivalent redirect into Authelia).
4. wiki host is public
curl -sSI https://wiki.cdsr.loca.zone/Expected: HTTP/1.1 200 with Content-Type: text/html and no Location header pointing to auth.loca.zone.
5. Authelia config valid and container up
cd /home/loca/dev/services/authelia && sudo -n docker compose configExpected: clean YAML output, no errors.
cd /home/loca/dev/services/authelia && sudo -n docker compose psExpected: authelia container Up (healthy).
6. extension baseline audit
cd /home/loca/dev/code-server && ./scripts/list-extension-versions.shExpected:
ok Continue.continue@2.1.0
ok Anthropic.claude-code@2.1.235
ok ms-python.python@2026.4.0
ok ms-python.debugpy@2026.6.0
ok ms-toolsai.jupyter@2025.9.1
ok ms-azuretools.vscode-containers@2.4.5
Exit code: 0
7. browser smoke (manual)
- Open
https://cdsr.loca.zonein a browser. - Complete Authelia one-factor login at
auth.loca.zone. - Confirm code-server editor shell loads (activity bar, file explorer, terminals).
- Open Extensions view (Ctrl+Shift+X): verify
ContinueandClaude Codeare installed and enabled. - Open integrated terminal (Ctrl+
): runwhoami-> outputloca`.
8. dev-routing smoke (manual)
- In the integrated terminal from step 7, run:
python3 -m http.server 52325 --bind 127.0.0.1 - In the browser, open
https://cdsr.loca.zone/proxy/52325/ - Expected: directory listing or test page renders through code-server’s built-in proxy.
9. wiki build smoke
cd /home/loca/dev/wikis && ./build.sh cdsrExpected: build completes, emits current -> dist-<timestamp> symlink. A git warning about the vault not being a git repository is normal and expected.
Then open https://wiki.cdsr.loca.zone/:
- quick-start page renders
- internal wikilinks resolve (e.g.
[[operations/extensions]],[[architecture/runtime-topology]]) - footer links point to
https://cdsr.loca.zoneandhttps://loca.zone
Pre-publish wiki lint gate
Run before every build.sh invocation, so ahead of step 9 above. This is a gate, not a smoke test: a non-zero exit means nothing gets published.
python3 /home/loca/dev/wikis/lint-vault.py /home/loca/dev/code-server/q5vaultExpected: 11 pages, 0 findings, all 5 checks clean and exit code 0.
--quietsuppresses the clean summary so only failures print, which is the form to use in a wrapper- the vault may be named instead of pathed:
python3 /home/loca/dev/wikis/lint-vault.py cdsrresolves/home/loca/dev/wikis/cdsr/content, the symlink into this vault - why it exists: a frontmatter
description:whose value held an unquoted colon-space made the Quartz note-properties transformer fail its YAML parse, and esbuild then died with a Goall goroutines are asleep - deadlock!panic instead of a readable error. One unquoted colon cost a whole build with no usable diagnostic - it complements
scripts/validate-ssot.py, whichbuild.shruns itself: that validator only gates wikis shipping awiki-ia.jsonmanifest, and this wiki ships none, so itsSSOT Validation passedline is a vacuous pass here and this linter is the only real pre-publish gate on the vault - check 1, frontmatter scalars: unquoted values containing a colon-space, starting with
#,@,*,&,!,%or a backtick, ending in a colon, carrying an inline#comment that would silently truncate the value, or holding an unterminated quote. Reported asfile:lineplus the offending key - check 2, wikilinks in tables: an unescaped
|inside[[...]]on a table row splits the cell, and an alias containing/is truncated at the slash when rendered - check 3, dead wikilinks: every target must resolve to a real
.mdin the vault, tried vault-root-relative first and then relative to the linking page, tolerating a leading./and an optional#anchor - check 4, house style: no markdown bold anywhere
- check 5, page shape: no second H1 in one file, and no page without a frontmatter block
- checks 2 to 5 ignore fenced blocks and inline code spans, because nothing in those regions renders as markdown, so the example wikilinks in step 9 above are not treated as links
- standard library only, so it runs on any host with
python3and needs no pyyaml
Note: the git-repository warning from build.sh is normal — the vault is a plain directory, not a git repo.