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-serverCLIs,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/uiforgetogithub.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 asdashforge; v0.4.0-v0.5.0 remain importable asuiforge(81fa71b) - Analytics engine generalized to a public connector contract; roadmap-specific dependencies removed from the engine (
fd9a9ab) - Server loads persisted analytics sources; the
--omniroadmap-dsnflag is removed (c8bd107)
Added¶
SourceConfigmodel and connector registry for analytics sources (bd83946)- OmniVault resolver integration for
dsnRef/credentialRefresolution (985d1b5) SourceStoreinterface with JSON file backend (723df9d)- Ent
AnalyticsSourceschema and metadata-DB source store (33ea6d1) - Dynamic analytics
Serviceover 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
replacedirectives (systemforge, omnillm) that broke CI builds; now consuming releasedgithub.com/grokify/systemforgev0.9.0 (bringinggoauth/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
uiforgeanduiforge-serverCobra 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) uiforgeanduiforge-serverCobra CLIs:uiforgefor validate/serve,uiforge-serverfor 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/dashforgetogithub.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
gofmtissues 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/coreforgetogithub.com/grokify/systemforge- users ofmultiapppackage 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 installwithout 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)