Forbes
319a739adb
feat(db): add SettingsRepository for module state and config overrides
...
Provides CRUD operations on the module_state and settings_overrides
tables (created in migration 016).
- GetModuleStates / SetModuleState — upsert module enabled/disabled
- GetOverrides / SetOverride / DeleteOverride — JSONB config overrides
Part of #99
2026-02-15 02:51:00 -06:00
e20252a993
Merge pull request 'feat: module system — registry, middleware, and discovery endpoint' ( #102 ) from feat-module-system into main
...
Reviewed-on: #102
2026-02-14 20:05:42 +00:00
Forbes
138ce16010
fix: remove unreachable code in testutil.findProjectRoot
2026-02-14 14:02:48 -06:00
Forbes
690ad73161
feat(modules): public GET /api/modules discovery endpoint
...
Add HandleGetModules returning module state, metadata, and
public config (auth providers, Create URI scheme). No auth
required — clients call this pre-login.
Register at /api/modules before the auth middleware.
Ref #97
2026-02-14 14:02:11 -06:00
Forbes
b8abd8859d
feat(modules): RequireModule middleware to gate route groups
...
Add RequireModule middleware that returns 404 with
{"error":"module '<id>' is not enabled"} when a module is disabled.
Wrap route groups:
- projects → RequireModule("projects")
- audit → RequireModule("audit")
- integrations/odoo → RequireModule("odoo")
- jobs, job-definitions, runners → RequireModule("jobs")
- /api/runner (runner-facing) → RequireModule("jobs")
- dag → RequireModule("dag") (extracted into sub-route)
Ref #98
2026-02-14 14:01:32 -06:00
Forbes
4fd4013360
feat(modules): wire registry into server startup
...
Add modules.Registry and config.Config fields to Server struct.
Create registry in main.go, load state from YAML+DB, log all
module states at startup.
Conditionally start job/runner sweeper goroutines only when the
jobs module is enabled.
Update all 5 test files to pass registry to NewServer.
Ref #95 , #96
2026-02-14 14:00:24 -06:00
Forbes
3adc155b14
feat(modules): config loader refactor — YAML → DB → env pipeline
...
Add ModulesConfig and ModuleToggle types to config.go for explicit
module enable/disable in YAML.
Add LoadState() that merges state from three sources:
1. Backward-compat YAML fields (auth.enabled, odoo.enabled)
2. Explicit modules.* YAML toggles (override compat)
3. Database module_state table (highest precedence)
Validates dependency chain after loading. 5 loader tests.
Ref #95
2026-02-14 13:58:26 -06:00
Forbes
9d8afa5981
feat(modules): module registry with metadata, dependencies, and defaults
...
In-memory registry for 10 modules (3 required, 7 optional).
SetEnabled validates dependency chains: cannot enable a module
whose dependencies are disabled, cannot disable a module that
others depend on.
9 unit tests covering default state, toggling, dependency
validation, and error cases.
Ref #96
2026-02-14 13:57:32 -06:00
Forbes
f91cf2bc6f
feat(modules): settings_overrides and module_state migration
...
Add migration 016 with two tables for the module system:
- settings_overrides: dotted-path config overrides set via admin UI
- module_state: per-module enabled/disabled state
Update testutil.TruncateAll to include new tables.
Ref #94
2026-02-14 13:56:26 -06:00
ef44523ae8
Merge pull request 'fix(web): standardize typography and spacing to style guide' ( #93 ) from fix-web-style-guide into main
...
Reviewed-on: #93
2026-02-14 19:37:04 +00:00
Forbes
ba92dd363c
fix(web): align all spacing values to 4px grid
...
Standardize all spacing to multiples of 4px (0.25rem):
- 0.15rem (2.4px) → 0.25rem (4px)
- 0.35rem (5.6px) → 0.25rem (4px)
- 0.375rem (6px) → 0.25rem (4px) for borderRadius
- 0.4rem (6.4px) → 0.5rem (8px)
- 0.6rem (9.6px) → 0.5rem (8px)
Updated theme.css density variables, silo-base.css focus ring,
and all TSX component inline styles.
Closes #71
2026-02-14 13:36:22 -06:00
Forbes
c7857fdfc9
fix(web): standardize font sizes to style guide scale
...
Map fontWeight: 700 → 600 in non-title contexts (LoginPage, FileDropZone).
Align FileDropZone badge padding to 4px grid.
Closes #70
2026-02-14 13:36:07 -06:00
defb3af56f
Merge pull request 'feat: dependency DAG and YAML-defined compute jobs' ( #92 ) from feat-dag-workers into main
...
Reviewed-on: #92
2026-02-14 19:27:18 +00:00
Forbes
6d7a85cfac
docs: add DAG client integration contract for silo-mod and runners
2026-02-14 13:24:36 -06:00
Forbes
22c778f8b0
test: add DAG handler, job handler, and runner token tests
2026-02-14 13:23:21 -06:00
Forbes
ad4224aa8f
feat: add silorunner binary with job poll/claim/execute lifecycle
2026-02-14 13:21:21 -06:00
Forbes
b6ac5133c3
feat: add auto-trigger hooks for revision and BOM changes
2026-02-14 13:20:15 -06:00
Forbes
2732554cd2
feat: add job, runner, and DAG API handlers with routes
2026-02-14 13:19:02 -06:00
Forbes
df073709ce
feat: add DAG API handlers for graph queries and sync
2026-02-14 13:16:19 -06:00
Forbes
0eb891667b
feat: add runner authentication middleware and identity context
2026-02-14 13:14:36 -06:00
Forbes
1952dea00c
feat: wire job definitions, DAG/job repos, and background sweepers
2026-02-14 13:13:54 -06:00
Forbes
6becfd82d4
feat: add job and runner repository with atomic claim
2026-02-14 13:11:41 -06:00
Forbes
671a0aeefe
feat: add DAG repository with graph queries and dirty propagation
2026-02-14 13:09:41 -06:00
Forbes
f60c25983b
feat: add YAML job definition parser and example definitions
...
New package internal/jobdef mirrors the schema package pattern:
- Load/LoadAll/Validate for YAML job definitions
- Supports trigger types: revision_created, bom_changed, manual, schedule
- Supports scope types: item, assembly, project
- Supports compute types: validate, rebuild, diff, export, custom
- Defaults: timeout=600s, max_retries=1, priority=100
Example definitions in jobdefs/:
- assembly-validate.yaml: incremental validation on revision_created
- part-export-step.yaml: STEP export on manual trigger
11 unit tests, all passing.
2026-02-14 13:06:24 -06:00
Forbes
83e0d6821c
feat: add database migrations for DAG and worker system
...
Migration 014: dag_nodes, dag_edges, dag_cross_edges tables for the
feature-level dependency graph with validation state tracking.
Migration 015: runners, job_definitions, jobs, job_log tables for the
async compute job system with PostgreSQL-backed work queue.
Update TruncateAll in testutil to include new tables.
2026-02-14 13:04:41 -06:00
Forbes
9a8b3150ff
docs: add DAG and worker system specifications
...
DAG.md describes the two-tier dependency graph (BOM DAG + feature DAG),
node/edge data model, validation states, dirty propagation, forward/backward
cone queries, DAG sync payload format, and REST API.
WORKERS.md describes the general-purpose async compute job system: YAML job
definitions, job lifecycle (pending→claimed→running→completed/failed),
runner registration and authentication, claim semantics (SELECT FOR UPDATE
SKIP LOCKED), timeout enforcement, SSE events, and REST API.
2026-02-14 13:03:48 -06:00
376fa3db31
Merge pull request 'test: add test coverage for DB, file handlers, CSV/ODS, and API endpoints' ( #86 ) from test-coverage-batch into main
...
Reviewed-on: #86
2026-02-14 14:50:38 +00:00
Forbes
257e3d99ac
test(api): add revision, schema, audit, and auth handler tests ( #78 )
...
Revision tests (8):
- List, get, create, update status/labels, compare, rollback
- Not-found paths for missing items and revisions
Schema tests (4):
- List schemas, get by name, form descriptor, not-found
Audit tests (4):
- Completeness summary (empty + with items), item detail, not-found
Auth tests (4):
- Get current user (authenticated + unauthenticated)
- Auth config response
- Token lifecycle: create, list, revoke
2026-02-13 15:22:28 -06:00
Forbes
384b137148
test(api): add CSV and ODS import/export handler tests ( #77 )
...
CSV tests:
- Export empty/with items, template generation
- Import dry-run (preview without creating), commit (items created)
- BOM CSV export with parent/child relationships
ODS tests:
- Export with items (verify ODS content type and ZIP magic bytes)
- Template generation per schema
- Project sheet export with item associations
2026-02-13 15:20:20 -06:00
Forbes
7c838bdf5e
test(api): add file handler tests and fix createItemDirect helper ( #76 )
...
- Test ListItemFiles, DeleteItemFile with real DB
- Test cross-item file deletion guard (404)
- Test storage-unavailable paths: presign, upload, associate, thumbnail (503)
- Fix createItemDirect: StandardCost moved to revision properties
2026-02-13 15:18:46 -06:00
Forbes
c9b081b8f8
test(db): add edge-case tests for items, revisions, projects, and files ( #75 )
...
- Duplicate part number constraint (PG 23505)
- Hard delete, pagination, search filtering
- Revision status/labels update, compare, rollback
- Project-item association by code, list by project filter
- Item file CRUD: create, list, get, delete
2026-02-13 15:17:38 -06:00
bc1149d4ba
Merge pull request 'fix(web): style guide batch 3 — icons, font scale, spacing' ( #85 ) from fix-style-guide-batch-3 into main
...
Reviewed-on: #85
2026-02-13 20:59:59 +00:00
Forbes
07c4aa1c28
fix(web): align spacing values to style guide grid ( #71 )
...
- Replace 0.3rem padding/margin/gap with 0.25rem (xs)
- Replace 0.2rem margins with 0.25rem (xs)
- Replace 0.1rem padding with 0.15rem (badge spec)
- Replace 0.6rem margins/padding with 0.5rem (sm)
- Fix borderRadius 0.3rem to 0.375rem (6px per style guide)
- Preserve style-guide-specified values: 0.35rem button gap, 0.4rem cell padding, 0.45rem input padding
2026-02-13 14:37:40 -06:00
Forbes
679b730e74
fix(web): standardize font sizes to style guide scale ( #70 )
2026-02-13 14:33:11 -06:00
Forbes
b53ce94274
feat(web): install lucide-react and replace unicode icons ( #67 )
2026-02-13 13:44:48 -06:00
8316ac085c
Merge pull request 'fix: style guide batch 2 — buttons, tables, transitions, inputs, validation' ( #84 ) from fix-style-guide-batch-2 into main
...
Reviewed-on: #84
2026-02-13 19:27:56 +00:00
Forbes
d5f1b4e587
feat(partnum): implement part number validation ( #80 )
...
Implement Generator.Validate() to check part numbers against schemas:
- Split by separator, verify segment count
- Constant: must equal expected value
- Enum: must be in allowed values map
- String: length, case, pattern constraints
- Serial: length + numeric-only check
- Date: length matches expected format output
Add belt-and-suspenders call in HandleCreateItem after Generate().
Add 9 validation tests (all pass alongside 10 existing tests).
Closes #80
2026-02-13 13:26:13 -06:00
Forbes
f4a1c8004b
feat(web): add input focus states via silo-base.css ( #72 )
...
Create silo-base.css with .silo-input hover/focus pseudo-classes:
- hover: border-color overlay0
- focus: border-color mauve + 0.2rem mauve box-shadow
Applied className='silo-input' to form inputs in:
CreateItemPane, EditItemPane, ProjectsPage, SchemasPage,
SettingsPage, LoginPage
Closes #72
2026-02-13 13:24:39 -06:00
Forbes
a9614e704e
fix(web): standardize transition durations to 0.15s ease ( #73 )
...
All inline transition properties now use 'all 0.15s ease'.
Files: AppShell, CategoryPicker, AuditDetailPanel,
AuditSummaryBar, AuditTable, FileDropZone
Closes #73
2026-02-13 13:23:08 -06:00
Forbes
289d488469
fix(web): table header color overlay1 + selected row mauve tint ( #69 )
...
- All thStyle objects: color subtext1/subtext0 → overlay1
- Selected row bg: surface1 → rgba(mauve, 0.08)
Files: ItemTable, BOMTab, ProjectsPage, SchemasPage,
SettingsPage, AuditTable
Closes #69
2026-02-13 13:22:30 -06:00
Forbes
2585305590
fix(web): standardize button borderRadius, fontSize, fontWeight ( #68 )
...
All button style objects now use:
- borderRadius: 0.375rem
- fontSize: 0.75rem
- fontWeight: 500
Files: CreateItemPane, EditItemPane, DeleteItemPane, BOMTab,
CategoryPicker, ProjectsPage, SchemasPage, LoginPage,
ItemsToolbar, SettingsPage, ImportItemsPane, ItemTable
Closes #68
2026-02-13 13:21:54 -06:00
65063c9ee7
Merge pull request 'fix: style guide compliance batch 1 + date segment type' ( #83 ) from fix-style-guide-batch-1 into main
...
Reviewed-on: #83
2026-02-13 19:13:35 +00:00
Forbes
1f7960db50
feat: implement date segment type for part number generation
...
Fixes #79
Implement the date segment type in the part number generator. Uses Go's
time.Format with the segment's Value field as the layout string.
- Default format: 20060102 (YYYYMMDD) when no Value is specified
- Custom formats via Value field: "0601" (YYMM), "2006" (YYYY), etc.
- Always uses UTC time
- Add 3 tests: default format, custom YYMM format, year-only format
2026-02-13 13:10:57 -06:00
Forbes
648c659e2b
fix(web): use system font stack per style guide
...
Fixes #66
Remove Inter and Roboto from font-family. The style guide specifies
system fonts only: -apple-system, BlinkMacSystemFont, Segoe UI,
system-ui, sans-serif.
2026-02-13 13:09:56 -06:00
Forbes
d4ea6d2739
fix(web): align item type badge colors with style guide
...
Fixes #65
- Part: blue → green (--ctp-green)
- Assembly: green → mauve (--ctp-mauve)
- Document: yellow → blue (--ctp-blue)
- Add purchased (--ctp-peach) and phantom (--ctp-overlay1)
- Keep tooling as red (--ctp-red)
2026-02-13 13:09:41 -06:00
e20da25405
Merge pull request 'docs: integrate root ROADMAP.md into docs/ROADMAP.md' ( #64 ) from docs-integrate-roadmap into main
...
Reviewed-on: #64
2026-02-13 18:45:04 +00:00
Forbes
30bb3ee56e
docs: integrate root ROADMAP.md into docs/ROADMAP.md
...
Merge the tactical root ROADMAP.md (SOLIDWORKS PDM gap analysis, Phase 1-6
timelines, project inventory) with the visionary docs/ROADMAP.md (modular
platform architecture, .kc format, dependency tiers) into a single unified
document at docs/ROADMAP.md.
- Adopt dependency tier structure (Tier 0-6) as the organizing spine
- Add Status column to each tier table from project inventory
- Replace Phase 1-6 calendar timelines with Near-Term Priorities section
- Migrate 9 SOLIDWORKS PDM comparison tables to docs/GAP_ANALYSIS.md
- Migrate Feature Comparison Matrix to docs/GAP_ANALYSIS.md
- Preserve Phase 1 task checklists and success metrics as appendices
- Update README.md link from ROADMAP.md to docs/ROADMAP.md
- Delete root ROADMAP.md
2026-02-13 12:44:25 -06:00
a517a95912
Merge branch 'production' into main
2026-02-12 15:28:43 +00:00
6f1504021c
Merge pull request 'docs: add consolidated installation guide and helper scripts' ( #62 ) from install-guide-and-scripts into main
...
Reviewed-on: #62
2026-02-12 15:02:25 +00:00
d93770c551
Merge branch 'main' into install-guide-and-scripts
2026-02-12 15:02:13 +00:00