docs: finalize integrated local product state

This commit is contained in:
inman
2026-09-01 11:59:13 +08:00
parent e32041f31e
commit fac08e975d
4 changed files with 56 additions and 24 deletions

View File

@@ -4,6 +4,18 @@ This file is the integrated default-branch snapshot. Feature tasks record progre
## Integrated Through
- Plugin-navigation sources `b3f4166` and `e237941` from task
`20260831-consolidate-plugin-navigation-3d9a6c71` are integrated through
merge `a278ca3`. Coding history/quota source `d523b72` from task
`20260831-fix-history-quota-errors-6c2a91e4` is integrated through merge
`69832e0`, and assistant progress-preview source `8d878eb` from task
`20260831-show-progress-messages-a14f9c2d` is integrated through merge
`a8fd95f`. Project Configuration now owns the only visible Plugin Services
surface; Pi compaction no longer removes visible active-branch history;
recognized Token Point exhaustion remains safely actionable after reopen;
and collapsed process previews remain anchored to their first displayable
line. Historical source `b1f51be` remains explicitly excluded because
ADR-005 continues to retire the OpenMAIC Learning Player packaging chain.
- Human-authorized takeover task `20260831-promote-main-merge-5e9c7a31` completed
the already-started local `main` merge as
`03a9e866d4366e0a1cb416e26b424fe981071310`, recorded the transfer in
@@ -49,7 +61,9 @@ This file is the integrated default-branch snapshot. Feature tasks record progre
the authenticated Marketplace/Library client, immutable Package Store, trusted
release verification, effective installed-plugin resolution, and frozen Pi worker
materialization; Renderer exposes Marketplace, My Plugins, and Project Plugins
projections without receiving credentials, paths, Admissions, or signed URLs.
projections only inside Project Configuration's single Plugin Services sheet,
without receiving credentials, paths, Admissions, or signed URLs. The former
standalone routes are compatibility redirects to the corresponding sheet tab.
Data Service remains system-included and consumes zero Token Points. R7 Standards
and Spec reviews passed with zero findings, and XMA-01 passed all twelve live groups
against real PostgreSQL and a signed-in packaged Windows client. The later
@@ -215,9 +229,11 @@ 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 授权。
插件不再占用编程侧栏或独立产品页面。项目配置中的“插件服务”是唯一可见入口,并以 URL-backed 的“发现插件 / 我的插件 / 项目启用”标签分别承载 Marketplace、账号 Library/本机安装和当前项目启用配置;旧 `/plugin-marketplace`、`/my-plugins` 与 `/project-plugins` 路由只做兼容跳转。获取、设备安装、项目启用、Agent Skill 分配、运行授权和计费仍是独立生命周期,不因导航合并而自动推进。
AI 学习现在是已启用的运营精选项目目录,并继续受登录和 `module_access.learning` 控制。Renderer 通过 Main-owned Host API 获取分页项目卡片和 README 详情;Markdown 支持 GFM、禁用原始 HTML。服务端发布时只校验图片 URL 为无凭据、默认端口、无 fragment 且当前 DNS 结果全部为公网地址的 HTTPS URL,保留地址而不下载、识别格式、转码或镜像;客户端仅为 README 图片节点启用直连,因此 SVG 和 Electron 支持的其他格式可直接显示,单图失败不阻断详情。封面和历史发布媒体继续走受控路径。详情页的下载按钮打开系统保存对话框;Main 将 ZIP 流式写入临时文件,只允许最多五跳同 Works origin 重定向,不校验 `Content-Length`、`archiveBytes`、实际流字节数或客户端大小上限,校验 SHA-256 和 ZIP 签名后原子保存,Renderer 只接收 `saved` 或 `cancelled`。课程生成、进度、本地课程库、OpenMAIC player、Agent、ASR、课堂 runtime、Learning IPC 和 player artifact 打包已删除且没有兼容读取路径;历史课程数据保留但不再读取。服务端和客户端源码契约已完成,不代表生产部署或真实账号安装包联调已经完成。
AI 编程已经硬切到精确 pin 的 Pi `0.84.2`,不存在 OpenCode fallback 或双 runtime。project、Agent 与 Conversation 只在 `.makelore/project.json` 和 `.makelore/conversations.json` 使用本地 schema v2;当前客户端不从 `.niancode` 或 `.opencode` 读取、迁移或删除项目元数据。Electron Main 按需启动一个长驻父 Agent Server,每条 active/warm Conversation 在其中拥有独立 Runtime/Session/channel、credential store、extension context、generation/seq、Snapshot/Patch、model/thinking、队列、interaction 与错误状态,Composer 在 lazy prepare 期间仍可编辑。Renderer 只通过 `/api/coding/*` 和 Snapshot-first/`patch-batch` SSE 消费产品中立合同;gap/reconnect 只恢复目标 Conversation,accepted/uncertain mutation 不自动重放。未解析 Conversation 第一次选模先 validate 并持久化 resolved metadata,再 prepare;同账号模型切换使用 target `set_model`,跨账号只重建目标逻辑线程。top-level 逻辑 turn 并发为 4,warm idle logical-thread LRU 为 8;independent child 进程并发为 4 并使用 FIFO 进程预算 8;coding child 与 parent 共用项目 write lease。prompt/compact confirmation timeout 后仍保留 run/Agent-Server-or-child-process/background ownership,迟到 success/failure/exit/abort 单调且 exactly-once 收敛,页面隐藏不会停止 active/uncertain run。线程级替换只使目标 generation 失效;整个 Agent Server 退出会统一使所有旧 channel 失效,但 Main/Renderer 存活且下次恢复只重启一个 Server。Pi `0.84.2` 手动 compact 不发 `agent_settled`,由 correlated compact RPC 结果终结。父 Provider credential 只进入选中逻辑线程的内存 credential store,child 凭据只进入该短命进程;确定性的 Works user-context 缺失会失效 gateway credential、fail fast、不重放并投影固定 Provider-auth 错误,不归类为 Pi crash。真实 Provider 验证仍为用户明确接受的未验证风险,macOS x64/arm64 与 native non-WSL Linux 也未通过平台发布门禁。
AI 编程已经硬切到精确 pin 的 Pi `0.84.2`,不存在 OpenCode fallback 或双 runtime。project、Agent 与 Conversation 只在 `.makelore/project.json` 和 `.makelore/conversations.json` 使用本地 schema v2;当前客户端不从 `.niancode` 或 `.opencode` 读取、迁移或删除项目元数据。Electron Main 按需启动一个长驻父 Agent Server,每条 active/warm Conversation 在其中拥有独立 Runtime/Session/channel、credential store、extension context、generation/seq、Snapshot/Patch、model/thinking、队列、interaction 与错误状态,Composer 在 lazy prepare 期间仍可编辑。Renderer 只通过 `/api/coding/*` 和 Snapshot-first/`patch-batch` SSE 消费产品中立合同;gap/reconnect 只恢复目标 Conversation,accepted/uncertain mutation 不自动重放。Session hydration 沿完整 active branch 投影可见历史,Pi compaction 只改变模型上下文并保持 summary 私有;Renderer 首次挂载最近 120 个节点,向上滚动时按 100 个节点追加更早内容并补偿新增高度以保持阅读锚点。折叠的 thinking、助手过程说明与工具输出固定展示第一条可见内容和首个非空行,横向偏移保持为零,展开后仍显示完整内容。未解析 Conversation 第一次选模先 validate 并持久化 resolved metadata,再 prepare;同账号模型切换使用 target `set_model`,跨账号只重建目标逻辑线程。top-level 逻辑 turn 并发为 4,warm idle logical-thread LRU 为 8;independent child 进程并发为 4 并使用 FIFO 进程预算 8;coding child 与 parent 共用项目 write lease。prompt/compact confirmation timeout 后仍保留 run/Agent-Server-or-child-process/background ownership,迟到 success/failure/exit/abort 单调且 exactly-once 收敛,页面隐藏不会停止 active/uncertain run。线程级替换只使目标 generation 失效;整个 Agent Server 退出会统一使所有旧 channel 失效,但 Main/Renderer 存活且下次恢复只重启一个 Server。Pi `0.84.2` 手动 compact 不发 `agent_settled`,由 correlated compact RPC 结果终结。父 Provider credential 只进入选中逻辑线程的内存 credential store,child 凭据只进入该短命进程;确定性的 Works user-context 缺失会失效 gateway credential、fail fast、不重放并投影固定 Provider-auth 错误,不归类为 Pi crash。精确的 `403 token_point_balance_exhausted` / `词元点数余额不足` 上游响应会在 Main 内归类为不可重试的配额耗尽,Renderer 只收到稳定 `CODING_PROVIDER_QUOTA_EXHAUSTED` 与安全中文提示;重开会话仍保留该提示,不暴露上游 request id 或原始错误正文。真实 Provider 验证仍为用户明确接受的未验证风险,macOS x64/arm64 与 native non-WSL Linux 也未通过平台发布门禁。
Updater 仍由 Electron Main 选择目标 feed、记录原始诊断并保持失败语义。正式稳定源缺少对应平台 manifest 时,设置页只显示一条简洁中文提示并允许重试,不把缺包误报为已是最新版,也不向普通界面暴露堆栈、URL、路径或错误码;签名产物发布和真实升级安装仍属于外部 Release Gate。
@@ -225,6 +241,12 @@ Robot 绑定设备默认先显示“引导配网 / 已有激活码”路径选
## Recently Completed
- 2026-09-01: Integrated the consolidated Plugin Services navigation, complete
active-branch Coding history with scroll-anchor preservation, narrow Token Point
quota feedback, and stable first-line process previews. Combined typecheck,
focused/full unit tests, lint, Vite/Electron builds, and five focused Electron
E2E scenarios passed. The obsolete Learning Player packaging branch remains
excluded by explicit human confirmation and ADR-005 remains authoritative.
- 2026-08-31: Integrated the provider-neutral `makelore.game-resource` hosted Plugin
client with fetched `origin/main`. Generic schema-2 `platform_hosted` packages now
materialize frozen Skill/tool snapshots only for eligible parent Pi logical threads;
@@ -308,4 +330,4 @@ Robot 绑定设备默认先显示“引导配网 / 已有激活码”路径选
## Last Updated
2026-08-31
2026-09-01

View File

@@ -8,7 +8,7 @@
- Worktree: /Users/inmanx/Documents/makelore
- Base commit: 9ed70ba925a7e544f17bf5b418846df9d4145a2a
- Owner: codex
- Status: Planning
- Status: Ready for finalization
## Scope
@@ -54,8 +54,13 @@
`http://localhost:5173/` and Electron Main owns Host API port `13210`.
- Exactly one local branch remains outside `main`:
`codex/learning-player-release-fix@b1f51be`. Its five-file patch restores the
retired OpenMAIC Learning Player packaging supply chain, contradicts ADR-005,
and requires an explicit product-direction decision before integration.
retired OpenMAIC Learning Player packaging supply chain and contradicts
ADR-005. On 2026-09-01 the user explicitly confirmed that this branch must
remain excluded, so ADR-005 stays authoritative and the branch is preserved
unchanged as historical local state.
- Promoted the accepted Plugin Services, complete visible history, quota
feedback, and first-line process-preview facts into `README.md`,
`current-state.md`, and `module-map.md`; no accepted ADR was reversed.
## Verification
@@ -75,21 +80,22 @@
- Runtime probes: Vite returned HTTP 200; the Host API returned its expected
unauthenticated HTTP 401 challenge; Node PID 39837 and Electron PID 39847
listen on ports 5173 and 13210 respectively.
- `check_project_docs.py`: passed.
- `git diff --check`: passed after canonical promotion.
- `check_doc_drift.py --task-id 20260901-integrate-all-local-4d7a9c21`:
correctly blocked this intake task because nine immutable source-task
records entered through the merges after its base. No source record was
edited; a successor Integration Gate will use this complete intake as its
base and perform the final task-aware certification.
## Follow-ups
- Obtain the required human choice for the ADR-005 conflict. If the historical
Learning branch remains excluded, finalize canonical documentation around
the three accepted product changes and close the Integration Gate. If it is
explicitly accepted, first reverse ADR-005 and reconcile the branch against
the current Learning boundary rather than taking a mechanical merge side.
- Open a fresh finalization Integration Gate based after these source-task
merges. This task intentionally introduced foreign immutable task records,
so the task-aware drift checker must certify the final tree from the
post-intake base rather than misattribute those records to canonical edits.
## Promotion Candidates
- Promote the Plugin Services source task into `current-state.md` and
`module-map.md`: Project Configuration is the sole visible plugin surface,
with discover/mine/project tabs and compatibility-only standalone routes.
- Promote the Coding history/quota source task into `README.md` and
`current-state.md`: compaction may bound model context without removing the
visible active-branch history, and recognized Provider quota failures remain
actionable after reopen.
- Applied to `README.md`, `current-state.md`, and `module-map.md`; no remaining
promotion candidate is known.