Skip to content

cookiebite v0.6.0

Choose a tag to compare

@korECM korECM released this 19 Jun 13:44
· 191 commits to main since this release
8fea84f

Feature + hardening release from a deeper self-audit: cookiebite was dogfooded end-to-end across 5 report types (dashboard, postmortem, explainer, comparison, code-review) and audited across runtime, scripts, theming, and docs by parallel agents — 70 raw findings deduped to 32, then fixed and verified through render regression, a unit/script harness, and an adversarial review (all browser-verified, not just node --check).

Added

  • CB.compare — side-by-side comparison grid (the interactions.md §12 fast path): options-as-columns with rows aligned by construction, {label, tone} cells via CB.pill, an accent ring + badge on the recommended option, responsive stacking, and an optional recommendation callout.
  • CB.tabs / CB.reveal — vanilla (no-Alpine) tab shell with aria + arrow-key nav that lazily renders each panel and resize()s any chart inside it on first show, killing the "#1 cause of an empty chart box".
  • CB.copyButton + CB.sectionToMarkdown — a themed copy-as-markdown affordance that reuses the shipped CB.copy (clipboard fallback + "Copied ✓" flash) instead of re-hand-rolling it.
  • CB.glossary(map, scope?) — set the glossary from inside a DOMContentLoaded handler (the obvious place); the parse-time window.GLOSSARY path still works.
  • CB.categoricalColors(n) — on-theme palette of n spaced hues derived from the accent, for 3+ peer-series charts (the default 2-accent palette made comparison series indistinguishable).
  • Print/PDF stylesheet — a single @media print block (light-locked, TOC + theme toggle hidden, break-inside:avoid on sections/cards) so the advertised "light-locked exec PDF" actually works.
  • chart.__cbUpdate(option) on CB.chart instances — apply a filter/metric change through it and the reader's selection survives a dark-mode toggle (was snapping back to the original series).
  • CB.kpis ergonomics — decimals control (and inference, so 8.4 no longer rolls to 8.40), string value for status/severity cards, and cols auto-picked by item count. CB.findings gains sevLabels/chipLabels overrides and Korean locale defaults.

Fixed

  • deepMerge shared array references with the module-level baseChart, so a mutation corrupted the base across dark re-themes — base array values are now cloned.
  • moneyShort was positive-only and mis-rounded at unit boundaries (999999 → 1000K, 99,999,999 → 10000만); it now bands on Math.abs, re-applies the sign, and rounds before band selection.
  • CB.chart caption is now escaped by default (config.captionHtml opts into trusted HTML), closing a markup/XSS gap that the aria + table cells already guarded.
  • CB.table numericCols auto-formats raw Number cells with thousands separators, and its right-align <style> is keyed/replaced instead of leaking on every re-render.
  • Glossary auto-linker skips section headings (no more dotted underline on an <h2>) and null-guards detached text nodes.
  • apply-theme.py resolves a preset by name (no more FileNotFoundError on apply-theme.py neutral …), its BLOCK_RE can no longer swallow the title/runtime/markers when a stray <!-- THEME comment precedes the block, it rewrites <html lang> from the preset locale, and the dark override now also flips --accent-on for near-black accentDark presets (Vercel/Resend accent text was invisible on dark).
  • inline.sh treats re-inlining an already-inlined file as an idempotent no-op instead of a hard error.
  • verify-report.sh surfaces auto-inline stderr, guards against an empty-DOM JSON reporting false success, handles non-hex accents in the theme assert, excludes self-scrolling overflow-x blocks from the overflow check, and guards rm -rf to a .verify sentinel.
  • Docs. Corrected the inverted Tailwind/runtime load-order claim in SKILL.md, refreshed the helper table + fast-path gotchas, reordered the echarts/countup deletion guidance, and removed a .gloss/.tippy-box CSS duplication trap.

Full changelog: v0.5.1...v0.6.0