# Reproducible verification — regenerated by scripts/verify-claims.sh
# (this file: VERIFY-OUTPUT.txt) on 2026-10-29 09:44:21 UTC
# Method (display drift): each '$ command' line is executed verbatim; stdout+stderr and
# the exit status are captured programmatically (see emit() above).
# NOTES (context, not command output): dashcaddy-api/VERSION is the
# deploy-time BUILD STAMP (the deployed commit SHA written by the
# publish pipeline), not a semver source of truth — see
# dashcaddy-api/src/docker/self-updater.js:123 which reads it as the
# commit identity, and start.sh:193-205 which treats it as deployed
# VERSION metadata. Version alignment claims refer to package.json,
# openapi.yaml, and the README badge (all 1.17.0).

$ cat dashcaddy-api/VERSION
70e252c
[exit=0]

$ grep "version" dashcaddy-api/package.json | head -1
  "version": "1.17.0",
[exit=0]

$ grep "version:" dashcaddy-api/openapi.yaml | head -1
  version: 1.17.0
[exit=0]

$ grep "version-" README.md | head -1
![Version](https://img.shields.io/badge/version-1.17.0-blue)
[exit=0]

$ node -e 'const {APP_TEMPLATES}=require("./dashcaddy-api/src/docker/app-templates"); console.log("templates:", Object.keys(APP_TEMPLATES).length)'
templates: 78
[exit=0]

$ cd dashcaddy-api && npx jest __tests__/self-updater-version.test.js __tests__/self-updater-isnewer.test.js --silent
PASS __tests__/self-updater-version.test.js
PASS __tests__/self-updater-isnewer.test.js

Test Suites: 2 passed, 2 total
Tests:       13 passed, 13 total
Snapshots:   0 total
Time:        0.427 s, estimated 1 s
[exit=0]

$ grep -n "commit = fs.readFileSync" dashcaddy-api/src/docker/self-updater.js
123:          commit = fs.readFileSync(pkgPath.replace(/package\.json$/, 'VERSION'), 'utf8').trim();
[exit=0]

$ sed -n "120,126p" dashcaddy-api/src/docker/self-updater.js
        const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
        let commit = null;
        try {
          commit = fs.readFileSync(pkgPath.replace(/package\.json$/, 'VERSION'), 'utf8').trim();
        } catch { /* ignore */ }
        return { version: pkg.version, commit };
      } catch { /* try next candidate */ }
[exit=0]

$ grep -n "VERSION METADATA\|source tree.s VERSION\|SRC_VERSION=" start.sh
193:# serves — decided by VERSION METADATA, not file mtimes (mtimes are not
197:#     source tree's VERSION file, start.sh must NOT touch the live bundle.
205:  SRC_VERSION=/opt/dashcaddy/dashcaddy-api/VERSION
[exit=0]

$ python3 scripts/api-surface-extract.py --root "$(pwd)" --out "$(pwd)/API-SURFACE.md"
[ok] 443 handler rows, 59 PUBLIC_ROUTES allowlist entries
[ok] wrote /root/dashcaddy/API-SURFACE.md (54340 bytes)
[exit=0]

$ wc -c API-SURFACE.md
54340 API-SURFACE.md
[exit=0]

$ sha256sum API-SURFACE.md
6ee6b2f0da244cd6103be14f0977b95f1a9af3d453bf2401bb4c222d59b6c621  API-SURFACE.md
[exit=0]

