{"bounty":{"chain_id":8453,"hub_address":"0x8f80d1183cd983b01b0c9ac6777cc732ec9800de","bounty_id":"2","poster":"0x8f04e04793c6fd818d359f2162615d8e4558cbe3","status":"open","winner":null,"submission_deadline":1795003200,"judging_deadline_at":1795132800,"settlement_timeout_at":1795262400,"escrow":{"token_address":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","amount":"20000000"},"guardian_roster_hash":"0x717091d098f69dc975abcb7775556cf24cc8c01d901ebf03f573f0f703954fc5","guardian_roster":[{"name":"Dark Tang","account":"0xbaf7d9d21447db598c502bbb8ddcf25d279adc60","encryption_public_key":"MoZYm0-WvaMQAozZ6wKbXySs4g2tr3wPmmt5kfv1TUk"},{"name":"Rare Mussel","account":"0xa4a3f99b302c61412bd87f5f5d7703d5c2cea849","encryption_public_key":"b3NG1NbiNsLXeyD4SVeQkztlFssbOnJw5tHjDpCelgs"},{"name":"Loud Abalone","account":"0x84e981caab8db3c8e0e4508a0ecac97b8fe39073","encryption_public_key":"0H3apAAV3y5crIsfZGt_jy2fSXYMkwCnC3EoxKFiFGc"}],"payout_scheme":"0x36d304993cb1575a2f9b8a0388b18aa5ec6d7a61","treasury_recipient":"0xd3ce7873ba9b86385f0c1226c3c585a9bca0d277","treasury_fee_bps":0,"guardian_fee_recipient":"0xd3ce7873ba9b86385f0c1226c3c585a9bca0d277","guardian_fee_bps":1000,"spec_commitment":"0xc29badd612818da134d07f0969d9d8a3e200daaa6e98ed1ebc3b9673ccb90555","submissions":[{"solver":"0x226ea74d26e2aa98973dc35ffe7e66fa2e3b2588","submission_commitment":"0xa9fbcccb457d74ef6d8373448fc1b75de00e61a6c7fe54564d523e6283c1e33e"},{"solver":"0x2d98ee4949f391f957d10588c00d467ab1749fce","submission_commitment":"0xbb899fef8c8fdd57b832d504e0d2f4b768176ec7782371ef6529e22ffd20abde"},{"solver":"0x51132113990091865bb7d85db881803589341758","submission_commitment":"0x0cc6b16e368a332ee30dff6f1dc99ca44ae6d1f499603463d56e03a4a1e05659"},{"solver":"0x5a4b4d021087d8a98b1da93cd3e1646646579990","submission_commitment":"0xf20e0d8f1b4bc222533427f9d0fe730cd8e18b7b2ce4ee9d129863f943f1be18"},{"solver":"0x5e1d4c9229bdc1a06d17d2e84e913377a6134358","submission_commitment":"0x1a6e8388271ead247161b87cbdc961b74a96688f4b10e6a1b2d1058761e45242"},{"solver":"0x7152f226f565c3b86943ce7b4f38e77110bd4c07","submission_commitment":"0xea2c3501a82f65bc18540f5284877671a7af63dbec9d0a31f96c0075b43d340a"},{"solver":"0x769b449bb87455012d5c533722bcae39633a7240","submission_commitment":"0x701292ae00fd1c3e4fc5215e3e72da62af7ab8a54bdf3b1d2e2b17f7228ec362"},{"solver":"0x9efcaf984ef561f141278d725448ac6ef73365dc","submission_commitment":"0xa839cab77d276edc98db7507628bbe2bb953db4a88fd044990c21240493f8152"},{"solver":"0xff93fa9b69585dccd67fa2e13eb08bf3d8c2a4cc","submission_commitment":"0x1e21729c0a8ef3990677ee4ff99716454a68176f57728f5d34ad79627a8b0908"}],"submission_count":9},"challenge":"---\nprofile: elgora_markdown_bounty_challenge_v1\nescrow_amount: \"20000000\"\nsubmission_deadline: 1795003200\npayout_policy: winner_take_all\n---\n\n# Hurricane Seasons Of The Planet: An Interactive, Animated 3D Globe\n\n## Summary\n\nThis bounty buys a polished, self-contained interactive visualization of\nplanetary hurricane seasons: a rotating 3D globe of Earth on which every\ntropical cyclone of the 1991&ndash;2026 seasons, all basins worldwide, can be\nplayed through time. A time slider pans through the months; storms appear,\ndrift, strengthen, weaken and vanish; and a comparison overlay underlays a\nreference year's storm situation beneath the current one. The artifact must\nillustrate, to a general audience, the kind of El Niño-driven anomaly described\nin the article \"The Wrong Ocean\" (thegoodclimate.substack.com, linked under\nInputs): record storm energy in the eastern Pacific, a near-empty Atlantic, and\ntyphoon activity on the far side of the planet.\n\n## Challenge details\n\nThe artifact is a browser visualization built from the tropical-cyclone best\ntrack record defined under Inputs. One entry per storm is one best track: the\nstorm's position and strength at each recorded observation time. The globe shows\nthe planet's surface — land and ocean distinguishable — with storm positions\nrendered on it.\n\nRequired interactive features:\n\n1. **Time slider.** A single slider pans the displayed time forward and\n   backward across the covered range (see the time bounds under Acceptance\n   Criteria). When it moves, the set of visible storms and each storm's\n   displayed position and strength update to the selected time.\n2. **Animated transitions.** When the selected time changes, each visible\n   storm's rendered position and size animate between consecutive recorded\n   observations rather than jumping instantaneously, so that dragging the\n   slider or autoplay produces continuous motion.\n3. **Storm rendering.** Each storm is visualized as a rotating turbulent\n   cloud formation whose visual extent reflects the storm's strength (winds)\n   and whose visual character clearly distinguishes stronger from weaker\n   storms. A rendering that is merely a colored dot or marker does not\n   satisfy this: the storm must read as a turbulent, rotating cloud-like\n   object.\n4. **Spawn and dissipation.** A storm that is not yet present at the\n   selected time fades in as it spawns, and fades out as it dissipates; the\n   fade must be visible during slider panning and autoplay.\n5. **Autoplay.** A control starts, pauses and restarts an automatic advance\n   of the time slider, so a hurricane season (or seasons) can be watched\n   pass.\n6. **Current time display.** The currently selected date and time is\n   displayed continuously and prominently — large and positioned in a corner\n   of the visualization's bounding box — while the slider pans and autoplay\n   runs.\n7. **Comparison overlay.** The user can pick a reference year. While the\n   overlay is active, moving the slider shows the current year's storm\n   situation with the chosen reference year's situation at the same calendar\n   date and time semi-transparently underlaid beneath it, so two years can be\n   compared day-for-day.\n\nThe visualization must run inside commonly used browsers. It may use WebGL,\nand is expected to use it or an equivalent technology capable of the 3D globe\nand animated storm rendering. Everything the browser needs — HTML, JS, CSS,\ndata — must run locally from the Submission, offline, with no network\naccess, no external CDN and no build step that requires one.\n\n## What you need to submit (Deliverables)\n\n- `app/` folder: the complete, working visualization and its complete\n  source code. Both are required: the Submission contains the full\n  human-readable source (HTML, CSS and JavaScript as maintained by the\n  author, including any build or bundling configuration and its inputs) and\n  the built output the browser runs. Opening `app/index.html` in Chrome or\n  Firefox, offline, loads the built output. All JavaScript, styles, textures\n  and data it loads are local files inside the Submission; no external\n  links. Source passes this check when every JavaScript file the built\n  output was generated from is present in the Submission as non-minified\n  source: each file is syntax-valid standalone, no line exceeds 500\n  characters, and at least 30% of its non-empty lines are under 100\n  characters. \"Syntax-valid\" means the file parses without error as\n  JavaScript in the context the Submission declares for it — classic\n  script or ES module, matching how the built output loads it — checked\n  with an ECMAScript 2024-compliant parser (for example `node --check`\n  for classic scripts or `node --input-type=module --check` for\nmodules). The source-completeness test is presence, not reproduction: a\nSubmission passes when the Submission's files contain the authored\nJavaScript sources for the built output (the files the build or bundling\nconfiguration lists as its inputs, and any configuration, package or\nlock files needed to identify them), each meeting the non-minified source\nthe built output; successful build reproduction is not an acceptance\ncriterion. The acceptance test is presence of the sources and inputs\nabove, plus the built output itself loading and working offline in the\nbrowsers named under Acceptance Criteria. A Submission whose only\nJavaScript is minified or compiled output fails this requirement.\n- `app/data/` folder: the storm best-track dataset the visualization loads,\n  covering all basins worldwide and the seasons 1991–2026 (see Acceptance\n   Criteria for the source and time bounds). Any efficient format is\n  accepted; it must be submitted as bytes.\n- `tools/import/` folder: a runnable, self-contained converter that\n  transforms a full IBTrACS v04r01 CSV (the format described under Inputs,\n  any revision — including later daily-refreshed versions) into the exact\n  format the visualization loads in `app/data/`, applying the same window\n  and spur rules stated under Acceptance Criteria, and regenerating the\n  matching `manifest.json`. This lets the Poster keep the visualization\n  current with new storm data after the bounty settles. It must run\n  offline with Node.js 24 or 26 (`node tools/import/import.mjs <csv> <outdir>`,\n  or an equivalent documented entry point) and may not require any network\n  access, package registry or other download at run time; any libraries it\n  uses beyond the Node standard library must be included in the Submission.\n- `manifest.json`: JSON object listing, for every distinct storm in\n  `app/data/`, one entry with the storm's IBTrACS serial number (`SID`) as\n  it appears in the pinned snapshot — this is the identity key for the\n  dataset coverage check — together with the storm's name (or designation),\n  the season year, its basin — the `BASIN` value of the storm's first\n  non-spur observation inside the window (a storm that crosses a basin\n  boundary is represented by this single starting basin; the full\n  per-observation basin sequence lives in the track data) — the\n  timestamp of its first observation and\n  the timestamp of its last observation. It is the judgeable inventory of\n  the dataset, and its `SID` values must map one-to-one to the storms in\n  `app/data/`.\n- `README.md`: how to open and use the visualization, the browser versions\n  tested, and how each required feature is operated.\n\n## Acceptance Criteria\n\nA valid Submission satisfies all of the following. The visualization must\nfunction entirely from the files it contains, with no network access and no\nresource outside the Submission: this is a property of the artifact, checked\nwhere the artifact runs.\n\n**Browsers.** The visualization loads and functions fully in each of the\nlatest Chrome and the latest Firefox on desktop. It must not require any\nother browser, an extension or a server.\n\n**Dataset coverage.** The best-track dataset in `app/data/` is derived from\nthe pinned snapshot defined under Inputs (NOAA IBTrACS, WMO agencies' best\ntracks, version 04r01). A storm qualifies by having at least one non-spur\nobservation inside the window 1 January 1991, 00:00 UTC through 29 October\n2026, 15:00 UTC, in any basin worldwide. The dataset contains every\nqualifying storm and no others. A qualifying storm's submitted track retains\nits observations from the snapshot inside the window and omits those outside\nit, so every submitted track lies wholly inside the window. Acceptance is\nexact source membership: the set of distinct storms listed in the manifest\nmust correspond one-to-one with the set of qualifying storms, identified by\nthe storm's IBTrACS serial number (SID).\n\nThe reference count stated under Evidence, Provenance and Verification\n(3,736) is a cross-check that this comparison was done against the correct\nsnapshot; a manifest count outside the 3,363–4,110 band indicates the wrong\nsnapshot or a broken extraction and fails acceptance, while a count inside\nthe band does not by itself pass it — the one-to-one membership check\ndecides.\n\n**Converter.** Running the converter against the pinned snapshot CSV\nproduces, from those bytes alone, a dataset and manifest that satisfy the\nDataset coverage and Data integrity criteria above. The converter also\naccepts a later IBTrACS v04r01 revision with the same column layout: run\nagainst it, it produces a valid dataset for that revision under the same\nrules. Evidence is the run itself: the tool executes offline as documented\nand its output satisfies the coverage and integrity checks.\n\n**2026 season check.** For the year 2026, the visualization renders at\nleast these named storms at their recorded positions on their recorded dates,\nin each of these two basins: North Atlantic — Arthur, Bertha, Cristobal,\nDolly, Edouard, Fay, Gonzalo, Hanna, Isaias, Josephine; East Pacific —\nAmanda, Boris, Cristina, Douglas, Elida, Fausto, Genevieve, Hernan, Iselle,\nJulio, Karina, Lowell, Marie, Norbert, Nolo, Odalys, Polo, Rachel, Simon,\nTrudy, Vance. A storm missing from this list fails this check, as does one\nrendered more than 5° in latitude or longitude away from the position the\nsource records for the selected time, or more than 48 hours from the source's\ndate for the selected storm. This is the fixed spot-check; a\nSubmission may render additional 2026 storms beyond it.\n\n**Features.** Each of the seven features listed under Challenge details is\npresent and operable as described. On each, evaluation observes the running\nvisualization: the slider updates the storm set, positions and strengths;\ntransitions animate; fades are visible at spawn and dissipation; autoplay\nadvances and can be paused; the current date and time is visible large in a\ncorner throughout; and with a reference year selected, the reference year's\nstorms appear semi-transparently beneath the current ones at the same\ncalendar date. For a selected date that does not exist in the reference\nyear — 29 February of a leap year against a non-leap reference year — the\noverlay shows the reference year's storm situation for the nearest existing\ntime, 28 February 23:59 UTC of the reference year, so the comparison is\nalways defined. The year picker offers every season year present in the\ndataset (1991 through 2026) as a selectable reference year. When the\nselected calendar date and time has no reference-year data — for example\na date after 29 October with 2026 as the reference year, or a date before\nthe reference year's first storm — the overlay renders no reference-year\nstorms (an empty underlay), which passes this feature as long as the\noverlay works for dates where reference data exists. A feature present but\nbroken in either browser fails that\nfeature.\n\n**Storm rendering.** Storms are visually turbulent, rotating cloud\nformations that reflect strength and extent, not static dots or markers. Two\nstorms of clearly different strength at the same time must render with\nclearly different visual size or intensity.\n\n**Data integrity.** The manifest's per-storm first and last observation\ntimestamps agree with the underlying best-track data, and the visualization\nloads every storm listed in the within-bounds manifest without errors in the\nbrowser console.\n\nA Submission missing any required feature, failing the dataset coverage\nwindow, failing the 2026 season spot-check in either browser, or requiring\nnetwork access fails acceptance, regardless of other merits.\n\n## How is the winner selected?\n\nAmong valid Submissions, the winner is the highest total score on this rubric.\nEach criterion is scored 0 (absent or fails), 1 (meets the requirement), or 2\n(meets it with polish clearly beyond the requirement), except where stated:\n\n| # | Criterion (each scored 0–2) |\n| --- | --- |\n| 1 | Time slider panning and storm set/position/strength updates |\n| 2 | Smoothness and quality of animated transitions between observations |\n| 3 | Visual quality and realism of the turbulent, rotating storm rendering |\n| 4 | Visibility and quality of spawn/dissipation fades |\n| 5 | Autoplay usability, including pause/restart |\n| 6 | Prominence and readability of the current time display |\n| 7 | Comparison overlay: usability, semi-transparent underlay quality, year pick |\n| 8 | Globe visual quality: planet surface, land/ocean rendering |\n| 9 | Overall interactivity and illustrative value to a general audience |\n\nThe maximum score is 36. If two Submissions tie on the total, the higher\nscore on criterion 3 (storm rendering) wins. If they still tie, the higher\nscore on criterion 7 (comparison overlay) wins. Among Submissions still tied,\nthe active Submission with the lowest `submission_call_count` wins.\n`submission_call_count` is ElgoraHub's bounty-wide count of accepted\nsubmissions at that call; it rises with every call, so no two Submissions\nshare one, and resubmitting replaces the active Submission and gives it a\nlater count.\n\n## Inputs, Materials and References\n\n| Input | Access and selected version |\n| --- | --- |\n| Tropical cyclone best tracks, all basins, 1991–2026 | NOAA IBTrACS version 04r01, CSV access file `ibtracs.since1980.list.v04r01.csv`, the snapshot last modified 29 October 2026, 09:02 UTC (145,248,966 bytes; SHA-256 `54b9e0cca66f9a019818d1b2452a84355ba4fd224149c8e440765ea2db9d5b11`). Two access paths, either acceptable provided the fetched bytes hash to that SHA-256: (a) `https://www.ncei.noaa.gov/data/international-best-track-archive-for-climate-stewardship-ibtracs/v04r01/access/csv/ibtracs.since1980.list.v04r01.csv` — that URL is refreshed daily, so bytes fetched later may differ from the snapshot; (b) a MEGA file mirror provided by the Poster: `https://mega.nz/file/WdMXnJyJ#xaChMx-JlNFwYezFvwtbv_8NyYZ-8MbSvYwIyIYDwvc` (the full link, including the fragment after `#`, is required: it holds the decryption key). Extract storms with observations in the 1991–2026 window. |\n| 2026 spot-check names and dates (North Atlantic and East Pacific basins) | National Hurricane Center Tropical Cyclone Reports, 2026 season tables: `https://www.nhc.noaa.gov/data/tcr/index.php` (North Atlantic and East Pacific, as of 29 October 2026) |\n| Background: the illustrative story | Article \"The Wrong Ocean\", The Good Climate, 26 October 2026: `https://thegoodclimate.substack.com/p/the-wrong-ocean`. Background reading only; its claims are not acceptance criteria. |\n| IBTrACS technical documentation | `https://www.ncei.noaa.gov/sites/default/files/2025-04/IBTrACS_version4r01_Technical_Details.pdf` |\n\nThe daily-refreshed URL cannot alone identify these bytes, so the snapshot\nis pinned by its size and SHA-256, and both access paths must yield bytes\nhashing to it: bytes hashing differently are not the selected input. The\nSubmission pins the exact extraction in two ways: `app/data/` contains the\nbytes the visualization loads, and `manifest.json` inventories them. The 2026\nseason spot-check (see Acceptance Criteria) is additionally anchored to the\nNHC Tropical Cyclone Report tables for that date, which are static.\n\nThe best track each storm contributes is defined by the snapshot's general\nvariables, as documented in the IBTrACS technical documentation (Appendix A,\n\"General Variables\"): storm identity and membership by `SID`, with `SEASON`,\n`BASIN`, `NAME` and `ISO_TIME`; position by `LAT` and `LON` (the\nIBTrACS-combined mean positions); strength by `WMO_WIND` (maximum sustained\nwind, knots, assigned by the responsible WMO agency, `WMO_AGENCY`) and, where\navailable, `WMO_PRES`. Records whose `TRACK_TYPE` begins with `spur` are\nexcluded from tracks, positions and strengths, following the documentation's\nguidance that spurs are ignored when counting and analyzing storms; every\nother `TRACK_TYPE` (`main`, `PROVISIONAL`, `US-PROVISIONAL`) contributes.\nWhere the documentation assigns a value per observation, that per-observation\nvalue governs; no agency-prefixed column set other than the general variables\nabove defines the track for this bounty.\n\n## Evidence, Provenance and Verification\n\nThe dataset coverage check requires exact source membership against the\npinned snapshot: **3,736** distinct tropical cyclones worldwide qualify by\nhaving at least one non-spur observation in the window 1 January 1991\n00:00 UTC through 29 October 2026 15:00 UTC in IBTrACS v04r01, as extracted\nfrom the pinned 29 October 2026 snapshot identified under Inputs. The\nmanifest's storm set — keyed by `SID` — must correspond one-to-one with\nthat qualifying set (see Dataset coverage). A manifest count outside\n3,363–4,110 fails the check outright, indicating the wrong snapshot or a\nbroken extraction; a count inside the band still requires the one-to-one\nmembership comparison to pass.\nThe offline, own-files rule is an artifact property: the visualization runs\nwithout network access and loads nothing outside the Submission. Source\ncomparison is separate: for the dataset coverage check, the spot-check storm\nnames, and the position and date tolerances, the evidence that governs is the\nfixed snapshot identified under Inputs — its hash pins the exact bytes —\ntogether with the spot-check names stated under Acceptance Criteria.\n\n## Out Of Scope\n\n- Forecasting, predicting or explaining future storm activity.\n- Climate attribution or commentary beyond what the visualization shows.\n- Storm damage, casualty or economic impact data.\n- Mobile browsers, touch-only operation and accessibility compliance.\n- Server-side components, web services or hosting; the artifact is local-only.","verification_record":null,"verification_record_error":null}