Changeset 0.27.1 (#167)

This commit is contained in:
2026-03-10 17:43:29 +00:00
parent 7e4f1581f2
commit 41be9d6081
16 changed files with 780 additions and 57 deletions

View File

@@ -450,17 +450,17 @@ makes them a natural addition.
**Surfaces + Editor**
- [x] ~~Extension loader: surfaces from manifest.json~~ (v0.27.0 — `/s/:slug` route)
- [x] ~~Editor drag-drop file reorder~~ (v0.27.0 — workspace debt)
- [ ] Editor drag-drop file reorder (was v0.21.5 — deferred, no DnD infra in file-tree.js)
- [ ] Article drag-to-reorder outline sections (was v0.21.6)
- [ ] Article-specific AI tools: suggest_outline, expand_section, check_citations (was v0.21.6)
- [x] ~~PDF export via pandoc~~ (shipped v0.22.4)
- [ ] Mobile: mode selector collapses to hamburger/bottom nav (was v0.21.3)
- [x] ~~Pane state persistence per-user/per-project~~ (v0.27.0 — workspace debt)
- [x] ~~Pane state persistence per-user/per-project~~ (v0.27.0 — debounced sync to user_settings)
**Workspace + Git**
- [x] ~~Workspace settings UI: git config section in channel/project settings~~ (v0.27.0 — workspace debt)
- [ ] Workspace settings UI: git config section (was v0.21.4 — deferred, needs vault-encrypted git credentials)
- [ ] User settings: git credentials management UI (was v0.21.4 — needs vault extension, v0.28.0+)
- [x] ~~`.gitignore` respect in workspace indexing~~ (v0.27.0 — workspace debt)
- [x] ~~`.gitignore` respect in workspace indexing~~ (v0.27.0 — Reconcile walk filter)
- [ ] Integration tests: clone, commit, push/pull cycle — requires git binary in CI (was v0.21.4)
**Provider Health + Routing**
@@ -762,7 +762,7 @@ See [DESIGN-0.25.0.md](DESIGN-0.25.0.md) for full spec.
- [x] Core surfaces (chat, admin, settings, editor, notes) on manifest pattern
- [x] `window.__PAGE_DATA__` injection from declared `data_requires`
- [x] `surface_registry` table — admin can enable/disable surfaces (Migration 022)
- [ ] `/s/:slug` route namespace for extension/dynamic surfaces v0.27.0
- [x] `/s/:slug` route namespace for extension/dynamic surfaces (shipped v0.27.0)
**Component Extraction**
- [x] FileTree: extracted from `editor-mode.js`, standalone component with Go template partial + JS hydration
@@ -815,7 +815,7 @@ See [DESIGN-0.25.0.md](DESIGN-0.25.0.md) for full spec.
**Shared Surface Routes** — partially shipped
- [x] `/admin/:section`, `/settings/:section` — full-page surface routes
- [ ] `/s/editor/:wsId`, `/s/article/:wsId/:path`v0.27.0 (extension surface routes)
- [ ] `/s/editor/:wsId`, `/s/article/:wsId/:path`TBD (editor uses `/editor/:wsId` today)
- [ ] `/p/:id` — shared project view — TBD
**Shipped in v0.26.0:**
@@ -862,18 +862,18 @@ release notes.
- [x] Route registration test (`TestRouteRegistration`)
- [x] Workflow CRUD test (`TestWorkflowCRUD`, `TestWorkflowValidation`)
**Moved to v0.27.0 Phase 2 (Workflow Polish):**
- [ ] Team-scoped workflow management UI (team admin settings surface)
- [ ] Drag-and-drop stage reorder in builder (backend supports it, UI is manual)
- [ ] `on_complete` workflow chaining (column exists nullable, not wired)
- [ ] Workflow retention enforcement (column exists, not enforced)
- [ ] Stage persona auto-switch in chat UI
- [ ] Round-robin auto-assignment
- [ ] Assignment notifications via WebSocket
- [ ] Channel header stage indicator + advance/reject controls
**Shipped in v0.27.0 Phase 2 (Workflow Polish):**
- [x] Team-scoped workflow management UI (Settings → Workflows section)
- [x] Drag-and-drop stage reorder in builder (`_wfWireStageDnD()`)
- [x] `on_complete` workflow chaining (`triggerOnComplete()` in workflow_instances.go)
- [x] Workflow retention enforcement (staleness sweep extended)
- [x] Stage persona auto-switch in chat UI (via `workflow.advanced` WS event)
- [x] Round-robin auto-assignment (`tryRoundRobin()` in workflow_instances.go)
- [x] Assignment notifications via WebSocket (`workflow.assigned`, `workflow.claimed`)
- [x] Channel header stage indicator + advance/reject controls
**Moved to v0.27.0 Phase 1:**
- [ ] Extension surface routes (`/s/:slug` namespace)
**Shipped in v0.27.0 Phase 1:**
- [x] Extension surface routes (`/s/:slug` namespace`RenderExtensionSurface()`)
**Shipped (verified in code audit):**
- [x] Persona tool grant enforcement in completion handler (`completion.go:928`)
@@ -887,31 +887,33 @@ Depends on: workflow engine (v0.26.0), dynamic surfaces (v0.25.0).
See [DESIGN-0.27.0.md](DESIGN-0.27.0.md) for full spec.
**Phase 1: Extension Surface Routes (`/s/:slug`)**
- [ ] `surface-extension` Go template (HTML + CSS + scripts blocks)
- [ ] `base.html` conditional chain extended with `{{if .Manifest}}` fallthrough
- [ ] `loadExtensionSurfaces()` in page engine (reads extension manifests from DB at startup)
- [ ] nginx location block for `/surfaces/` static assets
- [ ] Frontend nav renders extension surfaces from `ListEnabledSurfaces`
- [ ] Admin surfaces section: upload/enable/disable/uninstall (API already exists)
- [ ] Sample `.surface` archive (hello-world dashboard) for testing
- [ ] CSP nonce propagation for extension scripts
**Phase 1: Extension Surface Routes (`/s/:slug`)**
- [x] `surface-extension` Go template (HTML + CSS + scripts blocks)
- [x] `base.html` conditional chain extended with `{{if .Manifest}}` fallthrough
- [x] `RenderExtensionSurface()` catch-all handler — runtime DB lookup, no restart needed
- [x] nginx location block for `/surfaces/` static assets (unified + split deployment)
- [x] Frontend nav renders extension surfaces from DB query at render time
- [x] Admin surfaces section: upload/enable/disable/uninstall (API + UI wired)
- [x] Sample `.surface` archive (`hello-dashboard`) for testing
- [x] CSP nonce propagation for extension scripts
- [x] `EXTENSION-SURFACES.md` authoring guide (manifest, API, CSS properties, admin API)
- [x] `EXTENSIONS.md` §6 rewritten to reference new authoring guide
**Phase 2: Workflow Engine Polish (v0.26.0 debt)**
- [ ] Channel header workflow stage indicator + advance/reject controls
- [ ] Stage persona auto-switch in chat UI
- [ ] Assignment notifications via WebSocket (`workflow.assigned`, `workflow.claimed`)
- [ ] Round-robin auto-assignment (per-stage `transition_rules.auto_assign`)
- [ ] `on_complete` workflow chaining (column exists, wire trigger logic)
- [ ] Workflow retention enforcement (extend staleness sweep goroutine)
- [ ] Drag-and-drop stage reorder in workflow builder UI
- [ ] Team-scoped workflow management UI (team settings → Workflows section)
**Phase 2: Workflow Engine Polish (v0.26.0 debt)**
- [x] Channel header workflow stage indicator + advance/reject controls
- [x] Stage persona auto-switch in chat UI (via `workflow.advanced` WS event → stage bar refresh)
- [x] Assignment notifications via WebSocket (`workflow.assigned`, `workflow.claimed`)
- [x] Round-robin auto-assignment (per-stage `transition_rules.auto_assign`)
- [x] `on_complete` workflow chaining (`triggerOnComplete()` — slug lookup, data mapping, channel creation)
- [x] Workflow retention enforcement (staleness sweep extended — archive/delete by policy)
- [x] Drag-and-drop stage reorder in workflow builder UI (`_wfWireStageDnD()`)
- [x] Team-scoped workflow management UI (Settings → Workflows section)
**Phase 3: Workspace + Editor Debt**
- [ ] `.gitignore` respect in workspace indexing (`workspace/indexer.go`)
- [ ] Workspace settings UI: git config section in channel/project settings
- [ ] Pane state persistence per-user/per-project (save/restore in `user_settings`)
- [ ] Editor drag-drop file reorder (workspace file tree DnD)
**Phase 3: Workspace + Editor Debt** (partial)
- [x] `.gitignore` respect in workspace indexing (`workspace/fs.go` — Reconcile walk, `loadGitignore`, `matchesGitignore`)
- [x] Pane state persistence per-user/per-project (debounced sync to `user_settings` API, cross-device restore)
- [ ] Workspace settings UI: git config section — deferred (broader scope, needs vault-encrypted git credentials)
- [ ] Editor drag-drop file reorder — deferred (greenfield, no existing DnD in file-tree.js)
---