OpenSpec Change: integration-xwiki
Spec path: openspec/changes/integration-xwiki
Depends on: #1307 (pluggable-integration-registry)
⚠️ Blocked — Waiting on Dependencies
When the umbrella is merged, remove the blocked label and add ready-to-build to let Hydra pick this up.
Spec PR: #1300
Real-world consumer
ConductionNL/deskdesk ships a desk-booking app whose Part 4 tutorial demonstrates the xWiki integration end to end. The app currently uses a wrong-shape implementation (custom knowledge_article schema + sync) as a placeholder. When this leaf lands, deskdesk:
- Drops the
knowledge_article schema, the KnowledgeTab.vue custom sidebar component, and the DetailPageWrapper.vue workaround
- Adds
"linkedTypes": ["xwiki"] to the desk schema configuration
- The XwikiProvider supplies the sidebar tab + widget + reference rendering automatically
- Part 4 of the academy tutorial gets a clean rewrite teaching the correct pattern
The xWiki dev environment lives in openregister/docker-compose.yml under the xwiki / integrations profile (docker compose --profile xwiki up -d xwiki). Container hostname openregister-xwiki:8080 is reachable from the Nextcloud container; host port 8086 for browser access.
Tasks
1. Backend
2. Frontend — Tab
3. Frontend — Widget
4. Registration
5. Quality
6. Acceptance verification
OpenSpec Change: integration-xwiki
Spec path:
openspec/changes/integration-xwikiDepends on: #1307 (
pluggable-integration-registry)When the umbrella is merged, remove the
blockedlabel and addready-to-buildto let Hydra pick this up.Spec PR: #1300
Real-world consumer
ConductionNL/deskdeskships a desk-booking app whose Part 4 tutorial demonstrates the xWiki integration end to end. The app currently uses a wrong-shape implementation (customknowledge_articleschema + sync) as a placeholder. When this leaf lands, deskdesk:knowledge_articleschema, theKnowledgeTab.vuecustom sidebar component, and theDetailPageWrapper.vueworkaround"linkedTypes": ["xwiki"]to thedeskschema configurationThe xWiki dev environment lives in
openregister/docker-compose.ymlunder thexwiki/integrationsprofile (docker compose --profile xwiki up -d xwiki). Container hostnameopenregister-xwiki:8080is reachable from the Nextcloud container; host port8086for browser access.Tasks
1. Backend
lib/Service/Integration/Providers/XwikiProvider.phpgetOpenConnectorSource()returns 'xwiki'authRequirements()returns the OpenConnector source's declared auth typeExternalIntegrationRouterconfig/openconnector-sources/xwiki.yamllib/AppInfo/Application.phpIntegrationRegistrydiscovers it automatically2. Frontend — Tab
CnXwikiTab.vue— linked pages with title + full breadcrumbsrc/components/CnXwikiTab/index.js3. Frontend — Widget
CnXwikiCard.vue— 4 surfaces with detail-page text previewuser-dashboard: recent linked pagesapp-dashboard: scoped to appdetail-page: linked pages + 500-char text preview (macros stripped) + link to full pagesingle-entity: page-title + breadcrumb chip<script>in preview output4. Registration
src/integrations/builtin/xwiki.js— register withreferenceType: 'xwiki'referenceType5. Quality
scripts/check-integration-parity.shpassescomposer check:strictpassesnpm run lintpasses6. Acceptance verification
openregister-xwikicontainerhttps://wiki.example/xwiki/bin/view/Dept/Policy/Privacy→ space='Dept.Policy', page='Privacy'CnFormDialog{{velocity}}macro<script>in output