Repository navigation
Release: merge development into beta - #1830
Open
github-actions[bot] wants to merge 42 commits into
Open
github-actions[bot] wants to merge 42 commits into
github-actions[bot] wants to merge 42 commits into
Conversation
…0261008011951 chore(sync): carry beta back into development
docs(openspec): link sign-in rows to integriq's broker configuration change
…new boards Every row with a board now points at canvas part 2 (QAAxpcsFKBCvDUGbQbwtCa). 44 of the 57 new boards (learner, guardian with the child switcher, coordinator, team lead, counsellor, compliance) are mapped onto the rows they deliver; 34 rows that had no board get one. The remaining null reasons point at the missing-boards list for the design session.
docs(openspec): link capabilities to the split design canvas and its new boards
Decision 99: eight rows for learniq boards on canvas part 2 that no row covered, rated from code; quiet hours specced as notification-quiet-hours-through-openregister. Decision 100: ass-review-proctoring-flags reopened as specified, specced as proctoring-flag-review-page.
docs(openspec): rows and specs for capabilities the design canvas draws
…w and the week on Rooster (#1756) * wip(portal): the pupil reads her own timetable (site-pupil-portal-design T1, T2, T5b) * test(portal): pin the pupil's timetable in the manifest shape and the Dutch labels * fix(portal): the timetable column reads Subject, not a schema name * fix(portal): the timetable page is ordered by StudentPortalPages, so the provider stays under phpmd's class length
A learner holds an update right on their own active proctoring-session (native test mode appends flags from their browser), so they could set reviewDecision on their own flags and allow them. ProctoringFlagReviewGuard is a pre-write veto on create and update of proctoring-session (proctoring-flag-review-page D2). Flags are matched on flagId against the stored ones: outside instructors and compliance-officers a caller may only append pending flags; staff may move a pending flag to allowed or annulled once; nobody removes or rewrites a stored flag. reviewedBy and reviewedAt are set by the server for a new decision and restored from storage for every other flag, whatever the body sends. Admin and system writes are not checked. The rules live in the pure OCA\Learniq\Proctoring\FlagReview. Ticks tasks 1.1 and 1.2 of proctoring-flag-review-page.
…rammes and school days (#1766) * wip(portal): the pupil reads her own timetable (site-pupil-portal-design T1, T2, T5b) * test(portal): pin the pupil's timetable in the manifest shape and the Dutch labels * fix(portal): the timetable column reads Subject, not a schema name * feat(portal): a guardian and a pupil may write to the teachers of the pupil's current groups (portal-message-contacts) * chore(portal): split the contact ordering and name the provider's coupling for phpmd * wip(portal): the school's public index of courses, programmes and school days; the example portals place the catalogue (portal-public-index) * feat(portal): the public index in one part per kind, phpcs and phpmd clean * fix(portal): the course kind reads Training course in code, not a schema name * fix(portal): the timetable page is ordered by StudentPortalPages, so the provider stays under phpmd's class length * refactor(portal): the student audience's collections live in StudentPortalCollections, so the provider stays under phpmd's class length
Unrelated events, a write another listener already stopped, an unresolvable schema, flags that are not a list, a flag without a decision, and a stored flag without an id that must come back exactly as stored. Closes the 12 statements the pgsql cell's coverage guard found uncovered.
…-review-staff-only
…cked in (#1834) Admin requests send their credentials without a challenge, text checks count only visible matches, the sign-in clicks the declared Nextcloud button, signed-in pages open at /mijn/learniq/<page>, and PORTAL_DESIGN_EXTERNAL_STUB=1 uses a long-lived stub broker. Fixes defects 1-5 of portal proof run 1.
Grades show subject, date and grade instead of field keys, the BPV hours page is in the menu as "BPV en uren", and a week sent back reads "Teruggestuurd". Fixes defects 10, 12 and 13 of portal proof run 1.
…count, and the install guide names every step (#1836) * docs(install): the steps a fresh school portal install needs after the loads maintenance:repair and cron after the loads, the portal's organisation, the DigiD and eHerkenning issuer, and portal accounts for pupils, students and participants. Covers defects 15 and 16 of portal proof run 1. * feat(portal): the example-set load gives its declared learners their portal account Noor (vo), Milan and Aylin (mbo) and Tom (training) get an active nextcloud account on their portal through portaliq's provision event (#1381) and then the learnerRef claim. A complete account is kept without asking portaliq, so a second load writes nothing; without the portal's organisation the account waits, and an older portaliq is asked nothing. The install guide drops the operator step. * refactor(portal): split the portal-account step into small methods (phpmd complexity)
…rdian overview holds only what the board shows (#1839) * wip(portal): the four portal declarations follow their boards One Contact column in the footer, one page title, the hero shows its heading beside the search box, the home's right column, the content page's side list at the top, Kies je richting, the academy's certificate heading and links. * fix(portal): the guardian overview holds only what the board shows Greeting, what is still to do, the children, news and this month; the calendar covers the month and a booked conversation reads as words with the teacher under it. OpenSpec change school-portals-match-their-boards. * fix(portal): undo a second run of the declaration script that duplicated widgets * fix(portal): notice banners, plain heroes and boxed tables, and the page title stays a level-1 heading FIX-P's requests: nlBanner kind notice with a lead, a link and band; variant plain on every school hero; the content page's table boxed under its own heading and the side list under an accent line. portaliq #1368 drops the shell title when a page opens with a level-1 nlHeading, so the declarations keep it. * feat(portal): each child's card says where the child is today The children cards declare a derived status from the guardian's own absence reports: a report covering today reads "Ziek gemeld", another school day "Op school", a weekend nothing. No schema field; portaliq renders the lookup once it reads the key (requested from FIX-P).
…f-only fix(security): only staff decide a proctoring flag
#1820 archived wizard-drops-the-removal-step and moved per-set removal to the admin page, so 17 @SPEC tags pointed at a requirement and two scenarios that no longer exist in openspec/specs/example-sets/spec.md (gate 46, spec-anchor-existence). - the loaded-set list, per-set removal and remove-example-set-<id> now cite "An administrator removes a loaded example set on the admin page" - removalSteps() and its test cite "The removal step never runs by itself" - "Removing one of two loaded sets" becomes "Removing the company set" Comment lines only. Gate 46: 17 -> 0.
fix(spec): repoint example-sets @SPEC tags to anchors that exist
…board words are tested in Dutch (#1854) Each school portal declares residentMenu.leaveOut [cases, tasks, access] (portaliq #1394): no MijnMenu board shows them. A test proves the child-card chip (Ziek gemeld, Op school), BPV en uren, Teruggestuurd, the grade columns and the conversation tile arrive in Dutch through PortalLabelTranslator.
…oornveen's hero marks its photo (#1856) training.json moves the course-day list into the hero's aside (portaliq #1397), filling itself from the portal's catalogue with the authored days as a fallback; mbo.json declares asideImage with the board's words, as no photo ships with the design. The board checks look for the aside.
* chore(issues): add the fleet issue templates * chore(issues): add the fleet issue templates * chore(issues): add the fleet issue templates * chore(issues): add the fleet issue templates
…0261008125844 chore(sync): carry beta back into development
…1863) * feat(example-sets): a load moves every date to the week it runs in DemoDates moves ISO dates, date-times (wall-clock kept), ISO weeks and Dutch date phrases by the whole weeks from Monday 5 October 2026 to the load's Monday. ExampleSetDates remembers each set's offset; a load in another week moves the existing objects and the portal's pages and news first, a load in the same week writes nothing. OpenSpec demo-dates-follow-the-load-week. * test(e2e): the board checks hold in any week, and read the notice strips and link columns dated() turns a board text with dates into a pattern for any week, as the load moves every date to its own week. The banners read lead and text, the po and vo homes end on nlLinkColumns, and the academy's expiry reads any number of weeks. DemoDates also moves a range with a weekday inside it. * test(e2e): Linda's board check opens the F-gassen booking before reading its participants * test(e2e): the theme check reads a button outside the hero's joined search box * test(e2e): the theme check reads a button outside the hero's joined search box
…r gets her accounts through the load (#1864) The issuer recipe carries loaClaim and loaMap, without which a guardian sees nothing. The manual install uses the app id learniq, npm ci, the portaliq and thematiq builds and appstoreenabled=false; the register wizard, OpenConnector as a requirement and occ app:repair scholiq are gone. The guide names the repair's maintenance window and how to find the portal ids and the organisation uuid. Petra Bakker (mbo) gets a Nextcloud and a trainer portal account through the load (portaliq #1381).
…ildren, and the participant reads his next day once (#1865) No child switcher on the overview; the task card leaves out a round where a child already has a time; event descriptions under the tiles; one absence page for both children. De Wilgenboom's search finds its news, Vaartveld's menu has no BPV page, Tom's next course day shows once with Daarna after it. OpenSpec guardian-and-participant-pages-follow-the-boards.
…nd the homes follow their boards (#1866) * fix(portal): the placement reads in words with its hours, and a booking lists its participants as the board The student's placement labels every field and its states, shows the hours bar under Waar sta je? and names each step's day once. An opened booking lists its participants with the certificate line and the details pill; the certificates group per certificate. OpenSpec placement-and-bookings-follow-the-boards. * fix(portal): placement steps as bars, academy course rows with weekdays, kind and a link, and the homes as their boards The placement's steps draw as bars. Course rows in the public index read "Donderdag · 1 dag · certificaat" and link to the course list; places left have no source. The lead news items mark their photo with the board's words, Esdoornveen's Voor leerbedrijven is a card of links, and the academy aside drops its portal workaround (portaliq #1402). * chore(l10n): place the new words apart from another open branch's
chore(parity): normalise features in the capability matrix
…rse date, placement agreements and work process progress (#1871) * feat(example-sets): the board data the schemas lacked: places per course date, placement agreements and work process progress Additive: cohort.capacity, four optional placement fields and a new werkproces-progress schema (register 0.40.0). The generators seed the academy's capacities, Milan's agreements and his six work processes. The public index says how many places are left; the placement page shows the agreements and the work processes. OpenSpec board-data-the-schemas-lacked. * fix(register): werkproces-progress tenant_id is a uuid like its siblings; the cohort version pin moves to 0.3.0 * feat(portal): the child's name on each absence report, the next placement step as a card, the supervisors, and Daarna after the next course day Uses portaliq round 5 (#1407, #1408, #1409). The steps provider gives the current step its visit's day and narrative. Supervisors come from two student-scoped collections joined through her own placements. The guardian's task title stays the round's name: a round names groups, not a child.
Ten loose specs go under their feature and five engineering specs into a new internalSpecs list. Ten rows the new learniq boards show link to them (LqInstellingen, LqInstallatie, LqKoppelingen, LqCfVrijstellingen, LqCfTrainingVastleggen). specScreens places five specs on those boards and gives nine specs with no UI by nature their reason.
chore(parity): every spec under a feature, every capability on a screen
…the student's own estimate per work process (#1874) - conference-invitation (register 0.41.0): one row per invited child per conference round, open while the child has no time in an open round, booked once it has one, closed otherwise. ConferenceInvitations writes only new or changed rows; ConferenceInvitationSync runs it inline after a round or a child's time moves; BackfillConferenceInvitations syncs the open rounds. The po generator seeds both open rounds (59 rows, Vera's booked, Sami's open). - Guardian: parentConferenceInvitations through the child join; the overview task reads it with the childName lookup and the title sentence "Kies een tijd voor het oudergesprek van {childName}", and opens parentPickATime with the invitation and both booking forms. titleTemplate is translated. - Student: fillInSelfAssessment ("Nu invullen"), an update of only selfAssessment on her own werkproces-progress rows; the studentSelfAssessment page; the "Volgende stap" card's button "Zelfbeoordeling afmaken" opens it with the placement. - NotificationRecipientGroupsAreDeclaredTest no longer compares a read rule array as a group name (the PHP warning in the full suite). OpenSpec: guardian-tasks-per-child-and-self-assessment
Links 71 rows that carried a placeholder reason to the 31 new learniq boards (some rows to two boards), gives att-learner-submits-an-excuse its real reason (absence is reported in the portaliq portal), and adds seven specScreens entries: six specs on their boards, i18n-locale-parity with a no-UI reason.
chore(parity): every capability on a screen, second pass
* docs(openspec): changes for the school portal screens Thirteen new spec-only changes for what the school boards on identity.conduction.nl/screens show that no learniq spec or open change covers, and portal-public-index extended with the test schedule and the school-day categories the editor boards read. * docs(openspec): record the decisions on invoices and exam registration
…ory week (#1880) The vo set gave H4b lessons only on Monday 5 and Tuesday 6 October, so "Je rooster vandaag" was empty from Wednesday on after the load moved the week (proof run 3). The generator now writes the rest of the week in the shape of the Monday, last, so no existing uuid moves. OpenSpec: vo-timetable-every-school-day
Portaliq stores jwt_signing_secret as a sensitive app value, so the
legacy IConfig::getAppValue() returns the encrypted value. The verifier
HMAC-checked every X-Portal-Subject assertion against that ciphertext,
and every portal action answered 401.
The verifier now depends on IAppConfig instead of IConfig and reads
getValueString('portaliq', 'jwt_signing_secret', '', lazy: false), which
decrypts it. Adds a regression test that fails on the old read path.
This branch has not been deployed
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.
Automated PR to sync development changes to beta for beta release.
Merging this PR will trigger the beta release workflow.