wiki-vault/Sources/Dev/pbs-n8n-update.md

5.2 KiB
Raw Blame History

created path project tags type
2026-06-30 Sources/Dev pbs-n8n-update
pbs
n8n
automation
mysql
docker
python
cloudflare
project-plan

PBS n8n Update — Import & Mock-Harness

Bring the live PBS Instagram-automation n8n workflows up on the sandbox test server, driven by synthetic feeds, so their logic can be worked on without the real Instagram/Facebook/Cloudflare/Google-Chat edges.

Goal

Import the 9 production n8n workflows from petal-power/pbs-n8n into the existing n8n on the PBS test server (VM 202 / pbs-wp-test, 10.0.21.101) and get them running end-to-end against mocked Instagram feeds, resolving against the real prod-dump MySQL data, with every outbound message captured to a trackable file sink.

Success condition (the run is done when): 8 of the 9 workflows — all except PBS_Cloudflare_Cache_Warmer_5_days — are imported, active, and demonstrably respond to input and produce output, as close to live production behavior as possible. That means: a synthetic Instagram feed POSTed to the webhook drives the workflow chain, the MySQL lookups resolve against real platform_posts/pbs_recipes rows, and the resulting messages land in the sink. The cache-warmer is explicitly excluded from the running condition.

Locked Decisions

  • Target box: VM 202 wp-dev-vm / pbs-wp-test (10.0.21.101). Existing n8n at :5678, MySQL wordpress_mysql with full prod dump. Full verified access reference lives in Trellis thread pbs-dev-connect (#995) — SSH, n8n API, MySQL, and PVE lifecycle API all tested 2026-06-30.
  • Import into the EXISTING n8n. It already runs 8 live PBSII monitoring/healer/security workflows (incl. a PBS: Google Chat Notify sub). Import the 9 as a self-contained, isolated cluster, re-link them only among themselves, and touch nothing existing.
  • MySQL = real, full prod data. The IG-reply lookup chain (platform_postsprojectspbs_recipes) resolves against actual rows (platform_posts ~169, pbs_recipes 100).
  • Sink: one Flask catcher → JSONL (timestamp, sink-label, body). All outbound — Google Chat ×3, Facebook ×2, Cloudflare purge — repointed at it, each labeled so messages are identifiable.
  • HMAC x-hash gate disabled for the harness — it's proven in production, safe to bypass to inject synthetic events.
  • Feeds to mock: reel-publish + new-comment. No subscribe handshake.
  • Import path: n8n public API with X-N8N-API-KEY (key verified working, no expiry; stored in the thread).
  • Out of scope for "running": PBS_Cloudflare_Cache_Warmer_5_days.

Open Items

  • Exact synthetic payload shapes — to be reversed from each webhook's IF/set nodes during Phases A/D.
  • Name near-collision: existing PBS: Google Chat Notify (Sub-Workflow) vs the import's own copy — keep the import isolated, don't repoint onto the live one.
  • gitea container on 202 is unhealthy (unrelated; flagged in #995).

Phases

0 — Safety. vmstate=1 snapshot of VM 202 (pre-n8n-import) via the PVE token before touching the box. n8n carries live monitoring, so the snapshot is load-bearing, not tidy. Rollback path: one API call (see #995).

A — Import & re-link. Push the 9 JSON via the n8n API. Repair every executeWorkflow cross-reference (they carry stale n8n internal IDs that won't survive import) — re-linking only within the imported set. Disable the x-hash node in insta-webhook and the matching stopAndError gate in PostPBSUpdate. Leave the 8 existing workflows untouched.

B — Sink. Stand up the Flask catcher on 202 → JSONL. Repoint all outbound httpRequest nodes (Google Chat ×3, FB ×2, CF purge) at it, each tagged with a sink label.

C — MySQL wiring. Point the imported workflows' MySQL credential at wordpress_mysql:3306 / pbs_automation (user pbs_api). Verify platform_posts, pbs_recipes, instagram_posts_processed, instagram_replies.

D — Mock feeds. Reverse the exact payload shape from the webhook's IF/set nodes, build reel-publish + new-comment synthetic events, POST to the webhook path. The comment event uses a real reel ID from platform_posts so the reply lookup resolves recipe→keyword→reply.

E — Observe / prove success. Fire both feeds; tail the catcher JSONL; confirm instagram_replies / instagram_posts_processed inserts. Verify the 8 in-scope workflows respond-to-input and produce-output ≈ live.

Notes

  • Workflows cloned to ~/dev-projects/pbs-n8n on herbys-dev — 9 exports, single commit. Cluster shape: Instagram pipeline (insta-webhook + 3 subs), Cloudflare cache (purge + warmer), chat/notify (PostPBSUpdate + 2 senders).
  • The stale-internal-ID cross-references are the #1 thing that breaks on import.
  • Exports carry live secrets (Google Chat API keys, CF zone id) — fine for a throwaway harness, flagged.
  • Execution model: a worker on herbys-dev SSHing into 202 does the import/sink/feed work on the box.
  • Deliverables: working 8-workflow set in n8n · the catcher service · the mock-feed injector scripts · a short runbook (how to fire a feed, where to watch output).
  • Unattended tier: version-warrior (done = version running). Run contract recorded in the Trellis thread before going heads-down.