=== Verify checksum-sealed deployment package === README-FIRST.md: OK docs/ARCHITECTURE.md: OK docs/SECURITY.md: OK install.sh: OK payload/production-pipeline/cli.js: OK payload/production-pipeline/lib/audit.js: OK payload/production-pipeline/lib/campaign.js: OK payload/production-pipeline/lib/catalog.js: OK payload/production-pipeline/lib/copy.js: OK payload/production-pipeline/lib/http.js: OK payload/production-pipeline/lib/instagram.js: OK payload/production-pipeline/lib/media.js: OK payload/production-pipeline/lib/paths.js: OK payload/production-pipeline/lib/token-adapter.js: OK payload/production-pipeline/lib/token-lifecycle.js: OK payload/production-pipeline/lib/util.js: OK payload/production-pipeline/package.json: OK payload/production-pipeline/public/app.js: OK payload/production-pipeline/public/index.html: OK payload/production-pipeline/public/styles.css: OK payload/production-pipeline/server.js: OK payload/production-pipeline/tests/fixtures/catalog.html: OK payload/production-pipeline/tests/fixtures/etsy-listing.html: OK payload/production-pipeline/tests/run-tests.js: OK payload/production-pipeline/token-lifecycle.js: OK payload/systemd/shire-marketing-pipeline.service.in: OK payload/systemd/shire-marketing-token-lifecycle.path: OK payload/systemd/shire-marketing-token-lifecycle.service.in: OK payload/systemd/shire-marketing-token-lifecycle.timer: OK payload/systemd/shire-marketing-token-reload.path: OK payload/systemd/shire-marketing-token-reload.service: OK rollback.sh: OK tools/safe-audit.js: OK verify.sh: OK PASS: catalogue normalisation, verified-metadata copy fallback and Share & Save URLs PASS: false product, placeholder and generic listing rejection PASS: production, freshness and rights-review quality gates PASS: customer-friendly copy and hashtags PASS: canonical campaign hashing and exact approval enforcement PASS: nested encrypted session discovery and round-trip sealing PASS: layered autofs to CIFS SHiREVault validation PASS: one-hour to 60-day token exchange without secret output PASS: existing long-lived token recovery without duplicate exchange PASS: pre-expiry long-lived token refresh with SHiREVault checkpoint PASS: production pipeline safety unit tests === Verify installed Marketing Boss baseline === === Verify SHiREVault network destination === === Safe audit of installed source and encrypted session === { "ok": true, "audit_file": "/SHiREVault/Backup/OSBackups/SHIRE-MINI-MARKETING-CATALOG-CAMPAIGN-V056-20260731T052109Z/preinstall-safe-audit.json", "source_files": [ "server.js", "app.js", "core.js", "package.json" ], "token_outer_keys": [ "version", "algorithm", "iv", "tag", "ciphertext" ], "secret_values_exposed": false } token owner=ray:ray mode=600 size=802 710459da13a2ac69d2d57aff1954a6a28538cd49c4a2413e017b673d0a459042 /var/lib/shire/marketing-boss/private/social-oauth-tokens.enc.json === Create checksum-verified recovery snapshot === /SHiREVault/Backup/OSBackups/SHIRE-MINI-MARKETING-CATALOG-CAMPAIGN-V056-20260731T052109Z/active-token.sha256: OK /SHiREVault/Backup/OSBackups/SHIRE-MINI-MARKETING-CATALOG-CAMPAIGN-V056-20260731T052109Z/active-token-stat.txt: OK /SHiREVault/Backup/OSBackups/SHIRE-MINI-MARKETING-CATALOG-CAMPAIGN-V056-20260731T052109Z/marketing-boss-source.before.tar.gz: OK /SHiREVault/Backup/OSBackups/SHIRE-MINI-MARKETING-CATALOG-CAMPAIGN-V056-20260731T052109Z/preinstall-safe-audit.json: OK /SHiREVault/Backup/OSBackups/SHIRE-MINI-MARKETING-CATALOG-CAMPAIGN-V056-20260731T052109Z/production-pipeline.before.tar.gz: OK /SHiREVault/Backup/OSBackups/SHIRE-MINI-MARKETING-CATALOG-CAMPAIGN-V056-20260731T052109Z/production-pipeline-data.before.tar.gz: OK /SHiREVault/Backup/OSBackups/SHIRE-MINI-MARKETING-CATALOG-CAMPAIGN-V056-20260731T052109Z/shire-marketing-boss.service.safe.txt: OK /SHiREVault/Backup/OSBackups/SHIRE-MINI-MARKETING-CATALOG-CAMPAIGN-V056-20260731T052109Z/shire-marketing-pipeline.service.before: OK /SHiREVault/Backup/OSBackups/SHIRE-MINI-MARKETING-CATALOG-CAMPAIGN-V056-20260731T052109Z/shire-marketing-token-lifecycle.path.before: OK /SHiREVault/Backup/OSBackups/SHIRE-MINI-MARKETING-CATALOG-CAMPAIGN-V056-20260731T052109Z/shire-marketing-token-lifecycle.service.before: OK /SHiREVault/Backup/OSBackups/SHIRE-MINI-MARKETING-CATALOG-CAMPAIGN-V056-20260731T052109Z/shire-marketing-token-lifecycle.timer.before: OK /SHiREVault/Backup/OSBackups/SHIRE-MINI-MARKETING-CATALOG-CAMPAIGN-V056-20260731T052109Z/shire-marketing-token-reload.path.before: OK /SHiREVault/Backup/OSBackups/SHIRE-MINI-MARKETING-CATALOG-CAMPAIGN-V056-20260731T052109Z/shire-marketing-token-reload.service.before: OK /SHiREVault/Backup/OSBackups/SHIRE-MINI-MARKETING-CATALOG-CAMPAIGN-V056-20260731T052109Z/social-oauth-tokens.enc.json.checkpoint-copy: OK === Install additive v0.5.6 verified catalogue copy and private campaign workspace atomically === === Create least-privilege services and protected credential mappings === === Validate installed code, encryption round-trip and approval gates === PASS: catalogue normalisation, verified-metadata copy fallback and Share & Save URLs PASS: false product, placeholder and generic listing rejection PASS: production, freshness and rights-review quality gates PASS: customer-friendly copy and hashtags PASS: canonical campaign hashing and exact approval enforcement PASS: nested encrypted session discovery and round-trip sealing PASS: layered autofs to CIFS SHiREVault validation PASS: one-hour to 60-day token exchange without secret output PASS: existing long-lived token recovery without duplicate exchange PASS: pre-expiry long-lived token refresh with SHiREVault checkpoint PASS: production pipeline safety unit tests === Restart private pipeline so v0.5.6 is genuinely active === { "ok": true, "version": "0.5.6", "mode": "private-dry-run", "global_pause": true, "api_version": "v25.0", "catalogue_products": 40, "catalogue_quality": { "total": 40, "with_images": 39, "with_descriptions": 1, "production_ready": 0 }, "catalogue_sources": [ { "source_id": "previous-enriched-catalogue", "status": "preserved", "products": 43, "verified_at": "2026-07-31T04:58:17.777Z" }, { "source_id": "shire3d-main", "url": "https://shire3d.com/", "status": "ok", "products": 1, "attempts": [ { "url": "https://shire3d.com/marketing-products.json", "final_url": "https://shire3d.com/marketing-products.json", "http_status": 404 }, { "url": "https://shire3d.com/products-feed.json", "final_url": "https://shire3d.com/products-feed.json", "http_status": 404 }, { "url": "https://shire3d.com/api/marketing-products.json", "final_url": "https://shire3d.com/api/marketing-products.json", "http_status": 404 }, { "url": "https://shire3d.com/products.json?limit=250", "final_url": "https://shire3d.com/products.json?limit=250", "http_status": 404 }, { "url": "https://shire3d.com/collections/all/products.json?limit=250", "final_url": "https://shire3d.com/collections/all/products.json?limit=250", "http_status": 404 }, { "url": "https://shire3d.com/pages/shop", "final_url": "https://shire3d.com/pages/shop", "http_status": 200 }, { "url": "https://shire3d.com/", "final_url": "https://shire3d.com/", "http_status": 200 } ], "verified_at": "2026-07-31T04:58:17.821Z" }, { "source_id": "shire3d-square", "url": "https://shire3d.com.au/s/shop", "status": "failed", "error": "HTTP 200", "attempts": [ { "url": "https://shire3d.com.au/s/shop", "final_url": "https://www.shire3d.com.au/s/shop", "http_status": 200 } ], "retained": 0, "verified_at": "2026-07-31T04:58:21.717Z" }, { "source_id": "shire3d-etsy", "url": "https://www.etsy.com/au/shop/Shire3D", "status": "failed", "error": "HTTP 403", "attempts": [ { "url": "https://www.etsy.com/au/shop/Shire3D", "final_url": "https://www.etsy.com/au/shop/Shire3D", "http_status": 403 } ], "retained": 39, "verified_at": "2026-07-31T04:58:23.565Z" } ], "account": { "ok": true, "account_id": "17841454612909341", "username": "shire3d", "account_type": "BUSINESS", "permission_recorded": true, "permission_required": "instagram_business_content_publish", "api_version": "v25.0" }, "token_lifecycle": { "schema_version": 1, "updated_at": "2026-07-30T08:21:40.002Z", "status": "healthy", "action": "none", "token_kind": "long_lived", "token_fingerprint": "8c0ad41c26effbb8f5172fe0", "token_file_sha256": "710459da13a2ac69d2d57aff1954a6a28538cd49c4a2413e017b673d0a459042", "issued_at": null, "expires_at": "2026-09-28T01:17:27.635Z", "last_exchange_at": null, "last_refresh_at": null, "account": { "username": "shire3d", "account_id_present": true, "account_type": "BUSINESS" }, "scope_count": 2, "recovered_from_encrypted_expiry": false, "publishing_enabled": false, "reason": null, "last_checked_at": "2026-07-31T04:58:17.110Z" }, "public_media_configured": false, "token_file_write_access": false }=== Verify publishing remains locked before catalogue work === PASS: private dry-run mode and global publishing pause remain enforced. === Enable approved Instagram token lifecycle protection === { "ok": true, "version": "0.5.6", "mode": "private-dry-run", "global_pause": true, "api_version": "v25.0", "catalogue_products": 40, "catalogue_quality": { "total": 40, "with_images": 39, "with_descriptions": 1, "production_ready": 0 }, "catalogue_sources": [ { "source_id": "previous-enriched-catalogue", "status": "preserved", "products": 43, "verified_at": "2026-07-31T04:58:17.777Z" }, { "source_id": "shire3d-main", "url": "https://shire3d.com/", "status": "ok", "products": 1, "attempts": [ { "url": "https://shire3d.com/marketing-products.json", "final_url": "https://shire3d.com/marketing-products.json", "http_status": 404 }, { "url": "https://shire3d.com/products-feed.json", "final_url": "https://shire3d.com/products-feed.json", "http_status": 404 }, { "url": "https://shire3d.com/api/marketing-products.json", "final_url": "https://shire3d.com/api/marketing-products.json", "http_status": 404 }, { "url": "https://shire3d.com/products.json?limit=250", "final_url": "https://shire3d.com/products.json?limit=250", "http_status": 404 }, { "url": "https://shire3d.com/collections/all/products.json?limit=250", "final_url": "https://shire3d.com/collections/all/products.json?limit=250", "http_status": 404 }, { "url": "https://shire3d.com/pages/shop", "final_url": "https://shire3d.com/pages/shop", "http_status": 200 }, { "url": "https://shire3d.com/", "final_url": "https://shire3d.com/", "http_status": 200 } ], "verified_at": "2026-07-31T04:58:17.821Z" }, { "source_id": "shire3d-square", "url": "https://shire3d.com.au/s/shop", "status": "failed", "error": "HTTP 200", "attempts": [ { "url": "https://shire3d.com.au/s/shop", "final_url": "https://www.shire3d.com.au/s/shop", "http_status": 200 } ], "retained": 0, "verified_at": "2026-07-31T04:58:21.717Z" }, { "source_id": "shire3d-etsy", "url": "https://www.etsy.com/au/shop/Shire3D", "status": "failed", "error": "HTTP 403", "attempts": [ { "url": "https://www.etsy.com/au/shop/Shire3D", "final_url": "https://www.etsy.com/au/shop/Shire3D", "http_status": 403 } ], "retained": 39, "verified_at": "2026-07-31T04:58:23.565Z" } ], "account": { "ok": true, "account_id": "17841454612909341", "username": "shire3d", "account_type": "BUSINESS", "permission_recorded": true, "permission_required": "instagram_business_content_publish", "api_version": "v25.0" }, "token_lifecycle": { "schema_version": 1, "updated_at": "2026-07-30T08:21:40.002Z", "status": "healthy", "action": "none", "token_kind": "long_lived", "token_fingerprint": "8c0ad41c26effbb8f5172fe0", "token_file_sha256": "710459da13a2ac69d2d57aff1954a6a28538cd49c4a2413e017b673d0a459042", "issued_at": null, "expires_at": "2026-09-28T01:17:27.635Z", "last_exchange_at": null, "last_refresh_at": null, "account": { "username": "shire3d", "account_id_present": true, "account_type": "BUSINESS" }, "scope_count": 2, "recovered_from_encrypted_expiry": false, "publishing_enabled": false, "reason": null, "last_checked_at": "2026-07-31T05:21:19.688Z" }, "public_media_configured": false, "token_file_write_access": false }=== Sync and prepare the real SHIRE3D product catalogue === PASS: Etsy customer links use Share & Save format while source URLs remain preserved internally. === Build one complete private frozen campaign suite === PASS: feed, carousel and Reel are checksum-frozen for private review only. PASS: Instagram remains healthy and all live-publishing gates remain locked. === Record rollback and final evidence ===