Run locally

From /home/loca/dev/wild:

./bin/zonescope
bun run scan
bun src/cli.ts --only wiki.loca.zone --no-color

Write both durable renderings while retaining the normal terminal report:

./bin/zonescope --out snapshot.json --html dashboard.html

Machine-only examples:

./bin/zonescope --json
./bin/zonescope --quiet --out snapshot.json

Flags

FlagEffect
--jsonPrint the JSON snapshot instead of the terminal report.
--html <path>Write one self-contained HTML dashboard; terminal output remains unless JSON or quiet mode replaces it.
--out <path>Write the pretty-printed JSON snapshot.
--only <substr>Keep matching vhosts and probes; suppress host-wide findings that need a complete view.
--no-probeSkip live TLS and HTTP probes.
--nginx <dir>Override /etc/nginx/sites-enabled.
--registry <path>Override /home/loca/AGENTS.md.
--concurrency <n>Set the positive probe concurrency limit; default 8.
--timeout <ms>Set the positive timeout for each TLS and HTTP probe; default 4000.
--no-colorDisable ANSI terminal colour.
--strictReturn exit code 1 for warnings as well as errors.
--quietSuppress stdout while still writing requested files.
-h, --helpPrint help without scanning.

Tests

The suite uses bun:test and contains 36 tests for collectors, probe behavior, bounded concurrency, scan scoping, verdict boundaries, and all three reporters.

bun test

A focused renderer check is available as bun test test/report.test.ts. TypeScript is strict, uses noUncheckedIndexedAccess, and keeps explicit .ts extensions on sibling imports.

Add a finding rule

  1. Add the code to FindingCode in src/types.ts.
  2. Add its explicit severity and cross-source predicate in src/verdict.ts. Update HOST_WIDE_CODES: use true when the rule needs the complete host view and undefined when it remains meaningful under --only.
  3. Add focused tests for the triggering condition and the nearest non-triggering boundary.
  4. Update the finding table in README.md and this wiki reference.
  5. Run the focused test, then bun test.

Emit a generic Finding rather than printing inside verdict code. Terminal, JSON, and HTML reporters already consume generic findings and need a code-specific branch only when the presentation contract changes.

Dashboard publication

Inspect the user timer and its most recent service invocation:

systemctl --user status zonescope.timer
systemctl --user status zonescope.service

The timer invokes /home/loca/dev/wild/scripts/publish.sh every 10 minutes. The publisher runs the CLI with --quiet --html and --out, then atomically replaces /home/loca/dev/wild/site/index.html and snapshot.json when the scan completed without a crash-level failure.

Rebuild this wiki

cd /home/loca/dev/wikis && ./build.sh wild

The shared builder copies this wiki’s symlinked quartz.config.yaml into Quartz, builds the symlinked content vault into a temporary distribution, confirms index.html exists, and swaps the current symlink. See Dashboard for the separately generated operator surface.