# Aquatic equipment: research notes

Date: 2026-10-25. Scope: the powered and consumable hardware that runs and keeps a fish tank alive — filtration (hang-on-back, canister, internal, sponge, undergravel, sump), heaters, aquarium lighting fixtures, air pumps, powerheads and wavemakers, and the marine/planted specialty gear (protein skimmers, UV sterilizers, CO2 systems). Not the tank or stand itself (sibling `aquariums`), not substrate, decor or live plants (sibling `aquatic-decor`), not water-test kits or chemical conditioners (these are formulations, not supplies, and no sibling leaf exists yet for them — out of scope), not fish food (pet-nutrition), and not general reptile/small-animal heat lamps and UVB bulbs (sibling `habitat_heating`, whose current add-on schema fields — `uvb_output`, `bulb_base_type` — are shaped for terrarium bulbs, not sealed aquarium heaters or LED fixtures). I kept aquarium heaters and aquarium lights in this leaf rather than `habitat_heating` because every major retailer (Chewy, Petco, Amazon) files them under aquarium/fish equipment, not reptile heating & lighting; flagging the overlap here per the brief rather than silently assuming it.

Quote labels: **verbatim** = I read the sentence myself in text I fetched with curl (saved under the scratchpad path below) or pdftotext; **fetched excerpt** = the WebFetch tool summarised the page for me; **search excerpt** = from a search-engine summary only. WebSearch reported its budget exhausted on the first query of this run (200 of 200), so every source below came from direct curl/WebFetch, not search. No search-excerpt-only numbers are in this register.

Scratchpad: `/private/tmp/claude-501/-Users-amnbh-Desktop-dev-zamana/94e1e673-5231-41fe-8b68-7a624ab5c8d8/scratchpad/aquatic-equipment/` holds the raw fetched HTML for every URL quoted verbatim below.

## Seed

Seed run output (recorded verbatim):

```
=== Example entry (from an unrelated category) ===
category: olive-oil
what this shows: a facet that experts rank first, that almost no listing carries, and that
is expensive to backfill. The honest answer is to list it, mark it researched, and limit
backfill to the top of the catalog. Also shows a derived metric hanging off a researched facet.
<harvest_date facet + months_since_harvest metric>

=== Persona ===
An industrial designer, who thinks in materials, joins and what the manufacturer saved money on
```

1. The aquatic-equipment equivalent of `harvest_date`: **PAR at the substrate** (µmol/m²/s, the light actually reaching a plant or coral, not the lumens on the box). Reef and planted-tank keepers rank it first when picking a fixture, almost no listing states it, and getting it means reading a third-party PAR-meter test. I did not create a separate `par_umol_m2s` facet for this, because it would duplicate `light_intensity` below and the register already has 13 facets for a category this broad — instead `light_intensity`'s `why_experts_care` names PAR as the real researched-only measure behind the marketed "low/medium/high light" label. Kept as context inside that facet; dropped as its own facet.
2. The industrial-designer persona's first notice: a cheap heater is a glass tube around a bare resistive element with a sealed, non-adjustable bimetallic thermostat (it clicks on/off at one factory-set point and cannot be read or recalibrated), while a heater built to survive being dropped, bumped by a fish, or used in saltwater uses a titanium sheath and a separate controller with a display. The buyer never asks about the heater's body material or whether the thermostat is a fixed click-switch or an adjustable digital one, but that is exactly what decides the failure mode (a cracked glass tube versus a safely contained one) and how precisely the temperature holds. Kept: `heater_build_material` and `thermostat_type` facets, which already existed in my draft before the seed and are validated by it. Dropped: a deeper guess about shared O-ring tooling across a brand's canister-filter line — plausible, the kind of thing this persona would say, but I have no source for it and it is not something a listing or spec sheet would carry, so it would be unbackfillable; left out rather than invented.

## Sources and what each supports

**Aquarium Co-Op, "Aquarium Heater Guide"** (enthusiast_community)
`https://www.aquariumcoop.com/blogs/aquarium/aquarium-heater-guide`
- **verbatim** (curled, saved as `https___www.aquariumcoop.com_blogs_aquarium_aquarium-heater-guide.html`): "The general rule of thumb is 5 watts (W) of heat per 1 gallon of water if a) you need to heat the water up to 10 degrees above room temperature and b) you're using an aquarium lid to retain warmth... For example, if you have a 29-gallon tank under those conditions, the suggested heater size is 100 watts."
- **verbatim**, same page: "If you own a larger tank that requires 200 watts of heat, we recommend purchasing two 100W heaters rather than one 200W heater. Using multiple, smaller heaters reduces the damage caused by equipment malfunction."
- Supports: the heater-wattage sizing convention and the split-heater failure-safety practice. Single source — I could not reach a second independent source for either number (Tetra, Fluval and Petco heater pages all blocked the fetch with 403/404; see "Could not reach"). Both are in `judgements`, not baked into a facet `range`, and confidence is medium, not high, because of the single source.

**Aquarium Co-Op, "Aquarium CO2 System"** (enthusiast_community)
`https://www.aquariumcoop.com/blogs/aquarium/aquarium-co2-system`
- **verbatim**: "we personally do not use drop checkers to chase the 'perfect' amount of 30 ppm of CO2, but instead we let nature and the plants tell us when they are happy." And: "Aquatic plants 'pearl' or visibly produce bubbles when the water is saturated with oxygen." And on timing: "we want to shut off the CO2 regulator when the aquarium light is off... program the regulator's timer to turn on 1–2 hours before the light comes on and turn off 1 hour before the light shuts off." And on diffusers: "Any CO2 diffuser intended for aquariums that can operate at approximately 40–50 psi should be fine."
- Supports: the 30 ppm figure as a widely repeated but explicitly disputed convention (the source itself argues against chasing it), pearling as the practical indicator, and the light-synced timer pattern. Single source; the 30 ppm number is flagged `sources_disagree: true` in judgements because the source disagrees with itself (repeats the number, then argues not to use it).

**Aquarium Co-Op, "Aquarium Air Pump"** (enthusiast_community)
`https://www.aquariumcoop.com/blogs/aquarium/aquarium-air-pump`
- **verbatim**: "Good surface agitation is the key to proper gas exchange in the aquarium, so that excess carbon dioxide... is released into the air and new oxygen from the air dissolves into the water." And: "Does my aquarium need an air pump? Not necessarily. Some types of filters – such as hang-on-back and canister filters – use an electric motor to move water and do not work with an air filter. However, air-driven filtration devices – such as sponge and undergravel filters – use air to move the water."
- Supports: why air pumps exist (gas exchange) and that they are only needed for air-driven filter formats, not motor-driven ones — the basis for the `equipment_type` branch that drops air-pump questions once a buyer has picked a motor-driven filter format.

**Aquarium Co-Op, "Fish Tank Filters: Which One Should You Get?"** (enthusiast_community)
`https://www.aquariumcoop.com/blogs/aquarium/fish-tank-filters-which-one-should-you-get`
- **verbatim**: on a hang-on-back filter, "the AquaClear filter I own has an adjustable flow rate... Because a power motor drives the water flow, there's a chance it can burn out if the filter runs dry or accidentally sucks up sand." Describes HOB, canister, sponge, internal and undergravel as the format set hobbyists choose between.
- Supports: `filter_format` values and the motor-driven-vs-air-driven distinction above. Descriptive, not a numeric threshold, so one source is enough here.

**Wikipedia, "Aquarium filter"** (primer)
`https://en.wikipedia.org/wiki/Aquarium_filter`
- **verbatim**: "Mechanical filtration is typically achieved by passing water through materials which act as a sieve... Dissolved wastes are more difficult to remove from the water. Several techniques, collectively known as chemical filtration, are used... the most popular being the use of activated carbon and foam fractionation... sterilization is accomplished by passing aquarium water through filtration devices which expose the water to high intensity ultraviolet light and/or... ozone gas."
- Supports: the three-plus-one filtration mechanism (mechanical, chemical, biological via media colonisation, and UV/ozone sterilisation) used in `mechanism.plain` and `mechanism.families`.

**Wikipedia, "Reef aquarium"** (primer)
`https://en.wikipedia.org/wiki/Reef_aquarium`
- **verbatim**: "many hobbyists advocate a water turnover rate of 10x: 10 x aquarium capacity in gallons = required flow in gallons per hour — this is mathematically equivalent to a complete aquarium water turnover every 6 minutes. This is a general rule with many exceptions." Also: "Protein skimmers use the foam fractionation process wherein air is introduced into a water stream creating microbubbles. Organic waste adheres to the surface... This group of elements... is characteristic of the Berlin Method."
- Supports: the reef-specific 10x turnover convention (used, with its own caveat, in `required_flow_gph` and a judgement) and the protein-skimmer/Berlin-Method description. Single source; I found no sourced freshwater-tank turnover multiplier anywhere I could fetch, so the register does not state one (see "Dropped").

**UL Standards & Engagement, product pages for UL 1563 and UL 778** (standards_body)
`https://www.shopulstandards.com/ProductDetail.aspx?productid=UL1563`, `...productid=UL778`
- **verbatim**, UL 1563: "UL 1563 ... Electric Spas, Equipment Assemblies, and Associated Equipment ... 1.1 These requirements apply to self-contained spas, including hot tubs and cold tubs. They also apply to field-installed equipment assemblies, blowers, and controls for use with... hot and cold tubs, swimming pools, non-self-contained spas, and exercise spas." No mention of aquariums anywhere in the scope.
- **verbatim**, UL 778: "UL 778 ... Motor-Operated Water Pumps ... 1.1 These requirements cover submersible and nonsubmersible motor-operated pumps intended to be used in ordinary locations..." Also no aquarium mention, but the scope is general enough to cover submersible aquarium pumps by default.
- Supports a correction to a common assumption I checked for and ruled out: there is no UL standard specifically titled for aquarium equipment. UL 1563 (often informally associated with "tank" electrics) is a spa/hot-tub standard; UL 778 is the closest generic standard most submersible aquarium pumps would fall under. This is the two-source basis for the `safety_listing` judgement.

### Could not reach

Tetra's heater guide (certificate error), Fluval's heater guide and canister-filter pages (403), Petco's and PetMD's aquarium-heater pages (403/404), Chewy's heater guide (loaded but the article body was not in the fetched HTML — JS-rendered), Marine Depot's and Bulk Reef Supply's skimmer/flow-rate articles (redirected to search results or 404), Reef2Reef and CoralVue (403), the Spruce Pets (402, paywalled from this network), CPSC's recall search (403). WebSearch could not be used at all (budget exhausted before the first query of this run). Protein-skimmer sizing and UV-sterilizer flow/wattage sizing specifically have no fetched number behind them anywhere in this register; both facets are marked `researched` with no invented range.

## Data points used for derived metrics

- `required_flow_gph`: `tank_size_gal * turnover_multiplier`. The only sourced multiplier is the reef-specific 10x (Wikipedia, verbatim, with its own "general rule, many exceptions" caveat). No freshwater multiplier is asserted anywhere in the JSON; the facet and metric text say turnover needed varies with stocking rather than giving a number I could not source.
- `annual_energy_cost`: `equipment_wattage_w / 1000 * hours_run_per_day * 365 * electricity_rate`. I did not hard-code `hours_run_per_day`, because filters and heaters commonly run continuously while lights run on a photoperiod timer the keeper sets, and I have no sourced figure for a typical photoperiod to state as fact (the CO2 article only says CO2 is timed to the light, not how long the light itself runs).

## Against the existing add-on schema

`zamana-expertise/data/schema-parts/supplies/pets/add-ons/aquatic_equipment.jsonc` currently has four fields: `flow_rate` ({value, unit: lph|gph}), `wattage` (number), `water_type` (enum freshwater/saltwater_marine/both/not_applicable/unspecified), `tank_size_rating` ({min, max, unit: l|gallons, raw}). Field-kind vocabulary per `zamana-expertise/AGENTS.md`: vertical anchor, category quality currency, hard filter, sizing.

- `flow_rate` and `wattage` map directly onto this register's `rated_flow_rate` and `equipment_wattage_w` — keep as-is; both are category quality currency (dense, comparable, brands always state them for powered equipment) and I would happily commit to augmenting either when a listing omits it.
- `water_type` maps directly onto the `water_type` split facet — keep. This is the schema's vertical anchor for this leaf: nearly everything else (skimmer relevance, heater material, flow target) branches off it.
- `tank_size_rating` maps onto `tank_size_gal` — keep; it is a hard filter (a 10-gallon tank and a 300 W heater rated for 100+ gallons is a real mismatch a buyer filters on).
- **Missing and worth adding**: `equipment_type` (categorical: filter, heater, light, water_movement, specialty_life_support). The current schema has no field that says what kind of aquatic equipment a row even is — every other field is conditional on knowing this first, and it is a vertical anchor by the AGENTS.md test (guaranteed on every row, and the taxonomy breadcrumb/title state it almost without exception). I would propose this as the single highest-value addition.
- **Missing, lower priority**: `filter_format` (hang_on_back/canister/internal/sponge/undergravel/sump) when `equipment_type = filter` — category quality currency for that subset, always in the title. `safety_listing` (ul_listed/etl_intertek_listed/ce_marked_only/none_stated) as a hard filter for anyone buying something that runs submerged and plugged in.
- **Noise I would not add**: heater build material and thermostat type are real facets in this register but are closer to Jev/high-signal-markdown material by AGENTS.md rule 3 (a sentence in the listing text, not a dense cross-brand currency I'd commit to backfilling for every row) — I left them out of the schema proposal and kept them only as register facets with `backfill_cost: low` to `medium`, not as a recommended schema field.

## Branches

- `equipment_type = filter` → ask `filter_format`, `rated_flow_rate`; `heater_build_material`, `thermostat_type`, `light_intensity`, `light_spectrum_type`, `photoperiod_programmable` become irrelevant. Traced to: filters are sized by GPH against tank turnover (Wikipedia reef page, and the Aquarium Co-Op filter article's HOB/canister/sponge/internal/undergravel typology); a filter has no thermostat or light spectrum. SUPPORTED.
- `equipment_type = heater` → ask `heater_build_material`, `thermostat_type`; `filter_format`, `rated_flow_rate`, `light_intensity`, `light_spectrum_type`, `photoperiod_programmable` become irrelevant. Traced to: the Aquarium Co-Op heater guide's wattage/thermostat framing and the seed's material/thermostat observation; a heater has no filter format or flow rating of its own and does not emit light. SUPPORTED.
- `equipment_type = light` → ask `light_intensity`, `light_spectrum_type`, `photoperiod_programmable`; `filter_format`, `rated_flow_rate`, `heater_build_material`, `thermostat_type` become irrelevant. Traced to: the Wikipedia aquarium-lighting page's spectrum/plant-growth discussion; a light has no flow rate, filter format or heating thermostat. SUPPORTED.
- `equipment_type = water_movement` → ask `rated_flow_rate`; `heater_build_material`, `thermostat_type`, `light_intensity`, `light_spectrum_type`, `photoperiod_programmable` become irrelevant. Traced to: the Aquarium Co-Op air-pump article (air pumps and powerheads both move water/air and are rated by flow, nothing else on this list applies to them). SUPPORTED.
- `water_type = saltwater_marine` → ask `specialty_gear_type`, `heater_build_material` (toward titanium). Traced to: Wikipedia's Berlin-Method/protein-skimmer passage (skimmers are a marine-tank fixture, not a freshwater one) plus the seed's titanium-heater observation, which specialist sellers market specifically for saltwater corrosion resistance — this second leg is a chain (titanium resists saltwater corrosion; corrosion risk is specific to `water_type = saltwater_marine`) rather than a single stated sentence, written out here per the brief. WEAK-to-SUPPORTED: the corrosion-resistance claim is general materials knowledge from the seed persona, not a fetched source, so I kept the branch but did not state a numeric corrosion claim anywhere in the JSON.
- `water_type = freshwater` → `specialty_gear_type` becomes irrelevant for the `protein_skimmer` value specifically (CO2 systems and UV sterilizers still apply to freshwater planted/quarantine tanks). Traced to: the same Berlin-Method passage, read the other way. SUPPORTED.

## Trimmed detail

- `rated_flow_rate`: the Aquarium Co-Op filter article's AquaClear anecdote ("flow rate adjustable... can burn out if the filter runs dry") is colour, not a number, so it stays here rather than in `why_experts_care`.
- `heater_build_material`: the seed's full riff on sealed bimetallic thermostats and glass-tube failure modes is design commentary, not a sourced claim; the facet definition keeps the one-sentence version and the rest stays in this file.
- CO2 diffuser operating pressure (approximately 40–50 psi, Aquarium Co-Op verbatim) did not make it into a facet — it is a plumbing detail of one sub-type (`specialty_gear_type = co2_system`) three branches deep, and adding a facet for it would be padding for how little of the catalog it narrows.

## Dropped

- A separate `par_umol_m2s` facet (the seed's direct harvest-date analogue) — folded into `light_intensity`'s `why_experts_care` instead of standing alone, to avoid two facets describing the same underlying property (see Seed).
- A freshwater filter-turnover multiplier (commonly quoted in the hobby as "4 to 6x tank volume per hour") — every source I could reach either blocked the fetch or did not state a number; rather than invent one, `required_flow_gph` only states the sourced reef 10x figure and says the freshwater multiplier depends on stocking.
- A `gfci_recommended` boolean — manufacturer instructions near-universally recommend a GFCI-protected outlet for anything running submerged and plugged in, but that is constant advice, not a property that varies between products, so it fails the "does this narrow the catalog" test for a facet. Left as a line inside `mechanism`/judgements instead, not a facet.
- UV-sterilizer flow-rate-to-wattage sizing and protein-skimmer gallon ratings — real expert facets (hobbyists do size both against tank gallons), but every source I tried for the actual numbers blocked the fetch or returned a 404; `specialty_gear_type` exists as a categorical facet so these product types are at least identifiable, but no numeric sizing rule for either is in this register.

## Corrections (2026-10-26)

- Fixed `water_type=freshwater` branch: removed `makes_irrelevant: ["specialty_gear_type"]` (was wrongly dropping the whole facet, contradicting the CO2/UV note above) and replaced with `then_ask: ["specialty_gear_type"]`; schema only gates at facet level, not per-value, so `protein_skimmer` as a saltwater-only value stays documented in the facet's own `why_experts_care` rather than mechanically blocked.
- Added `equipment_type=specialty_life_support` branch (`then_ask: specialty_gear_type, co2_regulator_stage`; makes the other four equipment types' facets irrelevant) — this value had no branch at all before.
- Reworded `equipment_type`'s question/`cold_start_question` to "Filter, heater, light, water flow, or specialty gear?" so the 5th legal value has wording in the cold-start question.
- Added `co2_regulator_stage` facet (single_stage/two_stage), evidence `aquariumcoop_co2_guide` (verbatim, already cited) + new `wikipedia_pressure_regulator` (verbatim: two-stage compensates better for falling supply pressure, the general-engineering basis for "end-of-tank dump" prevention).
- Added `heater_overtemp_protection` boolean facet, evidence `aquariumcoop_heater_guide` (verbatim, already cited: "automatic over-temperature protection") + new `wikipedia_thermal_cutoff` (verbatim, general mechanism).
- Added vocabulary entries: Actinic, Sump, UL, ETL.
- Added a JS-rendering caveat to `thermostat_type`'s `backfill_note` (five brand pages tried, all blocked).
- Rejected: the checker's literal wording "narrow to make only the protein_skimmer value irrelevant" — `makes_irrelevant`/`then_ask` in this schema operate on whole facets only (see validate.py), so true per-value irrelevance isn't expressible; the `then_ask` fix above is the closest correct behavior (specialty_gear_type is now reachable for freshwater, which was the actual bug) and the value-level caveat is left as documentation, matching how other categorical facets in this register (e.g. `light_spectrum_type`) already handle values that don't universally apply.
