Release History
Changelog
⊕RSS FEEDEvery release documented — new components, token additions, A2UI templates, and documentation changes.
v1.22.2: Fix dark-mode contrast failure on outcome -fg tokens (DANA-2051)
TokensComponents
- —--ds-color-outcome-positive-fg / -caution-fg / -negative-fg were pinned to white unconditionally by the dark-mode token deriver's generic fg-on-color rule ("keep as-is"). That rule assumes the paired accent stays dark enough for white text — it doesn't for these three: their OKLCH-derived dark-mode values (#75b975 / #ff7f4e / #ff796e) are pastel-light, so white text measured ~2.4-2.6:1 contrast, failing WCAG 1.4.3 outright.
- —scripts/build-tokens.ts: added a MANUAL_DARK override for all three tokens to #18181B in dark mode — matches the existing --ds-color-validation-fg precedent (dark text on a light accent). Light mode is untouched (white still passes 5:1+ there). Dark-mode contrast now ~6.9-7.6:1 across all three tiers.
- —Two real consumers inherited the bug and are now fixed for free: the ledger /reporting urgency chip (which was also referencing a phantom --ds-color-text-on-accent token that doesn't exist anywhere in the DS — fixed in apps/ledger, tracked under DANA-2051) and components/ui/APIKeyDisplay.tsx's copied-state text color.
- —Surfaced during a DANA-2031 dieter re-review of the ledger /reporting route.
v1.22.1: Fix dist/cli.mjs Dynamic require crash (DANA-2145)
Tokens
- —dist/cli.mjs threw Dynamic require of "events" is not supported from commander/lib/command.js on load — the bundled CJS dep's internal require('events') hit esbuild's ESM-output require shim, which throws for anything it can't statically resolve. bin/nodus-ds's import(...).catch(() => tsx fallback) masked this since publication; the compiled bundle had never actually run.
- —tsup.cli.config.ts: added a banner that sets globalThis.require = createRequire(import.meta.url) so the shim's typeof require !== "undefined" check delegates to a real require instead of throwing. (A local const require was tried first — esbuild renamed it to avoid an internal name collision, which defeated the check; globalThis.require isn't a local binding esbuild can rename.)
- —tsup.cli.config.ts: added explicit target: "node22" — tsconfig's ES2017 target was leaking into esbuild and silently emptying import.meta.url (needed by both scripts/cli.ts and the new banner).
- —bin/nodus-ds: now spawns node dist/cli.mjs as a child process instead of import()-ing it in-process. Importing made bin/nodus-ds the file in process.argv[1], which fails cli.ts's direct-invocation guard (import.meta.url === pathToFileURL(process.argv[1]).href, added to keep the CLI side-effect-free when imported by tests) and silently no-op'd instead of running.
- —Verified with the ticket's repro command (node dist/cli.mjs add --list) plus bin/nodus-ds add --list (compiled path) and a bundle-removed run of bin/nodus-ds tokens --dry (tsx fallback still works).
v1.22.0: Evaluator page + IA nav overhaul + homepage truth repairs (DANA-2168)
TemplatesTokensDocs
- —New page /why-nodus — 8-section evaluator journey: positioning header with opening argument, agent-ops evidence grid (Sovereignty/Protocol/Provenance/Generative-UI), stats bar sourced from ds-stats constants, build/buy economics table with semantic left-border accents and [AI ESTIMATE] footer, honest-scope disqualifier grid (3 cells), semantic color law swatch grid (text-labeled, token-referenced), three living-proof template cards linking to verified routes, and early-access CTA terminal block on --ds-surface-inverse.
- —{ title: "Why Nodus", href: "/why-nodus" } added to Getting Started sidebar after Overview.
- —Top nav (SiteShell.tsx NAV_LINKS): added "Agentic" → /foundation/agentic-design-language at slot 3; removed "Charts" (/charts) and "Changelog" (/changelog). Net: 8 → 7 items.
- —Homepage (app/(site)/page.tsx): Executive door href changed from /awards → /why-nodus; Executive door description rewritten to "The case for adoption — what Nodus DS is, what it is not, and how to get access."; Developer door description rewritten to set accurate install-step expectations.
- —Homepage DIFFERENTIATORS const: added href field to all 3 entries (/foundation/agentic-design-language, /foundation/tokens, /finance); JSX render now shows "See the evidence →" arrowLink per entry.
v1.21.0: ComponentPageTemplate five-tier spacing hierarchy overhaul (DANA-1837)
TemplatesTokensComponents
- —Outer container: space-y-10 (40px uniform) removed; replaced with flex flex-col and explicit marginTop per section. The uniform 40px gap between every section child erased all information hierarchy — Header-to-Import had the same gap as Props-to-Metadata. The spacing itself now encodes tier.
- —Spacing map: three rhythm zones — 16px (--ds-space-stack-sm, same-tier adjacency), 32px (--ds-space-stack-md, tier transition), and 0px (fused sub-sections within a tier).
- —Props section: marginTop: var(--ds-space-stack-md) (32px — the largest gap on the page, creating gravitational pull into the Tier 1 apex); padding 20px → var(--ds-space-inset-md) (token compliance).
- —Accessibility section: marginTop: 0 explicit (border-top handles the internal division); padding 20px → var(--ds-space-inset-md). Props and Accessibility now fuse into one Tier 1 "implementation contract" block — isolated A11y notes read as optional; fused they read as mandatory.
- —Metadata strip: marginTop: var(--ds-fin-gap-xl) (16px — annotation-close to the content above); Metadata overline label removed (tautological — the three pill visual treatments already carry category encoding); paddingBottom 20px → var(--ds-space-inset-md).
v1.20.1: Live demos for the 8 finance components registered in v1.20.0 (DANA-2164)
ComponentsDocs
- —The 8 finance components registered in v1.20.0 (BarChart, ClearingNetworkIndicator, ForecastRow, HeatmapChart, OrderBookRow, PaymentQueueTable, PaymentStatusBadge, ScatterChart) had registry entries and Storybook stories but no lib/demo-registry.tsx entries, so their site component pages fell back to "Demo coming soon". Each now has a live demo, following the existing inline finance-demo convention (finance demos live directly in demo-registry.tsx; the lib/demos/ modules cover dataviz/sovereignty/interaction/protocol batches only).
- —Demo data mirrors each component's stories/finance/*.stories.tsx scenarios but is hydration-safe and mock-only: fixed values in place of the stories' Math.random() (the HeatmapChart FX correlation matrix is a fixed symmetric 5×5), fixed value dates, and demo entities (Meridian Bank, Northwind Capital, Eastern Corp, Atlas Bank, Kaito Securities, Harbor Global) in place of the stories' real bank names.
- —ForecastRow and OrderBookRow render as <tr> sub-components, so their demos wrap them in the same <table> chrome their Storybook decorators use — valid markup on the site page.
v1.20.0: 8 orphan finance components registered + Storybook docs-gap policies (DANA-2144/DANA-2124)
TemplatesComponentsDocs
- —Registry entries for the 8 previously-orphaned finance components (BarChart, ClearingNetworkIndicator, ForecastRow, HeatmapChart, OrderBookRow, PaymentQueueTable, PaymentStatusBadge, ScatterChart) — category ui / subcategory finance, status stable, with props transcribed from the actual prop types, accessibility notes from real ARIA behavior, variants/sizes where real, and MOBILE_USAGE classifications. The catalog count moves 368 → 376 (finance 172 → 180, stable 354 → 362); this is why the release is a feature/minor bump despite shipping no new component source. SYNC_PENDING_REGISTRATION in registry-extended.test.ts is now empty and the "allowlists stay honest" test enforces it stays that way — every future component file needs a registry entry at birth (DANA-2144).
- —Dedicated stories/patterns/ChartTooltip.stories.tsx — renamed from ChartInteractionLayer.stories.tsx (which only held ChartTooltip stories) so the file basename is the authoritative lib/storybook-ids.json key, matching its ChartAnnotation/ChartComparisonBar siblings. Adds StaleAgentAnalysis (validation-gold stale warning via staleAnalysisAge) and NegativeDelta (outcome-negative delta + primary field emphasis) to the existing user/agent states (DANA-2124).
- —docs/storybook-conventions.md — story file/title layout, mock-data rule, the all-states convention (REQUIRED for state-driven components — badges/status/indicators — optional elsewhere; the export must be named AllStates because generate-storybook-ids prefers the "All States" story as the preferred story ID), and the hooks exclusion policy (DANA-2124).
- —Hooks get API docs, not Storybook: useAgentStream, usePositionFeed, useAgentHeartbeat are deliberately excluded via a documented HOOK_EXCLUSIONS list in scripts/generate-storybook-ids.ts (also enforced — excluded hooks can never acquire a stray mapping), and ComponentPageTemplate now renders "API reference — no visual stories" for kind: "hook" entries instead of the misleading "Storybook (coming soon)" link. The typed props table + JSDoc'd source on the page are the reference (DANA-2124).
- —PaymentStatusBadge AllVariants and ClearingNetworkIndicator AllNetworks stories renamed to AllStates per the all-states convention — both are state-driven, and the name is load-bearing for the preferred-story ID.
Storybook stories + docs for the 8 S28/generative-UI components (DANA-2163)
ComponentsDocs
- —One autodocs-tagged story file per component shipped in v1.15.0–v1.18.0, in stories/patterns/: TaskStateBadge (Default, All States, per-lifecycle-group rows), RunLifecycleRail (in-flight, finished, interrupt terminal, nested child run with error terminal), HumanInputRequest (open with custom options, open with default APPROVE/DENY, answered, expired), StateDeltaInspector (default, snapshot toggle, history scrub, malformed-patch warnings), A2ATaskPanel (completed with history/artifact/metadata, input-required, working-empty, failed), ArtifactViewer (text/data/file part routing, streaming appending, unknown part kind, empty), ProvenanceFrame (default, chips + warnings, inProgress skeleton), UnknownComponentFallback. Story scenarios mirror lib/demos/protocol-demos.tsx mock data (demo-vendor, run_demo_*, fixed ISO timestamps) so site demos and Storybook stay consistent.
- —Each component's JSDoc header extended with a concise Usage section (when to use / when not to, key props) alongside the existing protocol-concept citations — JSDoc headers + Storybook autodocs pages are the component docs convention (no per-component guides in docs/).
- —Storybook rebuilt; lib/storybook-ids.json regenerated so all eight components resolve real docs/story IDs and their /patterns/<slug> pages replace the "Storybook (coming soon)" fallback (DANA-2123 mechanism).
- —Docs hub (monorepo, separate commit surface): the 8 components appended to NODUS_COMPONENTS in apps/nodus-agent-api/app/api/routes/docs/components.py per the nodus-apps contribution rule.
v1.19.2: Live demos for the 8 S28/generative-UI components (DANA-2159)
Components
- —The eight components shipped today in v1.15.0–v1.18.0 (TaskStateBadge, RunLifecycleRail, HumanInputRequest, StateDeltaInspector, A2ATaskPanel, ArtifactViewer, ProvenanceFrame, UnknownComponentFallback) had registry-extended.ts entries but no demo-registry entries, so their /patterns/<slug> pages rendered the "Demo coming soon" placeholder. New lib/demos/protocol-demos.tsx (sovereignty-demos module conventions — fixed ISO timestamps, mock-only data: demo-vendor, run_demo_*, task_demo_*) adds one live demo per component: full TaskStateBadge state row across the lifecycle groups, RunLifecycleRail with a nested child run and error terminal, HumanInputRequest open (3 options, live response ack) + answered pair, StateDeltaInspector with add/replace/remove patches and the BEFORE/AFTER snapshot toggle, a complete A2ATaskPanel (status, history, artifact, metadata), ArtifactViewer with text/data/file parts plus a streaming appending instance, ProvenanceFrame wrapping a StateBadge with a [SOURCE:] chip and a dropped-prop warning, and UnknownComponentFallback. Wired into lib/demo-registry.tsx via ...protocolDemos.
v1.19.1: Header version badge derived from package.json (DANA-2159)
Components
- —SITE_VERSION was hand-maintained and sat at 1.4.1 through fifteen releases while the nav badge displayed it; lib/site-meta.ts now derives it from package.json at build time — drift is impossible.
Generative UI Phase 3: public package exports via ./generative-ui subpath + docs (DANA-2161) — v1.19.0
TokensComponentsDocs
- —@nodus/design-system/generative-ui subpath export (src/generative-ui.ts, new tsup entry) — the public generative-UI surface: useNodusGenerativeUI, renderNodusComponentInline, renderA2UILayoutInline, RENDER_ACTION_NAME, LAYOUT_ACTION_NAME, validateProps + ValidatePropsResult, plus re-exports of ProvenanceFrame, UnknownComponentFallback, and the layout validator. Shipped as a subpath (the tokens/*.css precedent) rather than from the root barrel so @copilotkit/react-core and the 358-entry lazy render registry never load for consumers who don't use generative UI.
- —Root barrel (src/index.ts) now exports the dependency-light pieces: ProvenanceFrame (+ ProvenanceFrameProps), UnknownComponentFallback (+ UnknownComponentFallbackProps), validateLayoutSpec, A2UI_SPEC_TYPES, and ValidateLayoutSpecResult.
- —@copilotkit/react-core added as an OPTIONAL peer dependency (>=1.56, peerDependenciesMeta.optional: true) and to the tsup external list — required only when importing ./generative-ui.
- —Foundation docs: /foundation/a2ui-architecture gains a "Generative UI" section documenting the render-action model (renderNodusComponent / renderA2UILayout), the data-props-only safety property (JSON parsed once, never-throw validation), ProvenanceFrame semantics (generated output is always visibly framed), and /a2ui/generate as the living demo.
- —/a2ui/generate chat panel gains a two-sentence "what am I looking at" explainer strip above the chat: components render live from the approved catalog, the LLM supplies data only, provenance chrome marks generated output. Keeps the public demo self-explanatory for the DANA-2162 demand probe. GENERATOR_CATALOG untouched.
S28 protocol operations: StateDeltaInspector, A2ATaskPanel, ArtifactViewer + Nodus A2UI Profile naming (DANA-2163) — v1.18.0
ComponentsDocs
- —StateDeltaInspector (components/patterns/StateDeltaInspector.tsx) — AG-UI StateSnapshot/StateDelta inspector: renders shared agent state as a collapsible tree with RFC 6902 JSON Patch ops (add/replace/remove, RFC 6901 pointers) highlighted in place — temporal tint on patched values, agency accent on agent-written path labels, strikethrough ghost rows for removed keys (IterationDiff deletion treatment). Optional snapshotToggle (BEFORE/AFTER) and historyScrub (PREV/NEXT stepper indexing into the patches array). Never-throw: malformed patch entries (unknown op, invalid pointer, missing value, unresolvable path) render as caution warning rows.
- —A2ATaskPanel (components/patterns/A2ATaskPanel.tsx) — single A2A Task detail surface mirroring the spec's Task object ({id, contextId, status, history, artifacts, metadata}): identity header with the TaskStateBadge sibling, role-turned message history (user/agent) in ChatMessage border conventions, artifact list delegating each artifact to ArtifactViewer, and a mono key/value metadata block. Temporal spine.
- —ArtifactViewer (components/patterns/ArtifactViewer.tsx) — Part-type-aware renderer for the A2A Artifact model ({artifactId, name?, parts: Part[]}, Part = {kind: "text"|"data"|"file", ...}): text parts as a typographic block, data parts as DataList-convention key/value rows, file parts as a mediaType + uri chip (reference only, never fetched), unknown kinds as a warning row. appending: boolean shows the StreamingDot tail while streaming artifact-update appends arrive. Validation-gold accent — an artifact is enriched output.
- —All three registered in registry-extended.ts (status stable, full props) and exported from the patterns barrel. 10 new vitest render tests in components/__tests__/protocol-operations.test.tsx (patches applied/malformed/toggle/scrub, part-type routing, task header/history/artifacts). The A2UI GENERATOR_CATALOG is deliberately untouched.
- —app/(site)/foundation/a2ui-architecture/page.tsx — the page now introduces the protocol as "A2UI — the Nodus A2UI Profile" and adds a short naming note: Google's A2UI (a2ui.org) is an open protocol in the same agent-to-UI space with different payload semantics; the Nodus dialect is called the Nodus A2UI Profile to disambiguate. Descriptive naming only — no compatibility or endorsement claims.
S28 protocol operations: TaskStateBadge, RunLifecycleRail, HumanInputRequest (DANA-2163) — v1.17.0
TokensComponents
- —TaskStateBadge (components/patterns/TaskStateBadge.tsx) — badge for all nine A2A protocol TaskStates (submitted, working, input-required, auth-required, completed, failed, canceled, rejected, unknown) on the existing StateBadge anatomy. Colors follow the research doc's protocol lifecycle grouping: active=temporal, interrupted=validation, failed/canceled/rejected=agency, completed=outcome-positive, unknown=muted. Exports a taskStateGroup() helper so consumers can branch on active / interrupted / terminal.
- —RunLifecycleRail (components/patterns/RunLifecycleRail.tsx) — vertical rail rendering one AG-UI run as lifecycle phases: RunStarted, StepStarted/StepFinished segments, and a terminal cap (finished=outcome-positive / interrupt=validation / error=agency). Supports one level of nested child runs (AG-UI parentRunId concept), rendered indented. Composes the AgentTimeline track/dot visual language with TaskStateBadge-consistent segment colors.
- —HumanInputRequest (components/patterns/HumanInputRequest.tsx) — the canonical "agent needs a human" surface unifying the AG-UI interrupt model and the A2A input-required TaskState behind a source adapter prop ("ag-ui" | "a2a"). Validation-gold frame treatment consistent with ReviewRequestCard (S27 sovereignty styling); response buttons meet the 44px touch-target floor (--ds-touch-target-min-h); answered/expired statuses collapse to a resolution row.
- —All three registered in registry-extended.ts (status stable, full props) and exported from the patterns barrel. 9 vitest render tests in components/__tests__/protocol-operations.test.tsx. The A2UI GENERATOR_CATALOG is deliberately untouched — catalog inclusion is a separate curation decision.
Generative UI Phase 2: composite layouts + full render registry (DANA-2160) — v1.16.0
Components
- —renderA2UILayout CopilotKit frontend action (lib/use-nodus-generative-ui.tsx): the generator chat can now render composite multi-component A2UI layouts live through the existing A2UISurface renderer, wrapped in ProvenanceFrame. The spec travels as a JSON string (specJson) parsed once on completion — the same deterministic pattern Phase 1 chose for props.
- —lib/a2ui-layout-validate.ts — never-throw minimal validation of layout specs against the 19 nodus:* spec types A2UISurface can render (7 unit tests in lib/__tests__/a2ui-layout-validate.test.ts). Unknown spec types, non-objects, and invalid JSON degrade to visible warnings in the frame; a recognized-but-malformed spec is caught by an error boundary — the chat never crashes.
- —The gated "Live Component Rendering" system-prompt section now covers both tools and explains the choice: one catalog component → renderNodusComponent; a composed flow of nodus:* spec types → renderA2UILayout. Inline chat rendering wired for both action names in generator-client.tsx, still behind ENABLE_RENDER_ACTIONS.
- —scripts/generate-render-registry.ts now sources public/registry.json (path field) instead of the GENERATOR_CATALOG: the render registry expands 123 → 358 components. Unresolvable entries (non-.tsx paths, duplicate names, missing files, statically unresolvable exports) are skipped with a logged codegen warning — one bad entry never breaks the registry — and catalog coverage is hard-asserted (all 123 catalog names must be renderable). Intentional distinction: the catalog stays the LLM's allowed set in the system prompt; the registry is a superset so renderA2UILayout specs may reference any registered component.
- —lib/a2ui-prop-validate.ts enum-checks pure string-literal union types (e.g. "primary" | "secondary", 120 of 1,727 registry props) — invalid variant/size strings are now dropped with a warning instead of reaching React (3 new unit tests). Phase 2 spike verdict recorded in the module header: registry props are a curated data-prop subset of the real TS types (acceptable — unknown keys warn and pass through); a full ts-morph/react-docgen JSON-schema pass is documented and deferred.
Generative UI Phase 1: live DS components inline in chat (DANA-2158) — v1.15.0
Components
- —The /a2ui/generate chat now renders approved catalog components LIVE inline via a CopilotKit renderNodusComponent frontend action (lib/use-nodus-generative-ui.tsx), in addition to — not instead of — the generated code panel. Props travel as a JSON string parsed once on completion; streaming tool calls show a Skeleton + StreamingDot frame.
- —scripts/generate-render-registry.ts (npm run generate:render-registry, chained into prebuild after generate-registry-json) codegens lib/a2ui-render-registry.generated.tsx — a React.lazy registry over all 123 GENERATOR_CATALOG components, resolving both named and default exports (m[Name] ?? m.default).
- —lib/a2ui-prop-validate.ts — never-throw prop validation against the registry.json prop schemas: lossless primitive coercion, function/undefined stripping, unknown-key and missing-required warnings surfaced in the UI (6 unit tests in lib/__tests__/a2ui-prop-validate.test.ts).
- —New trust-provenance patterns (registered): ProvenanceFrame — provenance chip rail (default "ILLUSTRATIVE — generated output, no live data", [SOURCE:] chips in agency, [AI ESTIMATE]/confidence chips in validation), intentional 3px agency-red left agent-output marker, warnings list — and UnknownComponentFallback for non-catalog names.
- —System prompt gains a gated "Live Component Rendering" section instructing one renderNodusComponent call per component before the code block. Single toggle point: ENABLE_RENDER_ACTIONS in lib/a2ui-flags.ts (gates client action registration, inline message rendering, and the prompt section).
Vibe-tests: A2UI eval harness (DANA-2118)
ComponentsDocs
- —eval/ harness that measures whether the constrained A2UI generator produces correct, compliant UI vs baselines. Four arms (a2ui / registry-only / tailwind-baseline / plain-html), a hybrid grader (pure deterministic hard gates — scaffold, no-hex-in-JSX, catalog fidelity, must_use — plus a separate blind LLM-judge soft score), a runner with per-arm aggregation and the a2ui-vs-baseline delta, and an 8-task domain battery.
- —Live path uses the claude -p CLI (no API key); EVAL_MOCK=1 runs the whole pipeline offline. Pure grading logic unit-tested (7 cases). npm run eval:vibe / eval:vibe:mock.
- —Full live run, multi-turn degradation curve, and CI regression gating vs a committed baseline (see docs/spec-vibe-tests-eval-harness.md).
Figma Code Connect preflight: one-command unblock (DANA-2125)
TokensDocs
- —scripts/figma-preflight.ts (npm run figma:preflight) distinguishes missing vs expired/403 vs valid FIGMA_ACCESS_TOKEN against the live Figma API, and computes Code Connect mapping readiness live (14 ready / 55 pending of 69) instead of a hand-maintained table. docs/figma-code-connect.md documents the one-command unblock flow.
- —The 403 itself is resolved only by rotating the Figma credential (a manual step); the preflight makes that fix one command and self-verifying, but the valid-token success path is not exercised here.
nodus-ds upgrade: versioned codemods (DANA-2121)
TokensComponentsDocs
- —nodus-ds upgrade [--apply] [--from <version>] [--dir <path>] runs frozen, version-pinned codemods to migrate consumer code off deprecated APIs. Dry by default; value-preserving replacements are auto-applied, ambiguous sites are flagged for manual review.
- —First codemod — v1.3.0 bh-to-ds-tokens: 38 value-preserving --bh-* → --ds-* replacements (each --ds-* is defined as an exact alias of the primitive, so output is identical) plus 32 ambiguous primitives flagged for intent-based migration. Upgrades the warn-only deprecation-check CI into an autofixer.
- —scripts/codemods/ registry + Codemod interface; pure transform with 6 unit tests; docs/cli-upgrade.md.
nodus-ds swizzle: eject a component to own it (DANA-2122)
ComponentsDocs
- —nodus-ds swizzle <component> ejects a component you already consume into your own source tree with a loud ownership warning (it no longer tracks upstream). --rewrite-imports scans your project and repoints just that named import from @nodus/design-system to the local copy, preserving aliases and other named imports.
- —repointBarrelImport() — a pure, unit-tested import transform (6 cases). The CLI now guards program.parse() behind an is-main check so it can be imported by tests.
- —docs/cli-swizzle.md documents usage and the add vs swizzle distinction.
Framework-agnostic tokenVar() escape hatch (DANA-2120)
TokensDocs
- —tokenVar(name, fallback?) and a frozen tokenVars map, re-exported from the package entry, let non-Tailwind consumers (Panda, Emotion, MUI, vanilla-extract, inline styles) bind --ds-* tokens with a typed helper instead of hand-writing var() strings.
- —scripts/generate-token-names.ts (wired into prebuild) derives the typed DsTokenName union of 476 tokens from semantic.css/dataviz.css/responsive.css, so the typed surface can never drift from the CSS. Output: lib/token-names.ts.
- —docs/token-var.md documents usage; lib/token-var.test.ts guards behavior and generation freshness.
SYNC contract: registry <-> component source drift fails CI (DANA-2119)
Components
- —Three integrity cases in registry-extended.test.ts (existing Vitest CI job): every registry path/source exists on disk; no unregistered component source files; allowlists self-clean.
- —Surfaced 8 finance components missing a registry entry (tracked in DANA-2144), temporarily allowlisted rather than silently ignored.
ds-stats.ts enforced as the single count SSOT (DANA-2126)
TemplatesComponentsDocs
- —Prose counts had drifted from the derived lib/ds-stats.ts values (README 357, GUIDE 335 vs 360 components; 166/168 vs 167 templates). Corrected and annotated 16 live claims.
- —scripts/check-count-sync.ts validates counts tagged with an opt-in <!-- ds-count:STAT --> marker against ds-stats, ignoring untagged/historical numbers, and cross-checks registry.json totalComponents. Wired into the CI type-check job (check:counts).
v1.14.0: Storybook autodocs enabled + real ID map ends broken site links (DANA-2123)
TemplatesComponentsDocs
- —Every "Storybook" docs link on the site was broken — two root causes. (1) The deployed Storybook contained zero docs pages: docs: false in .storybook/main.ts and @storybook/addon-docs was never installed, though all 368 story files already carried tags: ["autodocs"]. (2) ComponentPageTemplate reconstructed story IDs from registry category (ui|patterns only) while real IDs derive from story titles across 11 groups — 232 of 360 component pages linked to non-existent IDs (e.g. ui-benchmarkcomparisonchart--docs instead of finance-charts-benchmarkcomparisonchart--docs).
- —stories/foundation/Introduction.mdx now loads (import updated to @storybook/addon-docs/blocks; the MDX glob was previously excluded entirely).
- —@storybook/addon-docs enabled — the built Storybook now ships 369 autodocs pages (1,842 index entries total).
- —scripts/generate-storybook-ids.ts — runs via poststorybook:build (locally and on Vercel) and emits lib/storybook-ids.json mapping component name → real docs/story IDs from the built index.json. Templates look IDs up instead of guessing; 357/360 registry components resolve to live docs pages.
- —Components without a Storybook entry (useAgentStream, usePositionFeed, useAgentHeartbeat — tracked in DANA-2124) fall back to the Storybook root labeled "Storybook (coming soon)". The interactive preview iframe is gated on a resolved story ID.
Foundation token-hygiene sweep: 33 pages moved onto `--ds-*` tokens (DANA-2106)
TemplatesTokensDocs
- —Every hardcoded color/px/font literal across the 37 foundation pages is now a var(--ds-*) token or carries a line-level audit-exempt marker with a reason category. Real page chrome (headings, labels, cards, frame spacing) converted to --ds-type-*, --ds-space-*, and --ds-* color tokens — 4,354 token references now live across foundation pages.
- —1,951 audit-exempt markers document deliberate literals by reason: code examples, reference/spec values, demo entity colors, layout geometry, fluid clamps, off-scale spacing, compound padding, optical tracking. Demo integrity preserved throughout.
- —Left bare by convention: @media breakpoints inside CSS template strings, JSX prose, and code-snippet interiors, where a marker would alter rendered output.
v1.13.4: Declare @types for directly-imported d3/geojson/storybook packages (DANA-2106)
Docs
- —Cold builds failed type-check (550 cascading errors) — the app imports 9 d3-* subpackages, geojson, and @storybook/react directly, but their type packages were never declared; resolution worked only through pnpm's private hoist into .pnpm/node_modules, which app source cannot see. A node_modules relink broke that leakage, and warm builds kept passing on stale incremental type-check state, masking it.
- —Added 11 devDependencies — @types/d3-{array,chord,contour,force,geo,hierarchy,interpolate,scale,shape}, @types/geojson, @storybook/react@^10.3.6. tsc --noEmit: 550 errors → 0. No code changes.
v1.13.3: Apple-grade text rendering + Turbopack JSX-space fix (DANA-2106)
Docs
- —font-synthesis: none globally — the browser can never render synthesized (blurry) bold/italic; every weight/style in use ships as a real font file (Inter variable with the opsz axis, JetBrains Mono 400–700, DM Serif 400 + italic). This is the single biggest crispness lever after the v1.13.2 font foundation.
- —text-wrap: balance on headings and text-wrap: pretty on paragraphs — Apple-quality rag, no one-word orphans (progressive enhancement).
- —Turbopack drops the implicit space after a JSX expression — the hero subhead rendered "93pre-built" on dev *and* production despite a correct source space. All 31 {expression} text sites across the homepage, roadmap, getting-started, and gallery now use explicit {" "} string spaces (captured as learning-042).
v1.13.2: Sovereignty Console promoted to stable — harness 167/167 (DANA-2106)
Components
- —Production render-verify harness: 167/167 clean (light + dark, zero errors). sovereignty-console promoted beta → stable per the QA gate. Gallery: 167 stable / 0 beta.
v1.13.2: High-resolution pass — 100% token compliance + crisp type rendering (DS-RESOLUTION)
TokensComponents
- —Token compliance 98% → 100% — audit:tokens now reports 360/360 passing (was 342), 0 warning, 0 failing. The last 19 sub-90 components were hardened: ConfirmDialog 5 → 100, plus KeyboardShortcutsPanel, MCPToolCall, NumberInput, ProgressiveDisclosure, ActionLedger, AuthorityScope, and 12 finance charts. Chart type was converted only inside <text> style objects (where var() resolves); genuine SVG geometry, sr-only blocks, and responsive wrappers were annotated audit-exempt rather than force-tokenized.
- —Synthetic faux-bold eliminated — JetBrains Mono now loads weights 600/700. ~252 components pair mono with --ds-type-label-weight (600) / --ds-type-hero-weight (700); without the real weight files the browser synthesized bold (blurry). Every mono label, timestamp, cost indicator, and button now paints crisp.
- —EmptyState self-contradiction — default error label "SOMETHING WENT WRONG" → "ACTION FAILED"; the old string is the exact generic copy the a2ui interaction-states guidance lists as a Don't. GlossaryTooltip's "Learn more" link gains aria-label="Learn more about {term}" (WCAG 2.4.4).
- —Type rendering fidelity (app/globals.css + app/layout.tsx): requested Inter's opsz axis + font-optical-sizing: auto (glyphs refine per size — sharper at the 10–11px data floor and at display sizes); font-variant-numeric: tabular-nums slashed-zero on mono (column-aligned digits for treasury data); text-size-adjust: 100% (stops mobile Safari inflating and breaking the tuned scale).
- —audit:tokens 100% (360/360) · build:verify passed (validates the new font axis + weights) · 2665 tests pass.
v1.13.1: Sovereignty Console — the agent-ops flagship template (DANA-2106)
Templates
- —/a2ui/templates/sovereignty-console — one operator supervising a four-agent fleet: the authority they granted (AuthorityScope, ReleaseBot's release-train grant with caps), the run log they can interrupt (ActionLedger — pause/stop/hand-back drives a FLEET PAUSED banner + header stat), and the reversal window on the last consequential action (ReversalWindow, "Released v1.13.0 to production"). The demo content is literally true — it renders the agent fleet that shipped v1.13.0. Domain: Agent Operations (first artifact of the agent-ops ontology exploration). Status: beta pending the production render-verify harness.
v1.13.0: S27 Sovereignty word-class ships — generator selects it 10/10 (DANA-2106)
TemplatesComponentsDocs
- —3 sovereignty spec types — nodus:authority-grant, nodus:reversal-window, nodus:action-ledger (vocabulary now 22 types; the generator catalog gains a Sovereignty group with selection guidance).
- —3 stable renderers in components/ai/: AuthorityScope (grant, permitted/denied, caps with usage, revoke), ReversalWindow (undo horizon, countdown, reverse-with-reason), ActionLedger (interruptible run log with Pause / Stop / Hand back). Stories + argTypes prop controls + storybookEmbed + live site demos. WCAG AA throughout (text status labels; AA-safe validation pairing instead of raw gold text; hydration-safe countdown per the S27 pattern).
- —19 site demos via modular batches (lib/demos/): 12 dataviz charts, 3 sovereignty, 4 patterns — every storied component now has a live site demo (story-to-site gap: zero).
- —Selection experiment: 10/10 PASS in an isolated harness using the generator's exact system prompt — 8/8 positive scenarios (incl. keyword-free paraphrases) selected the correct sovereignty spec unprompted; 2/2 negative controls stayed clean. Kill signal (<6/10) not approached. Verdict recorded in the brin decision log.
- —SidebarNav duplicate-key error fixed at the root — the Templates nav group listed /a2ui/templates twice (Overview + a stale "View all 165+" link); duplicate removed. The long-standing console error (previously ignore-listed in the QA harness) is gone; console now clean.
v1.12.1: Roadmap re-aimed at the thesis — S27 Sovereignty leads (DANA-2106)
Components
- —The roadmap now LEADS with the category arc: Sprint 27 — The Agent Interface Language: Sovereignty plus the Widening the Language track (A2UI spec-type expansion, cross-surface render parity, multi-agent orchestration surfaces, A2UI schema publication). Header reframed from feature-parity language to the-language-growing-word-classes. Answers the strategist-lens critique that a category-defining roadmap should widen the moat, not ship a maturity ledger. (Entry restored — an earlier CRLF-anchored insert was a silent no-op.)
v1.12.0: Role-selector, gallery color-law, A2UI proof strip (Gradient pt 2) (DANA-2106)
TokensComponentsDocs
- —Homepage role-selector — five doors. A routing layer below the hero: Executive/Partner (→ /awards), Developer (→ /getting-started), Designer (→ /foundation/tokens), Strategist (→ /a2ui/generate), Adoption Lead (→ /community/contributing). Each door is a full-cell <Link> with a semantic accent left-border plus a text role label (identity never carried by color alone), ≥44px targets, hover lift + widened border, visible focus ring, <nav aria-label="Find your path">.
- —Gallery shows the three-color law at the scan layer. New GalleryCard (3px role accent border + a 32px color-expression strip + a text role tag) and TriadFilterBar (All 264 / Agency 36 / Temporal 194 / Validation 10 — real buttons with aria-pressed, counts, 44px targets). Dominant role derives tokens-first with the design-brief's subcategory fallback (lib/semantic-role-map.ts) — only 14/264 entries declare a triad token, so tokens-only would have rendered 95% of cards neutral. Live mini-previews intentionally skipped: the demo registry previously OOM'd SSG workers; the spec's color-expression fallback is pure CSS.
- —A2UI proof strip on the homepage. Two panels: what A2UI is (+ domain chips + CTA to the live generator) and a proof illustration — a frozen spec JSON → arrow → the real ApprovalGate component rendered from it, with an honest visible caption. The moat, witnessed instead of narrated. JSON uses --ds-color-temporal-subtle on the inverse surface (token-only, contrast-safe).
- —All three surfaces render-verified on dev (5 doors with correct routes/accents; 263 gallery cards with exact accent distribution matching filter counts; strip renders spec + live component, 0 page errors). 2656 tests pass; build:verify green.
Homepage re-hero + Recognition (Gradient direction, part 1) (DANA-2106)
Components
- —Hero leads with the claim, not a thesis. The abstract "Built to make AI action legible" → the category claim "No other design system / built for the agent era" (Gradient copy Option A — the inversion earns the assertion; red continuation). The subhead now leads with concrete, derived counts (93 patterns, 172 finance), and a semantic-color-law line explains red/blue/gold in plain text.
- —Proof bar is honest and leads with proof. Now 357 Components · 172 Finance · 93 AI Patterns · WCAG AA (verified) — leads with the total and ends on the one *verified* claim (gold), instead of the internal sub-breakdown.
- —CTAs match reality. "Start building" (a promise an invite-only site can't keep) → "Explore the system" (/components) + "See A2UI in action" (/a2ui). The version badge → "Private preview · Evaluation by request · WCAG AA · render-verified."
- —Awards → Recognition. The verified WCAG card now leads (gold VERIFIED tier); the two award entries are honestly labelled "Submitted · Mar 2026" (under review), and the heading is "One achievement. Two submissions in review." — separating earned proof from in-motion submissions (the highest-trust fix the critique surfaced).
- —Single coherent <h1> (the color on the continuation is decorative — the sentence reads correctly monochrome and to a screen reader, WCAG 1.4.1); real text status labels (VERIFIED / Submitted), not color alone; 11px label floor on status badges; descriptive link text.
Last stale stat row → derived counts (DANA-2106)
Components
- —The Gradient copy review caught a second homepage stat row still hardcoding 41 / 111 / 73 (a different inline array from the ARCHITECTURE one fixed in v1.11.11). Wired to PATTERN_COUNT / FINANCE_COUNT / CORE_UI_COUNT. The homepage now has zero hardcoded component counts — every number derives from lib/ds-stats.ts.
Fix concrete defects surfaced by the persona critique (DANA-2106)
TokensComponents
- —Onboarding taught broken imports. getting-started used @nodus/ui/tokens.css and @nodus/patterns — neither package exists. Now the real specifier @nodus/design-system (+ /tokens/index.css).
- —The CLI was broken three ways (npx nodus-ds exited 1):
- —tsup.cli.config.ts added a shebang banner on top of the source's shebang → an invalid double-shebang bundle (syntax error). Removed the banner.
- —The output is dist/cli.mjs, but bin/nodus-ds imported dist/cli.js. Pointed the bin at .mjs and added a npx tsx fallback so it works from source too.
- —loadManifest() cast the object-shaped registry.json to an array and crashed on .reduce. Now reads .components (supports both shapes). npx nodus-ds add --list and add <c> --dry work.
Timezone-pin the last 2 #418 date renderers (DANA-2106)
TemplatesComponents
- —The render-verify backstop after v1.11.12 caught 2 templates still failing #418 (morning-brief, payment-approval-workflow) — a root cause distinct from the Date/random freeze: toLocale*String without a timeZone formats in UTC on the SSR server but in the client's local zone on hydration → text mismatch. (quant-dashboard was fully fixed by the freeze.)
- —morning-brief: AS_OF.toLocaleDateString/toLocaleTimeString → added timeZone: "UTC".
- —components/finance/DualControlPanel: party.timestamp toLocaleString(undefined, …) → "en-US" + timeZone: "UTC" (fixes payment-approval-workflow and any future consumer).
- —Render-verify harness now reports 166/166 clean. This iteration is why the empirical backstop matters — freezing the *instant* to a deterministic value still left the timezone-dependent *formatting* axis, which only a real cross-timezone render exposes.
A2UI gallery 100% stable — hydration residuals frozen (DANA-2106)
TemplatesComponents
- —Ran verify-a2ui-templates.mjs against the live deploy after the component hydration hardening: 163/166 clean (the shared-component fix cleared 6 of the 9 originally-failing templates — portfolio-risk-overview, compliance-monitoring-center, money-market, swift-payments, cash-flow-forecasting, plus yield-curve via the SVG fix).
- —Fixed the 3 residual #418 templates (their own render-time volatility, not covered by component hardening):
- —morning-brief + quant-dashboard: Math.random() chart/surface data → seeded mulberry32 (deterministic; identical server + client).
- —payment-approval-workflow + morning-brief: render-time new Date() → fixed module-level AS_OF constant. Event-handler timestamps (post-hydration) left untouched.
- —verify-a2ui-templates.mjs now reads the extracted lib/a2ui-templates.ts registry (the template array moved out of the gallery page in v1.11.11).
Storybook + site alignment, hydration hardening, SVG fix (DANA-2106)
TemplatesComponentsDocs
- —yield-curve-analytics SVG polyline bug — points used percentage strings ("0%,8.18…") inside a 0 0 100 100 viewBox, which is invalid; now plain numeric user-unit coordinates. Template passes the render-verify gate and is promoted to stable (gallery: 158 stable / 8 beta).
- —SSG hydration (React #418) hardening — 11 shared relative-time components now carry suppressHydrationWarning on the 22 text elements whose first render derives from Date.now() / new Date() (RelativeTimestamp, Timestamp, AgentIdentityBadge, DeadlineCountdown, ConfidenceSpectrum, CitationCard, ActionProvenanceCard, ProvenanceChain, ThinkingState, CollaborationPresence, AmbientAgentStatus). Prevents server/client text mismatch when a statically-prerendered page hydrates later. 4 sibling components (DataFreshness, ReviewRequestCard, CeremonyGate, AuditTrail) were verified already-safe (volatile values computed only post-mount or from fixed props).
- —lib/ds-stats.ts — single source of truth for headline counts, derived from the component registry + the A2UI template registry. Marketing pages import the named constants so counts can never drift from reality again.
- —18 Storybook stories closing the registry↔Storybook coverage gap — every storyable component now has a story: 4 AI-agent (StreamingArtifact, ContextWindowMeter, FunctionCallVisualizer, GenerativeFormFill), 2 reconciliation (AgedItemsList, ReconciliationSummary), 12 dataviz charts (Sunburst, Chord, ForceGraph, BoxViolin, ParallelCoordinates, Choropleth, CirclePacking, ContourDensity, Horizon, StreamGraph, Bump, RadialBar).
- —Extracted the A2UI template registry to lib/a2ui-templates.ts (was inline in the gallery page, 2,524→251 lines) so the gallery and the derived stats read from one source.
A2UI QA gate automated: 150 templates promoted to stable (DANA-2106)
Templates
- —scripts/verify-a2ui-templates.mjs — automated render-verify harness. Loads every /a2ui/templates/<slug> in light AND dark via Playwright, captures uncaught exceptions + console errors, checks rendered content, and emits the list of beta templates that render clean in both themes (promotion candidates). This makes the A2UI QA gate a runnable command instead of a manual per-template review.
- —150 beta templates promoted to "stable" after passing the automated light+dark render-verify gate (166 total tested: 157 clean, 9 flagged). Gallery is now 157 stable / 9 beta.
- —morning-brief demoted stable to beta — it was marked stable but fails the gate (React #418 hydration mismatch). Honest gating: a template with a known render error is not stable.
- —8x React error #418 (hydration text mismatch, likely time/locale-dependent SSR content): morning-brief, payment-approval-workflow, money-market, swift-payments, cash-flow-forecasting, portfolio-risk-overview, quant-dashboard, compliance-monitoring-center.
- —1x SVG <polyline> bug (percentage strings in a numeric points attribute): yield-curve-analytics.
Dark-mode completeness: A2UI gallery chrome tokenized (DANA-2106)
TemplatesTokensComponents
- —Dark-mode audit result: the 360-component library is fully dark-safe (0 hardcoded colors; token-compliance enforced; 62 --ds-* dark overrides). This change closes the only real dark-mode gaps found — in the A2UI gallery chrome:
- —Template gallery: the 40 per-template accent colors (many very dark, e.g. #1A1A6E) were used as text/bar color and went near-invisible in dark mode. Now wrapped in color-mix(in srgb, <accent> 65%, var(--ds-text-primary)) — one adaptive pattern that stays readable in both themes while preserving hue.
- —Generator UI: #059669 success color → var(--ds-color-outcome-positive); dropdown boxShadow → var(--ds-shadow-md).
A2UI generator: primitives added to the catalog (DANA-2106)
ComponentsDocs
- —Expanded the A2UI generator catalog with 53 foundational primitives (Layout, Typography, Forms, Overlays, Navigation, Data, Feedback, Actions). Previously the generator's catalog was finance-only (72 entries) — it could not lay out a page, build a form, or add a dialog. It can now compose complete interfaces.
- —All import paths are registry-derived and verified (119 unique paths, 0 missing).
- —formatGeneratorCatalog() now groups UI/primitive components by subcategory in the system prompt (added optional group field).
Production-readiness: test suite green + token fixes + typecheck gate (DANA-2106)
TokensComponentsDocs
- —Test suite was RED (12 failing) → now green (2655 pass, 0 fail).
- —Real token-compliance violations fixed: ConfirmDialog boxShadow → var(--ds-shadow-lg); KeyboardShortcutsPanel gap → var(--ds-space-stack-2xs)
- —Corrected 10 stale tests to match current (correct) behavior: ScrollArea (6 — component refactored to .ds-scroll-area + scroll-area.css), Tag a11y (2 — renders a native <button>), CardLoading skeleton count selector (1), sidebar-nav Foundation now uses groups (1)
- —typecheck npm script (tsc --noEmit) — passes clean, closing the toolchain gap
Storybook stories: all primitives complete (DANA-2106)
Docs
- —Added Storybook stories for the remaining 30 primitives — typography (8), forms (10), overlays (4), data (3), feedback (2), navigation (3) — in stories/ui/, grouped by subcategory title
- —All 37 primitives now have both a live demo and a Storybook story — completes the primitive-surfacing effort (both goals of the spec)
- —Verified via storybook:build (exit 0, all story bundles built)
Storybook stories: layout primitives (DANA-2106)
Docs
- —Added Storybook stories for the 7 layout primitives — Box, Flex, Grid, Container, Section, Separator, ScrollArea (stories/ui/, titled Layout/*, CSF3 + autodocs + argType controls)
- —Reference batch of the primitive Storybook coverage pass (37 total); verified via storybook:build (exit 0, all 7 bundled)
Complete primitive demo surface: 7 more demos (DANA-2106)
Components
- —Added live demos for ProgressiveDisclosure, NumberInput, DatePicker, DateRangePicker, GlossaryTooltip, ConfirmDialog, and Command to lib/demo-registry.tsx
- —With the navigation reference set, all 70 ui primitives now render a live demo (was 60/70) — no remaining "Demo coming soon" across layout/typography/data-entry/data-display/overlays/feedback/navigation
- —Verified: build:verify passes; all 7 pages render live (dev server) with correct content, no demo-originated console errors
Surface navigation primitives + build-gate fix (DANA-2106)
ComponentsDocs
- —Added live demos for Breadcrumbs, Stepper, and KeyboardShortcutsPanel to lib/demo-registry.tsx — their /components/<slug> pages now render interactive previews (were "Demo coming soon")
- —Reference subcategory for the demos-only primitive-surfacing pass; spec at docs/superpowers/specs/2026-07-02-surface-primitives-demos-stories-design.md
- —Verified: build:verify passes; all three pages render live (dev server), no demo-originated console errors
- —scripts/verify-build.sh false-pass: the gate exited 0 when next was missing (fallthrough treated any unrecognized failure as the known SSG bug). Now a non-zero build is tolerated only with positive evidence — Compiled successfully present AND the failure is specifically the _global-error/_not-found prerender error; otherwise it exits 1. Three-case tested.
Security dependency scan + patch updates
DAN-782Docs
- —Ran npm audit across 2,645 installed packages (78 prod, 2,568 dev)
- —0 critical, 0 high, 0 moderate vulnerabilities
- —6 low severity vulnerabilities identified — all in devDependency chain only
- —Root: elliptic (GHSA-848j-6mx2-7j84, CVSS 5.6) via @storybook/nextjs → node-polyfill-webpack-plugin → crypto-browserify
- —Fix requires breaking Storybook major downgrade (v10→v7) — accepted risk (devDep, no prod exposure)
Storybook decoupled + 12 missing stories + doc fixes
DAN-751TemplatesComponentsDocs
- —build script now runs next build only — Storybook failures no longer block site deploy
- —Storybook build remains available via dedicated storybook:build script
- —ConfirmDialog — 5 stories: Destructive, Agency, Neutral, Loading, NoDescription
- —Command — 3 stories: Default palette, EmptyState, AgentCommands
- —KeyboardShortcutsPanel — 4 stories: Inline, ButtonTrigger, KbdTrigger, FilteredByGroup
A2UI template QA pipeline + 8 stable promotions
DAN-752TemplatesTokens
- —QA script — Added scripts/qa-a2ui-templates.ts: static analysis gate enforcing CLAUDE.md QA rules. Checks hardcoded hex, wrong theme default, font size floor, missing useEffect cleanup, and gallery listing. Run: npx tsx scripts/qa-a2ui-templates.ts [slug...]
- —approval-flow fix — const ACCENT changed from "#FF0000" to "var(--ds-color-agency)". Gallery card color synced.
- —agent-chat fix — useEffect init reveal refactored to collect timer IDs and return cleanup, preventing message duplication in React 18 strict mode.
- —agent-approval-gate fix — Approve button color: "#fff" replaced with "var(--ds-text-inverse)".
- —8 stable promotions — Morning Brief, Agent Chat, Approval Flow, Observability, Cash Position Dashboard, FX Risk Monitor, Multi-Agent Orchestration, Agent Approval Gate promoted beta → stable after passing all QA gate checks.
Build pipeline, package.json, and CI validation fixes — DAN-750
TokensDocs
- —B1 — Removed NPM_TOKEN from semantic-release step env in release.yml; private: true is intentional (sub-packages publish independently) and the token was contradictory and unused at that step.
- —B2 — Moved @anthropic-ai/sdk, @copilotkit/*, @testing-library/dom, @vercel/analytics, @vercel/speed-insights from dependencies → devDependencies; all are doc-site-only and should not pollute consumer installs.
- —B3 — Added build:cli step to release.yml release job, ensuring the CLI binary is built before semantic-release runs.
- —B4 / C1 — Added build:lib validation step to ci.yml build job so dist/ is validated on every PR and push, not just at release time.
- —Dep dedup — Removed framer-motion, lucide-react, next, react, react-dom, recharts from dependencies (they were duplicating peerDependencies).
Token layer fixes: T3, T4, warnings
DAN-748TokensDocs
- —T3 — Added dark mode overrides for --ds-overlay-scrim/light/heavy in [data-theme="dark"]. Pins scrim/heavy to literal #000000 and light to literal #FFFFFF at low opacity. Eliminates the --bh-black/--bh-white inversion bug where these tokens rendered as white haze on dark surfaces.
- —T4 — Created docs/token-migration-v1-v2.md documenting the v1→v2 spacing migration strategy. Covers --ds-space-inset-sm semantic change (16px uniform → 4px 8px shorthand), migration detection steps, and when to use each variant.
- —Warning: --ds-color-info dark mode — Added --ds-color-info: var(--bh-blue-500) dark override (#6B8AFF, 5.67:1 on dark surfaces). Light mode --bh-blue-400 (#7080EC) is decorative-only contrast; dark surfaces needed a brighter step.
- —Warning: --ds-space-inset-2xl — Added to :root inset scale as var(--bh-space-8) (64px). Completes the inset size ladder from 2xs through 2xl.
- —Warning: responsive.css — Replaced @media (prefers-color-scheme: dark) with [data-theme="dark"] selector. Project theme is opt-in via DOM attribute, not OS preference.
Breaking dep upgrades (security follow-up) — DAN-426
Docs
- —semantic-release v24→v25 — Major version upgrade from ^24.2.3 to ^25.0.3. Eliminates bundled npm@10.9.8 which contained vulnerable picomatch@4.0.3 (high, ReDoS) and brace-expansion@2.0.2 (moderate, process hang) inside its isolated node_modules/ tree.
- —npm override ^11.13.0 — Forces @semantic-release/npm's transitive npm dependency to 11.13.0+, which ships patched picomatch@4.0.4 and brace-expansion@5.0.5. Resolves the remaining bundled-dep audit findings that overrides alone could not reach.
- —CopilotKit uuid — Already resolved by uuid>=14.0.0 override from DAN-673. Confirmed all @ag-ui/client, @copilotkit/*, and @langchain/* instances resolve to uuid@14.0.0. No additional action needed.
- —Vulnerability trajectory — 8 (DAN-673) → 6 (this scan). All remaining are elliptic (6 × low) in @storybook/nextjs → node-polyfill-webpack-plugin → crypto-browserify. Dev-only, no upstream fix, no production surface.
- —Storybook/elliptic — No fix available. elliptic@6.6.1 is latest and remains in advisory range. Storybook 10.x uses node-polyfill-webpack-plugin@2.0.1 which transitively pulls it. Downgrading to Storybook 7.x is not viable. Accepted as residual dev-only risk.
Security dependency scan — DAN-673
Docs
- —uuid override added — Added "uuid": ">=14.0.0" to package.json overrides. This closes GHSA-w5hq-g745-h8pq (missing buffer bounds check in uuid v3/v5/v6 when buf is provided) across all transitive consumers: @copilotkit/*, @ag-ui/*, @langchain/langgraph*, mermaid, and streamdown. 15 moderate vulnerabilities eliminated.
- —DevDep patch sweep — Updated 12 devDependencies to latest patch versions: @storybook/addon-a11y@10.3.6, @storybook/addon-themes@10.3.6, @storybook/nextjs@10.3.6, storybook@10.3.6, @axe-core/playwright@4.11.3, @playwright/test@1.59.1, @tailwindcss/postcss@4.2.4, tailwindcss@4.2.4, chromatic@16.6.3, @figma/code-connect@1.4.4, @next/bundle-analyzer@16.2.4, vitest@4.1.5.
- —Vulnerability trajectory — 27 (DAN-561) → 23 (DAN-561 patched) → 8 (this scan). Zero production-surface vulnerabilities remain.
- —Remaining (dev-only, unfixable at time of scan):
- —picomatch (high) + brace-expansion (moderate): bundled inside npm CLI's isolated tree. Resolved in DAN-426 via semantic-release v25 + npm override.
Component gaps + production hardening — DAN-661
TokensComponents
- —5 new components — Breadcrumbs (navigation trail with overflow collapse), Stepper (multi-step progress indicator), NumberInput (finance-grade numeric input with Intl.NumberFormat currency/locale), DatePicker + DateRangePicker (native date inputs, zero deps), Command (cmdk wrapper with DS tokens).
- —All Tier A — Every new component uses forwardRef + cva + cn() + displayName. Semantic tokens only, no raw hex.
- —WCAG AA verified — Accessibility-lead reviewed all 5 components. Fixed: Stepper ARIA list structure + step count labels, NumberInput keyboard ArrowUp/ArrowDown increment.
- —Barrel exports wired — All new components exported from domain barrels (form/, navigation/, ui/), main src/index.ts, and components/ui/index.ts (Command).
- —Registry expanded — 357 components registered in registry-extended.ts / public/registry.json (up from 338 pre-DAN-661).
Token compliance audit — DAN-562
TemplatesTokensComponents
- —Scope — Full P1 audit across all 372 component files for: raw hex values, --bh-* primitive token usage, --ds-border-* as text color, and font size below 10px floor.
- —Result — Zero P1 violations found. All 367 component TSX files pass the token contract (no regression from DAN-311).
- —compliance-registry.json — Added 37 previously-unregistered components to the registry, bringing total from 335 → 372 at 100% token compliance.
- —New chart components: BarChart, BoxViolinPlot, BumpChart, ChordDiagram, ChoroplethMap, CirclePacking, ContourDensityChart, ForceGraph, HeatmapChart, HorizonChart, ParallelCoordinates, RadialBarChart, ScatterChart, StreamGraph, SunburstChart
- —New finance components: ClearingNetworkIndicator, ForecastRow, OrderBookRow, PaymentQueueTable, PaymentStatusBadge
Security dependency scan — DAN-561
Docs
- —package.json overrides — Added postcss: ^8.5.10 override to force Next.js 16's bundled PostCSS from 8.4.31 (XSS via unescaped </style> — GHSA-qx2v-qp2m-jg93) to 8.5.12. Verified all postcss resolutions now show overridden at 8.5.12.
- —npm audit fix — Applied non-breaking fixes; patched 4 vulnerabilities total (27 → 23).
- —Remaining (unfixable without breaking changes):
- —picomatch (high) + brace-expansion (moderate): bundled inside the npm CLI tool (node_modules/npm/node_modules/...). Not app runtime code; cannot be patched via overrides. Upstream npm must release a patched bundle.
- —elliptic chain (6 × low): transitive dev-only dependency via @storybook/nextjs. Fix requires downgrading to Storybook 7 — rejected. Not shipped to production.
Documentation freshness check — DAN-500
Docs
- —lib/sidebar-nav.ts — Added /foundation/a2ui-architecture to the System group under Foundation. This 825-line page (A2UI protocol design, spec type taxonomy) was present but unreachable through navigation.
- —lib/sidebar-nav.ts — Fixed i18n nav split: "Internationalization (i18n)" now correctly points to /foundation/i18n (the RTL/BiDi design spec, DAN-146) rather than the demo. Renamed /i18n link to "i18n Demo" and /i18n/demo to "i18n Interactive" for clarity.
- —lib/search-index.ts — Added /foundation/i18n (i18n design spec) and /foundation/a2ui-architecture (A2UI foundation spec) so both pages appear in site search. Previously unreachable via both nav and search.
Charts nav, /charts/[slug] routes, sidebar links — DAN-433
TemplatesComponentsDocs
- —app/(site)/layout.tsx — Added "Charts" to primary header nav between Patterns and Finance. Gives the Charts & Data Viz section equal standing with Components and Patterns.
- —app/(site)/charts/[slug]/page.tsx — New dynamic route. Serves all chart components (both ui/finance and pattern/dataviz registry entries) through ComponentPageTemplate with prop table, source code, and related components. Static params generated from both categories at build time.
- —app/(site)/charts/page.tsx — Gallery card links updated from /components/{slug} / /patterns/{slug} to /charts/{slug} for all chart types.
- —lib/sidebar-nav.ts — Charts & Data Viz sidebar rebuilt with buildChartGroups(): replaces anchor-only "By Type" links with individual component entries under "Finance Charts" and "Visualization Patterns" groups, all linking to /charts/{slug}.
D3 chart accessibility hardening — DAN-432
Components
- —components/finance/ChordDiagram.tsx — Enhanced ARIA: added role="img", aria-label with dynamic data summary, keyboard navigation between chords (Arrow keys), screen reader fallback <table> with flow amounts.
- —components/finance/ForceGraph.tsx — Enhanced ARIA: added role="img", aria-label, keyboard navigation between nodes (Tab + Arrow keys), focus ring on active node, screen reader fallback <table> with node connections and edge weights.
- —components/finance/SunburstChart.tsx — Enhanced ARIA: added aria-label with hierarchy summary, keyboard drill-down (Enter to expand, Escape to collapse), breadcrumb trail announced via aria-live.
- —components/__tests__/d3-charts-a11y.test.tsx — New comprehensive a11y test suite (572 lines) covering all D3 chart components: ARIA roles/labels, keyboard navigation, screen reader fallback tables, focus management, prefers-reduced-motion support, high-contrast mode.
- —All D3 charts now pass axe-core audit with zero violations.
Adopt D3.js + charts section + 3 initial D3 components — DAN-427
TokensComponentsDocs
- —Architecture decision: D3.js modules adopted as math/geometry layer. React keeps DOM ownership. D3 provides scales, shapes, layouts, interpolation. No d3.select() — fully declarative React rendering.
- —D3 modules installed: d3-scale, d3-shape, d3-hierarchy, d3-array, d3-format, d3-time, d3-time-format, d3-interpolate, d3-color, d3-scale-chromatic, d3-sankey, d3-force, d3-chord, d3-geo, d3-contour. Types: @types/d3, @types/d3-sankey.
- —Charts & Data Visualization section added to sidebar nav with gallery page at /charts. Organizes 30+ chart/viz components by type (Standard, Hierarchical, Network, Heatmaps, Financial, Micro, Infrastructure).
- —components/finance/SunburstChart.tsx — New D3-powered sunburst chart (d3-hierarchy.partition). Fund decomposition, portfolio allocation drill-down with arc transitions.
- —components/finance/ChordDiagram.tsx — New D3-powered chord diagram (d3-chord). Cross-entity treasury flows, intercompany transfers with gradient ribbons.
HorizonChart + StreamGraph + BumpChart + RadialBarChart — DAN-430
TokensComponentsDocs
- —components/finance/HorizonChart.tsx — Dense multi-series time-series using the horizon chart technique. Each series gets a compact lane; values fold into nBands overlapping opacity layers (band 0 = full, band 2 = lightest) using d3-area + curveMonotoneX with clipPath masking. Use case: monitoring 10+ FX rates or cash positions simultaneously.
- —components/finance/StreamGraph.tsx — Stacked area with stackOffsetWiggle + stackOrderInsideOut for organic S-flow baseline. Uses d3-shape stack + area + curveCatmullRom. Categorical token palette. Use case: AUM composition over time.
- —components/finance/BumpChart.tsx — Rank change chart connecting positions across time periods with curveBumpX (d3-shape 3.x). Dots at each rank with accessible aria-label per point. Right-side series labels at last rank position. Use case: fund performance rankings, counterparty ranking shifts.
- —components/finance/RadialBarChart.tsx — Circular comparative bars using scaleBand (angle positions) + scaleLinear (radial length) + d3Arc. Background track arcs show limit. Labels with cos/sin(midAngle - π/2) offset for 12-o'clock orientation. Use case: KPI comparison, limit utilization.
- —All 4 registered in registry-extended.ts with full prop definitions.
ChoroplethMap + CirclePacking + ContourDensityChart — DAN-429
TokensComponents
- —components/finance/ChoroplethMap.tsx — Geographic exposure visualization using d3-geo (geoNaturalEarth1 / geoMercator). Regions colored by sequential token scale. Accepts real GeoJSON features; default demo uses major world-region rectangles. Legend strip + pattern overlay ensure color is not the sole encoding. Screen-reader fallback table.
- —components/finance/CirclePacking.tsx — Hierarchical allocation chart using d3-hierarchy.pack(). Nested circles for portfolio → fund → position drill-down. Depth-based opacity conveys nesting hierarchy. Labels gated on radius ≥ 18px. Categorical token palette. Screen-reader fallback table with allocation %.
- —components/finance/ContourDensityChart.tsx — 2D kernel density estimation using d3-contour. Auto-derived KDE bandwidth. geoPath() (no projection) converts pixel-space MultiPolygons to SVG paths. Bimodal demo data showing two return clusters. Zero reference lines, scatter point overlay, density legend. Screen-reader data summary table.
- —All 3 registered in registry-extended.ts; added to charts catalog sections; mobile behaviors documented.
D3 chart math migration — DAN-428
TokensComponents
- —components/finance/Treemap.tsx — Replaced custom squarified layout algorithm with d3-hierarchy.treemap(). React rendering layer and all accessibility (ARIA, keyboard nav) preserved. Removed ~60 lines of manual layout code.
- —components/finance/SankeyDiagram.tsx — Replaced custom BFS column assignment + manual Bezier path generation with d3-sankey + sankeyLinkHorizontal(). Preserves token-based theming, gradient fills, and screen reader labels.
- —components/finance/LineChart.tsx — Scale logic migrated to d3-scale (scaleLinear); path generation migrated to d3-shape (line, area, curveLinear). Confidence band switched from <polygon> to d3Area with y0/y1 bounds. Zero visual diff.
- —components/finance/AreaChart.tsx — Same scale/shape migration as LineChart. Stacked area baselines computed identically; d3Area and d3Line replace manual M L Z path strings. Zero visual diff.
- —components/finance/shared/chart-tokens.ts — getSequentialColor and getDivergingColor now use d3-interpolate (interpolateRgb) for smooth continuous gradients; replaces discrete 5-step palette. HeatmapChart inherits the improvement automatically.
Statistical charts — DAN-431
ComponentsDocs
- —components/finance/BoxViolinPlot.tsx — New D3-powered box/violin plot for risk distribution visualization. Renders quartiles, median, whiskers, outliers, mean diamond. Optional violin KDE overlay with Gaussian kernel and Silverman bandwidth. Keyboard-focusable series with tooltip. Screen-reader fallback <table> with statistical summaries (min, Q1, median, mean, Q3, max, outlier count).
- —components/finance/ParallelCoordinates.tsx — New D3-powered parallel coordinates chart for multi-factor instrument analysis. Vertical axes with drag-to-brush range filtering. Rows that fall outside any brushed axis are hidden. Live row count and "Clear filters" control. Screen-reader fallback table with aria-hidden on filtered rows. Keyboard navigation on each axis (Tab + Escape to clear brush).
- —registry-extended.ts — Registered both components (box-violin-plot, parallel-coordinates) with full prop definitions and mobile usage notes.
- —app/(site)/charts/page.tsx — Added "Statistical & Analytical" section to the chart catalog.
- —lib/sidebar-nav.ts — Added "Statistical & Analytical" nav item with new badge.
Design review cycle — DAN-425
Components
- —components/patterns/AvatarStack.tsx — Initials and overflow count (+N) font sizes now clamp to Math.max(10, ...) at avatar sizes below 25px. At the default size (32px) this is a no-op; at small sizes (e.g. 24px) the old formula produced 9px (violation). CollaborationPresence already applied this pattern correctly.
Security dependency scan — DAN-423
ComponentsDocs
- —Next.js 16.2.1 → 16.2.4 — GHSA-q4gf-8mx6-v5v3 (Denial of Service via Server Components, CVSS 7.5, >=16.0.0-beta.0 <16.2.3)
- —Vite 8.0.1 → 8.0.10 — three high-severity CVEs: path traversal in optimized deps .map handling (GHSA-4w7w-66w2-5vf9), server.fs.deny bypass with queries (GHSA-v2wj-q39q-566r), arbitrary file read via WebSocket (GHSA-p9ff-h696-f583)
Token compliance audit — DAN-311
TemplatesTokensComponentsDocs
- —Font size floor (10px minimum): lib/site-styles.ts a2uiLabel raised from 9px → 10px (propagates to all 23+ A2UI templates). components/patterns/LiveChangeIndicator.tsx role label raised from 8px → 10px.
- —Border tokens used as text color (20 violations fixed): var(--ds-border-separator), var(--ds-border-structure), and var(--ds-border-default) were misused as CSS color values — these are 2–3:1 contrast, failing WCAG AA. All replaced with var(--ds-text-muted) (4.83:1).
- —components/ai/ModelSelector.tsx — separator |
- —components/site/ComponentPageTemplate.tsx — breadcrumb /
- —components/patterns/SpeechStateIndicator.tsx — idle + muted states
KeyboardShortcutsPanel + KeyboardBadge (H7 + H10) — DAN-132
TokensComponentsDocs
- —components/ui/KeyboardShortcutsPanel.tsx — New component with three trigger modes: inline (dedicated pages), button (sidebar toggle), kbd (global ? key activation).
- —KeyboardBadge — Exported sub-component rendering styled <kbd> elements using --ds-type-mono-font and --ds-surface-raised.
- —context prop — Context-aware filtering: pass a context key to show only relevant shortcuts for the current view.
- —Two-column grid layout: Action label | Key combination(s), grouped by category with group-filter tab strip.
- —Full token compliance: all colors, borders, and type use --ds-* semantic tokens. No raw hex.
GlossaryTooltip + term definition system — DAN-133
Components
- —components/ui/GlossaryTooltip.tsx — New <abbr>-anchored tooltip component using the temporal variant (blue = informational). Props: term, definition, learnMoreHref?.
- —lib/glossary.ts — GLOSSARY map with 15 entries: MCP, MCP Server, MCP Tool Call, A2A, A2A Handoff, Provenance, Epistemic State, Confidence Score, Grounding, Orchestrator, Handoff, Delegation, Vault, Guardrail, Model Selector.
- —components/patterns/MCPToolCall.tsx — tool and server labels wrapped with GlossaryTooltip.
- —components/patterns/MCPServerStatus.tsx — Section title wrapped with GlossaryTooltip.
- —components/patterns/ProvenanceChain.tsx — Chain title wrapped with GlossaryTooltip.
Token compliance audit — DAN-69
TemplatesTokensComponents
- —ChartInteractionLayer — Swap A/B button used --ds-border-structure as text color (2-3:1, fails WCAG). Corrected to --ds-text-muted (4.83:1).
- —PresenceAvatarStack — Separator · dot used --ds-border-structure as text color. Corrected to --ds-text-muted.
- —ComponentPageTemplate — Check icon badge had fontSize: "9px" below the 10px floor. Bumped to 10px.
Security dependency scan and patch — DAN-68
TemplatesDocs
- —lodash@4.18.1 — fixes GHSA-r5fr-rjxr-66jc (Code Injection via _.template, CVSS 8.1) and GHSA-f23m-r3pf-42rh (Prototype Pollution, CVSS 6.5)
- —lodash-es@4.18.1 — same CVEs as lodash
- —picomatch@4.0.3 (high) — bundled inside npm@11.12.1/tinyglobby — cannot be overridden; affects only npm CLI tooling, not runtime. Upstream fix required from npm team.
- —brace-expansion (moderate) — bundled inside npm@10.9.8 in semantic-release — same constraint.
- —elliptic and crypto-browserify chain (5 low) — in @storybook/nextjs@10.3.3; npm audit incorrectly suggests downgrade to 7.0.14. Dev-only, no runtime exposure.
Fix duplicate color TS errors in finance components — DAN-44
TokensComponentsDocs
- —Fixed: ConfirmationCard, CurrencyAmount, ExceptionQueue, HedgeBook, JournalEntry, PaymentQueue, PaymentTracker, RegulatoryReport, RiskDisclosure, RiskHeatmap, SanctionsCheck, ScreeningResultCard, SurveillanceQueue, TCAReport, ThresholdAlert, WaterfallChart
- —Storybook build: ✓ passing
- —Next.js build: ✓ passing (576 pages, TypeScript clean)
Site header redesign — DAN-35
Components
- —Version badge now sourced from lib/site-meta.ts — no more drift from package.json
- —Nav links gain active state via usePathname() — bold text + agency-red underline pip
- —Added Get Started and Changelog to top nav
- —Improved ARIA labels, aria-current="page", role="banner", tabIndex={-1} on main
- —Focus-visible outlines on all interactive header elements (temporal blue, 2px offset)
P2 inline-no-token violations cleared — DAN-24
TokensComponents
- —Added audit-exempt directive support to scripts/audit-tokens.ts for layout-only, dynamic-color, and geometric style blocks
- —Cleared P2 violations across ~80 pattern, UI, AI, form, overlay, and typography components
- —No semantic changes — all visual output unchanged; compliance metadata only
P1 hardcoded token violations cleared — DAN-22
TokensComponents
- —Added audit-ignore directive support to scripts/audit-tokens.ts for geometric/SVG/breakpoint exemptions
- —Replaced hardcoded values with DS spacing tokens (--ds-space-inset-*, --ds-fin-gap-*, --ds-icon-size-*)
- —Replaced one rgba(255,255,255,0.35) with color-mix(in oklch, var(--ds-text-inverse) 35%, transparent)
- —Coverage: 97% → 100%
Roadmap accuracy audit — DAN-221
TemplatesTokensComponents
- —S26: White-Label Theming System promoted inprogress → stable (RuntimeThemeProvider, theme builder, guide all shipped). Sprint phase → stable.
- —P2 Finance Ontology: Liquidity & Cash, Compliance & Regulatory, Reconciliation, Portfolio, Funding all promoted planned/inprogress → stable with component references.
- —P2 Finance Workflows: Daily Cash, FX Hedging, Payment Approval promoted planned → stable with A2UI template references.
- —P3 Data Visualization: All 8 chart types → stable. DS Token Bridge and Responsive Container → stable. Tooltip System and Chart Accessibility → beta. Phase → stable.
- —P4 Templates: All finance and AI interface templates → stable. Phase → stable.
Interaction State primitives extracted as reusable components — DAN-216
TokensComponents
- —StateBadge (components/patterns/state-badge.tsx) — color-coded uppercase badge
- —StateIndicator (components/patterns/state-indicator.tsx) — animated dot indicator.
- —ScenarioScript (components/patterns/scenario-script.tsx) — step-sequence renderer
- —globals.css — added four new keyframe + utility classes:
- —interaction-states page refactored to import StateBadge and ScenarioScript;
Token compliance Wave 5: 6 components reach 97–100% score — DAN-212
TokensComponents
- —MatchQueue 80→97% — 10 P2s fixed (layout props moved to Tailwind className)
- —ProgressivePermissionFlow 88→100% — 6 P2s fixed (flex/margin layout props → className)
- —ReconciliationDiff 90→100% — 2 P1s fixed (width: "140px" → var(--ds-fin-col-4xl))
- —BreakAnalysisTable 94→100% — 3 P2s fixed (overflow, table layout → className)
- —BreakAnalysisPanel 94→100% — 3 P2s fixed (overflow, table layout, list-style → className)
Token compliance Wave 3: 19 warning-band components promoted to passing — DAN-205
TokensComponents
- —IconButton 70→100, Dialog 70→100, DeadlineCountdown 70→100, ISINChip 70→100
- —Table 71→96, AgencyIndicator 71→98, FXRateTicker 71→98, CovenantDashboard 71→91, CurrencyAmount 71→96
- —TaskQueue 73→98, Watermark 73→98, CovenantGauge 73→98, RatioBar 73→93
- —CashPositionCard 74→98, WaterfallChart 74→94, SettlementTimeline 74→98
- —Skeleton 75→100, SegmentedControl 75→100, TableOfContents 75→100
Continuous documentation sync SOP — DAN-183
ComponentsDocs
- —Created lib/changelog-data.ts as the single machine-readable source of truth for release history
- —ChangelogEntry interface with date, version?, ticket, title, kind, summary, items[]
- —CURRENT_VERSION constant synced to package.json
- —Back-filled 10 entries from DAN-001 (v1.0.0) through DAN-190 (today)
- —Added RecentChanges component above the ProvenanceChain sprint narrative
Treasury Executive Summary dark mode fix + QA gate — DAN-180
TemplatesTokensDocs
- —Replaced A2UI_DARK as D with A2UI_LIGHT as C in app/(site)/a2ui/templates/treasury-executive-summary/page.tsx
- —Page now renders in light mode by default; CSS token vars in A2UI_LIGHT auto-adapt to dark mode
- —Updated footer note from "dark · fixed presentation" to "light default · dual-theme"
- —Added status?: "stable" | "beta" | "incomplete" field to the TEMPLATES data schema in the gallery index
- —Gallery cards now render a visible badge for "beta" and "incomplete" templates
Fix invisible FIXED tags on release notes page — DAN-178
TokensDocs
- —Added --ds-color-outcome-positive-subtle-fg — dark green on pale subtle bg (light), white on dark subtle bg
- —Added --ds-color-outcome-caution-subtle-fg — consistent coverage for caution subtle surfaces
- —Added --ds-color-outcome-negative-subtle-fg — consistent coverage for negative subtle surfaces
- —Extended data-fin-region="asia" override with matching -subtle-fg tokens
- —FIXED badge: color changed from --ds-color-outcome-positive-fg → --ds-color-outcome-positive-subtle-fg
Component API documentation — DAN-190
TemplatesTokensComponentsDocs
- —Added accessibilityNotes?: string[] field to ComponentEntry interface in registry-extended.ts
- —Authored accessibility notes for 6 core UI primitives: Button, IconButton, Input, Badge, Tag, Card
- —ComponentPageTemplate now renders an Accessibility section (between Props and Metadata strip) when notes are present
- —Notes cover: ARIA attributes, keyboard interaction, contrast compliance, dynamic update patterns
- —GET /api/components — full registry list with optional ?category, ?status, ?q filters
Experimental area: ∞ Canvas Grid + Spline 3D — DAN-169
TokensComponents
- —Infinite-depth pan/zoom canvas using retained-mode Canvas 2D rendering
- —40×40 node grid with semantic status colors tied to --ds-color-* tokens
- —rAF draw loop outside React reconciler for 60fps performance
- —Mock mode (built-in random state churn) + Live WebSocket mode (JSON diff array)
- —Pan via drag, zoom via scroll, configurable update rate
Font floor sweep — DAN-171
TokensComponentsDocs
- —app/(site)/page.tsx — 11 badge/label instances
- —app/(site)/a2ui/components/page.tsx — 21 spec-type label instances
- —app/(site)/_components/component-showcase.tsx — 5 instances
- —app/(site)/_components/token-demo.tsx — 5 instances
- —app/(site)/foundation/heuristics/page.tsx — 5 instances (Tailwind)
v1.4.0 — Sprint 26 Release
DAN-159TemplatesTokensComponentsDocs
- —@nodus/design-system@1.4.0 — AI components, Reconciliation domain, White-Label Theme Builder, i18n + tokens v2 exports fixed
- —@nodus/design-system-native@1.4.0 — React Native adapters (synchronized version bump)
- —@nodus/tokens@1.4.0 — standalone CSS token package (CDN-ready via jsDelivr + unpkg)
- —Three-package publish pipeline with synchronized 1.4.0 versioning
- —Bundle size budgets updated for v1.4.0 scope: ESM 260 kB / CJS 270 kB (gzip) — PASS
Post-Release Fixes & Theme Builder Enhancement
TokensDocs
- —Triadic hue rotation (fromSeedColor()): pick any brand hex color and derive a full semantic palette. The seed becomes agency; temporal and validation are derived at +120° / +240° on the hue wheel — mirroring the near-triadic relationship of the Nodus default palette.
- —"Seed" UI strip in the Theme Builder top bar: native <input type="color"> + hex text input + Generate button. Pressing Generate applies the derived triadic palette and marks the theme as Custom.
- —hexToHsl, hslToHex, isLightColor helpers added as pure math utilities (no DOM reads, SSR-safe).
- —Subtle and fg variants auto-computed: subtle = S 20% / L 96%; fg = white or #18181B based on Y-luminance.
- —Search index: Added 7 missing entries — Agentic Design Language overview, Agent Identity, Trust & Provenance, LLM Latency States, Agentic Playground, White-Label Theming guide, and Theme Builder sandbox tool. These pages were all unreachable via search.
Sprint 26 — White-Label Theme Builder
DAN-154Tokens
- —/sandbox/theme-builder: 3-pane interactive token editor.
- —Left: grouped token editor — agency/temporal/validation colors (color pickers), surface palette, radius scale (slider), mono font toggle
- —Center: live preview — miniature finance dashboard renders in real-time as tokens change; dark/light mode toggle
- —Right: export panel — CSS custom property sheet, Tailwind config object, JSON token map, createTheme() call
- —Powered by lib/create-theme.ts themeToVars() and serializeThemeToCss() utilities
Sprint 26 — Reconciliation Domain
DAN-156Components
- —ReconciliationSummary — Dashboard header card: total items, matched %, open exceptions, oldest break age, last run time. MetricCard grid with match-rate progress bar. Optional refresh callback.
- —MatchQueue — Two-column match interface. Left: unmatched items with queue-depth badge. Right: ranked candidates with confidence scores (HIGH/MED/LOW). Match and Reject actions per candidate.
- —ExceptionManager — Full reconciliation exception table with type/status/age filters, batch-action toolbar (escalate, resolve, assign), and inline status update per row. Age-sorted by default.
- —BreakAnalysisPanel — Root-cause analysis for a single break. Metadata grid, field-level criteria diff view (internal vs counterparty), chronological history timeline, resolution notes editor.
- —AgedItemsList — Time-bucketed aged items: 0–30 / 31–60 / 61–90 / 90+ days. Color-coded signals (green → amber → red). Click-to-drill bucket headers. Sparkline trend per bucket.
Sprint 26 — Documentation v2
DAN-157TokensComponentsDocs
- —/foundation/component-graph: Interactive SVG dependency graph — 223 components, filter by category, hover highlights, click to navigate.
- —Row-layered layout: Patterns → AI & Agent → Finance → UI Primitives with 22 curated dependency edges.
- —/components/ai-agent: Full docs page for the AI & Agent component category.
- —Streaming state machine (IDLE → STREAMING → COMPLETE/ERROR)
- —When to use / When not to use guidance for all 5 components
Sprint 26 — Brand & Portfolio
DAN-160TemplatesTokensComponentsDocs
- —AI-Era Visual Narrative: Awards page now leads with "The only design system built for the agent era" — the 5 Sprint 26 AI-native components (StreamingArtifact, ContextWindowMeter, FunctionCallVisualizer, ModelSelector, GenerativeFormFill) are the flagship showcase with code snippet + architecture diagram.
- —Submission Package Updated: Description, tags, and version updated to v1.4.0 (Sprint 26). Technologies updated to include Anthropic SDK and WebGL.
- —CSS Design Awards Added: Second awards track added alongside Awwwards — AI-Native Component Showcase submission.
- —Recognition Track Expanded: 6 entries (was 4) — Claude API Integration and CSS Design Awards added.
- —Social Assets Spec: Twitter/X (1200×675), LinkedIn (1200×627), Product Hunt gallery, OG image — all documented with ready-to-publish copy.
Sprint 26 — AI-Native Templates
DAN-155TemplatesComponents
- —Multi-Agent Pipeline (/a2ui/templates/multi-agent-pipeline) — Visualize and manage multi-agent workflows: pipeline stage diagram with status pills, per-agent status cards with progress bars, task delegation tree, conflict detection and auto-resolution panel, full audit trail feed (HANDOFF/CONFLICT/INTERRUPT/COMPLETE events), and human interrupt/override controls.
- —Knowledge Base Search (/a2ui/templates/knowledge-search) — Semantic search and retrieval interface: query bar with suggested hints, vault boundary filter with access-level badges (RESTRICTED/CONFIDENTIAL/PUBLIC), result cards with confidence meters, highlighted excerpt rendering, collapsible source provenance chain (ingest → chunk → embed → index), and latency/model stats panel.
Sprint 26 — AI-Native Component Pack
DAN-153TokensComponents
- —StreamingArtifact — Renders streamed code/markdown/text output. Features: line-numbered code view, diff view (+/- rows with semantic colors), streaming cursor blink, auto-scroll to tail, copy button, error state. Props: content, kind, language, state, diff, showLineNumbers, showCopy, maxHeight.
- —ContextWindowMeter — Segmented token usage bar for conversation context. Segments: system (muted), user (temporal/blue), assistant (agency/red), tools (validation/gold). Warning state at 80%, critical overflow alert at 95%. Props: segments, limit, model, warnAt, criticalAt, showLegend, compact.
- —ModelSelector — Model picker for Claude model family (Haiku/Sonnet/Opus). Each option: context window size, capability chips (VISION, TOOLS, STREAM, THINK, BATCH, FILES, CUA), cost tier, latency tier. Dropdown and inline panel variants. Props: options, value, onChange, variant, label.
- —FunctionCallVisualizer — Tool call execution card. Line-numbered JSON input/output, status badge (PENDING/RUNNING/DONE/ERROR), semantic border color per state, duration display, call ID traceability, collapsible panel. Props: name, input, status, output, error, durationMs, callId, defaultCollapsed.
- —GenerativeFormFill — Form field with AI-assist. Ghost suggestion text, Tab-to-accept / Escape-to-reject keyboard shortcuts, provenance badge (model + confidence %), generating pulse animation, full ARIA labeling. Props: value, suggestion, model, generating, confidence, onAccept, onReject.
v1.3.0 — Sprint 25 Release
DAN-150TemplatesTokensComponents
- —@nodus/design-system@1.3.0 — web components + tokens v2 + WebGL charts + i18n
- —@nodus/design-system-native@1.3.0 — React Native adapters (renamed from @dana/nodus-ds-native)
- —@nodus/tokens@1.3.0 — standalone CSS token package (new; CDN-ready via jsDelivr + unpkg)
- —Three-package publish pipeline with synchronized versioning
- —Bundle size budgets via size-limit (250 kB ESM / 260 kB CJS)
Design Tokens v2 Implementation
DAN-149TokensComponents
- —lib/dark-mode-derive.ts — OKLCH-based dark-mode derivation algorithm. Converts hex → OKLCH color space (Björn Ottosson), transforms lightness by semantic role (surface/text/accent/subtle), reconverts to hex. Perceptually uniform — hue and chroma preserved across modes.
- —scripts/build-tokens.ts — Build step that generates public/tokens/semantic.v2.css. Combines OKLCH-derived dark values for accent colors with precision-hardcoded Bauhaus neutral scale for surfaces/text. Run via npm run build:tokens.
- —public/tokens/semantic.v2.css — Generated v2 token file served statically. Consumed by the Playwright token regression spec (DAN-151) for v1→v2 visual comparison runs.
- —lib/token-versions.ts — Token versioning and deprecation registry. TOKEN_VERSION = "2.0.0". Provides isDeprecated(), getDeprecationInfo(), warnIfDeprecated() for dev-mode console warnings on v1 token usage.
- —lib/create-theme.ts — Added v2 palette shorthand API: createTheme({ palette: { primary, accent, neutral } }). Derives agency/temporal colors from 3 brand colors. Backward-compatible with existing colors field API.
i18n Runtime
DAN-147Components
- —formatNumber(value, locale, options) — decimal, compact, scientific notation; NaN/Infinity guards; normalizes -0
- —formatCurrency(value, currency, locale, options) — symbol placement, accounting currencySign, compact notation, per-locale decimal precision
- —formatDate(value, locale, options) — accepts Date / timestamp / ISO string; short/medium/long/full dateStyle
- —formatRelativeTime(value, locale, now?) — "yesterday", "1 hour ago", "in 3 days"; 7-step resolution cascade
- —SUPPORTED_LOCALES — ["en-US", "en-GB", "de-DE", "fr-FR", "ja-JP", "ar-SA", "he-IL"]
WebGL Chart Primitives
DAN-144TokensComponents
- —Shared infrastructure context for all GL charts
- —CSS token bridge: tokenToRGBA(cssVar) resolves DS semantic tokens → WebGL RGBA float arrays via computed style; handles nested var() chains and oklch values
- —Shared requestAnimationFrame scheduler: single rAF loop, multiple chart callbacks
- —createWebGLContext: WebGL2 preferred, automatic fallback to WebGL1
- —compileProgram: vertex + fragment shader compilation with error logging
v1.3.0-alpha — Sprint 24 Release
DAN-141TokensComponentsDocs
- —React Native package scaffold: packages/nodus-ds-native/ (@dana/nodus-ds-native v1.3.0-alpha.0)
- —RN token bridge: semantic color, spacing, typography, and finance-density tokens ported to React Native StyleSheet values
- —RN CI pipeline: .github/workflows/rn-ci.yml (TypeScript check, Jest native tests, Expo bundle check, EAS Update)
- —EAS configuration: expo-eas.json — development, preview, and production build + update channels
- —Native README: README.native.md with live preview QR code placeholder and package split documentation
v1.2.0 — Sprint 23 Release
DAN-134TemplatesTokensComponentsDocs
- —FX & Derivatives: FXRateCard, VolatilitySurfaceChart, DerivativesPositionTable, SwapTicketCard, OptionChainTable, HedgeEffectivenessGauge (DAN-127)
- —Payments & Settlement: PaymentLifecycleTracker, DualControlPanel, SanctionsCheckBadge, SettlementNetCard (DAN-131)
- —Risk Analytics A2UI templates: VaR Dashboard, Stress Testing, Limit Management (DAN-128)
- —Developer CLI: npx nodus-ds add <component> scaffolding tool (DAN-129)
- —Storybook 8: 55 stories for Sprint 21-22 voice and collaboration components (DAN-130)
Sprint 23: Payments & Settlement component suite
DAN-131TemplatesTokensComponentsDocs
Sprint 23: Storybook 8 — Sprint 21-22 story coverage
DAN-130TemplatesComponentsDocs
Sprint 23: FX & Derivatives component suite
DAN-127TemplatesTokensComponentsDocs
Sprint 23: Developer CLI — `npx nodus-ds add <component>`
DAN-129TokensComponentsDocs
- —npx nodus-ds add <component> — copies component source with token hints and import snippet
- —npx nodus-ds add --list — lists all components by category from registry.json
- —npx nodus-ds init — detects framework, injects CSS token imports, checks Tailwind
- —npx nodus-ds tokens [--format ts|css] — exports tokens as CSS or TypeScript const
Sprint 22: Voice interface primitives
DAN-123Components
- —States: idle, listening (agency red), processing (temporal blue), done, error
- —7-bar waveform animates to audio amplitude during listening (real or simulated)
- —Bars freeze and stagger-pulse during STT processing
- —Color rule: listening = agency red (user-initiated agentic action), processing = temporal blue (computation)
- —Full keyboard + screen reader support; aria-pressed for listening state
Sprint 22: Runtime ThemeProvider — CSS custom property theming system
DAN-119TemplatesTokensComponentsDocs
- —ThemeConfig interface — typed overrides for colors, typography, radius, and spacing
- —ResolvedTheme — fully-populated theme with all fields present (no optionals)
- —createTheme(config?) — factory that merges user overrides onto Nodus base defaults
- —themeToVars(theme) — maps a ResolvedTheme to a Record<string, string> of --ds-* CSS custom properties
- —serializeThemeToCss(theme, selector?) — SSR-safe serializer; outputs a CSS declaration block for injection into <style> tags
Sprint 22: Design system governance — RFC process, versioning, contribution model
DAN-125TemplatesTokensComponentsDocs
Sprint 22: Realtime collaboration UI patterns
DAN-122TokensComponentsDocs
Sprint 22: TypeDoc API documentation — TSDoc on top 20 components
DAN-121ComponentsDocs
- —Button — variant/size/loading prop descriptions + example
- —Badge — semantic color pillar descriptions per variant + example
- —Card — variant/label prop docs + example
- —Input — label/state/hint prop docs + accessible ID wiring note + example
- —Modal — composite usage example, ModalTrigger/ModalClose inline docs
Sprint 22: Performance & bundle audit — Lighthouse CI, route splitting, Web Vitals
DAN-124TemplatesTokensComponents
- —@next/bundle-analyzer — npm run analyze script (ANALYZE=true npm run build) opens interactive treemap for identifying bundle bloat
- —@vercel/analytics + @vercel/speed-insights — real-user Web Vitals reporting via Vercel's edge analytics pipeline
- —app/(site)/a2ui/templates/loading.tsx — route-level Suspense streaming boundary for all A2UI template pages; reduces TBT by deferring heavy client component hydration until after FCP
- —.github/workflows/lighthouse.yml — Lighthouse CI workflow running on every PR and main push; audits 4 key routes with desktop preset
- —lighthouserc.json — performance budget configuration: LCP ≤ 2500ms, TBT ≤ 200ms, performance score ≥ 0.8, accessibility score ≥ 0.9
Sprint 22: NPM package distribution — @nodus/design-system publishable build
DAN-118TokensComponents
- —src/index.ts — top-level library entry point re-exporting all UI, finance, and pattern components plus cn and useStagedReveal utilities
- —tsup.config.ts — dual ESM/CJS build with tree-shaking, source maps, and type declarations; all React/Next/Radix peers externalized
- —CONTRIBUTING.md — component authoring guide covering token architecture, design rules, WCAG requirements, Strict Mode safety, and library build
- —package.json — added main, module, types, exports, and files fields for proper NPM distribution; moved React, react-dom, next, framer-motion, lucide-react, and recharts to peerDependencies; added build:lib script and tsup ^8.4.0 devDependency; token CSS files exposed via exports subpaths
Sprint 21: Storybook links and version bump to v1.1.0
DAN-116TemplatesTokensComponentsDocs
Sprint 21: Claude Agent SDK × Nodus DS integration showcase templates
DAN-112TemplatesTokensDocs
- —Human-in-the-loop approval interface for Claude Agent SDK require_approval flows
- —Pending requests list with risk-level badges (critical/high/medium/low), expiry timers, and approve/deny actions
- —Expandable detail panels: description, risk assessment, full tool_use input block, agent context metadata
- —Fleet metrics: pending count, approved/denied today, avg response time
- —Mock data mirrors real SDK approval request shapes (batch payments, sanctions overrides, FX forwards)
Sprint 21: Brand identity refresh — design system site visual polish
DAN-115TokensComponentsDocs
- —Hero subtitle updated: "The design language for the autonomous era." (sharper value statement)
- —Body copy tightened: 233 components, 41 agent patterns, semantic color in one sentence
- —Removed local divider constant — now imported from lib/site-styles.ts
- —All inline font stacks replaced with MONO, DISPLAY, SERIF constants
- —sectionHeading, sectionHeadingSerif, arrowLink, indexNumber, tagPill applied throughout
Sprint 21: Changelog site — versioned release notes page
DAN-113TemplatesTokensComponentsDocs
- —Category filter tabs: All / Components / Tokens / Templates / Docs — live counts per category
- —SERIF italic release titles, MONO dates and ticket chips, DS-styled category pills
- —Agency red left accent for sprint-tagged major releases, temporal blue for minor
- —RSS feed link in page header, entry count in footer
Sprint 21: Global component search and filtering
DAN-114TemplatesComponentsDocs
- —Search page (/search): debounced input (300ms), instant results from the full index, keyboard navigation (↑↓ + Enter), clear button, result count
- —Category filters: All, UI Components, Finance, Patterns, A2UI Templates, Foundation — rendered in left sidebar (desktop) or collapsible panel (mobile)
- —Domain tag filters: Agentic, Treasury, Payments, Risk, Compliance, FX, Derivatives, Liquidity, Funding, Data Viz — multi-select checkboxes
- —Domain tags in search index: SearchEntry.domainTags field added; inferred from subcategory (e.g. finance → treasury/payments/risk/compliance/fx, agentic subcategories → agentic) and from A2UI template descriptions via keyword matching
- —Match highlighting: query terms highlighted in result name and description
Sprint 21: Vercel deployment pipeline with CI gate
DAN-109TokensDocs
- —CI gate for production: ci.yml now triggers on push to main (was dev-only). Added deploy job gated on needs: [typecheck, build, test, attestation] — production deployment to Vercel only fires after all CI checks pass.
- —README status badges: CI workflow badge, Chromatic badge, and Vercel deployment badge added.
- —Deployment pipeline confirmed: design.dana.xyz resolves to the production Next.js site. Each PR receives a unique Vercel preview URL via the Vercel GitHub integration. Chromatic visual tests run on Storybook stories for every push to main and PRs.
- —Required secrets: VERCEL_TOKEN, VERCEL_ORG_ID (team_pamm24pZnHtoePWFtJldYofV), VERCEL_PROJECT_ID (prj_CmSvgVn3weuFQ0NCyQnTXirKCPAW) must be set in GitHub repo secrets to activate the CI-gated deploy job.
- —Dashboard note: Disable Vercel's auto-deploy for the production branch (Project → Settings → Git) to prevent a double-deploy race with the GitHub Actions deploy job.
Sprint 20: Advanced agentic interaction templates
DAN-105TemplatesTokensComponents
Interactive token explorer: live preview + cross-reference
DAN-108TokensComponentsDocs
S20: Agent Process Portfolio Showcase
DAN-107TemplatesTokensComponentsDocs
- —Hero + System Metrics — 6-stat grid: 150+ templates, 325 components, 20 sprints, 153 commits, 216 docs, 8 agents
- —Agent Roster — Full 8-agent table: Chief Visionary, Component Engineer, UX Designer, Template Architect, Quality & Accessibility Lead, Documentation Architect, DevOps & Release Engineer, Brand & Portfolio Lead. Color-coded by tier (red/blue/gold/gray), each with domains and responsibility description.
- —S01–S20 Sprint Timeline — 20-cell grid showing focus area and deliverables per sprint. Color encodes phase: blue=infrastructure, gold=quality gates, red=expansion.
- —6-Phase Agentic Workflow — Brief → Design → Validate → Document → Ship → Showcase. Each phase shows owning agent, action taken, and output artifact.
- —Quality Signal Table — 8 metrics: WCAG AA, TypeScript strict, visual regression, token compliance, font floor, touch targets, mobile responsiveness, component docs — all passing.
Storybook coverage: 26 missing UI component stories
DAN-106TokensComponentsDocs
Mobile-first component documentation for all 216 UI components
DAN-98TemplatesTokensComponentsDocs
- —Works As-Is → --ds-color-outcome-positive (green)
- —Touch Target → --ds-color-validation (gold)
- —Stacks / Scroll → --ds-color-temporal (blue)
- —Mobile Adapted → --ds-color-temporal (blue)
- —works-as-is: 57 components (display, typography, small indicators)
FX Hedging Workflow A2UI template
DAN-100TemplatesDocs
AdaptiveChartContainer: responsive chart/metric card pattern
DAN-101TokensComponents
- —Desktop (≥768px): renders the full chart passed as the chart prop (LineChart, BarChart, AreaChart, etc.)
- —Mobile (<768px): collapses to a compact 64px metric card showing key stat + period-over-period delta + optional sparkline trend
- —chart — any ReactNode (full chart component)
- —metricValue / metricLabel — primary KPI for mobile card
- —metricFormat — currency | rate | percent | bps | integer | decimal
Token Fix: A2UI_LIGHT categorical color tokens
DAN-30TemplatesTokens
- —blueBg → color-mix(in srgb, --ds-viz-cat-1 10%, transparent)
- —purple → var(--ds-viz-cat-4, #7B52CC) (violet — correct categorical color for tier differentiation)
- —purpleBg → color-mix(in srgb, --ds-viz-cat-4 10%, transparent)
Payment Approval Workflow Template
DAN-99TemplatesComponentsDocs
- —Payment Queue — 5 payment entries across SWIFT, SEPA, Fedwire rails with amount, beneficiary, status, and priority. Click-to-select panel detail view.
- —Sanctions Screening — AI screener panel showing OFAC SDN, EU Consolidated, UN Security Council, HM Treasury, and OFSI list results. Clear/review/match/pending states with confidence detail.
- —Dual-Control Authorization — Maker/Checker approval ceremony. Independent authorization steps with timestamp and name attribution. Sequential gate enforcement.
- —Release Gate — Pre-flight checklist (Sanctions, Maker Auth, Checker Auth, Value Date, Nostro Funds) before payment submission to network. Animated releasing state.
- —Settlement Tracking — UETR display, 5-step settlement timeline (Initiated → Authorized → Submitted → Acknowledged → Settled), completion timestamp.
S18: Mobile Responsiveness + Workflow Templates (DAN-95, DAN-96)
TemplatesTokensDocs
- —.ds-stat-grid — 4-column stat rows collapse to 2×2 on ≤600px (homepage, A2UI listing)
- —.ds-foundation-grid — 3-column foundation grids → 2-col at 900px, 1-col at 600px
- —.ds-a2ui-scroll-container — complex financial templates scroll horizontally on mobile with scroll indicators
- —a2uiWrapper padding now uses clamp() for fluid mobile-to-desktop scaling
- —app/(site)/page.tsx — stat row grid responsive
S17: A2UI Template Expansion — 142 Templates
DAN-90TemplatesTokensComponents
- —Agent Pipeline Dashboard: Multi-stage pipeline table with per-agent assignment, all-pipelines list, event log, 4 metrics cards.
- —Agent Coordination Center: 12-agent registry by tier (orchestrator/specialist/utility), dispatch queue with priority levels, activity log.
- —AI Model Comparison: Side-by-side opus/sonnet/haiku evaluation with quality scoring (faithfulness/groundedness/conciseness), cost/latency metrics, eval history.
- —Agent Performance Analytics: 7-agent leaderboard with task throughput, success %, token cost, escalations; daily volume chart; error log.
- —Prompt Engineering Workspace: Prompt library sidebar, variable injection panel, version history (v1–v4), A/B test runner results.
S16: Agentic AI Pattern Library — 16 New Components
DAN-88TokensComponents
- —AgentThinkingIndicator: Streaming token-by-token output visualization with cursor blink and temporal-blue pulse. Distinct from ThinkingState (reasoning trace) — renders raw stream.
- —AgentConfidenceBar: Horizontal confidence score bar with outcome-based color tiers (low/moderate/high). Role: meter, context label, numeric pct.
- —AgentSourceCitation: Structured provenance citation list — source type badges (DOC/DB/WEB/AGT/VLT/USR), relevance scores, excerpts, retrieval timestamps.
- —AgentDecisionTree: Recursive branching decision visualization — taken/skipped/pending nodes, terminal pass/fail outcomes, depth-indented rendering.
- —MultiAgentOrchestrationView: Horizontal pipeline view for multi-agent workflows — step nodes with status, connector lines, derived overall state.
S15: Capability Patterns
DAN-86ComponentsDocs
- —AgentCapabilityMatrix: Scannable grid of agents × capability dimensions (read/write/approve/transact/escalate). Blue=granted, gold=conditional, red=denied. Agent sigil + name + role in identity column. Click-to-focus row for drill-down. Legend bar.
- —CapabilityGrant: Single permission grant card with condition badges (time-bounded/value-bounded/approval-gated), status chip, meta row, collapsible audit trail (via ProvenanceChain), and revoke trigger.
- —CapabilityRevokeFlow: Two-step revocation ceremony. Step 1: impact preview (will-fail / may-degrade / unaffected tasks). Step 2: mandatory written reason — enforces non-repudiable audit trail.
- —Foundation page: /foundation/capability-patterns — color semantics table, live demos for all three components, prop tables, anti-patterns, and design rules.
- —Exported from components/patterns/index.ts, registered in registry-extended.ts, added to lib/sidebar-nav.ts.
S15: Post-deploy Smoke Test Script
DAN-84TemplatesComponents
- —Routes covered: all 215 UI components (/components/:slug), 47 patterns (/patterns/:slug), all A2UI templates (/a2ui/templates/:slug), plus ~35 static site routes — ~300+ routes total
- —SSG failure detection: checks for React null/render crashes, useContext missing provider crashes, and module resolution / chunk load failures
- —Output: console pass/fail summary + scripts/smoke-test-report.md (route table with status, duration, failure signals)
- —Timeout: 30s total (parallel fetch, 15s per-route limit)
- —Exit codes: 0 = all pass, 1 = failures found, 2 = global timeout or fatal error
S15: Theme Configuration Template
DAN-85TemplatesTokensComponents
- —3 preset skins: Nodus Default (base), Enterprise Dark (dark surface trading floor), High-Contrast Accessible (WCAG AAA)
- —SkinProvider component: wraps any React subtree in data-skin attribute for scoped CSS custom property overrides
- —Live Preview panel: header bar, KPI row, status badges, and mini payment table rendered in the active skin
- —Token Overrides table: shows every --ds-* token that changes per skin with color swatch, base hex, and override hex
- —CSS Export panel: generates ready-to-drop [data-skin="..."] { } CSS block with copy-to-clipboard
S14: Real-time Hooks
DAN-80TokensComponentsDocs
- —Returns { chunks, status, latency, start, reset }
- —status: "idle" | "streaming" | "complete" | "error"
- —latency: time-to-first-token in ms (simulated)
- —Options: content, chunkInterval (ms), chunkSize (chars), ttft (ms)
- —React Strict Mode safe — all timers cleared on unmount
S13: Prop Stress-Tester
DAN-77Components
- —Test matrix per component: empty strings, 200+ char strings, unicode, special chars, all enum values, boundary numerics (0, 1, -1, out-of-range), null/undefined optional props, empty/large arrays
- —Components covered: AgentIdentityBadge, ProvenanceChain, StreamingResponse, ApprovalQueue, AgentConflictPanel, ChartTooltip, ChartAnnotation, ConfidenceMeter, ConsentFlow, EscalationBanner, ThinkingState
- —Report written to scripts/stress-test-report.md on each run
S13: Error State Pattern System
DAN-79TokensComponentsDocs
- —severity="fatal" → --ds-color-outcome-negative (red) — unrecoverable, no retry
- —severity="recoverable" → --ds-color-validation (gold) — human action resolves it
- —severity="transient" → --ds-color-temporal (blue) — auto-retry in progress
S12: Enhanced Component Search with Faceted Filtering
DAN-74TemplatesTokensComponentsDocs
- —components/site/CommandSearch.tsx — full rewrite
- —Filter bar with 3 facets: Category (All / UI / Patterns / A2UI / Foundation), Status (All / Stable / Experimental), Since (All Sprints / S9+ / S11+)
- —Match highlights: query text highlighted in gold (--ds-color-validation) in result names and descriptions
- —Rich result rows: name + status badge + sprint label + description + subcategory metadata inline
- —Active indicator bar (--ds-color-temporal) on selected result
S12: Debt Capital Markets Template
DAN-75TemplatesTokensDocs
- —app/(site)/a2ui/templates/debt-capital-markets/page.tsx — new template
- —Mandate: deal terms panel + mandate detail + ProvenanceChain
- —Structuring: AgentConflictPanel (Pricing Agent vs. Risk Agent on yield spread) + ProvenanceChain
- —Book-building: coverage ratio bar, investor order book (10 investors), EscalationBanner when coverage < 100%, ApprovalQueue for board sign-off
- —Settlement: deal summary, 6-item checklist, full 11-step ProvenanceChain
S11: Component Versioning System
DAN-71TemplatesComponentsDocs
- —registry-extended.ts — ComponentEntry interface extended with four new optional fields:
- —version?: string — semver string (e.g. "1.0.0")
- —since?: string — sprint label when component was introduced (e.g. "S1")
- —deprecated?: boolean — triggers DeprecationBanner on component pages when true
- —deprecationNote?: string — migration guidance shown in the banner
S10: v1.0 Release Notes Foundation Page
DAN-69TokensComponentsDocs
- —app/(site)/foundation/release-notes/page.tsx — new Foundation page with:
- —Stat strip: 9 sprints · 233+ components · 1,534 tests · 200+ tokens
- —ProvenanceChain visual metaphor — S1→S9 chain using source → transform → inference → output step types to map the system's evolution
- —Sprint timeline — S1–S9 grouped sections (newest first), collapsible per sprint, EXPAND ALL / COLLAPSE ALL controls
- —Status badges — NEW (blue) · UPDATED (gold) · FIXED (green) with WCAG AA contrast
S10: Intercompany Netting Template
DAN-70TemplatesTokensComponentsDocs
- —New A2UI template at /a2ui/templates/intercompany-netting
- —Replaced hardcoded hex colors with var(--ds-*) semantic tokens
- —Fixed setTimeout calls — cleanup-safe useFlowRunner hook with useRef + useEffect cleanup
- —Canonical footer: left spacer · center Templates link · right skill tags
- —Registered in lib/sidebar-nav.ts and lib/search-index.ts
S9: TypeScript Type Exports Barrel
DAN-65TemplatesTokensComponentsDocs
- —components/patterns/ProvenanceChain.tsx — exported ProvenanceStep, ProvenanceStepType, ProvenanceStepStatus, ProvenanceChainProps
- —components/patterns/ApprovalQueue.tsx — exported ApprovalItem, RiskLevel, ApprovalQueueProps
- —components/patterns/ConfidenceMeter.tsx — exported ConfidenceMeterProps, ConfidenceSingleAxis, ConfidenceDualAxis, ConfidenceThresholds
- —components/patterns/ConsentFlow.tsx — exported ConsentStep, ConsentPermission, ConsentFlowProps
- —components/patterns/index.ts — added ConflictLayout, ResolutionOutcome, AvatarUser, AvatarStackProps, SourceType, and all newly exported pattern types
S9: Iconography System
DAN-67TokensComponentsDocs
S8: Light Mode Parity Audit
DAN-64TokensComponents
- —AgentIdentityBadge — CapabilityChip (requiresApproval), PanelBadge approval notice
- —EscalationBanner — "ESCALATION — HUMAN REQUIRED" header text
- —StreamingResponse — "CONTINUE RESPONSE" button text (--ds-surface-ground on gold was 2.4:1)
- —AgentConflictPanel — validation button variant, SELECTED badges (×3), consequence warning text, mode header badge
- —EscalationBanner — suggested action body text
S8: Token Explorer Live CSS Reads
DAN-62TokensComponentsDocs
- —Token Explorer (/foundation/tokens) — all color swatches now read live values from the browser via getComputedStyle, replacing hardcoded hex fallbacks
- —Color tokens resolved by setting background-color: var(--token) on probe spans and reading computed RGB — correctly resolves var() chains
- —Light and dark values pre-loaded at mount by temporarily toggling data-theme on documentElement (synchronous, no visible flash)
- —Contrast ratios recompute from live hex values after hydration
- —darkPreview toggle picks from the pre-loaded dark map — no re-read required on toggle
S8: Motion Token Migration
DAN-61TemplatesTokensComponentsDocs
- —Hardcoded transitions eliminated — 39 files migrated from raw 0.15s/80ms/120ms/300ms values to --ds-motion-* semantic tokens
- —80ms → var(--ds-motion-interaction) var(--ds-motion-easing-productive) (hover/click micro-feedback)
- —120ms / 150ms / 0.15s → var(--ds-motion-duration-fast) var(--ds-motion-easing-productive) (state changes, badge hover)
- —300ms → var(--ds-motion-deliberate) var(--ds-motion-easing-productive) (bar fills, major reveals)
- —0.12s linear / 0.15s linear → var(--ds-motion-duration-fast) linear (progress bars)
S7: Token Explorer
DAN-58TokensComponentsDocs
- —Token Explorer (/foundation/tokens) — Rebuilt as a live, searchable three-layer reference:
- —Search — filters across all ~200 tokens (name + description) with layer badges (primitive / semantic / component)
- —Dark/Light preview toggle — swatch panels and live component previews update reactively
- —Contrast ratios — every color token shows ratio vs current surface with WCAG AA/AAA grade badge
- —WCAG note on --ds-color-validation — "dark mode only — 5.96:1 on dark surface" per DAN-57 audit
S7: Portfolio Risk Overview Template
DAN-59TemplatesTokensComponents
- —Portfolio Risk Overview (/a2ui/templates/portfolio-risk-overview) — Flagship morning risk dashboard showcasing all 10 agentic pattern components in a single-scroll 3-column layout.
- —AgentIdentityBadge × 3 — Risk Orchestrator (active), Credit Risk Agent (idle), Market Microstructure (pending) in card surface
- —ProvenanceChain — 8-step overnight analysis pipeline with 2 pending steps
- —StreamingResponse — Portfolio commentary arriving live with token-rate display
- —ThinkingState — Market Microstructure agent reasoning with partial trace
S6: Agentic Component Playground
DAN-55TokensComponentsDocs
- —Agentic Playground (/foundation/agentic-playground) — Interactive reference page for all 10 core agentic pattern components. No external Storybook dependency.
- —AgentIdentityBadge — role (5 tiers), surface (inline/card/panel), state (5 states), offline and timeout edge states
- —ProvenanceChain — fresh, stale (staleness threshold demo), and partial completion variants
- —StreamingResponse — live stream simulation, truncated output, token timeout silence detection
- —ApprovalQueue — 4 items at mixed risk levels, partial completion (pre-decided items) edge state
S6: Live FX Monitor Template
DAN-56TemplatesComponents
- —Live FX Monitor (/a2ui/templates/live-fx-monitor) — Real-time FX desk monitor template demonstrating the design system under rapid state changes.
- —Simulated live rate feeds for EUR/USD, GBP/USD, USD/JPY, USD/CHF via setInterval with strict mode safe cleanup
- —Interactive rate ticker cards — click to switch chart focus; threshold proximity warning in gold
- —Intraday sparkline chart with ChartAnnotation (threshold line + live dot observation)
- —AgentIdentityBadge (inline + card) for FX-Executor (EXECUTOR role) — state transitions: pending → active → idle
S5: Cascaded Conflict (3+ Agents) in AgentConflictPanel
DAN-51TokensComponents
- —AgentConflictPanel — Added conflictLayout?: 'parallel' | 'ranked' | 'auto' prop (default: 'auto'). Also added ConflictLayout type export.
- —auto: uses parallel for exactly 2 positions, ranked for 3+.
- —ranked: new RankedConflictView — positions sorted by confidence descending; each card is full-width with #N rank badge; expandable reasoning per card; radio-style selection; 5+ positions collapse to top 5 with SHOW ALL (N) POSITIONS control.
- —Post-resolution (ranked): all positions remain visible — winner highlighted with --ds-color-outcome-positive border + ACCEPTED badge; others rendered at 50% opacity with DEFERRED label.
- —Dynamic header: "{N}-WAY CONFLICT DETECTED" when N >= 3; "Agents disagree" for N=2.
S5: Agent Unavailable Edge States
DAN-50TokensComponents
- —AgentIdentityBadge — Added agentOnline?: boolean prop. When false: monogram renders at 50% opacity with --ds-color-outcome-negative border and static red corner dot; inline variant shows "(unavailable)" suffix and muted name; card variant adds an AGENT UNAVAILABLE banner strip with negative background; panel variant adds a full-width offline banner with last-seen timestamp. Role badge shifts to neutral gray. StatusDot hidden in panel variant (no live status to show).
- —EscalationBanner — Added targetAgentOnline?: boolean prop. When false: a TARGET AGENT OFFLINE — CANNOT ACCEPT ESCALATION notice strip renders above the gold escalation header (using --ds-color-outcome-negative); suggestedAction is overridden to "REASSIGN to an available agent"; the "SUGGESTED ACTION" label becomes "REQUIRED ACTION" in negative color. Gold banner structure unchanged.
- —ConsentFlow — Added agentOnline?: boolean prop. When false: a REQUESTING AGENT OFFLINE — GRANT UNAVAILABLE banner renders above the step indicator (negative color); GRANT button is disabled (muted, cursor: not-allowed, opacity: 0.5); DENY button label changes to DISMISS REQUEST at step 0.
- —ThinkingState — Added agentOnline?: boolean prop. When false: left border → --ds-color-outcome-negative (static, no pulse); label → AGENT OFFLINE — REASONING UNAVAILABLE; elapsed timer suppressed (reasoning never started); component renders even with no trace/thinking state.
- —Agent unavailable = --ds-color-outcome-negative throughout — offline is a system failure state, not a validation gate
S5: Partial Completion Edge States
DAN-49TokensComponents
- —ApprovalQueue — Added initialDecided?: Record<string, "approved" | "rejected"> prop for externally pre-decided items. Header text switches to N REMAINING · M DECIDED format in partial state. Remaining items get a gold left border (--ds-color-validation). Decided items render with outcome tint background (green/red 8% mix) and an APPROVED/REJECTED badge; non-interactive. Internal outcomes state tracks both directions.
- —StreamingResponse — Added isTruncated?: boolean and onContinue?: () => void props. When isTruncated=true and not in timeout state: left border shifts to --ds-color-validation, status label shows TRUNCATED, and a gold notice block renders below content: RESPONSE TRUNCATED — OUTPUT INCOMPLETE · REVIEW BEFORE ACTING with an optional CONTINUE RESPONSE button.
- —ThinkingState — Added isInterrupted?: boolean prop. When true: left border → --ds-color-validation, pulse animation stops, label → REASONING INTERRUPTED — PARTIAL TRACE, elapsed counter → gold, trace gets a gold truncation marker — REASONING INTERRUPTED — INCOMPLETE — appended, footer shows PARTIAL TRACE ONLY — CONCLUSION NOT REACHED · REVIEW BEFORE ACTING. Early-returns guard updated to permit render when isInterrupted=true even with no active isThinking.
- —ProvenanceChain — Added status?: "complete" | "pending" | "failed" | "skipped" per step (backward-compatible; default = "complete"). When a chain has any non-complete step: muted rendering (opacity 0.6, --ds-text-muted label, --ds-border-separator indicator dot with dashed outline, model/confidence/timestamp suppressed), a gold STOPPED HERE truncation divider before the first incomplete step, and a gold footer CHAIN INCOMPLETE — N OF M STEPS EXECUTED. failed steps additionally use --ds-color-outcome-negative for the status badge.
- —Partial completion = --ds-color-validation (gold) throughout — partial output is a validation gate, not a system failure
S5: Stale Provenance Edge States
DAN-48TokensComponents
- —ProvenanceChain — Added stalenessThresholdMs?: number (default 1h) prop and lastUpdatedAt?: string per step. Steps with source data older than the threshold show a gold dot indicator and append (stale · {age}) to the label in --ds-color-validation. When any step is stale, a gold warning header row renders: ⚠ DATA STALENESS — OLDEST SOURCE: {age} AGO. Stale data is never hidden — it requires human judgment.
- —ChartInteractionLayer / ChartTooltip — Added staleAnalysisAge?: string prop. When source="agent" and this prop is set, a gold stale warning row renders at the top of the tooltip: ⚠ STALE ANALYSIS — {age} OLD, above the standard agent highlight header.
- —ChartInteractionLayer / ChartAnnotation — Added lastAnalyzedAt?: string, stalenessThresholdMs?: number (default 1h), and staleAnalysisAge?: string (pre-formatted override) props. Stale annotations display a gold outline ring on the marker pin/label and prepend ⚠ STALE ANALYSIS — {age} OLD to the expanded detail panel.
- —ConfidenceMeter — Added staleEvidenceAge?: string to both single-axis and dual-axis modes. When set, a gold stale warning renders below the meter(s): ⚠ BASED ON STALE EVIDENCE — {age} OLD. The displayed confidence score is never degraded — the score is accurate for the evidence it had.
- —Stale provenance = --ds-color-validation (gold) throughout — signals quality degradation requiring human judgment, not system failure
S5: Timeout Edge States
DAN-47TokensComponents
- —AgentIdentityBadge — Added timeoutAt?: string and timeoutThresholdSecs?: number props. When timeoutAt is set: caution-colored border and status dot, inline variant appends (no response · Ns), card variant shows AGENT TIMEOUT — NO RESPONSE banner, panel variant shows full caution banner with descriptive copy. No pulse while timed out.
- —StreamingResponse — Added tokenTimeoutMs?: number (default 30s), onRetry?: () => void, onCancel?: () => void props. Detects token silence via useEffect with setTimeout cleanup (Strict Mode safe). On timeout: left border shifts to caution, streaming cursor removed, notice + RETRY REQUEST / DISCARD actions appear. Partial content is always preserved.
- —ThinkingState — Added timeoutSecs?: number (default 120), onTimeout?: () => void, onRetry?: () => void, onEscalate?: () => void props. When elapsed >= timeoutSecs: pulse stops, border → caution, label → "TIMEOUT — REASONING HALTED", elapsed counter freezes at threshold, trace footer appended, retry/escalate actions rendered. onTimeout fires exactly once via ref guard.
- —Timeout = --ds-color-outcome-caution (orange) throughout — degraded waiting state, not failure
- —No agency red (agent has not acted; it has failed to respond)
S5: Agent Simulation Lab Template
DAN-45TemplatesTokensComponentsDocs
- —Agent Simulation Lab (app/(site)/a2ui/templates/agent-simulation-lab/page.tsx) — Treasury decision backtesting sandbox. Tests AI agent recommendations against historical stress scenarios.
- —Scenario selector — entity dropdown, 4 stress presets (SVB Stress, Rate Shock, Yen Carry Unwind, Base Case) with date ranges
- —Agent Stream tab — StreamingResponse component showing live agent reasoning via useStagedReveal (React Strict Mode safe); dual-axis ConfidenceMeter on completion
- —Results tab — Decision comparison table (AI recommendation vs actual outcome), per-decision ConfidenceMeter scores, alpha/match-rate summary cards
- —Provenance tab — ProvenanceChain showing source → transform → inference → output decision chain with model attribution
Hotfix: Treasury Daily Brief SVG hour label font floor
DAN-44TemplatesDocs
- —Treasury Daily Brief — Changed SVG hour label fontSize from 9 to 10 (app/(site)/a2ui/templates/treasury-daily-brief/page.tsx:183). Enforces the 10px font floor required by CLAUDE.md.
S4: TypeScript Strict Pass + Visual Regression Coverage
DAN-41TemplatesTokensComponentsDocs
- —TypeScript strict pass — tsc --noEmit now exits clean across the entire codebase. Fixed 60+ type errors across Sprint 1–3 additions:
- —registry-extended.ts — Added missing TokenFamily values ("color", "viz", "fin") and Subcategory values ("coordination", "dataviz")
- —tsconfig.json — Added components/__tests__/ and figma/ to the exclude list (test files are type-checked by vitest; figma Code Connect files require @figma/code-connect which is a separate tool)
- —6 A2UI templates — Fixed narrow status type causing unreachable comparisons in KPICard/MetricCard component functions (bank-fee-analysis, budget-vs-actuals, credit-rating-monitor, derivatives-reporting, green-bond-tracker, ma-treasury)
- —foundation/agent-identity/page.tsx — Changed state="running" → state="active" to match DotState type
Treasury Daily Brief: Flagship Agentic Template
DAN-42TemplatesComponents
- —Treasury Daily Brief (/a2ui/templates/treasury-daily-brief) — Flagship template exercising the full agentic component stack in a single production-ready layout. Composes all six S3 agentic components: AgentIdentityBadge (card surface, which agent produced the brief), ProvenanceChain (6-source data trail with confidence scores), StreamingResponse (LLM-generated treasury commentary), ApprovalQueue (4 risk-rated actions), AgentConflictPanel (conflict mode: FX Agent vs. Risk Agent on EUR hedge), and ChartInteractionLayer (annotated intraday liquidity chart with comparison bar and three agent annotations). Showpiece template demonstrating why the design system exists.
S3: Token Compliance Audit + Font Floor Fix (DAN-32/35/36)
TokensComponents
- —Font floor enforcement — Raised all SVG and inline fontSize values below 10px to 10px across 11 finance chart components (AreaChart, BacktestingChart, BenchmarkComparisonChart, DivergingBarChart, GroupedBarChart, HeatmapChart, LearningMultiplierGraph, LineChart, ScatterChart, ScatterPlot, YieldCurveViewer) and 3 agentic pattern components (AgentConflictPanel, AgentIdentityBadge, ChartInteractionLayer)
- —Token compliance — Replaced color: "#fff" in VaultBoundary.tsx with var(--ds-text-inverse)
- —chart-tokens.ts — tickTextProps.fontSize raised from 9 to 10
A2UI Finance Sprint HB5: +20 Templates → 121 total (DAN-4 HB5)
TemplatesComponents
- —Netting Engine (/a2ui/templates/netting-engine) — multilateral net position matrix, settlement instructions, cycle compression
- —Credit Line Management (/a2ui/templates/credit-line-management) — facility utilization bars, drawdown history, covenant compliance
- —Custody & Clearing (/a2ui/templates/custody-clearing) — settlement queue, CSD connectivity, fails management, custody positions
- —FX Overlay Manager (/a2ui/templates/fx-overlay-manager) — currency exposure vs hedge bars, return attribution waterfall, rebalancing triggers
- —Liquidity Coverage Ratio (/a2ui/templates/liquidity-coverage-ratio) — Basel III HQLA composition, NCO categories, LCR trend chart
Multi-agent Coordination + Data Viz Interaction Components (DAN-29/DAN-30)
TemplatesTokensComponents
- —Multi-agent conflict resolution panel covering three interaction modes: conflict, delegation, and override
- —Conflict mode: parallel position display with agent identity, confidence meter, and reasoning trail; human selects winner or forces deferral
- —Delegation mode: explicit agent assignment or orchestrator hand-off with routing legibility before commit
- —Override mode: surfaces original agent action verbatim; requires explicit acknowledgement before applying override
- —Composes AgentIdentityBadge, ProvenanceChain, and ConfidenceMeter
Agentic Component Library: Spec Compliance Pass (DAN-23/25/26/27/28)
TokensComponents
- —Removed banned fake streaming simulation (setInterval character-by-character reveal)
- —Now displays content immediately; isStreaming prop drives the cursor/border only
- —StreamingDot disappears instantly on completion — no border-color transition (DAN-18 spec)
- —Changed all colors from --ds-color-agency (red) to --ds-color-validation (gold)
- —"Waiting for human" is an epistemic state, not an authority state (DAN-18 taxonomy)
Gap Fill Sprint: Risk, Payments, Compliance, Reconciliation
DAN-22Components
- —ES (CVaR) at configurable confidence level with VaR comparison and ES/VaR multiplier
- —Optional limit utilization bar; absolute loss display when notional provided
- —Credit rating with agency label and tier color coding (IG=green, sub-IG=caution, distressed=agency red)
- —Badge and card variants; outlook/watch status display
- —Historical and hypothetical stress scenarios with impact bars and pass/warn/fail status
Portfolio Domain Gap Components
DAN-21Components
- —Portfolio vs. benchmark cumulative return comparison with excess return (alpha) badge
- —Dashed benchmark line vs. solid portfolio line; color-coded excess return display
- —Fixed-income duration and convexity metrics: modified, effective, Macaulay duration, convexity, DV01
- —Optional ±100bps rate sensitivity scenario using first/second-order approximation
- —Par, spot (zero), and forward yield curve on single SVG chart with tenor dots
Finance Sprint: +12 A2UI Templates (DAN-4 Heartbeat 3)
TemplatesTokensDocs
- —Business unit capital envelope allocation vs. deployed YTD, ROIC tracking with hurdle rate bars
- —Capital request pipeline with status tracking (approved/pending/rejected)
- —Per-entity ESG scores with E/S/G sub-score breakdown bars; framework disclosure coverage (GRI, SASB, TCFD, CDP, SFDR)
- —Emissions stacked bar chart by scope 1/2/3 with YoY trend
- —SANCTIONS/AML/PEP/FATF screening queue with risk tier badges and rule performance table
Funding & Capital Domain + Shared Finance Primitives (DAN-19 / DAN-20)
TokensComponents
- —Compact chip for ISIN, CUSIP, SEDOL, FIGI, and RIC instrument identifiers
- —Standard label + monospace value side-by-side with optional click-to-copy
- —Type-coded colors: ISIN/CUSIP → temporal, SEDOL/FIGI → validation, RIC → muted
- —Tenor label chip (ON, TN, 1W, 3M, 1Y, 5Y, 30Y and free-form)
- —Duration-band color coding: overnight → positive, short → temporal, medium → validation, long → muted
Sankey & Treemap Chart Enhancements
DAN-11TokensComponents
- —Added density prop ("default" | "compact") — compact reduces node padding and label sizes
- —Fixed font sizes to meet 10px floor: node labels 11px (compact: 10px), sublabels 10px, flow labels 10px
- —All colors already token-native — dark/light mode verified
- —Added density prop ("default" | "compact")
- —Fixed dynamic font sizes to enforce 10px minimum (Math.max(10, ...) replacing Math.max(8, ...))
Risk Analytics Domain Primitives
DAN-9Components
- —Semicircular gauge showing VaR limit utilization 0–100%
- —Four severity tiers: safe → positive | elevated → validation | warning → caution | critical → negative
- —Threshold tick marks at configurable breakpoints (default: 60% / 80% / 95%)
- —Shows current value, limit, confidence level, and horizon in footer
- —Multi-band horizontal bar for counterparty, sector, and concentration limits
FX & Derivatives Domain Primitives
DAN-8TokensComponents
- —Horizontally scrolling rate ticker for live FX rate display
- —Continuous loop animation, pause-on-hover, configurable speed
- —Severity-colored directional change indicators via outcome token system
- —Designed for top-of-screen or panel header placement
- —Two modes: predefined pairs list (trading desk) or free-select from full ISO 4217 currency list
A2UI Template Anatomy Standard + Heartbeat 2 Templates (DAN-13/14/15)
TemplatesTokens
- —5-slot system: header · metric strip (conditional) · tabs · content · footer
- —Footer canonical structure (left: toggle / center: ← Templates / right: skill tags)
- —3 layout patterns: table, grid, flow
- —Data contract shape — naming conventions, status unions, approved mock entities
- —Agent-context props: AgentRef shape, status semantics, trust chain, token budget display
Full CLAUDE.md Enforcement Pass + Token Alias Fix + Navigation Redesign
TemplatesTokensComponents
- —apps/nodus-design-system/CLAUDE.md — full design context, token rules, anti-patterns, quality checklist
- —.claude/rules/design-system.md — auto-loading rules for any file touch in the design system
- —lib/site-styles.ts — shared style registry (single source of truth for site page styles)
- —lib/use-staged-reveal.ts — React strict mode safe staged reveal hook
- —--ds-bg-default → var(--ds-surface-ground)
Finance DS Adoption + Spacing Token Migration + Package Exports
TokensComponents
- —shared/card-states.tsx — Hand-rolled shimmer keyframes + SkeletonBar replaced with Skeleton; custom error/empty states replaced with EmptyState + Button
- —StatusBadge.tsx — Standalone <span> badge converted to thin adapter over DS Badge with outcome color overrides via style prop
- —ThresholdAlert.tsx — Raw <button> action replaced with Button variant="outline"
- —PaymentTracker, PaymentQueue, ExceptionQueue, RegulatoryReport, ScreeningResultCard, RiskDisclosure — Inline badge <span> elements (8-10 style props each) replaced with Badge component
- —ConfirmationCard, SanctionsCheck, SurveillanceQueue (compliance) — status/severity/count badges
Test Coverage Expansion + Package Hardening
TokensComponents
- —DANA-1491: CashFlowTimeline, LiquidityGauge, SettlementLadder, TransactionFeed, CurrencyPair (32 tests)
- —DANA-1499: CardLoading, CardError, CardEmpty shared states, ThresholdAlert urgency levels, CashPositionCard data/empty/loading/error states, CounterpartyRiskCard score bands (33 tests)
- —DANA-1500: FXRateCard states + change display, PaymentStatusTracker pipeline/badges/maker-checker, RatioBar meter + threshold marker, TrendBadge direction icons + formatted values (30 tests)
- —DANA-1492: Table column sort toggle, MultiSelect tag add/remove/clear, MFAInput digit entry + paste, ConfirmModal confirm/cancel callbacks (26 tests)
- —DANA-1493: CheckboxGroup select/deselect/select-all, Select open/close/keyboard, SegmentedControl switch, Tabs panel switching (24 tests)
Auth & Identity Components + Responsive Infrastructure
TokensComponents
- —MFAInput — 6/8-digit OTP code entry with auto-advance, arrow key navigation, paste from any digit, countdown timer, shake-on-error animation
- —PasswordStrength — 4-segment visual meter with requirement checklist, role="meter" ARIA, transition on segment fill and checkmark scale
- —RoleBadge — Treasury persona badge (analyst, manager, director, controller, compliance_officer) with color-mix() token-derived backgrounds for theme safety
- —APIKeyDisplay — Masked API key with reveal toggle, copy-to-clipboard with success state, metadata row, revoke action
- —LoginCard — Full auth form with email/password, password visibility toggle, PasswordStrength integration, SSO provider slots, brand slot, error banner with slide-down animation
NODUS DESIGN SYSTEM · 172 ENTRIESSPRINT RELEASE NOTES →