Back

Method and evidence

This report covers collection, modelling, rules, tests and the quality of the decisions taken on what was found. It does not cover authentication, any private integration, or working inside the merchant's own codebase.

The collection

GET only, public endpoints, no account, no write, no image copied. Verdict: collection complete. Every request is archived with its status and the hash of what came back, and one page past the last non empty one is fetched so exhaustion is observed rather than assumed.

RequestStatusItemssha256
products.json?limit=250&page=12002503354c79848376fdd
products.json?limit=250&page=2200134e6035bba97531860
products.json?limit=250&page=3200086d8b086af0fc30d
sitemap_products_1.xml?from=7549106520124&to=9073758699580200n/adccd0590d2295a30

384 products, 2,847 variants, 2,831 distinct non empty stock codes. A stock code is not a product, and 384 is a result rather than a constant. Against the sitemap: 383 in both, 1 in the feed only, 0 in the sitemap only. The sitemap is a visibility cross-check, not the inventory, and a product can be unlisted on purpose.

What this source actually carries

Taken before any rule runs. A field this feed omits is not a field left empty in the store, so a rule needing one reports as not observable and is never counted among the passes.

FieldObjectsPresentNullVerdict
products[].body_html3843840observable
products[].tags3843840observable
products[].options3843840observable
products[].images3843840observable
variants[].sku2,8472,8476observable
variants[].price2,8472,8470observable
variants[].compare_at_price2,8472,8472,847observable
variants[].grams2,8472,8470observable
variants[].requires_shipping2,8472,8470observable
variants[].option22,8472,847130observable
images[].src4,9304,9300observable
images[].alt4,93000not carried by this source

Counters by status and by class

By status

  • 12 FLAG, ran and matched
  • 10 PASS, ran and matched nothing
  • 2 NOT_OBSERVABLE, the source does not carry what this needs

Findings by class

  • 202 confirmed, across 172 products
  • 20 to examine
  • 60 the source cannot settle
  • 1 for information

Every rule

confirmed

The snapshot contradicts itself or breaks its own structure. Checkable from the data alone.

CD-001Collection tag contradicts the description

v1.0.0 · FLAG 84

Two collection tags on one product name different sets, and the product's own description backs only one of them.

CD-002Stated number of sizes does not match the sizes offered

v1.0.0 · FLAG 36

The description states how many sizes are available and the size option offers a different number of distinct measurements.

  • Auden · Front Reception Desk The description reads "Available in four widths". The Size option offers 12 distinct sizes: 6′7″ width, 7′3″ width, 8′ width, 8′6″ width, 9′2″ width, 10′ width, 10′6″ width, 12′ width, 12′6″ width, 13′ width, 15′ width, 16′5″ width.
  • Corely · Modern L-Shaped Executive Desk The description reads "Available in four widths". The Size option offers 8 distinct sizes: 5′3″ width, 6′ width, 6′7″ width, 7′3″ width, 8′ width, 8′6″ width, 9′2″ width, 10′ width.
  • Cyrene · Front Reception Desk The description reads "Available in four widths". The Size option offers 8 distinct sizes: 6′ width, 7′3″ width, 8′ width, 8′6″ width, 9′2″ width, 10′ width, 11′2″ width, 12′ width.
  • and 33 more.

CD-003Stock code carries characters outside an identifier

v1.0.0 · FLAG 24

A stock code contains something other than letters, digits, dot, underscore, slash or hyphen, or does not start with a letter or digit.

CD-004One facet carried under two tag names

v1.0.0 · FLAG 43

The same product carries both a Finish Color_ tag and a Finishing Color_ tag, two names for one facet.

CD-005Facet tag carrying no value

v1.0.0 · FLAG 12

A tag is written with no underscore, naming a facet with nothing attached to it.

CD-006Variant with no stock code

v1.0.0 · FLAG 3

A variant carries no stock code at all, or only whitespace.

CD-007Stock code shared by more than one product

v1.0.0 · PASS

The same stock code, character for character, appears on variants of more than one product.

CD-008Stock codes that collide once punctuation is removed

v1.0.0 · PASS

Two different stock codes become the same string once case, spaces and punctuation are dropped.

CD-009Compare at price below or equal to the price

v1.0.0 · PASS

A variant carries a compare at price lower than, or the same as, the price being asked. Amounts are compared as exact cents.

CD-010Variant price missing, unreadable or zero

v1.0.0 · PASS

A variant price is absent, is not a plain decimal amount, or is zero. The three are reported with the reason, never merged.

CD-011Product with no image in this feed

v1.0.0 · PASS

The product carries an empty image list in this feed.

CD-012Description empty or left as a placeholder

v1.0.0 · PASS

The description is empty once the HTML is stripped, or still contains placeholder text such as lorem ipsum or TBD.

CD-013Title states a size the variants do not offer

v1.0.0 · PASS

The product title states a measurement and no value of the size option matches it within half an inch.

CD-014Former trading name left in a description

v1.0.0 · PASS

The description mentions a former trading name of the business.

CD-015Snapshot integrity, repeated identifier or contradictory attachment

v1.0.0 · PASS

A product or variant identifier appears twice in the snapshot, or a variant names a different product as its parent.

CD-016Physical item flagged as not requiring shipping

v1.0.0 · PASS

A variant of a furniture product carries requires_shipping set to false.

to examine

Read exactly. Whether it is wrong is a business call.

CD-017Price falls as the size grows

v1.1.0 · FLAG 5

Within one product, sorting the size option by the measurement each value states, a larger size is listed below the size under it.

CD-018Description shared with another product

v1.0.0 · FLAG 14

Once the blocks every product repeats are removed, two descriptions still share at least 85 percent of their eight word sequences.

CD-019In the product feed but not in the product sitemap

v1.0.0 · FLAG 1

The product is returned by the feed and its handle does not appear in the product sitemap. Image entries are not counted.

unknown

The public source cannot answer it. Never presented as a defect.

CD-020Dimensions not identified in the collected public data

v1.0.0 · FLAG 59

No measurement with a unit was found in the description or in any option value. Metafields, which this feed does not publish, may still carry them.

CD-021Public shipping weight to verify

v1.0.0 · FLAG 1

The weight field is published and reads zero. Reported once for the catalog when every variant reads the same.

  • Whole catalog Every one of the 2,847 variants publishes a weight of zero.

CD-023Alternative text on images

v1.0.0 · NOT_OBSERVABLE

Would report images published without alternative text.

This feed publishes no alt field on images. Whether alternative text exists in the store cannot be read from here, so nothing is reported either way.

CD-024Search metadata, meta title and meta description

v1.0.0 · NOT_OBSERVABLE

Would report search metadata that is absent or over length.

This feed carries no metafields, so the meta title and meta description are not visible. Measuring the product title instead would be measuring a different thing.

info

Worth knowing. Not a finding.

CD-022Tag spelled differently from the rest of the catalog

v1.0.0 · FLAG 1

A tag differs only by case or spacing from the spelling used elsewhere and is in the minority. Shopify matches tags without regard to case, so this is tidiness only.

Rules written and then dropped

Each was coded, run against the real catalog, and then reconsidered. The numbers are measured again on every run, so this cannot drift away from the code.

Product title longer than 70 characters

Measured: not a defect, a house style.

Dropped. Title length is an editorial preference, and the meta title this would stand in for is not published in this feed. Measuring the product title instead would be measuring a different thing.

Description shorter than 40 words

Measured: not a defect, a house style.

Dropped, and replaced by CD-012, which reports an empty description or one still holding placeholder text. A short description is a choice; an empty one is a gap.

Tag casing splits the facet filter

Measured: Shopify matches tags without regard to case.

Demoted to information as CD-022. The premise was wrong: a lower case tag does not split a filter, so reporting it as a finding would have been reporting a non problem.

Dimensions absent from the description

Measured: 302 of 384 products would have been flagged, 79 percent.

Rewritten as CD-020 and moved out of the findings. Most products state their size in the option values rather than the description, so the first version was looking in the wrong place, and even rewritten the answer is a question for the supplier rather than a defect.

Single value option, a dropdown with one choice

Measured: 315 of 384 products, 82 percent.

Dropped. At that rate it describes the way this catalog is built, not a fault in it.

Supplier tag disagrees with the stock code prefix

Measured: the prefix SL appears under 8 different supplier tags.

Dropped. The leading letters of a stock code are not a supplier code here, so every disagreement would have been a false alarm.

All 20 cases

The authored half of the correction queue. Every evidence field (identifiers, source URL, capture time, snapshot hash, field path, observed value) is joined in from the snapshot and the report by scripts/build-queue.ts, so it cannot drift from what was actually read. Nothing here has been applied to the store. Reviewer: Catalog Desk second-pass reviewer. A second pass over the same snapshot by a language model, separate from the pass that wrote the proposals. This is not a human review and not a decision by Arc Grove. Authorisation by the catalog owner is pending on all 20, and none has been applied.

Q-01rejectedCD-020 v1.0.0 · body_html, options[].values

Boden · Office Lounge Chair

Observed. No measurement in the description or in the options (Seating Type, Color).

First proposal. Recover the sizes that are not published by reading the number at the end of the stock code, taking SL-01-BW-004-16R as sixteen inches, and fill in all 59 products that way.

Final proposal. Publish nothing. Ask whoever holds the specification for the seat and overall dimensions. Shopify metafields may already carry them and this feed would not show it.

Reason. The number is an internal size class, not a measurement. On the Bristol desk the code ending -16R is a piece 5 feet 3 inches wide and -24R is 8 feet, so the codes step by two while the width steps by about nine inches. The parser now refuses to read any stock code as a measurement and a test holds that line.

Still unknown. Whether the dimensions exist in metafields, which this feed does not publish. Authorisation: pending. Applied: no.

Q-02revisedCD-001 v1.0.0 · tags[]

Callum · Conference Room Meeting Table

Observed. The description reads "Part of the Amity Collection". The product is also tagged Matching-Set_Demeter.

First proposal. Rewrite Matching-Set_Demeter as Matching-Set_Amity here, and across the other 83 products where the two collection tags disagree.

Final proposal. Change no tag. Raise one question with whoever owns merchandising: which of the two tag families is the one to keep. Then migrate once, deliberately.

Reason. Not a typo. Matching-Set_ and MatchSet_ are two vocabularies, each internally consistent, with Demeter covering 11 products and Amity 7. Rewriting one into the other would dissolve a real grouping, so 84 edits became one decision.

Still unknown. Which vocabulary the storefront reads, and whether both feed different surfaces. Authorisation: pending. Applied: no.

Q-03acceptedCD-001 v1.0.0 · tags[]

Frisco · Modern L-Shaped Executive Desk

Observed. The description reads "Part of the Frisco Collection". The product is also tagged Matching-Set_Pure Oak.

First proposal. Rewrite the disagreeing collection tag.

Final proposal. Leave both tags. Add the Collection_ tag the description already advertises, which is missing, so the collection named on the page exists as a filter.

Reason. Additive and reversible, and it does not depend on the vocabulary question in Q-02 being settled first.

Still unknown. None for this product. Authorisation: pending. Applied: no.

Q-04acceptedCD-002 v1.0.0 · body_html, options[].values

Chevron · L-Shaped Executive Desk

Observed. The description reads "Available in four widths". The Size option offers 8 distinct sizes: 5′3″ width, 6′ width, 6′7″ width, 7′3″ width, 8′ width, 8′6″ width, 9′2″ width, 10′ width.

First proposal. Change four to eight in the description.

Final proposal. Change four to eight in the description.

Reason. The eight values are eight distinct widths. The sentence is out of date and nothing else depends on it.

Still unknown. None. Authorisation: pending. Applied: no.

Q-05revisedCD-002 v1.0.0 · body_html, options[].values

Langley · Modern Office Shelves

Observed. The description reads "Available in four widths". The Set Size option offers 5 distinct sizes: 8′ width, 9′2″ width, 10′ width, 10′6″ width (set A), 10′6″ width (set B), 12′6″ width.

First proposal. Change four to six in the description, matching the six values in the size option.

Final proposal. Change four to five. Two of the six values are the same 10 foot 6 inch width in two set layouts.

Reason. Counting option values instead of distinct measurements would have replaced a wrong number with another wrong number. The rule counts distinct measurements for exactly this reason.

Still unknown. None. Authorisation: pending. Applied: no.

Q-06acceptedCD-002 v1.0.0 · body_html, options[].values

Amica · Conference Room Table

Observed. The description reads "Available in four lengths". The Size option offers 7 distinct sizes: 6′7″ length (Seats up to 4), 8′ length (Seats up to 6), 10′ length (Seats up to 10), 12′ length (Seats up to 12), 13′ length (Seats up to 12), 14′9″ length (Seats up to 14), 16′5″ length (Seats up to 16).

First proposal. Change four to seven in the description.

Final proposal. Change four to seven in the description.

Reason. The three longest sizes are invisible to anyone reading the description.

Still unknown. None. Authorisation: pending. Applied: no.

Q-07revisedCD-003 v1.0.0 · variants[].sku

Hershey · Modern L-Shaped Executive Desk

Observed. 28 of 28 codes carry characters outside an identifier, for example "[SL] JM-JB05-16R-MB".

First proposal. Strip the bracket and its contents from all 191 affected codes, leaving JM-JB05-16R-MB.

Final proposal. Confirm first what the bracketed prefix maps to in the supplier records, record the mapping in a field of its own, and only then clean the code.

Reason. The bracket is the only place that information appears anywhere in the public data, so stripping it deletes something nobody has written down elsewhere.

Still unknown. What the bracketed prefix means, and which system currently matches on these codes. Authorisation: pending. Applied: no.

Q-08acceptedCD-004 v1.0.0 · tags[]

Buckler · Modern L-Shaped Desk

Observed. Finish Color_ holds Dark Wood. Finishing Color_ holds Dark wood grain.

First proposal. Keep Finish Color_, drop Finishing Color_, and normalise the value to Dark Wood.

Final proposal. Keep Finish Color_, drop Finishing Color_, and normalise the value to Dark Wood.

Reason. Every product using Finishing Color_ also uses Finish Color_, which is what makes it a duplicate name rather than a second facet.

Still unknown. None. Authorisation: pending. Applied: no.

Q-09revisedCD-005 v1.0.0 · tags[]

Amica · Conference Room Table

Observed. Tagged "Oval Conference Table" with no value attached.

First proposal. Delete the bare tag Oval Conference Table from all 8 products carrying it.

Final proposal. Give it a facet name rather than deleting it. Then look at this product on its own: 7 of the 8 products carrying the tag are tagged Shape_Rounded and this one is tagged Shape_Rectangular.

Reason. Deleting would lose a real grouping. The tag behaves like a collection that was never given a prefix, and the exception it exposed is worth more than the tidy up.

Still unknown. Whether this table belongs in that group at all. Authorisation: pending. Applied: no.

Q-10rejectedCD-005 v1.0.0 · tags[]

Albion · Executive L-Shaped Standing Desk, Adjustable Height

Observed. Tagged "Best For" with no value attached.

First proposal. Delete the bare tag Best For.

Final proposal. Leave it and send it to whoever entered it.

Reason. Somebody meant to write Best For something. Deleting the tag hides the gap instead of closing it, and the missing half cannot be recovered from public data.

Still unknown. The value that was meant to follow. Authorisation: pending. Applied: no.

Q-11acceptedCD-006 v1.0.0 · variants[].sku

Aureon · Front Reception Desk

Observed. 1 of 1 variants carry no code: 22′4″ width / Base Configuration / Ebony Veneer.

First proposal. Issue a stock code following the pattern used by the rest of the Zenith set.

Final proposal. Issue a stock code from the supplier records. No code is proposed here.

Reason. A reception desk that can be ordered with nothing to put on the purchase order. Inferring the code from a neighbouring pattern would be inventing an identifier.

Still unknown. The code itself, which only the supplier records hold. Authorisation: pending. Applied: no.

Q-12acceptedCD-006 v1.0.0 · variants[].sku

Fuller · Conference Room Table

Observed. 4 of 4 variants carry no code: 26′3″ length (Seats up to 20) / Macassar Walnut; 15′9″ length (Seats up to 14) / Macassar Walnut; 19′8″ length (Seats up to 18) / Macassar Walnut.

First proposal. Issue the four missing stock codes and send the price ladder for review.

Final proposal. Issue the four missing stock codes and send the price ladder for review.

Reason. Two separate rules landed on the same table, which usually means the record was created in a hurry.

Still unknown. The codes themselves. Authorisation: pending. Applied: no.

Q-13revisedCD-017 v1.1.0 · options[].values, variants[].price

Levi · Front Reception Desk

Observed. 8′ width is listed at 2,920.00 and the larger 10′ width at 2,520.00.

First proposal. Raise the 10 foot price so the ladder rises all the way.

Final proposal. Change nothing. Put the 10 foot figure in front of whoever sets prices before it is quoted again.

Reason. The reading is exact and the conclusion is not ours to draw. The three smaller sizes rise in a straight line and only the last step falls, which is worth a look, but a price can be set low on purpose.

Still unknown. Whether the figure is deliberate. Authorisation: pending. Applied: no.

Q-14revisedCD-017 v1.1.0 · options[].values, variants[].price

Audley · Modern L-Shaped Executive Desk

Observed. 9′2″ width is listed at 3,330.00 and the larger 10′6″ width at 3,290.00.

First proposal. Raise the largest size, as proposed on the Levi desk.

Final proposal. Record it and group it with the other four for one pricing conversation.

Reason. The gap here is a fraction of the Levi one and reads like a rounding decision somebody made on purpose.

Still unknown. Same as Q-13. Authorisation: pending. Applied: no.

Q-15acceptedCD-018 v1.0.0 · body_html

Vertix · Conference Room Table, Tapered Hexagon

Observed. 94 percent of its description, outside the shared blocks, also appears on "Lynix · Conference Room Table".

First proposal. Rewrite the description so it stops repeating the Lynix copy.

Final proposal. Rewrite the first paragraph, which calls this table rectangular while the title calls it a tapered hexagon, and check the Shape tag, which also reads rectangular.

Reason. The duplicate copy is the smaller half of it. The pasted text disagrees with the product's own name.

Still unknown. Which of the two, the title or the shape tag, is right. Authorisation: pending. Applied: no.

Q-16acceptedCD-018 v1.0.0 · body_html

Skövde · Office Waiting Area Lounge Seating

Observed. 93 percent of its description, outside the shared blocks, also appears on "Resarö · Office Waiting Area Lounge Seating".

First proposal. Rewrite one of the two descriptions around what separates the two ranges.

Final proposal. Rewrite one of the two descriptions around what separates the two ranges.

Reason. Both are real products with their own codes, so the copy is the only thing that needs to change. An editorial call, recorded as such.

Still unknown. What does separate them, which is not in the public data. Authorisation: pending. Applied: no.

Q-17rejectedCD-019 v1.0.0 · handle

Design your Workstation

Observed. Present in the feed, absent from the product sitemap.

First proposal. Add it to the product sitemap so it can be found.

Final proposal. Leave it out of the sitemap.

Reason. It is a configurator, not a piece of furniture, and being unlisted is the right state for it. It is also the whole of the difference between 384 products in the feed and 383 URLs in the sitemap.

Still unknown. None. Authorisation: pending. Applied: no.

Q-18revisedCD-020 v1.0.0 · body_html, options[].values

Vaxholm · Office Waiting Area Lounge Seating Set

Observed. No measurement in the description or in the options (Seating Type, Color).

First proposal. Add the seat and overall dimensions to the description.

Final proposal. Raise it as a request against the supplier specification sheet, covering the lounge seating range together.

Reason. Right thing to want, wrong owner. The numbers are in no public source, and 43 of the 59 products in this class are lounge seating.

Still unknown. The dimensions, and whether metafields already hold them. Authorisation: pending. Applied: no.

Q-19revisedCD-021 v1.0.0 · variants[].grams

Whole catalog

Observed. Every one of the 2,847 variants publishes a weight of zero.

First proposal. Estimate a weight for each variant from its size and material and write the estimates back.

Final proposal. Estimate nothing. Take the weights from the supplier packing lists, as one job.

Reason. An estimated freight weight is a number that is wrong by an unknown amount, which is worse than a field that is plainly empty.

Still unknown. Whether weights are held in another system already. Authorisation: pending. Applied: no.

Q-20rejectedCD-022 v1.0.0 · tags[]

Modena · L-shaped Executive Standing Desk, Adjustable Height

Observed. Tagged "Color_brown" where the catalog writes "Color_Brown" 111 times; "Color_gray" where the catalog writes "Color_Gray" 118 times.

First proposal. Recase Color_brown and Color_gray so this desk stops dropping out of the brown and grey filters.

Final proposal. Nothing to fix. Recase it if the tag list is being tidied anyway.

Reason. The premise was wrong. Shopify matches tags without regard to case, so the desk was never dropping out of anything. The rule was demoted from a finding to information rather than deleted.

Still unknown. Whether the headless storefront does its own case sensitive matching, which would change the answer. Authorisation: pending. Applied: no.

The evidence itself

The three files these pages are rendered from. Snapshot hash 02926c791682167b385fa3aa, captured 12 September 2026.

What cannot be answered from here

  • Draft and archived products. The public feed returns active products only.
  • Alternative text on images and search metadata. This feed carries neither, so both controls report NOT_OBSERVABLE rather than passing.
  • Stock levels, cost, margin and supplier lead times. None of it is public.
  • Whether a finding should be acted on. That decision belongs to the catalog owner and is recorded as pending on every case.

Generated 2026-09-12T13:43:45Z. Built by Frederic de Lavenne de Choulot, The AI Pipe.