Select your name first

Choose your name from the Tester dropdown at the top and click Save before filling out the form.

Tester

Sections QA — Updated UAT (Internal)

Jira: DLOW-198

What this is: Internal QA walkthrough for the section admin batch (CCS-07 through CCS-12 + CCS-09a). Sources:

  • UAT guides specs 024–030 on main
  • Admin Spec workflow §5 section path
  • Jira acceptance criteria (DLOW-177–182, DLOW-188)
  • UAT-aligned verify labels from uat-checklist.md + guide confirmation steps

Prerequisite: Complete DLOW-194 — Courses QA first (or seed PLG-LRW-201 via QA Seed Tools). This walkthrough continues where DLOW-194 left off at create-section handoff.

Updated walkthrough: This page supersedes the original /dlow-198-qa walkthrough for new testing. The old page remains read-only for historical tester progress.

Not business UAT — internal QA before release.

Also see:


Legend

MarkerMeaning
(no marker)Core walkthrough from UAT guides (specs 024–030)
NEW — UAT-alignedVerify items curated from uat-checklist + guide confirmations
NEW — CorrectionFixes or RBAC notes for internal QA

Before you start

Start here: https://lsuoce-development.fly.dev/

  1. Confirm DLOW-194 foundation passed — especially PLG-LRW-201 ready for section creation.
  2. If needed, seed: QA Seed ToolsCCS-01 UAT — Legal Research & WritingSeed now
  3. Open catalog admin dashboard: https://lsuoce-development.fly.dev/dashboard/catalog/

Log in as:

WhoEmailPasswordUse for
Program Manager (primary CE user)pm_catalog@example.compassword12!Section workflow, create/edit/publish
Adminadmin@lsu.edupassword12!Seed tools, superuser checks
Enrollment Adminenrollment.admin@lsu.edupassword12!RBAC denial tests only — expect 403

Demo anchor: PLG-LRW-201 — Legal Research & Writing under Paralegal Studies Certificate.

First visit tip: Site may be asleep. If you see a 502, wait 15 seconds and reload.

Overlap note: Lifecycle (§5.5) and course inheritance (§4.3) were tested in DLOW-194 — here we verify them in section setup context only.


General Notes & Uploads

Test in this order

StepWhatBuild ticketUAT guide
1CCS-07 — Create & duplicate section (CCS-07)DLOW-177024-section-create-duplicate
2CCS-08 — Details & schedule (CCS-08)DLOW-178025-section-details-schedule
3CCS-09 — Enrollment, capacity & waitlist (CCS-09)DLOW-179026-section-enrollment-capacity
4CCS-09a — Enrollment eligibility gating (CCS-09a)DLOW-188027-section-enrollment-eligibility
5CCS-10 — Instructor & Paralegal restrictions (CCS-10)DLOW-180028-section-instructor-restrictions
6CCS-11 — Visibility, pricing/refund & publish readiness (CCS-11)DLOW-181029-section-visibility-pricing-refund
7CCS-12 — Publish, Moodle trigger & exceptions (CCS-12)DLOW-182030-section-publish-moodle-exceptions

Progress:


Part 1 — Create & duplicate section (CCS-07)

Task: DLOW-177 · Needs DLOW-194 (ready course + PLG-LRW-201 seeded)

In plain English: Staff create dated sections from a ready course or duplicate a prior offering — dates and price must not silently carry forward.

Workflow area: §4.5 → §5 — Create section from ready course

Walkthrough 1.1 — 1 — Create a section from a course

  1. Open: the section list for PLG-LRW-201 (see above).
  2. Click Create section. It sits in the header row of the Sections card, next to the "Showing 1–N of N" count — not in the page title bar.
  3. Confirm the page title is Create section and the breadcrumb reads Catalog / Paralegal Studies Certificate / Legal Research & Writing / Create section. The line under the title is the course title. Look for the Inheritance from course panel on the right.
  4. Known gap — expected to fail: the costing unit (PL) is not shown on this screen. Note it and move on; a developer is aware.
  5. Fill Start date 2026-09-01, End date 2026-12-15, Capacity 25, Section price 525.00, and leave Initial status as Draft.
  6. Click Save section.
  7. Confirm you return to the section list and the new row shows start date 2026-09-01 with a Draft lifecycle badge.
Verify

Walkthrough 1.2 — 2 — Duplicate a section with confirmation

  1. Open: Section list for PLG-LRW-201 (same path as Walkthrough 1).
  2. Please check this first, and report what you see. On the Fall 2026 — Cohort Section row, open the menu. It should offer a way to duplicate the section. As of 2026-08-30 it does not — it lists only Edit section and Internal preview. If that is what you see, note it as a defect and continue with step 3.
  3. Reach the duplicate form by URL instead. Take the section list URL and append the section's id: /dashboard/catalog/certificates/<cert_pk>/courses/<course_pk>/sections/<section_pk>/duplicate/. A developer can give you the section id, or you can read it off the Internal preview link in the ⋯ menu, which ends in /sections/<section_pk>/preview/.
  4. Confirm the page title is Duplicate section, and that reusable fields copied (for example Modality and Enrollment model) while Start date, End date, and Section price are blank.
  5. Confirm the Confirm new offering values card is visible, explaining that section dates, pricing, and public enrollment dates are not copied automatically.
  6. Try Save section without checking the confirmation checkbox. Confirm the form stays on the page with the error "Confirm dates, pricing, and enrollment window before saving."
  7. Enter new Start date 2027-01-15, End date 2027-04-30, Section price 675.00, check the box labelled "I confirm the section dates, pricing, and public and staff enrollment windows for this new offering.", then Save section.
  8. Confirm the list now shows both the original section dates and your new section, and the new section is Draft. The original section’s dates should be unchanged.
Verify

Walkthrough 1.3 — 3 — Cohort vs open enrollment labels

  1. Open: Section list for PLG-LRW-201.
  2. In the Enrollment column, confirm one row shows Cohort-based and another shows Open enrollment.
  3. Open the duplicate form for the cohort-based section (by URL — see Walkthrough 2, step 3). Confirm the form shows a Cohort-based badge and the line "Cohort assignment is configured in a later step."
  4. Do the same for the open enrollment section. Confirm the badge reads Open enrollment and the copy mentions eligible learners (full cohort rules come in a later story). > Wording note, not a defect: the list badges say Cohort-based / Open enrollment, > while the form's Enrollment model dropdown says Cohort / Term and > Rolling / Open Enrollment. If that inconsistency bothers you as a CE admin, say so — > it is a product call, not a bug.
Verify

Walkthrough 1.4 — 4 — Section list gateway

  1. Open: Section list for PLG-LRW-201.
  2. Confirm the columns read Section, Status, Start, End, Capacity, Enrollment, Modality, Actions.
  3. Open a row's menu. Expected to fail: it should offer Duplicate; today it offers only Edit section and Internal preview. This is the same defect as Walkthrough 2, step 2 — record it once.
  4. Click Create section in the Sections card header. Confirm the breadcrumb still shows the certificate name and course title as links.
  5. Empty list (optional): ask a developer for a course with no sections, or create a new course under the certificate. Open its section list and confirm the message "No sections found for this course. Sections are dated offerings learners enroll in." with a Create section button under it.
Verify

Walkthrough 1.5 — 5 — Duplicate from inactive or cancelled sections

  1. Open the duplicate URL for the Inactive section (and again for the Cancelled one).
  2. Confirm the duplicate form opens, confirmation is required, and save produces a new Draft section without changing the source. > Worth flagging as feedback: needing a developer for this step is a QA self-service gap, > not a limitation of the feature.
Verify

NEW — UAT-aligned (024 uat-guide)

Role permission check — Enrollment Admin should be blocked:

UserExpected resultNotes
Program Manager (pm_catalog@example.com)[ ] PassPrimary CE tester
Enrollment Admin (enrollment.admin@lsu.edu)[ ] 403 on catalog workspaceNot a defect — by design

Part 1 complete: · Issues? File on DLOW-177


Screenshots
🖼 Paste Ctrl+V, drop images, or Up to 5 images · 2 MB each · attach PNGs from ZIP to Jira

Part 2 — Details & schedule (CCS-08)

Task: DLOW-178 · Needs Part 1 (section exists)

In plain English: Section name, modality, location, public notes, and meeting rows live on one form with explicit save.

Workflow area: §5.2 — Section details & meeting schedule

Walkthrough 2.1 — 1 — Edit identity fields with the schedule on the same page

  1. Log in as: Program Manager (above), then follow How to get to the screen to reach Edit section on Fall 2026 — Cohort Section.
  2. Confirm the page title is Section details & schedule, and you see both a Section details card and a Schedule meetings card on the same page.
  3. Check the breadcrumb above the title: Catalog / Paralegal Studies Certificate / Legal Research & Writing / Section details & schedule — four pieces, not five. Catalog should take you to the chooser tiles, not to a filtered certificates table.
  4. Enter a section name/number (for example PLG-F26-A), a location, and a short public note learners would understand.
  5. You will also see a Section price field pre-filled with 649.00 and the help line Course base price is $649.00. Leave blank or enter the same amount to inherit; enter a different amount to override for this section only. Leave it as it is. It is not part of this story, but the single save covers it. (The field is only required on a course that has no base price of its own — that is not the case for PLG-LRW-201.)
  6. Click Save details & schedule.
  7. Confirm the message Section details and schedule saved. appears, then reload the page and confirm your values are still there.
Verify

Walkthrough 2.2 — 2 — Modality stays locked when the course says so

  1. Go back to the course list (View courses from the certificate row) and open Edit course on PLG-LRW-201.
  2. Find the Section defaults & inheritance card, then the table Inheritance rules (course → section). On the Modality row, clear the checkbox in the Editable at Section Level column → save the course.
  3. Return to Edit section for the cohort section.
  4. Confirm the Modality control is disabled and the helper text under it reads Locked by course inheritance — not editable on this section.
  5. While modality is unlocked, also confirm the opposite half of the rule: modality arrives pre-filled from the course default and you can change it. Nothing automated checks this, so it is worth a look.
  6. When you finish this check, unlock modality on the course again if you need to change modality in later walkthroughs. > If you also uncheck Editable at Section Level for Fee structure, the section > screen will show a second, near-identical line — Locked by course inheritance — uses > the course base price — and the Section price field will be replaced by a read-only > amount. That is expected, not a bug.
Verify

Walkthrough 2.3 — 3 — No “distance learning” in the modality list

  1. On the section edit form (modality unlocked), open the Modality dropdown.
  2. Confirm exactly four options: Asynchronous, Term-Based, In Person, Live Online.
  3. Confirm none of the options say distance learning.
Verify

Walkthrough 2.4 — 4 — Leaving without Save does not keep your edits

  1. On section edit, change the section name/number to something obvious like SHOULD-NOT-KEEP.
  2. Click Back to sections (right-hand end of the Section workspace strip) — do not click Save details & schedule.
  3. Open Edit section again.
  4. Confirm the throwaway name is not saved.
  5. Repeat steps 1–4 using Cancel (beside Save) instead of Back to sections.
Verify

Walkthrough 2.5 — 5 — Shrinking the date window re-checks meetings

  1. Save a meeting dated 2026-10-01 (within the Fall cohort window) with start and end times.
  2. Change the section End date to a day before that meeting (for example 2026-09-15) → Save details & schedule.
  3. Confirm you get the error Meeting date must fall within the section start/end window., and that the end date did not silently shrink after you fix or cancel the bad save.
Verify

Walkthrough 2.6 — 6 — Add a meeting row inline

  1. On Schedule meetings, click Add meeting.
  2. Confirm a new Date / Start / End row appears on the same page, along with Location override (optional).
  3. Fill values inside the section window and save when you are ready. > Cosmetic difference, not a bug: rows that were already on the page show the branded > purple calendar button next to the date box; a row you just added shows your browser's > own date control instead. The site-wide date picker only decorates date fields that exist > when the page loads. Typing the date as YYYY-MM-DD works either way.
Verify

Walkthrough 2.7 — 7 — Remove only sticks after you Save

  1. With at least one meeting saved, check Remove on that row.
  2. Confirm the row is still on screen and the meeting still appears in the Learner-facing summary, then click Save details & schedule.
  3. Reload and confirm the meeting is gone.
  4. Notice the helper text: changes save only when you click Save details & schedule. If the meeting is still there after Save, that is a genuine bug — capture the URL, the section, and a screenshot.
Verify

Walkthrough 2.8 — 8 — Saved meetings come back exactly

  1. Add a meeting for 2026-09-08, 18:00–21:00, with an optional location override (for example Room A).
  2. Save, then reload the edit page.
  3. Confirm date, times, and location override match what you entered.
Verify

Part 2 complete: · Issues? File on DLOW-178


Screenshots
🖼 Paste Ctrl+V, drop images, or Up to 5 images · 2 MB each · attach PNGs from ZIP to Jira

Part 3 — Enrollment, capacity & waitlist (CCS-09)

Task: DLOW-179 · Needs Part 2

In plain English: Separate enrollment screen for public/staff windows, seat limits, waitlist, cohort access, and Moodle shell flag.

Workflow area: §5 — Enrollment windows, capacity, cohort, Moodle preference

Walkthrough 3.1 — 1 — Find the Enrollment screen

  1. Open: https://lsuoce-development.fly.dev/dashboard/catalog/
  2. This page is a chooser, not a list — heading Catalog and two tiles. Click the Certificates tile to reach the certificates list.
  3. On the Paralegal Studies Certificate row, open the menu and choose View courses. On the PLG-LRW-201 row, open and choose View sections.
  4. On Fall 2026 — Cohort Section, open and choose Edit section. The row menu holds only Edit section and Internal preview — there is no Enrollment item on the list any more.
  5. On the section screen, find the Section workspace nav row and click Enrollment. The full nav reads: Preview (internal) · Details & schedule · Enrollment · Prerequisites · Instructor · Publish readiness · Publish, ending in Back to sections.
  6. Confirm the page title is Section enrollment and you see six cards, in this order: Public enrollment window, Staff enrollment window, Capacity & waitlist, Cohort access, Enrollment restrictions, and LMS delivery.
  7. Confirm the right-hand Enrollment summary panel is visible before you save. > Two cards this guide originally did not mention. Enrollment restrictions was moved > here by CCS-10 and belongs to that story's sign-off, not this one. LMS delivery > replaced what this guide used to call "Moodle shell preference" — see Walkthrough 13. > Field names. The date fields are not labelled "Public enrollment start/end". Inside > the Public enrollment window card they read Enrollment opens and Enrollment > closes; inside Staff enrollment window they read Staff enrollment opens and > Staff enrollment closes. The words "start" and "end" show up only in error messages. > Likewise the capacity fields are Minimum enrollment (class size), Maximum > capacity, Waitlist capacity, and Waitlist response window (hours).
Verify

Walkthrough 3.2 — 2 — Set public enrollment dates

  1. On the enrollment page, in Public enrollment window, set Enrollment opens to September 1, 2026 and Enrollment closes to December 1, 2026.
  2. Click Save enrollment settings.
  3. Confirm the success message Section enrollment settings saved. appears.
  4. Reload the page (browser refresh).
  5. Confirm both public dates are still set to the values you entered.
Verify

Walkthrough 3.3 — 3 — Open-ended public enrollment

  1. Set Enrollment opens to September 1, 2026.
  2. Clear Enrollment closes (leave it empty).
  3. Save and reload.
  4. Confirm start is still set and end remains blank.
  5. Glance at Enrollment summary under Public window — the date line should read 2026-09-01 → Open-ended. Closed now is expected if today's date is still before September 1, 2026; after that date it should show Open now with no end date.
Verify

Walkthrough 3.4 — 4 — Staff window independent of public

  1. Set Enrollment opens to October 1, 2026 and Enrollment closes to December 31, 2026.
  2. Set Staff enrollment opens to August 1, 2026 and Staff enrollment closes to November 30, 2026 (staff window starts earlier and may end before public closes). The help text under the field reads "Staff may enroll learners while the public window is closed."
  3. Save and reload.
  4. Confirm all four dates persisted exactly as entered — staff dates are not copied from public dates. > Behind the scenes: when public is closed but staff is open, the system > allows staff enrollment and blocks public enrollment. That rule is proven in > automated tests; you do not switch “actor” in this UI.
Verify

Walkthrough 3.5 — 5 — Capacity, minimum, and waitlist

  1. Set Minimum enrollment (class size) to 8.
  2. Set Maximum capacity to 30.
  3. Set Waitlist capacity to 5.
  4. Set Waitlist response window (hours) to 48.
  5. Save and reload.
  6. Confirm all four values match.
  7. Check Enrollment summary — the Enrollment row should read 0 / 30 (current over capacity), Minimum class size should read 8, and Waitlist should read 5 seats · 48h response. > Maximum capacity, Waitlist capacity, and Waitlist response window are all required. > If you clear one, the save is rejected. Seeded sections arrive with capacity already set > (30 on the cohort section, 100 on the rolling one) and waitlist defaults of 0 and 48.
Verify

Walkthrough 3.6 — 6 — Waitlist disabled when capacity is zero

  1. Set Waitlist capacity to 0.
  2. Save.
  3. Confirm the Enrollment summary Waitlist row reads exactly Disabled.
  4. Optionally set waitlist back to a positive number for later walkthroughs. If you do, keep the response window at 1 or more — a positive waitlist capacity with a response window under 1 hour is rejected with "Response window must be at least 1 hour when waitlist capacity is set."
Verify

Walkthrough 3.7 — 7 — Reject bad date order

  1. Set Enrollment opens to October 1, 2026.
  2. Set Enrollment closes to September 1, 2026 (before it opens).
  3. Click Save enrollment settings.
  4. Confirm the error reads Public enrollment end must be on or after the start date.
  5. Reload and confirm the invalid date was not saved.
  6. Repeat with the staff fields. The staff message is Staff enrollment end must be on or after the start date.
Verify

Walkthrough 3.8 — 8 — Below minimum class size in summary

  1. Set Minimum enrollment (class size) to a number higher than current enrollment. The Enrollment row of the summary shows the current count, so pick anything above it.
  2. Save.
  3. Check the Enrollment summary Minimum class size row for a Below minimum badge.
  4. Reset minimum to a realistic value when done. > A caveat on this one. Minimum enrollment cannot exceed maximum capacity, so on a > seeded section your minimum has to stay at or below 30. Since seeded sections have a > current enrollment of 0, any minimum of 1 or more should produce the badge. Note also > that the whole Minimum class size row is hidden when minimum is blank or 0 — if you > see no row at all, the minimum did not save rather than the badge being broken. There is > no staff-facing way to change the enrollment count, so the count side of this rule is > covered by the automated service test rather than by clicking.
Verify

Part 3 complete: · Issues? File on DLOW-179


Screenshots
🖼 Paste Ctrl+V, drop images, or Up to 5 images · 2 MB each · attach PNGs from ZIP to Jira

Part 4 — Enrollment eligibility gating (CCS-09a)

Task: DLOW-188 · Needs Part 3

In plain English: Structured prerequisite rules (hard vs soft) and term/cohort membership gates; summary reflects effective rules.

Workflow area: §5 — Prerequisites & term/cohort gates

Walkthrough 4.1 — 1 — Add a blocking prerequisite on course edit

  1. Open: https://lsuoce-development.fly.dev/dashboard/catalog/
  2. Catalog opens as a chooser: the heading Catalog, the line Manage certificates, courses, and sections., and two tiles. It is not a table. Click the Certificates tile.
  3. On the certificates list, open the menu on the Paralegal Studies Certificate row and choose View courses.
  4. On that course list, open the menu on Legal Research & Writing and choose Edit course.
  5. Find the Prerequisite rules card. Inside it a line reads Course prerequisite rules. It sits above the Editorial content card — the free-text Prerequisites box down in Editorial content is catalog display copy and is not what you are editing here.
  6. Click Add prerequisite rule. The table starts empty, so nothing happens until you do this.
  7. In the new row, choose a Required Course (e.g. OCE100).
  8. Set Enforcement to Block enrollment.
  9. Click Save as draft. (There is no "Save course" button. The footer reads Back to courses, Save as draft, Mark ready for section creation, and sometimes Continue to section creation.)
  10. Confirm a success message appears.
  11. Reload the page.
  12. Confirm the same required course and Block enrollment are still selected.
Verify

Walkthrough 4.2 — 2 — Add a warning prerequisite alongside the blocking one

  1. On the same course edit page, click Add prerequisite rule again. No spare blank row is ever provided — one click per rule.
  2. Pick a different required course for the second row.
  3. Set enforcement to Warn (intended order).
  4. Click Save as draft, then reload.
  5. Confirm both rows remain — one Block enrollment, one Warn (intended order). > The two enforcement choices are exactly Block enrollment and Warn (intended > order). If you were expecting "Hard" and "Soft", those are the internal names used in > the spec, not the words on screen.
Verify

Walkthrough 4.3 — 3 — Open section prerequisites and see inherited rules ⚠️ NO AUTOMATED PROOF

  1. From the course list, open the menu on Legal Research & Writing and choose View sections.
  2. On Fall 2026 — Cohort Section, open the menu and choose Edit section. (That menu only offers Edit section and Internal preview — there is no Prerequisites entry in it.)
  3. You are now inside the section. Below the page title there is a Section workspace nav reading Preview (internal) · Details & schedule · Enrollment · Prerequisites · Instructor · Publish readiness · Publish. Click Prerequisites. This nav is the only way onto the screen, and it is present on every section page.
  4. Confirm the page title is Section prerequisites, and the trail above it reads Catalog / certificate name / course title / Section prerequisites.
  5. Confirm an Inherited from course card lists the course-level rules you saved in Walkthroughs 1–2. Each entry shows a small Inherited from course tag, the required course's code, and its enforcement (Block enrollment or Warn (intended order)). If you have not saved any course-level rules, this whole card is hidden — that is expected, not a bug.
  6. Below it, find the Prerequisite rules card, headed Section prerequisite rules. Click Add prerequisite rule and add a rule with a required course not already listed.
  7. Click Save prerequisite settings.
  8. Reload. Confirm your section rule persisted and the inherited list is unchanged.
  9. Now test overriding. Add a second section rule naming the same required course as one of the inherited rules, but with the other enforcement. Save. The section rule takes precedence over the course rule for that required course — check that the Enrollment summary counts on the right reflect the override rather than counting both rules.
  10. Confirm the override on the Preview screen. Click Preview (internal) in the Section workspace nav. Under the heading Prerequisites & eligibility you will find two rows: - Editorial prerequisites (catalog display) — the free-text box from the course's Editorial content card, marked not evaluated at enrollment. - Effective structured rules — one line per effective rule, formatted [CODE] Course title — Block enrollment (Inherited from course) or … (Section rule), with None configured when there are none. This row is the clearest read on override behaviour anywhere in the product: the course rule you overrode in step 9 should have disappeared, replaced by a single line tagged (Section rule) for that required course. The Enrollment group on the same page repeats Prerequisite rules and Term membership. Use this screen as your cross-check whenever the section prerequisites form and the summary counts seem to disagree.
Verify

Walkthrough 4.4 — 4 — Require learner term/cohort membership ⬜ NO AUTOMATED PROOF

  1. On the same Section prerequisites page, find the Term / cohort membership card. It is the first card on the page, above Inherited from course.
  2. Tick Require learner term/cohort membership.
  3. Set Section cohort to Fall 2026 Paralegal Cohort (or the cohort tied to this section).
  4. Click Save prerequisite settings, then reload.
  5. Confirm the checkbox stays ticked and the cohort selection persists. > Note: Whether a specific learner passes this gate is evaluated in the enrollment > service, and that is covered by automated tests. What is not covered is the step > you just did — the checkbox and cohort select surviving a save and reload. Nothing > automated exercises this form. Please confirm it deliberately. > > There is no learner assignment UI in this release.
Verify

Walkthrough 4.5 — 5 — Validation blocks bad prerequisite saves

  1. Return to the course edit screen for Legal Research & Writing.
  2. Click Add prerequisite rule, then leave Required Course blank on the new row. Change Enforcement or Order so the row registers as touched — a completely untouched blank row is ignored rather than rejected, which is intentional.
  3. Click Save as draft.
  4. Confirm the message "Select a required course." appears under the empty required-course field, and that the invalid rule was not saved (reload to double-check).
Verify

Walkthrough 4.6 — 6 — Enrollment summary reflects prerequisites and term gate ⬜ NO AUTOMATED PROOF

  1. Open Fall 2026 — Cohort Section (section list Edit section), then click Enrollment in the Section workspace nav.
  2. Locate the Enrollment summary panel on the right. It also appears on the Prerequisites page, so you can watch these two rows change as you edit.
  3. Confirm Prerequisite rules shows a count such as 1 hard · 1 soft (matching what you configured) or None configured if you cleared rules.
  4. Confirm Term membership shows Required — Fall 2026 Paralegal Cohort when Walkthrough 4 was completed, or Not required on the self-paced rolling section if term membership was left off.
  5. Click Prerequisites in the same nav and confirm it returns you to the section prerequisites screen with the certificate and course trail intact.
Verify

Walkthrough 4.7 — 7 — Compare rolling vs cohort section ⬜

  1. Open Self-Paced — Open Enrollment (section list Edit section), then Prerequisites in the Section workspace nav.
  2. Confirm Require learner term/cohort membership is unticked and Section cohort is empty (the seed creates this section with no cohort), unless someone changed it earlier.
  3. Click Enrollment and confirm Term membership reads Not required.
  4. Compare with Fall 2026 — Cohort Section where you enabled term membership in Walkthrough 4. > This walkthrough supports understanding CR-15 behavior; automated tests prove the > service contract at the service layer only — no automated check was found for these > two summary rows.
Verify

Part 4 complete: · Issues? File on DLOW-188


Screenshots
🖼 Paste Ctrl+V, drop images, or Up to 5 images · 2 MB each · attach PNGs from ZIP to Jira

Part 5 — Instructor & Paralegal restrictions (CCS-10)

Task: DLOW-180 · Needs Part 1

In plain English: Assign instructor inline; Paralegal approved-application restriction defaults on Enrollment tab.

Workflow area: §5 — Instructor tab + Enrollment restrictions

Walkthrough 5.1 — 1 — Assign an existing instructor

  1. Open Instructor for a PLG-LRW-201 offering.
  2. Open the Instructor dropdown — active instructors should appear.
  3. Choose one → click Save instructor.
  4. Reload — the same instructor should still be selected.
Verify

Walkthrough 5.2 — 2 — Create an instructor without leaving the page

  1. On Instructor, click Create new instructor.
  2. Fill First name, Last name, Email, and optionally Credentials.
  3. Click Create and select — the modal closes and the new name appears in the dropdown.
  4. Click Save instructor.
  5. Open another section — the new instructor should appear in the list for reuse.
Verify

Walkthrough 5.3 — 3 — Save without an instructor

  1. Open Instructor for a section with no instructor yet.
  2. Leave Instructor at “— Select instructor —”.
  3. Click Save instructor — save should succeed (instructor is optional at this stage).
Verify

Walkthrough 5.4 — 4 — Paralegal restriction defaults

  1. Open Enrollment for a Paralegal section (PLG-LRW-201 from seed).
  2. Scroll to Enrollment restrictions — confirm Approved application required is checked the first time you open the form.
  3. Click Save enrollment settings without changing restrictions → reload → it should stay checked.
  4. Uncheck Approved application requiredSave enrollment settings → reload → it should stay unchecked (staff override).
Verify

Walkthrough 5.5 — 5 — Non-Paralegal section (no default restriction)

  1. Open Enrollment for a non-Paralegal section (never saved restrictions before). Ask a developer which section to use: "non-Paralegal" here means the course is outside the Paralegal costing unit and is not attached to any certificate that requires an application. A course in another unit that happens to be attached to Paralegal Studies will still default the restriction on, correctly.
  2. Confirm Approved application required is unchecked by default.
  3. Optionally enable it manually → save → reload → your choice should persist.
Verify

Walkthrough 5.6 — 6 — Multiple restriction types

  1. On Enrollment, under Enrollment restrictions, you should see at least: - Approved application required - Cohort membership required
  2. Check both → Save enrollment settings → reload → selections should match what you saved.
Verify

Walkthrough 5.7 — 7 — Soft-deleted instructor and historical name

  1. Assign an instructor (Instructor tab, Walkthrough 1 or 2).
  2. Log in as superuser → Django admin → Instructors → open that instructor's row → tick Is deletedSave. There is no bulk soft-delete action, and the hard Delete button is intentionally unavailable for this model.
  3. Log back in as Program Manager → open the same Instructor page.
  4. Confirm the instructor no longer appears in the dropdown, which falls back to — Select instructor —.
  5. Open Preview (internal) for that section and confirm the Instructor group still shows the retired instructor's name. That snapshot is the behavior this walkthrough exists to check. Known gap — expect this, do not file it. The Instructor screen itself does not print a "Retained instructor name" line right after a soft-delete, even though the snapshot is stored. The screen only shows that line once the section's instructor assignment has been cleared and saved, so the snapshot is currently visible on Preview, not on Instructor. Earlier versions of this guide told you to expect it on the Instructor page; that was wrong.
Verify

Walkthrough 5.8 — 8 — Access control (optional)

  1. Log in as Enrollment Admin (enrollment.admin@lsu.edu / password12!).
  2. Try Instructor and Enrollment URLs — you should be denied on both (Program Manager only).
Verify

Part 5 complete: · Issues? File on DLOW-180


Screenshots
🖼 Paste Ctrl+V, drop images, or Up to 5 images · 2 MB each · attach PNGs from ZIP to Jira

Part 6 — Visibility, pricing/refund & publish readiness (CCS-11)

Task: DLOW-181 · Needs Parts 1–3 (continues from DLOW-194 inheritance)

In plain English: Course refund tiers, section pricing/refund review, visibility, lifecycle pick, and learner-behavior preview before publish.

Workflow area: §5.5 + §4.3/§4.4 at section level — publish readiness

Walkthrough 6.1 — 1 — Configure course refund tiers

  1. Open Edit course for PLG-LRW-201 (or create a new Paralegal course).
  2. Scroll to the Section defaults & inheritance card and find Meeting-indexed refund schedule.
  3. Click Add refund tier and fill the row. For the standard Paralegal example use Class # 1, 2, 4, 6 with Refund % 100, 90, 75, 50 and $0 service charges.
  4. Confirm the Inheritance rules (course → section) table below still has a Refund policy row with Inherit Into New Sections and Editable at Section Level checkboxes.
  5. Click Save as draft and reload — tiers should stay in order. - There is no "Save course" button. The footer offers Save as draft and Mark ready for section creation. Use Save as draft unless you actually intend to mark the course ready.
  6. Read the Course review summary panel on the right of the same page. Under Refund schedule you should see plain-language tier lines and then No refund on or after Class 6 — inferred, with no separate 0% row.
Verify

Walkthrough 6.2 — 2 — Validation on bad refund data

  1. On Edit course, add two tiers with the same Class # and click Save as draft — the save should fail with an error naming the duplicate.
  2. Try a Refund % above 100, or a negative service charge, and save — validation should block it. The percent case reads "between 0 and 100."
Verify

Walkthrough 6.3 — 3 — Duplicate course copies refund schedule

  1. From a course that has refund tiers, open the courses list, open the row menu, and choose Duplicate course.
  2. Give the copy a unique Code and click Save as draft.
  3. Open the new course's Edit page and confirm the same refund tier rows came across.
Verify

Walkthrough 6.4 — 4 — Review pricing on publish readiness

  1. Open a PLG-LRW-201 section's Publish readiness (path above).
  2. In the right column find the card titled Pricing summary: - A Section price line with the amount. - One line per course fee component: label, amount, and GL code in parentheses. - Each line carries a source badge. Inherited lines read inherited. - If the section has its own price different from the course base price, the price line reads section_override.
  3. If the course locked its fee structure (Fee structure editable = no), the fee lines read locked. Note there is no explanatory sentence on this card telling you overrides are disallowed — the badge is the only signal, which is worth commenting on.
  4. When the fee components add up to the course base price you will also see "Fee components reconcile to course base price."
Verify

Walkthrough 6.5 — 5 — Review inherited refund schedule

  1. On Publish readiness, read the Refund schedule card in the right column.
  2. Tiers should read as Class N: <plain language> — percentage, service charge, and which class meeting they apply before — each with a source badge.
  3. If the section has meeting dates on Details & schedule, tier labels include the date, e.g. Class 1 — Sep 08, 2026. The index maps to the Nth meeting in date order.
  4. After the last tier below 100%, confirm an inferred No refund on or after Class N line.
  5. With no tiers at all the card reads Refund schedule not configured.
Verify

Walkthrough 6.6 — 6 — Override a section refund tier

  1. On a course where Refund policy is inherited and editable, open a section's Publish readiness.
  2. In the left column find the Refund schedule card (sub-heading Meeting-indexed refund tiers). Its helper text should say inherited tiers appear in the summary panel and rows below override specific class meetings.
  3. Click Add refund tier, enter the Class # of an existing inherited tier, and give it a different percentage or service charge.
  4. Click Save publish readiness and reload.
  5. In the right-column summary the changed tier should now read section_override while the others still read inherited.
Verify

Walkthrough 6.7 — 7 — Section-specific refund policy

  1. On a course where Refund policy inherit = no, open Publish readiness.
  2. The left-column editor helper text should read "Section-specific refund policy — tiers are independent of the course schedule."
  3. Add tiers there and save.
  4. The summary lines should carry the badge section_specific. If the course has Refund policy editable = no, the whole left-column editor card is gone — you get the read-only summary only. That is the intended read-only state.
Verify

Walkthrough 6.8 — 8 — Set visibility and lifecycle

  1. On Publish readiness, look at the Visibility & lifecycle card at the top of the left column.
  2. Check Visible to learners and leave Change lifecycle state on — No change —.
  3. Click Save publish readiness and reload — visibility should persist while the status stays Draft. The card shows Current status: beneath the dropdown.
  4. Now open Change lifecycle state on a Draft section. You should see only — No change —, Ready, and Cancelled. Active is not offered from Draft — you reach Active from Ready, one step at a time.
Verify

Part 6 complete: · Issues? File on DLOW-181


Screenshots
🖼 Paste Ctrl+V, drop images, or Up to 5 images · 2 MB each · attach PNGs from ZIP to Jira

Part 7 — Publish, Moodle trigger & exceptions (CCS-12)

Task: DLOW-182 · Needs Part 6 (no publish blockers)

In plain English: Publish validates readiness, triggers Moodle stub (or external roster), failures land in integration exceptions queue.

Workflow area: §5 publish + §3 integration exceptions queue

Walkthrough 7.1 — 1 — Review publish summary before confirming

  1. Open a section that passes Publish readiness (no red blockers).
  2. Click Publish in the row of section steps.
  3. Confirm you see a Publish summary card with Section, Enrollment window (labelled Public:, with a Staff: line only if staff enrollment dates are set), and LMS mode. Below it, a Confirm publish card with a Publish to lifecycle state dropdown and an I confirm this section is ready to publish checkbox.
  4. Check what the dropdown actually offers. From a Draft section it offers Ready only — Active is not a legal move from Draft. From a Ready section you get Active plus Ready (re-run integrations); from an Active section you get only Active (re-run integrations).
  5. Do not check I confirm yet — verify the summary matches what you expect.
Verify

Walkthrough 7.2 — 2 — Successful Moodle publish (stub)

  1. On Enrollment, set Delivery path to LSU Moodle shell under the LMS delivery card, then click Save enrollment settings.
  2. On Details & schedule, set a unique Section name / number (e.g. PL-FALL26-A) and save. It must be unique across all sections — the bind fails if another section already holds that Moodle course ID.
  3. Open Publish readiness and clear blockers (see below).
  4. Open Publish → check I confirm this section is ready to publish → click Publish section.
  5. On the Publish result page, inside the Publish confirmation card, confirm: - It reads "Section is now Ready" (or your chosen state). There is no publish timestamp on this page. - Moodle course ID bound: followed by your section number in monospace. - Copy mentions Moodle shell sync is pending until live integration is enabled (stub — not live in Moodle yet). ### Clearing publish blockers (common on seed data) Section price — Publish readiness shows the effective price in Pricing summary (inherited from the course when the section has no override). You do not re-enter it here. If you see Section price is required, the course has no base price and the section has no override — set Base price (total) on Edit course, or set Section price when creating a new section (CCS-07). Paralegal refund schedule required — Paralegal (PL) sections need refund tiers before publish:
  6. Preferred: from the course list, open the ⋯ menu on PLG-LRW-201Edit course → scroll to Meeting-indexed refund scheduleAdd refund tier (e.g. Class 1 = 100%) → save course.
  7. Return to the section → Publish readiness → if Refund schedule is editable, click Add refund tier to add section overrides (no blank row appears until you add one).
  8. Re-open Publish readiness — the Publish blockers panel should show no red error items. Using the override instead. On the same page, filling the Manual override note and ticking Acknowledge documented exceptions clears blockers so promotion is allowed. Read the checkbox label carefully — it says "bypasses warning-level blockers only", but the code does more than that: a non-empty override note plus the acknowledgement also suppresses the error-level "Paralegal sections require a configured refund schedule" blocker outright (apps/dashboard/services/section_publish_readiness_service.py, lines 350–364), while the acknowledgement alone strips every warning (line 416–417). So if you acknowledge with a note and the Paralegal refund blocker disappears, that is current intended behavior, not a bug — but flag the mismatch between the label and the effect. Genuine error-level blockers such as Section price is required are not bypassable.
Verify

Walkthrough 7.3 — 3 — Publish blocked when not ready

  1. Open Publish for that section — you should see a Publish blockers card listing the issues (e.g. section price required), each tagged error or warning.
  2. Check I confirm…, leave the lifecycle dropdown on Ready (the only option from Draft), and click Publish section.
  3. Confirm you stay on the publish page with a red error summary at the top and blocker text — not the Publish result screen.
  4. Confirm the section lifecycle did not advance (still Draft).
Verify

Walkthrough 7.4 — 4 — External LMS roster export

  1. On Enrollment, select External LMS (roster export) as the Delivery path under the LMS delivery card and click Save enrollment settings.
  2. Confirm the Enrollment summary sidebar LMS delivery row reads External LMS (roster export), and that a new Roster export row appears below it with a Download roster CSV button.
  3. Complete Publish readiness, open Publish, and confirm LMS mode shows External LMS (roster export) (not “No LMS integration”).
  4. Check confirm and click Publish section (Active sections: choose Active (re-run integrations)).
  5. On Publish result, confirm: - External LMS roster export ready with a learner row count (no Moodle course ID line). - Download roster CSV — file downloads with headers (and rows if enrollments exist).
  6. Return to Enrollment — use Download roster CSV again without re-publishing. This only works while the section is still on the External LMS (roster export) path; if you switch the delivery path back to Moodle or None, the download link 404s instead of serving the last export.
Verify

Walkthrough 7.5 — 5 — No LMS integration

  1. Set Delivery path to No LMS integration on Enrollment and save.
  2. Publish the section.
  3. Confirm the Publish confirmation card reads "No LMS integration was configured for this section." with a link back to Enrollment — no Moodle bind line, no roster download button.
Verify

Walkthrough 7.6 — 6 — LMS mode cannot be ambiguous

  1. On Enrollment, try switching the Delivery path between LSU Moodle shell, External LMS (roster export), and No LMS integration.
  2. Click Save enrollment settings after each choice and reload — exactly one radio should be selected, and the Enrollment summary LMS delivery row should agree.
  3. You should never be able to save both Moodle and External LMS enabled together. (They are a single radio group, so the UI should make this impossible rather than reject it with an error.)
Verify

Walkthrough 7.7 — 7 — Integration failure and exceptions queue

  1. Ask a dev to set up a course ID collision scenario (two sections competing for the same Moodle ID) or publish until a Moodle failure occurs naturally.
  2. After publish, confirm Publish result shows which action failed — not a banner across every catalog page.
  3. Click View integration exceptions (or open Integration exceptions).
  4. Confirm the failure appears under the Pending (N) tab with columns When · Section · Error, and a Retry button on the row.
Verify

Walkthrough 7.8 — 8 — Retry one failure

  1. From the pending list, click Retry on a single row (after the underlying issue is fixed — e.g. unique section name / number).
  2. On success, confirm the item leaves Pending and appears under the History tab, which lists Resolved · Section · Event · Integration. The original error text is not carried into History.
  3. If the retry fails again, the item stays under Pending with an updated error message rather than moving to History.
  4. If other pending items existed, confirm they were not retried automatically.
Verify

Part 7 complete: · Issues? File on DLOW-182


Screenshots
🖼 Paste Ctrl+V, drop images, or Up to 5 images · 2 MB each · attach PNGs from ZIP to Jira

When something fails

  1. Note what you did, what you expected, and what happened instead (screenshot helps).
  2. File a bug on the matching build ticket (DLOW-177, DLOW-178, DLOW-179, DLOW-188, DLOW-180, DLOW-181, DLOW-182).
  3. If it might be a policy question rather than a broken button, say so — link the Admin Spec or uat-guide and flag for triage.

Crosswalk — NEW items → source

WalkthroughSource
DLOW-194 prerequisiteDLOW-194
Overlap note (lifecycle, inheritance)Covered in DLOW-194; re-checked in section context here
Part 1 RBACEnrollment Admin 403 on catalog — not a defect
1.5024 uat-guide
2.5–2.8025 uat-guide
3.5–3.8026 uat-guide
4.5–4.7027 uat-guide
5.5–5.8028 uat-guide
6.5–6.8029 uat-guide
7.5–7.8030 uat-guide

Sign-off

FieldValue
Tester name
Date
Environmentlsuoce-development.fly.dev
DLOW-194 prerequisite complete?[ ] Yes
All 7 parts passed?[ ] Yes [ ] No — see linked bugs

Final review: [ ] Ready for dev ingestion / bug triage

Screenshot enlarged