opencode-skills-collection 4.0.73 → 4.0.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +16 -1
  2. package/bundled-skills/claude-api/SKILL.md +4 -4
  3. package/bundled-skills/claude-api/curl/examples.md +5 -5
  4. package/bundled-skills/claude-api/java/claude-api.md +1 -1
  5. package/bundled-skills/claude-api/php/claude-api.md +2 -2
  6. package/bundled-skills/claude-api/python/claude-api/README.md +13 -13
  7. package/bundled-skills/claude-api/python/claude-api/batches.md +3 -3
  8. package/bundled-skills/claude-api/python/claude-api/files-api.md +3 -3
  9. package/bundled-skills/claude-api/python/claude-api/streaming.md +6 -6
  10. package/bundled-skills/claude-api/python/claude-api/tool-use.md +19 -19
  11. package/bundled-skills/claude-api/ruby/claude-api.md +3 -3
  12. package/bundled-skills/claude-api/shared/error-codes.md +2 -2
  13. package/bundled-skills/claude-api/shared/live-sources.md +1 -1
  14. package/bundled-skills/claude-api/shared/models.md +4 -4
  15. package/bundled-skills/claude-api/shared/tool-use-concepts.md +2 -2
  16. package/bundled-skills/claude-api/typescript/claude-api/README.md +12 -12
  17. package/bundled-skills/claude-api/typescript/claude-api/batches.md +2 -2
  18. package/bundled-skills/claude-api/typescript/claude-api/files-api.md +1 -1
  19. package/bundled-skills/claude-api/typescript/claude-api/streaming.md +4 -4
  20. package/bundled-skills/claude-api/typescript/claude-api/tool-use.md +14 -14
  21. package/bundled-skills/electron-drive-skill/LICENSE +21 -0
  22. package/bundled-skills/electron-drive-skill/README.md +172 -0
  23. package/bundled-skills/electron-drive-skill/SKILL.md +237 -0
  24. package/bundled-skills/electron-drive-skill/drive.config.json.example +10 -0
  25. package/bundled-skills/electron-drive-skill/package.json +28 -0
  26. package/bundled-skills/electron-drive-skill/scripts/daemon.mjs +352 -0
  27. package/bundled-skills/electron-drive-skill/scripts/drive.mjs +250 -0
  28. package/bundled-skills/electron-drive-skill/scripts/lib.mjs +165 -0
  29. package/bundled-skills/electron-drive-skill/scripts/lib.test.mjs +56 -0
  30. package/bundled-skills/film-crew/SKILL.md +129 -0
  31. package/bundled-skills/film-crew/references/model-prompting.md +89 -0
  32. package/bundled-skills/film-crew/references/reroll-review.md +46 -0
  33. package/bundled-skills/film-crew/references/roles/director.md +38 -0
  34. package/bundled-skills/film-crew/references/roles/dp.md +28 -0
  35. package/bundled-skills/film-crew/references/roles/editor.md +34 -0
  36. package/bundled-skills/film-crew/references/roles/gaffer.md +30 -0
  37. package/bundled-skills/film-crew/references/roles/production-designer.md +43 -0
  38. package/bundled-skills/film-crew/references/roles/script-supervisor.md +35 -0
  39. package/bundled-skills/film-crew/references/roles/sound.md +23 -0
  40. package/bundled-skills/film-crew/references/templates/shot-list.md +38 -0
  41. package/bundled-skills/film-crew/references/unslop.md +29 -0
  42. package/bundled-skills/mcp-dependency-drift-audit/SKILL.md +169 -0
  43. package/bundled-skills/nexrad-mosaic-access/SKILL.md +297 -0
  44. package/bundled-skills/nexrad-mosaic-construction/SKILL.md +277 -0
  45. package/bundled-skills/nexrad-product-access/SKILL.md +258 -0
  46. package/bundled-skills/nexrad-radar-visualization/SKILL.md +318 -0
  47. package/bundled-skills/radar-satellite-analysis/SKILL.md +314 -0
  48. package/bundled-skills/testdriver-e2e-testing/SKILL.md +121 -0
  49. package/bundled-skills/traderspy-market-briefing/SKILL.md +132 -0
  50. package/bundled-skills/traderspy-market-screener/SKILL.md +182 -0
  51. package/bundled-skills/traderspy-market-screener/references/condition-cookbook.md +70 -0
  52. package/bundled-skills/traderspy-position-check/SKILL.md +130 -0
  53. package/bundled-skills/traderspy-position-check/references/risk-math.md +60 -0
  54. package/bundled-skills/traderspy-smart-money/SKILL.md +151 -0
  55. package/bundled-skills/traderspy-smart-money/references/exchange-notes.md +40 -0
  56. package/bundled-skills/traderspy-technical-analysis/SKILL.md +162 -0
  57. package/bundled-skills/traderspy-technical-analysis/references/derivatives-guide.md +57 -0
  58. package/bundled-skills/traderspy-technical-analysis/references/indicator-guide.md +47 -0
  59. package/bundled-skills/traderspy-trading-signals/SKILL.md +156 -0
  60. package/bundled-skills/traderspy-trading-signals/references/signal-fields.md +64 -0
  61. package/bundled-skills/unified-ai-gateway/SKILL.md +3 -3
  62. package/package.json +1 -1
  63. package/skills_index.json +499 -1
@@ -0,0 +1,258 @@
1
+ ---
2
+ name: nexrad-product-access
3
+ description: "Discover and access NEXRAD data for a selected radar site, time, product, or Level II moment using completed archive volumes, real-time chunks, or supported Level III sources with metadata validation."
4
+ category: data
5
+ risk: safe
6
+ source: self
7
+ source_type: self
8
+ date_added: "2026-09-25"
9
+ author: ShianMike
10
+ tags: [weather, nexrad, level-ii, level-iii, radar-products, single-site, aws-s3]
11
+ tools: [claude, cursor, gemini, codex]
12
+ ---
13
+
14
+ # NEXRAD Product Access
15
+
16
+ ## Overview
17
+
18
+ Select and retrieve the correct NEXRAD data for one radar site, UTC time, and
19
+ requested product or Level II moment. Keep archive volumes, real-time chunks,
20
+ and Level III products distinct because they have different availability and
21
+ decoding contracts.
22
+
23
+ Use `noaa-radar-satellite-fetching` for common NOAA archive discovery and
24
+ download mechanics when that skill is available. This skill provides the
25
+ NEXRAD-specific Level II/III selection contract. Use
26
+ `nexrad-mosaic-access` when the requested result is a precomputed multi-radar
27
+ composite rather than one site's data.
28
+
29
+ ## When to Use This Skill
30
+
31
+ - Fetch a completed NEXRAD Level II volume from the historical archive.
32
+ - Follow or assemble real-time Level II chunks for a named site.
33
+ - Retrieve selected real-time Level III products or use an operational Level
34
+ III feed.
35
+ - Select a product such as reflectivity, velocity, spectrum width, echo top,
36
+ vertically integrated liquid, or a supported dual-polarization product.
37
+ - Select a particular Level II moment, elevation sweep, or volume interval.
38
+ - Restrict access to one radar site and reject composite or neighboring-site
39
+ data.
40
+
41
+ Do not turn a Level II moment name into a Level III product code by assumption.
42
+ The two levels have different processing and distribution contracts.
43
+
44
+ ## Current Public NEXRAD Resources
45
+
46
+ The current NEXRAD-on-AWS registry documents these public resources in
47
+ `us-east-1`:
48
+
49
+ | Need | Resource | Contract |
50
+ | --- | --- | --- |
51
+ | Historical completed Level II volumes | `s3://unidata-nexrad-level2/` | Archive volumes organized by UTC date and site. |
52
+ | Real-time Level II chunks | `s3://unidata-nexrad-level2-chunks/` | Chunks that must be assembled and validated as volumes. |
53
+ | Selected real-time Level III data | `s3://unidata-nexrad-level3/` | Selected Level III products, not a promise of a complete historical archive. |
54
+
55
+ Unidata documentation also describes operational Level III distribution through
56
+ the `NEXRAD3` LDM/NOAAPort feed. Resolve the current source for the requested
57
+ Level III product instead of assuming that a real-time S3 bucket is a complete
58
+ archive.
59
+
60
+ The current AWS registry identifies `unidata-nexrad-level2` as the archive and
61
+ says the former `noaa-nexrad-level2` bucket was deprecated after September 1,
62
+ 2025. Verify the live registry before access because provider resources can
63
+ change.
64
+
65
+ ## Define the Access Contract
66
+
67
+ Resolve and record:
68
+
69
+ - one four-character NEXRAD site such as `KTLX`;
70
+ - the requested instant or bounded interval in UTC;
71
+ - nearest-at-or-before, nearest-in-either-direction, or interval-overlap policy;
72
+ - data level: Level II, Level III, or an explicitly mixed workflow;
73
+ - product or moment, unit, sweep or scan angle, and whether all sweeps or the
74
+ lowest requested sweep are needed;
75
+ - archive, real-time, or operational-feed source;
76
+ - maximum lookback, maximum probes, and acceptable latency;
77
+ - required metadata, quality masks, and output form;
78
+ - whether the product must come from that one site only.
79
+
80
+ If the user supplies only a display concept such as “base reflectivity,”
81
+ resolve it against a current official product or Level II moment definition.
82
+ Do not guess a Level III code or claim that every named display is available in
83
+ the same feed.
84
+
85
+ ## Access Historical Level II Volumes
86
+
87
+ 1. Validate the site against an allowlist or a current NEXRAD site inventory.
88
+ 2. Resolve the exact UTC day and site prefix from current dataset
89
+ documentation. Do not infer the key layout from a filename example.
90
+ 3. List only that documented prefix, paginating within a bounded key count.
91
+ 4. Parse the documented volume timestamp and site from each candidate key.
92
+ 5. Select by the time policy, then request metadata for the exact key.
93
+ 6. Require a nonzero stable object. If publication may still be occurring,
94
+ repeat the metadata check until size and object identity remain unchanged.
95
+ 7. Download to a temporary path, verify received bytes, compute a local
96
+ SHA-256 when provenance requires it, and open with a format-aware reader.
97
+ 8. Verify the decoded site, volume start/end time, sweeps, moments, dimensions,
98
+ and quality fields before promoting the file into a valid cache entry.
99
+
100
+ The archive is the preferred source for retrospective work because each object
101
+ is a completed volume. Do not substitute a real-time chunk for an archive volume
102
+ when the consumer expects a self-contained volume.
103
+
104
+ ## Access Real-Time Level II Chunks
105
+
106
+ Treat each chunk as a fragment with ordering and completion dependencies.
107
+
108
+ 1. Resolve the current chunk prefix for the requested site.
109
+ 2. Parse volume and chunk identity from documented key fields.
110
+ 3. Discover the complete chunk sequence with a bounded lookback.
111
+ 4. Verify required chunks, byte identities, and scan metadata.
112
+ 5. Assemble into a new temporary file without overwriting the source chunks.
113
+ 6. Decode the assembled object and verify site, volume time, sweep count,
114
+ moments, and quality fields.
115
+ 7. Publish the verified volume atomically and record which chunks formed it.
116
+
117
+ If a chunk is late, duplicated, discontinuous, or from another site, reject or
118
+ quarantine the sequence. A file that opens without proving complete volume
119
+ metadata is not a verified replacement for an archive volume.
120
+
121
+ ## Select Level II Moments and Sweeps
122
+
123
+ Level II exposes moments within a volume rather than independent Level III
124
+ display products. Depending on the radar configuration and volume, common
125
+ moments can include reflectivity, velocity, spectrum width, and supported
126
+ dual-polarization quantities.
127
+
128
+ Before extraction, record:
129
+
130
+ - the exact moment name used by the decoded file;
131
+ - its calibrated physical unit and scale or offset;
132
+ - the elevation-angle policy and actual beam height at the display range;
133
+ - the quality fields for range folding, clutter, dealiasing, or invalid gates;
134
+ - whether the output requires all sweeps, a nearest sweep, or a sweep search
135
+ based on target height.
136
+
137
+ Do not assume that a moment is present in every volume or at every sweep.
138
+ Report an absent moment or incomplete sweep rather than converting a different
139
+ moment into its place.
140
+
141
+ ## Access Level III Products
142
+
143
+ Level III is a processed radar product with its own product code, scan strategy,
144
+ projection, resolution, and update cadence. Resolve the official current code
145
+ and source for the requested semantic product.
146
+
147
+ For selected real-time data, inspect only the documented Level III prefix for
148
+ the site and time window. For broader operational access, use a current LDM or
149
+ NOAAPort product feed that explicitly carries the requested NEXRAD3 product.
150
+
151
+ After retrieval, verify:
152
+
153
+ - site or coverage area;
154
+ - product code and product description;
155
+ - observation or scan time;
156
+ - projection, dimensions, and data level;
157
+ - units, scale/offset, missing values, and quality flags;
158
+ - whether the product is a single-site, sector, or multi-site product.
159
+
160
+ Never decode a Level III file using a Level II volume contract. Never label a
161
+ single-site Level III product as a mosaic merely because several scans or pixels
162
+ are present.
163
+
164
+ ## Examples
165
+
166
+ For a request such as “Get the latest completed KTLX Level II volume before
167
+ 2026-09-25 12:00 UTC,” state the site, cutoff, selection policy, archive
168
+ source, and selected volume time. Retrieve that exact object, then confirm the
169
+ decoded volume reports KTLX and the expected scan interval before handing it
170
+ to a plotting or analysis step.
171
+
172
+ For “KTLX base reflectivity,” resolve whether the request means the Level II
173
+ reflectivity moment or a Level III processed product. Report the chosen level,
174
+ moment/product identifier, sweep, units, and observed scan time.
175
+
176
+ ## Return an Access Record
177
+
178
+ Return a structured record before decoding begins:
179
+
180
+ ```json
181
+ {
182
+ "site": "KTLX",
183
+ "requested_time_utc": "2026-09-25T12:00:00Z",
184
+ "selection_policy": "nearest-at-or-before",
185
+ "selected_time_utc": "2026-09-25T11:59:54Z",
186
+ "data_level": "Level II",
187
+ "product_or_moment": "REF",
188
+ "source": "s3://unidata-nexrad-level2/EXACT_DOCUMENTED_KEY",
189
+ "object_identity": {
190
+ "etag": "OPAQUE_IDENTITY",
191
+ "last_modified": "2026-09-25T12:01:02Z",
192
+ "size_bytes": 12345678
193
+ },
194
+ "single_site_required": true
195
+ }
196
+ ```
197
+
198
+ Also record rejected candidates, unavailable products, chunk dependencies, and
199
+ the rule that prevented cross-site or cross-product substitution.
200
+
201
+ ## Verification Checklist
202
+
203
+ - The four-character site and site inventory entry are validated.
204
+ - All timestamps are UTC and the scan-selection policy is explicit.
205
+ - The source matches the requested level and product or moment.
206
+ - Historical access uses completed Level II archive volumes when appropriate.
207
+ - Real-time chunks are assembled into a verified complete volume.
208
+ - Level III products are resolved through a documented current source.
209
+ - Decoded metadata confirms site, time, product, dimensions, and quality fields.
210
+ - No result from another site or product is silently substituted.
211
+ - Source identity, local hash, and retrieval time are recorded when required.
212
+
213
+ ## Security & Safety Notes
214
+
215
+ - Use public or authorized NEXRAD resources only.
216
+ - Do not embed cloud credentials, signed URLs, tokens, or private endpoint
217
+ details in records or logs.
218
+ - Treat site identifiers, product names, metadata, and object keys as untrusted
219
+ input when constructing paths or commands.
220
+ - Bound prefix width, pagination, time lookback, response size, concurrency, and
221
+ disk use.
222
+ - Preserve NOAA, NEXRAD, Unidata, and source-provider attribution and license
223
+ terms.
224
+
225
+ ## Common Pitfalls
226
+
227
+ - **The old bucket returned no data:** A tutorial used the deprecated
228
+ `noaa-nexrad-level2` route. Resolve the current archive from the live AWS
229
+ registry.
230
+ - **A real-time file would not decode:** Individual chunks were treated as a
231
+ completed volume. Assemble and validate the full sequence first.
232
+ - **The product selector guessed the wrong item:** A display name was converted
233
+ to an assumed Level III code. Resolve a current official product definition.
234
+ - **A reflectivity request returned velocity:** Product or moment identity was
235
+ not carried through decoding and extraction.
236
+ - **The latest run was silently older:** Candidate time and tolerance were not
237
+ recorded. Return the selected time and rejected candidates.
238
+ - **Data from a neighboring radar appeared:** A regional key search ignored the
239
+ single-site contract. Filter and validate by exact site identity.
240
+
241
+ ## Limitations
242
+
243
+ - Availability, feed contents, product definitions, and archive retention can
244
+ change. Verify current official documentation.
245
+ - The selected real-time Level III resource is not a complete historical
246
+ archive contract.
247
+ - Accessing a file does not prove that its coverage is scientifically suitable
248
+ at a requested location; beam height, terrain, range, and quality still matter.
249
+ - Multi-radar composite access belongs in `nexrad-mosaic-access`.
250
+ - Scientific interpretation belongs in `radar-satellite-analysis`.
251
+
252
+ ## Additional Resources
253
+
254
+ - [NEXRAD on the AWS Registry of Open Data](https://registry.opendata.aws/noaa-nexrad/)
255
+ - [NOAA ROC Level II data types](https://www.roc.noaa.gov/level-two-data-types.php)
256
+ - [NOAA ROC Level III data types](https://www.roc.noaa.gov/level-three-data-types.php)
257
+ - [Unidata LDM feeds](https://unidata.github.io/awips2/edex/ldm/)
258
+ - [Unidata GEMPAK NIDS products](https://unidata.github.io/gempak/man/prog/gpnids.html)
@@ -0,0 +1,318 @@
1
+ ---
2
+ name: nexrad-radar-visualization
3
+ description: "Plot NEXRAD Level II/III site scans and decoded radar mosaics with correct radar geometry, map grids, units, quality masks, timestamps, and provenance."
4
+ category: analysis
5
+ risk: safe
6
+ source: self
7
+ source_type: self
8
+ date_added: "2026-09-25"
9
+ author: ShianMike
10
+ tags: [weather, nexrad, radar-plotting, ppi, velocity, dual-pol, cross-section, visualization]
11
+ tools: [claude, cursor, gemini, codex]
12
+ ---
13
+
14
+ # NEXRAD Radar Visualization
15
+
16
+ ## Overview
17
+
18
+ Create scientifically legible plots from verified NEXRAD single-site products
19
+ and decoded radar mosaics. Preserve site or domain, product, observation or
20
+ valid time, units, geometry, quality masking, and color meaning so a visually
21
+ compelling image cannot hide a wrong quantity or misleading spatial
22
+ interpretation.
23
+
24
+ Use this skill after `nexrad-product-access` or another trusted source has
25
+ provided a decoded site product. Use `nexrad-mosaic-access` to retrieve an
26
+ official MRMS composite before plotting it. This skill does not discover or
27
+ download radar files.
28
+
29
+ ## When to Use This Skill
30
+
31
+ - Plot base reflectivity, radial velocity, spectrum width, or another decoded
32
+ Level II moment for one NEXRAD site.
33
+ - Plot a Level III product selected by product code and scan time.
34
+ - Plot a decoded NOAA/NCEP MRMS or other documented NEXRAD-derived gridded
35
+ composite while preserving its grid, coverage, and product semantics.
36
+ - Create a lowest-elevation PPI, a specified-elevation PPI, or a sweep chosen
37
+ for a target height.
38
+ - Plot dual-polarization moments with appropriate units and masks.
39
+ - Create RHI, cross-section, tilt, storm-relative, or multi-sweep views.
40
+ - Build a time sequence or animation from a verified scan series.
41
+ - Export the plot with a stable color scale, map context, metadata, and
42
+ provenance.
43
+
44
+ Do not use a plot to hide a missing sweep, unverified product, invalid gate mask,
45
+ geolocation error, or unsupported extrapolation.
46
+
47
+ ## Define the Visualization Contract
48
+
49
+ Record:
50
+
51
+ - radar site and site coordinates;
52
+ - data level and exact product or moment;
53
+ - observation, volume, or product time in UTC;
54
+ - source identity and local content hash when required;
55
+ - intended view: PPI, RHI, cross-section, tilt, comparison, or animation;
56
+ - sweep or angle policy;
57
+ - map projection, bounds, range rings, and landmark context;
58
+ - physical units, color scale, display range, and normalization policy;
59
+ - invalid, missing, folded, clutter, or otherwise masked gates;
60
+ - for gridded mosaics, the provider, product/domain, grid projection and
61
+ orientation, valid-time semantics, and source/coverage or quality fields;
62
+ - output format, dimensions, background, and whether figures are for analysis or
63
+ publication.
64
+
65
+ If the user asks only for “a radar image,” produce a useful default: a
66
+ single-site PPI with site marker, UTC time, product, units, color bar, range
67
+ rings, and missing-data treatment visible. For a decoded mosaic, use a map view
68
+ with the product, domain, valid time, units, legend, and missing-data treatment
69
+ visible. Ask only when product, site/domain, or time would materially change
70
+ the result and cannot be inferred safely.
71
+
72
+ ## Validate Before Plotting
73
+
74
+ 1. Confirm the decoded site, product or moment, time, units, dimensions, and
75
+ projection.
76
+ 2. Apply scale, offset, calibration, fill values, and quality flags before
77
+ interpolation, contouring, or thresholding.
78
+ 3. Confirm that the requested sweep exists. For a target-height sweep, compute
79
+ or obtain beam height as a function of range and show which elevation is
80
+ nearest.
81
+ 4. Preserve no-data and invalid-data cells as masked values. Do not replace them
82
+ with zero, minimum reflectivity, or an opaque background that resembles weak
83
+ echo.
84
+ 5. Confirm that map coordinates and radar polar coordinates share the correct
85
+ projection and origin.
86
+ 6. Record whether velocity is dealiased and whether dual-polarization fields have
87
+ their documented quality masks.
88
+
89
+ ## Plot a PPI
90
+
91
+ For a plan-position indicator:
92
+
93
+ 1. Select the requested sweep or the lowest usable sweep under a stated policy.
94
+ 2. Convert range and azimuth to the selected map projection.
95
+ 3. Mask invalid, below-threshold display, folded, clutter-contaminated, and
96
+ missing gates according to an explicit policy.
97
+ 4. Render the measured product with a documented, perceptually ordered color
98
+ scale appropriate to the quantity.
99
+ 5. Overlay radar location, requested site label, range rings or distance scale,
100
+ north arrow when orientation could be ambiguous, and optional geographic
101
+ context.
102
+ 6. Put product, site, UTC time, units, sweep or product code, range, and color bar
103
+ in the figure itself.
104
+
105
+ For reflectivity, do not imply that every dBZ color boundary is a categorical
106
+ precipitation type. Keep the measured reflectivity label visible and put any
107
+ rain-rate relation in a separate, explicitly derived layer.
108
+
109
+ For velocity, use a diverging scale centered on zero unless the product's
110
+ documented semantics require another convention. Radial velocity points toward
111
+ or away from the radar according to the data convention; it is not a full wind
112
+ vector. Do not draw environmental wind arrows from radial velocity without an
113
+ explicit deconvolution or retrieval method.
114
+
115
+ ## Plot Dual-Polarization Moments
116
+
117
+ Preserve the physical unit for each field, such as differential reflectivity in
118
+ dB, differential phase in degrees, correlation coefficient as a unitless
119
+ quantity, and specific differential phase with its documented units and scale.
120
+
121
+ Keep raw dual-polarization fields separate from hydrometeor classification. If a
122
+ classification is displayed, state the input moments, thresholds, quality
123
+ masking, and whether the classification is measured, retrieved, or heuristic.
124
+
125
+ Do not normalize each sweep independently before an animation or comparison;
126
+ that can make a changing storm look stationary. Use one declared scale for the
127
+ whole sequence unless a separate panel is explicitly labeled.
128
+
129
+ ## Choose a Sweep for a Target
130
+
131
+ Lowest-level products emphasize near-surface structure but are vulnerable to
132
+ terrain, clutter, biological targets, and beam broadening. Higher sweeps sample
133
+ different heights and can miss low-level features.
134
+
135
+ When selecting a sweep by target height:
136
+
137
+ 1. use the radar elevation angles and a documented beam-height relationship;
138
+ 2. solve for the nearest sweep at the requested range and height;
139
+ 3. label the selected elevation and estimated sampling height;
140
+ 4. show the choice on a vertical cross-section when the selection is material.
141
+
142
+ Do not call the lowest sweep a surface observation. Its beam samples a volume
143
+ whose center height varies with range and whose width increases away from the
144
+ radar.
145
+
146
+ ## Plot RHI, Cross-Sections, and Tilts
147
+
148
+ An RHI or cross-section is a derived view assembled from multiple sweeps or
149
+ volumes. Preserve source volume identity, azimuth or line orientation,
150
+ horizontal-distance coordinate, vertical coordinate, interpolation method, and
151
+ beam-height geometry.
152
+
153
+ Do not connect gates across large angular gaps, missing sweeps, or incompatible
154
+ volumes without showing the gap. Avoid implying sub-beam vertical resolution.
155
+ For a storm tilt sequence, use the same cross-section line or documented tracking
156
+ logic across times and show how the line moves.
157
+
158
+ ## Create Time Sequences
159
+
160
+ For an animation or loop:
161
+
162
+ - use a verified chronological scan sequence;
163
+ - preserve the requested cadence and mark skipped or duplicated scans;
164
+ - keep site, product, color scale, map bounds, and range constant;
165
+ - show UTC time on every frame or in a clearly visible persistent timestamp;
166
+ - do not duplicate a stale frame to fill a gap without labeling the hold;
167
+ - stop at the last verified frame when the stream ends.
168
+
169
+ An animation is not evidence of temporal evolution unless frames are aligned,
170
+ correctly timed, and generated from the same product and projection.
171
+
172
+ ## Plot a Precomputed Mosaic
173
+
174
+ For an MRMS or other decoded NEXRAD-derived grid:
175
+
176
+ 1. Verify product identity, domain, valid or accumulation time, units, grid
177
+ projection, dimensions, coordinate orientation, and decoded extent.
178
+ 2. Apply the product's scale, offset, fill values, quality flags, and coverage
179
+ mask before rendering. Preserve missing coverage as missing; do not turn it
180
+ into zero-valued precipitation or reflectivity.
181
+ 3. Render the documented geographic extent and coordinate grid. Reproject only
182
+ with an explicit transformation and retain the native grid metadata.
183
+ 4. Label the exact product, provider, domain, valid-time interval, units, and
184
+ color scale. Show coverage or source attribution when supplied with the
185
+ decoded data.
186
+ 5. Keep official provider products distinct from locally constructed mosaics;
187
+ use `nexrad-mosaic-construction` for construction and label its output as a
188
+ local analysis.
189
+
190
+ Do not apply single-radar azimuth/range geometry or sweep labels to an MRMS
191
+ grid. Do not claim a mosaic represents every native radar moment or elevation.
192
+
193
+ ## Design the Figure
194
+
195
+ Use the minimum visual elements needed to interpret the measurement:
196
+
197
+ - product and unit;
198
+ - site or mosaic domain and UTC/valid time;
199
+ - sweep, angle, or product code;
200
+ - color bar with fixed limits and an explicit missing-data color;
201
+ - radar location and range context for site plots, or geographic extent and
202
+ orientation for gridded plots;
203
+ - relevant masks or quality annotation;
204
+ - source and processing note when the figure leaves the controlled environment.
205
+
206
+ Avoid decorative terrain or boundaries that obscure gates, imply high
207
+ resolution, or dominate the measured field. Do not crop away the radar site,
208
+ range rings, or color bar without replacing the lost context.
209
+
210
+ For a multi-panel figure, label each panel by product and time and state whether
211
+ the panels share a scale. Use consistent geometry across panels so a viewer can
212
+ compare evolution without reorienting the scene.
213
+
214
+ ## Examples
215
+
216
+ Given a decoded KTLX volume, render the lowest usable reflectivity sweep with
217
+ the site, Level II moment, observed UTC time, dBZ units, color bar, range rings,
218
+ and invalid gates visibly masked. Read the timestamp and product metadata from
219
+ the volume rather than inventing them.
220
+
221
+ When comparing two velocity scans, first verify they are from the same site,
222
+ product, units, and sweep policy. Use one shared diverging color scale, show
223
+ each scan's actual UTC time, and leave missing gates masked rather than filling
224
+ them with zero velocity.
225
+
226
+ When plotting an MRMS composite, retrieve the exact product and timestamp with
227
+ `nexrad-mosaic-access`, validate its native grid and valid-time semantics, and
228
+ show its provider, domain, units, legend, and missing-data mask. Do not apply
229
+ single-site sweep geometry or present the composite as a custom mosaic.
230
+
231
+ ## Export and Verify
232
+
233
+ For static output, verify the actual rendered file—not only the plotting call.
234
+ Open or inspect the image and confirm:
235
+
236
+ - nonblank data and expected radar coverage;
237
+ - correct orientation and site position;
238
+ - readable labels, units, timestamp, and color bar;
239
+ - no clipped legends or accidental all-background panels;
240
+ - correct color limits and no unintended missing-data substitution;
241
+ - aspect ratio that does not distort distance;
242
+ - file format, dimensions, and checksum for publication workflows.
243
+
244
+ For interactive output, also test zoom, time selection, product switching, and
245
+ the behavior when a sweep or scan is unavailable.
246
+
247
+ Record the plotting-library versions, projection, transformations, display
248
+ limits, masks, output path, and input identity. Pair the figure with
249
+ `weather-data-reproducibility` when it must be regenerated later.
250
+
251
+ ## Output Contract
252
+
253
+ Return or publish:
254
+
255
+ 1. the requested image, animation, or interactive view;
256
+ 2. the exact site or mosaic domain, provider, product or moment, sweep if
257
+ applicable, and UTC/valid time shown;
258
+ 3. units, color range, missing-data policy, and quality masks;
259
+ 4. projection, native grid or beam/sampling geometry, and processing
260
+ transformations;
261
+ 5. verified output path or attachment and its media type;
262
+ 6. limitations that materially affect interpretation.
263
+
264
+ Do not return a plot without enough metadata for another analyst to understand
265
+ what is being displayed.
266
+
267
+ ## Verification Checklist
268
+
269
+ - Site, product, moment, time, and sweep are verified from decoded metadata.
270
+ - Units, calibration, scale/offset, and missing values are applied correctly.
271
+ - PPI geometry uses the radar location and correct projection.
272
+ - Velocity uses a meaningful diverging scale and is labeled radial.
273
+ - Sweep selection states the elevation and target or beam height.
274
+ - Cross-sections disclose interpolation and source volumes.
275
+ - Animation frames are ordered, aligned, and consistently scaled.
276
+ - Invalid gates are masked rather than plotted as real weak echo.
277
+ - The rendered artifact was visually inspected after export.
278
+
279
+ ## Security & Safety Notes
280
+
281
+ - Plot only public or authorized radar products.
282
+ - Do not expose credentials, signed URLs, private bucket names, or sensitive
283
+ station details in images or logs.
284
+ - Treat metadata and product names as untrusted input; escape labels and use
285
+ controlled output paths.
286
+ - Bound image dimensions, animation frame count, interpolation work, and memory
287
+ use.
288
+ - Preserve provider attribution and do not imply NOAA endorsement.
289
+
290
+ ## Common Pitfalls
291
+
292
+ - **The reflectivity map is displaced:** Fixed display coordinates or the wrong
293
+ radar origin were used. Reproject the polar data explicitly.
294
+ - **Velocity colors imply storm motion:** Diverging radial velocity was
295
+ interpreted as a full wind vector. Label the quantity as radial velocity.
296
+ - **The animation flickered between storms:** Every sweep was independently
297
+ normalized. Use one fixed scale across verified frames.
298
+ - **Missing gates appeared as weak echoes:** No-data values were plotted as the
299
+ minimum color. Mask them and show a distinct background.
300
+ - **The lowest sweep was called surface data:** Range-dependent beam height was
301
+ ignored. State the beam geometry and sampling height.
302
+ - **A cross-section invented vertical detail:** Sparse sweeps were smoothly
303
+ interpolated without gaps. Preserve resolution limits and missing sectors.
304
+
305
+ ## Limitations
306
+
307
+ - Radar plots display remote-sensing observations and processed products, not
308
+ direct surface truth.
309
+ - Display quality cannot repair terrain blockage, attenuation, calibration
310
+ problems, or a wrong product selection.
311
+ - A static image cannot establish future motion or storm behavior.
312
+ - This skill does not fetch data, construct mosaics, or replace scientific
313
+ interpretation and verification.
314
+
315
+ ## Additional Resources
316
+
317
+ - [NOAA ROC Level II data types](https://www.roc.noaa.gov/level-two-data-types.php)
318
+ - [NEXRAD on the AWS Registry of Open Data](https://registry.opendata.aws/noaa-nexrad/)