# Verification and release boundary

Verified on 2026-10-10 against the connected n8n node catalog and official documentation.

## Completed checks

- Full supplied blueprint retrieved from the referenced conversation attachment and read.
- n8n workflow SDK reference, scheduling/persistence/notification guidance and exact node parameter definitions inspected.
- All **three SDK workflow graphs validate with no errors or warnings**: 10 nodes (weekly), 3 nodes (recovery), 2 nodes (error handler).
- All **15 exported JSON node configurations** validate against the connected catalog.
- Python source compilation succeeds.
- **22 automated local tests** pass, including financial totals, FX missing/stale rejection, duplicate conflicts, invalid amounts, timezone DST and interval boundaries, empty scopes, zero baseline, role isolation, AI schema/fallback, pagination completeness, escaped HTML, PNG rendering, delivery idempotency/ambiguity, pre-AI persistence, mocked Slack thread/upload protocol and mocked SMTP MIME/thread continuity.
- Synthetic executive/manager/rep samples generated from the included fixture. Executive chart visually inspected.

Tests use no live provider credentials and send no messages. n8n SDK/schema validation establishes structural compatibility, not a real import/execution on the user's destination instance. Docker image build and deployment were not executed here. Python tests ran with the available bundled runtime and Pillow 12.3.0; the deployment target is Python 3.12+.

## Required destination acceptance

1. Import all JSON workflows into the actual instance and select the service credential; verify node versions and error-workflow binding.
2. Start the Docker/service deployment and verify private network reachability, durable storage, backups and startup secret enforcement.
3. Run real HubSpot reads: schema, pipelines, owners, multiple pages, property history, multi-currency fields, and source-specific stage statuses.
4. Reconcile deterministic totals against a contemporaneous CRM export. Confirm the distinction between current observed pipeline and last-week close-date cohorts.
5. Verify the executive/manager/rep destination membership and owner allowlists. Check that the rep chart/AI input contains no other owner's data.
6. Test actual Slack Block Kit, private-channel posting, upload completion and threaded details with a test channel; test real mailbox delivery, inline images, mobile rendering and a second email's threading behavior.
7. Force CRM 401/429, partial-page failure, bad FX, optional AI failure and one rejected destination. Confirm no misleading zero digest, deterministic fallback, failed-only recovery and admin alert.
8. Exercise an uncertain send and provider-log reconciliation. Verify volume restore without duplicates. Test independent monitoring with the service stopped.
9. Validate a real second weekly snapshot and baseline changes; test revoked/changed audience authorization before automated publishing.

## Sources

The implementation uses official provider interfaces; the n8n MCP node catalog is the authority for the exact exported node type versions.

- [n8n Schedule Trigger](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/) — scheduling and workflow timezone.
- [n8n HTTP Request](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) — authentication/body/response configuration.
- [n8n error handling](https://docs.n8n.io/flow-logic/error-handling/) — shared error workflow setup and Error Trigger payloads.
- [HubSpot deals API](https://developers.hubspot.com/docs/api-reference/legacy/crm/objects/deals/guide) — property lookup, record reads and `propertiesWithHistory`.
- [HubSpot pipelines](https://developers.hubspot.com/docs/api-reference/legacy/crm/pipelines/guide) — pipeline/stage metadata and probabilities.
- [Slack chat.postMessage](https://docs.slack.dev/reference/methods/chat.postMessage/) — Block Kit, accessibility text and parent-thread timestamps.
- [Slack files.getUploadURLExternal](https://docs.slack.dev/reference/methods/files.getUploadURLExternal/) and [files.completeUploadExternal](https://docs.slack.dev/reference/methods/files.completeUploadExternal/) — current upload flow.
- [OpenAI Chat Completions reference](https://developers.openai.com/api/reference/resources/chat) — optional structured-output analysis request; model selection must be verified at setup.
- [RFC 5322](https://www.rfc-editor.org/rfc/rfc5322.html) — Message-ID, In-Reply-To and References semantics.

HubSpot's v3 deals/pipelines documentation currently redirects under a `legacy` documentation path. This reference intentionally uses those verified v3 routes; it does not claim to implement every newer HubSpot API generation.
