fix(manifest): restore clobbered Enrolment/Regulation schemas; conform manifest to nc-vue v1.4.0; drop dead scaffold files - #40
Merged
Conversation
…m manifest to nc-vue v1.4.0; drop dead scaffold files
## Root cause
All 5 Wave-2 worktrees were branched off the same pre-Wave-2 base, so the sub-agents
worked blind to each other. The dashboard agent wrote intentional STUB Enrolment +
Regulation schemas ("declare a stub if it doesn't exist yet"). When the dashboard PR
was cherry-picked LAST onto a development that already had #31's full Enrolment and
#33's full Regulation, git's line-based JSON merge kept the stub (the schemas were
declared at different file positions, so no textual conflict — git appended both and
`json.load` resolved the duplicate key to the stub). The merge-resolver script was
only re-run on manifest.json, not scholiq_register.json.
## Fixes
- **Restore full Enrolment schema** (10 props + x-openregister + lifecycle pending→active→completed|withdrawn|failed + relations learner/course + calculations isOverdue/daysRemaining/ragStatus + notifications welcomeOnActivate/completionOnComplete/reminderT30/T7/T1/managerAlertOnOverdue) and merge in the dashboard's myMandatoryTraining widget.
- **Restore full Regulation schema** (12 props + x-openregister + lifecycle draft→published→archived + aggregations mandatoryEnrolledCount/mandatoryCompletedCount/attestationCount/validCredentialCount + calculations coveragePercent/ragStatus + notifications officerAlertOnCoverageDrop/onPublished) and merge widgets coverageGrid+boardProof+attestationCount.
- **Move `appendOnly: true` to top level** on Credential, XapiStatement, Attestation — OR's Schema::hydrate() only reads top-level `appendOnly` (it calls setAppendOnly()); when nested inside `x-openregister` the flag was silently dropped, so these schemas were NOT actually append-only.
- **Conform src/manifest.json to nc-vue manifest schema v1.4.0**: removed `visibleIf` from pages, `public` from CredentialVerify, fixed dashboard widgets to {id,title,type:'custom'}, stripped non-schema keys (href, visibleIf) from the viewInMydash action. `tests/validate-manifest.js` now PASSes (was FAIL with 14 errors).
- **Delete dead scaffold files**: src/router/index.js, src/views/Dashboard.vue, src/navigation/MainMenu.vue (none imported anywhere), lib/Controller/DashboardController.php (no route).
Follow-ups: nc-vue needs `visibleIf` page predicates, `public` pages, and `widget-ref` page-content (umbrella #200) before the dashboard can be fully declarative; until then the dashboard pages are conformant-but-minimal.
Contributor
Quality Report — ConductionNL/scholiq @
|
| 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-12 05:15 UTC
Download the full PDF report from the workflow artifacts.
This was referenced May 12, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Investigation + fix for manifest-system regressions found in Wave 2. See commit message for the full root-cause analysis.
tl;dr
EnrolmentandRegulationschemas with widget-only stubs (lost their lifecycle/calculations/notifications/aggregations/relations + most properties). Restored from the last-good commit + merged the dashboard widgets back in.appendOnly: truewas nested insidex-openregisteron Credential/XapiStatement/Attestation — OR'sSchema::hydrate()only reads top-levelappendOnly, so it was silently dropped (those schemas were NOT append-only). Moved to top level.src/manifest.jsondidn't validate against nc-vue's manifest schema v1.4.0 (14 errors:visibleIfon pages,publicon pages,widget-refwidgets,href/visibleIfon actions — all features the sub-agents guessed at that don't exist yet). Conformed it;tests/validate-manifest.jsnow PASSes.src/router/index.js,src/views/Dashboard.vue,src/navigation/MainMenu.vue,lib/Controller/DashboardController.php.🤖 Generated with Claude Code