Apr 16, 9-10 AM (27)
Apr 16, 10-11 AM (50)
Apr 16, 11-12 PM (56)
Apr 16, 12-1 PM (58)
Apr 16, 1-2 PM (30)
Apr 16, 2-3 PM (40)
Apr 16, 3-4 PM (46)
Apr 16, 4-5 PM (47)
Apr 16, 5-6 PM (56)
Apr 16, 6-7 PM (17)
Apr 16, 7-8 PM (68)
Apr 16, 8-9 PM (38)
Apr 16, 9-10 PM (11)
Apr 16, 10-11 PM (24)
Apr 16, 11-12 AM (23)
Apr 17, 12-1 AM (12)
Apr 17, 1-2 AM (8)
Apr 17, 2-3 AM (3)
Apr 17, 3-4 AM (4)
Apr 17, 4-5 AM (3)
Apr 17, 5-6 AM (9)
Apr 17, 6-7 AM (26)
Apr 17, 7-8 AM (96)
Apr 17, 8-9 AM (70)
Apr 17, 9-10 AM (53)
Apr 17, 10-11 AM (41)
Apr 17, 11-12 PM (58)
Apr 17, 12-1 PM (64)
Apr 17, 1-2 PM (39)
Apr 17, 2-3 PM (46)
Apr 17, 3-4 PM (36)
Apr 17, 4-5 PM (13)
Apr 17, 5-6 PM (10)
Apr 17, 6-7 PM (25)
Apr 17, 7-8 PM (22)
Apr 17, 8-9 PM (3)
Apr 17, 9-10 PM (16)
Apr 17, 10-11 PM (24)
Apr 17, 11-12 AM (16)
Apr 18, 12-1 AM (2)
Apr 18, 1-2 AM (2)
Apr 18, 2-3 AM (6)
Apr 18, 3-4 AM (1)
Apr 18, 4-5 AM (2)
Apr 18, 5-6 AM (2)
Apr 18, 6-7 AM (1)
Apr 18, 7-8 AM (2)
Apr 18, 8-9 AM (4)
Apr 18, 9-10 AM (4)
Apr 18, 10-11 AM (1)
Apr 18, 11-12 PM (6)
Apr 18, 12-1 PM (7)
Apr 18, 1-2 PM (8)
Apr 18, 2-3 PM (9)
Apr 18, 3-4 PM (0)
Apr 18, 4-5 PM (2)
Apr 18, 5-6 PM (6)
Apr 18, 6-7 PM (2)
Apr 18, 7-8 PM (2)
Apr 18, 8-9 PM (4)
Apr 18, 9-10 PM (9)
Apr 18, 10-11 PM (21)
Apr 18, 11-12 AM (23)
Apr 19, 12-1 AM (1)
Apr 19, 1-2 AM (4)
Apr 19, 2-3 AM (1)
Apr 19, 3-4 AM (0)
Apr 19, 4-5 AM (0)
Apr 19, 5-6 AM (3)
Apr 19, 6-7 AM (0)
Apr 19, 7-8 AM (2)
Apr 19, 8-9 AM (1)
Apr 19, 9-10 AM (1)
Apr 19, 10-11 AM (4)
Apr 19, 11-12 PM (7)
Apr 19, 12-1 PM (6)
Apr 19, 1-2 PM (8)
Apr 19, 2-3 PM (23)
Apr 19, 3-4 PM (7)
Apr 19, 4-5 PM (4)
Apr 19, 5-6 PM (3)
Apr 19, 6-7 PM (8)
Apr 19, 7-8 PM (3)
Apr 19, 8-9 PM (8)
Apr 19, 9-10 PM (6)
Apr 19, 10-11 PM (25)
Apr 19, 11-12 AM (23)
Apr 20, 12-1 AM (4)
Apr 20, 1-2 AM (5)
Apr 20, 2-3 AM (2)
Apr 20, 3-4 AM (7)
Apr 20, 4-5 AM (1)
Apr 20, 5-6 AM (8)
Apr 20, 6-7 AM (12)
Apr 20, 7-8 AM (29)
Apr 20, 8-9 AM (42)
Apr 20, 9-10 AM (37)
Apr 20, 10-11 AM (95)
Apr 20, 11-12 PM (42)
Apr 20, 12-1 PM (39)
Apr 20, 1-2 PM (53)
Apr 20, 2-3 PM (68)
Apr 20, 3-4 PM (47)
Apr 20, 4-5 PM (41)
Apr 20, 5-6 PM (31)
Apr 20, 6-7 PM (24)
Apr 20, 7-8 PM (10)
Apr 20, 8-9 PM (7)
Apr 20, 9-10 PM (16)
Apr 20, 10-11 PM (28)
Apr 20, 11-12 AM (18)
Apr 21, 12-1 AM (24)
Apr 21, 1-2 AM (5)
Apr 21, 2-3 AM (13)
Apr 21, 3-4 AM (4)
Apr 21, 4-5 AM (3)
Apr 21, 5-6 AM (8)
Apr 21, 6-7 AM (15)
Apr 21, 7-8 AM (44)
Apr 21, 8-9 AM (119)
Apr 21, 9-10 AM (36)
Apr 21, 10-11 AM (35)
Apr 21, 11-12 PM (98)
Apr 21, 12-1 PM (57)
Apr 21, 1-2 PM (71)
Apr 21, 2-3 PM (60)
Apr 21, 3-4 PM (33)
Apr 21, 4-5 PM (31)
Apr 21, 5-6 PM (27)
Apr 21, 6-7 PM (38)
Apr 21, 7-8 PM (35)
Apr 21, 8-9 PM (37)
Apr 21, 9-10 PM (14)
Apr 21, 10-11 PM (34)
Apr 21, 11-12 AM (12)
Apr 22, 12-1 AM (2)
Apr 22, 1-2 AM (3)
Apr 22, 2-3 AM (3)
Apr 22, 3-4 AM (4)
Apr 22, 4-5 AM (3)
Apr 22, 5-6 AM (17)
Apr 22, 6-7 AM (34)
Apr 22, 7-8 AM (21)
Apr 22, 8-9 AM (37)
Apr 22, 9-10 AM (18)
Apr 22, 10-11 AM (47)
Apr 22, 11-12 PM (44)
Apr 22, 12-1 PM (56)
Apr 22, 1-2 PM (64)
Apr 22, 2-3 PM (43)
Apr 22, 3-4 PM (86)
Apr 22, 4-5 PM (46)
Apr 22, 5-6 PM (17)
Apr 22, 6-7 PM (9)
Apr 22, 7-8 PM (17)
Apr 22, 8-9 PM (7)
Apr 22, 9-10 PM (21)
Apr 22, 10-11 PM (31)
Apr 22, 11-12 AM (17)
Apr 23, 12-1 AM (7)
Apr 23, 1-2 AM (4)
Apr 23, 2-3 AM (4)
Apr 23, 3-4 AM (6)
Apr 23, 4-5 AM (3)
Apr 23, 5-6 AM (8)
Apr 23, 6-7 AM (17)
Apr 23, 7-8 AM (25)
Apr 23, 8-9 AM (33)
Apr 23, 9-10 AM (21)
3,835 commits this week Apr 16, 2026 - Apr 23, 2026
Use UArray DefaultFun Bool for availability check in scriptCBORDecoder
The builtin availability check in `scriptCBORDecoder` was using
`Set DefaultFun` for O(log n) membership, with a TODO suggesting
`IntSet`. A `UArray DefaultFun Bool` is a better fit: since
`DefaultFun` derives `Ix`, lookup is a true O(1) unboxed array index
with no conversion at the lookup site.

The array is built once per call via `runSTUArray`, folding over the
`Set` through its `Foldable` instance (no intermediate list). The
array covers all ~100 `DefaultFun` constructors.
tracer-sidecar: rescan parent dir for late-arriving node subdirs
main() was snapshotting /opt/cardano-tracer/logs once at startup and
spawning one watcher per subdir present at that instant. Node subdirs
created *after* that snapshot (typical for producers that handshake
with the tracer slightly after the first relay, or for any node
restarted mid-run by Antithesis fault injection) were never tailed,
so their LogMessages never reached the Spec rules in Sidecar.hs. That
is why 'Sometimes: Any p{1,2,3} log' tripped on every run even though
the tracer was clearly writing those subdirectories to disk
(log-tailer, which polls independently, sees them fine).

Replace the one-shot listDirectory + forM with a forever loop that
maintains a Set of seen subdirs, spawns a watcher for each newly-seen
entry, and logs 'Tailing node log dir: <path>' as it does so. The
SDK 'reached' event for 'find log files' fires once, on the first
non-empty diff, preserving existing semantics for that assertion.

Verified locally: starting the sidecar with an empty logs dir and
then creating relay2, p1, p2, p3 subdirs one by one spawns a watcher
per subdir in order.

Fixes #50
tracer-sidecar: rescan parent dir for late-arriving node subdirs
main() was snapshotting /opt/cardano-tracer/logs once at startup and
spawning one watcher per subdir present at that instant. Node subdirs
created *after* that snapshot (typical for producers that handshake
with the tracer slightly after the first relay, or for any node
restarted mid-run by Antithesis fault injection) were never tailed,
so their LogMessages never reached the Spec rules in Sidecar.hs. That
is why 'Sometimes: Any p{1,2,3} log' tripped on every run even though
the tracer was clearly writing those subdirectories to disk
(log-tailer, which polls independently, sees them fine).

Replace the one-shot listDirectory + forM with a forever loop that
maintains a Set of seen subdirs, spawns a watcher for each newly-seen
entry, and logs 'Tailing node log dir: <path>' as it does so. The
SDK 'reached' event for 'find log files' fires once, on the first
non-empty diff, preserving existing semantics for that assertion.

Verified locally: starting the sidecar with an empty logs dir and
then creating relay2, p1, p2, p3 subdirs one by one spawns a watcher
per subdir in order.

Fixes #50
feat: preload Chivo fonts and fix insights canonical typo (#597)
- Add <link rel="preload"> for both Chivo TTFs in headTags so the browser fetches them in parallel with HTML/CSS instead of waiting for the stylesheet
- Move @font-face declarations from src/css/custom.css to inline <style> in headTags so the URLs stay as /fonts/* and match the preload (otherwise webpack hashes them and the preload misses)
- Fix typo in insights/supply canonical URL: was https://www.cardano.org.com/insights/supply, now https://cardano.org/insights/supply/
feat: require description frontmatter on news articles and backfill recent 12 (#596)
- Add Required Frontmatter section to docs/get-involved/create-a-news-article with field table, good and bad examples, and clarification that description is distinct from the in-post body summary
- Add description to all four frontmatter examples in the doc
- Backfill description on the 12 most recent news posts (Mar 18 to Apr 17 2026), keeping each under 160 characters with concrete keywords for Google snippet and OG/Twitter cards
- Replaces the previous Docusaurus fallback that used the full post body, which got truncated mid-sentence in search results
feat: add ESLint with jsx-a11y and fix surfaced a11y issues (#595)
- Add ESLint 10 flat config with eslint-plugin-react, react-hooks, jsx-a11y
- yarn lint and yarn lint:fix scripts
- Fix 24 jsx-a11y errors: 2 iframe titles, FAQ refactor (use Collapsible callbacks), modal backdrops with documented Escape fallback, 4 GovernanceCharts trigger areas with role/tabIndex/onKeyDown, 4 insights slider drag zones marked aria-hidden
- Fix 3 latent bugs: undefined ToolsTags reference, var projects redeclare, error rethrow without cause
- Disable noisy stylistic rules (no-unused-vars etc.) for now; cleanup deferred to a follow-up branch
- Real react-hooks antipatterns remain as warnings (75 total), to address in focused PRs later