[object Object]

← back to Dw Signup Fulfillment

Verify published designer account flow and Shopify login handoff

1e9062c6f3f5fdfaf1a16231600911bcd66f5021 · 2026-09-04 23:13:55 -0700 · Steve Abrams

Files touched

Diff

commit 1e9062c6f3f5fdfaf1a16231600911bcd66f5021
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Fri Sep 4 23:13:55 2026 -0700

    Verify published designer account flow and Shopify login handoff
---
 verification/tk11283/REVIEW.md                     |   6 +-
 .../current-snippets__dw-signin-modal.liquid       |  62 +++++
 .../current-snippets__dw-trade-apply.liquid        | 260 +++++++++++++++++++++
 verification/tk11283/e2e-proof.json                |  80 ++++++-
 verification/tk11283/live-account-modal.png        | Bin 0 -> 586513 bytes
 verification/tk11283/live-mobile-account-ready.png | Bin 0 -> 48401 bytes
 verification/tk11283/live-shopify-handoff.png      | Bin 0 -> 23404 bytes
 verification/tk11283/live-smoke.cjs                |  54 +++++
 verification/tk11283/live-smoke.json               |  34 +++
 verification/tk11283/publish-theme.cjs             |  22 +-
 verification/tk11283/publish.json                  |  18 ++
 .../live/219c1c9aee9dd6f39b1a79c60b092a81.webm     | Bin 0 -> 332861 bytes
 .../live/e9c79c29fdd287e968a8dc7ed3f73eb0.webm     | Bin 0 -> 136512 bytes
 13 files changed, 529 insertions(+), 7 deletions(-)

diff --git a/verification/tk11283/REVIEW.md b/verification/tk11283/REVIEW.md
index 0ce764c..055ac94 100644
--- a/verification/tk11283/REVIEW.md
+++ b/verification/tk11283/REVIEW.md
@@ -2,13 +2,17 @@
 
 Reviewed September 4, 2026 Pacific. Store: Designer Wallcoverings. User’s clarified designer journey: **complete the form → create/match account → email-code sign-in**.
 
+**Published:** both reviewed snippets are live on main theme `145121607731` as of September 4, 2026, 11:12 PM Pacific. Exact Shopify asset hashes match the tested proposal. All 26 local Chrome/Safari scenarios and four live browser checks passed. Live form success/failure checks used intercepted responses; the actual completion CTA was clicked through to Shopify and the submitted email was correctly prefilled, without requesting an OTP. See `publish.json`, `journey.json`, and `live-smoke.json`.
+
+The publication initially encountered Shopify returning a stale pre-save asset immediately after PUT. A read-only status check located the exact successfully saved first file. The publisher was adjusted to resume exact previously applied values and wait for post-save read consistency; both final assets were then independently re-read and matched. No unrelated asset was changed.
+
 ## Findings and changes
 
 | Priority | Finding | Evidence / disposition |
 |---|---|---|
 | High | Old account popup accepts JSON error responses as success, including HTTP 429, and says the account is ready. | Reproduced against live page JavaScript with an intercepted response; no application submitted. Proposal removes the abbreviated popup form and routes designers to the complete application. |
 | High | Main trade application stops at a receipt message without the account/login next step. | Live `dw-trade-apply.liquid` backed up. Proposal checks HTTP status, `ok`, application ID, pending status, and `linked`; then offers same-email Shopify sign-in. |
-| High, separate backend defect | `trade.approve()` records `approved` even when entitlement tagging, rep metadata and email calls return failure. | Isolated VM reproduction: injected Shopify 500 and email 503 still returned approved and persisted approved. See `approval-failure-reproduction.json`. No production failure incidence is asserted. Requires a separate service fix, persisted entitlement verification and retry-safe notification handling. |
+| High, separate backend defect — TK-11285 | `trade.approve()` records `approved` even when entitlement tagging, rep metadata and email calls return failure. | Isolated VM reproduction: injected Shopify 500 and email 503 still returned approved and persisted approved. See `approval-failure-reproduction.json`. No production failure incidence is asserted. Requires a separate service fix, persisted entitlement verification and retry-safe notification handling. |
 | Medium | Retail popup promises an emailed discount code, although current source uses email confirmation and an automatic discount. | Proposal describes create account → confirm email → sign in; removes coupon promise. The active Function source now requires `verified-sample` for retail, so August 31 checkout proof predates the September 2 verification change and cannot certify today’s retail checkout. |
 | Medium | Signed-in retail banner shows a free-sample balance even without checking the `verified-sample` entitlement. | Live `dw-samples-banner.liquid` checks customer presence and approval tag, but not retail verification. Follow-up: show “Confirm your email to unlock samples” until verified. |
 | Medium | Designer welcome email implies login activates benefits immediately; moderation actually controls approval. Approved email gives no clickable sign-in link. | `lib/email.js` designer welcome/approved templates. Recorded for follow-up; this theme-only change makes the on-page approval boundary explicit. |
diff --git a/verification/tk11283/current-snippets__dw-signin-modal.liquid b/verification/tk11283/current-snippets__dw-signin-modal.liquid
new file mode 100644
index 0000000..0591c7a
--- /dev/null
+++ b/verification/tk11283/current-snippets__dw-signin-modal.liquid
@@ -0,0 +1,62 @@
+{%- comment -%} TK-11283: one complete designer application, then account setup and Shopify email-code sign-in. {%- endcomment -%}
+<style>
+  .dwsm-overlay{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:99999;display:none;align-items:flex-start;justify-content:center;padding:5vh 16px;overflow-y:auto;font-family:var(--element-text-font-family--body,system-ui,sans-serif)}
+  .dwsm-overlay.dwsm-open{display:flex}.dwsm-card{box-sizing:border-box;width:100%;max-width:480px;background:#fff;color:#29251e;padding:40px 28px 28px;box-shadow:0 8px 44px rgba(0,0,0,.28);position:relative}
+  .dwsm-close{position:absolute;top:5px;right:8px;width:44px;height:44px;background:none;border:0;font-size:28px;cursor:pointer;color:#29251e}
+  .dwsm-card h2{font:400 28px/1.2 Georgia,serif;margin:0 0 14px;text-transform:none}.dwsm-card h3{font-family:inherit;font-weight:600;font-size:17px;line-height:1.4;margin:0 0 8px;text-transform:none}.dwsm-card p{font-size:14px;line-height:1.6;margin:8px 0 18px}
+  .dwsm-action{box-sizing:border-box;display:block;width:100%;padding:14px 18px;border:1px solid #29251e;background:#29251e;color:#fff!important;text-decoration:none;text-align:center;font-family:inherit;font-weight:600;font-size:14px;line-height:1.3;cursor:pointer;min-height:48px}
+  .dwsm-action--quiet{background:#fff;color:#29251e!important}.dwsm-section{border-top:1px solid #ddd4c8;margin-top:24px;padding-top:24px}.dwsm-card a:focus-visible,.dwsm-card button:focus-visible{outline:3px solid #9b703b;outline-offset:3px}
+</style>
+<div class="dwsm-overlay" id="dw-signin" data-dwsm-overlay>
+  <div class="dwsm-card" role="dialog" aria-modal="true" aria-labelledby="dwsmTitle" tabindex="-1">
+    <button class="dwsm-close" type="button" data-dwsm-close aria-label="Close">&times;</button>
+    {%- if customer -%}
+      <h2 id="dwsmTitle">Your account</h2>
+      <p>You’re signed in as {{ customer.email | escape }}.</p>
+      <a class="dwsm-action" href="{{ routes.account_url }}">View account &amp; orders</a>
+      {%- if customer.tags contains 'trade_approved' -%}
+        <div class="dwsm-section"><h3>Your trade account is active</h3><p>Your unlimited complimentary samples apply automatically while you’re signed in.</p><a class="dwsm-action dwsm-action--quiet" href="{{ routes.all_products_collection_url }}">Start sourcing</a></div>
+      {%- else -%}
+        <div class="dwsm-section"><h3>Design professional?</h3><p>Complete the trade application using this account’s email. Trade benefits start after our team approves your application.</p><a class="dwsm-action dwsm-action--quiet" data-dwsm-designer href="/pages/trade-only-benefits#dwTradeApplication">Complete the designer application</a></div>
+      {%- endif -%}
+    {%- else -%}
+      <h2 id="dwsmTitle">Welcome back</h2>
+      <p>Retail customers and designers: sign in with your original account email to keep your orders and benefits together. No password needed.</p>
+      <a class="dwsm-action" data-dwsm-login="{{ routes.account_login_url }}" href="{{ routes.account_login_url }}">Sign in to your existing account</a>
+      <div class="dwsm-section">
+        <h3>New designer account</h3>
+        <p>Fill out the trade form. We’ll create or match your account, then guide you to sign in with an email code. Unlimited complimentary samples begin after approval.</p>
+        <a class="dwsm-action" data-dwsm-designer href="/pages/trade-only-benefits#dwTradeApplication">Complete the designer application</a>
+      </div>
+      <div class="dwsm-section">
+        <h3>New retail account</h3>
+        <p>Create your account and confirm your email for 3 lifetime complimentary samples. Sign in when shopping; your remaining allowance applies at checkout.</p>
+        <a class="dwsm-action dwsm-action--quiet" data-dwsm-login="{{ routes.account_login_url }}" href="{{ routes.account_login_url }}">Create a retail account</a>
+      </div>
+    {%- endif -%}
+  </div>
+</div>
+<script>
+(function(){
+  var overlay=document.getElementById('dw-signin');if(!overlay)return;
+  var card=overlay.querySelector('[role="dialog"]');var previousFocus;var previousOverflow='';
+  function open(trigger){if(overlay.classList.contains('dwsm-open'))return;previousFocus=trigger||document.activeElement;previousOverflow=document.body.style.overflow;overlay.classList.add('dwsm-open');document.body.style.overflow='hidden';overlay.querySelector('[data-dwsm-close]').focus();}
+  function close(){if(!overlay.classList.contains('dwsm-open'))return;overlay.classList.remove('dwsm-open');document.body.style.overflow=previousOverflow;if(previousFocus&&previousFocus.isConnected)previousFocus.focus();}
+  document.addEventListener('click',function(event){
+    var trigger=event.target.closest('[data-dw-signin],a[href="#dw-signin"],a[href$="#dw-signin"]');
+    if(trigger){event.preventDefault();open(trigger);return;}
+    if(event.target.closest('[data-dwsm-close]')||event.target===overlay){close();return;}
+    if(event.target.closest('[data-dwsm-designer]')){close();}
+  });
+  document.addEventListener('keydown',function(event){
+    if(!overlay.classList.contains('dwsm-open'))return;
+    if(event.key==='Escape'){event.preventDefault();close();return;}
+    if(event.key==='Tab'){
+      var items=Array.from(card.querySelectorAll('a[href],button:not([disabled]),[tabindex="0"]'));var first=items[0];var last=items[items.length-1];
+      if(event.shiftKey&&(document.activeElement===first||!card.contains(document.activeElement))){event.preventDefault();last.focus();}
+      else if(!event.shiftKey&&(document.activeElement===last||!card.contains(document.activeElement))){event.preventDefault();first.focus();}
+    }
+  });
+  if(window.location.hash==='#dw-signin')open();
+})();
+</script>
diff --git a/verification/tk11283/current-snippets__dw-trade-apply.liquid b/verification/tk11283/current-snippets__dw-trade-apply.liquid
new file mode 100644
index 0000000..6cd4c28
--- /dev/null
+++ b/verification/tk11283/current-snippets__dw-trade-apply.liquid
@@ -0,0 +1,260 @@
+{%- comment -%} DW-TRADE-APPLY v1 — benefits-first trade application and existing-account entry. {%- endcomment -%}
+<!-- DW-TRADE-APPLY v1 -->
+{%- assign dw_trade_is_approved = false -%}
+{%- if customer and customer.tags contains 'trade_approved' -%}{%- assign dw_trade_is_approved = true -%}{%- endif -%}
+{%- assign dw_room_day = 'now' | date: '%j' | plus: 0 | modulo: 4 -%}
+{%- case dw_room_day -%}
+  {%- when 0 -%}
+    {%- assign dw_room_url = 'https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Dig-4350115_room_setting_9dfcbae3-3159-41ad-959b-6999c665fc90.jpg?v=1756872231' -%}
+    {%- assign dw_room_alt = 'DW Bespoke DIG wallcovering in a vintage-inspired lounge' -%}
+  {%- when 1 -%}
+    {%- assign dw_room_url = 'https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Dig-74757_room_setting.jpg?v=1756870908' -%}
+    {%- assign dw_room_alt = 'DW Bespoke DIG floral wallcovering in a colorful sitting room' -%}
+  {%- when 2 -%}
+    {%- assign dw_room_url = 'https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Dig-7320421_room_settingVeriPeri.jpg?v=1756707586' -%}
+    {%- assign dw_room_alt = 'DW Bespoke DIG botanical lattice wallcovering in a dining room' -%}
+  {%- else -%}
+    {%- assign dw_room_url = 'https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/Dig-540002-roomsetting_62674c3c-b59d-4d36-aa8a-b7a696cbbb51.jpg?v=1774040040' -%}
+    {%- assign dw_room_alt = 'DW Bespoke DIG harlequin wallcovering in a collected powder room' -%}
+{%- endcase -%}
+{%- capture dw_existing_login_url -%}{{ routes.account_login_url }}{% if routes.account_login_url contains '?' %}&amp;{% else %}?{% endif %}return_url={{ request.path | url_encode }}{%- endcapture -%}
+<main class="dw-ta" aria-labelledby="dwTaTitle">
+  <section class="dw-ta-hero">
+    <div class="dw-ta-hero__media" role="img" aria-label="{{ dw_room_alt | escape }}" data-dw-daily-room="{{ dw_room_day }}" style="--dw-ta-room:url('{{ dw_room_url }}')"></div>
+    <div class="dw-ta-hero__copy">
+      <p class="dw-ta-eyebrow">Designer Wallcoverings · Trade program</p>
+      <h1 id="dwTaTitle">A better way to source the wall.</h1>
+      <p class="dw-ta-deck">For interior designers, architects, hospitality teams, and qualified design professionals. Apply once for a project-ready account with unlimited complimentary samples.</p>
+      <div class="dw-ta-actions">
+        <a class="dw-ta-button dw-ta-button--dark" href="#dwTradeApplication">Apply for trade</a>
+        {%- if customer -%}
+          <a class="dw-ta-button dw-ta-button--quiet" href="{{ routes.account_url }}">View my account</a>
+        {%- else -%}
+          <a class="dw-ta-button dw-ta-button--quiet" href="{{ dw_existing_login_url }}" data-dw-returning>Existing account sign in</a>
+        {%- endif -%}
+      </div>
+      <p class="dw-ta-note">Already shopped with us? Sign in with the same email to retain your account and order history—do not create a second account.</p>
+    </div>
+  </section>
+
+  <section class="dw-ta-benefits" aria-labelledby="dwTaBenefits">
+    <div class="dw-ta-heading">
+      <p class="dw-ta-eyebrow">Trade privileges</p>
+      <h2 id="dwTaBenefits">Made for material decisions.</h2>
+    </div>
+    <div class="dw-ta-benefit-grid">
+      <article><span>01</span><h3>Unlimited samples</h3><p>Approved designers receive complimentary sample pricing automatically while signed in.</p></article>
+      <article><span>02</span><h3>Project sourcing</h3><p>Bring us a reference, performance brief, or hard-to-find pattern. Our specialists help narrow the field.</p></article>
+      <article><span>03</span><h3>Residential + contract</h3><p>Source decorative collections alongside Type II, acoustic, hospitality, and commercial surfaces.</p></article>
+      <article><span>04</span><h3>A real design desk</h3><p>Get support from people who understand repeats, grounds, yardage, lead times, and installation.</p></article>
+    </div>
+  </section>
+
+  <section class="dw-ta-apply" id="dwTradeApplication" aria-labelledby="dwTaApplyTitle">
+    <aside class="dw-ta-apply__intro">
+      <p class="dw-ta-eyebrow">Trade application</p>
+      <h2 id="dwTaApplyTitle">Tell us about your practice.</h2>
+      <p>Complete the form below. We’ll create your account or match your existing account, then you can sign in with a code sent to your email.</p>
+      <ol class="dw-ta-steps" aria-label="Designer account steps"><li>Complete your trade application</li><li>Create or match your account</li><li>Sign in with your email code</li></ol>
+      <p>Our team reviews your application. Trade benefits and unlimited complimentary samples begin after approval.</p>
+      <div class="dw-ta-existing">
+        <strong>Existing customer?</strong>
+        <span>Use your original email so your orders and account stay together.</span>
+        {%- if customer -%}
+          <a href="{{ routes.account_url }}">View your existing account &rsaquo;</a>
+        {%- else -%}
+          <a href="{{ dw_existing_login_url }}" data-dw-returning>Sign in to your existing account &rsaquo;</a>
+        {%- endif -%}
+      </div>
+    </aside>
+
+    <div class="dw-ta-form-wrap">
+      {%- if dw_trade_is_approved -%}
+        <div class="dw-ta-approved" role="status">
+          <p class="dw-ta-eyebrow">Trade account active</p>
+          <h3>You’re already approved.</h3>
+          <p>Your unlimited complimentary sample benefit applies automatically while you are signed in.</p>
+          <a class="dw-ta-button dw-ta-button--dark" href="{{ routes.all_products_collection_url }}">Start sourcing</a>
+        </div>
+      {%- else -%}
+        <form class="dw-ta-form" id="dwTradeForm" data-customer-email="{{ customer.email | escape }}" novalidate>
+          <div class="dw-ta-field dw-ta-field--wide">
+            <label for="dwTaName">Your name <span aria-hidden="true">*</span></label>
+            <input id="dwTaName" name="contact_name" type="text" autocomplete="name" required>
+          </div>
+          <div class="dw-ta-field">
+            <label for="dwTaEmail">Work email <span aria-hidden="true">*</span></label>
+            <input id="dwTaEmail" name="email" type="email" autocomplete="email" value="{{ customer.email | escape }}" required>
+          </div>
+          <div class="dw-ta-field">
+            <label for="dwTaPhone">Phone <span aria-hidden="true">*</span></label>
+            <input id="dwTaPhone" name="phone" type="tel" autocomplete="tel" required>
+          </div>
+          <div class="dw-ta-field dw-ta-field--wide">
+            <label for="dwTaBusiness">Studio or business name <span aria-hidden="true">*</span></label>
+            <input id="dwTaBusiness" name="business_name" type="text" autocomplete="organization" required>
+          </div>
+          <div class="dw-ta-field">
+            <label for="dwTaRole">Professional role <span aria-hidden="true">*</span></label>
+            <select id="dwTaRole" name="professional_role" required>
+              <option value="">Select one</option><option>Interior designer</option><option>Architect</option><option>Hospitality / contract</option><option>Set decorator</option><option>Purchasing agent</option><option>Installer / workroom</option><option>Other design professional</option>
+            </select>
+          </div>
+          <div class="dw-ta-field">
+            <label for="dwTaWebsite">Website or portfolio</label>
+            <input id="dwTaWebsite" name="website" type="url" autocomplete="url" placeholder="https://">
+          </div>
+          <div class="dw-ta-field">
+            <label for="dwTaLocation">City + state <span aria-hidden="true">*</span></label>
+            <input id="dwTaLocation" name="location" type="text" autocomplete="address-level2" required>
+          </div>
+          <div class="dw-ta-field">
+            <label for="dwTaCredential">Resale certificate / license</label>
+            <input id="dwTaCredential" name="resale_cert" type="text">
+          </div>
+          <div class="dw-ta-field dw-ta-field--wide">
+            <label for="dwTaProjects">What kinds of projects are you sourcing?</label>
+            <textarea id="dwTaProjects" name="project_types" rows="3" placeholder="Residential, hospitality, workplace…"></textarea>
+          </div>
+          <div class="dw-ta-field dw-ta-field--wide dw-ta-consent">
+            <label><input name="terms_acknowledged" type="checkbox" value="yes" required> <span>I certify that I am applying on behalf of a design-related business and agree to the <a href="/pages/privacy-policy">privacy policy</a>.</span></label>
+          </div>
+          <div class="dw-ta-field dw-ta-field--wide dw-ta-consent dw-ta-sms-consent">
+            <label for="dwTaSmsConsent">
+              <input id="dwTaSmsConsent" name="sms_marketing_consent" type="checkbox" value="yes">
+              <span>Yes, I agree to receive recurring automated promotional and personalized marketing text messages from Designer Wallcoverings at the mobile number provided. Consent is not a condition of purchase. Message frequency varies. Message and data rates may apply. Reply STOP to opt out or HELP for help. We honor opt-out requests and applicable Do Not Call requests; if you add this number to a Do Not Call list, please also reply STOP or <a href="/pages/contact-us">contact us</a> so we can promptly update our records. See our <a href="/pages/sms-terms">SMS Terms</a> and <a href="/pages/privacy-policy">Privacy Policy</a>.</span>
+            </label>
+            <p class="dw-ta-consent-note">Leave this box unchecked if you do not want marketing texts. We may still contact you about this application or transactions where permitted by law.</p>
+            <details class="dw-ta-sms-terms" id="dwSmsTerms">
+              <summary>SMS Terms</summary>
+              <p>You must be at least 18 and the account holder or authorized user of the mobile number. Message frequency varies; message and data rates may apply. Carriers are not liable for delayed or undelivered messages. Reply STOP to opt out or HELP for help. After STOP, we may send one confirmation. Opting out of marketing does not prevent permitted non-marketing messages about an application, order, account, appointment, or other transaction. Tell us before changing or transferring your number. We honor valid consent withdrawals and applicable Do Not Call requests; if you add your number to a Do Not Call list after opting in, please also reply STOP or <a href="/pages/contact-us">contact us</a> so we can promptly update our records. This notice does not limit our responsibility to honor applicable law or a valid opt-out request.</p>
+            </details>
+          </div>
+          <div class="dw-ta-submit dw-ta-field--wide">
+            <button class="dw-ta-button dw-ta-button--dark" type="submit">Submit application &amp; set up account</button>
+            <p id="dwTradeStatus" class="dw-ta-status" aria-live="polite"></p>
+          </div>
+        </form>
+        <section id="dwTradeNext" class="dw-ta-approved" aria-labelledby="dwTradeNextTitle" tabindex="-1" hidden>
+          <p class="dw-ta-eyebrow">Application received</p>
+          <h3 id="dwTradeNextTitle"></h3>
+          <p id="dwTradeAccountMessage"></p>
+          <p>Trade approval is still pending. We’ll email you when your trade benefits and unlimited complimentary samples are active.</p>
+          <a id="dwTradeLogin" class="dw-ta-button dw-ta-button--dark" href="{{ routes.account_login_url }}" referrerpolicy="no-referrer">Sign in with your email code</a>
+          <p>Need help? <a href="tel:+18883734564">Call (888) 373-4564</a>.</p>
+        </section>
+      {%- endif -%}
+    </div>
+  </section>
+</main>
+
+{%- unless customer -%}
+  <dialog class="dw-returning" id="dwReturningDialog" aria-labelledby="dwReturningTitle">
+    <button class="dw-returning__close" type="button" aria-label="Close returning client sign in" data-dw-returning-close>&times;</button>
+    <div class="dw-returning__room" role="img" aria-label="{{ dw_room_alt | escape }}" style="--dw-ta-room:url('{{ dw_room_url }}')"></div>
+    <div class="dw-returning__body">
+      <p class="dw-ta-eyebrow">Returning client</p>
+      <h2 id="dwReturningTitle">Welcome back.</h2>
+      <p>Use the email from your original Designer Wallcoverings account. Shopify will securely reconnect you—there is no new account to create.</p>
+      <ul>
+        <li>Your past orders stay with you</li>
+        <li>Your retail sample balance is preserved</li>
+        <li>Approved trade privileges remain attached</li>
+      </ul>
+      <a class="dw-ta-button dw-ta-button--dark" href="{{ dw_existing_login_url }}">Continue to secure sign in</a>
+      <button class="dw-returning__new" type="button" data-dw-returning-close>New to DW? Return to the application</button>
+    </div>
+  </dialog>
+{%- endunless -%}
+
+<style>
+  .dw-ta{--ta-ink:#181713;--ta-paper:#f3efe7;--ta-line:#d8d0c4;--ta-bronze:#795833;margin-top:16px;color:var(--ta-ink);background:#fff;font-family:var(--element-text-font-family--body,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif)}
+  .dw-ta *{box-sizing:border-box}.visual-search-clickable{display:none!important}.dw-ta-hero{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(420px,.92fr);min-height:690px;background:var(--ta-paper)}
+  .dw-ta-hero__media{min-height:620px;background-image:linear-gradient(0deg,rgba(20,18,14,.12),rgba(20,18,14,.02)),var(--dw-ta-room);background-position:center;background-size:cover;background-repeat:no-repeat}
+  .dw-ta-hero__copy{display:flex;flex-direction:column;justify-content:center;padding:clamp(48px,7vw,108px)}
+  .dw-ta-eyebrow{margin:0 0 18px;color:var(--ta-bronze);font-size:11px;font-weight:700;letter-spacing:.18em;text-transform:uppercase}
+  .dw-ta h1,.dw-ta h2,.dw-ta h3{font-family:var(--element-text-font-family--heading,Georgia,serif);font-weight:400;text-transform:none}.dw-ta h1{max-width:640px;margin:0;font-size:clamp(48px,5.7vw,82px);line-height:.98;letter-spacing:-.035em}.dw-ta-deck{max-width:600px;margin:28px 0 0;font-size:clamp(17px,1.4vw,20px);line-height:1.65;color:#504c45}
+  .dw-ta-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:34px}.dw-ta-button{display:inline-flex;min-height:50px;align-items:center;justify-content:center;border:1px solid var(--ta-ink);padding:13px 24px;background:transparent;color:var(--ta-ink);font:700 11px/1.2 var(--element-text-font-family--body,sans-serif);letter-spacing:.12em;text-decoration:none;text-transform:uppercase;cursor:pointer}.dw-ta-button--dark{background:var(--ta-ink);color:#fff}.dw-ta-button--quiet{background:transparent}.dw-ta-note{max-width:570px;margin:18px 0 0;font-size:13px;line-height:1.55;color:#6d675e}
+  .dw-ta-benefits{padding:clamp(72px,9vw,128px) clamp(24px,7vw,110px)}.dw-ta-heading{max-width:700px;margin-bottom:52px}.dw-ta-heading h2,.dw-ta-apply__intro h2{font-size:clamp(38px,4.3vw,62px);line-height:1.04;margin:0}.dw-ta-benefit-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(22px,3vw,46px)}.dw-ta-benefit-grid article{border-top:1px solid var(--ta-line);padding-top:20px}.dw-ta-benefit-grid article>span{color:var(--ta-bronze);font-size:11px;letter-spacing:.15em}.dw-ta-benefit-grid h3{font-size:24px;line-height:1.15;margin:17px 0 12px}.dw-ta-benefit-grid p{margin:0;color:#625d55;line-height:1.65}
+  .dw-ta-apply{display:grid;grid-template-columns:minmax(300px,.75fr) minmax(0,1.25fr);gap:clamp(42px,8vw,130px);padding:clamp(70px,9vw,130px) clamp(24px,7vw,110px);background:var(--ta-paper)}.dw-ta-apply__intro>p:not(.dw-ta-eyebrow){max-width:480px;color:#5c574f;line-height:1.7}.dw-ta-existing{margin-top:40px;padding-top:25px;border-top:1px solid var(--ta-line)}.dw-ta-existing strong,.dw-ta-existing span,.dw-ta-existing a{display:block}.dw-ta-existing span{margin:8px 0 12px;color:#5c574f;line-height:1.55}.dw-ta-existing a{color:var(--ta-ink);font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;text-underline-offset:4px}
+  .dw-ta-form{display:grid;grid-template-columns:1fr 1fr;gap:22px 18px}.dw-ta-field--wide{grid-column:1/-1}.dw-ta-field label{display:block;margin-bottom:8px;font-size:12px;font-weight:700;letter-spacing:.06em}.dw-ta-field input,.dw-ta-field select,.dw-ta-field textarea{width:100%;min-height:50px;border:1px solid #aaa194;border-radius:0;background:#fff;color:var(--ta-ink);padding:12px 13px;font:16px/1.4 inherit}.dw-ta .selected-text{color:#5f5f5f}.dw-ta-field textarea{resize:vertical}.dw-ta-field input:focus,.dw-ta-field select:focus,.dw-ta-field textarea:focus{outline:3px solid rgba(121,88,51,.25);border-color:var(--ta-bronze)}.dw-ta-consent label{display:flex;gap:10px;font-weight:400;letter-spacing:0;line-height:1.5}.dw-ta-consent input{width:18px;min-height:18px;margin-top:2px;flex:0 0 auto}.dw-ta-consent a{color:inherit}.dw-ta-sms-consent{padding-top:20px;border-top:1px solid var(--ta-line)}.dw-ta-consent-note{margin:8px 0 0 28px;color:#6d675e;font-size:12px;line-height:1.5}.dw-ta-sms-terms{margin:14px 0 0 28px;color:#5c574f;font-size:12px;line-height:1.55}.dw-ta-sms-terms summary{cursor:pointer;font-weight:700;text-decoration:underline;text-underline-offset:3px}.dw-ta-sms-terms p{margin:10px 0 0}.dw-ta-submit{display:flex;align-items:center;gap:18px;flex-wrap:wrap}.dw-ta-status{margin:0;font-size:14px}.dw-ta-status[data-state="error"]{color:#982b23}.dw-ta-status[data-state="success"]{color:#32613d}.dw-ta-approved{padding:clamp(36px,6vw,72px);background:#fff;border:1px solid var(--ta-line)}.dw-ta-approved h3{font-size:38px;margin:0 0 14px}.dw-ta-approved p:not(.dw-ta-eyebrow){line-height:1.65;margin-bottom:25px}
+  .dw-ta a:focus-visible,.dw-ta button:focus-visible{outline:3px solid #bd8950;outline-offset:3px}
+  .dw-ta [hidden]{display:none!important}.dw-ta-steps{padding-left:24px;line-height:1.7;color:#504c45}.dw-ta-steps li{padding:4px 0}.dw-ta-approved{overflow-wrap:anywhere}
+  .dw-returning{--ta-ink:#181713;--ta-paper:#f3efe7;width:min(920px,calc(100vw - 32px));max-width:none;padding:0;border:0;background:var(--ta-paper);color:var(--ta-ink);box-shadow:0 30px 90px rgba(0,0,0,.32)}.dw-returning::backdrop{background:rgba(14,13,11,.68);backdrop-filter:blur(4px)}.dw-returning[open]{display:grid;grid-template-columns:1fr 1fr}.dw-returning__room{min-height:620px;background-image:linear-gradient(0deg,rgba(20,18,14,.08),rgba(20,18,14,.02)),var(--dw-ta-room);background-position:center;background-size:cover}.dw-returning__body{display:flex;flex-direction:column;justify-content:center;padding:clamp(38px,6vw,72px)}.dw-returning h2{margin:0 0 18px;font:400 clamp(44px,5vw,68px)/1 var(--element-text-font-family--heading,Georgia,serif);letter-spacing:-.03em}.dw-returning__body>p:not(.dw-ta-eyebrow){color:#575149;line-height:1.65}.dw-returning ul{margin:18px 0 28px;padding:0;list-style:none}.dw-returning li{padding:11px 0;border-top:1px solid #d3cabd;font-size:14px}.dw-returning li::before{content:'✓';margin-right:10px;color:#795833;font-weight:700}.dw-returning__close{position:absolute;top:14px;right:16px;width:44px;height:44px;border:0;background:rgba(255,255,255,.9);color:#181713;font-size:28px;line-height:1;cursor:pointer}.dw-returning__new{margin-top:16px;border:0;background:none;text-decoration:underline;text-underline-offset:4px;cursor:pointer;color:#4d4841}.dw-returning a:focus-visible,.dw-returning button:focus-visible{outline:3px solid #bd8950;outline-offset:3px}
+  @media(max-width:900px){.dw-ta-hero{grid-template-columns:1fr}.dw-ta-hero__media{min-height:52vh}.dw-ta-benefit-grid{grid-template-columns:1fr 1fr}.dw-ta-apply{grid-template-columns:1fr}}
+  @media(max-width:700px){.dw-returning[open]{display:block}.dw-returning__room{min-height:250px}.dw-returning__body{padding:34px 24px 38px}.dw-returning .dw-ta-button{width:100%}}
+  @media(max-width:560px){.dw-ta-hero__media{min-height:420px}.dw-ta-hero__copy{padding:48px 22px 62px}.dw-ta-actions{display:grid}.dw-ta-button{width:100%}.dw-ta-benefit-grid,.dw-ta-form{grid-template-columns:1fr}.dw-ta-field--wide{grid-column:auto}.dw-ta-submit{display:block}.dw-ta-status{margin-top:14px}.dw-ta-apply{padding-left:22px;padding-right:22px}}
+  @media(prefers-reduced-motion:reduce){.dw-ta *{scroll-behavior:auto!important;transition:none!important}}
+</style>
+
+<script>
+  document.querySelectorAll('a.logo-link').forEach(function(link){
+    if(!link.getAttribute('aria-label')) link.setAttribute('aria-label','Designer Wallcoverings home');
+  });
+  (function(){
+    var dialog=document.getElementById('dwReturningDialog');
+    if(!dialog)return;
+    document.querySelectorAll('[data-dw-returning]').forEach(function(link){link.addEventListener('click',function(event){event.preventDefault();dialog.showModal();});});
+    dialog.querySelectorAll('[data-dw-returning-close]').forEach(function(button){button.addEventListener('click',function(){dialog.close();});});
+    dialog.addEventListener('click',function(event){if(event.target===dialog)dialog.close();});
+  })();
+</script>
+
+{%- unless dw_trade_is_approved -%}
+<script>
+  (function(){
+    var form=document.getElementById('dwTradeForm');
+    var status=document.getElementById('dwTradeStatus');
+    if(!form||!status)return;
+    var submitting=false;
+    var submitted=false;
+    form.addEventListener('submit',async function(event){
+      event.preventDefault();
+      if(submitting||submitted)return;
+      status.removeAttribute('data-state');
+      if(!form.checkValidity()){form.reportValidity();status.textContent='Please complete the required fields.';status.dataset.state='error';return;}
+      var button=form.querySelector('button[type="submit"]');
+      var data=Object.fromEntries(new FormData(form).entries());
+      var smsConsent=form.querySelector('#dwTaSmsConsent');
+      data.sms_marketing_consent=Boolean(smsConsent&&smsConsent.checked);
+      data.sms_consent_disclosure_version='dw-sms-v2-2026-08-28';
+      data.sms_consent_captured_at=new Date().toISOString();
+      data.sms_consent_source=window.location.href;
+      submitting=true;button.disabled=true;button.textContent='Setting up your account…';status.textContent='Securely sending your application…';
+      try{
+        var response=await fetch('https://signup.designerwallcoverings.com/trade/apply',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(data)});
+        var result=await response.json().catch(function(){return {};});
+        if(response.status===429)throw new Error('Too many attempts. Please wait before trying again, or call (888) 373-4564. Your form is still here.');
+        if(!response.ok||result.ok!==true||!result.id||result.status!=='pending')throw new Error('We could not confirm your application. Your details are still here. Please call (888) 373-4564 for help before submitting again.');
+        submitted=true;
+        var submittedEmail=String(data.email||'').trim().toLowerCase();
+        var signedInEmail=(form.dataset.customerEmail||'').trim().toLowerCase();
+        var alreadySignedIn=signedInEmail!==''&&signedInEmail===submittedEmail;
+        var title=document.getElementById('dwTradeNextTitle');
+        var message=document.getElementById('dwTradeAccountMessage');
+        var login=document.getElementById('dwTradeLogin');
+        if(result.linked===true){
+          title.textContent=alreadySignedIn?'Your account is ready. You’re signed in.':'Your account is ready. Next, sign in.';
+          message.textContent=alreadySignedIn?'Your application is attached to the account you’re using.':'We created or matched the account for '+submittedEmail+'. Continue below to receive your one-time sign-in code. No password needed.';
+        }else{
+          title.textContent='Application saved. Account setup needs one more step.';
+          message.textContent='We saved your application, but could not confirm the account connection. Sign in with '+submittedEmail+' to create or access your account. Our team can finish connecting it; you do not need to submit another application.';
+        }
+        if(alreadySignedIn&&result.linked===true){
+          login.href='/collections/all';login.textContent='Continue browsing';
+        }else{
+          var loginUrl=new URL('/customer_authentication/login',window.location.origin);
+          loginUrl.searchParams.set('return_to','/collections/all');
+          loginUrl.searchParams.set('login_hint',submittedEmail);
+          login.href=loginUrl.toString();login.textContent='Sign in with your email code';
+        }
+        status.textContent='Application received.';status.dataset.state='success';
+        form.hidden=true;
+        var next=document.getElementById('dwTradeNext');next.hidden=false;next.focus();
+      }catch(error){status.textContent=error.message==='Failed to fetch'?'Connection interrupted. Your details are still here. Call (888) 373-4564 if you’re unsure whether your application arrived.':(error.message||'Please try again or call (888) 373-4564.');status.dataset.state='error';button.disabled=false;button.textContent='Submit application & set up account';}
+      finally{submitting=false;}
+    });
+  })();
+</script>
+{%- endunless -%}
+<!-- /DW-TRADE-APPLY -->
diff --git a/verification/tk11283/e2e-proof.json b/verification/tk11283/e2e-proof.json
index 4bcbbc2..510c220 100644
--- a/verification/tk11283/e2e-proof.json
+++ b/verification/tk11283/e2e-proof.json
@@ -1,7 +1,7 @@
 {
   "intent": "Designer full form → create/match Shopify account → email-code login, preserving returning and approved customers",
   "riskTier": "R4 publication; R3 account boundary",
-  "timestamp": "2026-09-05T06:04:42.735Z",
+  "timestamp": "2026-09-05T06:13:55.569Z",
   "environment": "Local exact Liquid proposal + live read-only Shopify sign-in handoff",
   "staged": [
     {
@@ -247,5 +247,81 @@
   },
   "cleanup": "Only controlled local fixtures; isolated review browser context retained. Stalled installer stopped.",
   "rollback": "Exact two-asset baseline captured; publish script guards hashes and auto-restores its own writes on failed publication.",
-  "verdict": "PARTIAL: proposed theme behavior passes; full production account/benefit delivery not re-exercised"
+  "verdict": "PASS for published theme behavior and hosted sign-in entry; PARTIAL for full account/email/checkout benefit delivery",
+  "publication": {
+    "timestamp": "2026-09-05T06:12:09.973Z",
+    "mode": "--apply",
+    "theme": 145121607731,
+    "assets": [
+      {
+        "key": "snippets/dw-trade-apply.liquid",
+        "before": "b9b5d438726345dfcc1020dbbfa0bef2a95865ba4b9394df372fb89329e9404e",
+        "after": "b9b5d438726345dfcc1020dbbfa0bef2a95865ba4b9394df372fb89329e9404e"
+      },
+      {
+        "key": "snippets/dw-signin-modal.liquid",
+        "before": "6108eff129c244b9c96b831e14479b5626b26a8ce32a4b3d79fca36ee560f3a6",
+        "after": "42e67a0e45ca602a2e23fd482ac2ecaefc17ab458d6440d9bfe4a206332999a0"
+      }
+    ],
+    "verdict": "PASS"
+  },
+  "liveUI": {
+    "timestamp": "2026-09-05T06:12:48.880Z",
+    "environment": "Live published theme; application responses intercepted; no authentication submit",
+    "checks": [
+      {
+        "name": "live account entry",
+        "verdict": "PASS",
+        "detail": "Actual header opens new modal; designer action points to the complete form."
+      },
+      {
+        "name": "live failure handling",
+        "verdict": "PASS",
+        "detail": "Intercepted HTTP 429 keeps form values and shows error, not account success."
+      },
+      {
+        "name": "live success UI",
+        "verdict": "PASS",
+        "detail": "Intercepted linked/pending result renders account-ready and sign-in next step on live markup."
+      },
+      {
+        "name": "live Shopify handoff",
+        "verdict": "PASS",
+        "detail": "Clicked live completion CTA; Shopify email input prefills application email. No OTP requested."
+      }
+    ],
+    "interceptedApplications": 2,
+    "realApplications": 0,
+    "emailsSent": 0,
+    "orders": 0,
+    "verdict": "PASS for published UI and hosted login entry",
+    "skipped": [
+      "Real account creation, OTP completion, persisted account/session and checkout benefit verification."
+    ]
+  },
+  "rollbackRehearsal": {
+    "environment": "VM with fully mocked Shopify and writes; no external calls",
+    "checks": [
+      {
+        "mode": "--apply",
+        "case": "second-write",
+        "puts": 3,
+        "verdict": "PASS"
+      },
+      {
+        "mode": "--apply",
+        "case": "drift",
+        "puts": 0,
+        "verdict": "PASS"
+      },
+      {
+        "mode": "--rollback",
+        "case": "explicit rollback",
+        "puts": 2,
+        "verdict": "PASS"
+      }
+    ]
+  },
+  "buildCommit": "01593e3"
 }
diff --git a/verification/tk11283/live-account-modal.png b/verification/tk11283/live-account-modal.png
new file mode 100644
index 0000000..bc3248c
Binary files /dev/null and b/verification/tk11283/live-account-modal.png differ
diff --git a/verification/tk11283/live-mobile-account-ready.png b/verification/tk11283/live-mobile-account-ready.png
new file mode 100644
index 0000000..9a6806b
Binary files /dev/null and b/verification/tk11283/live-mobile-account-ready.png differ
diff --git a/verification/tk11283/live-shopify-handoff.png b/verification/tk11283/live-shopify-handoff.png
new file mode 100644
index 0000000..5e86561
Binary files /dev/null and b/verification/tk11283/live-shopify-handoff.png differ
diff --git a/verification/tk11283/live-smoke.cjs b/verification/tk11283/live-smoke.cjs
new file mode 100644
index 0000000..2360c26
--- /dev/null
+++ b/verification/tk11283/live-smoke.cjs
@@ -0,0 +1,54 @@
+'use strict';
+const fs=require('node:fs'),path=require('node:path'),assert=require('node:assert/strict');
+const {chromium}=require('/Users/macstudio3/Projects/Designer-Wallcoverings/node_modules/playwright');
+async function main(){
+  const browser=await chromium.launch({headless:true});
+  const context=await browser.newContext({viewport:{width:1280,height:900},recordVideo:{dir:path.join(__dirname,'recordings/live')}});
+  let reply='rate',applications=0;
+  await context.route('**/*',route=>{
+    const request=route.request();
+    if(request.url()==='https://signup.designerwallcoverings.com/trade/apply'){
+      applications++;
+      return route.fulfill({status:reply==='rate'?429:200,contentType:'application/json',body:JSON.stringify(reply==='rate'?{ok:false,error:'rate_limited'}:{ok:true,id:'TRADE-AUDIT-INTERCEPTED',status:'pending',linked:true})});
+    }
+    if(!['GET','HEAD'].includes(request.method()))return route.abort();
+    return route.continue();
+  });
+  const page=await context.newPage();
+  const checks=[];
+  function pass(name,detail){checks.push({name,verdict:'PASS',detail});console.log('PASS '+name);}
+  try{
+    await page.goto('https://www.designerwallcoverings.com/pages/trade-only-benefits?signin_review=TK11283',{waitUntil:'domcontentloaded',timeout:60000});
+    const account=page.locator('a[title="Account"]').first();await account.click();
+    await page.locator('#dw-signin.dwsm-open').waitFor();
+    assert.equal(await page.locator('#dw-signin form').count(),0);
+    assert.equal(await page.locator('[data-dwsm-designer]').getAttribute('href'),'/pages/trade-only-benefits#dwTradeApplication');
+    await page.screenshot({path:path.join(__dirname,'live-account-modal.png')});
+    pass('live account entry','Actual header opens new modal; designer action points to the complete form.');
+    await page.locator('[data-dwsm-designer]').click();
+    const submit=page.locator('#dwTradeForm button[type=submit]');await submit.click();assert.equal(applications,0);
+    await page.locator('#dwTaName').fill('DW Test - intercepted only');
+    await page.locator('#dwTaEmail').fill('audit@example.invalid');
+    await page.locator('#dwTaPhone').fill('202-555-0100');
+    await page.locator('#dwTaBusiness').fill('Intercepted Test Studio');
+    await page.locator('#dwTaRole').selectOption({label:'Interior designer'});
+    await page.locator('#dwTaLocation').fill('Los Angeles, CA');
+    await page.locator('[name=terms_acknowledged]').check();
+    await submit.click();await page.waitForFunction(()=>document.querySelector('#dwTradeStatus').dataset.state==='error');
+    assert.equal(await page.locator('#dwTaEmail').inputValue(),'audit@example.invalid');
+    assert(await page.locator('#dwTradeNext').isHidden());pass('live failure handling','Intercepted HTTP 429 keeps form values and shows error, not account success.');
+    reply='linked';await submit.click();await page.locator('#dwTradeNext').waitFor({state:'visible'});
+    assert.match(await page.locator('#dwTradeNext').innerText(),/approval is still pending/);
+    await page.setViewportSize({width:390,height:844});await page.locator('#dwTradeNext').scrollIntoViewIfNeeded();
+    await page.screenshot({path:path.join(__dirname,'live-mobile-account-ready.png')});
+    pass('live success UI','Intercepted linked/pending result renders account-ready and sign-in next step on live markup.');
+    await page.locator('#dwTradeLogin').click();
+    await page.waitForURL(/shopify\.com\/authentication\/1541177456\/login/,{timeout:60000});
+    const email=page.locator('input[type=email]').first();await email.waitFor();assert.equal(await email.inputValue(),'audit@example.invalid');
+    await page.screenshot({path:path.join(__dirname,'live-shopify-handoff.png')});
+    pass('live Shopify handoff','Clicked live completion CTA; Shopify email input prefills application email. No OTP requested.');
+    const proof={timestamp:new Date().toISOString(),environment:'Live published theme; application responses intercepted; no authentication submit',checks,interceptedApplications:applications,realApplications:0,emailsSent:0,orders:0,verdict:'PASS for published UI and hosted login entry',skipped:['Real account creation, OTP completion, persisted account/session and checkout benefit verification.']};
+    fs.writeFileSync(path.join(__dirname,'live-smoke.json'),JSON.stringify(proof,null,2)+'\n');
+  }finally{await context.close();await browser.close();}
+}
+main().catch(e=>{console.error(e.stack);process.exitCode=1;});
diff --git a/verification/tk11283/live-smoke.json b/verification/tk11283/live-smoke.json
new file mode 100644
index 0000000..9d1a41e
--- /dev/null
+++ b/verification/tk11283/live-smoke.json
@@ -0,0 +1,34 @@
+{
+  "timestamp": "2026-09-05T06:12:48.880Z",
+  "environment": "Live published theme; application responses intercepted; no authentication submit",
+  "checks": [
+    {
+      "name": "live account entry",
+      "verdict": "PASS",
+      "detail": "Actual header opens new modal; designer action points to the complete form."
+    },
+    {
+      "name": "live failure handling",
+      "verdict": "PASS",
+      "detail": "Intercepted HTTP 429 keeps form values and shows error, not account success."
+    },
+    {
+      "name": "live success UI",
+      "verdict": "PASS",
+      "detail": "Intercepted linked/pending result renders account-ready and sign-in next step on live markup."
+    },
+    {
+      "name": "live Shopify handoff",
+      "verdict": "PASS",
+      "detail": "Clicked live completion CTA; Shopify email input prefills application email. No OTP requested."
+    }
+  ],
+  "interceptedApplications": 2,
+  "realApplications": 0,
+  "emailsSent": 0,
+  "orders": 0,
+  "verdict": "PASS for published UI and hosted login entry",
+  "skipped": [
+    "Real account creation, OTP completion, persisted account/session and checkout benefit verification."
+  ]
+}
diff --git a/verification/tk11283/publish-theme.cjs b/verification/tk11283/publish-theme.cjs
index cf4aff8..ba1a315 100644
--- a/verification/tk11283/publish-theme.cjs
+++ b/verification/tk11283/publish-theme.cjs
@@ -8,7 +8,7 @@ const allowed=['snippets/dw-trade-apply.liquid','snippets/dw-signin-modal.liquid
 const sha=s=>crypto.createHash('sha256').update(s).digest('hex');
 async function main(){
   const mode=process.argv[2]||'--check';
-  if(!['--check','--apply','--rollback'].includes(mode))throw new Error('Unknown mode');
+  if(!['--check','--status','--apply','--rollback'].includes(mode))throw new Error('Unknown mode');
   if(mode==='--apply'){
     const proof=JSON.parse(fs.readFileSync(path.join(__dirname,'journey.json'),'utf8'));
     if(proof.verdict!=='PASS'||!proof.checks.some(x=>x.name==='safari scripts'))throw new Error('Chrome and Safari evidence required');
@@ -32,19 +32,33 @@ async function main(){
     const next=fs.readFileSync(path.resolve(__dirname,'../../theme-proposals/designer-signin-tk11283',key),'utf8');
     if(sha(old)!==meta.sha256)throw new Error('Baseline backup changed');
     const current=await read(key);
+    if(mode==='--status'){
+      fs.writeFileSync(path.join(__dirname,'current-'+key.replaceAll('/','__')),current);
+      items.push({key,current:sha(current),baseline:sha(old),proposed:sha(next)});
+      continue;
+    }
     const expected=mode==='--rollback'?next:old;
-    if(sha(current)!==sha(expected))throw new Error('Concurrent theme change at '+key+'; stopped');
-    items.push({key,old,next,before:sha(current),after:sha(mode==='--rollback'?old:next)});
+    const alreadyApplied=mode==='--apply'&&sha(current)===sha(next);
+    if(!alreadyApplied&&sha(current)!==sha(expected))throw new Error('Concurrent theme change at '+key+'; stopped');
+    items.push({key,old,next,before:sha(current),after:sha(mode==='--rollback'?old:next),alreadyApplied});
   }
+  if(mode==='--status'){console.log(JSON.stringify({mode,assets:items},null,2));return;}
   if(mode==='--check'){console.log(JSON.stringify({mode,theme:baseline.theme.id,assets:items.map(({key,before,after})=>({key,before,after}))},null,2));return;}
   const attempted=[];
   try{
     for(const item of items){
+      if(item.alreadyApplied)continue;
       // Recheck each asset immediately before its write.
       if(sha(await read(item.key))!==item.before)throw new Error('Concurrent edit before write: '+item.key);
       attempted.push(item);
       await request('PUT',endpoint,{asset:{key:item.key,value:mode==='--rollback'?item.old:item.next}});
-      if(sha(await read(item.key))!==item.after)throw new Error('Post-write parity failed: '+item.key);
+      // Theme reads can briefly return the previous value after a successful PUT.
+      let matched=false;
+      for(let attempt=0;attempt<15;attempt++){
+        if(sha(await read(item.key))===item.after){matched=true;break;}
+        await new Promise(resolve=>setTimeout(resolve,1000));
+      }
+      if(!matched)throw new Error('Post-write parity failed after waiting: '+item.key);
     }
   }catch(error){
     // Restore only a value still equal to this run's proposed value.
diff --git a/verification/tk11283/publish.json b/verification/tk11283/publish.json
new file mode 100644
index 0000000..1fa90cf
--- /dev/null
+++ b/verification/tk11283/publish.json
@@ -0,0 +1,18 @@
+{
+  "timestamp": "2026-09-05T06:12:09.973Z",
+  "mode": "--apply",
+  "theme": 145121607731,
+  "assets": [
+    {
+      "key": "snippets/dw-trade-apply.liquid",
+      "before": "b9b5d438726345dfcc1020dbbfa0bef2a95865ba4b9394df372fb89329e9404e",
+      "after": "b9b5d438726345dfcc1020dbbfa0bef2a95865ba4b9394df372fb89329e9404e"
+    },
+    {
+      "key": "snippets/dw-signin-modal.liquid",
+      "before": "6108eff129c244b9c96b831e14479b5626b26a8ce32a4b3d79fca36ee560f3a6",
+      "after": "42e67a0e45ca602a2e23fd482ac2ecaefc17ab458d6440d9bfe4a206332999a0"
+    }
+  ],
+  "verdict": "PASS"
+}
diff --git a/verification/tk11283/recordings/live/219c1c9aee9dd6f39b1a79c60b092a81.webm b/verification/tk11283/recordings/live/219c1c9aee9dd6f39b1a79c60b092a81.webm
new file mode 100644
index 0000000..f6fce86
Binary files /dev/null and b/verification/tk11283/recordings/live/219c1c9aee9dd6f39b1a79c60b092a81.webm differ
diff --git a/verification/tk11283/recordings/live/e9c79c29fdd287e968a8dc7ed3f73eb0.webm b/verification/tk11283/recordings/live/e9c79c29fdd287e968a8dc7ed3f73eb0.webm
new file mode 100644
index 0000000..7badc9c
Binary files /dev/null and b/verification/tk11283/recordings/live/e9c79c29fdd287e968a8dc7ed3f73eb0.webm differ

← 45fc36e auto-data-snapshot: 2026-09-04T23:09:55 (1 data files) — ver  ·  back to Dw Signup Fulfillment  ·  Record independent verification of live designer signup chan 8a877d4 →