# Cleaning Tools & Brushes: research notes

Date: 2026-10-25. Scope: hand tools that clean a surface by sweeping, mopping, scrubbing or squeegeeing — brooms, dustpans, mops (string, flat, spin, sponge, dust/dry), scrub brushes, dish and bottle brushes, toilet brushes, squeegees and handled dusters (feather or synthetic). In the Zamana taxonomy this is `supplies > household > cleaning_tool_brushes`. Excluded, and left to sibling leaves in the same catalog: loose sponges, cloths and flat scouring pads (`cloth_pad_sponges`), lint rollers and clothes brushes (`garment_care_tools`), shoe and suede brushes (`shoe_care_tools`), and drying racks (`dish_racks`). Where a product is genuinely both (e.g. a sponge mop, whose head is a sponge but the product is a long-handled mop), it stays here because the handle and mopping action are what define it, and the note says so again under "Branches".

Quote labels: **verbatim** = the sentence in quotation marks is in text I read myself, either by having `curl` fetch the raw HTML and stripping tags in a script, or by `pdftotext` on a downloaded PDF. **fetched excerpt** = the WebFetch tool summarised or reworded the page for me and I did not independently confirm the exact wording. **search excerpt** = from a search-engine summary, page itself unreachable. WebSearch returned "session has used its web search budget (200 of 200)" on every query attempted after the first three, so all research past that point used direct `curl`/WebFetch against known sites, Wikipedia, and brand pages, per the brief. No search-excerpt-only number is in category.json.

## Seed

Seed script output, recorded verbatim:

> Example entry (from an unrelated category): olive-oil `harvest_date` — "a facet that experts rank first, that almost no listing carries, and that is expensive to backfill... list it, mark it researched, and limit backfill to the top of the catalog."
> Persona: "A cycling mechanic, who thinks in compatibility, standards and the part that has to match."

1. **The cleaning-tools equivalent of harvest date** is not a single number but the material fact a listing almost never states outright: what the bristle or pad is actually made of, and how stiff it is. Like harvest date, it's the single thing that decides whether the product does its job (soft natural fiber vs. steel wire are not interchangeable even if both show up as "scrub brush"), it is backed by brand pages rather than marketplace titles, and it decays in value the harder it is to get — a buyer who can't tell stiffness from a photo picks wrong far more often than a buyer who can't tell harvest date from a label. **Kept** as the `bristle_pad_material` and `bristle_stiffness` facets, both marked `researched` with low-to-medium backfill cost, same honest trade-off as the example.
2. **The mechanic's instinct is "what's the part that has to match."** For bikes that's bolt threads and axle standards; here it's which refill, pad or cartridge clips onto which handle or base. A Swiffer WetJet pad does not fit an O-Cedar EasyWring bucket, and a replacement mop head sized for one brand's frame does not fit another's. The mechanic would also immediately ask whether the wearing part (bristle head, pad, blade) is sold separately at all, same as asking whether a bike part is serviceable or you replace the whole assembly. **Kept**: `fits_system_stated` (already in the existing add-on, kept as-is) and `refill_system` (reusable/replaceable/disposable), which is the broader version of the mechanic's "can I get the part, or do I bin the whole tool" question. **Dropped**: chasing an exact wash-cycle count per head (Libman states "up to 50 times" for one product, no second source, and it wouldn't generalize across brands) and any attempt at a cross-brand handle-fitting standard, because no standards body governs household cleaning-tool handle threads the way bike headsets are governed — it's brand-proprietary.

## Sources and what each supports

### Primers (Wikipedia)

**Wikipedia, Broom** — https://en.wikipedia.org/wiki/Broom (curl + tag-strip, verbatim)
- "The brush of a broom is most commonly made with the fibers of broom corn." Other natural fibers: "palmyra, rice straw, rice root, piassava, grass, sedge, and twigs."
- "As an alternative to plant fibers, brooms can be fitted with synthetic brushes made of materials like nylon or plastic."
- "A distinction is made between a 'hard broom' and a 'soft broom'... Soft brooms are used in some cultures chiefly for sweeping walls of cobwebs... hard brooms are for rougher tasks like sweeping dirt off sidewalks or concrete floors."
- "Warehouse brooms use heavier fibers such as rattan or palmyra palm and are bound with metal. Different grades of warehouse broom are used to denote the surface it is designed for, such as smelters, decks, or railroads. Their brushes measure about 16 to 18 inches long."
- "Wooden broom handles are often about 42 inches long and seven-eighths to one and one-eighth inches in diameter." Handles are "commonly made from hardwood or fir," "painted or finished," and "Lacquers can increase the lifespan of the broom's handle."
- Supports: the sweep mechanism family, the natural-vs-synthetic bristle split, soft/stiff bristle grading, handle length and the wood-needs-finishing judgement. Confidence high (read as raw text, not a search summary).

**Wikipedia, Mop** — https://en.wikipedia.org/wiki/Mop (curl + tag-strip, verbatim)
- "Microfiber mops are constructed of a blend of polyester and polyamide fibers which are 'split' and formed into a single fiber. This blend consists of 70–90% polyester that serves as the scrubbing and cleaning fiber and 10–30% polyamide which performs as the holding and quick drying fiber... usually expressed as a ratio on the label... e.g. an 80% polyester and 20% polyamide blend would be labeled as '80/20.'"
- "Sponge mop heads are constructed with a cellulosic, rubber, or plastic foam block, usually attached by crimping a metal clip," wrung by "rollers or a pivoted flat perforated blade."
- Flat mops: "a flat sheet of microfiber textile or sheets with a surface of looped yarn, usually about 15 cm (6 in) wide," attached with "Velcro or a pouch."
- "A dry mop or dust mop is designed to pick up dry, loose contaminants such as dust, earth, and sand," with heads that "can be washed and replaced when saturated with dust."
- Supports: the mop mechanism family, microfiber/sponge/flat/dust-mop material categories, the wring-mechanism vocabulary. Confidence high for the construction facts; the 70–90%/10–30% ratio is this article's only occurrence with no second source found, so it is demoted to a low-confidence judgement rather than a sourced numeric range in a facet (see Judgements).

**Wikipedia, Squeegee** — https://en.wikipedia.org/wiki/Squeegee (curl + tag-strip, verbatim)
- "A squeegee or squilgee is a tool with a flat, smooth rubber blade, used to remove or control the flow of liquid on a flat surface."
- "Squeegees with hard rubber or metal blades are used in stencil printing."
- Supports: the squeegee mechanism family and the single-blade, no-stiffness-grade nature of that family. Confidence high.

**Wikipedia, Dustpan** — https://en.wikipedia.org/wiki/Dustpan (WebFetch summary, **fetched excerpt**, not independently re-fetched with curl)
- "Dustpans typically feature a flat, angled surface... with raised sides"; materials "plastic, metal, and composite"; some have "rubber edges to improve debris collection efficiency" and "integrated brushes or brooms"; light-duty pans run "20 cm to 30 cm in width," industrial ones exceed that.
- Supports: background on the dustpan as a companion tool. Not cited as evidence for any facet in category.json because it was not re-verified verbatim; kept here as context only.

**Wikipedia, Feather duster** — https://en.wikipedia.org/wiki/Feather_duster (curl + tag-strip, verbatim)
- "There are several types of feathers used in feather dusters, but ostrich feathers are most often used. Black ostrich feathers come from the male and are very soft... Gray ostrich feathers are more stark... Floss ostrich feathers are the most soft and delicate."
- No mention of microfiber or static-cling dusters anywhere in the article (checked directly), so the register does not claim a static-cling mechanism for synthetic dusters.
- Not cited as evidence in category.json; dusters are covered qualitatively in vocabulary only, since the article doesn't support a numeric or filterable fact.

### Brand spec pages

**Libman, Wonder Mop (product #2000)** — https://www.libman.com/products/wonder-mop (curl + tag-strip, verbatim)
- "Each Wonder® Mop head is constructed out of our exclusive GRIPSTRIPS™... designed to lift up to 20% more dirt from your floors."
- "Each Wonder® Mop has a built-in power wringer, designed to squeeze out and remove even more water from the microfiber mop head."
- "Machine-washable mop head" — "eco-friendly, thanks to being machine-washable up to 50 times."
- "Extra-strong steel handle. Approximately 62” overall length." "Great for vinyl, linoleum, wood, laminate, marble, stone and ceramic tile." "One-year warranty."
- Supports: the reusable/washable head concept, the power-wringer mechanism, steel handle material, and one real overall-length data point. Confidence high (verbatim). The "up to 50 times" wash-cycle figure has no second source, so it is not used as a sourced number in any facet; it's mentioned only here and in the dropped-seed note.

**Libman brooms/mops category page** — https://www.libman.com/products/large-angle-broom (curl + tag-strip, verbatim; this URL resolved to a site-wide navigation listing rather than a single product page)
- Product-line names read directly off the nav: "Precision Angle® Indoor/Outdoor Broom," "Precision Angle® Broom with Clean Fibers Dustpan," "Cotton Deck Mop," "Jumbo Cotton Deck Mop," "Tornado Twist Mop™," "Gator Squeeze Mop™," "Freedom® Microfiber Spray Mop," "Tornado Spin Mop® System," "Rinse 'n Wring™ Microfiber Mop System."
- Supports: that angle brooms, cotton deck mops, twist mops, sponge ("squeeze") mops, spray mops and spin-mop systems are real, separately sold product families in this category — used only to confirm vocabulary and the mechanism-family list, not for any number.

**simplehuman, Toilet Brush (BT1083)** — https://www.simplehuman.com/products/toilet-brush (curl + tag-strip, verbatim)
- "Specially designed crescent shape head reaches hard-to-clean areas around the rim. Unique magnetic collar secures the cover to the toilet brush so you can carry them together without any drips. Slim dome-shaped cover conveniently stores the toilet brush when not in use, keeping it hygienic and discreetly hidden."
- "Stiff outer bristles are ideal for scrubbing tough stains." Price $35 (Brush model), "5-Year Warranty." No mention of a replaceable head.
- Supports: the hygienic-holder-design facet (closed caddy with a drip-free magnetic seal) and the stiff-bristle-for-toilets fact. Confidence high for the quotes, but this is the brand's own marketing claim about hygiene, not an independent test — flagged as a judgement, not a verified fact.

### Commercial distributor (for the color-coding vocabulary term only)

**Carlisle FoodService Products, cleaning category navigation** — https://www.carlislefsp.com/categories/cleaning/brooms-brushes (curl + tag-strip, verbatim for the one fact used)
- The site's own category list under cleaning tools includes a line item named "Color-Coded Products," alongside "Floor Brushes & Brooms," "Mopping Solutions," "Squeegee & Window Cleaning."
- Supports only that color-coded cleaning tools are a real, separately merchandised commercial product line (used for the vocabulary entry). I could not reach a standards body or regulator page stating the specific color-to-area mapping (red/restroom, etc.) in the time available, so no specific color scheme is asserted anywhere in category.json — only that the practice exists, to avoid inventing a mapping I couldn't verify.

### Could not reach

- Wirecutter/NYT best-broom and best-mop guides: WebFetch refuses nytimes.com directly, and no Internet Archive snapshot exists for either URL (`archive.org/wayback/available` returned `"archived_snapshots": {}` for both).
- Good Housekeeping and Real Simple buying guides: both served a bot-challenge or nav-only shell to `curl` (Good Housekeeping returned a 392 KB page that was pure navigation JSON with zero occurrences of "mop"; Real Simple returned a 612-byte block page).
- Rubbermaid Commercial's color-coded-cleaning and broom category pages: both returned a Cloudflare JavaScript challenge page to both WebFetch and curl.
- O-Cedar product pages and Quickie Manufacturing's site: 404 or near-empty responses on every URL guessed; I could not find their sitemaps without a working web search.
- No standards body, regulator or specialist reviewer (ISSA, NSF, ANSI, Wirecutter, Consumer Reports) was reachable for this category in this run. This is a real gap: the register's safety/hygiene judgements (toilet-brush holder design, food-contact material) are accordingly held at low or medium confidence and sourced to a single brand page or to the register authors' own reasoning, never invented as if independently tested.

## Data points used for derived metrics

Only one derived metric is in the register (`cost_per_clean`), and it's pure arithmetic (price divided by the number of cleans a pack or head delivers), not fit to any sourced curve. No numeric table is needed for it; the Libman "50 washes" figure is explicitly *not* used as the divisor for reusable heads, because it's single-sourced — the metric's `why` field states the concept, not a specific number.

## Against the existing add-on schema

Add-on read: `supplies/household/add-ons/cleaning_tool_brush.jsonc` (`bristle_pad_type` enum, `fits_system_stated` string) composed with `household-standard.jsonc` (`materials`, `mounting_install`, `sizing.weight_capacity`) and `supplies-standard.jsonc` (`high_signal_markdown`, `sizing.{size_stated, pack_count, pieces_included_text, dimensions, capacity, weight, measurements_text}`).

| Facet in this register | In add-on today | Proposed kind under AGENTS.md | Note |
|---|---|---|---|
| `cleaning_action` | no | vertical anchor | The single most load-bearing fact (sweep/mop/scrub/squeegee) and currently left to the title. `bristle_pad_type`'s sponge/rubber/silicone values half-encode it but conflate action with material. Propose it as the anchor field for this add-on. |
| `refill_system` | partly (`fits_system_stated` only covers the disposable case) | hard filter | Reusable-vs-replaceable-vs-disposable is a real filter buyers use and isn't dense enough in free text today. |
| `handle_reach` | no | hard filter | Hand-held vs long-handled isn't captured anywhere; cheap to extract from titles. |
| `bristle_pad_material` | yes, as part of `bristle_pad_type` | hard filter | `bristle_pad_type`'s enum mixes material (`microfiber`, `rubber`, `silicone`, `steel_wire`, `feather`) with stiffness (`stiff_bristle`, `soft_bristle`, `mixed_bristle`) and construction (`sponge`, `scrub_pad_abrasive`). Propose splitting into `bristle_pad_material` (what) and `bristle_stiffness` (how firm), since a stiff synthetic brush and a stiff steel-wire brush are not interchangeable even though both read "stiff" today. |
| `bristle_stiffness` | yes, as part of `bristle_pad_type` | hard filter | See above; same split. The add-on's own comment ("stiffness is invisible") already argues for keeping it as text, not a visual field — this register agrees and just wants it separated from material. |
| `handle_material` | no (only the whole-product `materials` enum in household-standard, which can't say the handle is steel while the head is microfiber) | hard filter | Propose a handle-scoped enum; `materials` is product-wide and multi-select, too coarse for "is the handle wood or metal." |
| `handle_length` | no dedicated field, but fits the existing `sizing.dimensions.length` slot | sizing | Passes AGENTS.md's own test ("cable length yes, lamp cord length no" is category-relative): handle length is bought-by-number for this category (storage fit, reach). No new field needed, just a reliably filled value in the slot that already exists. |
| `wring_mechanism` | no | hard filter | Buyers do filter on "has a power wringer" vs "twist by hand." Brand wording varies (power wringer, spin, twist, roller), so the enum needs a generous "other" bucket. |
| `fits_system_stated` | yes, unchanged | hard filter | Already correctly modeled as free text; the universe of branded refill systems changes too often for a fixed enum. No change proposed. |
| `food_contact_rated` | no | not a schema field; context only | Virtually no listing states a tested food-contact fact; it's inferable from category placement (kitchen vs. bathroom) rather than worth a dedicated column. Drop the idea of a field. |
| `hygienic_holder_design` | no | high_signal_markdown, partly | The closed-vs-open holder shape is visible in product photos, so under AGENTS.md rule 1 the shape itself is image-pipeline material, not a schema field. The "drip-free" or "magnetic seal" *wording*, which isn't visible, is worth one line in `high_signal_markdown` when a listing states it. |

Fields this register considers noise for this leaf: household-standard's `mounting_install` enum is mostly `not_applicable` for brooms, mops and hand brushes (it only means something for a handful of wall-mounted holder/caddy products in this category, which may be better served by the `cloth_pad_sponges` or a storage leaf anyway); and `sizing.weight_capacity`, also from household-standard, which is meant for shelves and racks and has no meaning for a brush or mop.

## Branches

Traced against the sentences in `category.json` and this file, per leg:

**Split 1, `cleaning_action`**
- `sweep_dust` → then_ask `[bristle_pad_material, handle_material]`; makes_irrelevant `[wring_mechanism, food_contact_rated, hygienic_holder_design]`. Chain: brooms have no wringing step at all (the mop article's wringer mechanisms — lever, roller, pivoted blade — appear only under its mop and sponge-mop sections, never under broom), and by this register's own scope line brooms aren't used on dishes or toilets, so the dish/toilet-specific facets don't apply.
- `mop_wet_floor` → then_ask `[wring_mechanism, refill_system]`; makes_irrelevant `[bristle_stiffness, food_contact_rated, hygienic_holder_design]`. Chain: mop heads are rated by absorbency and material (string, microfiber, sponge, flat), not by a stiffness grade — the Mop article never grades a mop head as soft/medium/stiff, that language is specific to the Broom article's bristle discussion — and mops, like brooms, aren't dish or toilet tools by this register's scope.
- `scrub_friction` → then_ask `[bristle_pad_material, bristle_stiffness]`; makes_irrelevant `[wring_mechanism]`. Chain: scrub brushes (dish, bottle, toilet, tile) have a fixed bristle or pad head with nothing to wring — wringing is a wet-absorbent-head mechanism that this register's Mop sources describe only for mop and sponge-mop heads. `food_contact_rated` and `hygienic_holder_design` stay relevant here because dish/bottle brushes and toilet brushes both fall under `scrub_friction`.
- `squeegee_pull` → then_ask `[bristle_pad_material]`; makes_irrelevant `[bristle_stiffness, wring_mechanism, food_contact_rated, hygienic_holder_design, refill_system]`. Chain: the Squeegee article describes one "flat, smooth rubber blade," not a bristle with a stiffness grade and not an absorbent head to wring; squeegees aren't dish or toilet tools, and brand pages found in this run show squeegees sold as one fixed unit, not as a head-plus-refill system (no squeegee refill product was found anywhere in the Libman navigation list).

**Split 2, `refill_system`**
- `disposable_pad` → makes_irrelevant `[wring_mechanism]`. Chain: the Libman navigation list's "Freedom® Microfiber Spray Mop" is the one disposable/refill-pad-style product found, and it pairs with a spray bottle, not a wringer — disposable pad systems are used once and thrown away, so there is nothing to wring before reuse.

**Split 3, `handle_reach`**
- `hand_held` → makes_irrelevant `[wring_mechanism]`. Chain: every wringing mechanism in the sources (lever, twist, spin pedal, roller) is described as part of a long-handled mop or mop-and-bucket system; a hand-held tool (dish brush, toilet brush, bottle brush, grout brush) has no such mechanism to speak of.

One leg considered and dropped: a branch from `cleaning_action = scrub_friction` to `hygienic_holder_design` alone (skipping dish/bottle brushes) was considered, but there's no stated fact that lets the assistant tell a toilet brush from a dish brush within the `scrub_friction` value — both are legitimately "scrub" tools. Rather than invent a finer split the register doesn't have sourced facets for, `hygienic_holder_design` and `food_contact_rated` are both left reachable under `scrub_friction` and the assistant is expected to use the product's stated name/category (toilet brush vs. dish brush) the same way it already does for `cleaning_action` itself.

## Trimmed detail

- Libman's exact wording for the Wonder Mop's surface compatibility list ("Great for vinyl, linoleum, wood, laminate, marble, stone and ceramic tile") is longer than the facet's `why_experts_care` cap allows; the full list lives here rather than in category.json.
- The full natural-fiber list from the Broom article ("broom corn... palmyra, rice straw, rice root, piassava, grass, sedge, and twigs") is trimmed in the facet definition to "natural plant fiber" generally; the specific fiber names are kept here and in the vocabulary entry for broom corn only, since that's the one a buyer is actually likely to see named on a listing.
- Warehouse-broom grading by surface ("smelters, decks, or railroads") is real but is a commercial/industrial distinction unlikely to appear on a consumer listing in this catalog; dropped rather than forced into a facet.

## Corrections

None yet — this is the first authoring pass for this category, not a revision after a blind check.

## Corrections (2026-10-26)

Applied against the 2026-10-25 blind check (`check.md`), all 10 "Required fixes" items:

1. `wring_mechanism`: added `libman_twistmop` (Tornado Twist Mop, fetched 2026-10-26 — "click the handle into place, then twist it to wring out dirty water") as a cited source for the `twist` value, and added a `backfill_note` flagging `squeeze_lever` and `spin_foot_pedal` as real but not yet independently sourced in this run.
2. `handle_material`: cut the unsourced "can split or rot without it" clause from `why_experts_care`; kept only the cited "needs a painted or lacquered finish" claim.
3. `refill_system`: added `libman_twistmop` as a second source, which directly supports `replaceable_head` ("The Tornado Twist Mop's head is replaceable and machine-washable"); added a `backfill_note` flagging `disposable_pad` as real-but-uncited rather than silently treating it as equally sourced. A true disposable-pad product page (Swiffer WetJet, O-Cedar) was not reachable in this run (Swiffer 404, O-Cedar 403) — see rejected findings below for why that leg stays flagged instead of fully re-sourced.
4. `handle_length`: hand-held range marked explicitly as an unsourced estimate in the facet's `range.typical` text (neither citation gives a hand-held dimension; no replacement source was found in this run).
5. `handle_length`: narrowed the long-handled range to "about 150 to 160 cm overall," driven by the single cited Libman mop figure (62" = 157.5 cm), and said so explicitly rather than implying two-source support.
6. `mop_wet_floor` branch: moved `bristle_stiffness` from `makes_irrelevant` into `then_ask`, and added `libman_scrubster` (Scrubster Mop, fetched 2026-10-26 — "attached scrub brush to clean grout") as the counterexample source, cited on both the branch's underlying facet and `bristle_stiffness`'s own evidence.
7. `cost_per_clean`: restated the reusable-head term of the formula as "a qualitative judgement of cost against its laundering life rather than a divisible count," removing the dependency on an unsourced, un-faceted "wash life" number.
8. `food_contact_rated`: added an explicit statement to the facet's `backfill_note` that no source was found for this facet at all, rather than leaving the missing `evidence` field unexplained.
9. `refill_system` and `handle_reach`: reworded both splits' `question` (and matching `cold_start_question`) from binary to three-way, so every value of each facet (`replaceable_head`; `long_handle_fixed` vs `long_handle_telescoping`) is reachable from the stated question. Both new questions are under the 12-word cap.
10. `cleaning_action`: added the sibling-leaf exclusion (loose sponges/scouring pads, shoe and garment brushes, drying racks) to the facet's own `definition`, so the boundary notes.md relies on is now visible from `category.json` alone.

Findings not acted on (with reason):
- Part D's observation that `refill_system` and `food_contact_rated` should arguably be marked `listing`/`derived` rather than `researched` is a real point but is not in the "Required fixes" list, so it was left as-is this pass.
- The Split 1 scope-risk note (shoe-care and garment-care siblings overlapping `scrub_friction` + hand-held + stiff) is addressed via fix 10's definition change; no further split restructuring was made since the check did not list this as a required fix beyond stating the boundary.
