docs: record project-wide scaffold activation

This commit is contained in:
2026-09-05 12:39:18 +08:00
parent 6710527e8f
commit 5e0a091955
11 changed files with 147 additions and 133 deletions

View File

@@ -1,6 +1,6 @@
# ADR-008: 交互式 AI 应用使用显式 Scaffold Skill
- Status: Accepted / implemented
- Status: Accepted / implemented, amended 2026-09-05
- Date: 2026-09-04
- Applies to: Project creation, `ProjectType`, official bundled Marketplace Plugins, scaffold Skill, release readiness
@@ -15,7 +15,7 @@
- 新建项目只提供规范产品类型 `interactive_ai_app`(显示为“交互式 AI 应用”)和 `custom``ProjectType` 创建后仍不可变。
- `mini_game``mini_program` 只作为历史读取和脚手架兼容别名,在内存中归一为 `interactive_ai_app`。读取或运行脚手架不会改写原配置;后续普通配置变更可以保存规范值。缺少类型字段的旧项目仍归一为 `custom`
- 项目创建只生成 `.makelore/project.json``knowledge/`,不生成业务源码、依赖、锁文件或发布模板。
- 代码内置的官方 Marketplace Plugin `makelore.project-scaffold` 提供显式 Skill `makelore-project-scaffold`。它保留 Account Library 获取项目启用和 Agent 分配语义,但固定版本资源随 MakeLore 客户端交付,不经过 Package Store 下载。其脚本生成六个交互式 AI 应用起步文件;写入前预检全部目标,不覆盖已有路径,受控失败时只回滚本次创建的文件和目录。
- 代码内置的官方 Marketplace Plugin `makelore.project-scaffold` 提供显式 Skill `makelore-project-scaffold`。它保留 Account Library 获取项目启用语义,但不再要求或展示 Agent 分配项目启用后Main-owned effective resolver 自动把完整 Skill 集合提供给该项目的每个父 Agentchild Agent 仍为空。固定版本资源随 MakeLore 客户端交付,不经过 Package Store 下载。其脚本生成六个交互式 AI 应用起步文件;写入前预检全部目标,不覆盖已有路径,受控失败时只回滚本次创建的文件和目录。该项目级例外不改变其他 Plugin 的 Agent 分配规则。
- Scaffold Skill 不安装依赖、不访问网络、不执行构建、不上传、不提交审核,也不提供 `--force`、类型覆盖或模板迁移状态。Main 继续独占固定 npm/Vite 构建、同字节预检、打包和上传Works Square 继续独占服务端校验、不可变 Release 与运营审核。
- 官方 Plugin 的 `.mjs` 仅因它位于客户端固定、代码所有的 bundled resource root 中而可执行。应用通过不可覆盖的 `MAKELORE_NODE_EXECUTABLE` 向父 Pi worker/Agent Server 提供自身 Node不得回退系统 Node。该例外不适用于 Marketplace 下载 artifactP0 下载包仍只接受文本/图片 Skill 资源并拒绝 `.mjs`。第三方 Device Package 的可执行代码继续走自身的披露与确认边界。
- Skill 的发布检查只是只读准备度指导:区分确定阻断、源码包排除影响、运行时/平台待确认项和静态已满足项,并引用项目相对证据。它不能宣称构建、上传、审核或生产发布成功。
@@ -25,6 +25,7 @@
- 模板可随官方 Plugin 版本演进,不再扩大项目创建服务的职责,也不需要把脚本上传为 Marketplace artifact。
- 旧项目无需批量迁移即可继续打开、生成脚手架和发布;新写入只使用规范类型。
- 发布规则在 Skill 中可被 Agent 解释和预检,但权威执行仍只有 Main 与 Works Square避免形成第二套发布实现。
- Project Scaffold 的既有 Agent assignment 数据不再参与有效资源计算,可以原样保留;账号移除或项目禁用仍会阻止新父 Agent 获得 Skill运行中的 generation 仍按既有冻结边界切换。
- 对外分发仍需不可变 SemVer/Git 版本、服务端 bundled Release 元数据、已安装 Windows、签名 macOS 与 native Linux 运行证据;工作区测试不能替代这些发布门禁。
## Supersedes
@@ -40,4 +41,7 @@
- Source task: `20260904-project-scaffold-implementation-7e4c2a91`
- Marketplace source task: `20260904-marketplace-scaffold-client-6c4e8a21`
- Marketplace integration task: `20260904-project-scaffold-integration-client-4f2a8c71`
- Project-wide activation source commit: `300ac89a81409440aac84ff45b1d9ca2fa186629`
- Project-wide activation source task: `20260905-project-plugin-scope-7c4e9a21`
- Project-wide activation integration task: `20260905-project-plugin-scope-integration-4d8a2c71`
- Proposal: `10-decisions/proposals/20260904-project-scaffold-implementation-7e4c2a91__interactive-ai-app-type.md`

View File

@@ -4,7 +4,7 @@
| ID | Decision | Status | Date | Applies To | Detail |
|---|---|---|---|---|---|
| ADR-008 | 交互式 AI 应用使用单一规范类型,项目创建与官方 bundled Scaffold Skill、发布权威分离 | Accepted / implemented, amended 2026-09-04 | 2026-09-04 | Project creation、`ProjectType`、Official Plugins、Marketplace delivery、release readiness | `adr-008-interactive-ai-app-scaffold.md` |
| ADR-008 | 交互式 AI 应用使用单一规范类型,项目创建与项目级官方 bundled Scaffold Skill、发布权威分离 | Accepted / implemented, amended 2026-09-05 | 2026-09-04 | Project creation、`ProjectType`、Official Plugins、Marketplace delivery、project-wide activation、release readiness | `adr-008-interactive-ai-app-scaffold.md` |
| ADR-007 | AI Design 采用单一 Current Specification、Living Form 与不可变 Quote 的 V2 权威 | Accepted / implemented | 2026-08-30 | AI Design Renderer、Electron Main、Works Square V2 API | `adr-007-ai-design-living-form-v2.md` |
| ADR-002 | Robot V1 采用 Main 门控的引导式热点配网并衔接现有六位 Binding | Accepted / implemented, default on | 2026-08-16 | Robot Renderer、Host API、Electron Main、现有固件热点入口 | `adr-002-robot-guided-hotspot-binding-v1.md` |
| ADR-003 | Robot 配网页内扫描并连接 Windows/macOS 热点 | Accepted / implemented with physical release gates pending | 2026-08-16 | Robot Renderer、Host API、Electron Main、Windows WLAN、macOS CoreWLAN/CoreLocation | `adr-003-robot-in-app-hotspot-connection.md` |

View File

@@ -6,15 +6,15 @@
|---|---|---|---|
| Marketplace catalog and Account Library | Signed-in Renderer intent | bounded Host API → Main Marketplace client/cache → Works Square catalog, Library, resolve, Admission, and download APIs | Main binds requests to the current Account and response generation. Free acquisition changes only Account Library; it does not install, enable a project, assign an Agent Skill, or authorize runtime execution. |
| Marketplace device installation | Account Library entry and explicit channel | Main resolve/Admission/download → descriptor/signature/archive/client compatibility verification → immutable Package Store index switch | Stable and explicit Beta remain distinct even when they resolve to the same immutable Release. Failed install/update retains the previous current release; explicit uninstall waits only for protecting worker/account references and completes after the final worker exits. |
| Official bundled Plugin acquisition | Account Library entry for Game Resource or Project Scaffold | server stable bundled Release/Admission + exact MakeLore resource package | Free acquisition changes Library only; project enablement and Agent assignment remain separate. No device download, update, Beta, artifact signature, or device-uninstall action exists for either code-owned identity. Game Resource is hosted; Project Scaffold is `skill_only` and may execute only its bundled `.mjs`. Historical Hosted Web Search entries are ignored. |
| Official bundled Plugin acquisition | Account Library entry for Game Resource or Project Scaffold | server stable bundled Release/Admission + exact MakeLore resource package | Free acquisition changes Library only and project enablement remains separate. Game Resource also retains Agent assignment; Project Scaffold is the project-wide `skill_only` exception and needs no assignment after project enablement. No device download, update, Beta, artifact signature, or device-uninstall action exists for either code-owned identity. Project Scaffold may execute only its bundled `.mjs`; historical Hosted Web Search entries are ignored. |
| Selected-model Web Search | Parent Pi turn with an explicitly supported selected model | `makelore_web_search` core tool → frozen model/provider/credential request with provider-native forced search → ordinary model response/usage | No Marketplace Release, Account Library, Admission, Hosted Web Search client, Plugin Charge, or `agent_browser` fallback participates. Unsupported selected models expose no tool; child workers receive none. |
| Conversation-driven Device Package install | Agent tool inspects npm/Git/absolute local Plugin/loose Skill source | Main preview → distinct later user confirmation → immutable device-package generation → new/idle parent worker resources | Renderer has no install picker. Lifecycle scripts never run. Pi extensions and non-empty Skill `scripts/` are disclosed as desktop-user executable code before confirmation. Active workers retain their frozen generation until the turn settles; child workers remain empty. |
| Effective Plugin worker snapshot | Installed trusted package or acquired official bundled definition + project selection + Agent assignments + current server policy | effective resolver → Registry/resource loader/Extension Host/tool catalog → parent Pi worker | One frozen snapshot supplies Skills, tools, package roots, and runtime authorization. Disable, account/project switch, logout, Renderer crash, Main shutdown, or worker generation change invalidates future actions without mutating persisted unknown assignments; child workers receive no Plugin projection. |
| Effective Plugin worker snapshot | Installed trusted package or acquired official bundled definition + project selection + applicable Agent assignments + current server policy | effective resolver → Registry/resource loader/Extension Host/tool catalog → parent Pi worker | One frozen snapshot supplies Skills, tools, package roots, and runtime authorization. `makelore.project-scaffold` derives its applicable Skill set directly from project enablement; other Plugin assignments remain authoritative. Disable, account/project switch, logout, Renderer crash, Main shutdown, or worker generation change invalidates future actions without mutating persisted unknown assignments; child workers receive no Plugin projection. |
| Hosted Game Resource operation | Eligible parent `makelore.game-resource` tool call plus explicit confirmation | frozen Plugin adapter → capability Registry → Main `GameResourceClient` → fixed Works Square game-resource route → provider-neutral receipt/result | Server policy owns pricing, payer, Admission and receipt state. Stable logical operation identity survives response loss/Main restart; `submission_unknown` is not replayed as a fresh request. Result saving uses a bounded project-relative path and the existing project write lease. |
| 桌面认证生命周期 | Renderer 登录、刷新与注销请求 | Host API → Main Works Session → Works Square `/api/auth/{login,mobile-login,refresh,logout}` → one-feel auth | Main 加密持有并先持久化轮换 token客户端不携带 OAuth client secret连续 7 天未使用才清除会话,终止性 `400`/`401` fail closed |
| 用户模块入口策略 | 会话恢复 / 登录 / 刷新 | Electron Main → Works `/api/auth/me` → 四布尔安全投影 → Renderer auth store → 卡片/路由/provider gate | 缺失对象或字段默认 `true``design` 映射 `painting`;终止性 `401` 清理 Main/Renderer 会话;全局 `/settings` 不受 Code gate |
| 项目创建 | 新建项目对话框 | Host API → Main 项目初始化 | 固定 `interactive_ai_app``custom`,只生成 `.makelore/project.json``knowledge/`;历史双类型在读取边界归一,不因读取改写 |
| 显式项目脚手架 | 用户已获取项目启用并分配给 Agent 的 Project Scaffold Plugin 明确要求初始化 | Pi `bash` + 项目 write lease → `MAKELORE_NODE_EXECUTABLE` → bundled `makelore-project-scaffold` 脚本 | 固定六文件目标;全量预检、不覆盖、受控失败只回滚本次路径;不安装依赖、不联网、不构建、不上传、不提审;下载 artifact 不参与 |
| 显式项目脚手架 | 用户已获取项目启用的 Project Scaffold Plugin 明确要求初始化 | Main-owned effective resolver 自动向该项目父 Agent 提供 Skill → Pi `bash` + 项目 write lease → `MAKELORE_NODE_EXECUTABLE` → bundled `makelore-project-scaffold` 脚本 | 不要求伙伴分配child 仍为空。固定六文件目标;全量预检、不覆盖、受控失败只回滚本次路径;不安装依赖、不联网、不构建、不上传、不提审;下载 artifact 不参与 |
| 一键提交 | `ProjectPublishAction` | Renderer capability → Host API → Main 本地 npm/Vite build → built snapshot preflight → source+built+contract 上传 | 只对规范交互式 AI 应用(含读取时归一的历史别名)开放;首次 create 通过单一 multipart 合同原子提交文字资料与必选 PNG/JPEG/WebP 封面,创建失败或冲突不上传版本;已有 draft/published 只提交版本并沿用云端资料/封面,不做无条件 metadata PATCH |
| 构建产物预检 | Main-owned built snapshot | 一次性 loopback origin → fresh Electron WebContents/CDP桌面、移动 | 检查错误、白屏和外域;不调用 Playwright检查与上传归档相同字节但不产生可信 receipt |
| 提交绑定 | 云端成功上传响应 | Main → submission binding v2 | 只持久化成功的 app/version/review/hash落盘失败返回固定告警但不反转提交 |

View File

@@ -6,7 +6,7 @@
|---|---|---|
| `electron/coding-plugins/manifest.ts`, `release-descriptor.ts`, `signature-verifier.ts`, and `trusted-keys.ts` | Closed Plugin package/descriptor parsing, fixed code-owned resource roots, compatibility checks, canonical archive validation, and Ed25519 trust | Data Service plus exact Game Resource and Project Scaffold roots are code-owned. Other schema-2 packages still pass descriptor/signature/archive validation; downloadable P0 Skill assets remain text/image-only. Hosted Web Search is not a current Plugin root. |
| `electron/coding-plugins/account-plugin-cache.ts`, `marketplace-client.ts`, and `package-store.ts` | Main-owned Account Library cache, authenticated server client, and atomic immutable device installation store | Account acquisition and device installation are separate. Package bytes switch atomically only after descriptor, signature, archive, client-range, and provenance checks; failed updates preserve the prior current release. |
| `electron/coding-plugins/effective-resolver.ts`, `registry.ts`, `project-service.ts`, and `electron/coding-runtime/pi/**` | Effective official Plugin projection, selected-model tools, Device Package resources, and frozen parent logical-thread runtime snapshot | Project enablement and Agent Skill assignment are preserved independently. Trusted Marketplace artifacts, exact acquired official bundled definitions, and immutable local Device Package generations enter through distinct authorities. Child workers remain empty; active threads retain frozen resources until settlement/disposal. |
| `electron/coding-plugins/effective-resolver.ts`, `registry.ts`, `project-service.ts`, and `electron/coding-runtime/pi/**` | Effective official Plugin projection, selected-model tools, Device Package resources, and frozen parent logical-thread runtime snapshot | Project enablement and Agent Skill assignment are preserved independently except for the code-owned `makelore.project-scaffold` project-wide predicate: after Account acquisition and project enablement, all parent Agents receive its Skills without assignment. Trusted Marketplace artifacts, exact acquired official bundled definitions, and immutable local Device Package generations enter through distinct authorities. Child workers remain empty; active threads retain frozen resources until settlement/disposal. |
| `electron/coding-runtime/pi/model-tools/**` and `shared/model-tools.ts` | Closed selected-model tool registry and provider-specific Web Search request shaping | The frozen selected model capability controls whether `makelore_web_search` exists. The tool uses that model/provider/credential and normal model billing; no Hosted Plugin adapter, Admission, Plugin Charge, or browser fallback exists. |
| `electron/coding-packages/**`, `electron/api/routes/device-packages.ts`, `shared/device-packages.ts`, and `src/stores/device-packages.ts` | Main-owned conversation install preview/confirmation/commit, immutable local package generations, safe Renderer projection, and parent-worker refresh | Sources are npm, Git, absolute local Plugin directories, or loose `SKILL.md`. Lifecycle scripts are disabled; executable extensions and non-empty Skill `scripts/` run with desktop-user authority after disclosure and explicit confirmation. Every generation projects all explicitly installed and currently enabled Skills/extensions; Device Packages never join Account Library, Marketplace Package Store, Release, Channel, or Admission state. |
| `electron/coding-plugins/adapters/game-resource.ts` and `electron/services/game-resource-client.ts` | Provider-neutral `makelore.game-resource` hosted tool adapter and Main-owned Works Square transport | Tools materialize only from an eligible frozen `platform_hosted` parent snapshot. Metered mutations require explicit confirmation and stable logical operation identity; Renderer/Pi never receive Provider URLs, credentials, balances, raw responses, or Provider job IDs. |

View File

@@ -11,7 +11,7 @@ Makelore 是 Electron 桌面客户端。Renderer 负责项目操作与状态展
| Renderer | 项目配置、一键提交状态 | 不接触账号 Token、ZIP、幂等键或本地绝对路径 |
| Host API | 校验本地项目请求并投影安全响应 | 发布 mutation 还必须通过 Renderer capabilityHost token/base 不能单独触发发布 |
| Project Configuration | 保存不可变 `ProjectType`,原子创建最小项目空间 | 只生成 `.makelore/project.json``knowledge/`;规范类型为 `interactive_ai_app` / `custom`,历史双类型只在读取边界归一 |
| Project Scaffold Skill | 显式生成固定版本的交互式 AI 应用起步文件,并提供发布准备度指导 | 官方 `makelore.project-scaffold` bundled Marketplace Plugin完整预检、不覆盖、受控回滚不安装依赖、不联网、不构建、不上传、不提审 |
| Project Scaffold Skill | 显式生成固定版本的交互式 AI 应用起步文件,并提供发布准备度指导 | 官方 `makelore.project-scaffold` bundled Marketplace Plugin账号已获取且项目启用后自动提供给每个父 Agent不需要伙伴分配child 为空;完整预检、不覆盖、受控回滚,不安装依赖、不联网、不构建、不上传、不提审 |
| Project Release Builder | Main-owned 安全快照、本地 npm/Vite 构建、双归档与 artifact contract | 固定 npm 11.6.2Vite 由项目 lockfile 锁定;产物与预检使用同一内存字节 |
| Works Session & Remembered Password | Main-owned 登录、刷新、注销、七天真实活动滑动续期与可选密码回填 | 登录、刷新、注销统一经过 Works Square轮换凭据由 Main 安全持有和持久化。记住密码使用独立的 packaged-only OS 加密记录,不进入 Renderer 持久状态或 Works Square客户端不携带 OAuth client secret |
| Module Access Policy | Main-owned `/api/auth/me` projection → Renderer auth state → module chooser/router | Renderer 只接收 Code/Canvas/Learning/Robot 四个布尔值;缺失对象或字段默认开启,服务端 `design` 映射客户端 `painting` |
@@ -24,7 +24,7 @@ Makelore 是 Electron 桌面客户端。Renderer 负责项目操作与状态展
| Pi Conversation Runtime | 一个长驻 Pi `0.84.2` Agent Server 承载每条 active/warm Conversation 的隔离逻辑 Runtime/Session/JSONL channel | 严格 LF JSONL RPC、generation recovery、Snapshot hydration正式包从 staged `pi-runtime` manifest/root 定位并校验 Pi 包入口top-level 逻辑 turn 并发 4、warm idle LRU 8Server 退出统一使旧 channel 失效并按需单实例重启 |
| Pi Provider & Managed Resources | Provider catalog、thread-local secret projection、model/resource revision、Prompt/Skill/extension materialization、selected-model tools | 父凭据只进入选中逻辑线程的内存 credential storechild 凭据只进入该短命进程Works `model_capabilities` 由 Main 严格归一化并作为安全 Provider metadata 持久化。Web Search 仅在精确 capability 存在时随冻结的 selected model/provider/credential 进入 parent tool catalog并走普通模型计费不回退 `agent_browser` 或独立 Hosted Provider。服务端 reasoning levels 优先于本地 profile缺字段则清理 override 并回退;不扫描项目或用户的 `.pi/.agents/.codex`,不把 secret 或原始响应放进 argv、catalog 或 Renderer |
| Pi Extension, Subagents & Lifecycle | 必需的生成式 Makelore extension、Main 显式选定的已安装 extensions、UI interaction、ephemeral child、write lease 与 background run lease | Makelore bridge 固定为首个 extension其余选定 extension 全部经 Pi 的 explicit additional paths 加载且 ambient discovery 关闭child 并发 4、单次最多 8、禁止递归active/uncertain run 不因页面隐藏或 confirmation timeout 被停止replacement/stop 必须可解释并清理所有 ownership |
| Official Bundled Plugins | Acquired code-owned bundled Game Resource / Project Scaffold package → project enablement and Agent assignment → effective parent snapshot | 两者都不经过设备下载、更新、Beta 或 artifact 签名。Game Resource 进入固定 Works Square hosted routeProject Scaffold 仅提供 Skill `.mjs` 来自签名客户端固定资源。Marketplace 下载包仍只接受 P0 文本/图片资源child 不继承 Plugin。 |
| Official Bundled Plugins | Acquired code-owned bundled package → project enablement → effective parent snapshot | 两者都不经过设备下载、更新、Beta 或 artifact 签名。Game Resource 仍要求 Agent assignment 并进入固定 Works Square hosted routeProject Scaffold 是项目级 `skill_only` 例外,项目启用后自动进入每个父 Agent `.mjs` 来自签名客户端固定资源。Marketplace 下载包仍只接受 P0 文本/图片资源child 不继承 Plugin。 |
| Device Packages | Conversation install tools → Main-owned inspect/preview/confirm/commit → immutable local generation → parent Skill/Pi-extension resources | 支持 npm、Git、绝对本地 Plugin 目录与 loose `SKILL.md`没有可见安装入口、Account Library、Release、Admission 或 Marketplace Package Store。可执行 extension 与非空 Skill `scripts/` 拥有桌面用户权限,必须披露并独立确认;生命周期脚本禁用。每个 generation 包含所有显式安装且当前启用的 Skill/extension新/idle parent 自动刷新active parent 在 turn settled 后刷新child 始终为空。 |
| AI Design Workspace & Living Form | 一个 Workspace 的当前 Direction、Current Specification、持久 Agent Session、conversation timeline、Tasks 与 Assets | 自然对话是主创作面Living Form 仅以“AI 已理解”的紧凑辅助摘要与可选手动调整投影服务端 Current SpecificationRenderer 只持有草稿和已接受投影 |
| AI Design Input & Reconciliation | Chat、字段/集合编辑、decision、proposal、lock、Asset binding 与 restore | 全部进入同一 `design.input.apply` reducer稳定 command/operation ID 支持 unknown-result 重放revision conflict 刷新权威状态;待提交 chat 从同一 pending operation 临时投影assistant delta 只能在匹配该 operation 的一个未完成助手气泡中临时绘制且不生成独立整理进度栏 |

View File

@@ -4,6 +4,19 @@ This file is the integrated default-branch snapshot. Feature tasks record progre
## Integrated Through
- Project Scaffold project-wide activation source
`300ac89a81409440aac84ff45b1d9ca2fa186629` from task
`20260905-project-plugin-scope-7c4e9a21` is integrated onto local `main` as
`6710527e8f7150a6c4997d566a380454e33f455e`. The code-owned
`makelore.project-scaffold` remains Account-acquired and project-enabled, but no longer
has an Agent-assignment gate or partner-assignment action. Main now materializes its
complete Skill set for every parent Agent in the enabled project; child Agents remain
empty, active generations keep their existing freeze boundary, and all other Plugins
retain their assignment semantics. Source verification passed 45 focused and 87
adjacent tests, typecheck, lint with 0 errors/5 unchanged warnings, pressure, and all
Vite targets. One unrelated two-second Pi real-process timing assertion failed in the
ordinary full run and passed 6/6 in isolation. A rebuilt/installed-client smoke remains
pending; local source integration does not replace an already installed binary.
- Unified Plugin workspace bundled-delivery fix source
`6bd9287c879dca93da11e17533f84e3535fc656a` from task
`20260905-plugin-download-action-6c8e4a21` is integrated onto local `main` as
@@ -36,8 +49,10 @@ 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; other Plugins retain assignment.
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
@@ -786,4 +801,4 @@ Robot 绑定设备默认先显示“引导配网 / 已有激活码”路径选
## Last Updated
2026-09-04
2026-09-05

View File

@@ -1,116 +0,0 @@
# Task: Make project-scoped Plugins active without partner assignment
## Identity
- Task ID: 20260905-project-plugin-scope-7c4e9a21
- Mode: Feature
- Branch: codex/20260905-project-plugin-scope-7c4e9a21-project-plugin-scope
- Worktree: D:\Datas\OthersProjects\.codex-worktrees\makelore\20260905-project-plugin-scope-7c4e9a21
- Base commit: d642d7607c26dee01ef65b4e70dd756465dea16a
- Owner: codex-root
- Status: Ready for Integration
## Scope
- Reproduce whether the code-owned bundled `makelore.project-scaffold` Skill is
currently excluded from a parent Agent when the Plugin is acquired and enabled for
the project but not explicitly assigned to that Agent.
- Change only Project Scaffold activation semantics so project enablement is sufficient
for parent-Agent materialization; preserve Account Library acquisition, child-worker
emptiness, frozen worker generations, and every other Plugin's assignment behavior.
- Remove Project Scaffold's partner-assignment action/status from the unified Plugins
workspace and add focused runtime plus Renderer regressions.
- Record the accepted user decision as an Integration promotion candidate; this Feature
task does not edit canonical architecture, domain, or ADR files.
## Intent And Constraints
- Concurrent Task Gate: Passed. The exact owner/worktree/branch/base identity was
verified through `task_context.py status --json`; related Plugin download/status
tasks are Ready for Integration and have no active writer overlapping this scope.
- Planning Gate: Passed after loading the project entry docs, current state, decision
index, ADR-008, architecture/data flow/module map, business rules, success criteria,
glossary, evidence, reflection, commitments, stale items, and relevant peer records.
- Project Context Loaded:
- Positioning: MakeLore Code is a Main-owned Pi runtime whose Plugin state is projected
through existing Marketplace/project/Agent authorities rather than Renderer-owned
lifecycle state.
- Current focus: official bundled Project Scaffold delivery and unified `/plugins`
presentation are already integrated; the remaining question is activation scope.
- Applicable decision: ADR-008 previously required acquisition, project enablement,
and Agent assignment. The user's explicit 2026-09-05 decision supersedes only the
assignment requirement for Project Scaffold.
- Architecture boundaries: effective resolution remains Main-owned; Renderer only
projects actions. Parent workers may receive the Skill, child workers remain empty,
and active workers keep frozen resources until replacement/settlement.
- Current state: `makelore.project-scaffold` ships in the signed client and has no
device download path; Account acquisition and project enablement remain distinct.
- Known risk: hiding the UI assignment action without changing the effective resolver
would leave the Skill unusable; broadening all Plugin Skills would silently alter
unrelated assignment semantics.
- Relevant commitment: final packaged Project Scaffold activation still requires a
rebuilt client and installed-client smoke; workspace tests do not prove that step.
- Relevant peers: the bundled-status integration and device-action-gap tasks only
correct delivery presentation/package evidence; neither changes activation scope.
- TDD boundary: first assert the public effective-resolver and Plugins-page behavior at
acquired + project-enabled + unassigned state, then implement the narrowest shared
activation-scope rule that makes those assertions pass.
- Do not modify the occupied client root, Server, Marketplace contracts, Package Store,
billing, hosted execution, local Device Packages, or unrelated Plugin assignments.
## Outcome
- Confirmed the defect at the Main-owned effective-resolver seam: an acquired,
project-enabled Project Scaffold Plugin with no Agent assignment was rejected as
`skill_unassigned`, so removing only the Renderer action would not have activated it.
- Added one narrow code-owned project-wide activation invariant for
`makelore.project-scaffold`. Its full Skill set now materializes for every parent Agent
after Account acquisition and project enablement; disabled projects remain blocked and
child Agents remain empty.
- Updated the unified Plugins workspace so Project Scaffold no longer offers partner
assignment. Cards and details now describe its scope as `随项目启用` / `生效范围`.
- Preserved existing assignment behavior for Game Resource, Data Service, Marketplace,
and local Plugins. No manifest schema, server contract, Package Store, billing, or
worker-lifecycle authority was added.
## Verification
- TDD RED: the focused resolver/model/page slice produced 3 expected failures and 42
passes: Project Scaffold returned `skill_unassigned`, the assignment command remained,
and the project-wide scope copy was absent.
- Focused GREEN: 3 files / 45 tests passed.
- Adjacent Plugin/runtime regression: 12 files / 87 tests passed, including effective
resolution, composition, lifecycle, manifest/routes, Pi resource/worker opening,
Project Scaffold, and unified Plugins projection/controller/query/page behavior.
- `corepack pnpm run typecheck`: passed.
- Scoped ESLint: passed. Full `corepack pnpm run lint:check`: 0 errors and 5 unchanged
warnings in untouched Home/Makelore files.
- Full regular unit suite: 225 files passed and 1 unrelated real-process timing test
failed (`pi-agent-server-process-real`, 2630 ms against a 2000 ms threshold); 1888 tests
passed and 2 skipped. The exact failed file then passed in isolation, 6/6.
- Isolated pressure suite: 1/1 passed.
- `corepack pnpm run build:vite`: Renderer, Main, Preload, and utility builds passed with
existing Browserslist/import/chunk warnings.
- `git diff --check`: passed.
## Follow-ups
- The Integration task must promote the Project Scaffold activation rule into ADR-008,
module map, data flow, and business rules, then rebuild/install the client and smoke-test
an acquired + project-enabled + unassigned parent Agent. Workspace tests do not prove
the installed-client generation was replaced.
## Promotion Candidates
- Update ADR-008, module map, data flow, and business rules during Integration so
`makelore.project-scaffold` is documented as account-acquired + project-enabled and
automatically available to parent Agents, with no partner-assignment state.
- Evidence: focused resolver RED reproduced `skill_unassigned`; the corrected focused
and adjacent suites pass while Game Resource retains `open_agent_assignment`.
- Future impact: Plugin activation-scope changes must update the code-owned scope
predicate and both Main/Renderer regressions; Project Scaffold assignments already
stored in project data become inert but may remain preserved.
- Semantic conflict: supersedes only ADR-008's assignment requirement for Project
Scaffold, not the general assignment model for other Plugins.
- Human confirmation required: No; the user explicitly chose project-level activation
on 2026-09-05.

View File

@@ -0,0 +1,105 @@
# Task: Integrate project-wide Project Scaffold activation
## Identity
- Task ID: 20260905-project-plugin-scope-integration-4d8a2c71
- Mode: Integration
- Branch: main
- Worktree: D:\Datas\OthersProjects\makelore
- Base commit: d642d7607c26dee01ef65b4e70dd756465dea16a
- Owner: codex-root
- Status: Ready for Integration
## Scope
- Integrate reviewed source commit `300ac89a81409440aac84ff45b1d9ca2fa186629`
onto local client `main` from exact base
`d642d7607c26dee01ef65b4e70dd756465dea16a`.
- Promote the accepted Project Scaffold activation exception into canonical project
memory: Account acquisition and project enablement remain required, but explicit
partner assignment is not; all parent Agents in the enabled project receive the
Skill and child Agents remain empty.
- Preserve every other Plugin's assignment behavior and the three pre-existing
untracked task records in the root worktree byte-for-byte.
## Intent And Constraints
- Concurrent Task Gate: Passed. The completed prior Integration owner was released
only after confirming the root had no tracked changes and exactly the three
previously adopted untracked task records. This task then acquired `main` from the
exact base using `--adopt-existing`; no active task owns the same product paths or
semantics.
- Planning Gate: Passed after loading the entry memory, current state, decision index,
ADR-008, architecture overview/module map/data flow, business rules, success
criteria, glossary, evidence, reflection, commitments, stale items, the source task
record, and the prior Integration record.
- Project Context Loaded:
- Positioning: MakeLore Code uses Electron Main as the Plugin/runtime authority;
Renderer pages project state and issue existing commands rather than owning a
second lifecycle model.
- Current state: Project Scaffold is a code-owned bundled Skill delivered with the
client, but the prior effective resolver still required Agent assignment after
Account acquisition and project enablement.
- Applicable decision: the user's explicit 2026-09-05 decision amends only
`makelore.project-scaffold` to be project-wide. It does not remove assignment from
Game Resource, Data Service, local packages, or other Marketplace Plugins.
- Architecture boundary: parent workers receive the Scaffold Skill from the
Main-owned effective resolver; child workers remain empty and running generations
stay frozen until their normal replacement/settlement boundary.
- Known risk: updating only the UI would leave runtime materialization blocked;
generalizing the exception would silently change unrelated Plugin authorization.
- Relevant commitment: source/build verification does not prove that an already
installed client has been rebuilt and replaced; that remains a release smoke step.
- Apply the source with `git cherry-pick --no-commit`, adopt its exact task record before
committing, and verify the source/product trees. This follows the recorded
Integration reflection and avoids committing an unowned source record.
- Do not push, publish, package, deploy, reset, stash, clean, or modify the three
pre-existing untracked task records.
## Outcome
- Applied reviewed source `300ac89a81409440aac84ff45b1d9ca2fa186629`
from its exact parent with `git cherry-pick --no-commit`, adopted the unchanged
source task record, and committed the product change on local `main` as
`6710527e8f7150a6c4997d566a380454e33f455e`.
- Confirmed the source and product commit trees are identical at
`7391af053cfc30bd4100cc24590c6560297affdd`; the integration introduced no conflict
resolution or behavioral delta.
- Promoted the accepted project-wide activation rule into ADR-008, the decision index,
system overview, module map, data flow, business rules, current state, evidence, and
release commitment. General Plugin assignment remains intact; only Project Scaffold
has no assignment gate.
- Removed the duplicate source task record only from the `main` documentation
checkpoint. The source branch and its task record remain unchanged and auditable.
- Preserved the three pre-existing untracked task records byte-for-byte and did not
stage, commit, delete, move, or otherwise modify them.
## Verification
- Integration-specific checks:
- source parent equals integration base `d642d7607c26dee01ef65b4e70dd756465dea16a`;
- staged source task record hash matched the source commit before product commit;
- source/product Git tree equality passed at
`7391af053cfc30bd4100cc24590c6560297affdd`;
- `git diff --check` passed for both the product patch and documentation checkpoint;
- `check_project_docs.py` passed.
- Adopted reviewed source evidence because the root checkout has no installed
`node_modules`: TDD RED produced 3 expected failures/42 passes; focused GREEN passed
45 tests; adjacent Plugin/runtime regression passed 87 tests; typecheck passed; full
lint had 0 errors/5 unchanged warnings; pressure passed 1/1; all Vite targets passed.
- Source full regular unit run passed 1,888 tests with 2 skips and one unrelated
two-second Pi real-process timing miss; that exact file passed 6/6 in isolation.
- Task-aware documentation drift and task-context completion are required after the
documentation checkpoint commit and are recorded by the final Integration gate.
## Follow-ups
- Rebuild and install a client from this `main`, then smoke-test an Account-acquired,
project-enabled, unassigned Project Scaffold with two parent Agents and one child:
both parents must see the Skill and the child must remain empty. This is a release
acceptance step, not a blocker for the local source merge.
## Promotion Candidates
- None. The feature task's confirmed semantic promotion is incorporated in this
Integration checkpoint.

View File

@@ -7,7 +7,10 @@
later consume Token Points, and system-included Data Service remains zero-charge.
- Account Library, Device Installation, project enablement, Agent assignment, runtime
authorization, and billing are separate states. No read, install, acquisition, or
assignment may silently advance another state.
assignment may silently advance another state. The sole code-owned activation-scope
exception is `makelore.project-scaffold`: Account acquisition and project enablement
remain separate, but project enablement intentionally makes its Skills available to
every parent Agent without creating or requiring assignment state.
- Marketplace packages become effective only after closed manifest/descriptor parsing,
canonical archive and client-compatibility checks, Ed25519 verification, immutable
Package Store selection, project enablement, Agent projection, and current server
@@ -64,9 +67,11 @@
Store, Release, Channel, Admission, project enablement, Agent assignment, or server
billing state.
- Code-owned official bundled Plugins may be `platform_hosted` or `skill_only`.
`makelore.project-scaffold` retains Account Library, project enablement, Agent
assignment, Release, and Admission state while its exact Skill/templates/`.mjs`
ship only in the signed client. Downloadable Marketplace artifacts remain P0
`makelore.project-scaffold` retains Account Library, project enablement, Release, and
Admission state while its exact Skill/templates/`.mjs` ship only in the signed client.
It is project-wide: once acquired and enabled for a project, every parent Agent receives
the Skill without partner assignment; child Agents remain empty. Downloadable
Marketplace artifacts remain P0
text/image-only and must reject `.mjs`; official bundled authority is not inferred
from provider metadata or an uploaded ZIP.
- 面向用户的 AI 编程新建流程必须在 `interactive_ai_app`(“交互式 AI 应用”)和 `custom` 中选择;`ProjectType` 是产品类型,创建后不能通过 UI 或 Host API 修改。历史 `mini_game` / `mini_program` 仅在读取边界归一为 `interactive_ai_app`,读取本身不改写配置;未传类型的兼容 API 调用按 `custom` 处理。

View File

@@ -4,6 +4,7 @@ Use this index for searchable, traceable evidence records.
| Date | Topic | Status | Source | Detail |
|---|---|---|---|---|
| 2026-09-05 | Project Scaffold project-wide parent-Agent activation | Integrated on local `main`; rebuilt installed-client smoke pending | Source `300ac89a81409440aac84ff45b1d9ca2fa186629`, product `6710527e8f7150a6c4997d566a380454e33f455e`, tasks `20260905-project-plugin-scope-7c4e9a21` / `20260905-project-plugin-scope-integration-4d8a2c71`, ADR-008 | An acquired and project-enabled `makelore.project-scaffold` now enters every parent Agent without partner assignment; child Agents remain empty and every other Plugin keeps its assignment semantics. TDD reproduced the old `skill_unassigned` boundary, then 45 focused and 87 adjacent tests, typecheck, lint, pressure, and all Vite targets passed. The ordinary full suite had one unrelated two-second real-process timing miss among 1,888 passes/2 skips; that file passed 6/6 alone. No package/install smoke is claimed. |
| 2026-09-03 | Device Package packaged prepare 与全部已启用资源加载 | Integrated on local `main`; rebuilt installed-client activation pending | Prepare source `5a2f0eb6785b59d8b455ed5cb1d9773351ff895a`, activation source `17664c5fffcfe695653b4146503e645f54767c4b`, tasks `20260902-local-skill-install-fix-6b3e91a4` / `20260903-load-installed-resources-8f3c1a72`, verified candidate `bd377c9`, main promotion task `20260903-promote-installed-resources-main-5c8e1a72` | Packaged package inspection now uses the distributed physical Pi runtime instead of importing an incomplete `app.asar` graph; closed Device Package failures remain closed across the bridge. The parent Agent Server keeps its generated Makelore extension first, passes every further Main-selected installed/enabled extension through Pi `0.84.2` `additionalExtensionPaths`, retains every selected Skill path, and keeps ambient discovery off. Packaged prepare without commit passed for loose `SKILL.md`, npm, and Git/Ponytail; a real Agent Server loaded two external extensions and exposed both commands. Across the two source tasks, focused tests, 222 files / 1,815 full unit tests / 2 conditional skips, pressure, typecheck, scoped lint, production build, Windows packaging, and artifact/Pi verification passed. The currently installed 1.2.6 client was not replaced, so no live installed-client success is claimed. |
| 2026-09-03 | Packaged Pi runtime-root resolver and local unsigned macOS arm64 artifact | Integrated locally; exact mounted-image bootstrap passed; signed release gate remains open | Source `5d7a235`, merge `4babd6d`, task `20260902-build-unsigned-mac-9d7e4a2c` | Node 24 did not honor the parent URL previously passed to `import.meta.resolve`, so an installed Agent Server searched beside the product resource script instead of staged `pi-runtime`. The replacement uses `findPackageJSON` from the explicit runtime manifest, selects the package import entry, rejects path escape, and imports the exact file URL. Focused real-process, full unit, typecheck, lint and Vite build passed at source. The corrected local-only unsigned DMG is 315,653,270 bytes with SHA-256 `6d0216da6c30f7fed537041b37c69811b8e025af3e9cccf85a64c690e29ecb7b`; direct initialize/shutdown passed both unpacked and from a read-only mounted image. It is not signed, notarized, published, or complete cross-platform evidence. |
| 2026-09-03 | Makelore Code foreground Snapshot reconciliation and attention-only Conversation markers | Integrated locally; installed-app cause correlated and source regression suites passed | Foreground source `7aa118b` / merge `04320dd`, badge source `f2c3755` / merge `bbfe16d`, tasks `20260903-diagnose-recurring-stall-a83f5c21` and `20260902-conversation-badge-a7c49e` | The diagnosed installed run had already persisted an aborted terminal and Main had completed it with `project_deactivated`; no tool child or network work remained, while Renderer retained a cached `live` Snapshot. Coding now closes stale SSE on `lifecycle:sleep` and refreshes the selected Main-owned Snapshot on view/project context, visibility, and focus without replaying any mutation. Hidden red markers now arise only for a new pending interaction or a new completed/failed/aborted run, not assistant/thinking/tool progress or an individual tool failure. Source verification covered 45 focused foreground tests, 28 focused badge-store tests, full suites, typecheck, lint, production builds, and real Electron regressions. |

View File

@@ -13,7 +13,7 @@ Track future-facing memory: promised follow-ups, unfinished loops, timed checks,
| 2026-08-16 | 验收 Prompt Museum 与 Canvas 删除/重报价的真实服务端链路 | 发布包含 `26b52d7` Canvas 行为的安装包前 | 客户端/服务端集成 | Pending | 使用真实 Works 账号核对 Museum 列表/详情/分页/筛选/署名/CDN/Prompt 回填,并确认固定相对媒体路径可经 Main Bearer 代理、401 刷新、10 MiB/可信 raster MIME 边界后在 Renderer 展示;核对最终 Prompt/options 重报价和确认设计点;删除 Workspace 后确认软删除可见性、未提交任务取消/预留积分释放、已运行任务结算。保留 Main 错误脱敏和严格 DTO/HTTPS 投影,不以客户端回归替代服务端验收 |
| 2026-08-16 | 验收 default-on Robot Guided Hotspot Binding 的 Windows/macOS 真实设备链路 | 下一份包含页面内热点连接行为的安装包发布前 | 客户端/硬件/服务端集成 | Pending | 核对精确出货固件与固定 Portal、六位码发行/消费语义;执行 Windows Robot 真机扫描/连接、签名 macOS x64/arm64 CoreLocation/CoreWLAN/worker/ASAR/Koffi smoke以及真实 Host/native Electron 端到端配网+Binding保留 `NIANCODE_AI_HARDWARE_GUIDED_HOTSPOT_BINDING=0` 回滚并记录支持矩阵 |
| 2026-08-10 | 完成客户端提交到 App `play_url` 播放的真实生产整链验收 | source+built+contract 服务端协议、OSS immutable Release、CDN/Edge 与 App 消费链成组集成后 | 客户端/服务端集成 | Pending | 服务端先部署支持规范 `interactive_ai_app` 和历史别名的合同,再安装匹配客户端;使用真实账号执行交互式 AI 应用创建、显式 Scaffold Skill 初始化、客户端本地构建与同字节预检、双归档提交、服务端逐字节校验/不可变 Release 固化、运营批准、CDN 发布、App 播放与监控核对。旧 `mini_game` / `mini_program` 只验证兼容读取,不作为新建选项;如需不可绕过 runtime gate另行设计可信 verifier |
| 2026-08-12 | Windows/macOS 发布流水线保留固定 npm/Pi 运行时与 Device Package 产物门禁 | 每次生成正式 Windows 或 macOS 安装器时 | 客户端发布 | Partial / Pending | 运行目标平台的 publish-runtime、artifact、Pi 与 final packaged proof启动最终 Agent Server 并确认它从 staged `pi-runtime` manifest/root 初始化,再用安装后的首个 Conversation 确认不出现 runtime-unavailable 投影。安装 exact-main 客户端后,还需完成至少一个 npm/Git/loose-Skill prepare→confirm 流程,并以包含两个 extension 的已启用 Device Package generation 验证首个 Makelore bridge 与所有附加 extension/Skill 均生效、禁用项不加载、新/idle parent 刷新且 child 为空;同时完成 `makelore-project-scaffold` prepare→confirm→install→initialize验证非空 Skill `scripts/` 披露、应用 Node 路径既有文件不覆盖以及卸载不删除项目文件。源 `5d7a235` 已通过本地未签名 macOS arm64 DMG 的 read-only mounted-image initialize/shutdownDMG SHA-256 为 `6d0216da6c30f7fed537041b37c69811b8e025af3e9cccf85a64c690e29ecb7b`;当前安装的 1.2.6 客户端早于 `5a2f0eb` / `17664c5` 修复。仍需签名/公证、完整 process proof、实际替换安装与首个 Conversation、新 Windows artifact以及签名 macOS 和 native Linux 的脚手架 Skill 运行证据;不得以 prepare-only 或 workspace real-process 测试替代。 |
| 2026-08-12 | Windows/macOS 发布流水线保留固定 npm/Pi 运行时与 Device Package 产物门禁 | 每次生成正式 Windows 或 macOS 安装器时 | 客户端发布 | Partial / Pending | 运行目标平台的 publish-runtime、artifact、Pi 与 final packaged proof启动最终 Agent Server 并确认它从 staged `pi-runtime` manifest/root 初始化,再用安装后的首个 Conversation 确认不出现 runtime-unavailable 投影。安装 exact-main 客户端后,还需完成至少一个 npm/Git/loose-Skill prepare→confirm 流程,并以包含两个 extension 的已启用 Device Package generation 验证首个 Makelore bridge 与所有附加 extension/Skill 均生效、禁用项不加载、新/idle parent 刷新且 child 为空;同时以账号已获取、项目已启用但未分配伙伴的状态运行 `makelore-project-scaffold`,验证每个父 Agent 自动获得 Skill、child 为空、应用 Node 路径既有文件不覆盖。源 `5d7a235` 已通过本地未签名 macOS arm64 DMG 的 read-only mounted-image initialize/shutdownDMG SHA-256 为 `6d0216da6c30f7fed537041b37c69811b8e025af3e9cccf85a64c690e29ecb7b`;当前安装的 1.2.6 客户端早于 `5a2f0eb` / `17664c5` 修复。仍需签名/公证、完整 process proof、实际替换安装与首个 Conversation、新 Windows artifact以及签名 macOS 和 native Linux 的脚手架 Skill 运行证据;不得以 prepare-only 或 workspace real-process 测试替代。 |
| 2026-08-10 | 删除客户端 `runtime_url` 兼容回退 | 一个客户端兼容版本结束,且服务端与存量数据稳定提供 `play_url` | 客户端 | Pending | 删除类型字段、读取分支和对应回归测试 |
| 2026-08-11 | 部署并验收 AI 绘画多 Conversation 服务端契约 | 发布包含多会话客户端之前 | 客户端/服务端集成 | Pending | 确认迁移 `0033`、Conversation list/create/read/turn/confirm API、持久 Agent Session 与事件字段已上线 |
| 2026-08-12 | 复核 AI 编程 Provider 错误与重试投影 | 升级 Pi、Works gateway 或上游 Provider 错误格式时 | 客户端/Pi/provider 集成 | Pending | 重新验证确定性 Works user-context 缺失仍会 expire credential、非重试 fail fast、固定脱敏为 `CODING_PROVIDER_AUTH_REQUIRED`,并且不会被后续 `agent_settled` 改写为 completed不得把其他 401/429/5xx 扩大归类。 |