docs(integration): promote Learning project catalog

This commit is contained in:
2026-08-20 00:17:42 +08:00
parent d967b0f6bf
commit a5fc8bf596
14 changed files with 114 additions and 115 deletions

View File

@@ -4,6 +4,16 @@ This file is the integrated default-branch snapshot. Feature tasks record progre
## Integrated Through
- Learning project-catalog source commit `38db158` from feature task
`20260819-learning-project-catalog-impl-4e9c71a2` was merged as `d967b0f` by integration task
`20260820-integrate-learning-catalog-a73e91c4`. Learning keeps its login and
`module_access.learning` gate but now contains only a server-driven project list,
safe README detail, controlled mirrored raster media, and a Main-owned verified
native ZIP save path. Course generation, progress, local library, OpenMAIC player,
Agent/ASR/classroom runtime, Learning IPC and player-artifact packaging were removed
without a compatibility read path. Historical course data is left untouched. The
matching Works Square operations/admin/API implementation and real-account package
smoke remain pending.
- Square-auth lifecycle source commit `dc776ff` from feature task
`20260819-square-auth-proxy-client-8c4f2a` was merged as `f52c2c8` and promoted
from verified candidate `e7ec12d` to local `main` by integration task
@@ -39,7 +49,7 @@ This file is the integrated default-branch snapshot. Feature tasks record progre
- `3b37ac3` / `55e61b7`: macOS Robot hotspot discovery performs one bounded worker-thread rescan after an empty or SSID-redacted CoreWLAN result; persistent SSID redaction maps to the existing permission error instead of a misleading empty-device state, while firmware and the open `Xiaozhi-*` contract remain unchanged.
- `f5d47c8` / `b6148a5`: AI Programming voice capture is available after an Agent is selected but before the lazy first OpenCode session exists; transcription fills the composer draft without creating an empty session, while runtime, loading, transcribing, busy, and recording guards remain unchanged.
- `4013edc` / `3b799af`: integrated per-user Code/Canvas/Learning/Robot entry policy from Works Square, projected by Electron Main as four booleans and enforced before disabled module routes initialize.
- `01bee31`: enabled AI Learning course catalog/generation/download/playback, Main-owned cloud/runtime bridges, verified external OpenMAIC player-artifact packaging, account profile reuse, removal of the transient `game-engine` Skill, and project-root `planning-with-files` output from the authoritative remote main. The merge hardens this with strict DTO/error projection, account-isolated local state, bounded same-origin downloads/packages, a nonce-protected account-bound player HTTP session, and an exact-source/origin single-document iframe bridge.
- `01bee31`: historically enabled the AI Learning course catalog/generation/download/playback architecture. Its Learning course/runtime behavior is superseded by `38db158` above; its unrelated `game-engine` removal and project-root `planning-with-files` behavior remain historical context.
- `26b52d7`: Canvas Prompt Museum, editable server-priced generation Quotes, project deletion/task-detail workflow, cloud-default Canvas development entry, and Chinese-only UI consolidation from the authoritative remote main. Its transient bundled `game-engine` Skill is superseded by `01bee31`.
- `f8d82e6`: Prompt Museum media rendering now accepts only the server-controlled relative media route, fetches it through a Main-owned bounded Works-authenticated proxy with one refresh retry, and keeps credential-free HTTPS CDN media direct. Renderer-side validation and card-local placeholders cover invalid or failed media; attribution URLs remain optional.
- `c1326a2`: Guided Hotspot Binding now scans bounded open `Xiaozhi-*` candidates and connects the user-selected hotspot inside the page through Main-owned Windows WLAN and macOS CoreWLAN/CoreLocation adapters; system Wi-Fi remains fallback, exact `=0` rollback and firmware/cloud contracts are unchanged.
@@ -72,7 +82,7 @@ Canvas 侧栏提供“获取灵感”进入 Prompt Museum。列表、筛选、
Makelore 在会话恢复、登录和刷新后由 Electron Main 请求 Works `/api/auth/me`Renderer 只获得 Code、Canvas、Learning、Robot 四个布尔权限。缺失 `module_access` 或任一字段时默认开启;服务端 `design` 显式映射客户端 `painting`。被关闭的模块卡片置灰且不可点击,根路由、深层路由和别名路由均在 `MainLayout` 或模块初始化前阻断。Code provider 等待认证权限加载完成;权限查询返回终止性 `401` 时同时清理 Main 和 Renderer 会话。`/settings` 是全局设置,不受 Code 入口策略阻断。该机制只是客户端入口策略,不代替服务端 API 授权。
AI 学习现在是已启用顶层模块。Renderer 浏览 Works 课程、提交单课生成需求、显示任务进度并打开已安装课程;材料上传经 Main IPC 严格投影,需求最多 4,000 字,文件最多 5 个、单个 50 MiB、总计 150 MiB。Main 持有 Works Token、生成/课程下载/Agent/ASR/课堂 runtime 访问和按认证身份派生的不透明账号分区;账号切换、注销或 epoch 变化会隐藏旧本地课程、关闭旧 player server 并丢弃迟到结果。课程归档最大 512 MiB只允许同 Works origin、最多 5 跳且不携带资源 Bearer 的下载重定向,按服务端声明大小与 SHA-256 校验后原子安装并在播放前再次校验。安装期和 player server 只允许 MIME/扩展匹配的被动图片、音视频和字体;同源 HTML/SVG/XML/脚本/PDF 被拒绝,运行时响应带 nosniff/sandbox CSP/CORP/no-store。只有显式 `readClassroom` 会注册课程Agent/runtime 先验证调用前既存 active registration再用无副作用 resolver 核对本地 aggregate/module不能靠自身请求注册。HTTP URL/cookie 由短效 nonce 保护iframe bridge 校验精确 source/origin只允许初始 player 文档,二次导航后永久关闭。课程 aggregate `contentHash` 是云端权益/进度身份,模块 hash 只作为受控上下文。打包必须提供由固定清单与 SHA-256 验证的 OpenMAIC production Stage 产物;当前客户端自动化不等同于真实 Works 课程服务、生产播放器产物或签名安装包验收
AI 学习现在是已启用的运营精选项目目录,并继续受登录和 `module_access.learning` 控制。Renderer 通过 Main-owned Host API 获取分页项目卡片和 README 详情Markdown 支持 GFM、禁用原始 HTML服务端发布时把通过 SSRF/重定向/大小/MIME 校验的远程 HTTPS raster 图片镜像并改写为固定项目媒体路径Main 再以 Bearer、可信 MIME 和 10 MiB 上限代理。详情页的下载按钮打开系统保存对话框Main 将最大 512 MiB 的 ZIP 流式写入临时文件,只允许最多五跳同 Works origin 重定向校验声明字节数、SHA-256 和 ZIP 签名后原子保存Renderer 只接收 `saved``cancelled`。课程生成、进度、本地课程库、OpenMAIC player、Agent、ASR、课堂 runtime、Learning IPC 和 player artifact 打包已删除且没有兼容读取路径;历史课程数据保留但不再读取。客户端契约已完成,不代表 Works Square 运营后台/API 或生产内容已经部署
AI 编程首次发送在新建 OpenCode session 已知为空时不再等待冗余历史读取prompt 可直接进入 Host API普通历史会话仍刷新消息。每个 Session 独立持有 run、loading、error 与内部队列;一个 Session 的回复或终止不会锁住、改写或重放另一个 Session。Host 接受或用户消息落库不算启动确认,只有明确 busy/retry、assistant、question、permission 或 typed terminal event 才确认/终结启动;独立的 10 秒 watchdog 到期时仅以 `SESSION_START_UNCONFIRMED` 终止该 Session。Main 以 runtime generation provenance、Agent 内容 fingerprint 和 live registry id 共同验证项目 Agentprovider/runtime 或 Agent 未应用时在执行前返回 typed `409``promptSent:false`。普通 message、command、summarize 和后台 provider sync 不自动重启、reload 或 dispose 共享 runtime只有显式用户 apply/lifecycle 操作可以推进运行时刷新。Main AI proxy 只把明确的上游分组饱和投影为当前 OpenCode 的终止状态,配额耗尽保持独立终止态,通用限速继续保留 `429`。上下文压缩以每个 Session 的持久时间线事件呈现:自动与手动压缩使用不同文案,运行态原位弱化显示,完成后静态保留并可从历史恢复;`session.compacted` 只完成对应事件,只有真实 idle 才结束 run 和释放排队消息。
@@ -82,12 +92,13 @@ Robot 绑定设备默认先显示“引导配网 / 已有激活码”路径选
## Recently Completed
- 2026-08-20: Replaced AI Learning's course generation/player stack with the curated project catalog defined by ADR-005. The authenticated/module-gated client now renders project cards and safe README detail, proxies publish-time mirrored media through Main, and saves verified ZIP archives through the native dialog. Old course/runtime/player packaging was removed; full client verification passed before main promotion, while the external operations backend and real-account package smoke remain pending.
- 2026-08-19: Integrated native password/SMS login, the temporary HTTP/2-disabled diagnostic bootstrap, and the AI Design freeze fix. Workspace JSON calls and shared token refresh now settle within 30 seconds, transport abort is paired with deterministic rejection, and implicit Electron-to-Node fallback no longer replays mutation requests. Installed-client Quote retry/confirm smoke and the final HTTP/2 policy decision remain pending.
- 2026-08-17: Integrated application-side multi-Session isolation for AI Programming. Session A may remain busy while Session B is independently accepted or terminally rejected; errors, startup deadlines and uncertain-failure cleanup stay Session-scoped. Main now fail-closes stale Agent/provider runtime state before execution, applies bounded manager/project FIFO acceptance with revocable timeouts, and never refreshes the shared runtime automatically from ordinary execution paths. Full unit, typecheck, lint, build, focused Electron E2E and independent Sol review passed; a real paid-provider/bundled-runtime concurrency smoke remains pending.
- 2026-08-17: Replaced the temporary coverless-first-create fallback with a required PNG/JPEG/WebP picker, preview, file name, reselect action, Renderer/Main signature and size validation, and one Main-owned multipart metadata-plus-cover create request. Create conflicts fail before version upload; existing project metadata and covers remain unchanged.
- 2026-08-17: Corrected macOS Robot hotspot discovery after a system-visible `Xiaozhi-*` report. CoreWLAN now gets one bounded retry when its first result is empty or all SSIDs are unavailable; a persistent non-empty redacted result becomes the existing safe permission state. Open-only filtering, firmware, Host/Renderer contracts, exact-current-SSID verification, and the system-Wi-Fi fallback are unchanged; signed-package physical smoke remains pending.
- 2026-08-17: Created merge commit `4013edc` for the reviewed per-user module-entry policy source tip `3b799af`. Main exposes only four booleans from `/api/auth/me`; missing fields remain enabled, `design` maps to `painting`, disabled root/deep/alias routes stop before module initialization, Code provider startup waits for policy hydration, terminal `401` clears both session layers, and global settings remains reachable.
- 2026-08-17: Integrated remote `01bee31`: Learning is enabled with course browsing, strict bounded generation materials, verified atomic course installation, multi-module playback, Main-owned Agent/ASR/runtime bridges, and a manifest-verified external OpenMAIC player artifact. Merge review added account-isolated generation/library/player state, fixed-binding token/fetch/401 guards, passive-only course media with hardened responses, pre-existing active-registration checks before side-effect-free identity resolution, nonce-protected single-document player sessions, and a recoverable deep-link profile error gate. At that integration checkpoint, publishing used a coverless first create, existing draft/published were version-only, and races failed closed without cover/PATCH side effects; project-cover source `145a6ce` and matching server merge `0cedfc4` above supersede only the coverless-first-create limitation. The transient `game-engine` Skill was removed and `planning-with-files` writes its files to the project root. Production Works/player-artifact/signed-package acceptance remains pending.
- 2026-08-17: Integrated remote `01bee31`, which at that checkpoint introduced Learning course browsing/generation/install/playback and its OpenMAIC runtime boundary alongside unrelated repository consolidation. ADR-005 and source `38db158` supersede and remove that Learning course/runtime behavior; historical downloaded data remains untouched. The unrelated `game-engine` removal and project-root `planning-with-files` behavior remain current.
- 2026-08-16: Integrated remote `26b52d7`: Canvas now has server-backed Prompt Museum navigation, editable server-repriced generation Quotes, task result details/downloads, guarded project deletion, cloud-default development, and Chinese-only UI. That tip briefly bundled `game-engine`; authoritative successor `01bee31` removed it. Client integration is verified separately from production Prompt Museum data/backend deployment.
- 2026-08-18: Integrated Prompt Museum media rendering from `f8d82e6`: relative protected media is fetched through Main with bounded trusted-raster validation and one 401 refresh, HTTPS media remains direct, invalid/failed images are card-local placeholders, and missing attribution URLs render without broken links. Focused unit/Electron E2E, typecheck, scoped lint, and Vite build passed; real Works/CDN production smoke remains pending.
- 2026-08-16: Integrated Windows/macOS in-page Robot hotspot discovery, explicit selection, connection, and exact-current-SSID verification behind the existing default-on guided capability. Candidate IDs are bounded and short-lived, native diagnostics stay in Main, system settings remain fallback, and firmware/Portal/Binding contracts are unchanged.
@@ -117,7 +128,7 @@ Robot 绑定设备默认先显示“引导配网 / 已有激活码”路径选
1. 用包含本次修复的安装包和真实 Works 账号重复执行 Quote PATCH、重试报价与继续调整确认任一超时在 30 秒内释放 UI、其他请求可继续、服务端不收到隐式重复 mutation确认后单独恢复 HTTP/2 再对照 smoke决定是否移除临时 `disable-http2`
2. 部署 Works `module_access` migration 与 `/api/auth/me` 权限 API打包新 Makelore 客户端,再用真实账号分别关闭 Code、Canvas、Learning、Robot 执行卡片、根/深层/别名路由 smoke同时独立验证模块 API 服务端授权。
3. 使用真实 Works 账号和固定 SHA-256 的 production Stage artifact 验收 Learning 课程目录/生成/材料上传/取消恢复、下载、离线播放、进度、Agent、ASR、PBL/评分 runtime并完成 Windows 与签名 macOS 安装包 smoke
3.现并部署 Works Square Learning 项目管理、对象存储、远程图片镜像和 list/detail/media/archive API再使用真实账号验证发布/下架、分页、README 图片、ZIP 校验/保存以及 Windows 与签名 macOS 安装包。
4. 对 default-on Guided Hotspot Binding 核对指定固件镜像与六位码发行/消费契约,补齐 Windows 真机热点连接、签名 macOS x64/arm64 CoreWLAN/CoreLocation/worker 打包验证、真实 Host API/native seam Electron E2E 和完整真机 smoke发布支持保留精确 `=0` 回滚,不把缺失证据表述为已验收。
5. 成组核对客户端 source+built+contract 上传 → 服务端逐字节校验 → OSS immutable Release → CDN/Edge 的发布契约与客户端 `play_url` 消费契约。
@@ -129,7 +140,7 @@ Robot 绑定设备默认先显示“引导配网 / 已有激活码”路径选
- 四模块权限只控制 Makelore 客户端入口和初始化,不是 API 授权边界。不得因卡片置灰或路由阻断而放宽 Works/模块服务端的身份与权限校验;旧服务端缺少对象/字段时默认开启是显式兼容策略。
- Prompt Museum 相对媒体必须保持固定的服务端路径并由 Main 处理;如果服务端增加媒体变体,需同步维护 entry/path 语法、Works Bearer 所有权、单次刷新、10 MiB 限制、可信 raster MIME 白名单与 Renderer data URL 校验。HTTPS 直连媒体必须继续无凭据,图片失败必须局限在卡片/详情视图。
- Learning 的课程目录、生成、Agent、ASR 与 runtime 都依赖真实 Works 权益和服务端契约;本地课程归档与播放器 artifact 必须在信任前完成边界、大小与摘要校验。账号分区/epoch、fixed-binding token+fetch guards、同源重定向、512 MiB 上限、player nonce、exact source/origin 与单文档 bridge 边界不可放宽;不得把模块/场景自报身份当成 aggregate 课程权益,也不得把上游错误、Token、内部 URL 或本地归档路径投影到 Renderer。
- Learning 项目目录依赖真实 Works 运营发布和固定 API 契约README 远程图片必须在发布时镜像为固定媒体路径,客户端不得接受任意媒体/下载代理。Main 必须保持 Bearer 所有权、一次 401 refresh、可信 raster MIME、10 MiB 图片上限、同源最多五跳、512 MiB ZIP、声明大小/SHA-256/ZIP 签名和原子保存;不得把上游错误、Token、对象存储 URL 或本地路径投影到 Renderer。历史课程数据不再读取但也不得被隐式删除。
- Works Project 首次封面已由服务端源 `407c883`(本地 merge `0cedfc4`)提供单请求原子绑定与失败补偿,客户端源 `145a6ce` 因此要求首次发布上传 PNG/JPEG/WebP 封面;部署、安装包和真实账号/对象存储 smoke 仍未完成。服务端仍没有已有 metadata 的 revision/ETag 与 draft-only 条件写,因此已有 draft/published 继续只允许 version-only客户端不得以无条件 PATCH 替代。
- Guided Hotspot Binding 默认开启并提供未经认证的热点扫描/显式连接,但当前 Hotspot/portal 仍是开放 SoftAP + 明文 HTTP且精确出货镜像、激活码发行契约、签名 macOS、Windows 真机与完整整链尚未验证。界面必须保留环境警告,异常发布可用精确环境值 `0` 回滚;不得把 SSID 前缀宣称为可信设备发现、自动认领或在线证明。
- 一键提交已成功但本机 submission binding 落盘失败时必须保持提交成功、显示固定 `binding_warning` 并继续轮询,避免用户误判上传失败。
@@ -154,4 +165,4 @@ Robot 绑定设备默认先显示“引导配网 / 已有激活码”路径选
## Last Updated
2026-08-19
2026-08-20

View File

@@ -13,6 +13,7 @@
| 2026-08-12 | Makelore 本地构建静态 Release | 固定 npm + 项目 lockfile Vite、本地同字节双视口预检、source+built+contract 双归档协议 | current-state、architecture、domain、evidence、commitments、skills |
| 2026-08-13 | 图生图与 Updater 主线集成 | 单参考图 Asset 链路、旧 Brief medium 兼容,以及稳定更新源缺包诊断/错误脱敏 | README、current-state、architecture、domain、evidence、commitments |
| 2026-08-19 | AI Design 请求冻结修复集成 | 原生密码/SMS 登录与临时 HTTP/2 诊断包合并Workspace/token refresh 有限 deadlinemutation transport failure 不隐式重放 | README、current-state、architecture、domain、evidence、commitments |
| 2026-08-20 | AI Learning 项目目录集成 | 保留登录/模块权限以项目列表、README 详情和 Main-owned 验证 ZIP 保存替换旧课程生成/OpenMAIC runtime | README、ADR-005、current-state、architecture、domain、commitments |
## Notes

View File

@@ -1,64 +0,0 @@
# 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: 2cb8a7aef490b118a0968a5a77893f0cf4d3ebea
- 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.learning` entry 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
1. Replace the shared Learning contract and Main Host API routes with project list/detail/media/download endpoints.
2. Rebuild the Learning Renderer as a project card grid plus Markdown detail page and simplify the Learning sidebar.
3. Delete old generation/player/local-library/runtime/IPC/package-artifact code and update app routing/layout.
4. Replace obsolete focused tests, update README and publish a precise Works Square admin/API contract.
5. 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/:projectId` README 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.md` for 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.md` and `.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.md` and `.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.

View File

@@ -8,7 +8,7 @@
- Worktree: D:\Datas\OthersProjects\makelore-integrate-learning-catalog-a73e91c4
- Base commit: 2cb8a7aef490b118a0968a5a77893f0cf4d3ebea
- Owner: codex
- Status: Planning
- Status: Completed
## Scope
@@ -27,16 +27,27 @@
## Outcome
- Not completed.
- Committed the verified feature work as `38db158` and merged it without conflicts as `d967b0f`.
- Promoted the confirmed product direction into accepted ADR-005, canonical architecture/data-flow/module maps, domain glossary/rules, success criteria, current state/history, and the release commitment ledger.
- Canonical Learning state now describes only the authenticated, `module_access.learning`-gated project catalog, safe README/media boundary, and Main-owned verified native ZIP save. The prior course-generation/OpenMAIC architecture is retained only as explicitly superseded history.
- Preserved the external Works Square operations/admin/API implementation and real-account Windows/signed-macOS smoke as pending work. Historical local course data remains untouched and unread by the new client.
## Verification
- Not run.
- `pnpm install --frozen-lockfile` — passed with pinned pnpm `10.33.4`; lockfile unchanged.
- `pnpm run typecheck` — passed.
- `pnpm test` — passed, 175 files / 2057 tests.
- `pnpm run lint:check` — passed with 0 errors and the same 6 existing warnings.
- `pnpm run build:vite` — passed; existing mixed-import and chunk-size warnings remain.
- `pnpm run test:e2e -- tests/e2e/main-navigation.spec.ts` — passed, 3 tests.
- `git diff --check` — passed; only repository line-ending conversion warnings were emitted.
## Follow-ups
- None recorded.
- Implement and deploy `docs/learning-project-catalog-server-contract.md` in the external Works Square operations/backend repository before releasing this client.
- Perform real-account publication, README-media, archive-failure, native-save, Windows, and signed-macOS smoke before production rollout.
- Consider a separate explicit user-controlled cleanup feature if historical downloaded course data should later be removed.
## Promotion Candidates
- None recorded.
- None. The accepted source-task candidates were promoted in this integration task through ADR-005 and the canonical documents listed in Outcome.