# Bedsheets: research notes

Date: 2026-10-19. Scope: flat sheets, fitted sheets and sheet sets with pillowcases, in every fibre (cotton, linen, lyocell, bamboo viscose, polyester microfiber, silk). Duvet covers only where a facet carries over: fibre, weave, thread count, cotton grade, certifications and wear over time carry over; pocket depth, the post-wash fit metrics and set contents do not. In the Zamana taxonomy these sit under furnishings / home-textiles, add-ons `bed_sheet`, `pillowcase` and `home_textiles_set`.

Quote labels: **verbatim** = the sentence in quotation marks was in text I read myself (curl plus HTML stripping, pdftotext, or OCR of a scanned PDF), or the fetch tool returned it in quotation marks; **fetched excerpt** = the fetch tool summarised or lightly reworded the page; **search excerpt** = the claim came from a search-engine summary because the page itself would not load. A search-excerpt-only number does not go in category.json.

## Seed

Seed run (recorded verbatim from the brief):

- Example: kitchen-knives `steel_hardness` — a numeric spec that only makes sense as one side of a trade-off, and a visual grammar borrowed from the hobbyist community that puts the trade-off on one axis (hard vs tough, with chip risk shaded).
- Persona: "A sommelier, who thinks in origin, process and how a thing changes over time."
- Ask: what is the bedsheets equivalent of that example, and what would that persona notice first that a typical buyer would not? Keep what survives the data check; drop the rest and say so.

1. **The bedsheets equivalent of steel hardness is fabric density: thread count for woven cotton, grams per square metre (GSM) for linen, flannel, jersey and microfiber.** Like HRC it only makes sense as one side of a trade: more threads or more grams buy smoothness, opacity and strength, and cost airflow and coolness. Wirecutter says it outright: sateen "leaves room to pack more strands into the fabric ... it's heavier and warmer — more threads means more insulation" (verbatim); Sleep Foundation: "Trying to pack too many threads into a fabric can sometimes stifle airflow, resulting in a heavier, warmer feel" (verbatim); Brooklinen's Luxe page sells "Increase thread count for a stronger, less sheer, but still breathable sheet" (verbatim); Mattress Clarity: flannel "around 5 oz per square yard will be more breathable ... above 6 ounces per square yard will feel extra warm and heavy" (verbatim). The one-axis grammar survives as a proposal, the **cool-to-warm feel scale**, with weave and fibre setting the band and density nudging position inside it. There is no hobbyist standard for it; retailer fabric guides order fabrics linen, percale, sateen, flannel on warmth (search excerpts, several retailer blogs) and Wirecutter's prose orders percale cooler than sateen. **Kept** as the visual grammar and the density-versus-breathability trade-off. **Dropped:** a single numeric "warmth score". Nobody measures it; a scale with sourced bands is as far as the data goes.
2. **The sommelier notices origin, process and age before price.**
   - *Origin* survives strongly. The cotton's variety and where it grew is the strongest quality cue after weave (Wirecutter: "The quality of the cotton is more important than its thread count or where it's from" — note that it says *where it's from* matters less than *staple length*, so the sommelier's terroir instinct is half right: variety and staple yes, country no). It also survives as a fraud story: "Egyptian cotton" is the most faked claim in the category (Target/Welspun 2016; Cotton Egypt Association DNA tests). Kept as `cotton_grade` and inside `certifications`.
   - *Process* survives for linen (stone- or garment-washed versus raw: `linen_finish`), for finishes (wrinkle-resistant resins can contain formaldehyde: `easy_care`), and for the fibre route (bamboo becomes viscose or lyocell, and the route matters: `fibre`). Dropped: combed versus carded cotton, mercerisation and yarn dyeing as separate facets. They exist on some spec pages but no source ties them to a buyer-visible difference strong enough for a facet; combed cotton is kept as vocabulary.
   - *How it changes over time* is the persona's real gift and survives as `wear_over_time` plus the post-wash fit metrics. Two different changes: hand (percale and linen are said to soften, sateen's sheen fades and it snags, cheap bamboo viscose pills) and size (cotton loses about 4 to 6 percent, bamboo viscose up to 15 percent in one test, polyester almost nothing). The size change is what makes a fitted sheet stop fitting, which no listing tells you. But the softening story is contested: Consumer Reports' 2024 panel found no change in softness after a year of washing. Kept with the disagreement recorded as a judgement.

## Sources and what each supports

### Regulators and standards bodies

**FTC staff opinion letter to the National Textile Association, 2 August 2005 (scanned PDF, OCR'd locally with tesseract)**
https://www.ftc.gov/sites/default/files/documents/advisory_opinions/national-textile-association/natltextileassn.pdf
- verbatim: thread count "is not required pursuant to the Textile Fiber Products Identification Act ... It is, however, governed by Section 5 of the FTC Act, which prohibits deceptive acts or practices."
- verbatim (quoting ASTM D3775-03a §9.1.4): "Count individual warp yarns (ends) and filling yarns (picks) as single units regardless of whether they are comprised of single or plied components."
- verbatim: "we believe that consumers could be deceived or misled by the practice of stating an inflated thread count, achieved by multiplying the actual count by the number of plies within the yarn. A possible non-deceptive way to disclose both the thread count and the yarn ply would be to state, for example: '300 thread count, 2 ply yarn.' A representation of '600 thread count' for this same product would likely mislead consumers".
- verbatim (NTA's request, attached): counting plies "inflates the thread count numbers to levels which double or triple (or more) the thread count as determined by the long standing, traditional way."
- verbatim (1996 closing letter attached): packaging changed from "finely woven 760 threads per sq. inch" to "finely woven 380 2-ply fabric".
- Supports: thread count is voluntary, ply-inflation is deceptive, the 300/600 example, the derived single-ply metric. Confidence high.

**Home Textiles Today, Thread count game slammed by FTC, 12 Sept 2005**
https://www.hometextilestoday.com/industry-news/thread-count-game-slammed-by-ftc/
- fetched excerpt (quoted): the FTC's James Kohm: "Consumers could be deceived or misled by the practice of stating an inflated thread count"; disclose as "300 thread count, two-ply yarn"; "A representation of 600 thread count for this same product would likely mislead consumers".
- Supports: second source for the FTC position and the 300/600 example. Confidence high.

**Shaw v. American Textile Co., complaint, S.D.N.Y. 1:23-cv-10193, filed 20 Nov 2023 (PDF, pdftotext)**
https://truthinadvertising.org/wp-content/uploads/2023/10/Shaw-v-American-Textile-Co-complaint.pdf
- verbatim: "misrepresents on the front labeling that the product has a thread count of 1250. The true thread count is closer to 286, or even lower."
- verbatim (quoting ATMI to the FTC, 31 Jan 2002): "a fabric containing 250 individual four ply yarns in a square inch would be described as a '250 thread count fabric' ... It would be false and misleading to describe this as a 1000 thread count product."
- Supports: ply inflation still on shelves in 2023 (a complaint is an allegation, so cited as alleged). Second source for the ASTM single-unit rule. Confidence high for what the complaint says; the 286 figure is the plaintiff's.

**FTC, Threading Your Way Through the Labeling Requirements Under the Textile and Wool Acts**
https://www.ftc.gov/business-guidance/resources/threading-your-way-through-labeling-requirements-under-textile-wool-acts
- fetched excerpt (quotes returned in quotation marks): labels must disclose "the generic fiber names and percentages by weight of each constituent fiber"; sheets, pillowcases and other household textiles are covered; in internet and catalog ads "the fiber content information that's required on the label must appear in the ad, minus the percentages" and the ad must say "made in U.S.A.," "imported" or both.
- Supports: fibre is on every US listing by law (so `fibre` is a listing field), and country of origin too. Confidence high.

**FTC, How to Avoid Bamboozling Your Customers**
https://www.ftc.gov/business-guidance/resources/how-avoid-bamboozling-your-customers
- fetched excerpt: a manufactured fibre from bamboo "should be labeled and advertised using the proper generic name for the fiber, such as rayon, or 'rayon made from bamboo'"; "there's no trace of the original plant in the finished rayon product"; claims that rayon keeps bamboo's antimicrobial properties need substantiation.
- Supports: "bamboo" sheets are rayon (viscose) or lyocell, legally and physically. Confidence high.

**FTC press release, 8 April 2022, Kohl's and Walmart bamboo penalties**
https://www.ftc.gov/news-events/news/press-releases/2022/04/ftc-uses-penalty-offense-authority-seek-largest-ever-civil-penalty-bogus-bamboo-marketing-kohls
- fetched excerpt (quoted): "Kohl's and Walmart must pay civil penalties of $2.5 million and $3 million, respectively"; "the rayon manufacturing process uses toxic chemicals and results in the emission of hazardous pollutants."
**Bergeson & Campbell, FTC settlements with Kohl's and Walmart**
https://www.lawbc.com/ftc-announces-settlements-with-kohls-and-walmart-for-bogus-bamboo-marketing/
- fetched excerpt: the same $2.5 million and $3 million; orders to "Stop claiming that a textile product is made of bamboo or bamboo fiber, unless they can substantiate it".
- Supports: the regulator still enforces the bamboo rule; penalty amounts (two sources). Confidence high.

**ASTM D3775** was not read directly (paywalled). Its §9.1.4 is quoted verbatim inside the FTC letter and the Shaw complaint; the complaint calls it "applicable to all woven fabrics", which is why thread count does not apply to knits (jersey).

**OEKO-TEX, STANDARD 100 page**
https://www.oeko-tex.com/en/our-standards/oeko-tex-standard-100
- fetched excerpt (quoted): "a label for textiles tested for harmful substances"; "tested against a list of over 1,000 harmful substances"; Class 2 is "Items with direct skin contact, such as bed linens"; labels are checked by certificate number or QR code in Label Check.
**OEKO-TEX, STANDARD 100 limit values, Edition 02.2025 (PDF, pdftotext)**
https://www.oeko-tex.com/importedmedia/downloadfiles/OEKO-TEX_STANDARD_100_Limit_Values_and_Individual_Substances_According_to_Appendices_4_5_EN_DE.pdf
- verbatim table row: Formaldehyde, free and partially releasable [mg/kg]: Class I "n.d." (footnote: "16 mg/kg" by Japanese Law 112), Class II "75", Class III "150", Class IV "300".
**Q for Quinn, OEKO-TEX Standard 100 explained**
https://www.qforquinn.com/blogs/news/what-is-oeko-tex-certified
- fetched excerpt: Class II "≤ 75 mg/kg"; "A product can hold OEKO-TEX without being organic." (It gives Class III as ≤ 300 mg/kg, which disagrees with the standard's own 150; we use only the Class II figure, which both agree on.)
- Supports: what the label means for sheets and the formaldehyde cap. Confidence high.

**GOTS, key features**
https://global-standards.org/our-standards/gots/key-features
- fetched excerpt (quoted): "Organic: at least 95% certified organic fibres." "Made with Organic Materials: at least 70% certified organic fibres."; criteria include wastewater treatment and chemical input restrictions; "independent third-party certification" with on-site audits.
**Vottera, GOTS guide (curl, read)**
https://vottera.com/blogs/news/what-is-gots-complete-guide
- verbatim: "It applies to a product made of 95% certified organic fibres." "This applies to a product made with 70% or more certified organic fibres."; the label carries "a valid licence number, available for verification in the GOTS database."
- Supports: the two GOTS grades. Confidence high.

**USDA ERS, Cotton Sector at a Glance (curl, read)**
https://www.ers.usda.gov/topics/crops/cotton-and-wool/cotton-sector-at-a-glance
- verbatim table: Upland (Gossypium hirsutum) fiber length "1" to 1 1/4"", "97%" of US production; Pima (Gossypium barbadense) "1 3/8" or longer", "3%".
**Wikipedia, Staple (textiles) and Gossypium barbadense**
https://en.wikipedia.org/wiki/Staple_(textiles) ; https://en.wikipedia.org/wiki/Gossypium_barbadense
- verbatim (Staple): ICAC "defined extra-long-staple as 1 3/8 inches (35 mm) or longer"; "short fibers also resulting in more hairy yarns"; "Fine (thin) yarn requires long fibers."; "Short staple cotton fibers produce carded yarns that are generally irregular and have protruding hairs".
- fetched excerpt (G. barbadense): "A group of southwestern United States growers established the trademark Supima for products made of American Pima fiber."
- Supports: the ELS threshold (USDA ERS plus ICAC via Wikipedia), Supima is a trademark over American Pima. The upland 1 to 1¼ inch range has only the ERS source and stays out of the JSON. Confidence high.

### Origin and authenticity

**Supima brand guidelines 1.0, 2019 (PDF, pdftotext)**
https://supima.com/wp-content/uploads/2019/07/2019-SUPIMA-IDENTITY-GUIDELINES.pdf
- verbatim: "Supima cotton is 100% extra-long staple cotton grown exclusively in the American west and southwest."; "Only 1% of the world's cotton is Supima"; Oritain "has established an origin fingerprint of genuine SUPIMA® cotton ... Blended or substituted cotton from a different origin is identified."; brand claims "TWICE AS STRONG AS REGULAR COTTON" (brand claim, not used).
**Oritain, Supima origin mapping, 7 May 2019**
https://oritain.com/resources/news/oritain-maps-supima-cotton-origin-tackling-fraud-in-the-global-cotton-supply-chain-and-enabling-the-first-true-authentication-of-premium-cotton-fibre
- fetched excerpt (quoted): Supima "only grown in the USA ... Arizona, California, New Mexico, and Texas"; "over 500 licensees in more than 45 countries"; "Premium cotton can be blended or substituted with cheaper, inferior alternatives without the manufacturer's knowledge."
- Supports: Supima is licensed and forensically verifiable; Pima is not a protected term. The "1% of world cotton" figure has one source and disagrees with other share figures (search excerpts give 1-2%, 3%, and Wikipedia gives about 5% for the whole species), so no share figure goes in the JSON. Confidence high on licensing.

**NBC Chicago, Target refunds for mislabelled Egyptian cotton (2016)**
https://nbcchicago.com/news/local/target-refunding-millions-of-dollars-worth-of-sheets-391057772.html
- fetched excerpt: about 750,000 sheets and pillowcases, made August 2014 to July 2016, Fieldcrest and Crowning Touch labels; Welspun "substituted another type of non-Egyptian cotton".
- Second source for 750,000: search excerpts only (Consumerist 410, Quartz 403, Action News Jax 451). So the count stays in notes; the JSON cites the case without the number.

**Home Textiles Today, Calling out Egyptian cotton fakery**
https://www.hometextilestoday.com/industry-news/calling-out-egyptian-cotton-fakery/
- fetched excerpt: 90% of products labelled Egyptian cotton contained none of it, per the Cotton Egypt Association; quote from its executive director Khaled Schuman, "We were shocked"; he declined to give a US-only figure.
**The Hotel Sheet (NZ retailer blog), The truth about Egyptian cotton** (interest: the shop sells "DNA tested" Egyptian cotton; its "2017 ... New York stores" framing conflicts with Home Textiles Today, 16 March 2016, six markets; both trace to the association, so this is one source; removed from the JSON after the blind check)
https://www.thehotelsheet.co.nz/blogs/news/the-truth-about-egyptian-cotton
- fetched excerpt (quoted): in early 2017 the association "used a new DNA test to test products from New York stores" and "90% of the Egyptian cotton products they tested, didn't contain any Egyptian cotton".
**Egyptian Cotton Association, About**
https://www.egyptiancottonassociation.com/cotton-egypt-association/
- fetched excerpt (quoted): "a revolutionary DNA testing process able to recognize the genomic fingerprint of Egyptian Cotton", with Bureau Veritas; "All accredited manufacturers are free to use the Egyptian Cotton™ logo".
- Supports: the 90% figure (two fetched pages, both relaying the association's own test, sample size unpublished), the Gold Seal as the only checkable claim. Confidence medium: one tester, unpublished method.

### Specialist reviewers who test

**Wirecutter, The Best Cotton Sheets (Jackie Reeve), via Internet Archive snapshot 2025-12-28 (curl, read)**
https://web.archive.org/web/20251228105728/https://www.nytimes.com/wirecutter/reviews/best-cotton-sheets/
- verbatim: "The quality of the cotton is more important than its thread count or where it's from. Whenever possible I look for long-staple and extra-long staple (ELS) cotton fibers, which make the comfiest, strongest sheets."
- verbatim: "We focus on percale sets with thread counts between 200 and 300 and sateen sets between 300 and 600 (our expert-recommended rule of thumb)."
- verbatim: percale "generally have lower thread counts and weigh less than sateen. They're lightweight and breathable, and they feel crisp and cool"; sateen "leaves room to pack more strands into the fabric. So sateen generally has a higher thread count than percale, and it's heavier and warmer — more threads means more insulation."
- verbatim: "If your sheets have any kind of 'wrinkle-free' label, they might also be treated with chemicals such as formaldehyde, which might stay on sheets in trace amounts for longer and cause skin rashes for some people."
- verbatim: tested 86 sets since 2017; five washes, measuring for shrinkage, a 10-inch king mattress.
- verbatim: a budget percale "is usually short-staple cotton, which can feel scratchier than the long-staple kind. And percale is a stiffer, wrinklier weave."
- verbatim: Brooklinen percale "wrinkle more than most of our other percale picks".
**Wirecutter, The Best Sheets (hub), same snapshot date (curl, read)**
https://web.archive.org/web/20251228105716/https://www.nytimes.com/wirecutter/reviews/best-sheets/
- verbatim: L.L.Bean percale sheets "get softer as they age"; sateen "a little warmer and less breathable; they're also nearly wrinkle-free"; "Bamboo viscose ... is produced with a solvent that can cause air and water pollution"; lyocell "seems promising because it's less environmentally impactful"; "all of our experts recommended sheets made from cotton or linen".
- Supports: the thread-count bands, percale cooler and sateen warmer, quality of cotton over thread count, wrinkle-free finishes and formaldehyde. Confidence high. (nytimes.com itself refused the fetch tool; the archive copy was read.)

**Consumer Reports, 5 Things to Know Before Buying Bedsheets, updated 8 March 2024 (curl, read)**
https://www.consumerreports.org/home-garden/sheets/things-to-know-before-buying-sheets-a9843459169/
- verbatim: "found an extremely wide range of performance unrelated to price or thread count"; "could not find any correlation between manufacturer claims of materials or thread count and sheet performance."
- verbatim: "Cotton sheets we tested shrank up to 6 percent, and some no longer fit on even the thinnest mattress—an 8-inch-tall foam model—after just 15 washes."; "all cotton sheets could fit the depth of the queen-size mattress as marked on their packaging ... But after 25 wash cycles, only a few could fit a 14-inch mattress".
- verbatim: "The polyester sheet we tested hardly shrank at all ... though some might find sweating on a polyester sheet to be uncomfortable because the material doesn't absorb water."
- verbatim: "The sheets tested made of bamboo viscose were highly absorbent (so expect long drying times) and shrank by more than 15 percent after our fit test."
- verbatim: a 350-count set near the top, a 550-count Supima set near the bottom that "didn't fit even a 10-inch mattress after a year's worth of washings" despite an 18-inch claim.
- verbatim: "our panelists didn't notice a significant difference in softness before and after a year's worth of wash cycles."
- verbatim: 25 washes "equivalent to about a year's worth of washing if you launder your linens every two weeks".
- Supports: shrinkage by fibre, stated pocket depth is a new-sheet figure, thread count does not predict performance, the softness-over-time disagreement. Confidence high.

**Consumer Reports, Higher thread count doesn't guarantee better sheets, Sept 2013**
https://www.consumerreports.org/cro/news/2013/09/higher-thread-count-doesn-t-guarantee-better-sheets/index.htm (fetched) and the Yahoo syndication https://www.yahoo.com/news/higher-thread-count-doesn-t-guarantee-better-sheets-160000666.html (fetched)
- fetched excerpt, both pages, quoting CR textile expert Pat Slaven: "The sweet spot is 400."; "Now you see 1,000 thread count sheets but you just can't get that many threads on a loom."; top percale sheet "280" count, fit mattresses up to 17 inches after five wash-dry cycles.
- fetched excerpt: "manufacturers use temporary silicone softeners that wash out" (on the CR page and its Yahoo syndication; the blind checker confirmed it on the CR page). Kept in notes only.
- Supports: the 400 sweet spot, 1,000-plus as ply-inflated. Confidence high (two fetches of the same article; the 400 figure has independent company in Wirecutter's 300-600 for sateen and Sleep Foundation's bands).

**CHOICE (Australia), Cotton vs bamboo sheets (curl, read)**
https://www.choice.com.au/home-and-living/bedroom/mattresses/articles/cotton-vs-bamboo-sheets
- verbatim: "Bamboo textiles are rarely natural bamboo. They're usually a semi-synthetic such as bamboo viscose, lyocell or rayon"; chemicals "can include sodium hydroxide, carbon disulphide and sulphuric acid"; "Bamboo viscose gets mushy and loses its tensile strength"; "especially if [bamboo viscose products are] very inexpensive, they often develop pills".
- verbatim, relaying CR: "Cotton sheets shrank by up to 6%"; "Bamboo viscose sheets shrank by up to 15%"; "Islam says the industry standard of acceptable shrinkage during manufacture is three percent."
- verbatim: OEKO-TEX "is about detecting these substances on the finished product. It doesn't mean that the products have been manufactured without the use of any chemicals".
- Supports: viscose pilling and wet weakness, OEKO-TEX scope, and a second page for the CR shrink figures (same underlying test). Confidence high for the expert quotes.

**Sleep Foundation, Best thread count for sheets (curl, read)**
https://www.sleepfoundation.org/bedding-information/best-thread-count-for-sheets
- verbatim ranges: "Percale Weave: 200-400"; "Sateen Weave: 300-600"; "Linen: 80-140. Thread count is less of a useful indicator for linen sheets and rarely listed."; "Microfiber: Measured in grams per square meter (GSM). Look for microfiber sheets in the 90-120 GSM range."; "Flannel: Measured in GSM. Durable, heavyweight flannel sheets are in the 170+ GSM range."; "Many jersey cotton sheets are around 150 GSM."; "Excessively high thread counts (600-800) likely won't change much beyond the price tag."; "Trying to pack too many threads into a fabric can sometimes stifle airflow, resulting in a heavier, warmer feel."; ply "could result in a sheet set with a thread count of 900 that's actually of a lower quality than a similar set with a thread count of just 300."
**Sleep Foundation, Microfiber vs cotton sheets (curl, read)**
https://www.sleepfoundation.org/best-sheets/microfiber-vs-cotton-sheets
- verbatim: "upland cotton is also the most common type of cotton used in cotton sheets"; "Microfiber traps heat more easily than cotton."; "Pilling can happen with either fabric and depends on the finishing process."
**Sleep Foundation, Best linen sheets**
https://www.sleepfoundation.org/best-sheets/best-linen-sheets
- fetched excerpt (quoted): ideal linen weight "between 170 and 190" GSM; "High-quality linen will become softer over time with repeated wash cycles"; linen is "prone to wrinkling, especially if you choose to line dry them"; "Some linen bedding feels initially softer due to certain manufacturing techniques, such as garment-washing or stone-washing."
**Sleep Foundation, Best deep pocket sheets (curl, read)**
https://www.sleepfoundation.org/best-sheets/best-deep-pocket-sheets
- verbatim: "Regular sheets typically fit mattresses that are 7 to 14 inches thick, deep pocket sheets usually work with models that are up to 15 inches thick, and extra deep pocket sheets can generally accommodate mattresses between 16 and 24 inches thick."; products listed at 16, 17, 20 and 22 inches; "Many sheet sets offer a pocket depth of 14 inches or less."
- search excerpt only: "add 2 to 3 inches" to mattress height. Not used as a number.
- Supports: thread-count bands (second source to Wirecutter), GSM as the unit for non-thread-count fabrics, linen weight band, pocket-depth bands. Confidence high for the verbatim lines.

**NapLab, Percale vs sateen (curl, read)**
https://naplab.com/guides/percale-vs-sateen/
- verbatim: sateen "yarns are woven in a pattern where three or four threads go over one thread"; sateen sheets "tend to feel heavier. Plus, they're less breathable and more likely to pill and retain heat"; "sateen is slightly more prone to wear and tear. Its sheen can fade over time, and the fabric can develop pilling and snagging"; percale "susceptibility to wrinkling"; percale "less prone to pilling".
- Supports: sateen warmer and less durable; percale wrinkles. Confidence medium-high (reviewer guide, not a lab test).

**Mattress Clarity, Best flannel sheets (curl, read)**
https://www.mattressclarity.com/bedding/sheets/best-flannel-sheets/
- verbatim: "Flannel sheets don't usually list a thread count. Instead, flannel is measured by weight in grams per square meter (GSM)."; "Lighter cotton flannel sheets will usually weigh around 5 ounces per square yard (or around 165 GSM), while especially dense or high-quality flannel sheets will often exceed 6 ounces per square yard (or 200 GSM)."; Brooklinen flannel "At 140 GSM ... a lightweight flannel option".
- Supports: flannel is sold by weight, the 165-200 GSM band (with Sleep Foundation's "170+"). Confidence high.

**Tom's Guide, How we test bed sheets (curl, read)**
https://www.tomsguide.com/mattresses/pillows-bedding/bed-sheet-testing-methodology
- verbatim: "We wash the bed sheets twice ... This helps us determine any shrinkage or size changes, color fading or pilling."; for thread count "we check if the quality matches the claims made by the brand."
- Supports: reviewers test fit and shrinkage after washing. Confidence high; light method (two washes).

**NBC Select, best sheets (curl, read)**
https://www.nbcnews.com/select/shopping/best-sheets-rcna262463
- verbatim: product cards list "Thread count:" and pieces included; quotes a dermatologist: "Percale carries the cool, crisp feel that is great for hot sleepers"; Mellanni extra-deep "fit mattresses up to 16 inches tall, according to the brand".
- Supports: which fields reviewers present per product. Confidence medium.

### Academic and extension primers

**University of Kentucky Cooperative Extension, Selecting Sheets for Restful Sleep, Feb 2023 (PDF, pdftotext)**
https://fcs.mgcafe.uky.edu/sites/fcs.mgcafe.uky.edu/files/SelectingSheets-HealthBulletin.pdf
- verbatim: "The 'feel' of sheets and how they perform relates to the combination of fiber content, fabric construction, and thread count."; "sheets with a high polyester content may trap more body heat"; "Bamboo fibers are processed into rayon"; percale "one-over, one-under (plain) pattern normally resulting in sheets with a tight weave and a crisp feel"; sateen "three-over, one-under pattern. Sateen sheets feel smooth and silky and are less likely to wrinkle. However, their looser weave structure makes them more prone to snags."; flannel is made "by brushing the surface of plain weave fabric"; jersey from "looped, jersey knit yarns"; "A mid-range thread count of about 350 is good place to start; keeping in mind that a lower thread count may be more breathable."
- Supports: the mechanism (fibre × construction × count), sateen snags and resists wrinkles, polyester traps heat. Confidence high.

**Wikipedia, Sateen and Percale**
https://en.wikipedia.org/wiki/Sateen ; https://en.wikipedia.org/wiki/Percale
- fetched excerpt (quoted): satin weave floats "four over and one under (for a five-harness satin weave)"; sateen uses "spun yarn instead of filament yarn"; the weave "is prone to fraying and is less durable than plain weave fabrics"; percale "closely woven plain-weave fabric" with "thread count of about 180 or higher".
- Disagreement kept: Kentucky Extension and Brooklinen's Essential set say three-over-one; Wikipedia and Brooklinen Luxe say four-over-one; NapLab says three or four. Both exist; it does not change anything a buyer decides, so it stays here.

**Textile School, Influence of fiber length on yarn strength (curl, read)**
https://www.textileschool.com/9959/influence-of-fiber-length-on-yarn-strength/
- verbatim: "a yarn produced from long-staple cotton will typically exhibit higher strength and lower pilling compared to yarn made from short-staple cotton."; "Combing further aligns the fibers and removes short fibers and neps".
- Supports (with Wikipedia Staple): long staple means fewer fibre ends, less pilling, finer yarn. Confidence medium-high (trade primer).

**Wikipedia, Lyocell (curl, read)**
https://en.wikipedia.org/wiki/Lyocell
- verbatim: "The Lyocell process uses a direct solvent rather than indirect dissolution such as the xanthation-regeneration route in the viscose process"; "Typically, 99 per cent of the amine oxide is recovered."; "Industry claims of higher resistance to wrinkling are as yet unsupported."; "Lyocell is 50% more absorbent than cotton" (single source, not used).
- Supports: lyocell versus viscose route. Confidence medium-high.

**GAO-10-875, Formaldehyde in textiles, 13 Aug 2010**
https://www.gao.gov/products/gao-10-875
- fetched excerpt (quoted): "Formaldehyde can be used to enhance wrinkle resistance in some clothing and textiles, especially those made of cotton."; levels "generally appear to be low" but allergic contact dermatitis is "a health issue for some people".
- Supports (with Wirecutter): wrinkle-free finishes and formaldehyde. Confidence high.

### Shrinkage and fit

**Aulit Fine Linens, quoting Sferra, Why does cotton shrink? (curl, read)**
https://www.aulitfinelinens.com/blogs/betweenthesheets/6699374-q-a-why-does-cotton-shrink
- verbatim: Sferra king fitted sheet "shrinkage rates were 3.7%, 4.2%, 5.4% for the width, length and depth, respectively"; "we purposely overcut our bottom fitted sheets"; "Mattress Depth + 4" = Fitted Sheet Depth".
**SGI Bedding, Deep pocket sheets guide (curl, read)**
https://sgibedding.com/blogs/news/deep-pocket-sheets-guide
- verbatim: deep pocket sheets "built for mattresses roughly 13 to 17 inches tall, and extra deep pocket sheets stretch to 18 inches or more. Measure your mattress height including any topper, then add a couple of inches."; "add about 2 inches".
- Interest: SGI sells sheets, including a "1000 thread count Egyptian cotton" set, beside the fit advice used here; Sferra is also a seller. Both are used only for their own fit numbers, attributed.
- Supports: cotton shrink 4 to 6 percent (Sferra plus CR), the 2-inch allowance (SGI) versus Sferra's 4 inches (which already includes shrink), and that "deep pocket" has no fixed meaning (Sleep Foundation: up to 15 inches; SGI: 13 to 17). Confidence medium (brands), high on the disagreement itself.

### Brand spec pages (fields brands publish, and in what order)

**Brooklinen Shopify product JSON (curl, read)**
https://www.brooklinen.com/products/classic-core-sheet-set.json ; .../luxe-core-sheet-set.json ; .../flannel-core-sheet-set.json ; https://www.brooklinen.com/products.json
- verbatim Classic Percale: "270 thread count long-staple cotton with a one-yarn-over and one-yarn-under weave"; "gets better with every wash, without pilling"; "ideal for hot sleepers"; "OEKO-TEX certified"; "Core Sheet Set includes: flat sheet, fitted sheet, and 2 pillowcases".
- verbatim Luxe Sateen: "a unique 4-over-1 weave pattern"; "100% Long-Staple Cotton, 495 thread count"; "Made In: Portugal"; "Increase thread count for a stronger, less sheer, but still breathable sheet".
- verbatim Brushed Flannel: "At 140 GSM, these sheets are lighter than you'd expect".
- verbatim Washed European Linen: "100% Certified European Flax ... garment-washed"; "Certifications : OEKO-TEX® certified European Flax™ certified"; no GSM stated.
- verbatim Essential: "one-yarn-under and three-yarn over weave"; "Made In: India".
- Catalog lists "No Flat Sheet Set" versions of Classic and Luxe.
- Order of fields on the page: feel, weave, thread count and cotton, certification, closures, contents. Sizes Twin to Cali King on every set.

**Parachute, Percale and Linen sheet sets**
https://www.parachutehome.com/products/percale-sheet-set ; https://www.parachutehome.com/products/linen-sheet-set
- fetched excerpt: Percale "100% long-staple Egyptian cotton", thread count "Not specified", pocket depth "16"", "OEKO-TEX® STANDARD 100 16.HUS.93300 Hohenstein HTTI", "Made in Portugal", "crisp finish that only gets better with time". Linen: "100% European flax", "175 GSM", pocket 16", "Initial linting is normal and reduces after approximately five washes."
- Supports: premium brands drop thread count and lead with fibre origin; linen weight and pocket depth sit on the brand page. Confidence medium-high (fetched excerpts).

**Scandalinen, Linen sheet GSM guide (curl, read)**
https://scandalinen.com/blogs/news/how-to-choose-the-right-linen-bedding-weight-a-practical-gsm-guide
- verbatim: "SCANDALINEN French linen fabric is 165–175 GSM."; "140 GSM fabric is lighter per square metre than 170 GSM, while 200 GSM is heavier. That does not automatically make one better."
- Supports: linen weight band (with Parachute 175 and Sleep Foundation 170-190). Confidence medium.

### Retail listings (what data is already present)

- **Amazon, Mellanni Iconic (B00NLLUMOE)**, title returned verbatim by the fetch tool: "Mellanni Iconic 4-Piece Bed Sheet Set, 16" Deep Pocket (Queen, White) ... 16" Standard Fit." The product-details table did not render; curl hit a robot check.
- **Amazon search titles** (search excerpts, biased by my query terms): "Feather & Stitch Softest 100% Cotton Sheets, 300 Thread Count Percale Weave Bedding, 16" Deep Pocket"; "100% Cotton Percale Sheets Sets with 15" Deep Pockets"; "SUPERIOR Percale 300 Thread Count 100% Cotton, Deep Pocket"; "California Design Den Luxury 600 Thread Count ... Sateen".
- **Tech Gear Lab microfiber review (curl, read)**: lists "GSM Weight: 1800" for "1800"-branded microfiber sets, which shows the series number leaking into a weight field.
- What this tells the scraper: marketplace titles usually carry fibre, weave, thread count and pocket depth (often as "16" Deep Pocket"); fibre is legally required in the ad. Cotton variety appears only when claimed. GSM, ply, certifications and linen finish sit on brand pages. Walmart, Target and L.L.Bean product pages blocked the fetch tool. Because the Amazon details table could not be read, `thread_count`, `weave` and `pocket_depth` are marked listing on the strength of titles plus brand pages, medium confidence, and the hints say "title" first.

### Could not reach
- Reddit (r/BuyItForLife, r/bedding) and MetaFilter returned bot walls. The enthusiast-community slot is empty for this run; reviewers who test (Wirecutter, CR, CHOICE) and the extension bulletin fill the gap.
- Good Housekeeping Institute pages (blocked for the fetch tool and the search domain filter). Its "300 to 500 performed well" line appears only as a search excerpt and is not cited.
- Supima.com and cottonworks.com (Cotton Incorporated) returned blocks; the Supima PDF and USDA ERS replaced them.
- ASTM D3775 itself (paywalled); quoted via the FTC letter.

## Data points used for derived metrics

Thread counts named by testers or brands:

| Product | Weave | Stated TC | Source |
|---|---|---|---|
| L.L.Bean Pima percale (Wirecutter top pick; CR least shrink) | percale | 280 | Wirecutter, CR |
| Brooklinen Classic | percale | 270 | brand JSON |
| Target Threshold organic | percale | 250 | Wirecutter |
| Feather & Stitch | percale | 300 | Amazon title (search excerpt) |
| Brooklinen Luxe | sateen | 495 | brand JSON |
| Cuddledown, Threshold Performance, JCPenney Wrinkle Guard | sateen | 400 | Wirecutter |
| Matouk Sierra (CR top-rated) | n/a | 350 | CR |
| Macy's Charter Club Supima (CR near bottom) | n/a | 550 | CR |
| Sealy (alleged true count 286) | n/a | 1250 | Shaw complaint |
| Parachute percale | percale | not stated | brand page |

Every tester-endorsed percale sits at 250 to 300 and every endorsed sateen at 400 to 495; the bands below are the sources' own (Wirecutter 200-300 / 300-600; Sleep Foundation 200-400 / 300-600; CR "sweet spot" 400; Kentucky "about 350").

Shrinkage:

| Fibre | Figure | Source |
|---|---|---|
| Cotton | up to 6% over 25 washes | CR 2024 (relayed by CHOICE) |
| Cotton (Sferra king fitted) | 3.7% width, 4.2% length, 5.4% depth after 4 washes | Sferra via Aulit |
| Bamboo viscose | more than 15% (CR); "up to 15%" (CHOICE relaying CR) | one test, two pages |
| Polyester | "hardly shrank at all" | CR 2024 |
| Industry pre-shrink tolerance | 3% at manufacture | CHOICE quoting Islam (one source, notes only) |

Best-case pocket depth after washing: stated × (1 − s), with s = 0.06 for cotton (CR's worst fabric shrink; Sferra's 5.4% depth sits just under it), 0.15 for bamboo viscose (one CR test), 0 for polyester (CR "hardly shrank"). Linen and lyocell have no sourced figure, so the metric returns unknown. After the blind check this is an upper bound only: CR saw cotton sets fail an 8-inch mattress after 15 washes and a set sold for 18 inches fail a 10-inch mattress after a year, where the formula predicts about 16.9 inches. CR does not say its 6 percent is a depth figure, and fit loss evidently also comes from seams, elastic and cut ("which our testers attribute more to the design of the sheets than to shrinkage", CR on the L.L.Bean set). So a sheet that fails the best-case test will fail; one that passes may still fail.

Pocket depth stated by brands and reviewers: 16 (Parachute percale and linen; Brooklinen per Sleep Foundation; Mellanni), 17, 20, 22 (Sleep Foundation picks), 15 and 18 (SGI), "14 inches or less" for many sets (Sleep Foundation).

## Against the existing add-on schema

Add-ons read: `home-textiles/add-ons/bed_sheet.jsonc` (pocket_depth_value, bed_skirt_drop_length, sizing.bed_size), `pillowcase.jsonc` (sizing.fits_pillow_size), `home_textiles_set.jsonc` (sizing.bed_size), composed with `home-textiles-standard.jsonc` (materials enum, fabric.fabric_type, fabric.thread_count_stated, fabric.fabric_weight_value {value, unit}) and `furnishings-standard.jsonc` (high_signal_markdown, sizing.size_stated, dimensions, piece_count, pieces_included_text). Kinds follow AGENTS.md rule 4: vertical anchor, category quality currency, hard filter, sizing; everything else is high_signal_markdown.

| Facet in this doc | In schema today | Proposed kind under AGENTS.md | Note |
|---|---|---|---|
| fibre | yes, `materials` (standard) | vertical anchor | Already the anchor. The enum keeps `bamboo_derived` separate from `viscose_rayon` and `lyocell`; under the FTC rule a bamboo sheet *is* viscose or lyocell. Proposal: capture the generic fibre (viscose_rayon or lyocell) and keep "from bamboo" as a source flag, so "bamboo lyocell" and "bamboo viscose" stop collapsing into one value with very different shrink and durability. |
| weave | yes, `fabric.fabric_type` | hard filter | Already present. `satin` and `sateen` are separate values, which is right (satin is filament, sateen spun). `knit` covers jersey. Linen sheets should record `other`/null, not percale. |
| thread_count | yes, `fabric.thread_count_stated` | category quality currency, but only for woven cotton, lyocell and viscose | The comment "capture exactly as stated ... never recalculate" is right. Add `fabric.yarn_ply` (number or null) beside it so the single-ply count is derivable; without ply the field rewards inflation. Null for linen, flannel, jersey and microfiber rather than a series number such as 1800. |
| yarn_ply | no | hard filter? No: high_signal_markdown, plus the one number above | Rarely stated. A number field only because the derived metric needs it. |
| fabric_weight | yes, `fabric.fabric_weight_value` (gsm, oz, momme) | category quality currency for linen, flannel, jersey, microfiber | Already there with the right units. Keep. |
| cotton_grade | no (lives in markdown today) | category quality currency | Proposal: enum `cotton_grade` [unspecified, long_staple, pima, supima, egyptian] recording the claim only. Wirecutter ranks cotton quality above thread count; a ranker cannot read that reliably from markdown. Absent claim means unspecified (upland). Verification is separate (next rows). |
| pocket_depth | yes, `pocket_depth_value` (bed_sheet add-on) | hard filter, and it belongs inside `sizing` | Rule 2: pocket depth can differ by size variant (Sferra's king is overcut differently; SGI sells 15 and 18 inch versions), so it should move inside `sizing`. It is the stated, pre-wash figure; the derived post-wash depth is computed, not stored. |
| bed_size | yes, `sizing.bed_size` | sizing | Correct as is. A variant selector, not a split. |
| easy_care | no | high_signal_markdown | "Wrinkle-free", "non-iron", "wrinkle guard" are title words a line-by-line pass keeps. Not a column. |
| wear_over_time | no | derived, not stored | Computed from fibre, weave and cotton grade. |
| linen_finish | no | high_signal_markdown | "Stonewashed", "garment-washed" are title words. |
| certifications | no; AGENTS.md rule 5 cuts certifications | high_signal_markdown | Agree with the cut for a column. OEKO-TEX Standard 100 and GOTS grade belong in the markdown line with their licence numbers. Origin verification (Supima licence, licensed Egyptian Cotton logo) is researched and also belongs in the markdown line, not in `cotton_grade`. |
| set_contents | yes, `sizing.pieces_included_text` and `piece_count` | sizing | Correct as is. A "no flat sheet" set is a real variant (Brooklinen). Pillowcase size follows bed size on most sets (Brooklinen: King sets "come with king sized pillowcases"), so `fits_pillow_size` is derivable for sets. |

Fields this register considers noise for sheets: `bed_skirt_drop_length` on the bed_sheet add-on (it belongs to bed skirts, a different product sharing the add-on; harmless but never a sheet facet); `sizing.weight_capacity` and `dimensions.height` from furnishings-standard (meaningless for a sheet; pocket depth is the only third dimension that matters); `fits_pillow_size` on a set listing (derivable from bed size, per above). `fabric_type: satin` for cotton sheets is a common mislabel to normalise to sateen.

## Branches

Each branch is a claim about how an expert narrows the choice. Every leg names the sentence in category.json (field in brackets) or in these notes it follows from. Where a leg needs two stated facts, the chain is written out. Splits run in order (fibre, weave, mattress height); an answer with no branch simply continues to the next split, which is how `cotton-polyester blend` and `no preference` are routed. Rewritten after the blind check; the first version and what changed are in the corrections log below.

**Split 1, fibre ("Cotton, linen, Tencel or bamboo, or polyester microfiber?")**

- when `cotton`: then_ask cotton_grade; makes_irrelevant linen_finish.
  - cotton_grade: "Wirecutter ranks cotton quality above thread count" (cotton_grade, why experts care).
  - linen_finish irrelevant: "Whether linen sheets were stone- or garment-washed before sale, or sold raw" (linen_finish, definition); no value for cotton.
  - Weave is not listed: it is split 2 and comes next anyway.
- when `linen`: then_ask fabric_weight, linen_finish; makes_irrelevant weave, cotton_grade.
  - fabric_weight: "linen sets cluster at 165 to 190 GSM" (fabric_weight, why experts care).
  - linen_finish: "Raw linen starts crisper and softens over many washes" (linen_finish, why experts care).
  - weave irrelevant: "Linen sheets are sold as linen, not by weave" (weave, why experts care); Parachute's and Brooklinen's linen pages name no weave (notes, sources).
  - cotton_grade irrelevant: "Which cotton the listing claims" (definition).
  - thread_count deliberately not made irrelevant: "On linen, a count well above Sleep Foundation's 80 to 140 is a red flag" (thread_count, backfill note). yarn_ply follows thread_count, so it stays too.
- when `polyester microfiber`: then_ask fabric_weight; makes_irrelevant thread_count, yarn_ply, cotton_grade, linen_finish.
  - fabric_weight and thread_count: "Null for flannel, jersey and microfiber" (thread_count, backfill note), resting on Sleep Foundation "Microfiber: Measured in grams per square meter (GSM)" (sf_thread_count supports).
  - yarn_ply irrelevant: chain: yarn_ply is "How many strands are twisted into each yarn counted in the thread count" (definition), and thread count is null for microfiber, so ply has nothing to qualify.
  - cotton_grade, linen_finish: definitions.
- when `lyocell (Tencel)` or `bamboo viscose` (the question offers them as one answer, "Tencel or bamboo", and the branch is shared): makes_irrelevant cotton_grade, linen_finish. Definitions only.
- No branch for `cotton-polyester blend` or `no preference`: they continue to split 2.

**Split 2, weave ("Crisp and cool, smooth and silky, warm and brushed, or stretchy?")**

- when `percale`: then_ask thread_count, easy_care.
  - thread_count: "Percale is best at 200 to 300 (Wirecutter) or up to 400 (Sleep Foundation)" (thread_count, range typical).
  - easy_care: "Percale and linen wrinkle; sateen and polyester resist it" (easy_care, why experts care).
- when `sateen`: then_ask thread_count, wear_over_time.
  - thread_count: "sateen at 300 to 600" (thread_count, range typical).
  - wear_over_time: "Sateen's sheen fades and its floats snag" (wear_over_time, why experts care).
- when `flannel` or `jersey knit` ("stretchy" in the question reaches jersey): then_ask fabric_weight; makes_irrelevant thread_count, yarn_ply.
  - flannel: "Flannel runs from about 140 GSM (lightweight) to about 200 GSM (dense)" (fabric_weight, why experts care); Mattress Clarity "Flannel sheets don't usually list a thread count" (notes).
  - jersey: chain: thread count "applies only to woven fabric" (thread_count, definition) and jersey is "A knitted fabric ... it has no thread count because it is not woven" (vocabulary).
  - yarn_ply: follows thread_count (definition).
- No branch for `twill or other`.

**Split 3, pocket_depth / mattress height ("How tall is your mattress, topper included?")**

- No branches. The answer is a number that feeds the best-case pocket margin filter; it does not change what is asked next.

Legs removed after the blind check: cotton → then_ask weave; bamboo viscose → then_ask weave, pocket_depth; lyocell → then_ask weave (all three cited only the split-2 rationale, which is circular; weave comes next as split 2 regardless, and pocket depth is now split 3 for everyone); linen → makes_irrelevant thread_count, yarn_ply (Sleep Foundation treats a high linen count as a warning). Legs dropped earlier: cotton → makes_irrelevant fabric_weight (flannel is cotton); percale → makes_irrelevant wear_over_time; sateen → ask yarn_ply; cotton → ask pocket_depth (now moot: pocket depth is a split).

## Trimmed detail

Facts cut from capped fields, each kept here or elsewhere in the JSON:

- **summary**: the US legal status of thread count (voluntary, but policed under Section 5 of the FTC Act; FTC letter 2005). Kept in judgement 2's evidence and thread_count.
- **mechanism.plain**: "ASTM D3775 counts each plied yarn once"; satin floats are three or four over one (Kentucky Extension vs Wikipedia); flannel is plain weave brushed; lyocell's solvent is about 99 percent recovered (Wikipedia). The ASTM line is in thread_count and yarn_ply; the rest lives only here.
- **fibre.why_experts_care**: CHOICE's list of viscose chemicals (sodium hydroxide, carbon disulphide, sulphuric acid); Wirecutter's view that bamboo viscose pollutes and microfiber sheds; the FTC penalty amounts ($2.5 million Kohl's, $3 million Walmart, 2022). Penalties kept in the reference supports.
- **cotton_grade.why_experts_care**: Supima's 500-plus licensees (Oritain); the 750,000 Target/Welspun units (one fetched source); USDA ERS share of US production (Pima 3 percent).
- **thread_count.why_experts_care**: Kentucky Extension's "about 350 is a good place to start"; Sleep Foundation's "600-800 won't change much beyond the price tag"; the CR 2013 silicone-softener line (one source).
- **pocket_depth.why_experts_care**: Sleep Foundation's bands (regular 7-14, deep up to 15, extra-deep 16-24 inches); SGI's 13-17 inch "deep". Kept in judgement 6.
- **certifications.why_experts_care**: OEKO-TEX's Class I formaldehyde limit (not detectable, 16 mg/kg by Japanese Law 112); GOTS licence numbers checkable in the GOTS database; CHOICE's point that OEKO-TEX does not test for carbon disulphide or sulphuric acid.

- **cotton_grade.why_experts_care** and the Upland vocabulary entry: "Upland runs 1 to 1¼ inches" (USDA ERS, verbatim). Removed from the JSON after the source check because no second fetched source gives the upland range (Wikipedia's USDA classing table gives categories, not species). Kept here.
- **certifications.why_experts_care** and the oeko_tex_standard supports line: "more than 1,000 substances" (OEKO-TEX's own page only). Removed for the same reason.
- **usda_ers supports**: "97 percent of US production is upland, 3 percent Pima" (one source). Kept here only.

## Numbers in category.json and how many sources stand behind each

Two independent fetched sources unless marked.

| Number | Where in JSON | Sources | Note |
|---|---|---|---|
| Pima / ELS 1⅜ inches or more | mechanism, cotton_grade, vocabulary | USDA ERS (verbatim), Wikipedia Staple citing ICAC (verbatim) | |
| Percale 200-300 / 200-400; sateen 300-600 | thread_count, judgement 2, families, grammar | Wirecutter (verbatim), Sleep Foundation (verbatim) | the bands disagree for percale; both kept |
| 400 "sweet spot" | judgement 2 note | CR 2013 page and its Yahoo syndication | same article twice; corroborated in direction by Wirecutter and Sleep Foundation |
| Claims from about 900 up are suspect | thread_count, yarn_ply, grammar, judgement 2 | Sleep Foundation (900 vs 300 example, ply "One common tactic"), CR 2013 ("can't get that many threads on a loom" at 1,000), Shaw complaint (1,250 alleged 286) | reworded after the blind check; ply is a common cause, not proven for any one claim |
| '300 thread count, 2 ply yarn' vs 600 | yarn_ply, single_ply metric | FTC letter (verbatim, OCR), Home Textiles Today (fetched excerpt) | |
| 1,250 alleged closer to 286 | yarn_ply | Shaw complaint only | **single source by nature** (an allegation); worded "alleges" |
| Cotton shrink up to 6 percent; 4 to 6 percent | fibre, pocket_depth, metric, judgement 5 | CR 2024 (verbatim), Sferra via Aulit (3.7 to 5.4 percent, verbatim) | CHOICE relays CR |
| Bamboo viscose more than 15 percent | fibre, metric, trade-off | CR 2024 (verbatim), CHOICE relaying CR (verbatim) | **one test, two pages**; worded "Consumer Reports measured" |
| Only a few fit a 14-inch mattress after a year | pocket_depth | CR 2024 only | **single source**; attributed to CR |
| Sferra 5.4 percent depth | metric why, judgement 5 note | Aulit quoting Sferra only | **single source**; attributed to Sferra, and it sits inside CR's 6 percent |
| Allowance 2 inches (SGI) vs 4 inches (Sferra) | pocket_margin, judgement 6 | each one source | **single sources, kept as a stated disagreement**, not as a threshold |
| 350 vs 550 counts (CR ratings) | judgement 1 note | CR 2024 only | attributed |
| Flannel about 140 to 200 GSM | fabric_weight | Brooklinen JSON 140 + Mattress Clarity 140/165/200 + Sleep Foundation "170+" | |
| Linen 165 to 190 GSM | fabric_weight, families | Parachute 175, Scandalinen 165-175, Sleep Foundation 170-190 | band assembled from three |
| Pocket depth 15 to 17, extra-deep 18 to 22 inches | pocket_depth range | Sleep Foundation picks (16, 17, 20, 22), SGI (15, 18), Parachute 16, Mellanni 16 | band assembled from data points |
| OEKO-TEX Class II formaldehyde 75 mg/kg | easy_care | OEKO-TEX limit PDF (verbatim), Q for Quinn (fetched) | |
| GOTS 95 / 70 percent | certifications | GOTS (fetched), Vottera (verbatim) | |
| Egyptian 90 percent contained none | cotton_grade, judgement 3 | Home Textiles Today (16 March 2016, six markets) | **one originator** (the Cotton Egypt Association); The Hotel Sheet relayed it with a conflicting date and was removed; attributed by name |
| $2.5 million / $3 million | ftc_kohls_walmart supports | FTC press release, Bergeson & Campbell | |
| Parachute linen lint fades after about five washes | linen_finish | Parachute only | **single source**; attributed to Parachute |
| Tester picks 250-300 percale, 400-495 sateen | thread_count range | Wirecutter, CR, Brooklinen data points | observed values, not a claim |
| 33.9 g/m² per oz/yd² | fabric_weight backfill note | arithmetic | |

## Corrections

Against the skill's own example (`examples/bedsheets-weave.md`), treated as a hypothesis:

1. *Weave as the split*: survives, but only as the second split and only for cotton and lyocell or viscose. Fibre comes first because it decides whether weave and thread count apply at all. The example's values list `["percale", "sateen", "linen", "flannel", "jersey"]` mixes a fibre (linen) into a weave list; overturned. Linen is plain-woven but nobody sells or shops it by weave.
2. *"Above about 400 thread count is mostly marketing"*: survives for percale (Wirecutter 200-300, Sleep Foundation 200-400, CR "sweet spot is 400"), too low for sateen (Wirecutter and Sleep Foundation both give 300-600; tester-endorsed sateens are 400 to 495). The sharper line is 1,000 and up, which CR says "you just can't get ... on a loom", i.e. ply inflation.
3. *"Sateen ... shows wear sooner"*: survives (Wikipedia, Kentucky Extension, NapLab). *"Percale ... gets softer with washing"*: contested by CR 2024; kept as a judgement with both sides.
4. *source: listing* for weave: survives on title evidence, medium confidence (the Amazon details table never rendered).
5. *Cold-start question* "Do you sleep hot, or do you like a sheet that feels smooth and a bit warm?" is 17 words and opens with "Do you"; replaced by "Crisp and cool, smooth and silky, or warm and brushed?" (9 words).

## Corrections after the blind check (2026-10-19)

1. post_wash_pocket_depth renamed "Best-case pocket depth after washing"; why now says it is an upper bound because CR's fit failures (8-inch after 15 washes; "18-inch" set failing 10 inches) exceed what 6 percent fabric shrink predicts; "the depth the sheet will actually have" removed.
2. pocket_margin renamed "Best-case pocket margin"; why now says SGI's 2 inches applies to the stated new pocket and that applying it post-wash is our synthesis.
3. "Fit after a year" grammar now draws stated depth, best-case depth and any reviewer fit result, and says bars that clear the line may still fail.
4. Judgement 5 restated around CR's fit results, confidence high → medium, "one tester" added.
5. single_ply_thread_count now divides only when the stated count is known to include plies; an honest "300 thread count, 2 ply yarn" stays 300.
6. Fibre split: "Tencel or bamboo" now maps to one shared branch for lyocell and bamboo viscose (merged); the branch keeps only definition-based legs.
7. Fibre split rationale no longer says microfiber skips weave (only linen does); microfiber branch unchanged.
8. Silk dropped from fibre values (no momme facet); "no preference" added; blend and no preference continue to split 2 by default, stated in Branches.
9. Pocket depth promoted to split 3 ("How tall is your mattress, topper included?"), roles split + filter, on CR's evidence that washed cotton sets fail ordinary mattresses. The bamboo → pocket_depth leg is removed as moot.
10. Judgement "Bed size and pocket depth are filters ... not cold-start splits" replaced by "Mattress height belongs among the splits; bed size is a filter taken from memory", confidence medium, evidence now includes cr_2024.
11. pocket_depth range restated from sf_deep_pocket: many sets 14 inches or less; deep-pocket picks 16 to 22. Hint and backfill now say what happens when depth is null or only "Deep Pocket" (keep, flag, rank lower).
12. pocket_depth why: the "16-inch pocket ends near 15" arithmetic removed; CR's fit failures stated instead, with stated depth as a ceiling.
13. wear_over_time backfill: "long-staple percale softens" removed (percale now "holds its feel", per CR); blanket "unspecified cotton: prone to pilling" removed; bamboo viscose pilling attributed to CHOICE.
14. Egyptian cotton: the logo is now "the licensed Egyptian Cotton logo" (Egyptian Cotton Association, eca_about); "Gold Seal" kept only where Home Textiles Today uses it (htt_egyptian supports); the test is attributed to the Cotton Egypt Association in 2016 across six markets, one originator.
15. hotelsheet_egyptian removed from the JSON (conflicting date, seller of "DNA tested" cotton, same originator); interest noted in sources.
16. cotton_grade now records the claim only (value "Egyptian (Gold Seal certified)" removed); verification moved to certifications (researched), which gains "Supima licensed" and "Egyptian Cotton logo licensed" and the supima, oritain, eca and htt evidence.
17. "1,000 or more implies plies" reworded everywhere (thread_count why, yarn_ply hint and backfill, grammar, judgement 2) to "claims from about 900 up are suspect, often because plies were counted"; judgement 2 confidence high → medium, high only on the FTC deception point.
18. Fibre definition, hint, backfill note and split rationale softened to the FTC wording: fibre content must be in an ad that names or implies a fibre; "on every US listing by law" removed.
19. Judgement 2 note: CR removed from "put sateen's top near 600" (now Wirecutter and Sleep Foundation).
20. Families: "usually in sateen or twill" removed from lyocell and bamboo viscose (uncited); lyocell and viscose then_ask weave legs dropped (circular trace).
21. Linen branch no longer makes thread_count or yarn_ply irrelevant; thread_count range and backfill now give Sleep Foundation's linen 80 to 140 and call a high linen count a red flag.
22. Weave question now "Crisp and cool, smooth and silky, warm and brushed, or stretchy?" so jersey is reachable; skip_if_known "sleeps hot or cold (memory)" removed (no sourced mapping for cold).
23. fabric_weight: flannel "200 GSM and up" aligned to "about 200 GSM"; backfill cost low → medium, note cites Brooklinen linen (no GSM) and Sleep Foundation's advice to ask customer service.
24. Notes: CR 2013 silicone-softener line now marked as on the CR page; SGI's and Sferra's commercial interest noted.
25. Single-source numbers checked for attribution in the JSON: bamboo 15 percent (Consumer Reports), 14-inch fit (Consumer Reports), Sferra 5.4 percent and +4 inches (Sferra), SGI +2 inches (SGI), 350 vs 550 (CR), five washes (Parachute), 1,250 → 286 ("alleges"), Egyptian 90 percent (Cotton Egypt Association), polyester s = 0 (CR "hardly shrank", now in the formula), multi-ply lower quality (Sleep Foundation). Fibre why now attributes the 6 percent and polyester figures to Consumer Reports.
26. Summary rewritten to name mattress height and the washed-fit finding.
27. Rejected findings: none. Partly adjusted: the checker offered "ply-counting is the usual cause"; Sleep Foundation calls it "One common tactic", so the register says "often".
28. Viewer rebuilt after the coordinator's CSS fix; viewer-browser.py rerun on a scratch copy (result in the next item).
29. viewer-browser.py on the rebuilt viewer: PASS at 1380, 768 and 390 px, light and dark.

## Script notes (2026-10-19)

- validate.py, render.py and viewer.py ran clean on the final file (13 facets, 3 splits, 43 references).
- First pass: `tests/viewer-browser.py` failed at 390 px on its "200% text overflow" assertion (page 416 px wide); honey failed the same way as a control. The coordinator fixed the generator (`.search` min-width in assets/viewer.css). The rebuilt viewer passes at 390 px (see the corrections log for the rerun).
- The flowchart still lists only the then_ask facets on each edge; with weave removed from the fibre branches this now matches the JSON.
- The fibre split has four branches, so the vertical flowchart can be wider than the 1380 px column and scroll sideways, as the viewer design allows. The generator first opened that scroll box at its left edge, which hid the "1 · Fibre" root on the first screen; it now centres the flowchart and mindmap on load (assets/viewer.js). The "Certifications" chip on the map broke as "Certification / s"; the chip padding is now .25rem and chips wrap only between words, so it fits whole.
