← back to Newmor Onboard
verification/independent-review.md
715 lines
# TK-10670 independent launch review
Status: **PASS — APPROVED 116-PRODUCT SHOWROOM BRANCH**, independently
verified on 2026-09-09. Final state: 116 ACTIVE, 189 DRAFT, 237 ARCHIVED.
All 116 public PDPs pass; full-count collection/search proof passes in
Chromium desktop and WebKit mobile. The two-canary suite previously passed
all four browser contexts and actual rollback/reapply. The original parent
ticket's broader DWNM/specification/full-refresh work remains **BLOCKED**;
this verdict does not authorize or complete that separate scope.
The initial findings and subsequent resolutions are preserved below.
Accountable finalizer: root. Independent reviewer: launch_review.
Owned path: this document only. No live mutations performed by reviewer.
Delegation: root → launch_review, depth 1; no child delegation.
## Approved boundary
The user approved the September 8 no-price showroom memo with “yes do it”.
Scope is the exact 125 candidate product IDs, seven showroom marker repairs,
necessary scoped theme treatment, and Online Store publication of KOT-23/24
before a verified rollout. Preserve the other 180 drafts and 237 archives,
existing sample variant IDs/prices, and held/archived channel configuration.
Published candidates must be Online Store-only; original latent memberships
are preserved as rollback evidence and restored only while DRAFT.
No email send, cadence change, DWNM identity/specification rewrite, or new
merchandise variant is included. Existing samples may remain purchasable
only as clearly identified samples; their $4.25 price must not be represented
as the material price.
## Evidence inspected independently
- `artifacts/SHOWROOM-PLAN.md`.
- `data/newmor-showroom-plan-2026-09-08.json`.
- `data/live-2026-09-09/shopify-before.json`, fetched 14:57:39.232Z.
- `scripts/shopify.mjs`, `scripts/preflight.mjs`, `scripts/range-check.mjs`.
- Current theme sources downloaded under `data/live-2026-09-09/theme/`.
- `verification/preview-before.png`, `.html`, and `.txt`; screenshot visually inspected.
- Canonical ticket history and empty `codex-run-10670` inbox.
Independent Python assertions passed for 542 unique products comprising
305 DRAFT and 237 ARCHIVED, with 125 candidate IDs and 180 held IDs disjointly
partitioning all drafts. The fresh candidate tags, template suffixes,
showroom values, variant IDs, SKUs, titles, prices, and availability have no
observed drift from the approved plan. All existing candidate variants are
Sample variants priced $4.25. Seven candidates need marker updates.
This scope partition PASS is **not** a full preflight PASS: six Arbour
candidates have zero images: ARB-002/003/004/005/007/008. Both KOT canaries
have an image. Exact-code image sourcing or explicitly retaining the six
drafts is required; dropping the image assertion is not a fix.
## Initial five critics, kept distinct
- Engineer — current render paths expose sample prices as material prices;
both visual and machine-readable surfaces need scoped guards. FIX FIRST.
- Designer — six image-less showroom candidates have no visual product
presentation; browser screenshots remain pending. FIX FIRST.
- User — the KOT preview has an inquiry CTA and clearly labeled Sample;
its 54-inch claim contradicts 130cm below, and submission is unproved.
FIX FIRST.
- Skeptic — publication assertions and rollback are not yet evidenced;
source inspection cannot substitute for the canary journey. FIX FIRST.
- Strategist — the chosen inquiry-first outcome addresses the stalled
price-sheet dependency; do not expand this into unrelated catalog repair.
SHIP IT for the direction, subject to the Engineer's release blocker.
## Three holes that survived debate
1. **Sample price leakage.** Current `snippets/product-list-item.liquid`
lines 200–216 emit `item.price_min`; `sections/predictive-search.liquid`
line 81 onward emits the minimum price; `layout/theme.liquid` lines
1216–1226 emit Product Offer `selected_variant.price`. These paths
currently advertise $4.25 without identifying a Sample. Remove Newmor
material-price attribution in the actual rendered output, including
metadata, and prove non-Newmor prices still work.
2. **Inquiry copy is contradictory and delivery is unproved.** The KOT
preview already wires `dw-quote-only-cta` through the `quotes` predicate
in `product-form-content.liquid` lines 193/318/441. Its lines 58–59
hardcode 54-inch yardage while the same visible page specifies 130cm.
Correct that Newmor copy and prove SKU context at the actual inquiry
boundary. An early review inference that no inquiry was wired was
incorrect and is withdrawn after inspecting the preview. If switching
to `contact-for-price`, its line 23 unqualified trade-discount promise
must not be inherited for Newmor.
3. **Six blank products and absent launch proof.** Resolve exact-code Arbour
imagery or retain those six drafts. Before rollout, independently inspect
desktop/mobile canary, cart Sample labeling, persisted Online Store-only
state, unchanged holds/archives/variants, and rehearsed rollback.
The lazy shortcut: “54\" wide · Yardage pricing by quote” is hardcoded generic
copy contradicting the live 130cm specification beneath it. Reusing a CTA
does not make its facts appropriate for Newmor.
Sameness: not a multi-option design task; no reskin/uniqueness claim applies.
The actual distinction needed is Sample purchase versus material inquiry.
Debate: Designer concedes price leakage outranks imagery; User holds that a
silent inquiry dead end is also a critical release blocker; Skeptic requires
persisted evidence for both. Strategist's strongest dissent is to avoid
turning a bounded showroom launch into a full pricing/identity rebuild.
That scope discipline stands; it does not excuse the broken render paths.
Vote tally: 4 FIX FIRST, 1 conditional SHIP IT → **FIX FIRST**.
The bar: a customer sees the correct Newmor colorway, encounters no numeric
material price, opens a SKU-specific showroom inquiry, and can only purchase
an explicitly identified existing Sample; Online Store scope and all holds
match fresh persisted assertions, with rollback rehearsed.
Do this now: implement the scoped price/inquiry render guards, then prove
the KOT-23/24 canary before publishing another candidate.
One sentence: the ID list and visible Sample labeling are sound; incorrect
width copy, machine-readable material pricing, and unproved inquiry delivery
still prevent a launch acceptance.
## Current canary / rollout acceptance
Canary **PASS**: eight PDP/inquiry checks and four Sample-cart/cleanup
checks across Chromium/WebKit desktop/mobile; shared anonymous sign-in
HTTP 200; full 542-record state invariants; real two-product rollback and
reapply; both public PDPs and 15 held/archive 404 probes.
Canary discovery is **PASS** in all four contexts (28 rows). Final rollout
acceptance is **PASS** for the approved 116-product showroom branch:
542-record invariants, every public PDP, and full-count named collection/
Newmor search in Chromium desktop and WebKit mobile (six final rows).
Quote email delivery,
authenticated checkout, and order placement remain explicitly UNTESTED
outside this approved showroom/contact verification scope. No whole-ticket
completion claim is made for the broader original refresh.
## Implementation review, before live theme apply
Reviewed `scripts/build-theme.mjs`, `scripts/apply-theme.mjs`, and all four
`theme-work/` assets. Newmor-only neutral copy, telephone/mailto fallback
with SKU subject, and Product JSON-LD URL substitution are correctly scoped
on source inspection. Three required fixes were returned to parent:
1. Assert the bytes read from each desired asset hash to the planned target
**before** issuing PUT. A hash assertion only after PUT discovers a
modified/unreviewed local asset after it has already reached production.
2. Enclose the unit-price blocks in the Newmor exclusion on both card and
predictive-search renders. Their main-price guards currently end before
`variant_for_unit_price.unit_price`. The fresh product query does not
inspect that field, so it cannot establish the remaining path is inert.
3. Replace `let rehearsal=before; rehearsal=after; rehearsal=before` with an
executed apply/rollback transition against local mock storage, including
drift rejection and partial apply handling. Assigning the original value
back to a variable proves only JavaScript assignment, not rollback.
### Re-review: theme code accepted for authorized apply
All three findings above are **RESOLVED** in the re-reviewed source. The
new `scripts/asset-transition.mjs` validates desired bytes before write,
rejects source drift, verifies persisted readback, and supports idempotent
retry. Both unit-price blocks are now inside the non-Newmor branch.
The reviewer independently imported and exercised the actual transition
function against all four real original/desired asset pairs, without any
live API call or artifact write. All four passed dry-run (zero writes),
target drift rejection (zero writes), source drift rejection (zero writes),
simulated persisted-readback failure after a successful write, rollback
to byte-identical original, successful apply, and idempotent retry.
Parent's separate evidence is `verification/asset-rollback-rehearsal.json`.
**Theme code review: PASS for scoped authorized apply and subsequent draft
preview.** This does not yet accept the canary, publications, or rollout.
## Updated draft preview and source eligibility
Independently viewed `verification/preview-after.png`, read the extracted
text and parsed every JSON-LD block in `preview-after.html`. KOT-23 passes
neutral showroom copy, explicit Sample $4.25 labeling, visible telephone
and email contact, and absence of a Product Offer in valid JSON-LD. The
email URI decodes to `Newmor inquiry: Kota Silk KOT-23`. The contradictory
54-inch badge is gone; the existing 130cm specification remains unchanged.
Contact handoff is demonstrated; an email was not sent and backend delivery
is not claimed. Live canary/mobile/cart remain separate pending checks.
The current range artifact independently accounts for all 125 candidate
IDs: **116 found, 9 held**. The nine holds are Arona AR-104/105/106/108/110/
111/112/113/114. Its vendor page returns 404. Toban TOB102 is now present
in the source audit. Online Store publication ID 22208643184 matches the
fresh publication snapshot.
## Product activation script review, before canary
`scripts/launch-products.mjs` initial review returned four required fixes:
1. The ACTIVE/published retry shortcut must validate the complete desired
markers, not just publication. Missing `quotes` can re-expose the PDP
price and must not be called “Already live” without detection.
2. Marker repairs must stay within the seven approved marker IDs; fresh
drift on the other 118 must be rejected rather than silently repaired.
3. Rollback needs absent-publication assertions and exact prior marker
restoration as the approved memo specifies. Status-only DRAFT is an
emergency unpublish step, not a full rollback proof.
4. Assert the selected canary set is exactly the two approved IDs before
issuing any write, rather than silently shrinking it via range filtering.
API behavior was checked against current Shopify 2026-07 documentation:
explicit `compareDigest: null` is the supported safe create-if-absent
metafield operation ([metafieldsSet](https://shopify.dev/docs/api/admin-graphql/latest/mutations/metafieldsSet)).
Publication removal has its own mutation and the product remains stored
([publishableUnpublish](https://shopify.dev/docs/api/admin-graphql/latest/mutations/publishableUnpublish));
therefore rollback verification must observe publication state, not infer
it from a status-only response.
### Product script re-review
The revised script now enforces the exact two canary IDs, seven marker
allowlist, baseline/journal tag states, complete markers before ACTIVE
retry, and rollback status/content/channel/tag checks with final equality
for status, publications, tags, and showroom value. **Canary code review
PASS**, subject to fixing the observed theme pickup initialization error
and exercising the actual canary journey. The two canaries have no marker
additions, so their restoration path is status/publications only.
Two findings remain for the broader marker-changing rollout: (1) range
freshness must not block rollback after 24 hours; (2) a partial marker
rollback can fail retry if tag removal succeeds and metafield deletion
fails, because the script still expects all added tags until final
`rollback_status=restored`. Keep the product safely DRAFT while making
that partial restoration path resumable and rehearse it.
### Bounded canary accepted
Both remaining source issues are resolved: vendor evidence freshness is
checked only for publication modes, and rollback accepts either the
original or launch-added tag state and only removes markers still present.
The reviewer accepts execution of the exact **KOT-23/24 canary** to test
the published variant pickup endpoint. The draft preview's initial missing
pickup container was repaired with a Newmor-only hidden container; its
subsequent missing-template XHR error may be specific to unpublished
variant endpoints, but that remains an inference until the live canary.
Immediate acceptance boundaries remain published no-price showroom UI,
contact handoff, explicit Sample cart identity, valid metadata, and exact
Online Store state. Roll back the two products if the core flow fails.
This is bounded canary acceptance, **not broader rollout approval**.
## Actual inquiry DOM defect discovered before final journey acceptance
The saved rendered DOM in `verification/preview-after.html` contains the
quote modal but **zero** `id="dw-quote-form"` and **zero**
`onsubmit="dwHandleQuoteSubmit(event)"`. Source explains the discrepancy:
`snippets/product.liquid` wraps the product content in a Shopify product
form, and `dw-quote-only-cta` places another form inside it. Browser parsing
drops the nested form start tag. The visible modal is therefore not proof
of a functioning quote submit, and its submit button may instead belong to
the outer cart form.
Parent notified immediately: remove nested forms for Newmor (a non-form
outer wrapper, or a quote modal outside the product form), preserve theme
initialization selectors, then verify the actual quote form and invalid
submit boundary. The explicit SKU mailto remains a valid contact fallback;
the broken modal must not survive final acceptance.
## Canary incident: latent sales-channel configuration
Independently inspected `data/live-2026-09-09/canary-auto-channel-incident.json`.
Its before record shows KOT-23 ACTIVE on **13 channels**; its after record
shows DRAFT and **zero visible channels**, with rollback PASS, recorded
15:57:37.514Z. KOT-24 was untouched at this point. This is an actual
cross-channel activation incident, not merely a cache/readback discrepancy.
The earlier legacy `resourcePublications` query observed visible
publications only. The new `configuredPublications` alias queries
`resourcePublicationsV2(onlyPublished:false)` and exposes latent configured
channels on drafts. The launch now captures those configurations, removes
them while the product remains DRAFT, verifies no visible or configured
channels, activates, and publishes Online Store explicitly. Its rollback
restores the prior latent configuration while DRAFT and compares both
visible and configured publications to prestate.
Required correction returned to parent: the immediate post-ACTIVE read must
assert both visible and configured publications are **empty**, not merely
that every currently visible channel equals Online Store. A fresh V2
baseline for all 542 records is required before claiming full configured
channel invariance of holds and archives.
The fifth theme asset, `snippets/product.liquid`, now uses a Newmor-only
non-form outer wrapper so the quote form survives DOM parsing; other vendors
retain the original Shopify form. Matching pickup container/modal nodes are
present. The reviewer independently exercised all **five** original/desired
asset pairs through actual transition dry-run, apply, idempotent retry, and
byte-identical rollback; all passed without live API calls.
### Latent-publication control accepted for canary
The revised post-ACTIVE barrier now checks **both** connection types and,
if either is nonempty, immediately restores DRAFT, verifies zero visible
channels, and throws before the Online Store publication. This addresses
the observed incident mechanism without assuming legacy emptiness means
no latent configuration.
The reviewer independently validated
`data/live-2026-09-09/configured-publications-baseline.json`: 542 unique
records, 305 DRAFT and 237 ARCHIVED; all statuses, tags, and showroom
type/values match the original baseline. Every record has 13 latent
publication memberships and every queried nested page is complete. The
metafield comparison intentionally normalizes to type/value because this
V2 baseline omits the metafield ID. This supplies the before evidence for
the later hold/archive configuration comparison.
The six Arbour image-fill URLs were independently joined to the exact
official `color-title` block and its `data-fblink` in saved vendor HTML;
all six code-to-image associations pass, including ARB-002's different
filename convention. No image overwrite was authorized or performed by
the reviewer.
## Boost discovery review — 2026-09-09
The hydrated evidence in `verification/browse-check.json` is a real discovery
failure, not proof of price suppression: the Newmor vendor collection has
zero cards, and KOT-23 search shows three unrelated products. Its recorded
Boost response already contains `total_product:0` for the vendor query.
The native collection hero independently counts **two designs**.
The route architecture explains why the earlier native-card price guard
cannot by itself protect discovery: `templates/collection.json` renders the
Boost app and a description-only `sections/collection.liquid`;
`templates/search.json` disables its native main section. Both use the
`.boost-sd__product-filter-fallback` wrapper. Boost builds the actual cards
without calling `snippets/product-list-item.liquid`.
The rendered `hide-browse-hidden` code suppresses only Phillip Jeffries by
vendor. It also splits data-tags on `/[,\s]+/`, which would incorrectly
interpret the multiword tag `Showroom Line` as the separate tag `Showroom`.
That is a latent defect, **not the cause of this empty response**: current
Boost cards expose no such data-tags attribute, and the three unrelated
Showroom Line results remain visible. No Newmor vendor exclusion appears
in the rendered Boost configuration inspected; an upstream index or private
app rule remains unverified.
Smallest bounded correction recommended to the parent: render a native
Newmor-only grid outside the Boost fallback wrapper on the exact Newmor
vendor route, using the live `collection.products` source, scoped card
markup, no material numeric price, and persistent sort/density controls.
Do not change the global hide script or other vendors for this ticket.
Search requires an explicit Newmor supplement using a verified public
source; merely fixing the collection does not make KOT-23 discoverable.
Any later Boost indexing must also be protected by an exact Newmor/ID
price and quick-buy guard on the actual Boost card structure.
### Checkout boundary classification
The observed anonymous checkout reached Shopify's normal sign-in boundary
(HTTP 200), rather than displaying an incorrectly labeled item. A test may
PASS the expected authentication host/path/sign-in assertion and separately
record authenticated checkout/order as **SKIPPED**. It must not claim
authenticated checkout or email delivery was exercised. Raw OAuth state,
nonce, and signed query parameters should stay out of committed evidence;
origin/path and boundary assertions are sufficient.
For the native source recommendation, Shopify documents that
[`paginate`](https://shopify.dev/docs/api/liquid/tags/paginate) supports
`collection.products` with up to 250 products per page, enough for the
bounded 116 eligible Newmor records. The
[Section Rendering API](https://shopify.dev/docs/api/ajax/section-rendering)
can render a section in the vendor route's context for a same-origin search
supplement. This is a proposed implementation direction, not yet live
endpoint evidence. Neither discovery failure nor search indexing delay
authorizes restoring unrelated sales-channel memberships.
The later `verification/discovery-admin-probe.json` identifies two existing
Newmor collections, `newmor-wallcovering` and `newmor-wallcoverings`.
If live Liquid resolves the latter with the two currently published
canaries, a `collections['newmor-wallcoverings'].products` source can be
rendered directly on relevant search/vendor/named-collection routes,
avoiding an extra section-fetch. The Admin count of 542 includes held
records and does **not** itself prove public visibility. Require the live
render to contain exactly the current published allowlist intersection.
### Native discovery implementation review
Reviewed `scripts/newmor-discovery.liquid`, `scripts/newmor-boost-guard.js`,
and the seven-asset build draft. The native grid uses the existing named
collection, a 125-ID array membership test, exact Newmor vendor equality,
server-side search matching, price-free inquiry cards, and persistent
sort/density controls. Named/vendor collection routes replace only the
Newmor body; search supplements existing results. This direction is
acceptable pending actual rendered count and navigation proof.
Three concrete guard corrections returned to parent before apply:
1. The hydrated pages contain no `boost-sd-custom.js` URL/reference, and no
`VENDOR_HANDLES`, `data-dw-linked`, or `dw-hover-label` execution trace
from its existing code. Patching an asset does not prove execution.
Explicitly loading the entire formerly dormant 14KB file could activate
unrelated vendor behavior; give only the Newmor guard a verified path
through the already-scoped layout or a dedicated asset.
2. Vendor-text-only detection and requestAnimationFrame cleanup can leave
a newly inserted card's price/actions exposed until a later frame or
vendor-text insertion. Recognize exact approved product IDs immediately,
use an initial exact-ID price/action CSS guard, and perform observer
cleanup before paint. The observer itself has no demonstrated infinite
loop: it watches child nodes only and appends its inquiry label once.
3. The capturing click handler redirects every Newmor card click to its
first product link, including vendor links and modifier clicks. Preserve
normal browse/new-tab link behavior; intercept only unmodified primary
quick-buy actions that need routing to the product page.
### Six-asset discovery correction accepted for bounded canary
The revision removes `boost-sd-custom.js` from the deployment plan and
executes only the new guard inline in the existing layout. Exact approved
IDs/handles receive a head CSS price/action guard; ID, handle, or exact
vendor recognition drives synchronous mutation cleanup. Modifier clicks
and non-product links are preserved. Last-applied asset receipt hashes
provide the source for iterating already deployed files.
The reviewer independently ran the actual `newmor-boost-guard.js` in
isolated Chromium **and** WebKit DOMs, without live requests or product
writes. In both engines: an approved-ID card with no vendor text lost all
price/buttons, received exactly one inquiry label, a later reinserted
currency node was removed, and an unrelated vendor retained its original
price/buttons. Both PASS. The first browser launch hit the host sandbox;
the explicitly escalated isolated rerun passed. This is a meaningful
component-boundary proof, not a substitute for the real live route proof.
### Live discovery caught a commented-out CSS insertion
The first five Chromium desktop route checks now show exact expected
Newmor IDs, price-free cards, working sort, and density column changes.
The live cloned-Boost fixture then correctly failed: its initial price
display was `block`, not `none`. Independent source tracing identified
the cause immediately: the build inserted the head CSS beside
`{% render 'boost-sd-fallback' %}`, but that anchor is inside a Liquid
`{% comment %}` block. Thus the new CSS existed in the saved theme asset
and passed hash readback but never rendered to shoppers. The actual JS
guard still ran.
Parent directed to move the CSS outside that comment beside an active
head anchor, then repeat the real pre-paint fixture check. This is exactly
why saved-file hashes alone were insufficient for discovery acceptance.
### Product rollout gate follow-up
Before the broad rollout, the operator must require fresh PASS discovery
evidence with the exact two canary IDs as well as the browser canary proof.
The current script only reads `canary-proof.json`, so its durable gate
should incorporate the newly required discovery path.
Two rollback edge cases were returned for tightening: reject draft-only
configured channels outside the original memberships plus Online Store
before removing any, and reset/archive a restored record's prior cycle
before reapplying it. Otherwise an externally added latent channel could
be removed by rollback, or a `rollback_status:restored` receipt could
incorrectly suppress marker cleanup after a later apply. The two current
canaries do not add markers; this does not invalidate their browser proof,
but the broader seven-marker path needs consistent retry semantics.
### Independent full canary state comparison — PASS
The reviewer independently compared all rows in
`shopify-canary-after.json` (fetched 2026-09-09 16:53:15Z) against both
original product and configured-publication baselines, plus exact image
receipts. Result: 542 unique and identical IDs; exactly KOT-23/KOT-24
ACTIVE with Online Store-only visible/configured memberships; 303 DRAFT
and 237 ARCHIVED. All 542 identity/content/variants/prices/tags/showroom
fields/metafields are unchanged. The other 540 records preserve their
status and latent channel memberships. Exactly six sourced Arbour image
fills account for all image differences. PASS.
The generated statement “No canonical DB or other sales channel writes”
was returned for correction: a final-state comparison cannot prove the
absence of intermediate writes, and this run records the earlier
13-channel incident plus intentional latent-publication clearing.
Acceptance must describe final Online Store-only state and preserved
holds honestly without erasing that history.
### Boost virtual-vendor metadata exception
After the CSS correction, the discovery runner reaches seven passing rows
before rejecting two app exceptions. Independent inspection of the exact
Boost `boost-sd.experiments.js` source confirms that
`preloadCollectionHeader()` fetches `/collections/${handle}.json`, calls
`res.json()` without validating an empty response, and is invoked without
`await` inside its try/catch. The virtual `vendors` route therefore leaks
an asynchronous parse exception. Native named collection/search paths
already return their expected cards.
The parent proposed repairing only the exact same-origin GET
`/collections/vendors.json` request on the exact Newmor virtual-vendor
page to use the existing named collection's JSON metadata. This is
acceptable after verifying that metadata is real, HTTP 200, and valid
JSON, provided every other request and route is forwarded unchanged and
the live error disappears. A global exception suppressor is not accepted.
### Actual product rollback/reapply — independently verified PASS
The reviewer compared each full persisted product in
`verification/canary-rollback-proof.json` against the original product and
latent-publication baselines. KOT-23 at 16:58:11Z and KOT-24 at 16:58:13Z
returned to DRAFT, zero visible channels, and exactly the original 13
configured memberships. Their identity/content/variants/prices/tags/
showroom/metafields/images match prestate. This was a real operational
rollback, not a mock.
The journal's persisted reapply receipts at 16:58:37Z/16:58:41Z again show
each ACTIVE with exactly Online Store in both publication connection
views. The rollout gate now also checks a fresh discovery PASS with exact
canary IDs; rollback rejects unexpected configured channels and marks a
restored record reapplied before another mutation.
Limit of this rehearsal: neither canary adds a marker. A second replay
of a rolled-back marker record still fails closed at the tag-history
guard rather than silently retrying; do not describe that unexercised
marker replay as proven. The current single apply/rollback path and the
actual canary restoration are distinct from that further retry case.
### WebKit background-error classification
Chromium desktop/mobile discovery completes with zero page errors.
WebKit desktop completes its five functional routes, controls, card click,
and cloned Boost guard before the strict page-error assertion rejects 18
errors: 12 Statcounter sandbox errors, one calculator DetectPage error,
one Sesami CORS error, two background cart.js fetch errors through
mycustomizer/Cowlendar, one Zendesk error, and one stackless Load failed.
Independent review permits only owner/signature-matched third-party
errors reproduced on unchanged non-Newmor control pages to be recorded
as nonblocking baseline errors. The actual Newmor browse/inquiry/Sample
cart and cleanup assertions remain strict. The stackless Load failed is
not a blanket allowlist candidate: correlate failed request URL/error/time
or navigation cancellation before classification. No global app repair
or error suppression is justified by this scoped launch.
### Visual review
Viewed the actual Chromium desktop and mobile native vendor screenshots.
Both show distinct KOT-23/KOT-24 swatches, legible product/SKU labels,
clear inquiry copy, and no material numeric price. The sort control has
a visible duplicate “Newest” label from the global theme Select wrapper.
The existing `grid.js` constructor explicitly skips selects with class
`select-disable-wrapper`; that one class on `#nw-sort` is the scoped
correction returned to the parent. No global select rewrite is needed.
### Review scope frozen for completion
Launch-specific code review is complete. The remaining acceptance is
evidence: finish the functional browser proof, record external app errors
accurately, execute only the gated eligible rollout, compare all 542
persisted records, and verify each published PDP. No further global app
or design changes are requested by this review.
`scripts/verify-live-pages.py` appropriately complements the interactive
canary by checking every launched PDP's HTTP response, quote form, SKU
contact, Sample label, and absence of material price/Offer metadata. Its
nine range-hold and sampled original draft/archive 404 probes supply
public negative boundaries. Its journal-derived live set must still be
checked against the independently verified full persisted snapshot.
External analytics sandbox errors from proven third-party callsites may
be recorded as nonblocking instrumentation failures without describing
all of them as reproduced baseline. Optional app network errors require
the same explicit provenance/risk distinction, and unknown failures stay
visible. Actual Newmor native UI and Sample cart assertions must pass.
### Completed four-context canary — independently accepted PASS
Independent assertions against `canary-proof.json` at 17:21:00Z verify
exactly 12 rows across Chromium/WebKit desktop/mobile: eight PDP checks
for the exact KOT-23/KOT-24 IDs and four correct Sample-cart/cleanup
boundaries. Every PDP passes HTTP 200, no material price/buy/Offer,
explicit Sample label, correct phone/SKU mailto, modal open/close, and
required-empty-form rejection. The shared anonymous sign-in handoff
returned HTTP 200. Authenticated checkout/order and quote email delivery
remain explicitly UNTESTED.
All 39 recorded browser exceptions resolve to the declared external-owner
classification; none was silently dropped or accepted as an unattributed
failure. Statcounter alone is described as reproduced on unchanged
controls; other optional analytics/booking callsites are described as a
scoped nonblocking judgment. Actual cart identity and cleanup pass in
both WebKit contexts despite those optional background errors.
The public-page proof independently matches the exact two canary IDs and
15 expected 404 probes, including all nine Arona holds plus six sampled
original draft/archive records. The fresh discovery gate remains required
before the 116-product rollout. Post-rollout full-state/public-page
evidence is still required before overall completion.
### Complete discovery gate — independently accepted PASS
Independent assertions against the 17:25:04Z discovery artifact verify
28 rows in four contexts: 20 exact-ID collection/search route checks,
four actual card-to-PDP/contact journeys, and four pre-paint/DOM cleanup/
unrelated-vendor controls. Density columns change and sort/density persist;
the test source also asserts side-by-side controls without overlap.
All 27 recorded page errors have declared external owners; none was
accepted as unknown. Both canary and discovery rollout gates are now
independently accepted. Parent reports commit `6bef493` and rollout of
the remaining 114 eligible products; final persisted/public evidence is
still required before accepting the approved showroom branch. The parent
ticket's broader DWNM/specification/full-refresh work remains separately
blocked; this branch review must not close that broader scope.
### Full rollout state and every public PDP — independent PASS
Independent full-data assertions against the completed 17:33:52Z snapshot
and 17:35:23Z public-page proof pass:
- Exactly **116 ACTIVE, 189 DRAFT, 237 ARCHIVED** across the same 542 IDs.
- The active set is exactly the 116 source-verified members of the approved
125-ID scope. All 180 original draft holds plus nine Arona holds remain
drafts; all 237 original archives remain archived.
- All 542 product identities, content, variant IDs/SKUs/titles/prices/
availability, and non-showroom metafields match the original baseline.
- Exactly the seven authorized products receive the two showroom tags and
new boolean showroom marker; no other tag/showroom differences exist.
- Exactly the six sourced Arbour image additions match their image receipts;
no other image changes exist.
- All 116 active products have only Online Store visible/configured.
All 426 held/archived products preserve status, tags, showroom values, and
their exact baseline latent channel memberships.
- Every one of the 116 exact active IDs has HTTP 200 plus verified no
material price/buy/Offer, explicit Sample label, SKU contact, and quote
form markup. All 15 public negative probes return 404, including every
Arona hold.
Final discovery at the full 116-product count subsequently passed as
documented below. Acceptance covers only the approved showroom branch;
the broader parent refresh and its DWNM/specification restrictions remain
blocked and unchanged.
## Final independent verdict — PASS / SHIP IT for the approved branch
The reviewer independently joined `final-discovery-proof.json` at
17:36:46Z to the actual ACTIVE set in the completed 542-product snapshot.
Both sets contain exactly the same 116 unique IDs. Final coverage is
**six rows**, not five routes per context: the named Newmor collection
and Newmor search in Chromium desktop and WebKit mobile (four native
route checks), plus one unrelated-vendor/Boost-guard control in each
context. Every route contains exactly 116 expected cards/swatches, no
material price or buy control, working sorting, changed density columns,
and persistence. Both actual-app-markup guard fixtures hide price before
paint, remove price/actions, retain inquiry, and preserve the unrelated
vendor. Four final page errors are recorded with declared external owners;
no unattributed error was accepted.
### Five critics — final pass, no moving goalposts
- **Engineer — SHIP IT.** Exact ID scope, six scoped theme assets,
no-price render/metadata guards, durable canary/discovery gates, and
full 542-record invariants pass. No variant, price, identity, content,
or unrelated metafield rewrite occurred.
- **Designer — SHIP IT.** Real desktop/mobile screenshots show distinct
source swatches, readable SKU/inquiry labels, and usable sort/density.
The duplicated select wrapper was corrected using the existing opt-out.
- **User — SHIP IT.** Native discovery reaches the correct product;
four-context canary tests prove inquiry controls, phone/SKU mailto,
explicitly labeled Sample cart identity, and cart cleanup. Authenticated
checkout/order and quote-email delivery remain untested, not claimed.
- **Skeptic — SHIP IT.** Full-state and public negative assertions pass;
the actual two-product rollback restored DRAFT/zero visible/exact latent
memberships and reapply returned to Online Store-only. The initial
13-channel activation incident stays documented; final state does not
prove external feeds never observed that brief event.
- **Strategist — SHIP IT for this branch.** The approved no-price showroom
outcome is delivered for 116 verified colorways. Nine Arona products
remain held and the broader DWNM/specification refresh stays blocked.
No unrelated channel, cadence, email, or canonical catalog expansion
is authorized by this verdict.
**The three holes:** sample-as-material price leakage, broken inquiry/
discovery, and unproved scope/rollback have all been corrected and verified
at their relevant boundaries. The optional external-app warnings and
unperformed email/authenticated-order steps remain explicit limitations.
**The lazy shortcut rejected:** saved theme hashes were not treated as
proof of rendered behavior. Live testing caught both the commented-out
price CSS and the nested quote form, and each was fixed before acceptance.
**Sameness:** no uniqueness/reskin claim applies. The meaningful distinction
is preserved throughout: material inquiry versus an explicitly labeled
existing Sample purchase.
**Debate and tally:** Engineer accepts persisted scope; User accepts the
tested contact/Sample boundary with honest untested endpoints; Skeptic
accepts the real rollback and insists the incident remain visible;
Designer accepts the actual rendered controls; Strategist retains the
separate full-refresh block. **5 SHIP IT for the approved branch.**
**The bar:** 116 exact approved/current products discoverable without a
material price, correct contact context, unchanged samples, Online Store
only, exact held/archive invariance, and rehearsed rollback. Met.
**Do this now:** record the approved showroom branch as verified complete
and retain the original ticket's precise DWNM/specification/Arona blockers.
**One sentence:** the 116-product showroom launch earns acceptance; it does
not erase the nine source holds, broader refresh block, or recorded canary
incident.
### Final A2A evidence handoff
- Ownership: reviewer changed only `verification/independent-review.md`;
no live mutations performed and no child delegation.
- Independent checks: full canary and final snapshot comparisons; exact
seven marker/six image differences; canary/final discovery ID-set and
behavior assertions; all 116 public PDP/15 negative-probe assertions;
actual rollback/reapply state comparisons; isolated Chromium/WebKit
guard execution using the real source.
- Evidence: `canary-proof.json`, `discovery-proof.json`,
`canary-state-proof.json`, `canary-rollback-proof.json`,
`final-state-proof.json`, `public-pages-proof.json`,
`final-discovery-proof.json`, `asset-rollback-rehearsal.json`, and their
linked source snapshots, screenshots, videos, and journals.
- Historical correlation checkpoints: M-02426 and M-02465. Final canonical
ticket handoff: **M-02472**.
- Accountable finalizer: root. Commit/archive/ticket-blocker bookkeeping
remains root-owned; this reviewer does not mark the broader ticket done.