Fisheries VMS Domain · Lesson 14 of ∞ · Second pass · ← Lesson 13

Second pass · reading maturity, not just requirements

Documents and notifications: a skeleton next to a gap

Lesson 12 asked why C-066..C-076 matters legally. This lesson asks how it actually moves — and reads e-Boat's own code to find two very different answers hiding under one requirement group.

ToR §5.10–5.11 (C-066..C-076, 11 requirements) bundles "documents" and "notifications" together, and the compliance matrix gives nothing beyond that one line — no narrative, no per-requirement breakdown. That's worth naming as a real documentation gap before going further, not something to paper over: this lesson had to be built by reading the code directly rather than any written spec.

Notifications: three audiences, in world practice

A "notification" in fisheries MCS isn't one thing — it's at least three different flows depending on who's on the receiving end:

AudiencePurposeExample
Regulator / inspectorDispatch attention to a detected violationAn internal alert routing a geofence breach to the officer on duty
Vessel / masterPreventive — warn before a violation happensParks Australia/AFMA's real-time alert service, live since 2014, which messages a vessel master and licence holder the moment they enter a marine park where their gear is prohibited
PublicLet anyone report a suspected violationNOAA's 24/7 Enforcement Hotline for reporting a federal marine resource violation

Sources: NOAA Fisheries — Report a Violation; the AFMA alert service is referenced via "Preventing noncompliance in marine protected areas using a real-time alert system".

Why the distinction matters for e-Boat

The vessel-facing (preventive) case is the interesting one against everything covered so far: it means a "notification" can fire before a violation exists, aimed at stopping it, not just documenting it after the fact. Worth checking, when reading e-Boat's own notification requirements, which of these three audiences a given requirement actually targets — the ToR table doesn't say, and the answer changes what "success" looks like for that requirement entirely.

e-Boat's Notifications: a real skeleton, currently switched off

Unlike the tracker-adapter case in Lesson 4 — where a genuinely open external fact (the vendor list) blocks implementation — EBoat.Notifications shows a different kind of "not done": a deliberately designed seam with nothing plugged into it yet, wired into the app but turned off.

Concretely, from the code itself:

Read together, this is a team that has already made several real decisions (severity tiers, throughput budget, channel list, the SPI shape) without yet writing the delivery code — a "designed, not built" state, distinct from both "intentionally deferred pending an external fact" (Lesson 4) and "not started."

Source: SuprSend — Notification Retry and Fallback Design.

Documents: the other half, which is closer to nothing

The "documents" side of this requirement group is a genuinely different story — not a designed-but-unbuilt skeleton, just an unused configuration block. appsettings.json defines a Storage section (MinIO endpoint, bucket eboat-documents, 5MB max file size, allowed extensions .pdf/.jpg/.jpeg) — and nothing in the codebase reads it. No Documents controller, no entity, no upload endpoint. The root README mentions "documents" as one of the fragment types htmx is meant to own, but no view backs that mention either.

World practice offers two genuinely different things this could eventually become, and it's worth distinguishing them rather than assuming either:

Evidentiary documents (Lesson 12)

Trade/certification documents

The EU's new digital CATCH system — replacing paper catch certificates, compulsory for EU operators and authorities from 10 January 2026 — is the concrete world-practice example of the second category: a document that certifies a shipment's legal origin to a trading partner, not evidence for a domestic prosecution. Given the 5MB/pdf-jpg-jpeg config already sitting in e-Boat's settings, the evidentiary category (scanned inspection material) looks like the closer fit — but this is a real open question, not something resolvable from the repo as it stands today.

Source: IUU Watch — The Catch Certificate Scheme, SeafoodSource — new digital CATCH certificate.

The transferable skill: three ways to be "not implemented"

A ToR checklist has one column: done or not done. Reading the actual code surfaces at least three distinct stories that column can't tell apart — and the difference changes what question to ask next.

PatternExampleRight next question
Intentionally deferred, documentedITrackerAdapter (Lesson 4) — blocked on the Customer's vendor list"When does the blocking fact resolve?"
Designed, not yet builtEBoat.Notifications — SPI + severity tiers + throughput budget exist; channel classes and dispatch logic don't"What's the build sequencing, and why is it still switched off?"
Not yet startedDocuments — an unused config block, no consuming code"Has anyone decided which real-world document category this even is?"

Check your recall

Something unclear, or want to go deeper on any term here? Ask the agent that built this lesson — it's your teacher for this workspace, not just a lesson generator.