Skip to content

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, this project adheres to Semantic Versioning, commits follow Conventional Commits, and this changelog is generated by Structured Changelog.

Unreleased

v0.6.0 - 2026-08-23 (81fa71b)

Highlights

  • Project renamed back to DashForge: module github.com/plexusone/dashforge, dashforge/dashforge-server CLIs, DASHFORGE_* env vars
  • Persistent analytics sources: managed source configs with OmniVault credential refs, a connector registry, and a Dolt/Ent metadata database
  • Generic analytics engine with a public connector contract (no roadmap-specific dependencies)
  • Builder: questions workspace with AI assist, analytics source management, and a collapsible app shell

Breaking

  • Module path renamed from github.com/plexusone/uiforge to github.com/plexusone/dashforge (reverting the v0.4.0 rename). CLI binaries (dashforge, dashforge-server), npm workspace scopes (@dashforge/*), and the env var prefix (DASHFORGE_*) follow. v0.1.0-v0.3.0 remain importable as dashforge; v0.4.0-v0.5.0 remain importable as uiforge (81fa71b)
  • Analytics engine generalized to a public connector contract; roadmap-specific dependencies removed from the engine (fd9a9ab)
  • Server loads persisted analytics sources; the --omniroadmap-dsn flag is removed (c8bd107)

Added

  • SourceConfig model and connector registry for analytics sources (bd83946)
  • OmniVault resolver integration for dsnRef/credentialRef resolution (985d1b5)
  • SourceStore interface with JSON file backend (723df9d)
  • Ent AnalyticsSource schema and metadata-DB source store (33ea6d1)
  • Dynamic analytics Service over managed persisted sources (8a5b793)
  • Analytics source CRUD, connection-test, and connectors API endpoints (d7302de)
  • Questions, catalog IR, and GrokifyQL policy foundation (83540c7)
  • mysql:// (Dolt) metadata database via Ent and godolt (17a7c91)
  • Builder questions workspace with AI assist and widget foundation (2f383ab)
  • Builder analytics source management panel (363258a)
  • Builder navigation consolidated into a collapsible app shell (c703a5f)
  • Updated static dashboard viewer (e11fb71)

Changed

  • Dropped local replace directives (systemforge, omnillm) that broke CI builds; now consuming released github.com/grokify/systemforge v0.9.0 (bringing goauth/dpop) (81fa71b)

Fixed

  • Lint findings unmasked by restoring CI builds: sha1-based deterministic authz resource-ID derivation annotated (G401/G505), CredentialRef test fixture annotated (G101), saved-questions file mode tightened to 0600 (G306), unused request param removed (unparam) (81fa71b)

Dependencies

  • 2 dependency updates

Documentation

  • Persistent multi-source analytics documentation (11031fc)
  • Analytics authorization, agent integration, and platform guides (09f6161)
  • ADR-0001: analytics engine and compass roadmap stack (2929525)
  • Analytics examples generalized to app-registered connectors (45566e3)
  • INIT-UIFORGE-002 and INIT-DASHFORGE-001 specs and roadmap updates (745e202)

v0.5.0 - 2026-08-17

Highlights

  • Static viewer: light/dark theme toggle, persisted via localStorage and defaulting to the OS's prefers-color-scheme
  • Static viewer: numeric display capped to 2 decimal places in chart tooltips, value-axis labels, and metric tiles, plus a new "currency" metric format
  • Resolved all 10 pre-existing "error discard without comment" findings in datasource/ and internal/server/ via proper return/panic handling, per the org error-handling protocol
  • Added ESLint (flat config) and Prettier to builder/ and renderer/, which had never been configured despite builder/'s package.json already declaring a lint script; all resulting findings fixed
  • Fixed a pre-existing broken build in builder/: src/types/chartir.ts imports @grokify/echartify, which was never declared as a dependency

Added

  • Light/dark theme toggle in the static viewer header, re-initializing ECharts widgets with the official dark theme and persisting the choice via localStorage (63e771c)
  • "currency" metric format in the static viewer (was previously undocumented-but-unimplemented; only "percent" and "number" were handled) and a shared formatMetricNumber helper capping chart tooltips and value-axis labels to 2 decimal places (8a71a1c)

Fixed

  • Add missing @grokify/echartify runtime dependency to builder/package.json; src/types/chartir.ts already imported it, so typecheck/build were broken before this release (6287ef0)
  • Resolve builder/ ESLint findings: empty-interface cleanup, two react-hooks/set-state-in-effect fixes (remount-via-key, and switching to useQuery to match existing patterns), a Fast-Refresh export split, and a hoisted useMemo dependency (257d865)
  • Resolve renderer/ ESLint findings: wire up the previously-unused onInteraction prop into UIForgeContextValue, refactor two hook patterns flagged by eslint-plugin-react-hooks v7's React-Compiler-oriented rules, and remove dead test imports (a1a875c)
  • datasource/manager.go and internal/server/server.go: log previously-discarded connection-close and response-write errors instead of silently dropping them (eea77fc)
  • mysql/postgres Query() and internal/server/db/db.go's postgresDB.Query(): use named returns so a deferred rows.Close() failure is actually returned to the caller instead of discarded; provider.go's db.Close() after a failed ping is now joined into the returned error via errors.Join; a strings.Builder write that can never fail now panics instead of silently ignoring its (impossible) error (c7ef2dc)

Dependencies

  • 3 dependency updates

Documentation

  • Document the static viewer's theme toggle and numeric formatting in README.md and docs/index.md

Internal

  • Add eslint.config.js/.mjs, .prettierrc.json, and .prettierignore to builder/ and renderer/; apply Prettier formatting across both workspaces (whitespace/quote-style only, no behavior change) (e313925)
  • Rebuild builder/dist (committed for go:embed) and renderer/dist to reflect the dependency fix, lint fixes, and formatting; renderer/dist was also independently stale, missing compiled output for several modules that already existed in src/ (5796c33)
  • Investigated bumping the go toolchain to 1.26.6 to clear 7 govulncheck-found stdlib CVEs, but reverted to 1.26.5: the shared plexusone/.github reusable go-ci.yaml pins GOTOOLCHAIN=local after resolving "1.26.x", so it doesn't auto-upgrade to a newer patch just because go.mod asks for one. The CVEs remain unaddressed pending a fix to the shared workflow or CI's cached Go version catching up. (1dd32ad)

v0.4.0 - 2026-07-25

Highlights

  • UISpec type system: core Go types for the specification-driven UI composition model (page, component, layout, binding, interaction, navigation, theme, capability, and experience profiles)
  • Component registry with manifest validation, experience profiles, and builtin core/analytics/assistant namespaces
  • React PageRenderer for TypeScript: layout engine, component registry, expression evaluator, interaction handler, datasource connector, and reactive state store
  • Dashboard builder: AI-powered PageSpec generator, drag-and-drop ComponentPalette, and ComponentPropertyEditor
  • New uiforge and uiforge-server Cobra CLIs
  • Generated component and page JSON schemas via invopop/jsonschema
  • Renamed project and Go module from DashForge/dashforge to UIForge/uiforge across code, docs, and imports

Added

  • UISpec type system: page, component, layout, binding, interaction, navigation, theme, capability, and experience profile types (e8ae9aa)
  • Component registry with manifest validation, experience profiles, and builtin definitions for core, analytics, and assistant namespaces (5f92a3b)
  • Domain packages for PageSpec diffing, expression evaluation, interaction engine (drilldown/navigation), reactive state store, dashboard bridge adapter, and typed datasource connector (fbe6f23)
  • uiforge and uiforge-server Cobra CLIs: uiforge for validate/serve, uiforge-server for full server with database, auth, and multi-tenancy (43bf0ef)
  • Component and page JSON schemas generated from Go types via invopop/jsonschema (5a06e51)
  • React PageRenderer with UISpec rendering: PageRenderer component, layout engine, component registry, expression evaluator, interaction handler, datasource connector, reactive state store, and assistant-ui components (feaadba)
  • Builder: AI-powered PageSpec generator, ComponentPalette for drag-and-drop composition, ComponentPropertyEditor for visual property editing, and pagespec Zustand store (5350c3e)

Changed

  • Rename Go module from github.com/plexusone/dashforge to github.com/plexusone/uiforge, updating import paths across ent generated code, datasource providers, integration channels, internal server, multiapp, and schema packages (454e093)

Dependencies

  • 4 dependency updates

Documentation

  • Rename DashForge display name to UIForge across README, mkdocs.yml, docs pages, specs, design docs, and release notes (86125df)
  • Rename dashforge to uiforge across all documentation, mkdocs.yml, README, CHANGELOG, and release notes (URLs, binary names, import paths) (c29b479)
  • Add CLAUDE.md with project conventions and session protocol for PRISM Control integration (6ff597a)
  • Update README shields (0015e8e)

Tests

  • Add PageSpec golden test data and example dashboard specs for metrics overview, sales dashboard, compliance, and agent workspace (e9bb840)

Internal

  • Fix gofmt issues flagged by golangci-lint (2155b97)
  • Update .gitignore for uiforge rename and add node_modules ignore (d2c1cd2)
  • Add task tracking and ideation notes (8b5943a)

v0.3.0 - 2026-05-11

Highlights

  • Migrate from CoreForge to SystemForge (upstream project rename)
  • Update to SystemForge v0.7.0 with ProductGraph, session invalidation, and account lockout

Breaking

  • Dependency renamed from github.com/grokify/coreforge to github.com/grokify/systemforge - users of multiapp package must update imports (6247295)

Fixed

  • Resolve gosec G124 (insecure cookie attributes) warnings in OAuth handler (1884671)
  • Resolve gosec G710 (open redirect) warnings in OAuth handler (1884671)

Dependencies

  • 3 dependency updates

v0.2.0 - 2026-04-26

Highlights

  • Principal-based identity model with SystemForge integration
  • Dashboard template marketplace with licensing and subscriptions
  • Multi-app deployment support via AppBackend adapter

Added

  • Principal entity as unified identity root for all actor types (human, application, agent, service) (4dc4b62)
  • Human schema for human-specific identity attributes (4dc4b62)
  • PrincipalMembership for organization memberships (4dc4b62)
  • Publisher entity for organizations creating and selling templates (32556d9)
  • Listing entity for marketplace entries (32556d9)
  • License entity for purchased access to marketplace items (32556d9)
  • Subscription entity for recurring license subscriptions (32556d9)
  • SeatAssignment entity for per-seat license allocation (32556d9)
  • DashboardTemplate entity for reusable dashboard templates (32556d9)
  • Publisher and consumer role hierarchies for authorization (e243e94)
  • Marketplace-specific permissions (publish, purchase, review) (e243e94)
  • SpiceDB integration for fine-grained access control (e243e94)
  • Multi-app backend adapter implementing cfmultiapp.AppBackend interface (2a759bc)
  • Schema-isolated database connections for multi-app deployment (2a759bc)

Changed

  • Migrate JWT implementation to SystemForge session/jwt package (f17f96a)
  • Migrate OAuth providers to SystemForge identity/oauthclient package (f17f96a)
  • Replace custom ChartIR types with @grokify/echartify re-exports (7184738)

Fixed

  • Resolve golangci-lint issues including gofmt formatting (9330b6d)

Dependencies

  • 8 dependency updates

Documentation

  • Authorization user guide for role-based access control (e8f532b)
  • Authorization technical design document (e8f532b)
  • Marketplace feature overview (e8f532b)
  • Template publishing guide for publishers (e8f532b)
  • License types and seat management documentation (e8f532b)
  • Update mkdocs navigation with marketplace and authorization sections (199a3a7)
  • Update README with marketplace feature highlights (199a3a7)
  • Update MkDocs to PlexusOne unified theme with dark mode default (16477d6)
  • Update documentation URLs to plexusone organization (d2705ce)
  • Add UTF-8 icons to README Features section (55d441d)

Internal

  • Add shared CI/CD pipelines via reusable workflows (1d08649)
  • Remove local replace directives for systemforge and omniobserve (ea3b516)
  • Commit builder/dist for go:embed (enables go install without Node.js) (d4ec8e5)
  • Add builder/dist to CI paths filter for all workflows (888ca86)

v0.1.0 - 2026-03-01

Highlights

  • Full-stack dashboard builder with Go backend and TypeScript frontend
  • Ent-based database schema with OAuth authentication
  • Data source integrations and alert system

Added

  • Go server with Chi router and middleware stack (600a8e8)
  • JWT authentication with access and refresh tokens (600a8e8)
  • OAuth integration for GitHub and Google providers (600a8e8)
  • User entity with email, password hash, and role fields (8d72a70)
  • Organization entity for multi-tenant support (8d72a70)
  • OAuthAccount entity for external provider credentials (8d72a70)
  • RefreshToken entity for token management (8d72a70)
  • Dashboard entity with JSON layout storage (eafe1c6)
  • SavedQuery entity for reusable queries (eafe1c6)
  • DashboardVersion entity for version history (eafe1c6)
  • Alert and AlertChannel entities for alerting system (eafe1c6)
  • AlertEvent entity for alert history tracking (eafe1c6)
  • DataSource entity for external data connections (6cfd92f)
  • Integration entity for third-party service connections (6cfd92f)
  • TypeScript ChartIR types based on echartify specification (93e28b2)
  • TypeScript dashboard and widget type definitions (93e28b2)

Documentation

  • Project documentation with architecture overview (aad89a6)
  • API reference documentation (aad89a6)
  • MkDocs configuration with Material theme (aad89a6)
  • README with feature summary and installation instructions (2e2a8be)

Internal

  • Initial project setup with go.mod and directory structure (04f6f87)
  • Add LICENSE and .gitignore files (04f6f87)