# Trash Cans, Recycling Containers & Dumpsters: research notes

Date: 2026-10-25. Scope: containers for collecting and moving household waste and
recyclables — indoor kitchen/bath/office cans, outdoor wheeled or stationary
trash and recycling carts, and construction/cleanout dumpsters (rented roll-off
or front-load units, and the consumer dumpster-bag products sold at retail).
Excludes the liner bags and sacks themselves (sibling leaf `garbage_bin_bags`)
and generic storage bins not meant for waste (`containers`, `storage_containers`).
Where a product is really a general-purpose bin (e.g. a lidded plastic tote)
sold as "storage," it belongs to the sibling, not here, even if someone could
put trash in it. One register for the whole leaf; the `setting` split does the
dividing between kitchen/bath, outdoor/curbside and dumpster rather than three
separate registers.

Quote labels: **verbatim** = I read the exact text myself (pdftotext on a
downloaded PDF, or curl plus HTML stripping). **fetched excerpt** = the fetch
tool returned a quoted sentence or a close paraphrase of a page it actually
loaded; I did not see the raw HTML myself because every retail and most brand
sites in this category sit behind bot protection that blocked `curl` (see
"Tooling problems" below), so I could not pdftotext/strip them directly.
**search excerpt** = from a search-engine summary with no page load. This run
has **no search-excerpt-only numbers in the JSON** — WebSearch was already
exhausted for the session before I started (see below), so every number here
is at minimum a fetched excerpt, and every number has two fetched sources
except where I explicitly flagged it single-source in a judgement.

## Tooling problems (report back)

- WebSearch reported its 200-call session budget already used before I made
  a single call. I worked entirely from WebFetch, curl and known brand/
  standards-body/trade URLs, as instructed.
- `curl` was blocked (Cloudflare challenge or plain 403) on every retail site
  I tried (Home Depot, Rubbermaid Commercial) and on `igbconline.org` and
  `web.archive.org`. WebFetch succeeded on `igbconline.org` live pages (it has
  its own fetch path) but WebFetch itself refused `web.archive.org` outright
  ("Claude Code is unable to fetch from web.archive.org"), so I could not get
  an Internet Archive snapshot as a fallback for anything WebFetch also
  blocked or 404'd. This means every citation to `igbconline.org` is a
  **fetched excerpt**, not a verbatim raw-text read — I could not independently
  verify via curl or Wayback that the model's summary of that page is exact,
  though I ran it twice on different URL paths and the two summaries agree.
- Most brand homepages (`toter.com`, `simplehuman.com`, `rehrigpacific.com`)
  return near-empty nav-only content to a direct URL guess; I had to fetch the
  homepage first, ask WebFetch to list the actual `href`s, then fetch those
  real URLs. `rubbermaid.com`, `suncastcorp.com`/`suncast.com`, `wm.com`,
  `nwra.com` (wrong org — turned out to be an unrelated "National Wind and
  Radar Association"), `recyclingpartnership.org`'s cart page, `epa.gov`'s
  recycling-bin pages, and `recyclingsimplified.com` either 403'd, 404'd, or
  had no on-page numbers to extract. None of these made it into the JSON.

## Seed

Seed script output, recorded verbatim:

```
=== Example entry (from an unrelated category) ===
category: car-tyres
what this shows: a number that is on every listing and still needs a
judgement attached, because experts know it only compares within one
manufacturer's range.
<example> treadwear_grade ... </example>
Judgement that would accompany it: "Treadwear grades can be compared across
brands as a rough guide but not as a ranking." ...

=== Persona ===
A competitive endurance athlete, who thinks in cost per unit of the active
thing and what is a waste of weight
```

1. **Treadwear equivalent.** My first guess — that gallon capacity is measured
   inconsistently across brands (to the rim vs. a practical fill line), the
   way treadwear is self-tested per manufacturer — did **not** survive the data
   check: no source stated this. What did survive, and is the real parallel, is
   the **liner code**: simplehuman ties every can to a liner ID tag under the
   lid and sells liners by that code; nothing found suggests any other brand's
   can recognizes those codes, so a liner number is "reliable within simplehuman,
   loose across brands" exactly the way treadwear is reliable within one tyre
   maker. Kept as the `liner_fit_system` facet and a judgement.
2. **What the endurance athlete notices first.** An athlete who thinks in cost
   per unit of the active thing would reach for capacity as the unit and ask
   cost per gallon (kitchen/outdoor) or cost per cubic yard (dumpster) before
   anything else — kept as the two derived metrics. The "waste of weight" lens
   applied cleanly to the bear-resistant/wildlife-resistance trade-off: a
   certified cart is markedly heavier (112 to 335 lb empty, sourced below) for
   the added resistance, which is exactly the kind of weight-for-a-reason
   trade this persona would flag. Dropped: sensor-can battery type and runtime,
   which the athlete would also ask about as a running cost, because no source
   gave a number for it across brands (simplehuman's own pages never state
   battery type for its sensor cans in what I could fetch).

## Sources and what each supports

All of the below are **fetched excerpts** (WebFetch summarizing a page it
loaded), not verbatim raw-text reads, because every one of these sites either
blocked `curl` directly or I had no independent way to cross-check the raw
HTML. Where two independent fetches (different URLs, same or different sites)
agree on a number, I treat it as confirmed; where only one page states a
number, I say so and, if it is load-bearing, flag it in a judgement with
reduced confidence rather than present it as settled.

- **igbconline.org/bear-resistant-products/** and **igbconline.org/programs/
  bear-resistant-products/** (regulator; two different pages, same site):
  both state that IGBC certification requires passing "a live bear test using
  captive grizzly bears" or "a technical evaluation," run at the Grizzly &
  Wolf Discovery Center (West Yellowstone, MT) and the Washington State
  University Bear Center (Pullman, WA), under a protocol "developed through a
  cooperative effort among IGBC, Montana Fish, Wildlife and Parks, the US
  Forest Service, the Living with Wildlife Foundation, and the Grizzly & Wolf
  Discovery Center." Supports `wildlife_resistance` and its two judgements.
  I could not reach a page with the numeric pass/fail criteria (force, duration);
  the facet and judgements say only what these pages said, not more.
- **toter.com/product/bear-tough-carts/** (spec sheet): "IGBC certified,"
  "a Three Star rating, the highest rating given by Living with Wildlife";
  3 sizes (32/64/96 gal) with empty weights 112/224/335 lb; double-wall
  rotomolded lid, steel-reinforced rim, 1/4" steel U-bolt hinges. This is the
  only source for the "3-star, highest tier" framing and for the weights —
  single-brand, flagged as such in the wildlife-resistance trade-off (I did not
  claim a comparison weight for an uncertified cart, since I have no sourced
  number for that).
- **toter.com/product/two-wheel-carts/** (spec sheet): capacity ladder 21, 24,
  32, 35, 48, 64, 96 gal; "up to 50% recycled content"; 10-year warranty;
  "World's Toughest Carts" branding; Rugged Rim with wear strip. Supports
  `capacity_gal` (outdoor band) and `mobility`.
- **toter.com** (homepage, spec sheet): confirms Toter sells "Trash Cans" and
  "Dumpsters" as two separate top-level product families (not one blended
  line), which is the main evidence for `setting` being a real three-way split
  at a major manufacturer, not an invented one. Also: "Average service life of
  11 years," "patented Advanced Rotational Molding," front-load dumpsters
  described as "rotationally molded plastic body... steel reinforcement" — not
  used as a number in the JSON, kept here for context only.
- **simplehuman.com** (homepage nav, spec sheet): confirms the brand's trash
  line is Sensor Can / Step Can / Recycler / Custom Fit Liners / Compost Caddy
  / Odorsorb Pod / Shredder / In-Cabinet, and that there is a "Code Finder"
  tool to "Locate your liner ID tag under every trash can lid." This is the
  core evidence for `liner_fit_system` and the proprietary-liner judgement.
- **simplehuman.com/pages/category-step-can** (spec sheet): "Our strong steel
  pedal is engineered to last over 150,000 steps — that's more than 20 steps a
  day for 20 years." Capacities by model (Recycler 58L, Rectangular 55L,
  Semi-Round/Slim/Butterfly/Hybrid 45L, Mini 5L). The 150,000-step figure is
  **single-source** — no rival brand publishes a pedal-cycle number and no
  independent lab test turned up — so it is attributed to the brand in prose
  ("one maker rates its own pedal at...") and called out in a judgement, not
  put in a `range` field.
- **simplehuman.com/pages/category-sensor-can** (spec sheet): capacities
  45–58L across Recycler/Rectangular/Semi-Round; "Voice + Motion Sensor"
  feature name. No battery type or runtime number was present in what I could
  fetch, so I did not add a facet for it (see Seed, dropped).
- **simplehuman.com/products/compost-caddy** (spec sheet): 4L capacity; uses a
  "soft-seal lid" that "allows organics to breathe" instead of a carbon filter;
  Code Z compostable liners; 5-year warranty. Supports `odor_control`'s
  "vented or soft-seal lid" value as a real, named alternative to a filter.
- **itouchless.com** (homepage, spec sheet): size buckets the brand itself
  uses (1–5, 6–12, 13–14, 15–19, 20+ gal); "AbsorbX Odor Filters" as a named
  product line. Supports `capacity_gal` and `odor_control`'s filter value.
- **dumpsters.com/sizes/dumpster-sizes** (primer): roll-off ladder 10/12/15/
  20/30/40 yd with weight limits in tons (1–2 up to 4–5) and uses ("heavy
  debris, light renovation" up to "commercial renovations"); front-load 2/4/6/8
  yd with weight limits in lb and uses (offices up to grocery stores).
- **budgetdumpster.com** (homepage, primer): independently lists the same
  10/12/15/20/30/40 yd roll-off sizes (in trash-bag-count terms rather than
  tons, so I did not merge the two sites' weight-limit numbers — they use
  different units and I have no conversion source). The two sites agreeing on
  the size ladder itself is what `dumpster_size_yd`'s range is built on; the
  per-size weight limits are **not** in the JSON because the two sources don't
  share a unit to cross-check against each other.
- **en.wikipedia.org/wiki/Single-stream_recycling** (primer): "All paper
  fibers, plastics, metals, and other containers are mixed in a collection
  truck, instead of being sorted by the depositor into separate commodities"
  (single-stream) vs. "People separate certain recyclable materials and place
  them in separate containers for collection" (dual/multi-stream). Supports
  `sorting_design` and its vocabulary entry.
- **hefty.com/products/trash-bags** (spec sheet): "Hefty® Ultra Strong™
  Kitchen Trash Bags: 13G," repeated across three kitchen-bag product lines;
  also 4G (small), 8G (medium), 30G/39G (large/lawn), 42–45G (contractor).
  This is the clean, quoted confirmation that 13 gal is the standard kitchen
  can size, not a guess.
- **glad.com** (homepage, spec sheet): a weaker, second confirmation — product
  URL fragments "13-ms" and "13gal-50ct" visible on the homepage next to the
  "kitchen" bag category, consistent with Hefty's explicit 13G.

## Data points used for derived metrics

- `cost_per_gallon` needs `price` (always present in the system, not a facet)
  and `capacity_gal` (sourced above to Hefty, Glad, Toter, iTouchless).
- `cost_per_cubic_yard` needs a rental fee or bag price and `dumpster_size_yd`
  (sourced to dumpsters.com and Budget Dumpster's shared 10–40 yd ladder).

Neither metric's formula itself needed a citation (arithmetic over an
always-present system field and a sourced facet), per the schema's own
`derived_metrics` shape.

## Against the existing add-on schema

The current add-on (`trash_recycling.jsonc`) has exactly one field:
`fits_bag_size_stated: string | null`. Read against `AGENTS.md`'s four kinds
of base-schema field (vertical anchor / category quality currency / hard
filter / sizing) and rule 1 (visually-derived fields stay out):

| Register facet | Verdict against AGENTS.md | Notes |
|---|---|---|
| `setting` | Not a schema field | Conversational split only; already implied by category/breadcrumb. |
| `lid_mechanism` | Mostly photo-derivable — leave to vision | A pedal, a sensor window or a swing hinge is visible in the hero photo almost every time. Keep as a register split (cheap to ask a buyer, expensive to run vision for every listing) but don't add as a new text field. |
| `sorting_design` / `compartment_count` | Photo-derivable — leave to vision or `high_signal_markdown` | AGENTS.md rule 4 names "drawer count" as its own example of a count a human would eyeball rather than type; compartment count is the same shape. If kept at all, it belongs in `high_signal_markdown`, not a structured filter. |
| `capacity_gal` | No new field — already generic | `supplies-standard.sizing.capacity` (value + unit, unit enum includes `gal`) already covers this. Category quality currency, already shared. |
| `dumpster_size_yd` | Gap in the shared schema | Same `sizing.capacity` block, but its unit enum (`l, ml, gal, qt, fl_oz, oz, g, kg, lb, cubic_ft, count_items`) has **no cubic-yard unit**, and `cubic_ft` is not what any dumpster source uses. Propose adding `cubic_yd` to `supplies-standard.jsonc`'s `sizing.capacity.unit` enum. |
| `liner_fit_system` | Add as a new hard filter, keep the existing field too | `fits_bag_size_stated` stays as the literal text a listing gives (e.g. "fits 13 gal bags," "Code G"); add a new boolean/enum `liner_fit_system` (`standard_bag_fit` / `proprietary_liner_code`) so the assistant can filter without parsing free text. |
| `odor_control` | Not dense enough to be currency | Present on a minority of listings as a marketing claim ("AbsorbX"), medium backfill cost; per rule 3 this is `high_signal_markdown` material, not a structured field we'd commit to backfilling on every row. |
| `mobility` | Mostly photo-derivable — leave to vision | Wheels/casters are visible in the product photo on essentially every listing that has them. |
| `wildlife_resistance` | Add as a new hard filter | Not eyeball-able (a plain latch and a certified one can look alike), it's a literal textual claim buyers do filter on as a hard yes/no, and IGBC's own certified-products list makes it checkable. Worth a new boolean/ordinal field. |

Noise: none proposed for removal — the add-on currently has only the one
field, and it is a legitimate hard-filter-adjacent raw value, not a catch-all.

## Branches

Tracing every branch leg to a stated sentence, per the brief:

- `setting = kitchen or bath` → ask `lid_mechanism`, `liner_fit_system`,
  `odor_control`, `capacity_gal`, `sorting_design`; drop `mobility`,
  `wildlife_resistance`, `dumpster_size_yd`. Traced to: mechanism.plain ("a step
  can uses a foot pedal... Outdoor and dumpster containers add wheels... and
  sometimes a latch") — the lid-mechanism/liner/odor facets are described as
  belonging to the indoor shell, and mobility/wildlife-resistance/dumpster size
  are described as belonging to the outdoor and dumpster shells, so
  kitchen/bath dropping them is the direct complement of that sentence.
  **2026-10-25 correction:** `sorting_design` added to this branch's `then_ask`
  — mechanism.plain's own sentence ("extra plastic taking up counter space")
  places the multi-compartment sorter indoors, so the kitchen/bath branch
  should not be silent on it. `compartment_count` is deliberately *not* added
  here directly: it is already gated by `sorting_design`'s own branches
  (multi-compartment sorter → ask it; single compartment → drop it), so
  listing it unconditionally on the `setting` branch as well would recreate
  the same kind of fixed contradiction found on the outdoor branch below.
- `setting = outdoor or curbside` → ask `mobility`, `wildlife_resistance`,
  `capacity_gal`; drop `liner_fit_system`, `odor_control`, `dumpster_size_yd`,
  `sorting_design`, `compartment_count`. Traced to the same mechanism sentence
  for mobility/wildlife-resistance, plus: simplehuman's liner-code system is
  explicitly a lid-and-tag system ("liner ID tag under every trash can lid")
  for its indoor cans; Toter's outdoor cart pages never mention a liner code or
  an odor filter, only capacity, recycled content and wheels — so dropping
  `liner_fit_system`/`odor_control` on the outdoor branch is traced to what is
  and isn't on the outdoor-cart source pages. `sorting_design`/`compartment_count`
  drop because a single outdoor curbside cart is one hauler-issued bin per
  stream, not a household sorting station (an inference from the product
  category itself, not from a fetched sentence — the weakest leg here, flagged
  as such before and confirmed WEAK by the blind check).
  **2026-10-25 correction:** `lid_mechanism` removed from this branch's
  `makes_irrelevant`. The blind check found no source stating outdoor carts
  fall outside the step/sensor/swing/open-top typology, and "open top" is
  itself one of the facet's own values an outdoor bin can genuinely have, so
  claiming the facet never applies outdoors was an unsourced exclusion.
  `lid_mechanism`'s own split still skips asking it on this path (mobility,
  wildlife-resistance and capacity are the priority asks here, and there is no
  source either way for which lid types outdoor carts actually come in), but
  the facet is no longer declared irrelevant, so it stays available as a
  filter/annotation if a listing states it. **2026-10-25 correction:**
  `sorting_design` added to this branch's `makes_irrelevant` (it previously
  only excluded `compartment_count`, leaving `sorting_design` itself free to
  fire as an independent top-level split with no tie to `setting` — see the
  cross-branch contradiction fix below). A matching `skip_if_known` entry
  ("setting answered as outdoor or curbside") was added to the `sorting_design`
  split itself, mirroring the one it already had for dumpster.
- `setting = dumpster` → ask `dumpster_size_yd` only; drop everything else,
  including `sorting_design`. Traced to: dumpsters.com's own size-and-use table
  lists only debris/renovation/cleanout uses for every size, never a recycling
  use, which is the basis for making `sorting_design` irrelevant on this
  branch (construction debris is not single- or multi-stream sorted the way
  curbside recycling is).
- `lid_mechanism = open top` → drop `liner_fit_system`. Traced to:
  simplehuman's liner-code system is keyed to "your liner ID tag under every
  trash can lid" — an open-top can has no lid to carry a tag, so the
  proprietary-code question does not apply; it defaults to standard bag fit.
- `sorting_design = multi-compartment sorter` → ask `compartment_count`;
  `sorting_design = single compartment` → drop `compartment_count`. Directly
  stated in the split's own rationale: a single-stream hauler needs one bin, a
  sort-at-home household needs the compartment count to match what it
  separates.

No branch leg was dropped after writing this; the outdoor→`compartment_count`
leg above is the one I'd flag as WEAK on a blind check, and I've said why.

## Trimmed detail

- Dumpster per-size weight limits: dumpsters.com gives 1–2 tons up to 4–5 tons
  for roll-off, and 400–1,600 lb for front-load; Budget Dumpster gives the
  same size ladder in trash-bag counts instead of weight. Cut from the JSON
  because the two sources don't share a unit to confirm each other's numbers,
  and I did not want to put an unconfirmed weight-limit range next to a
  confirmed size ladder in the same facet.
- Front-load dumpsters (2/4/6/8 yd, commercial use: offices, restaurants,
  grocery stores) from dumpsters.com only — single-source, and a genuinely
  B2B segment rather than something a retail shopper buys, so it's mentioned
  here and in the mechanism's "dumpster" family note but not given its own
  facet.
- The Bagster-style consumer "dumpster in a bag" product (sold at Home Depot)
  is, as far as I know, the closest thing to a dumpster a retail shopper
  actually purchases outright rather than rents — but Home Depot blocked the
  fetch (403) and I could not reach theBagster.com's own spec page for a
  capacity number, so I did not state a Bagster-specific figure anywhere; the
  `dumpster_size_yd` facet's range comes only from the two rental-marketplace
  sources.
- NPS/park-service guidance on raccoon- or animal-resistant latches (as
  distinct from IGBC's bear-resistant program) — attempted, 404'd, dropped.
  This is why `wildlife_resistance`'s "raccoon-resistant latch" value has no
  citation of its own beyond being the lower rung of the same facet whose top
  rung (IGBC) is well sourced; I did not invent a separate claim for it.
- Container-color conventions (blue for recycling, etc.) — looked for a
  CalRecycle/SB 1383 or EPA citation, could not reach specific guidance pages
  (all 404'd or had no color content). Dropped entirely rather than stated on
  weak grounds; also out of scope for a schema field per AGENTS.md rule 1
  (color is visually derived).
- ANSI Z245.60 (the wheeled-cart industry standard referenced in waste-industry
  trade writing) — could not find or fetch a primary source describing its
  actual test criteria in this session; mentioned nowhere in the JSON because
  I have nothing beyond the name of the standard, which is not enough to cite.

## Corrections

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

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

1. Fixed the cross-branch contradiction (check.md's most severe finding):
   added `sorting_design` to the `setting` = outdoor branch's
   `makes_irrelevant`, and added a matching `skip_if_known` entry
   ("setting answered as outdoor or curbside") to the `sorting_design` split
   itself, mirroring the one it already had for dumpster. Previously
   `sorting_design` had no tie to `setting` at all, so it could fire on the
   outdoor path and direct the assistant to ask `compartment_count` in the
   same breath that the `setting` branch declared `compartment_count`
   irrelevant.
2. Added `sorting_design` to the `setting` = "kitchen or bath" branch's
   `then_ask`, since mechanism.plain places the multi-compartment sorter
   indoors and the branch was previously silent on it. Did **not** add
   `compartment_count` to the same `then_ask` list, even though check.md's
   fix #2 suggested both: `compartment_count`'s relevance already depends
   entirely on the answer to `sorting_design` via that split's own branches
   (multi-compartment sorter → ask it, single compartment → drop it).
   Listing it unconditionally here too would recreate the exact shape of
   contradiction fixed in item 1, just on the kitchen/bath branch instead of
   the outdoor one, so I judged the single, already-correct gating through
   `sorting_design` to be the right fix and left `compartment_count` out of
   this `then_ask`.
3. Lowered `capacity_gal`'s `range.min` from 2 to 1 and reworded the
   "typical" text and `why_experts_care` from "2 to 4 gal bath or office" to
   "1 to 5 gal bath or office." Re-fetched itouchless.com live: it still
   titles its smallest band "1 to 5 Gallon" (`/collections/1-to-5-gallon`).
   Re-fetched simplehuman.com/pages/category-step-can live: its smallest
   model is now listed as a "5L Slim Step Can" (≈1.3 gal), which independently
   corroborates a product below the old 2 gal floor. Added `simplehuman_step_can`
   to the facet's `evidence` list as the second source for this number (it was
   already a reference in the file, cited for the pedal-durability and
   lid-mechanism claims). Also changed "2 to 23 gal" to "1 to 23 gal" in the
   kitchen-and-bath mechanism family description for the same reason.
4. Added a fifth judgement flagging the Toter Bear Tough cart empty weights
   (112 / 224 / 335 lb) as single-source, giving it the same confidence
   caveat already given to the 150,000-press pedal figure. Also softened the
   `wildlife_resistance` trade-off's prose from "the certified carts found
   here run 112 to 335 lb empty" to "one maker's certified carts run 112 to
   335 lb empty," matching the hedge already used in the lid-mechanism
   trade-off's pedal-figure sentence.
5. Added a `backfill_note` to `mobility`, `sorting_design` and
   `compartment_count` saying each is also visible/countable directly from
   the product photo, the same treatment `lid_mechanism` already had. This
   brings the register's framing of these as cheap-to-backfill `listing`
   facets in line with this document's own "Against the existing add-on
   schema" table, which already called all four "mostly photo-derivable."
   I did not change any facet's `source` value: the schema's `source` enum
   is only `listing` / `derived` / `researched` (no "visual" option), and
   each of these four genuinely is on most listings' titles or bullets when
   present, so `listing` was already schema-correct — the disagreement was
   only in the notes' tone, not the register's data contract, and it is now
   resolved in the facets' own `backfill_note` text rather than by inventing
   a non-schema source value.
6. Removed `lid_mechanism` from the `setting` = outdoor branch's
   `makes_irrelevant` (see item 1's branch note above). No source states that
   outdoor carts fall outside the step/sensor/swing/open-top typology, and
   "open top" is itself one of the facet's own values, so declaring it fully
   irrelevant there was an unsourced exclusion. Left it out of that branch's
   `then_ask` too, and left `lid_mechanism`'s own `skip_if_known` entry for
   the outdoor path as-is, since there is equally no source for which lid
   types outdoor carts come in — not asking it by default is a different,
   weaker claim than declaring the facet inapplicable, and only the latter
   was the check's finding.

All six required fixes were applied as findings, not rejected; none needed
rejecting.
