Bump VERSION to 0.10.0
All checks were successful
CI/CD / detect-changes (pull_request) Successful in 4s
CI/CD / test-runners (pull_request) Has been skipped
CI/CD / e2e-smoke (pull_request) Has been skipped
CI/CD / test-frontend (pull_request) Successful in 6s
CI/CD / test-go-pg (pull_request) Successful in 2m45s
CI/CD / test-sqlite (pull_request) Successful in 3m6s
CI/CD / build-and-deploy (pull_request) Successful in 1m18s

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-03 21:16:46 +00:00
parent b937580ed8
commit 54c2ba1ab8
2 changed files with 58 additions and 81 deletions

View File

@@ -2,6 +2,45 @@
All notable changes to Armature are documented here. All notable changes to Armature are documented here.
## v0.10.0 — Panel Manifest + Lifecycle
First version in the Panels series. Adds the plumbing layer for
composable companion views — a new rendering tier between surfaces
(full-page) and block renderers (inline). No presentation UI ships
in this version; floating and docked chrome arrive in v0.10.1v0.10.2.
**Manifest: `panels` field (provider + consumer)**
- Provider form: packages declare panels as a map of `{ entry, title,
icon, description, min_width, min_height, default_width, default_height }`
- Consumer form: surfaces declare panel dependencies as an array of
`"package.panel"` strings (soft dependency — install succeeds even
if provider is missing)
- Validation enforces required `entry` and `title` for providers,
`pkg.panel` dot-format for consumers
**Backend: panel resolution at surface load**
- `PanelMeta` struct carries resolved panel metadata
- `resolvePanels()` resolves consumer references against installed and
enabled provider packages at surface render time
- `window.__PANELS__` injected into base template for extension surfaces
- Soft-dependency warning logged at install time for unresolved consumers
**Frontend: `sw.panels` SDK module**
- `sw.panels.open(panelId, opts)` — lazy-loads panel JS via dynamic
`import()`, mounts into container, caches module for reuse
- `sw.panels.close(panelId)` — calls cleanup, removes container
- `sw.panels.toggle(panelId, opts)` — open if closed, close if open
- `sw.panels.isOpen(panelId)` / `sw.panels.isAvailable(panelId)` — boolean queries
- `sw.panels.list()` / `sw.panels.active()` — registered and open panel IDs
- Events: `panels.opened` and `panels.closed` emitted on lifecycle transitions
- Mount context: `{ sw, params, panelId, close, resize }`
- Unstyled container (position:fixed div) — v0.10.1 adds FloatingPanel chrome
**Tests:** 10 new — 6 manifest validation, 4 panel resolution
## v0.9.9 — Surface Access via Roles ## v0.9.9 — Surface Access via Roles
Surfaces can now gate access by team role. A manifest declaring Surfaces can now gate access by team role. A manifest declaring

View File

@@ -1,7 +1,5 @@
# Armature — Roadmap # Armature — Roadmap
## Current: v0.9.x — Workflow Redesign + Multi-Surface Packages
Self-hosted extensible platform kernel. Auth, identity, packages, Starlark Self-hosted extensible platform kernel. Auth, identity, packages, Starlark
sandbox, storage, realtime, and ops are kernel primitives. Everything else sandbox, storage, realtime, and ops are kernel primitives. Everything else
is an extension. is an extension.
@@ -73,97 +71,37 @@ All completed work is documented in `CHANGELOG.md`.
--- ---
## Planned
### v0.9.x — Multi-Surface Packages + Workflow Redesign ### v0.9.x — Multi-Surface Packages + Workflow Redesign
**v0.9.0 — Multi-Surface Packages** *(completed)* | Version | Title |
|---------|-------|
Packages declare a `surfaces` array with per-path access controls, | v0.9.0 | Multi-Surface Packages |
titles, and layouts. Unified route tree dispatches between surface | v0.9.1 | Server-Side Sub-Path Routing |
rendering and ext API calls. `sw.navigate()` for client-side sub-path | v0.9.2 | Converter Consolidation |
routing. Design doc: `docs/DESIGN-multi-surface.md`. | v0.9.3 | Team User Roles |
| v0.9.4 | Package Adoption + Roles |
**v0.9.1 — Server-Side Sub-Path Routing** *(completed)* | v0.9.5 | Typed Forms SDK |
| v0.9.6 | Stage Mode Collapse |
Consolidated root and catch-all route handlers into a unified dispatcher. | v0.9.7 | Workflow Starlark Write Ops |
Added `aggregateAccess()` for early auth short-circuit on all-authenticated | v0.9.8 | Routing SDK Primitive |
packages. SDK seeds initial history state for back-button resilience. | v0.9.9 | Surface Access via Roles |
8 handler integration tests + 5 aggregateAccess unit tests.
**v0.9.2 — Starlark Converter Consolidation + Snapshot Cleanup** *(completed)*
Consolidated duplicate Go↔Starlark converters into `sandbox/convert.go`
(4 exported functions) and snapshot parsers into `models/snapshot.go`.
Standardized on wrapped snapshot format. ~350 lines of duplication removed.
Design doc: `docs/DESIGN-workflow-redesign.md`.
**v0.9.3 — Team User Roles** *(completed)*
Many-to-many `team_user_roles` table. `RequireRole()` middleware.
Manifest `requires_roles` field (advisory). Starlark `teams` module
with `get_member_roles()` and `has_role()`. Team-admin UI with role
badge chips and assignment dropdown. 10 new tests.
**v0.9.4 — Package Adoption + Roles** *(completed)*
`adoptable` manifest field + `team_role_catalog` table. When a team
adopts an adoptable package, the package's `requires_roles` auto-populate
into the team's role catalog. Adopted packages reference the original via
`adopted_from` column (shared assets, no disk duplication).
`AdoptTeamWorkflow` deprecated in favor of package-level adoption.
4 new endpoints, migration 017, 11 new tests.
**v0.9.5 — Typed Forms → SDK Primitive** *(completed)*
Extracted `TypedFormTemplate`, `FormField`, `FormFieldset`, etc. from
`models/workflow.go` into a standalone `forms` package. REST endpoint
`POST /api/v1/forms/validate`. Starlark `forms.validate()` module.
FE SDK: `sw.forms.render()`, `sw.forms.validate()`, `sw.forms.validateRemote()`.
Manifest `form_template` accepted at package level. 16 new tests.
**v0.9.6 — Deprecate `stage_type`, Collapse `stage_mode`** *(completed)*
`stage_type` deprecated (no longer validated, defaults to "simple").
`stage_mode` collapsed from 4→3 values: form / delegated / automated.
"review" mapped to "form" on input; review surface removed (~110 lines).
Migration 018. 4 package manifests updated.
**v0.9.7 — Full Read/Write Workflow Starlark Module** *(completed)*
`WorkflowEngine` interface extracted in sandbox package to break
circular import. Four write builtins added: `workflow.start()`,
`workflow.advance()`, `workflow.cancel()`, `workflow.submit_signoff()`.
`instanceToDict` and `signoffToDict` helpers shared by read+write paths.
6 new tests.
**v0.9.8 — Conditional Routing → SDK Primitive** *(completed)*
`routing.evaluate(rules, data)` Starlark builtin — a generic decision
engine reusable by any extension. 10 operators (exists, not_exists, eq,
neq, gt, lt, gte, lte, in, contains), first-match-wins, returns target
string or None. Always available (pure computation, no permission).
8 new tests.
**v0.9.9 — Surface Access via Roles** *(completed)*
`role:ROLENAME` surface access level. User must hold the role in any
team (any-team semantics, no URL context needed). `evaluateAccess`
promoted to Engine method for store access. `HasRoleInAnyTeam` store
method queries both primary and additional roles. Admin bypass, fail-
closed on nil store. 10 new tests.
--- ---
### v0.10.x — Panels + Composable Layout ## Current: v0.10.x — Panels + Composable Layout
Panels are a new kernel rendering tier between surfaces (full-page) and Panels are a new kernel rendering tier between surfaces (full-page) and
block renderers (inline). They solve composable companion views — e.g., block renderers (inline). They solve composable companion views — e.g.,
a notes reference panel inside chat. Design doc: `docs/DESIGN-panels.md`. a notes reference panel inside chat. Design doc: `docs/DESIGN-panels.md`.
**v0.10.0 — Panel Manifest + Lifecycle** *(completed)*
Manifest `panels` field (provider map + consumer array, soft dependency).
`resolvePanels()` at surface load. `sw.panels` SDK module with full
lifecycle API. Lazy JS loading with module caching. 10 new tests.
| Version | Title | | Version | Title |
|---------|-------| |---------|-------|
| v0.10.0 | Panel Manifest + Lifecycle |
| v0.10.1 | FloatingPanel Primitive | | v0.10.1 | FloatingPanel Primitive |
| v0.10.2 | Docked Panels + Mode Transitions | | v0.10.2 | Docked Panels + Mode Transitions |
| v0.10.3 | Panel Communication Patterns | | v0.10.3 | Panel Communication Patterns |