6.6 KiB
6.6 KiB
Task: Implement Learning project catalog
Identity
- Task ID: 20260819-learning-project-catalog-impl-4e9c71a2
- Mode: Feature
- Branch: codex/20260819-learning-project-catalog-impl-4e9c71a2-learning-project-catalog-impl
- Worktree: D:\Datas\OthersProjects\makelore-learning-project-catalog-impl-4e9c71a2
- Base commit:
2cb8a7aef4 - Owner: codex
- Status: Ready for integration
Scope
- Replace AI Learning's course catalog/generation/player product with a curated project catalog, project README detail, controlled README media, and verified user-selected ZIP download.
- Preserve the existing login and
module_access.learningentry policy while replacing the Learning Renderer/Main contract without a legacy compatibility path. - Remove obsolete course UI, DTOs, IPC, Main services, OpenMAIC player packaging hooks, and focused tests.
- Update the product README and add the Works Square operations/API contract because that backend source is not present in this repository.
Intent And Constraints
- Renderer access remains behind
src/lib/host-api.ts; Works credentials, arbitrary upstream URLs, object-storage credentials, and local filesystem paths stay Main-owned. - README images must render only through HTTPS or fixed server-controlled project-media paths; server-controlled media is fetched through a bounded Main proxy and projected as a validated data URL.
- Project downloads use a native save dialog, stream to a temporary file, enforce declared byte size, SHA-256, ZIP signature, redirect/origin, and 512 MiB limits, then rename atomically.
- The new client never reads or migrates previously downloaded course data. It does not delete that historical user data automatically.
- Keep the Makelore light visual system and Chinese-only product copy. Do not restore Works gallery, publishing, or client-side upload workbench behavior.
- Operations backend implementation and deployment are external to this repository; do not claim them complete.
Plan
- Replace the shared Learning contract and Main Host API routes with project list/detail/media/download endpoints.
- Rebuild the Learning Renderer as a project card grid plus Markdown detail page and simplify the Learning sidebar.
- Delete old generation/player/local-library/runtime/IPC/package-artifact code and update app routing/layout.
- Replace obsolete focused tests, update README and publish a precise Works Square admin/API contract.
- Run focused tests, typecheck, lint, production build, then the task documentation gate.
Outcome
- Replaced the Learning course/generation/player surface with an authenticated, permission-gated project catalog and
/learning/project/:projectIdREADME detail route. - Added strict shared DTOs plus Main-owned Host API projection for project list, detail, bounded media proxy, and native ZIP download. Downloads are streamed to a temporary file and checked for account ownership, origin/redirect policy, size, ZIP signature, and SHA-256 before atomic rename.
- Added Markdown rendering with raw HTML disabled. README images are restricted to server-controlled project media paths; the external server contract requires operations to mirror remote HTTPS images at publish time.
- Removed the obsolete course library, generation, speech, runtime bridge, player server, package consumer, Learning IPC/preload channels, player artifact scripts, packaging resources, CI artifact steps, routes, and tests. Historical downloaded course data is neither read nor automatically deleted.
- Updated the product README and added
docs/learning-project-catalog-server-contract.mdfor the external Works Square operations menu, upload fields, publishing validation, image mirroring, and API contract. That external backend/admin implementation is intentionally not claimed as complete in this repository.
Verification
pnpm exec vitest run tests/unit/learning-client.test.ts tests/unit/learning-route.test.ts tests/unit/learning-project-download.test.ts tests/unit/learning-page.test.tsx tests/unit/learning-sidebar.test.tsx tests/unit/main-layout-module-gate.test.tsx tests/unit/app-module-provider-gate.test.tsx— passed, 7 files / 47 tests after the final path-hardening change.pnpm run typecheck— passed.pnpm test— passed, 175 files / 2057 tests.pnpm run lint:check— passed with 0 errors and 6 pre-existing warnings outside this change.pnpm run build:vite— passed after the final change; existing bundle-size and mixed static/dynamic import warnings remain.pnpm run test:e2e -- tests/e2e/main-navigation.spec.ts— passed, 3 tests.git diff --check— passed; Git only reported repository line-ending conversion warnings.
Follow-ups
- Implement and deploy the operations admin/API contract in the external Works Square backend, then smoke-test list, README media, and ZIP download with a real account and published project.
- Decide separately whether a future maintenance release should offer an explicit user-controlled cleanup of historical downloaded course data; this task intentionally preserves it for recoverability.
Promotion Candidates
- Target:
.project-docs/20-architecture/system-overview.mdand.project-docs/20-architecture/data-flow.md. Proposal: replace the Learning course/player architecture with the project catalog, bounded media proxy, and verified native download boundary. Evidence: implementation and focused/full verification above. Future impact: future Learning work must use the Host API and must not restore Renderer-held Works credentials or arbitrary download URLs. Semantic conflict: existing canonical Learning architecture still describes the removed player path. Human confirmation required: yes, during integration. - Target:
.project-docs/40-domain/business-rules.mdand.project-docs/00-brief/success-criteria.md. Proposal: record Learning as a curated project catalog whose README images are mirrored by the server and whose downloads are user-selected ZIP files. Evidence:README.md,docs/learning-project-catalog-server-contract.md, and the new tests. Future impact: operations/backend and client changes share one publish/download contract. Semantic conflict: existing course-oriented rules are superseded. Human confirmation required: yes, during integration. - Target:
.project-docs/80-commitments/commitments.md. Proposal: record the external Works Square backend/admin implementation and real-account smoke test as an open integration commitment. Evidence: backend source is absent from this repository. Future impact: prevents treating the client-only delivery as an end-to-end production rollout. Semantic conflict: none known. Human confirmation required: yes, during integration.