This was generated by AI during triage.
Context. SalishSea.io — a sister project in the Acartia data cooperative — maps marine-mammal occurrences across the Salish Sea. We'd like to surface OrcaSound acoustic activity on the map as first-class occurrences alongside visual sightings.
What we found. The /api/json/bouts endpoint is the right grain to consume — bouts are human-curated, unlike raw detections. Of ~196 bouts, the 134 biophony ones carry the biological signal. Reading their name text, the mix is roughly:
- ~70% killer whales, often identified to ecotype and pod (e.g. "SRKW J pod", "Bigg's T090s", "T419, T420, T421")
- ~9 humpback
- a tail of sea lion, fish, birds, mystery / OrcaHello false-positives, and some non-animal sounds mistagged as
biophony
The problem. All of that identity lives only in the free-text name. A downstream consumer has to regex names to learn whether a bout is even a marine mammal, let alone which species/pod — fragile and lossy, and it discards the moderator's knowledge.
Proposal. Establish a small controlled tag vocabulary for bouts and apply it during curation. Bouts already have a tags relationship exposed on the JSON:API (Bout includes [:feed, :tags]), so no new endpoint or schema change is needed — only slug conventions and a moderator habit. Suggested namespaces:
ecotype:srkw, ecotype:biggs
pod:j, pod:k, pod:l
matriline:t090 (etc.)
species:humpback, species:steller-sea-lion, species:harbor-seal, species:ca-sea-lion, …
unconfirmed / false-positive for the mystery bucket, so consumers can drop those cleanly
With that in place, SalishSea.io mirrors bouts + their tags verbatim and translates the tags into our taxonomy at ingest — no name-parsing, and the moderator's judgment is preserved end to end.
Happy to help define the vocabulary and seed the tags if that's useful. Tracking issue on our side: salish-sea/salishsea-io#178.
Context. SalishSea.io — a sister project in the Acartia data cooperative — maps marine-mammal occurrences across the Salish Sea. We'd like to surface OrcaSound acoustic activity on the map as first-class occurrences alongside visual sightings.
What we found. The
/api/json/boutsendpoint is the right grain to consume — bouts are human-curated, unlike raw detections. Of ~196 bouts, the 134biophonyones carry the biological signal. Reading theirnametext, the mix is roughly:biophonyThe problem. All of that identity lives only in the free-text
name. A downstream consumer has to regex names to learn whether a bout is even a marine mammal, let alone which species/pod — fragile and lossy, and it discards the moderator's knowledge.Proposal. Establish a small controlled tag vocabulary for bouts and apply it during curation. Bouts already have a
tagsrelationship exposed on the JSON:API (Boutincludes [:feed, :tags]), so no new endpoint or schema change is needed — only slug conventions and a moderator habit. Suggested namespaces:ecotype:srkw,ecotype:biggspod:j,pod:k,pod:lmatriline:t090(etc.)species:humpback,species:steller-sea-lion,species:harbor-seal,species:ca-sea-lion, …unconfirmed/false-positivefor the mystery bucket, so consumers can drop those cleanlyWith that in place, SalishSea.io mirrors bouts + their tags verbatim and translates the tags into our taxonomy at ingest — no name-parsing, and the moderator's judgment is preserved end to end.
Happy to help define the vocabulary and seed the tags if that's useful. Tracking issue on our side: salish-sea/salishsea-io#178.