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
07d0b66fda
feat(auth): Bloc 4b — OIDC client Authentik via openid-client (active par OIDC_ENABLED env)
...
Ajoute un flow d'authentification OIDC via Authentik (ou tout IdP conforme),
desactive par defaut. Le code est dormant tant que OIDC_ENABLED=true n'est
pas pose.
Server :
- apps/server/src/core/auth/oidc/oidc.module.ts (nouveau)
- apps/server/src/core/auth/oidc/oidc.service.ts (discovery + PKCE + callback + JIT provisioning)
- apps/server/src/core/auth/oidc/oidc.controller.ts (routes /api/auth/oidc/{login,callback,status})
- apps/server/src/core/auth/oidc/oidc.service.spec.ts (8 tests Jest, openid-client mocke)
- apps/server/src/integrations/environment/environment.service.ts : +9 getters OIDC
- apps/server/src/core/core.module.ts : +OidcModule dans imports
Client :
- apps/client/src/features/auth/queries/oidc-query.ts (hook useOidcStatus)
- apps/client/src/features/auth/components/oidc-login-button.tsx (bouton conditionnel)
- apps/client/src/features/auth/components/login-form.tsx : +OidcLoginButton
Securite :
- PKCE S256 obligatoire
- State CSRF en cookie httpOnly signe (5 min)
- Verification JWKS auto via openid-client v6
- Refetch userInfo apres echange du code
- JIT provisioning strict par defaut (OIDC_AUTO_PROVISION=false)
Lib : openid-client v6.8.2 (deja en deps), import lazy.
Documente dans ACADENICE_PATCHES.md (Patch 002) et .env.example.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 21:26:53 +02:00
efa26440a0
feat(rebrand): DocAdenice — patch initial sur le fork Acadenice
...
- Renomme app name visible 'Docmost' -> 'DocAdenice' (browser title, header, emails)
- Conserve identifiants techniques (package name, classes, imports, service docker)
- Ajoute ACADENICE_PATCHES.md avec changelog des patches Acadenice
2026-05-07 21:10:51 +02:00
Philipinho
3227bc6059
fix: a11y
2026-05-04 23:04:26 +01:00
Philip Okugbe
dbe6c2d6ba
feat: A11y fixes ( #2148 )
2026-05-04 21:21:37 +01:00
Philip Okugbe
c247d4c1e3
feat(ee): PDF import ( #2142 )
...
* feat: replace pdfjs-dist with firecrawl-pdf-inspector
* use modified firecrawl-pdf-inspector
* feat: pdf import
* increase single file upload size limit
* use npm package
* sync
* update package
2026-05-01 14:56:39 +01:00
Philip Okugbe
641ce142df
feat(ee): SCIM ( #1347 )
...
* SCIM - init (EE)
* accept db transaction
* sync
* Content parser support for scim+json
* patch scimmy
* sync
* return early if userIds is empty
* sync
* SCIM db table
* fixes
* scim tokens
* backfill
* feat(audit): add scim token events
* rename scim migration
* fix
* fix translation
* cleanup
2026-05-01 14:53:30 +01:00
Sarthak Chaturvedi
1d2486455f
fix: prevent browser tab fallback in editor ( #2123 )
2026-05-01 13:58:51 +01:00
Philip Okugbe
09c69d7a0f
feat: properly preserve table width ( #2143 )
2026-05-01 00:49:31 +01:00
Peter Tripp
b16f1e5a55
fix: ctrl-k behavior on macOS ( #2052 )
...
* Improve cmd-k / ctrl-k behavior
Use cmd-k on macOS/iOS for search and keep ctrl-k everywhere else.
Fixes a bug where ctrl-k on macOS, which cuts to the end of the line,
was also triggering the search prompt.
* comment submit: cmd-enter (mac) / ctrl-enter (win/linux)
2026-05-01 00:36:40 +01:00
Philip Okugbe
24be90b95f
fix: duplicate PDF uploads ( #2139 )
2026-04-29 10:01:47 +01:00
Philip Okugbe
cc00e77dfb
fix: space overview favorites ( #2110 )
2026-04-14 02:58:24 +01:00
Philipinho
66c70c0e76
fix print
2026-04-14 00:40:17 +01:00
Philip Okugbe
a3a9f35005
fix home flickers ( #2108 )
2026-04-13 23:54:03 +01:00
Philip Okugbe
4056bd0104
feat: enhancements ( #2107 )
...
* refactor
* fix
* update packages
2026-04-13 23:34:40 +01:00
Philip Okugbe
bd68e47e03
feat(ee): page verification workflow ( #2102 )
...
* feat: page verification workflow
* feat: refactor page-verification
* sync
* fix type
* fix
* fix
* notification icon
* use full word
* accept .license file
* - update templates
- update migration and notification
* fix copy
* update audit labels
* sync
* add space name
2026-04-13 20:20:34 +01:00
Philip Okugbe
d42091ccb1
feat: favorites ( #2103 )
...
* feat: favorites and templates(ee)
* rename migrations
* fix sidebar
* cleanup tabs
* fix
* turn off templates
* cleanup
* uuid validation
2026-04-12 22:06:25 +01:00
Philip Okugbe
57efb91bd3
feat(ee): ai chat ( #2098 )
...
* feat: ai chat
* feat: ai chat
* sync
* cleanup
* view space button
2026-04-10 19:23:47 +01:00
Philip Okugbe
da9b43681e
feat: watch space ( #2096 )
2026-04-09 00:37:51 +01:00
Philip Okugbe
895c1817ae
feat: bug fixes ( #2084 )
...
* handle enter in inline code
* fix: duplicate comment cache
* track link nodes (backlinks)
* fix en-US translation
* fix internal a-links
* overrides
* 0.71.1
2026-04-05 13:45:36 +01:00
Philip Okugbe
879aa2c3d8
feat: page update notifications ( #2074 )
...
* feat: watchers notification and email preferences
* fix: email copy
* digests
* clean up
* fix
* clean up
* move backlinks queue-up to history processor
* fix
* fix keys
* feat: group notifications
* filter
* adjust email digest window
2026-03-31 16:03:59 +01:00
Philip Okugbe
a062f7a165
fix: enhance confluence importer ( #2072 )
...
* fix placeholder
* min resize dimensions
* fix media links
* fix
2026-03-30 13:16:40 +01:00
Philipinho
5cea30cc5c
fix markdown paste
2026-03-29 16:11:21 +01:00
Philipinho
c9cdfa0f17
fix
2026-03-29 02:20:56 +01:00
Philip Okugbe
412962204c
fix: editor fixes ( #2067 )
...
* autojoiner
* fix marked
* return clipboardTextSerializer as markdown
* fix clipboardTextSerializer for single lines
* cleanup two preceeding spaces in ordered lists item
* fix extra paragraph in task list
* don't zip sinple page exports
2026-03-29 02:19:09 +01:00
Olivier Lambert
a42ac3d450
fix: strip trailing whitespace-only paragraphs from pasted content ( #2050 )
2026-03-28 22:26:47 +00:00
Philipinho
642c92f779
fix select
2026-03-28 20:34:44 +00:00
Julien Fontanet
aa27d57624
fix: notification items are now real links ( #2039 )
...
Replace UnstyledButton with UnstyledButton component={Link} so each
notification renders as a real anchor element. Regular left-clicks use
SPA navigation and close the popover; Ctrl/Cmd/middle-click open the
page in a new tab. All click types mark the notification as read.
2026-03-28 20:23:21 +00:00
Philip Okugbe
3829b6cbef
feat(ee): viewer comments ( #2060 )
2026-03-28 19:32:52 +00:00
Philipinho
859f16740b
tooltip portal
2026-03-28 19:19:00 +00:00
Philip Okugbe
7981ef462e
feat(editor): audio and PDF nodes ( #2064 )
...
* use local resizable
* feat: aduio
* support audio imports
* feat: use confluence real file names
* cleanup
* error handling
* hide notice
* add audio
* fix pulse
* Fix import and export
* unify pulse
* hide in readonly mode
* keywords
* keyword
* translations
* better sort
* feat: PDF embed
* cleanup
* remove audio menu
* open active
* hide focus on readonly mode
* increase iframe default dimension
2026-03-28 17:33:29 +00:00
Philip Okugbe
803f1f0b81
feat: user session management ( #2056 )
...
* user session management
* WIP
* cleanup
* license
* cleanup
* don't cache index
* rename current device property
* fix
2026-03-26 20:00:04 +00:00
Philip Okugbe
fa4872e89e
fix(deps): package updates ( #2041 )
...
* update
* overrides
* override
* fix page update mutation
* fix
* cleanup
* loader
* fix excalidraw package
* override
* fix regex
2026-03-25 10:07:01 +00:00
Philip Okugbe
975b4dcaab
feat: auth pages layout ( #2042 )
...
* auth pages layout
* exclude home route from redirect
* fix margin
2026-03-22 16:40:50 +00:00
Philipinho
2678c4e279
fix
2026-03-16 00:32:30 +00:00
Philipinho
b0bde4b375
feat: replace link popover with dedicated bubble menu
2026-03-16 00:26:03 +00:00
Philipinho
724e37d5b7
revert
2026-03-15 23:03:32 +00:00
Philip Okugbe
7520c329d0
fix notion importer ( #2027 )
...
* fix notion importer
* fix link selector on mobile
2026-03-15 22:06:40 +00:00
Philip Okugbe
d7a5fda53c
feat: better feature flags ( #2026 )
...
* feat: feature flag upgrade
* fix translations
* refactor
* fix
* fix
2026-03-15 22:05:32 +00:00
Philip Okugbe
89b94e5d19
feat: refactor link menu ( #2025 )
...
* link markview - WIP
* WIP
* feat: refactor links
* cleanup
2026-03-15 17:08:59 +00:00
Philip Okugbe
97c459be67
feat(cloud): add find-workspace and email verification endpoints ( #2020 )
...
* feat: add find-workspace and email verification endpoints
* sync
2026-03-14 13:36:30 +00:00
Philip Okugbe
d0ed6865cb
fix page level comment on mobile ( #2018 )
...
* add icon next to comment box
2026-03-14 01:01:24 +00:00
Philip Okugbe
1fdee33206
feat(editor): add auto-save and unsaved changes protection for diagrams ( #2011 )
...
* feat(editor): add auto-save and unsaved changes protection for diagrams
* 30 seconds
2026-03-13 17:58:29 +00:00
Philip Okugbe
7b69727a30
fix shared page mention view for non-logged in users ( #2008 )
2026-03-11 19:25:27 +00:00
Philipinho
fcffa3dfa0
fix media
2026-03-04 12:08:08 +00:00