|
| 1 | +# New Publisher Implementation Checklist |
| 2 | + |
| 3 | +Date: 2026-05-26 |
| 4 | + |
| 5 | +## Purpose |
| 6 | + |
| 7 | +This checklist captures the repeatable workflow proven during the Environment Agency Hydrology implementation. Use it as the baseline for the next publisher sources so each integration reaches the same standard: researched, scoped, implemented, documented, visible in Explorer, and verified against the live demo path. |
| 8 | + |
| 9 | +## 1. Source Triage |
| 10 | + |
| 11 | +- Confirm the source is real, public, and machine-readable. |
| 12 | +- Identify official documentation, API root, sample list endpoint, sample data endpoint, and license terms. |
| 13 | +- Probe endpoints directly and record exact working query shapes. |
| 14 | +- Capture quirks early, especially auth, rate limits, pagination, timestamp format, units, and non-standard parameters. |
| 15 | +- Decide whether the source should be implemented now, deferred, or split into multiple publisher opportunities. |
| 16 | + |
| 17 | +## 2. Existing Pattern Selection |
| 18 | + |
| 19 | +- Choose the closest mature publisher as the primary exemplar. |
| 20 | +- Prefer station-network patterns for fixed monitoring sites. |
| 21 | +- Prefer event-feed patterns for earthquakes, alerts, or incident streams. |
| 22 | +- Prefer image/media patterns only when the source actually exposes useful media. |
| 23 | +- Record any server compatibility constraints from prior publishers before coding. |
| 24 | + |
| 25 | +## 3. Curated First Pass |
| 26 | + |
| 27 | +- Start with a small demo-safe sidecar, not a full-network ingestion. |
| 28 | +- Include enough variety to prove the data model. |
| 29 | +- Choose stations/events that are geographically legible in Explorer. |
| 30 | +- Keep runtime polling bounded and predictable. |
| 31 | +- Preserve original source IDs in metadata and observations, even if CSAPI UIDs need sanitized tokens. |
| 32 | + |
| 33 | +## 4. CSAPI Model |
| 34 | + |
| 35 | +- Define one procedure for the source ingestion method. |
| 36 | +- Define systems around physical stations, platforms, or logical event sources. |
| 37 | +- Define one datastream per observed property/product/statistic combination. |
| 38 | +- Define deployments that make map placement and hierarchy explicit. |
| 39 | +- Include source URLs, license links, units, parameter names, quality flags, and provenance in metadata. |
| 40 | + |
| 41 | +## 5. Bootstrap |
| 42 | + |
| 43 | +- Use shared bootstrap helpers where possible. |
| 44 | +- Create minimal GeoJSON stubs first, then richer SensorML through PUT where the server accepts it. |
| 45 | +- Support `--dry-run`, `--clean`, `--clean-only`, and `--force-sml`. |
| 46 | +- Log and recover from known server compatibility failures without hiding them. |
| 47 | +- Compile and run the bootstrap locally before touching the live server. |
| 48 | + |
| 49 | +## 6. Runtime Publisher |
| 50 | + |
| 51 | +- Load curated source definitions from a sidecar file. |
| 52 | +- Fetch only latest or bounded recent readings in normal operation. |
| 53 | +- Normalize timestamps to UTC. |
| 54 | +- Preserve source quality, completeness, revision, and status metadata when available. |
| 55 | +- Dedupe unchanged readings during a running process. |
| 56 | +- Support `--dry-run`, `--once`, `--interval`, and source-subset flags. |
| 57 | + |
| 58 | +## 7. Explorer Readiness |
| 59 | + |
| 60 | +- Verify the map can classify the publisher with an appropriate STANAG/MIL-STD-2525 symbol. |
| 61 | +- Add source-specific symbol rules only when generic rules produce a poor result. |
| 62 | +- Make side-card summaries meaningful for the domain. |
| 63 | +- Surface latest observations where the current value is useful to a viewer. |
| 64 | +- Add image/media metadata only when it is accurate, licensed, and clearly attributed. |
| 65 | +- Use explicit representative-image language when exact station imagery is unavailable. |
| 66 | + |
| 67 | +## 8. Validation |
| 68 | + |
| 69 | +- Compile changed Python modules. |
| 70 | +- Run dry-run source fetches. |
| 71 | +- Run bootstrap against the live OSH endpoint. |
| 72 | +- Run one live publish cycle. |
| 73 | +- Verify backend observations directly. |
| 74 | +- Verify Explorer visibility on the correct preset. |
| 75 | +- Verify production bundle content after pushing Explorer changes. |
| 76 | +- Record any server warnings separately from publisher failures. |
| 77 | + |
| 78 | +## 9. Documentation |
| 79 | + |
| 80 | +- Add or update the publisher README. |
| 81 | +- Add an implementation plan before coding. |
| 82 | +- Add a completion report after first working publish. |
| 83 | +- Add a live-demo verification report after Explorer validation. |
| 84 | +- Record server compatibility issues as issue-ready drafts or remote issues. |
| 85 | +- Keep image attribution and license notes close to the implementation and report. |
| 86 | + |
| 87 | +## 10. Commit And Push |
| 88 | + |
| 89 | +- Keep publisher and Explorer commits separate when they live in separate repositories. |
| 90 | +- Verify `git status --short` before each commit. |
| 91 | +- Push immediately when the user expects live-demo behavior. |
| 92 | +- Recheck the deployed production bundle or runtime after push. |
| 93 | + |
| 94 | +## Minimum Done Definition |
| 95 | + |
| 96 | +A new publisher is not done until all of these are true: |
| 97 | + |
| 98 | +- curated bootstrap succeeds or documented server limitations are isolated, |
| 99 | +- runtime can publish at least one clean live cycle, |
| 100 | +- observations can be read back from CSAPI, |
| 101 | +- Explorer can find and explain the resources, |
| 102 | +- side-card/popup output is domain-meaningful, |
| 103 | +- docs explain source, model, commands, validation, and limitations, |
| 104 | +- commits are pushed to the relevant repositories. |
0 commit comments