4e2af88144
feat(acadenice): add custom slash commands system for R3.3
...
Workspace admins can declare dynamic /keyword commands via settings UI
without recompile. Five action types: insert-template, insert-table,
embed-url, run-webhook, insert-snippet. Webhook security: HTTPS-only,
ACADENICE_WEBHOOK_ALLOWLIST allowlist, 10s timeout, no redirects, 1MB cap.
New permission slash_commands:manage added to catalogue (23 perms) and
seeded to Owner + Admin roles.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 01:06:11 +02:00
2fc310a2f2
feat(acadenice): add bidirectional backlinks + wikilinks for R3.2
...
- Migration: acadenice_backlink table (source/target/link_type/excerpt/workspace)
with 3 indexes and UNIQUE(source,target,type) constraint. Up+down.
- Backend module AcadeniceBacklinksModule:
BacklinkParserService: walks Tiptap JSON, extracts wikilinks/mentions/databaseView.
BacklinkIndexerService: idempotent delete-then-insert per page save.
BacklinkService: permission-aware query (space_members / public visibility).
BacklinksController: GET /api/acadenice/pages/:pageId/backlinks (JWT auth).
PageContentUpdatedListener: OnEvent handler for collab saves -> async reindex.
Tests: 16 Vitest specs (parser/indexer/service/controller).
- PersistenceExtension patch: emits ACADENICE_PAGE_CONTENT_UPDATED_EVENT after
each collab onStoreDocument (fire-and-forget, no impact on save path).
- CoreModule patch: imports AcadeniceBacklinksModule.
- Frontend WikilinkExtension: Tiptap inline atom node, [[Title]] / [[Title|alias]],
Suggestion popup (reuses mention pattern + floating-ui), ReactNodeView with
broken-link state, insertWikilink command.
Tests: 9 Vitest specs (schema/attrs/commands/HTML parse+render).
- LinkedReferencesPanel: React Query useBacklinks(pageId, staleTime=30s),
accordion grouped by link_type, excerpt preview, navigate to source page.
Tests: 7 Vitest specs (loading/error/empty/render/navigate/groups).
- extensions.ts patch: + WikilinkExtension in mainExtensions[].
- full-editor.tsx patch: + LinkedReferencesPanel below editor (Divider + panel).
- i18n: 11 keys added in en-US and fr-FR (backlinks.* + wikilink.*).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 00:51:02 +02:00
ba8d8678a0
test(e2e): add data-testid attributes for Playwright e2e (Patch 008 R3.1.e)
...
Minimal testid additions to 4 renderer files so Playwright can target
stable selectors: table-renderer, cell-{rowId}-{fieldName}, kanban-board,
kanban-column-{label}, kanban-card-{rowId}, calendar-renderer,
inline-editor-input, inline-editor-readonly.
Also adds Dockerfile.e2e for the client build used in docker-compose.e2e.yml.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 00:37:39 +02:00
f3fae2ac78
feat(client): add kanban + calendar renderers + inline edit for R3.1.d
...
- KanbanRenderer: @dnd-kit drag-drop, group by single_select field,
optimistic update + rollback, empty column placeholder, read-only mode
- CalendarRenderer: @fullcalendar month/week/day toggle, eventDrop ->
PATCH date field, event click -> RowDetailModal, stub deps noted
- InlineEditor: polymorphic (text/number/date/select/multi-select),
save on blur/Enter, cancel on Escape, permission denied read-only
- RowDetailModal: simple field detail view opened from calendar events
- useUpdateRow: generic PATCH with React Query v5 optimistic+rollback
- usePermissions: reads acadenice_permissions from window global or cookie
- patchRow helper added to bridge-client.ts
- DatabaseViewComponent: dispatches kanban/calendar to real renderers
- TableRenderer: integrates InlineEditor on double-click cells
- i18n: +12 keys (kanban.*, calendar.*, edit.*, row_detail.*) in en-US + fr-FR
- 5 new test suites: kanban, calendar, inline-editor, use-update-row, use-permissions
- Updated database-view-component.test.tsx for R3.1.d dispatch
Deps to install: @dnd-kit/core@^6 @dnd-kit/sortable@^8 @dnd-kit/utilities@^3
@fullcalendar/react@^6 @fullcalendar/daygrid@^6
@fullcalendar/timegrid@^6 @fullcalendar/interaction@^6
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 00:24:12 +02:00
71c2abad8a
feat(client): add database-view Tiptap extension for R3.1.c
...
- Tiptap Node extension (database-view) with attrs tableId/viewId/viewType/bridgeUrl
- NodeViewWrapper dispatches on viewType: grid/table -> TableRenderer, other -> PlaceholderRenderer
- TableRenderer (HTML table, TanStack Table v8 migration-ready - dep not yet installed)
- InsertDatabaseModal (Mantine, 2-step: table -> view selection)
- useDatabaseRealtimeUpdates SSE hook (EventSource + exponential backoff + React Query invalidation)
- bridge-client.ts (axios wrapper, per-origin singleton, cookie Bearer passthrough)
- Slash command /database registered in menu-items CommandGroups
- DatabaseViewExtension wired in mainExtensions array
- i18n: 22 keys added in en-US and fr-FR
- 41 Vitest tests across 5 suites (extension schema, component dispatch, renderer states, modal steps, SSE hook)
Upstream patches: extensions.ts (+2 lines), menu-items.ts (+4 lines), 2 translation files
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 00:07:33 +02:00
4d8bd250be
feat(rbac): R2.3a endpoint /permissions/me + frontend hook propre
2026-05-07 22:58:22 +02:00
022add9acc
feat(rbac): R2.2 frontend pages settings RBAC dynamique avec PermissionMatrix
...
- Pages /settings/roles (liste + filtres + create), /settings/roles/:id (matrix
permissions + danger zone), /settings/users/:userId/roles (multi-select +
preview union)
- PermissionMatrix : groupes Mantine cards, wildcard <group>:* qui grise les
individuals, admin:* qui court-circuite tout, indeterminate states, tooltips
avec descriptions du catalogue
- React Query hooks pour CRUD roles + assignations user-roles, notifications
Mantine sur succes / erreurs avec extraction du message backend
- Hook useAcadenicePermissions : best-effort lecture du claim JWT R2.1, fallback
sur role natif Docmost (defense en profondeur — backend reste source de verite)
- i18n complet FR + EN (~80 cles)
- Vitest + Testing Library introduits dans apps/client (devDeps + config + setup)
- 22 tests couvrant matrix wildcards, list filters, detail save/delete flow,
multi-select assignments
- Patches upstream minimaux : 3 routes ajoutees au router, 1 entree sidebar
(visible si canManageRoles)
- Documente comme Patch 004 dans ACADENICE_PATCHES.md
2026-05-07 22:42:39 +02:00