How to receive artifacts and produce a dry-run publish plan
Step 1: run npm run package:artifact in each project directory. It produces artifact/deploy-manifest.json, artifact/public/, artifact/basepath/<siteId>/ and artifact/SHA256SUMS.
Step 2: run node scripts/validate-artifacts.mjs here. The validator walks /home/ubuntu/ailounge-tools-sites/ailounge-implementation/P*/artifact/deploy-manifest.json and checks siteId, contractVersion=1.0, shellVersion=1.0, directory presence, build kind, env names (names only), headersProfile, /healthz, root and subpath evidence, and scans static bundles for node_modules, .env and private user-test files. It writes reports/artifact-receipt.json and prints a summary; unfinished projects are marked pending, not failed.
Step 3: run node scripts/publish.mjs --site pdf --release 0.1.0 and node scripts/rollback.mjs --site pdf --previous 0.0.9. Without credentials both print dry-run plans only: "new release dir → health check → switch symlink/release reference → rollback on failure", always saying "not deployed / authorization pending", always retaining at least one previous release, never using K8s.
This tutorial documents local commands and output format; it does not mean any site is deployed. Real platform capabilities (dual domains, HTTPS renewal, PORT, persistence, logs, rollback) are in platform-capabilities.md, all marked "unverified / authorization pending" this round.