Skip to content

v0.3.0 — Custom pages + writable data

Choose a tag to compare

@DavidsonGomes DavidsonGomes released this 24 Apr 16:58
· 2 commits to main since this release

First release to use Wave 2.1 Custom pages — PM Essentials now ships four full-screen plugin pages that exercise the complete plugin UI surface in EvoNexus.

Added

Full-screen pages

  • ui/pages/company.js — Company configuration form (name, logo, timezone, fiscal year)
  • ui/pages/projects.js — Full CRUD for pm_essentials_projects
  • ui/pages/kanban.js — HTML5-native drag-and-drop sprint kanban (no external libs, respects connect-src 'self' CSP)
  • ui/pages/reports.js — Velocity bar chart + status breakdown via Canvas 2D (no CDN)

Routes: /plugins-ui/pm-essentials/<company|projects|kanban|reports>
Sidebar group: PM Essentials (collapsible, order 10).

New capabilities

  • ui_pages — declares pages via ui_entry_points.pages[] + sidebar_groups[]
  • writable_data — CRUD endpoints with column allowlist and optional JSON Schema validation
    • pm_essentials_projects (POST / PUT / DELETE)
    • pm_essentials_tasks (PUT only, used by kanban drag-drop)

New SQL tables

  • pm_essentials_company_config (single-row, upsert via writable_data)
  • pm_essentials_projects
  • pm_essentials_sprints
  • pm_essentials_tasks

Requires

EvoNexus core with Wave 2.1 schema support (branch feature/plugins-v1, merge pending):

  • New Pydantic classes: PluginPage, PluginSidebarGroup, PluginWritableResource
  • Endpoints: GET /api/plugin-ui-registry, POST/PUT/DELETE /api/plugins/<slug>/data/<resource_id>
  • GET /api/tickets?source_plugin=<slug> filter
  • Catch-all route /plugins-ui/:slug/* + PluginPageHost
  • CSP hardening (connect-src 'self')

Installs cleanly on older cores — ui_pages and writable_data capabilities are optional; pages simply won't appear until the core is updated.

Notes

  • Plugin pages are loaded via dynamic import() into the host scope (Shadow DOM inside each Custom Element). Session cookie is shared same-origin.
  • Plugin state is namespaced in localStorage as plugin:pm-essentials:*.
  • Navigation via window.EvoNexus.navigate() SDK (no window.location hacks).