Skip to content

feat(shell): adopt CnAppRoot manifest-first shell (ADR-024 Tier-4) - #28

Merged
rubenvdlinde merged 1 commit into
developmentfrom
feat/wedge/nextcloud-app
May 11, 2026
Merged

feat(shell): adopt CnAppRoot manifest-first shell (ADR-024 Tier-4)#28
rubenvdlinde merged 1 commit into
developmentfrom
feat/wedge/nextcloud-app

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Summary

  • Replaces the custom-router + OpenRegisterGuard app shell with a manifest-driven CnAppRoot shell per hydra ADR-024 §8/§9 (Tier-4 full shell adoption)
  • Implements issue Wedge spec: nextcloud-app — Tier-4 CnAppRoot manifest adoption (per ADR-024) #21
  • Adds PHP legitimate seams per ADR-031: Cmi5LaunchTokenService (JWT stub), AiFeatureDpoAckGuard (DPO lifecycle guard), PageController (SPA + manifest endpoint)
  • Replaces example schema in scholiq_register.json with AiFeature (x-openregister-lifecycle + x-openregister-notifications)

Files changed

Frontend:

  • src/manifest.json: 6 pages, 7 menu items, openregister + openconnector dependencies
  • src/main.js: manifest-driven bootstrap, no app-local router code
  • src/App.vue: simplified CnAppRoot wrapper
  • src/views/ScholiqSettings.vue: OR register picker + AiFeature table + signing key widget
  • tests/validate-manifest.js: Ajv manifest schema validator
  • package.json: check:manifest script, @conduction/nextcloud-vue ^1.0.0-beta.13, @nextcloud/axios ~2.5.2 pin

PHP:

  • lib/Controller/PageController.php: SPA shell + /api/manifest endpoint
  • lib/Service/Cmi5LaunchTokenService.php: RS256 JWT stub (full impl in course-management change)
  • lib/Lifecycle/AiFeatureDpoAckGuard.php: lifecycle guard for AiFeature enable/disable transitions
  • lib/Settings/scholiq_register.json: AiFeature schema with lifecycle + notifications
  • lib/AppInfo/Application.php: cleaned of forbidden ADR-031 services
  • appinfo/routes.php: full wedge route table
  • appinfo/info.xml: hard dependencies, NC 33+, PHP 8.3/8.4

Test plan

  • composer check:strict PASS (PHPCS, PHPMD, Psalm, PHPStan)
  • npm run lint PASS
  • npm run build PASS (size warnings only, no errors)
  • npm run check:manifest PASS (Ajv validation 0 errors, schema v1.3.0)

Implements issue #21 — replaces the custom-router + OpenRegisterGuard app
shell with a manifest-driven CnAppRoot shell per hydra ADR-024 §8/§9.

Frontend:
- src/manifest.json: 6 pages (Dashboard, Courses, Enrolments, Credentials,
  Compliance, Settings) + 7 menu items bound to OR register/schema pairs;
  $schema points at the canonical app-manifest.schema.json
- src/main.js: rewritten — imports bundledManifest, builds vue-router from
  manifest.pages, renders CnAppRoot; no app-local router config
- src/App.vue: simplified wrapper around CnAppRoot with translate prop
- src/views/ScholiqSettings.vue: new custom settings page (OR register
  picker, AiFeature read-only table, credential signing key widget)
- tests/validate-manifest.js: Ajv validator for src/manifest.json
- package.json: pin @nextcloud/axios ~2.5.2 (CJS export required by
  @nextcloud/vue CJS barrel); bump @conduction/nextcloud-vue to ^1.0.0-beta.13;
  add check:manifest script

PHP (ADR-031 legitimate seams only):
- lib/Controller/PageController.php: index() + catchAll() + manifest()
  (ADR-024 §4 bundled blob endpoint, v0.2 override hook deferred)
- lib/Service/Cmi5LaunchTokenService.php: RS256 JWT mint stub
  (full impl in course-management change)
- lib/Lifecycle/AiFeatureDpoAckGuard.php: DPO-ack guard for AiFeature
  lifecycle transitions (ADR-031 PHP seam)
- lib/Settings/scholiq_register.json: replace example schema with AiFeature
  schema (x-openregister-lifecycle + x-openregister-notifications)
- lib/AppInfo/Application.php: cleaned — no AdminSettings/PersonalSettings
- appinfo/routes.php: full wedge route table (10 routes + catch-all)
- appinfo/info.xml: hard <dependency> for openregister + openconnector,
  NC min-version 33, PHP 8.3/8.4; remove OCP Settings registration (now
  manifest-driven)

Quality: composer check:strict PASS, npm run lint PASS,
         npm run build PASS, npm run check:manifest PASS
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/scholiq @ 8b4e14f

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
composer ✅ 100/100
npm
PHPUnit ⏭️
Newman ⏭️
Playwright ⏭️

Quality workflow — 2026-05-11 20:20 UTC

Download the full PDF report from the workflow artifacts.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant