Release 0.68.5#3368
Open
odlbot wants to merge 8 commits into
Open
Conversation
… First Part) (#3332) * refactor: rename the articles app and update its links all over the places like etl --------- Co-authored-by: Ahtesham Quraish <ahtesham.quraish@192.168.1.47>
* Fix eslint config to ignore node_modules * Update frontends/.eslintrc.js Co-authored-by: Chris Chudzicki <christopher.chudzicki@gmail.com> * Fmt --------- Co-authored-by: Chris Chudzicki <christopher.chudzicki@gmail.com>
* plan: record settled Phase 4 pre-decisions Folds the Phase 4 brainstorming outcomes into the plan as a SETTLED block: - (A) build the real entry constructor + adapter; rename DashboardCourseSlot → DashboardCourseEntry (code + remainder of plan doc) as step 0 - composer emits the RequirementSectionItem discriminated union + shared aux (enrollmentsByCourseId / pre-derived ancestorProgramEnrollment) - buildProgramScenario = thin entities-in mock-wirer (2a); tests own scenario - language picker: hook-owned, derive-during-render, effective key, own test - shared structure-only parseProgramRequirementSections in @/common/mitxonline; buildRequirementSections owns dashboard display policy; product parseReqTree migration is the next stacked PR; re-ask at Phase 4 exit - behavior-preservation scope: stable render is the contract, first paint negotiable except loading states Full design record (rationale + rejected alternatives) in feature_work/TODOS_AND_IDEAS/phase4-design.md (local). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * refactor: rename DashboardCourseSlot → DashboardCourseEntry (Phase 4 step 0) Pure rename, zero behavior change, zero production callers today: - DashboardCourseSlot → DashboardCourseEntry - resolveSlotForLanguage → resolveCourseEntryForLanguage - adaptCourseSlotToLegacyDashboardCardProps → adaptCourseEntryToLegacyDashboardCardProps - dashboardRefactorPlan.md slot vocabulary swept to "entry" Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(mitxonline): add structure-only parseProgramRequirementSections (Phase 4 Task B) Shared req-tree → ordered operator sections parse (ids + operator metadata + rawTitle only; no display copy/completion/entity resolution). Composed by the Phase 4 dashboard helpers (Task C). Product parseReqTree migration is a later PR. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(dashboard): add buildCourseEntry + buildRequirementSections (Phase 4 Task C) Pure model helpers composing the shared parseProgramRequirementSections into the RequirementSectionItem discriminated union; behavior-preserving extraction of the inline ProgramEnrollmentDisplay logic. getRequirementSectionTitle moved into the model. Flat-req_tree assumption documented. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(dashboard): add useDashboardLanguagePicker hook (Phase 4 Task D) Derive-during-render language-picker state (no reconcile effect). Stable contract preserved (effective key ∈ options or "" ; default = options[0]; user pick persists while valid, falls back when it disappears). Reused by Phase 5. setSelectedLanguageKey records the raw user choice. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(dashboard): add useProgramDashboardData composer + buildProgramScenario (Phase 4 Task E) Thin composer: replicates the program dashboard's 6-query orchestration exactly and composes the pure helpers (grouping, getDistinctDashboardLanguageOptions, useDashboardLanguagePicker, buildRequirementSections) into the durable returned contract incl. shared aux (enrollmentsByCourseId, ancestorProgramEnrollment). renderHook suite asserts the returned contract (never through the adapter); buildProgramScenario is a thin entities-in mock-wirer (tests own scenario shape). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * refactor(dashboard): ProgramEnrollmentDisplay consumes useProgramDashboardData (Phase 4 Task F) Component is now purely presentational: consumes the composer hook and routes the course arm through adaptCourseEntryToLegacyDashboardCardProps. All inline query orchestration / language state / req-tree shaping removed. Behavior byte-identical — ProgramEnrollmentDisplay.test.tsx unchanged and green (the regression oracle). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore(dashboard): Phase 4 cleanup batch (behavior-neutral) Branch-review follow-ups, no production behavior change: 1. test-utils buildProgramScenario: derive requiredProgramIds via getIdsFromReqTree(program.req_tree) + Set dedup so it truly mirrors the hook's useMemo (the drift-protection comment was inaccurate; closes a silent mock-key-drift trap). 2. useProgramDashboardData: reword stale '6 queries (replicated exactly from oracle)' comment (the hook is canonical post-Task-F). 3. useProgramDashboardData: drop dead re-export of V3UserProgramEnrollment + its now-unused import. 4. dashboardViewModel: make getRequirementSectionTitle module-private (only exercised internally via buildRequirementSections; not imported directly by tests). 5. useProgramDashboardData.test: add a composer renderHook scenario exercising the program-enrollment arm (closes a wiring-layer gap). 6. parseProgramRequirementSections: doc the recursion ≡ direct-children parity under the flat-req_tree invariant. Verified: yarn test DashboardPage/ (458 pass), mitxonline.test.ts (34 pass), frontends typecheck — all green. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(test): document layer-3 scope in oracle headers Add a file-header comment to HomeEnrollmentsDisplay.test.tsx and ProgramEnrollmentDisplay.test.tsx stating what belongs in these component (layer-3) suites — seam/smoke + genuine component concerns — and that exhaustive case coverage belongs in the pure model / hook tests. Anti-bloat guardrail for future contributors. Comment-only: +33/-0, zero assertion/code changes. This is the single change to the otherwise-frozen Phase-4 behavior oracle (ProgramEnrollmentDisplay.test.tsx) — the oracle's diff vs origin/main is now exactly this one comment-only commit, no behavior change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix typo --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat: add PostHog tracking for onboarding CTA interactions * feedback
) * extract individual contract hooks to useContractDashboardData, sorting / filtering logic to dashboardViewModel and implement usage in ContractContent * add tests for contract dashboard helpers * add explicit tests for checking to make sure the contract dashboard only renders programs with contract scoped courses * improve contract program sorting logic * remove redundant contract id filtering * show "no programs" message if both programs and collections are empty, not just programs * use useDashboardLanguagePicker * rename slot -> entry * null check on program.page * remove unnecessary factory overrides * swap buildContractCourseEntries for buildCourseEntry and add a missing test for buildCourseEntry * add a docstring for getRenderableContractCollections --------- Co-authored-by: Chris Chudzicki <christopher.chudzicki@gmail.com>
OpenAPI Changes30 changes: 0 error, 0 warning, 30 info Unexpected changes? Ensure your branch is up-to-date with |
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.
Carey P Gumaer
Matt Bertrand
Rachel Lougee
Chris Chudzicki
Nathan Levesque
Ahtesham Quraish