MTL Command Board

Live-truth reconciliation execution pass · updated 2026-08-06, social track folded in · theme asserted role=main, no preview cookie

Social launch, not yet executing

OPENSocial Command Center is now hosted and linked
The 12 Kayla-locked zodiac coin clips, the season-ordered Month 1 calendar, the hook bank, the 12 Pinterest title and description pairs and the promote/replace/hold KPI rules were sitting in a single HTML file in Downloads, invisible to this board. Now filed in the Ops folder and hosted, phone-openable.
Board: mtl-social-command-center.pages.dev
File: MemoryThatLasts-Ops-UPDATED/MTL-SOCIAL-COMMAND-CENTER.html
Shipping copy in it was normalised to Ships within 2 to 5 days and all em dashes stripped before hosting.
BLOCKEDThe weekly social approval task has never actually run
Scheduled task mtl-weekly-social-approval is enabled, Mondays 9am, next fire 2026-08-10, and its run history is empty. Its own plan says to pre-approve its tools with a manual "Run now" so future runs do not stall waiting on permission. That has not been done, so the entire Month 1 calendar is scheduled against a job that has never proven it can fire.
Owner: Kayla. Next action: open the Scheduled sidebar, hit "Run now" on mtl-weekly-social-approval once, approve the tool prompts.
OPENMonth 1 calendar is written but Week 1 has not started
12 clips are approved and locked as of 2026-08-06. Week 1 is Leo, Virgo, Gemini, Taurus, TikTok 6 to 9pm ET, Pinterest same day via Tailwind, Reel next day. Nothing has posted. Leo is in season right now, so every week of delay is spent against the one sign whose buying window is open.
Owner: Kayla approves, posting is in-app. Next action: approve Week 1 on the first working Monday brief, or say "approve the month".
OPEN12 Pinterest title and description pairs unverified against eRank
Drafted but explicitly marked draft. They must be checked against eRank Superstar keywords before the first pin goes out, otherwise the whole month pins against guessed keywords.
Owner: Claude runs eRank, Kayla approves the final 12. Next action: broad seed per sign, Avg Searches above 0, Etsy Competition under 6,000, sort KD low to high, then rewrite any title that loses.
OPENInstagram handle not confirmed
Reels reuse the same 12 clips on a next-day cadence, so the Instagram leg of every week is undeliverable until the handle exists and is logged in.
Owner: Kayla. Next action: confirm the handle, or drop Reels from Month 1 and re-plan as TikTok plus Pinterest only.
OPENEtsy square listing videos for the zodiac coins still pending
A separate track from the 9:16 social clips and named in the file as unscheduled. Coin listings are running without square listing video.
Owner: Claude. Next action: queue after Week 1 posts, one sign as a test before the batch.
HOLD1080x1920 re-renders and further render spend
Deliberate hold, not a miss. No new renders without a data reason. A sign in the top 3 two weeks running earns a re-render at roughly $2.04 with approval. Remaining render credit roughly $12.93, so about six upgrades exist before spend stops.

Fixed and verified live

DONEShip copy standardised, 176 descriptions
All 88 Shopify and all 88 Etsy descriptions now read exactly Ships within 2 to 5 days. Previously 0 of 176 complied: every one carried an en dash U+2013 and a capital D. Also fixed in 34 theme sites, 85 product SEO meta descriptions and 40 collections. Recorded as canonical in SETTLED-FACTS entry 5.14 so it cannot be re-litigated.
Verify on a PDP
DONE"keepsake" removed at theme level, 23 occurrences in 17 files
Not 1 as an earlier scan claimed, and not in product copy at all. It was theme-level and rendering on every personalized PDP: the eyebrow badge, the gift-card sub-label and 15 product templates. Live pages now return 0.
Home · Collection
DONEPill tags stripped from all 88 products, at source
The scope was the whole catalogue, not 24 birth flower products. The store also had 2 live webhooks, not zero. The products/update webhook was re-applying the tags on every edit, so the worker was patched first (AI_PILL_FLAGGING_ENABLED = false, deployed via wrangler), then the tags were stripped. 88 product writes fired the webhook and the tags did not come back. Webhook plumbing left intact and the change is one constant to revert.
DONEZodiac bar price parity at $39
All 12 were already $39 on Shopify, so this was Etsy-only. 12 Etsy listings moved $44 to $39. Etsy is now $39 x82.
DONEBreak Apart Heart parity
Was $52 Shopify against $59 Etsy. Etsy lowered to $52 to match, following the same resolve-to-the-lower-price convention used for the paw line on 08-02 and for the zodiac bars today.
DONEEm dashes removed, 857 total
228 in 55 theme files, 258 in product descriptions, 371 in product image alt text. The en dash U+2013 is deliberately preserved inside the canonical finish labels (Gold – 18K PVD), which a blanket strip would have broken.
DONETheme id drift confirmed fixed
Preflight STORED THEME IDS reads none across all 55 current-state docs. It stuck.
DONEEtsy alt text true number established
17 of 749 images, 2.3%, not 9. Concentrated in exactly 2 listings. Read-only measurement. The destructive API image path was never touched: the safe route is the native Etsy field, which only appears under roughly 950px window width.
DONEEtsy processing time now 2 to 5 on all 88
Caught from Kayla's screenshot, missed by the API pass. 86 of 88 listings were on a "Made to order (3-5 days)" processing profile while every description said 2 to 5, so Etsy was showing buyers a 3 to 5 ship-by window. The prior "loop closed" call had been made off a 2-listing sample, and those 2 were the only ones already correct. Kayla moved all 88 onto the 2-5 profile 2026-08-05 18:06. Re-queried live: 88 of 88 return processing 2 to 5, zero exceptions. Copy and machine now agree.
DONEEtsy shipping profiles cleaned to one
Started at 5, four of them unused and a latent free-shipping trap, including one named "Free Economy-Standard: Fulfill Engine, Accessories, Pets" which also exposed the fulfilment partner. Deletion by API was blocked at HTTP 403 (token holds listings_r listings_w shops_r transactions_r, needs shops_w), so Kayla cleared them from Shipping settings 2026-08-05 18:11, along with the emptied 3-5 processing profile. Re-queried live: 1 shipping profile, "Free Standard – Accessories", holding all 88 listings, zero orphans. US primary and secondary cost both $0.00, so free US shipping is genuinely free with no silent second-item charge. Canada $9.39 / $4.39.
DONEHomepage meta description fixed, all three tags
Verified live 2026-08-06 rather than taken on trust, clean cookie jar, Shopify.theme.role === 'main' asserted, mobile UA and desktop. meta description, og:description and twitter:description all now read "Ships within 2 to 5 days", all three, both viewports. No "business days" left anywhere on the homepage. This was the last surface still carrying the old string.
DONELiquid errors on personalized PDPs, fixed properly
Root cause: sections/mtl-personalization*.liquid piped section.settings.img_gold and img_silver straight into image_url. On templates where those settings are unset the value is nil, image_url throws, and Liquid injected the error text itself into the data attribute, so the JS was receiving data-img-silver="Liquid error (sections/mtl-personalization line 45..." as a URL. img_rose was already guarded; gold and silver were not. Guarded both, plus the matching initial_pendant_src assign, in both personalization sections. Tested on DEV first: DEV showed 0 errors and clean empty attributes against live's 2 errors, with form, char limit, price, cart input and all 33 Judge.me nodes identical. Deployed live-direct. Live now 0 Liquid errors on personalized PDPs, mobile and desktop, personalizer form intact. DEV never published.
DONEThe 9 collection-grid em dashes were video alt text
Not the theme and not a fallback. All 749 product images were already clean and none was blank, so the earlier alt pass had done its job. The culprit was product video media, which carries its own alt and is not in product.images, so the pass never reached it. 40 video alt strings fixed via GraphQL productUpdateMedia, 40 of 40, zero failures. Home and zodiac collection now render 0 em dashes.
DONEEtsy $49 listing identified, it was a price break not a misfile
4503082020 "Personalized Pet Bar Necklace" was not a misfiled listing as the ledger recorded. Matched by title, tags, description and 3-finish SKU structure to Shopify 9185465860245, same product, same title, priced $39 on Shopify against $49 on Etsy. A straight $10 parity break and the largest one left. Etsy lowered to $39, verified live. Etsy is now $49 x2, matching Shopify x2. Separately confirmed 4503080215 pairs correctly with the Shopify paperclip paw heart at $42.
DONEDiscount facet settled, the ledger was wrong
Checked live on /collections/zodiac-necklaces at role=main. The rendered facet bar is Zodiac Sign / Product Type / Sort. There is no Discount facet, no such filter param in the DOM, and Shopify Search and Discovery has no Discount filter type. What reconciles the two records: "Product Type" is the display label of the custom.jewelry_format filter, not a separate filter, so preflight was listing filter keys while the ledger was listing rendered labels. Both described the same config. The ledger's "Availability and Price removed" was also wrong; both are still enabled and still present as filter params. Ledger corrected in place.

Blocked, needs Kayla

BLOCKEDTwo em dashes left, both frozen or third party
Everything reachable this pass is clean. What remains, deliberately untouched:
1. The All Products collection SEO title tag, "Shop All — Personalized Engraved Necklaces", which feeds <title>, og:title and twitter:title. That is a title, and titles are frozen this pass, so it was skipped by rule, not missed. Its description tag was fixed and is confirmed correct at source.
2. One em dash inside judgeme.review_widget_data, a third-party app cache holding a stale product name. Not our copy, not visible text, regenerates from the product title.

Open

OPEN"charm" still in 2 Shopify products and 2 Etsy listings
7 occurrences each. Not touched: the ledger split this into keep-the-umbrella-term versus strip-the-per-flower-uses, and resolving it would need title edits, which were explicitly out of scope this pass.
OPENJudge.me cached product names are stale
The judgeme.review_widget_data metafield on each product holds a cached product_name snapshotted from an older title, still carrying em dashes. Third-party app data, not customer copy, and it refreshes on the app's own schedule. Noted so the next session does not re-hunt it as a copy bug.
No AI pills, no AI disclosure lines, anywhere, ever. Settled, and checked again on every page in this pass: zero hits. No product titles changed. DEV never published.