_Canonical open-items list. Updated 2026-07-27. Re-surface every session until closed._
_Supersedes the dated snapshots OPEN-LOOPS-AUDIT-2026-05-31.md + PINTEREST-STATUS-AND-OPEN-LOOPS-2026-05-31.md._
_Reconciled 2026-07-27 against TASKS.md + MTL-MASTER-TASK-TRACKER.html. Items not mentioned in the 07-27 state are carried and tagged (carried β confirm still open) so nothing is silently dropped._
---
Full-surface scan of 89 products, 13 pages, 5 policies, all collections, 510 live theme files.
Scanner: _sweep_shopify_2026-08-06.py Β· fixers: _fix_shopify_content*.py, _fix_theme*.py Β· backups in BACKUP-shopify-content-fixes-2026-08-06/ + BACKUP-theme-fixes-2026-08-06/.
FIXED and verified live (mobile 390x844 then desktop 1440x900, Shopify.theme.role === 'main' asserted):
Ships within 2 to 5 days on every surface. Was wrong on: how-it-works (2x hyphen), birth-flower-guide (1x hyphen), FAQ (2x "business days"), llms (1x en dash + "business days"), monogram-initial PDP body (1x en dash), and assets/mtl-pdp-trust-row.js (en dash, rendered on every PDP)."Add to Cart β " β "Add to Cart: ").<!-- Printify Personalize Button mount point --> HTML comment in both personalization sections, and the shopper-facing alert("...Printify Hub URL...") fallback. Live PDP now returns 0 matches for /printify/i in rendered HTML."Hand-Engraved Pet Jewelry" section default β "Engraved Pet Jewelry" (LOCKED-RULES bans "hand-engraved").LOCKED-RULES.md and CLAUDE.md were still teaching the en-dash/hyphen ship string, contradicting SETTLED-FACTS 5.14. This was the re-seeding source. Fixed, plus 2 still-pending TASKS.md items that specified the wrong target string.Verified CORRECT, no action (recorded so it is not re-audited):
shipsToCountries = [CA, US].hello@memorythatlasts.com; no personal email/phone/home address on any customer surface. Policies name only the Harvard Business Services registered agent.metal==="silver" gradient logic), which SETTLED-FACTS explicitly permits as the invisible taxonomy base. Not a breach β do not "fix" these.us-only scanner hits are false positives ("SKUs only", "focus only"). Czech/Polish locale files match \bPOD\b as the word "pod". False positives.1. "Charm" in ~13 product TITLES (e.g. "Daisy Charm Necklace", "Aries Charm Necklace"). The no-"charm" rule collides with real search volume, and titles must stay Shopify/Etsy identical, so changing them is an SEO + parity decision, not a copy fix. Decide: keep "charm" in titles as a keyword exception, or rewrite both platforms together.
2. Product handle ...-bff-keepsake contains "keepsake". Changing a handle changes the live URL β needs a redirect plan. Left alone.
3. printify_print_on_demand_personalize_button block IDs in 3 product templates + the .mtl-printify-stealth CSS class. Admin/app-bound; renaming risks breaking the personalize mount and the live preview. Not customer-visible as text.
4. Return-policy JSON-LD still emits applicableCountry: "US" only, and shippingDestination only US β SETTLED-FACTS #4 says this was extended to ["US","CA"] on 2026-08-02. Looks like that change regressed or never shipped. Worth confirming before Google re-crawls.
5. Finish order wrong in some PDP body copy β heart-cutout lists Gold β Stainless β Rose Gold; LOCKED-RULES mandates Gold β Rose Gold β Stainless.
6. templates/index.scratch.json still carries "ships within 2-5 business days" x2. Appears to be an unused scratch template β confirm and delete.
7. metalFormalName() emits "Gold (18K PVD)" as a line-item property, not the canonical "Gold β 18K PVD". Changing it may desync supplier-side mapping (SETTLED-FACTS 5.9 five-places warning). Flagged, not touched.
Etsy shop 62435306 settings/About/policies/profiles/partners/attributes/sections/announcement/FAQ/vacation/ads Β· Klaviyo Β· Judge.me Β· Cloudinary Β· Cloudflare Worker Β· Pinterest Β· Google Merchant Center Β· Tailwind Β· Printify settings Β· Shopify notification email templates, checkout/customer-accounts settings, domains, nav menus, app permissions, metafield definitions, Files. Also: agent/memory/ directory not yet reconciled against live.
---
memorythatlasts.com is fully launched, public, and meant to be discoverable - no storefront password, not pre-launch/gated (Kayla confirmed 2026-07-29). Etsy shop (62435306) likewise live. This is settled: do not treat the store as pre-launch or re-add a storefront password.
---
1. Zodiac HOMEPAGE tile decision ("Daphne butter" = the cat-paw slider; using it would duplicate the Pet tile) β blocks the Shop All collage rebuild.
2. Approve the 3 regenerated birth-flower videos (July / Oct / Nov heart clips β gold holds, no flicker; on mtl-video-review.pages.dev).
3. Approve the homepage tile row (AM + daisy) live push.
4. Approve the zodiac collection preview (before the live filter switch).
5. _Optional / one-clicks:_ hit "Run now" on the Etsy retest scheduled task (etsy-rest-activation-retest) Β· consolidate the 2 duplicate Cloudinary accounts (dl7mguxyk operational vs dafx1ucr4 new).
### Carried awaiting-Kayla (β€07-22, not in the 07-27 state β confirm still open)
---
6. Shopify Zodiac collection β adding Sign + Product-Type filters (via metafields) + site-wide free-ship badge on DEV. Live filter switch held for Kayla (#4).
7. Hero image audit + Caitlyn-style plan.
8. Store-wide verify of the approved CIRCLE finish swatches.
### Carried in-flight (β€07-22, not in the 07-27 state β confirm still open)
mtl-required-color.js DEV test (deferred).### Carried from 07-26 (not in the 07-27 state β confirm still open)
164457): relabel both variants, set new one to $52 parity (Shopify=Etsy), DEV-first live-preview fix, gold-outside Kittl mockup still needed (pending Kayla β show image first), Etsy shipping-profile + processing-time fix, customer test.---
memory-that-lasts-shop-manager (key pi8kfm4tjjzwxeetos7kcjcy, 10 QPS / 10K QPD, listings r+w); OAuth tokens saved to .etsy-oauth.env; REST gateway still 403 (key propagating); the hourly scheduled retest etsy-rest-activation-retest flips it to live automatically. Old apps banned.---
---
mtl-snippets-rows-2-17.pages.dev) now through row 60 (rows 23β60 all zodiac; 35 & 48 spacers).SNIPPET-LISTING-PUBLISH-SOP.md); column drift noted (Title now col I; BV/BR/BT have blank headers).mtl-video-review.pages.dev; Cat sliding-bar uses Kayla's own real video (no regen).memory-that-lasts-shop-manager; OAuth access+refresh tokens saved; ops docs updated; old apps banned. _(Key still propagating β see Parked.)_CLOUDINARY_URL.txt retired (renamed + readme); flagged the 2 duplicate "Memory That Lasts" accounts (dl7mguxyk operational vs dafx1ucr4 new) to consolidate.---
./mtl-preflight.sh and use the CURRENT DEV it prints (most recently updated unpublished theme).wrangler deploy (never the dashboard editor).---
### OPEN β Judge.me reviews widget: confirm live render in INCOGNITO (2026-07-28)
sections/mtl-personalization.liquid (shared β all personalized SKUs). Backup: /backups/mtl-personalization.liquid.LIVE-pre-judgeme-mount-2026-07-28.bak---
### RESOLVED 2026-07-28 β Judge.me reviews widget NOW RENDERS for logged-out visitors
#judgeme_product_reviews div does NOT paint on this store (Judge.me v3). Replaced with the official Judge.me Review Widget app block in a new visible section sections/mtl-reviews.liquid, added to ALL product templates.---
### RESOLVED 2026-08-04 - Birth flower month filter is now real URL state (server-side)
sections/mtl-bf-collection-filter.liquid ran defaultKeys = [thisMonth, +1, +2] then defaultKeys.forEach(k => selected.add(k)) on EVERY load, so a cold load always landed on a rolling 3-month pre-filtered subset with no explanation, and a reload silently discarded the visitor's choice. Tiles were <button> toggles with zero URL state, so within a session clicks accumulated. Deterministic, which is why a session hunting for sessionStorage could not reproduce it. DELETED. Do not reintroduce any client-side default selection.mtl-birth-flower-picker-deep.liquid (that 90KB file renders on templates/page.birth-flower-guide.json). The collection template renders exactly one section: mtl-bf-collection-filter. Editing the deep file would have changed nothing on the collection and would have broken the guide page.<a> anchors on filter.p.m.custom.birth_month, built from collection.filters url_to_add / url_to_remove. Grid switched from collections['birth-flower-necklaces'].products (all 24, JS show/hide) to collection.products so Shopify filters server-side. URL and grid can no longer disagree.custom.necklace_style (definition 254296785045), values "Heart Pendant" / "Vertical Bar", 12 each, all 24 populated, 0 errors. Tag filtering was NOT viable: these products carry 50 distinct tags.collection.filters, so there is never a dead control on the page..mtl-work/backup-live-20260804-205418/LIVE_159936544917_mtl-bf-collection-filter.liquid. Pre-change DEV and LIVE copies: .mtl-work/backup-20260804-200830/.sections/mtl-birth-month-filter.liquid DELETED from the then-current DEV theme (2026-08-04) so nobody wires it in later.snippets/meta-tags.liquid untouched. States keep the bare canonical.---
### OPEN - Kayla click: add "Necklace style" filter in Search and Discovery (2026-08-04)
custom.necklace_style) > Save.?filter.p.m.custom.birth_month=March&filter.p.m.custom.necklace_style=Heart+Pendant returns 1 product reading "1 March piece".---
### OPEN - Birth Month filter values sort alphabetically, calendar order wanted (2026-08-04)
---
### OPEN - Two pre-existing defects in sections/mtl-birth-flower-picker-deep.liquid (2026-08-04) - DO NOT TOUCH CASUALLY
select_birth_month, Pinterest lead tracking plus pinit.js, two separate /cart/add.js quick-add paths, cart drawer opening and cart count refresh, the zodiac cross-sell, and the compare-two-dates module. It renders on templates/page.birth-flower-guide.json and owns that page's H1. Any edit risks email and SMS capture plus all analytics.dd is used but never declared in the date-input handler. Every 4-digit MM/DD entry throws. Tile selection at line 1567 has already fired so the picker partially works, but the throw means showZodiacForDate, showEmailCapture, month nav and Pinterest buttons never run from the date-input path. Email capture is therefore silently suppressed for anyone who types a date instead of tapping a tile.<div class="mtl-bf-deep__products"> is opened and never closed. The zodiac cross-sell block, the "see all flower meanings" links, and the cart toast (lines 1441-1472) are all nested inside a display:none container until a month is selected. The toast likely never shows on a first add.show_date_input and show_preview are never read; PRODUCT_LOOKUP (1709-1806) hardcodes handles, variant IDs and CDN image URLs snapshotted 2026-05-03 and goes stale silently.---
### OPEN - Some birth flower product images returning 502/504 from Shopify CDN (2026-08-04)
carnation-necklace-1.jpg and violet-flower-necklace-1.png returned 504, january-carnation-necklace.png returned 200. Mixed, so likely transient CDN.product.featured_image | image_url call as before.---
### Pinterest, verified live in browser 2026-08-05 - NOT blocked, just IDLE
Working today with NO API token:
4815957580684: 261 ingested, 0 failed, 0 warnings, 100% of data source, last ingestion Aug 5 5:46 AM EDT, no ingestion issues.196385898645, 89 of 89 products published.The actual gap is idleness, not access:
MY ERROR, needs Kayla's yes: I created a junk board on her live profile, zz-sandbox-isolation-test (0 pins, 2026-08-04). My earlier claim that sandbox writes were discarded was WRONG. Truth: sandbox writes land on the PRODUCTION account while sandbox reads return empty, which is what fooled me. Never run a write against the sandbox host again. DECISION: delete zz-sandbox-isolation-test? (y/n)
Standard access, real picture: form at /apps/1565734/upgrade/ requires a video demo (required field) showing how the app authenticates Pinterest users plus main features, mp4 under 2GB, plus app name, company name, website, privacy policy link, app purpose, use cases, audience. All text fields are answerable from what we have. The video is the only real blocker and it cannot be recorded until OAuth completes. Pinterest publishes no SLA, only "reviewed regularly", decision by email. Not urgent.
Token, for completeness: app shows Trial access active, redirect URI http://localhost:8085/callback registered, OAuth one approval away. The approval must happen in a Chrome on the Neo Mac (callback listens on localhost:8085 there; the connected browser is Indigo Computer). The token buys programmatic reads, reporting and pin analytics only.
Full evidence: PINTEREST-TOKEN-TRUTH-2026-08-04.md.
---
Decision: do the zodiac coin family only, via Evlista bulk alt-text. Not all 88
listings. Ranking benefit is marginal to zero. The real reason is brand and FTC
control, because Etsy now auto-writes AI alt text on any blank US listing image and
we already have a listing serving it. Full research: ETSY-ALT-TEXT-DECISION-2026-08-05.md.
Copy is written and swept clean: COIN-ALT-TEXT-COPY-2026-08-05.csv, 88 rows,
11 signs x 8 images, max 200 chars. Zero hits for silver, Printify, POD, keepsake,
charm, em dashes, AI strings.
Run order:
1. Personalized Cross 4514186525 GOES FIRST. Confirmed serving Etsy's own
auto-generated alt text after a re-upload wiped ours. Live problem, ours to fix.
2. Evlista single-listing TEST on Taurus 4510839662 before any batch.
3. Coins batch 1: Aries, Taurus, Gemini, Cancer, Virgo.
4. Coins batch 2: Libra, Scorpio, Sagittarius, Capricorn, Aquarius, Pisces.
5. Verify: re-run _alt_reverify_2026-08-04.py, confirm alt filled AND all images
still present in original order.
6. Leo 4510220095: NO ACTION. Correct as-is.
Before any bulk apply: check in Evlista's photo grid whether the 11 coin listings
share the same 8-shot order. The canonical folder README documents a different order
than the live Leo listing uses. CSV rows are keyed to view codes, not slot numbers.
Do not paste by position.
Hard rule, added to LOCKED-RULES: never write listing images via the Etsy Open
API. No alt-text-only endpoint exists, so every API alt write is an image write, and
uploadListingImage has an open unfixed defect that deletes images. This already
destroyed a Taurus primary on 2026-08-04. Evlista or the Etsy Seller app only.
MY ERROR, corrected same day: I added "Shown on an AI-generated model." to the
worn frames, copying a convention from ALT-TEXT-MASTER-REGISTRY.csv without
checking SETTLED-FACTS. That registry predates Kayla's 2026-08-01 AI-labelling
decision. Stripped from the copy file (33) and from the registry itself (10), both
now zero. SETTLED-FACTS section 3 extended to name alt text explicitly so a cancelled
convention cannot resurface from that file again.
Open question, low priority: per-sign zodiac card trait words are baked into the
mockup images and are not in any Ops file. CARD rows stop at "beside a printed [Sign]
zodiac card", which is accurate. Kayla can add traits if she wants them.
---
### CLOSED 2026-08-06 - Canada checkout rate name (dash + wording)
Kayla narrowed the dash rule: em/en dashes are banned in TITLES and SNIPPETS only. They are
acceptable in shipping, size, and colour variation text. The checkout rate name
"Canada Standard (transit 10-30 business days)" is shipping text, matches the real Fulfill
Engine carrier window, and matches the shipping policy. No rename required. API rename is
permission-blocked for sessions anyway; manual rename remains optional cosmetics only.
### ACCEPTED 2026-08-06 - Judge.me cached product_name metafields are stale by design
judgeme.review_widget_data snapshots the product title and only refreshes when review
activity touches that product (proven: Taurus refreshed 2026-08-04 with Kevin's review and
carries the current title; January Bar snapshot from April still carries the old em dash
title). App data, not customer copy; self-heals per product. Only customer surface is the
product name inside Judge.me's own review modal. Optional force-fix: product sync button in
the Judge.me admin. Do not re-hunt this as a copy bug.
### CLOSED 2026-08-06 - Etsy processing time was never missing
Earlier flag was wrong and is retracted. The shipping profile API shows empty min/max
processing days, but Etsy stores processing time as a PROCESSING PROFILE applied per
listing: "Made to order (2-5 days)" is applied to all 88 active listings (verified in Shop
Manager in the live browser). Buyers already see 2 to 5 day processing. No action. Lesson:
the shipping-profile processing fields are not the source of truth on this shop.
### OPEN (one manual click) - Judge.me product-name cache flush, optional
Kayla approved forcing the sync. Blocked from automation twice: the embedded Judge.me app
runs in a cross-origin iframe that ignores synthetic clicks, and judge.me redirects its
standalone URLs back into the embedded admin. Manual path: Shopify admin > Apps > Judge.me
> Settings > Product management > sync/refresh products. Purely cosmetic (stale titles
inside Judge.me review modal only); self-heals per product as reviews arrive.