# Flotation & Life Safety: research notes

Date: 2026-10-25. Scope: personal flotation devices (PFDs) — life jackets and buoyancy
aids, in all three inflation designs (inherent foam, inflatable manual/automatic,
hybrid) — plus throwable life-safety devices (ring buoys, horseshoe buoys, boat
cushions) that are never worn. In the Zamana taxonomy this sits under
`supplies > active > flotation`, matching the add-on at
`zamana-expertise/data/schema-parts/supplies/active/add-ons/flotation.jsonc`
(`buoyancy_rating`, `pfd_classification`, `inflation_type`).

Explicitly out of scope, left to sibling leaves under `supplies > active` (checked
against `catalog.json`):
- Swim-training flotation (kickboards, pull buoys) and snorkel/mask/fin gear → `diving`
  (Diving, Snorkeling & Swim).
- Pool lounge floats, noodles, inflatable toys and inflatable pool furniture → `pool-accessories`
  (Pool, Spa & Sauna Accessories). Note: inflatable pool "toys" (arm floats, water
  wings) are explicitly *not* life-safety devices — see the AAP judgement below — so
  even though they float, they stay with pool-accessories, not here.
- Actual boats, kayaks, canoes, paddleboards → `watercrafts`.
- Wetsuits and drysuits (thermal protection, not flotation per se, though some wetsuits
  add buoyancy) → `wetsuits`.
No sibling leaf's products were pulled into this register; the three above are the
only places an adjacent leaf could plausibly claim overlap, and in each case the
distinguishing test is: is the device's *stated purpose* life safety (and, for
wearables, USCG/ISO-graded), or is it recreation/training that happens to float.

Quote labels: **verbatim** = the sentence in quotation marks is exactly what my own
`curl` + HTML-strip + `grep`/`sed` pass showed in the fetched page text (never a
WebFetch summary). **fetched excerpt** = WebFetch's model summary, used only for
scope/context, never for a number in category.json. **search excerpt** = none used;
WebSearch reported its session budget exhausted (200 of 200 calls) on the first two
queries of this run, before any results came back, so every claim below is from a
direct `curl` fetch, read as raw text.

## Seed

Seed script output, 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 facet, as in examples/tyres-treadwear.md>

=== Persona ===
A sommelier, who thinks in origin, process and how a thing changes over time
```

1. What is the flotation equivalent of treadwear? The performance-level Newton number
   (50/70/100/150/275) is printed on every current-label jacket and still needs a
   judgement attached: it reads straight across the retiring Type I-V system and
   against the international ISO 12402 standard, but, like treadwear, the number alone
   does not tell you which jacket is "better" — a Level 50 is deliberately lower-rated
   for calm water, not a worse jacket. Survived the data check: both the regulator
   (USCG) and a boating-safety nonprofit (BoatUS Foundation) state the Level numbers,
   their Newton-to-pound conversion, and the harmonization-with-Europe rationale.
   Kept as the `performance_level` facet.
2. The sommelier persona (origin, process, how a thing changes over time) pointed
   straight at the one thing a typical buyer never asks about a life jacket: how its
   buoyancy changes over time after purchase. Foam degrades (oil, UV, repeated
   compression) and both sources say to test it yearly and discard it if waterlogged
   or damaged; inflatables depend entirely on an unspent CO2 cartridge and a leak-free
   bladder, checked every two months per BoatUS. This is why `inflation_type` carries
   so much of the register's "why experts care" text, and why it is a judgement
   (`Foam PFDs hold their rated buoyancy for years...`) rather than a single discarded
   idea. Dropped: a numeric "foam age" or "years in service" facet — neither source
   gives a figure, only "test yearly, discard if damaged," so it stayed prose/judgement
   rather than becoming an invented numeric range.

## Sources and what each supports

### uscg_wearing — regulator, verbatim, fetched as raw text

URL: `https://uscgboating.org/recreational-boaters/life-jacket-wear-wearing-your-life-jacket.php`
(US Coast Guard Boating Safety Division, CG-BSX-2). Fetched with `curl --compressed`,
HTML-stripped with a small Python regex pass, saved to
`.../scratchpad/flotation/lifejacket_wearing.txt`.

Key verbatim sentences I read in that text file:
- "Most adults only need 7 to 12 pounds of buoyancy (31 to 53 Newton) to keep their
  heads above water." → supports why the performance-level floor exists at all;
  context only, not used as a per-product number.
- "Wearable PFDs are categorized by performance Type and/or performance Level. Type I,
  II, III, V Level 50, 70, 100, 150 The number in performance Level Devices (Level 70)
  indicates the minimum buoyancy of the device. Buoyancy of Level Devices is measured
  in Newton (N). 70 Newtons equals 15.74 pounds of buoyancy." → `performance_level`
  facet values and definition; the 70N/15.74lb conversion.
- "Level 50 - intended for use by those who are competent swimmers and who are near to
  bank or shore... Level 70 - intended for use by those who have help or a means of
  rescues close at hand, or who are near bank or shore... Level 100 - intended or those
  who may have to wait for rescues but are likely to do so in sheltered water... Level
  150 - intended for general application or for use with foul weather clothing. It will
  turn an unconscious person into a safe position... Level 275 - intended primarily for
  offshore use under extreme conditions." → the `use_environment` split's three buckets
  and the `turns_face_up` facet's Level 150/275 threshold.
- "Lifejackets are separated into four broad categories based on weight: Adult - users
  with a weight greater than 88 lbs. Youth - users with a weight over 55 lbs. and less
  than or equal to 88 lbs. Child - users with a weight over 33 lbs. and less than or
  equal to 55 lbs. Infant - users with a weight less than or equal to 33 lbs." →
  `user_weight_category` values and the 33/55/88 lb breakpoints in its backfill_note.
- The weight-category buoyancy table: "Adult I II & III V 70 22 lb. 15.5 lb. 15.5 to 22
  lb. 70 N ... Throwable: Cushion Ring Buoy IV 20 lb. 16.5 & 32 lb." and the inflatable
  table "Adult I & II III V 34 lb. 22.5 lb. 22.5 to 34 lb." and the hybrid table "Adult
  II & III V 70 10 lb 7.5 lb. 40 N 22 lb. 22 lb. 70 N" → cross-checked against
  boatus_types below (used for notes, not independently placed as a facet range, since
  the register uses the Level labels rather than restating every lb figure).
- "Wearable Personal Flotation Device (PFD) Design: There are four basic design types:
  Inherent, Inflatable, Hybrid, and Special Purpose. There are two main classes of USCG
  Approved Wearable PFDs. Those which provide face up in-water support to the user
  regardless of physical conditions (life jacket). Those which require the user to make
  swimming and other postural movements to position the user with the face out of the
  water (buoyancy aid)." → `inflation_type` values and the `turns_face_up`/"buoyancy
  aid" vocabulary definition.
- "Inflatable life jackets and buoyancy aids must have a full cylinder and all status
  indicators on the inflator must be green, or the device is NOT serviceable" and
  "Inflatable life jackets and buoyancy aids are not appropriate for weak or
  non-swimmers" → `age_use_restriction` facet and its judgement.
- "Foam filled lifejackets or buoyancy aids should be tested for wear and buoyancy at
  least once a year. Waterlogged, faded, or otherwise damaged devices should be
  discarded." → the "foam degrades over time" judgement from the seed step.
- "Type V - is approved for restricted uses or activities such as boardsailing, or
  commercial white-water rafting... The label indicates whether a particular design of
  Type V can be used in specific application" and "use a life jacket and buoyancy aid
  marked for water skiing" / "use a life jacket and buoyancy aid marked for water
  skiing or PWC use" → `special_use_approval` values.

### boatus_types — primer (BoatUS Foundation, NASBLA-approved boating-safety nonprofit), verbatim, fetched as raw text

URL: `https://www.boatus.org/life-jackets/types/`. First `curl` attempt returned
gzip-compressed bytes because I omitted `--compressed`; re-fetched with
`curl --compressed` and confirmed with `file` that the second download was real UTF-8
HTML before stripping tags. Saved to `.../scratchpad/flotation/boatus_types.txt`.

Key verbatim sentences:
- "Minimum Buoyancy 22 lbs. for adults (11 lbs. for child size)" (Type I), "15.5 lbs.
  for adult size" (Type II and III inherent), "34 lbs. for adult size" (Type II
  inflatable), "22.5 lbs. for adult size" (Type III inflatable), "15.5 to 22 lbs. for
  adult size" (Type V) → cross-confirms the uscg_wearing buoyancy table; used to double
  source the Type-to-pound figures in notes (not independently re-stated as a facet
  range in the JSON, since the register surfaces the Level number instead).
- "A Type IV is designed to be thrown to an overboard victim or to supplement the
  buoyancy of a person overboard. It is not to be worn... Minimum buoyancy: 16.5 lbs.
  for ring buoy or 18 lbs. for boat cushion." → `device_role` = throwable, and the
  "never worn" framing in that facet's `why_experts_care`. (Note: boatus's cushion
  figure, 18 lb, differs from uscg_wearing's table figure, 20 lb — a real disagreement
  between the two sources on that one sub-number; neither figure went into the JSON
  because the register does not carry a throwable buoyancy-minimum facet at all, only
  the device_role/mount_or_carry_style distinction.)
- "A Type IV throwable device can be a square style, or a ring buoy or horseshoe buoy
  mounted on deck." → `mount_or_carry_style` values ("deck mounted", "wall or rail
  bracket" generalizes this plus common dock/rail brackets, "handheld bag" covers
  throw bags/cushions you hold rather than mount).
- "When activated, a CO2 cartridge is pierced, releasing gas to inflate the device.
  Water-activated models inflate automatically when submerged in water. Manual units
  are activated by yanking a pull-tab." → `inflation_type` values
  (`manual_inflation`/`automatic_inflation`) and definition.
- "Check for leaks every two months; inflate life jacket orally and leave it overnight
  to check for leaks... Immediately replace any spent CO2 cartridges with new ones." →
  the inflatable-upkeep half of the first judgement and the inflation_type tradeoff.
- "Inflatable PFDs are not meant for children under the age of 16." (stated three
  times, once each under Type II inflatable, Type III inflatable, and the general
  inflatable intro) → `age_use_restriction`, and specifically *why* I did not extend
  that restriction to the Hybrid section below.
- "Hybrid (Foam & Inflation)... Have 7.5 lbs. of built-in foam buoyancy and can be
  inflated to 22 lbs." — this hybrid section does **not** repeat the under-16
  sentence that appears in both inflatable sections. That asymmetry is the direct
  textual basis for the `age_use_restriction.backfill_note` line "Not stated by our
  sources for foam or hybrid designs, so leave unset rather than assume" and for the
  judgement note "neither extends it to hybrid designs."
- "New Life Jacket Labels and Icons... certain life jackets have a new style of label
  on the inside... this new labeling process is also referred to as life jacket label
  harmonization, which is an effort to make them more universally understood and
  accepted, especially in Canada and Europe." and "This is a metric measurement in
  Newtons (70N is roughly 15 lbs. of floatation). Newtons are used so that it's
  consistent with European and Canadian standards." → the ISO 12402 vocabulary entry
  and the ISO/USCG-harmonization line in the visual grammar's `origin`.
- "In 2014, the U.S. Coast Guard removed the 'Type' codes from the Code of Federal
  Regulations... Going forward, these devices will be referred to as either
  'throwable' or 'wearable' and have a performance category indicated by an icon." →
  independent confirmation of the `device_role` wearable/throwable vocabulary, straight
  from the regulatory history, and of the Type-to-Level transition described in
  `performance_level`.
- "For the time being, most all of the life jackets on the market today in the United
  States are Level 70 life jackets." → the medium-confidence, single-source judgement
  about Level 70's market share. I deliberately kept this at `confidence: medium` and
  said in the note it is one nonprofit's read, not a measured share, because I have
  no second source and no sales data.

### aap_healthychildren — academic/professional body, verbatim, fetched as raw text

URL: `https://www.healthychildren.org/English/safety-prevention/at-play/Pages/Water-Safety-And-Young-Children.aspx`
(American Academy of Pediatrics). Fetched with `curl --compressed`, stripped, saved to
`.../scratchpad/flotation/healthychild.txt`.

Verbatim sentence: "Use life jackets near lakes and rivers Children should always wear
life jackets when in, on, or near natural bodies of water, such as lakes or rivers.
Make sure they fit properly and are approved by the U.S. Coast Guard. Children and
others who lack strong swim skills should also wear life jackets when at a pool or
water park. Avoid floaties, water wings or inflatable toys. These can deflate and do
not prevent drowning."

This is the only source behind the "arm floats/water wings are not life jackets"
judgement, which is why that judgement is flagged `confidence: high` but with the note
"only one source states this directly; we could not independently verify it with a
second source in the time available." I tried to add a second source (CPSC's "Not a
Life Jacket" consumer-product release and poolsafely.gov) — both returned HTTP 403 on
every fetch attempt, and the Wayback Machine's availability API reported no snapshot
for the exact CPSC URL I had. I did not weaken or drop the judgement, since AAP is a
professional medical body and the claim is widely known, but I flagged the single-source
status rather than overstate it as independently verified, per the house rule that a
search-excerpt-only number does not go in the JSON — this is not a search excerpt (it
is a verbatim fetched sentence), but it is still only one source, so it stays a
judgement with a stated caveat rather than becoming a hard fact.

## Sources attempted and blocked (so a later run does not repeat them)

Retail listings: `amazon.com/s?k=life+jacket` returned HTTP 503 with an explicit
anti-bot message; `basspro.com` returned 403; `academy.com`'s product-detail URL (a
guessed slug) returned 404 with only the nav shell, not the product. This matches the
pattern noted in `checks.md` ("Retail listings... blocked fetches for every author"),
which is why every spec in this register that a scraper would need from a live listing
is marked `researched` rather than `listing`, except `user_weight_category` and
`inflation_type`, which I judged `listing` on the strength of how PFD titles are
conventionally written (see "Against the existing add-on schema" below) rather than on
a confirmed fetch — flagged here explicitly since I could not verify it directly.

Manufacturer/community sources tried and blocked: `nrs.com` product and search pages
are JS-rendered (no static product links in the HTML I fetched); `rei.com` timed out
(curl exit 1, no response) on two attempts; `americanwhitewater.org` returned 404 on
three guessed wiki/safety URLs; `rnli.org` and `rya.org.uk` (the UK/ISO-side
equivalents of BoatUS) returned 403/404. None of these contributed any claim in
category.json. WebSearch had already reported its session budget used before any of
these fetch attempts, so I could not search for the correct URLs either; I worked from
likely paths based on general knowledge of these sites' structure, which did not pan
out for several of them.

## Data points used for derived metrics

None. I looked for a real mental-math formula an expert computes from listing fields —
cost per Newton of buoyancy, weight-margin-to-capacity, cost per gram of CO2 — and
could not source one: buoyancy minimums are regulatory floors, not a quality dial you
buy more of per dollar, and no source gave a number to compute a margin against. I left
`derived_metrics` out of category.json rather than invent a formula, per "never pad...
to look thorough."

## Against the existing add-on schema

Existing add-on (`supplies/active/add-ons/flotation.jsonc`):
```
buoyancy_rating: { value: number|null, unit: enum[n, lb]|null }
pfd_classification: string|null       // USCG type — regulatory gate
inflation_type: enum[inherent_foam, manual_inflation, automatic_inflation, hybrid, na, unspecified]|null
```
Field-kind vocabulary from `zamana-expertise/AGENTS.md`: vertical anchor, category
quality currency, hard filter, sizing (variant boundary), or it is noise/markdown
material.

| Existing field | This register's read | Proposed kind | Note |
|---|---|---|---|
| `pfd_classification` (free string) | Matches `performance_level`, but a free string invites "Type III", "70N", "Level 70", "III" all meaning overlapping things for the same product. | Hard filter, but as an **enum** of the five Level values (or the retiring five Type letters, both held so old-label stock still matches), not a free string. | Buyers filter on this exactly; a free string cannot be filtered or sorted reliably. |
| `buoyancy_rating` (`{value, unit: n\|lb}`) | Mostly redundant with a Level-enum `pfd_classification`, since Level 70 *is* 70 N. Only earns its keep for throwable devices, which have no Level/Type-Level mapping and are stated in lb only (see the boatus/uscg 18 lb vs 20 lb disagreement above). | Keep as **category quality currency**, but scope its `why we'd augment it` note to throwables and to older Type-labeled stock where no Level number exists yet. | For current Level-labeled wearables, deriving a numeric N value from the enum is cheap; for throwables it is the only number there is. |
| `inflation_type` enum | Matches this register's `inflation_type` facet almost exactly. One real gap: the enum has no way to flag `age_use_restriction` (not for under 16 / weak swimmers), which follows from `manual_inflation`/`automatic_inflation` but, per the boatus text, not from `hybrid`. | Keep the enum as is; **do not** fold `age_use_restriction` into it as a sixth value — it is a derived boolean, not a floatation mechanism, so it belongs in markdown or a thin derived field, not a new enum member. | Confirms the existing four-plus-na/unspecified enum is the right shape; no structural change needed here. |
| *(missing)* `use_environment` / activity-restriction | Not in the add-on at all. `special_use_approval` (water skiing/PWC, whitewater/commercial, sailboarding) is a real hard filter — a Type V ski vest cannot substitute for a general Type III, and vice versa, for carriage-requirement purposes. | Add as a **hard filter** enum, default "general boating" when nothing restrictive is stated. | Medium backfill cost (label-stated, not always repeated on brand pages), so backfill the top N first. |
| *(missing)* user weight **range** | `active-standard.jsonc`'s `sizing.max_user_weight` is a single ceiling. A PFD's weight band is a **range** (e.g. 55 to 88 lb for youth), and the floor matters as much as the ceiling — a child in a youth-size jacket, above the floor, is still under-protected relative to an adult jacket, but a child *below* the floor of a youth jacket is in the wrong size the other way. | Change `sizing.max_user_weight` to a `{min, max, unit}` range for this category (and likely for any active-gear leaf with a fitted weight band, not just flotation). | This is the one concrete structural gap found in this run; everything else fits the existing shapes. |
| Noise candidates | None found to cut. The add-on is already lean (three fields); nothing in it restates a title, is visually-derived, or duplicates a standard field. | — | Unlike some other active leaves, this add-on had no obvious cruft to remove. |

## Branches

Traced to the specific sentence or stated fact behind each leg (schema's `when` /
`then_ask` / `makes_irrelevant`):

- **`device_role` = throwable → ask `mount_or_carry_style`, drop fit/inflation/rating
  facets.** Traced directly to boatus_types: "It is not to be worn" (Type IV) plus "A
  Type IV throwable device can be a square style, or a ring buoy or horseshoe buoy
  mounted on deck." A device that is never worn has no weight band, no inflation
  mechanism and no rated performance level in the sense those facets describe wearable
  PFDs; what is left to ask is only where it lives (mount_or_carry_style).
- **`device_role` = wearable → ask `user_weight_category`, `inflation_type`,
  `use_environment`.** The complement of the above: uscg_wearing's "Wearable Personal
  Flotation Device (PFD) Design: There are four basic design types..." and the four
  weight-band sentence both apply only to worn devices.
- **`inflation_type` = manual/automatic → ask `age_use_restriction`.** Traced to
  boatus_types's three repetitions of "Inflatable PFDs are not meant for children under
  the age of 16" and uscg_wearing's "not appropriate for weak or non-swimmers," both of
  which appear only in the sections describing manual and automatic (CO2-triggered)
  inflation, never under the inherent-foam sections.
  **Single-leg chain, written out:** inflation_type is manual_inflation or
  automatic_inflation → that is the "Inflatable" category both sources describe → both
  sources state the under-16/non-swimmer restriction specifically for that category →
  therefore age_use_restriction should be surfaced next. No second hop needed; the
  restriction is stated directly against the inflation mechanism, not inferred through
  an intermediate fact.
- **`inflation_type` = inherent_foam → drop `age_use_restriction`.** Direct absence:
  neither source's foam/inherent sections mention an age or swimmer restriction at all,
  so the facet should not be surfaced for that answer. (I did not add a `hybrid` leg
  either way, for the same reason stated in the facet's backfill_note: the restriction
  sentence is not repeated in boatus's Hybrid section, so I cannot trace it there and do
  not assume it.)
- **`use_environment` = rough or offshore → ask `performance_level`,
  `turns_face_up`.** Traced to uscg_wearing: "Level 150 - intended for general
  application or for use with foul weather clothing. It will turn an unconscious person
  into a safe position..." and "Level 275 - intended primarily for offshore use under
  extreme conditions." Both the level number and the face-up-turning fact are stated
  together for exactly this environment band.
- **`use_environment` = near shore → drop `turns_face_up`.** Traced to the Level 50
  description: "intended for use by those who are competent swimmers," i.e. a
  conscious, capable wearer by design, so whether the device turns an unconscious
  wearer face up is not the deciding fact at this end of the scale.
  I did not write a leg for "open water" (Level 100, "may have to wait for rescues...in
  sheltered water") either way, because the source does not say turning-face-up becomes
  relevant or irrelevant there specifically; it sits between the two stated ends, so I
  left it uncovered rather than guess.

No branch leg was dropped after drafting; each of the six legs above traces to a
sentence quoted above, and I did not write any leg I could not trace this way (several
candidates — a `hybrid`-side age restriction leg, an `open water`-side turns_face_up
leg, a weight-category-driven inflation-type leg — were considered and explicitly not
written, for the reasons given inline above).

## Trimmed detail

- Throw-line / heaving-line length (ring buoy rope, whitewater throw-bag rope) is a
  real spec rescue trainers care about, but I could not reach a source with sourced
  figures (nrs.com's product pages are JS-rendered with no static links I could follow,
  and americanwhitewater.org returned 404 on every guessed URL). Rather than invent a
  range, I left it out of the facets entirely; `mount_or_carry_style` covers the
  placement decision without needing a line-length number.
- The boatus/uscg disagreement on boat-cushion minimum buoyancy (18 lb vs 20 lb) is
  recorded above under boatus_types but does not appear as a number anywhere in
  category.json, since the register does not carry a throwable buoyancy-minimum facet.
- ISO 12402's own text (the actual international standard document) was not fetched —
  ISO standards are paywalled — so the ISO 12402 vocabulary entry and the "harmonized
  with Europe/Canada" claim are sourced to boatus_types's and uscg_wearing's own
  descriptions of it, not to ISO directly. If a future pass has access to a UK/EU
  source (RNLI, RYA) both returned 403/404 on every URL I guessed.

## Script notes

`validate.py`, `render.py` and `viewer.py` all ran clean on the first pass after one
summary-length fix (62 words against the 60-word cap); no script bugs to report.

## Corrections (2026-10-26)

- `performance_level.why_experts_care`: dropped the unresolved "below 70N not Coast Guard approved" line; re-fetched both sources (fresh curl), confirmed boatus_types both lists 50 among numbers on new CG-approved labels and separately says sub-70 isn't approved — an internal contradiction — while uscg_wearing treats Level 50 as an ordinary option; added a `sources_disagree: true` judgement instead of asserting either way.
- `performance_level.backfill_cost`: raised `low` to `medium`; its own backfill_note already admits a scrape-miss risk, same shape as the air-purifier precedent cited in check.md.
- `vocabulary` "ISO 12402" entry and the USCG/ISO performance scale `origin`: re-grepped both fetched pages for "ISO" and "12402" — no hits in either — so renamed the vocabulary entry to "Label harmonization" and rewrote both texts to claim only the general Europe/Canada harmonization boatus_types actually states.
- `age_use_restriction.evidence` and the matching judgement: re-cited to `boatus_types` alone (only source stating the age-16 figure; uscg_wearing's nearby age number is the separate under-13 mandatory-wear law) and lowered that judgement's confidence to `medium`; backfill_note now says so explicitly.
- `turns_face_up.backfill_note`: added a line flagging that Level 275's turning call is inferred from the stated "higher level, more turning ability" trend, not a direct quote the way Level 150's is.
- `inflation_type.backfill_note`: added a line flagging the `inherent_foam` → drop `age_use_restriction` leg as an absence-based inference, matching the honesty already given to the omitted hybrid leg.
- `use_environment` split question and facet `cold_start_question`: changed "offshore conditions?" to "rough or offshore?" so the question's own wording matches the facet's `"rough or offshore"` value exactly.
- `references.aap_healthychildren.title`: re-fetched the URL; its `og:title` is now "Drowning Prevention for Curious Toddlers: What Parents Need to Know", not "Water Safety and Young Children". Updated the title field; the cited sentence is still on the page, unchanged.
- Rejected: check.md's Part D note on `user_weight_category`/`inflation_type` `source: listing` was not a "Required fix" (no numbered item), and no retail listing was reachable today either (same blocks as before), so left as is per notes.md's existing disclosure.
