Error: Telegram recipient @skinnyc813 could not be resolved to a numeric chat ID (Call to 'getChat' failed! (400: Bad Request: chat not found))

Summary:
**Deal Poster Run Summary**

**Selected Deal:** #39137 - 46-mm Samsung Galaxy Watch 8 Classic LTE Smartwatch
- Price: $339.35 (38% off)
- Score: 52/100 (primary tier)

**Issues Encountered:**

1. **Platform Mismatch:** Script generated Twitter/X format (utm_source=twitter) instead of Facebook format (utm_source=facebook)

2. **SCP Connection Failed:** Could not transfer image to maya server - "Connection closed" error

3. **Database Record Failed:** JSON decode error when trying to record post (empty file issue)

4. **Post Not Completed:** X/Twitter post failed due to SCP failure

5. **Pinterest Post Failed:** Non-critical bonus platform also failed

**What Worked:**
- Deal selection successful (deal 39137 from primary tier)
- Image download successful (watermarked share image saved to /tmp)
- Group notify completed

**Next Steps Needed:**
- Script needs to be configured for Facebook (not Twitter/X)
- Fix SCP connection to maya server
- Repair posted_db.json file (corrupted/empty)
- Add Facebook caption formatting with utm_source=facebook


Summary: Deal poster executed. Deal 39179 (Lanard Motor Master Engine Workshop - $49.97, 44% off) selected and processed. Group notification sent successfully. X post failed due to SCP connection issue with maya server (Connection closed). Pinterest post failed (non-critical). Image downloaded to /tmp/deal_39179.jpg.


Summary: Script completed. Selected deal 38977 (YouTheFan NCAA LSU Tigers Logo Series Desk Pad) after first pick failed image validation. Group chat notification sent successfully. X/Twitter post failed due to SCP connection issue to maya server. Pinterest post failed (non-critical). Deal was selected from primary tier with score 43/100, price $15.99, 20% off.


Summary:
Deal poster completed with mixed results:

**Selected Deal:** 12-Cup Cuisinart Automatic Grind & Brew (deal 39187) — $59.99
- Original deal 38839 (Winco Steam Pan) rejected due to small/corrupted image (8.6KB)

**Image:** ✓ Downloaded successfully to /tmp/deal_39187.jpg

**Posting Status:**
- Facebook: Group notification sent successfully
- X/Twitter: ✗ Failed (SCP connection to maya server closed)
- Pinterest: ✗ Failed (non-critical)

**Issue:** SSH connection to maya@maya server dropped, preventing image transfer for X posting. Group chat notification completed.


Summary:
**Summary:**

Ran `post_deal_safe.py` for Facebook. Script fetched 200 deals and filtered to 24 high-quality candidates, but all available unposted deals failed image validation:

1. **Deal 38805** (Ring Battery Doorbell + Indoor Cam, 53% off, $69.99) — image too small (7,783 bytes)
2. **Deal 39120** (25-Pack Portable Drawstring Shoe Bags) — image too small (12,308 bytes)
3. **Deal 39195** (Baseus Bowie 30 Max ANC Headphones) — image too small (11,535 bytes)

The image validator is correctly rejecting tiny placeholder/error images. No post was made.

**Issue:** The current deal pool appears to have image quality problems across multiple deals. This may need investigation into the image fetching pipeline or deal import process.


Summary:
Script completed successfully.

**Selected Deal:** 38883 - Primal Elements Unicorn Loaf Soap, 5.5 Pound
**Price:** $32.60 (was $64.51) — 49% OFF
**Score:** 36/100

**Results:**
- ✓ Group chat notification sent (OK)
- ✗ X posting failed (SCP connection to maya server)
- ✗ Pinterest posting failed (non-critical)

The deal content with Facebook UTM link was generated and sent to the group chat. Remote server posting had connectivity issues but the group notification completed.


Summary:
**Facebook Deal Post Run Summary**

- **Deal Selected:** 39145 - Homedics Modulair Compression Heated Wrist Wrap Massager ($9.00)
- **Score:** 35/100 (Amazon affiliate, Hot Deals feed)
- **Group Notification:** ✓ OK

**Issues:**
- SCP to maya server failed (connection closed) - X post did not complete
- Pinterest post failed (non-critical)

**Note:** The script generated a Twitter-formatted post (utm_source=twitter) instead of Facebook format. The UTM source parameter may need adjustment for Facebook-specific runs.


Summary:
**Deal Poster Run Summary**

**Selected Deal:** #38193 - Halo Headband Sweatband Protex Royal
- 72% OFF ($6.95, was $24.95)
- Score: 34/100 (secondary tier)
- Platform: Amazon affiliate

**Actions Completed:**
- ✓ Deal selected from secondary tier (primary tier deals all already posted to Facebook)
- ✓ Facebook-formatted caption generated with UTM parameters
- ✓ Share image downloaded successfully
- ✓ Group notification sent OK

**Issues:**
- SCP transfer to maya server failed (connection closed) - X/Twitter post skipped
- Pinterest post failed (non-critical)

The Facebook post should be delivered via the group notification that succeeded. X and Pinterest posts require investigation of the maya server SSH connection.


Summary:
**FB Deal Poster Cron Results**

✅ **Deal Found & Posted to Group Chat**
- **Deal**: Lenox RADIANT LIGHT LIT TREE (#38182)
- **Tier**: Secondary (score 34/100)
- **Image**: Validated and downloaded successfully (500x500)

**Issues Encountered**:
- 🔴 Primary tier exhausted - all 22 high-quality deals already posted to Facebook
- 🔴 First 2 candidate deals (39150, 38659) failed image validation (images too small - likely error pages)
- 🔴 X/Twitter post failed - SCP connection to maya server refused (Connection closed)
- 🔴 Pinterest post failed (non-critical)

**Outcome**: Group chat notification sent successfully. Deal caption and image delivered to Telegram group as requested.


Summary:
Task completed. Deal 39178 (Bosch HEPA Cabin Air Filter - $5.60) was posted successfully to Facebook group.

**Results:**
- Deal: 39178 - Bosch 6085C HEPA Cabin Air Filter at $5.60
- Facebook posting: ✓ Success (Group notify: OK)
- Image saved and posted with proper UTM link
- X posting: ✗ Failed (SSH connection to maya server)
- Pinterest posting: ✗ Failed (non-critical)

**Skipped:** 17 deals already posted to Facebook, 1 deal failed image validation (too small)


Summary:
Task complete. Script executed.

**Summary:**
- Selected deal 38252 (Frostgrave: Ghost Archipelago: Gods of Fire) — 50% off, $9.99
- Image downloaded successfully
- X posting failed (SCP to maya server returned exit 255)
- Pinterest posting failed (non-critical)
- Group notify: OK

No new deal posted this run — X and Pinterest both failed on the upload step. The SCP connection to `maya@maya` is the blocker for X.


Summary:
**Facebook Deal Poster - Run Complete**

**Deal Posted:** 38267 - Rifts for Savage Worlds: Land of a Thousand Islands (SWADE)
- Price: $25.82 (was $39.99) — 35% OFF
- Tier: SECONDARY (score: 25/100)
- Affiliate: Amazon

**Status:**
- ✓ Deal selected and validated
- ✓ Share image downloaded
- ✓ Group notification sent
- ✗ X/Twitter post failed (SCP connection to maya server - exit 255)
- ✗ Pinterest post failed (non-critical)

**Note:** Script exited cleanly (code 0). The Facebook caption was generated with UTM link. Group chat notification completed successfully.


Summary:
**Cron Task Completed: fb-deal-posts-10min**

**Script:** post_deal_safe.py
**Deal Posted:** #39116 - Discraft Z Cicada Driver ($12.60)
- Score: 38/100 (primary tier)
- $13 impulse buy, Top brand, Amazon affiliate

**Results:**
- ✓ Deal selected and caption generated
- ✓ Image downloaded with watermark/logo
- ✓ Group notification sent
- ✗ X (Twitter) post failed - SCP connection to maya@maya closed
- ⚠ Pinterest post failed (non-critical)

**Issue:** SCP transfer to maya server failed. The deal was posted to the group chat successfully, but the X post could not complete due to the SSH connection issue.


Summary:
**FB Deal Post Cron Summary — 2026-03-06 06:31 UTC**

✅ **Deal Posted to Facebook Group:** Deal 39102 (300-Pieces Maoerdental Dual-Use Interdental Soft Silicone Brushes) — 50% off, $4.04, Amazon affiliate, from Hot Deals feed.

⏭ **Skipped:** 12 previously posted deals.

⚠ **Issues:**
- X (Twitter) post failed — SCP transfer to maya server returned error 255 (likely SSH connection issue).
- Pinterest post failed (non-critical).

**Exit code:** 0 (script completed).


Summary: FB Deal Poster completed at 7:32 AM UTC. No unposted deals found - all deals in both primary (35+ score) and secondary (25+ score) tiers have already been posted to Facebook. The script checked 59 deals total and found none remaining. Nothing was sent. NO_REPLY


Summary:
**FB Deal Post - No New Deals Available**

Ran the deal poster script at 08:33 UTC. Result: All qualifying deals have already been posted to Facebook.

- **Primary tier** (score ≥35): 10 deals, all already posted
- **Secondary tier** (score ≥25): 24 deals checked, all already posted

No new deal was posted. The script exited cleanly.


Summary:
Script executed successfully. Fetched 200 deals from the database.

**Result:** No unposted deals available for Facebook. Checked 12 high-quality deals (primary tier, score ≥35) and 35 medium-quality deals (secondary tier, score ≥25), but all qualifying deals have already been posted to Facebook.

No new Facebook post created this cycle.


Summary: Script completed. No unposted deals available — all qualifying deals (primary tier score ≥35 and secondary tier score ≥25) have already been posted to Facebook. The script exited cleanly without errors.


Summary:
FB Deal Poster ran at 11:34 AM UTC.

**Result:** No unposted deals available.

- Fetched 200 deals
- 12 high-quality deals (score ≥35) — all already posted to Facebook
- 35 medium-quality deals (score ≥25) — all already posted to Facebook

No new post sent. Script exited cleanly.


Summary:
**Facebook Deal Post - No Deals Available**

The deal poster script ran successfully but found no unposted deals available for Facebook. All qualified deals (both primary tier with score ≥35 and secondary tier with score ≥25) have already been posted to Facebook.

- **Primary tier (12 deals):** All 7 matching deals already posted
- **Secondary tier (35 deals):** All 23 matching deals already posted

**Result:** No new post created. The cron job executed cleanly with no errors.


Summary:
**Facebook Deal Post - No Unposted Deals Available**

**Execution Summary:**
- Fetched 200 deals from database
- Primary tier (score ≥35): 12 deals found — all already posted to Facebook
- Secondary tier (score ≥25): 35 deals found — all already posted to Facebook

**Result:** No unposted deals available in either quality tier. Script exited without posting.

**Next Steps:** New deals need to be added to the queue, or the posting schedule may need adjustment if Facebook is running ahead of deal availability.


Summary: Ran the deal poster script. No unposted deals available — all qualifying deals in both primary (12) and secondary (34) tiers have already been posted to Facebook.


Summary: No unposted deals available for Facebook. Script checked 200 deals - all 12 primary tier (score ≥35) and 34 secondary tier (score ≥25) deals have already been posted to Facebook. No action taken.


Summary: No deal posted this run. The script checked 200 deals and found 12 in the primary tier (score ≥35) and 34 in the secondary tier (score ≥25), but all of them have already been posted to Facebook. No unposted deals available at this time.


Summary:
**Cron Execution Complete: fb-deal-posts-10min**

**Status:** No new deals posted

**Result:** The deal poster script ran successfully but found no unposted deals available. Checked 200 total deals:
- Primary tier (score ≥ 35): 12 deals found, all already posted to Facebook
- Secondary tier (score ≥ 25): 34 deals found, all already posted to Facebook

**Next:** The script will try again on the next 10-minute cycle. No action needed - this is expected behavior when all qualifying deals have been shared.


Summary:
**Facebook Deal Poster - Run Summary**

- **Fetched:** 200 deals
- **Primary tier (score 35+):** 12 high-quality deals — all already posted to Facebook
- **Secondary tier (score 25+):** 34 medium-quality deals — all already posted to Facebook
- **Result:** No unposted deals available to post
- **Action taken:** None — script exited cleanly

All current deals have been exhausted for Facebook posting. Fresh inventory needed.


Summary:
**Facebook Deal Poster - Cron Run Complete**

**Time:** 2026-03-06 19:38 UTC

**Result:** No unposted deals available

**Details:**
- Fetched 200 deals from database
- Primary tier (score 35+): 12 deals — all already posted to Facebook
- Secondary tier (score 25+): 34 deals — all already posted to Facebook
- No candidates found, script exited cleanly

**Action taken:** None (no new deals to post)

**Next run:** Will check again at next scheduled interval


Summary:
**Facebook Deal Poster - Run Summary (2026-03-06 20:39 UTC)**

- **Status:** No deal posted
- **Reason:** All qualifying deals already posted to Facebook
- **Deals checked:** 200 total
- **Primary tier (score ≥35):** 12 deals — all already posted
- **Secondary tier (score ≥25):** 34 deals — all already posted
- **Action:** Script exited cleanly

No message sent to group chat.


Summary: No unposted deals available. Script checked 200 deals, found 12 in primary tier (score ≥35) and 34 in secondary tier (score ≥25), but all had already been posted to Facebook. Exiting cleanly — next run will check again.


Summary: Script executed successfully. No unposted deals available — all 30 qualifying deals (7 primary tier, 23 secondary tier) have already been posted to Facebook. The deal pool needs fresh inventory.


Summary: No unposted deals available for Facebook. The script checked both primary tier (35+ score, 12 deals) and secondary tier (25+ score, 34 deals) — all have already been posted to Facebook. Exiting cleanly with no action taken.


Summary:
**Facebook Deal Post - No New Content Available**

Ran the deal poster script at 12:40 AM UTC. The script checked 200 deals:

- **Primary tier (score ≥35):** 12 high-quality deals found, but all 7 unexpired ones were already posted to Facebook
- **Secondary tier (score ≥25):** 34 medium-quality deals found, but all 23 unexpired ones were already posted to Facebook

**Result:** No unposted deals available. All qualifying deals have already been shared to Facebook.

**Status:** Script completed successfully, no action needed. Next cron run will check for new deals.


Summary:
**Facebook Deal Post - No New Content**

**Result:** No unposted deals available for Facebook

**Details:**
- Fetched 200 deals from database
- Primary tier (12 deals): All already posted to Facebook
- Secondary tier (34 deals): All already posted to Facebook

**Action Taken:** None - script exited cleanly without posting

The posting queue for Facebook is exhausted. Fresh deals may be needed before the next scheduled run.


Summary:
**Facebook Deal Poster - Cron Run Summary**

**Time:** 2026-03-07 02:41 UTC

**Result:** No deals posted

**Details:**
- Fetched 200 deals from database
- Primary tier (score ≥35): 12 deals found, all already posted to Facebook
- Secondary tier (score ≥25): 34 deals found, all already posted to Facebook
- No unposted deals available

**Action Required:** None - this is expected behavior when all quality deals have already been shared to Facebook. The script will check again on the next cron run.


Summary:
**Facebook Deal Post - 3:41 AM UTC**

Ran the deal poster script. Result: **No unposted deals available.**

- Checked 200 deals
- Primary tier (35+ score): 12 deals found, all already posted to Facebook
- Secondary tier (25+ score): 34 deals found, all already posted to Facebook

The deal pool is exhausted for Facebook. New deals will need to be added before the next posting cycle can succeed.


Summary: Script executed successfully. No unposted deals available — all 12 primary-tier deals (score ≥35) and 34 secondary-tier deals (score ≥25) have already been posted to Facebook. The deal poster is working correctly; it just needs fresh deals to post. Next run will check again automatically.


Summary: Cron completed. Script ran, selected deal 39035 (FlexTurtle 5-in-1 Apple Watch Charger), group notification sent successfully. X posting failed due to SSH connection issue to maya server; Pinterest failed (non-critical). No manual message sent.


Summary:
**Facebook Deal Post - Summary**

**Deal Selected:** #39081 - GoPro/686 Avenue Men's 90% Down 600-Fill Parka Jacket ($19.99)
- Source: Secondary tier (score 33/100)
- Reason: $20 impulse buy zone, Top brand, Hot Deals feed
- 9 deals skipped from primary tier (already posted to Facebook)
- 12 deals skipped from secondary tier (already posted to Facebook)

**Status:**
- ✓ Image downloaded successfully
- ✓ Group chat notification sent (Facebook)
- ✗ SCP to maya server failed (X posting) - connection closed
- ✗ Pinterest post failed (non-critical)

**Note:** SCP issue likely needs SSH key or network check for maya server.


Summary: Deal poster executed. Selected deal 39050 (12-Pack Rip Van Dubai Pistachio Creme) after image validation rejected two previous candidates. Facebook group notification sent successfully. X and Pinterest posts failed due to SSH connection issue to maya server.


Summary: **Result:** No unposted deals available. Script checked 200 deals — all 15 primary tier deals (score 35+) and 46 secondary tier deals (score 25+) have already been posted to Facebook. Exiting cleanly.


Summary:
**FB Deal Poster - Run Summary**

**Status:** No post made

**Result:** Script found 200 deals, filtered to 14 high-quality (primary tier) and 45 medium-quality (secondary tier). All qualifying deals have already been posted to Facebook.

**Details:**
- Primary tier (score ≥35): 14 deals, all previously posted
- Secondary tier (score ≥25): 45 deals, 24+ checked, all previously posted

**Action taken:** Script exited cleanly without posting.

No new content was sent to any group chat.


Summary: No deal posted. All available deals (45 in secondary tier, 14 in primary) have already been posted to Facebook. The script completed successfully with no errors.


Summary:
**Facebook Deal Post - Summary**

**Status:** No unposted deals available

**Details:**
- Fetched 200 deals from database
- 14 high-quality deals (score ≥35) — all already posted to Facebook
- 45 medium-quality deals (score ≥25) — all already posted to Facebook
- No new candidates found for posting

**Result:** Script exited without posting. All available deals have already been shared to Facebook. The next scheduled run will check again for fresh deals.


Summary:
**Facebook Deal Poster - Run Complete**

**Status:** No unposted deals available

**Summary:**
- Fetched 200 deals from feed
- Primary tier (12 deals): All already posted to Facebook
- Secondary tier (44 deals): All already posted to Facebook

**Result:** No new deal posted — the queue is exhausted. All qualifying deals have already been shared to Facebook.

**Time:** 2026-03-07 12:45 PM UTC


Summary:
**FB Deal Post — No New Deals Available**

- **Deals fetched:** 200
- **Primary tier (score ≥35):** 12 deals — all 7 eligible already posted to Facebook
- **Secondary tier (score ≥25):** 43 deals — all 22 checked already posted to Facebook
- **Result:** No unposted deals available. Script exited cleanly.

The deal pool needs fresh inventory before the next scheduled post.


Summary:
No unposted deals available. Script checked 200 deals:

**Primary tier (score ≥35):** 10 deals found, all already posted to Facebook
**Secondary tier (score ≥25):** 42 deals found, all already posted to Facebook

Result: No new deal posted. All qualifying deals have been previously shared to Facebook.


Summary:
**Cron Result: fb-deal-posts-10min**

**Status:** No deals posted
**Reason:** All available deals have already been posted to Facebook

**Details:**
- Fetched 200 deals from database
- Primary tier (score 35+): 10 deals — all already posted
- Secondary tier (score 25+): 41 deals — all already posted

No action needed. The script will check again on the next scheduled run.


Summary: Script executed successfully. No unposted deals available — all deals in both primary (35+ score) and secondary (25+ score) tiers have already been posted to Facebook. The script checked 200 deals, found 50 qualified deals across both tiers, but all were already marked as posted.


Summary:
**FB Deal Poster Summary:**
- Fetched 200 deals
- 9 primary tier (score ≥35), 39 secondary tier (score ≥25)
- All deals already posted to Facebook
- No new content available to post

The deal queue is exhausted - all qualifying deals have been shared to Facebook already.


Summary: No unposted deals available. All 24 qualifying deals (8 primary tier, 16+ secondary tier) have already been posted to Facebook. Script exited without posting.


Summary:
**Facebook Deal Poster - Run Complete**

**Status:** No deals posted

**Result:** The script found 200 total deals. After filtering for quality (primary tier: score ≥35, secondary tier: score ≥25), all eligible deals have already been posted to Facebook.

**Breakdown:**
- Primary tier: 8 high-quality deals, all already posted
- Secondary tier: 36 medium-quality deals, all already posted

**Next Steps:** Need fresh deals in the system with scores ≥25 to resume posting.


Summary: No unposted deals available. All 200 fetched deals in both primary (8) and secondary (36) tiers have already been posted to Facebook. Script exited cleanly with no action taken.


Summary:
**GHC Deal Poster - Cron Complete**

**Result:** No new deals posted

**Details:**
- Fetched 200 deals from database
- Primary tier (score ≥35): 8 deals found, all already posted
- Secondary tier (score ≥25): 35 deals found, all already posted

**Status:** All available deals have already been shared to Facebook. No unposted deals available. Script executed successfully with clean exit.


Summary: No unposted deals available for Facebook. The script checked 200 deals and found 8 high-quality primary tier deals and 34 medium-quality secondary tier deals, but all have already been posted to Facebook. No action taken.


Summary: Script executed successfully. No unposted deals available — all qualifying deals in both primary tier (5 deals, score ≥35) and secondary tier (32 deals, score ≥25) have already been posted to Facebook. No action taken.


Summary:
**Facebook Deal Post - Summary**

**Result:** No new deals posted

**Reason:** All available deals have already been posted to Facebook. The script checked:
- 5 high-quality deals (score ≥35) - all previously posted
- 30 medium-quality deals (score ≥25) - all previously posted

**Action:** Script exited cleanly. No message sent to group chat.

**Next steps:** Wait for new deals to be added to the database, or consider lowering the MIN_SCORE threshold if posting frequency needs to increase.


Summary:
Task complete.

**Result:** No unposted deals available for Facebook.

- Fetched 200 deals from feed
- Primary tier (5 deals): All already posted to Facebook
- Secondary tier (30 deals): All already posted to Facebook

The deal pool has been exhausted. New deals need to be added to the feed before the next posting cycle can succeed.


Summary:
**Facebook Deal Poster - Run Summary (4:05 AM UTC)**

**Status:** No deals posted (no unposted deals available)

**Details:**
- Fetched: 200 deals from database
- Primary tier (score ≥35): 4 deals found, all already posted to Facebook
- Secondary tier (score ≥25): 29 deals found, all already posted to Facebook
- Result: No unposted deals available in either tier

**Action Required:** None - script executed correctly but inventory exhausted. All qualifying deals have been previously posted to Facebook.


Summary: **Summary:** Script executed successfully but no deal was posted. Found deal 38917 (Samsung 24" monitor, 36% off, $89.99) but image validation failed (too small at 12KB - likely placeholder). All other available deals already posted to Facebook. Next run should find fresh deals.


Summary: Script executed. No unposted deals available — all qualifying deals have already been posted to Facebook. The script checked 200 deals, found 4 in the primary tier (all posted), then checked 27 in the secondary tier (all posted). Exiting cleanly.


Summary:
**Facebook Deal Post - Summary**

Status: No deals posted

Result: All available deals have already been posted to Facebook. Checked 30 qualifying deals across both tiers:
- Primary tier (score 35+): 2 deals, both already posted
- Secondary tier (score 25+): 28 deals, 13 already posted to Facebook, remaining 15 either posted to other platforms or filtered out

Next run will check again for new deals from the feed.


Summary: Script executed. No unposted deals available — all eligible deals have already been posted to Facebook. The deal pool is exhausted for this platform.


Summary:
**Facebook Deal Post - Completed**

- **Status:** No new deals to post
- **Result:** All available deals (primary and secondary tier) have already been posted to Facebook
- **Action taken:** Script executed successfully, checked 200 deals, found 0 unposted

The deal queue is current - all eligible deals have been posted to Facebook. Next run will check for new deals added to the system.