Merge origin/main and preserve nonblocking project entry
Some checks failed
Electron E2E / Electron E2E (macos-latest) (push) Has been cancelled
Electron E2E / Electron E2E (ubuntu-latest) (push) Has been cancelled
Electron E2E / Electron E2E (windows-latest) (push) Has been cancelled

This commit is contained in:
inman
2026-09-07 12:53:55 +08:00
66 changed files with 4068 additions and 519 deletions

View File

@@ -4,6 +4,21 @@ This file is the integrated default-branch snapshot. Feature tasks record progre
## Integrated Through
- Remote `main` frontier `da29294` is semantically integrated with local
frontier `f53683a` under task
`20260907-integrate-remote-before-push-a4c9e27b`. The merge retains the
local directory-only project creation, Main-owned UUID, direct `/chat`
entry, non-blocking no-Agent state, Project Configuration-owned Plugin
sheet, and retired Learning surface. It also incorporates the compatible
remote official project-wide Plugin activation, automatic Game Resource
delivery, Agent Browser restoration, and Token Points V2 projection. The
remote initialized/full-Agent Conversation gate is intentionally not
adopted: `initialized` remains schema compatibility only, while truly
invalid project metadata still routes to Project Configuration. Verification
passed typecheck, 1,912 full-suite tests with 3 skips plus pressure 1/1, lint
with 0 errors and 5 existing warnings, production Vite build, and targeted
Electron 6/6. No live paid Provider generation, installed-client smoke,
deployment, publication, or production database change is claimed.
- September 6 completed product sources are integrated onto local `main` by task
`20260907-merge-all-changes-8f3c2a`: project-gate removal `af13aca` via
`39d7b7e`, Code landing `ce90f57` via `a91c7e3`, Plugin rehoming `be1764e`
@@ -103,8 +118,12 @@ This file is the integrated default-branch snapshot. Feature tasks record progre
install, build, upload, submit, or approve. Its `.mjs` uses the non-overridable
application Node exposed as `MAKELORE_NODE_EXECUTABLE` and is executable only because
it ships in the fixed signed-client resource root. Downloadable Marketplace artifacts
remain text/image-only and reject `.mjs`; acquisition, project enablement, Agent
assignment, and immutable bundled Release/Admission remain distinct. Main and Works
remain text/image-only and reject `.mjs`; acquisition, project enablement, and
immutable bundled Release/Admission remain distinct. Project Scaffold is project-wide
after enablement and has no Agent-assignment state; the same activation scope now also
covers Data Service and Game Resource, while Plugins outside the code-owned set retain
their own assignment rules.
Main and Works
Square retain build, preflight, artifact,
upload, immutable Release, and review authority. Exact integration verification passed
the 12-test scaffold suite, 123 focused Vitest tests, typecheck, scoped ESLint, and the
@@ -710,13 +729,13 @@ Prompt Museum 已退出当前产品面:Canvas 不再显示“获取灵感”
Makelore 在会话恢复、登录和刷新后由 Electron Main 请求 Works `/api/auth/me`,Renderer 只获得 Code、Canvas、Robot 三个布尔权限。缺失 `module_access` 或任一字段时默认开启;服务端 `design` 显式映射客户端 `painting`,额外旧字段被忽略。被关闭的模块卡片置灰且不可点击,根路由、深层路由和别名路由均在 `MainLayout` 或模块初始化前阻断。Code provider 等待认证权限加载完成;权限查询返回终止性 `401` 时同时清理 Main 和 Renderer 会话。`/settings` 是全局设置,不受 Code 入口策略阻断。该机制只是客户端入口策略,不代替服务端 API 授权。
插件工作区由 Project Configuration 页面拥有:模型、Skill、知识旁的“插件” ResourceCard 打开 `/project-config/plugins` 对应的同页宽 Sheet,配置页保持挂载;没有 active project 时仍可查看账号与本机插件。Code 侧栏不再提供独立入口,`/plugins`、`/plugin-marketplace`、`/my-plugins` 与 `/project-plugins` 只保留查询/筛选意图并兼容重定向。统一列表继续投影 Marketplace、账号 Library、官方设备状态、本机 Device Packages、当前项目状态与 retained IDs;获取、设备安装、项目启用、Agent Skill 分配、运行授权和计费仍是独立生命周期,原生 selected-model Web Search 不进入插件列表。
插件工作区由 Project Configuration 页面拥有:模型、Skill、知识旁的“插件” ResourceCard 打开 `/project-config/plugins` 对应的同页宽 Sheet,配置页保持挂载;没有 active project 时仍可查看账号与本机插件。Code 侧栏不再提供独立入口,`/plugins`、`/plugin-marketplace`、`/my-plugins` 与 `/project-plugins` 只保留查询/筛选意图并兼容重定向。统一列表继续投影 Marketplace、账号 Library、官方设备状态、本机 Device Packages、当前项目状态与 retained IDs;获取、设备安装、项目启用、运行授权和计费仍是独立生命周期。Data Service、Game Resource 与 Project Scaffold 在满足交付/获取条件并由项目启用后自动进入每个父 Agent,不提供伙伴分配;采用 assignment scope 的其他插件继续由 Agent Skill 分配控制。Game Resource 在一次计费确认后由 Main 提交一次并内部轮询,终态全部输出自动写入调用时冻结的原项目;Agent 不再轮询状态、选择保存路径或进行第二次保存确认,交付恢复也不得重新生成或重复计费。原生 selected-model Web Search 不进入插件列表。
Learning 已从 Makelore 产品中移除:没有模块卡片、路由、侧栏、Renderer 页面、Main Host API、下载服务、共享 DTO、素材或打包 fallback。旧 Learning URL 回到模块选择页,旧 API 使用标准 404 边界。客户端不扫描、读取、迁移或自动删除历史课程数据;名称仍含 Learning 的冻结账号分区盐仅为跨模块持久状态兼容标识,不代表产品模块仍存在。
Code 入口现在始终落在 `/chat`。没有本地项目时显示 Makelore 品牌引导、单一橙色“新增项目”动作和真实项目卡横向列表;空列表不伪造示例。有项目但尚无 Agent 时保持项目可进入,并提供非阻塞的首个 Agent 设置入口。项目创建和项目卡选择都复用 Sidebar 的既有验证/激活流程,不建立第二套状态。
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 期间仍可编辑;正式包从 staged `pi-runtime` manifest/root 定位并校验 Pi 包入口,不从脚本目录或应用 `node_modules` 回退。Renderer 只通过 `/api/coding/*` 和 Snapshot-first/`patch-batch` SSE 消费产品中立合同;gap/reconnect 只恢复目标 Conversation,accepted/uncertain mutation 不自动重放。`lifecycle:sleep` 会关闭旧事件流,视图挂载、项目上下文变化、页面重新可见或窗口 focus 会静默刷新已选 Snapshot,使后台 terminal 状态收敛且不重放 mutation。隐藏 Conversation 的红点只在新 pending interaction 或新 completed/failed/aborted terminal transition 出现,不由助手/thinking/工具过程或单个工具失败触发。Session hydration 沿完整 active branch 投影可见历史,Pi compaction 只改变模型上下文并保持 summary 私有;Renderer 首次挂载最近 120 个节点,向上滚动时按 100 个节点追加更早内容并补偿新增高度以保持阅读锚点。折叠的 thinking、助手过程说明与工具输出固定展示第一条可见内容和首个非空行,横向偏移保持为零,展开后仍显示完整内容。未解析 Conversation 第一次选模先 validate 并持久化 resolved metadata,再 prepare;同账号模型切换使用 target `set_model`,跨账号只重建目标逻辑线程。Web Search 只作为所选模型 capability 进入父 worker 并使用相同 model/provider/credential 与普通模型计费,不经过 Marketplace/Hosted client/Plugin Charge 或浏览器 fallback;child 不继承。Conversation 工具可检查并在独立确认后安装 npm、Git、本地 Plugin 目录或 loose `SKILL.md` 为 Main-owned immutable Device Package;不运行生命周期脚本,可执行 extension 具有桌面用户权限,新/idle parent 自动刷新,active parent 结算后刷新,child 为空。每个 Main-selected generation 都保留全部显式安装且当前启用的 Skill 路径;生成的 Makelore bridge 是必需的首个 extension,其余 extension 全部经 `additionalExtensionPaths` 加载,并继续关闭 ambient discovery。top-level 逻辑 turn 并发为 4,warm idle logical-thread LRU 为 8;independent child 进程并发为 4 并使用 FIFO 进程预算 8;coding child 与 parent 共用项目 write lease。同一助手工具批次内,内置 `bash`/`edit`/`write` 与声明需要该 write lease 的动态产品工具按顺序执行,避免 Pi 在批量 prepare 阶段形成租约自锁;纯只读工具批次仍可并行。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 arm64 仅有本地未签名 mounted-image initialize/shutdown 证据,签名/公证/完整 process-enumeration、macOS x64 与 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` 读取、迁移或删除项目元数据。只要项目 metadata 有效即可进入 `/chat`;`initialized` 仅为 schema 兼容字段,不构成导航或 Conversation gate。项目尚无启用且未归档的 Agent 时显示非阻塞设置入口,不创建伪 Agent;真正开始 Conversation 前仍由现有 Agent/模型校验给出明确恢复路径。Electron Main 按需启动一个长驻父 Agent Server,每条 active/warm Conversation 在其中拥有独立 Runtime/Session/channel、credential store、extension context、generation/seq、Snapshot/Patch、model/thinking、队列、interaction 与错误状态,Composer 在 lazy prepare 期间仍可编辑;正式包从 staged `pi-runtime` manifest/root 定位并校验 Pi 包入口,不从脚本目录或应用 `node_modules` 回退。Renderer 只通过 `/api/coding/*` 和 Snapshot-first/`patch-batch` SSE 消费产品中立合同;gap/reconnect 只恢复目标 Conversation,accepted/uncertain mutation 不自动重放。`lifecycle:sleep` 会关闭旧事件流,视图挂载、项目上下文变化、页面重新可见或窗口 focus 会静默刷新已选 Snapshot,使后台 terminal 状态收敛且不重放 mutation。隐藏 Conversation 的红点只在新 pending interaction 或新 completed/failed/aborted terminal transition 出现,不由助手/thinking/工具过程或单个工具失败触发。Session hydration 沿完整 active branch 投影可见历史,Pi compaction 只改变模型上下文并保持 summary 私有;Renderer 首次挂载最近 120 个节点,向上滚动时按 100 个节点追加更早内容并补偿新增高度以保持阅读锚点。折叠的 thinking、助手过程说明与工具输出固定展示第一条可见内容和首个非空行,横向偏移保持为零,展开后仍显示完整内容。未解析 Conversation 第一次选模先 validate 并持久化 resolved metadata,再 prepare;同账号模型切换使用 target `set_model`,跨账号只重建目标逻辑线程。Web Search 只作为所选模型 capability 进入父 worker 并使用相同 model/provider/credential 与普通模型计费,不经过 Marketplace/Hosted client/Plugin Charge 或浏览器 fallback;child 不继承。Conversation 工具可检查并在独立确认后安装 npm、Git、本地 Plugin 目录或 loose `SKILL.md` 为 Main-owned immutable Device Package;不运行生命周期脚本,可执行 extension 具有桌面用户权限,新/idle parent 自动刷新,active parent 结算后刷新,child 为空。每个 Main-selected generation 都保留全部显式安装且当前启用的 Skill 路径;生成的 Makelore bridge 是必需的首个 extension,其余 extension 全部经 `additionalExtensionPaths` 加载,并继续关闭 ambient discovery。top-level 逻辑 turn 并发为 4,warm idle logical-thread LRU 为 8;independent child 进程并发为 4 并使用 FIFO 进程预算 8;coding child 与 parent 共用项目 write lease。同一助手工具批次内,内置 `bash`/`edit`/`write` 与声明需要该 write lease 的动态产品工具按顺序执行,避免 Pi 在批量 prepare 阶段形成租约自锁;纯只读工具批次仍可并行。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 arm64 仅有本地未签名 mounted-image initialize/shutdown 证据,签名/公证/完整 process-enumeration、macOS x64 与 native non-WSL Linux 仍未通过平台发布门禁。
Updater 仍由 Electron Main 选择目标 feed、记录原始诊断并保持失败语义。正式稳定源缺少对应平台 manifest 时,设置页只显示一条简洁中文提示并允许重试,不把缺包误报为已是最新版,也不向普通界面暴露堆栈、URL、路径或错误码;签名产物发布和真实升级安装仍属于外部 Release Gate。

View File

@@ -8,7 +8,7 @@
- Worktree: /Users/inmanx/Documents/makelore
- Base commit: 6366fc28dc81a71ac60a71becfeee781fcd8890e
- Owner: codex
- Status: Blocked pending human decision
- Status: Ready for integration gate
## Scope
@@ -28,12 +28,13 @@
system.
- Do not choose between contradictory product rules by timestamp, merge order,
or an automatic `ours`/`theirs` strategy.
- Do not modify canonical project memory or product files until the user resolves
the conflict.
- The user confirmed on 2026-09-07 that the local non-blocking project-entry
behavior remains authoritative; reconcile all affected code, tests, and
canonical memory to that decision.
## Outcome
- Fetched both histories and confirmed divergence of 14 remote-only and 28
- Fetched both histories and confirmed divergence of 14 remote-only and 29
local-only commits from their merge base.
- Read all ten remote task records and the local project-creation source record.
Remote official-plugin project scope, automatic game-resource delivery, Agent
@@ -45,31 +46,42 @@
link. Remote source `8042d2b` integrated by `da29294` requires `initialized=true`
plus a fully configured enabled Agent before Conversation entry and makes the
first-Agent flow a required gate.
- Integration and push remain paused at the human-decision gate; no merge or
product/canonical edit has been made.
- The user confirmed directory-only creation, immediate `/chat`, non-blocking
no-Agent setup, and compatibility-only `initialized` as authoritative.
- Started an ordinary `--no-commit --no-ff` merge of `origin/main@da29294`.
The semantic resolution rejects the remote required-Agent readiness gate and
retains the compatible official project-wide Plugin activation, automatic
Game Resource delivery, Agent Browser restoration, and Token Points V2.
- Removed the remote-only task-record copies from the final tree without editing
them; they remain reachable through the remote merge parent.
## Verification
- Concurrent Task Gate: passed; this worktree holds the exclusive integration
lock and no peer owns the repository.
- Remote fetch: passed; `origin/main` resolved to `da29294`.
- Divergence audit: 14 remote-only / 28 local-only commits.
- Divergence audit at merge start: 14 remote-only / 29 local-only commits.
- Source-record semantic review: completed for all remote-only task records and
local task `20260906-remove-project-gate-7c31`.
- Merge, product tests, typecheck, lint, build, and push: intentionally not run
while the semantic decision is unresolved.
- Conflict-marker and whitespace checks: passed after semantic resolution.
- Typecheck: passed with the exact pinned `pnpm@10.33.4` via Corepack.
- Focused unit tests: 346 passed and one Plugin-copy expectation failed; the
copy was aligned without changing behavior and its 17-test file then passed.
- Full unit suite: 226 files / 1,912 passed / 3 skipped; the isolated pressure
suite passed 1/1.
- Lint: passed with 0 errors and 5 pre-existing warnings.
- Production Vite build: passed for Renderer, Main, Preload, and utility worker.
- Targeted Electron E2E: 6/6 passed across first-chat/runtime behavior, Agent
Browser UI, project-config Skill details, and project-wide Plugin enablement.
- Project-doc gates, merge commit, remote race check, and push remain pending.
## Follow-ups
- Human confirmation is required on whether the current local non-blocking
project-entry behavior remains authoritative or the remote required-Agent
readiness gate should replace it.
- After confirmation, merge and reconcile the chosen rule, run focused readiness
and onboarding tests plus repository-required typecheck/lint/build/full tests,
complete the project-doc integration gate, and push `main:main` normally.
- Complete the project-doc integration gates, ordinary merge commit, remote race
check, and normal `main:main` push.
## Promotion Candidates
- Pending integration after the conflict is resolved: promote only the chosen
project-entry/readiness invariant; compatible remote promotions retain their
verified scope and constraints.
- Promote the confirmed non-blocking project-entry invariant together with the
compatible project-wide official Plugin, Game Resource delivery, Agent Browser,
and Token Points V2 boundaries recorded in the canonical documents.