Consent is bound to the channel it was given for: approving a post on X says nothing about Instagram. Publishing state moves from the SocialMilestone row into SocialMilestonePost, one row per channel, where a missing row means no consent. The dialog asks per channel, shows the text each one will publish and keeps a separate handle for each; Instagram captions end in hashtags because a link there is not clickable. Also fixes three problems in the existing X path: - A QR code already past several thresholds produced one prompt per threshold, and since the post quotes the current scan count, every one of them would have published the same number. Only the highest threshold is announced now. - Detection ran after every unique scan and re-read the QR code's full scan history just to hit skipDuplicates. Known milestones are filtered first. - A failed post stayed failed forever because the consent dialog only opens once. The queue now retries three times on its own, spaces first attempts by SOCIAL_MILESTONE_MIN_GAP_HOURS, and Settings lists every milestone per channel with restart and revoke. The worker no longer renders the card itself; it downloads the image the app renders at /s/m/<token>/og, which also serves the new square and portrait formats. Instagram publishing stays off until SOCIAL_MILESTONE_CHANNELS and SOCIAL_WORKER_CHANNELS both name it. Schema changes are manual SQL, see sql/2026-08-16_*.sql. Run both before deploying this version. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Codex Automation System
This folder defines reusable Codex workflows for QRMaster and GreenLens Pro. Use these as operating playbooks when asking Codex to run growth, SEO, content, or app-store work.
Active Automations
QRMaster
-
qrmaster-pr-seo-review.md- Purpose: review every SEO, landing page, and conversion change before it is merged.
- Primary plugins/tools: GitHub, Codex.
- Primary skills:
ai-seo,content-strategy,careful,qa.
-
qrmaster-seo-sprint-machine.md- Purpose: plan and produce a weekly SEO sprint from keyword backlog to PR-ready work.
- Primary plugins/tools: GitHub, Coupler or CSV exports, Codex.
- Primary skills:
content-strategy,ai-seo,copywriting,qa.
-
qrmaster-broken-link-cta-checker.md- Purpose: catch broken internal links and broken CTAs after direct
mainbranch changes. - Primary plugins/tools: Codex, GitHub Actions or local npm script.
- Primary skills:
qa,ai-seo.
- Purpose: catch broken internal links and broken CTAs after direct
GreenLens Pro
-
greenlens-pain-mining-machine.md- Purpose: turn reviews, comments, competitor messaging, and search questions into product, ASO, and content opportunities.
- Primary plugins/tools: Codex, Gmail, Coupler or CSV exports.
- Primary skills:
app-store-aso,content-strategy,copywriting.
-
greenlens-viral-slideshow-machine.md- Purpose: turn validated plant pains into TikTok, Instagram, and Canva-ready slideshow assets.
- Primary plugins/tools: Canva, Codex, Gmail/Fyxer for creator briefs.
- Primary skills:
content-strategy,copywriting,ad-creative,app-store-aso.
Operating Rule
Do not automate publishing directly. Automate drafts, PRs, reviews, and packaged outputs first. A human should approve live SEO pages, store metadata, influencer messages, and paid/conversion changes.