From b1373907f448642991c55840d2c9893c7af1d4b0 Mon Sep 17 00:00:00 2001 From: IsaacHuo <150095409+IsaacHuo@users.noreply.github.com> Date: Sun, 25 Oct 2026 14:51:13 +0800 Subject: [PATCH] docs: verify alpha data gates and expose uppercase PLAN (ENG-04) --- AGENTS.md | 2 +- CHANGELOG.md | 1 + plan.md => PLAN.md | 32 ++++++++++- README.md | 1 + README.zh-CN.md | 1 + docs/DECISIONS.md | 4 +- docs/ROADMAP.md | 5 +- docs/STATUS.md | 104 +++++++++--------------------------- docs/acceptance.md | 33 ++++++++++-- docs/development.md | 2 +- docs/implementation-plan.md | 4 +- docs/plugins.md | 2 +- docs/verification.md | 14 +++-- 13 files changed, 111 insertions(+), 94 deletions(-) rename plan.md => PLAN.md (75%) diff --git a/AGENTS.md b/AGENTS.md index 6d2b16b..7b34c32 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -30,7 +30,7 @@ Match verification to the scope and risk of the change. Prefer an explicitly req ## Start each task -1. Read [current status](docs/STATUS.md), [roadmap](docs/ROADMAP.md) and [decision index](docs/DECISIONS.md). Follow their links to the specification for the affected behavior. +1. Read the root [execution plan](PLAN.md), [current status](docs/STATUS.md), [roadmap](docs/ROADMAP.md) and [decision index](docs/DECISIONS.md). Keep the plan filename uppercase. Follow their links to the specification for the affected behavior. 2. Inspect the branch, HEAD, staged/unstaged changes and relevant untracked files. Existing work is part of the working context, not permission to discard or publish it. Do not automatically stash, reset, clean, stage everything, commit or switch branches to obtain a clean baseline. 3. Select one bounded task with an ID, dependencies, affected paths, observable completion conditions and exact validation commands. A new conversation should be able to finish and verify it without relying on the previous chat. Split unrelated behaviors; keep necessary API, persistence, UI and test wiring together. 4. Check existing code and tests before adding an abstraction or dependency. Record a concrete blocker when a missing decision changes scope, compatibility, data safety or authorization; continue independent authorized work. diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f1c335..79e1618 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ Delivered changes are recorded here. Version tags use `v` followed by a semantic ### Changed +- Make uppercase `PLAN.md` the visible execution-plan entry, retain historical ledgers, and map alpha data/permission gates to controlled and native-worker evidence. - Apply the approved neutral workspace design and improve launch recovery, conversation/history navigation, frozen follow-up context, material selection and provider editing. - Product, architecture, logging, architecture diagram and bilingual README now describe Platform-owned conversations, steps, human interactions and artifacts independently of runtime, model, tools and UI. - OpenCode becomes an optional future adapter; ADR 0001 preserves the historical selection with a supersession notice. diff --git a/plan.md b/PLAN.md similarity index 75% rename from plan.md rename to PLAN.md index 980341a..44fd756 100644 --- a/plan.md +++ b/PLAN.md @@ -1,4 +1,34 @@ -# OpenLab 当前产品完善计划 +# OpenLab 开发执行计划 + +更新时间:2026-10-25(Asia/Shanghai)。本文件是用户指定的计划入口,文件名固定为大写 `PLAN.md`。本次按 [ROADMAP](docs/ROADMAP.md) 的 ENG-00 至 ENG-06 顺序执行;当前事实和实际检查结果见 [STATUS](docs/STATUS.md),详细证据见 [verification](docs/verification.md)。下方保留前两轮历史台账,不把历史限制误当成本轮授权。 + +## 当前阶段:ENG-04 数据与权限验收 + +- 前置:ENG-03 已通过本地构建、57 项 Node 测试和 13 项浏览器;[PR #11](https://github.com/IsaacHuo/OpenLab/pull/11) 的 Windows/Linux/browser、actionlint、Gitleaks、required-checks 全通过,已合并至 main `c9a96f3`。 +- 范围:将 alpha 数据和权限门槛逐项映射到现有实现及测试,不改变已确认的架构。 +- 完成条件:新轮确认、权限拒绝、只读重放、取消/重启、凭据隔离、人工修订、档案 v1/v2 和跨项目引用各有通过证据;预览限制明确记录。 +- 精确验证:`node --test app/tests/platform.test.ts app/tests/runtime.test.ts app/tests/service.test.ts app/tests/store.test.ts app/tests/documents.test.ts app/tests/context.test.ts app/tests/workflow.test.ts`;本轮已运行 30 项,全部通过。 +- 交付:更新验收表、STATUS 和本文件,通过本地文档检查及精确 PR CI 后合并。 + +## 阶段清单 + +| 阶段 | 状态 | 验收出口与交付 | +| --- | --- | --- | +| ENG-00 协作入口 | 已完成 | AGENTS、路线图、状态与决策可独立读取 | +| ENG-01 收敛既有实现 | 已完成 | 项目源码、设计与许可纳入 PR #11,本地工具和研究数据排除 | +| ENG-02 文档口径 | 已完成 | 能力、限制、版本及历史证据对齐,文档检查通过 | +| ENG-03 构建与浏览器 | 已完成 | CI 独立准备 TeX;跨文档对比回归先失败后通过;本地 13 项和远程门槛通过,PR #11 已合并 | +| ENG-04 数据与权限 | 进行中 | 30 项边界测试通过,验收表与预览限制需提交并通过 PR 门槛 | +| ENG-05 alpha 候选 | 待 ENG-04 | 统一版本 `0.1.0-alpha.1`、启动说明、许可和发布说明;完整检查、构建、浏览器、actionlint、Gitleaks 及精确候选 CI | +| ENG-06 源码预发布 | 待 ENG-05 | 精确 main 的 push CI、release dry-run 通过后,按既有工作流创建不可变 tag 和 GitHub prerelease,核对版本/提交/说明一致 | + +## 执行约束和完成边界 + +2026-10-25 用户已授权连续推进上述阶段,逐阶段提交、建立或更新 PR,并在 required-checks 通过及讨论解决后合并,无需逐阶段确认。发布仍须满足 ENG-05/06 门槛;不绕过 CI,不调用付费模型,不读取或发布用户研究数据,不使用子 Agent。 + +本轮完成对象是 ENG-00 至 ENG-06 的源码预览路线,不将第二检索源、研究全文提取、任意代码执行、动态外部插件、多 Agent、安装包和团队部署等远期候选视为已经实现。候选须另行具备明确需求及验收。 + +## 历史:产品完善与插件工作台(2026-10-24) 状态:两轮实施完成,2026-10-24。基于当前工作区增量实现,保留已有未提交改动;完成后保留本文件。 diff --git a/README.md b/README.md index d7697bb..bf6befd 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,7 @@ The planned workspace combines project navigation, conversation with execution s | Document | Purpose | | --- | --- | +| [Development execution plan](PLAN.md) | Current phase, ordered tasks, acceptance exits and retained implementation history | | [Original vision, Chinese](docs/vision.zh-CN.md) | Founding product vision, preserved as supplied | | [Product specification](docs/product.md) | Users, first milestone, behavior, and acceptance criteria | | [Architecture and contracts](docs/architecture.md) | Components, research objects, and runtime interface | diff --git a/README.zh-CN.md b/README.zh-CN.md index 39aeac4..3914cdc 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -72,6 +72,7 @@ OpenLab 是开放科研平台,不是某个 Agent 框架的封装。平台持 ## 文档导航 +- [开发执行计划](PLAN.md):当前阶段、顺序任务、验收出口及既有执行台账。 - [原始产品愿景](docs/vision.zh-CN.md):保留用户提供的完整规划。 - [产品规格](docs/product.md):用户、首版流程和验收条件。 - [架构与接口](docs/architecture.md)、[技术决策](docs/decisions/0001-foundation.md)。 diff --git a/docs/DECISIONS.md b/docs/DECISIONS.md index 0b85f57..1cbf647 100644 --- a/docs/DECISIONS.md +++ b/docs/DECISIONS.md @@ -32,7 +32,7 @@ ### D-DOC-01 默认能力也通过静态插件提供 -确认时间:2026-10-24,记录于 [plan.md 第二轮](../plan.md)、[设计修订](../doc/design/workspace.md)和 [plugins](plugins.md)。 +确认时间:2026-10-24,记录于 [PLAN.md 第二轮](../PLAN.md)、[设计修订](../doc/design/workspace.md)和 [plugins](plugins.md)。 编辑器、预览、比较、编译等默认能力使用同一注册/宿主接口,可停用或替换;平台保管草稿和不可变人工修订,Agent 历史不被编辑覆盖。理由是允许逐项替换能力,同时保留研究记录与原文件。当前仅静态受信模块;没有批准外部包安装器、任意执行或不受信代码沙箱。 @@ -54,6 +54,8 @@ AGENTS 管规则、ROADMAP 管目标/依赖/验收、STATUS 管实际工作、DE ## 后续决策如何记录 +2026-10-25 计划入口修订:用户明确指定根文件名为大写 `PLAN.md`。将原小写文件按 Git 大小写更名并保留历史台账,顶部展示当前阶段与路线图清单。PLAN 提供直接可见的执行入口,ROADMAP 保管详细任务合同和依赖,STATUS 记录实际结果;不另建新的进度服务。 + 2026-10-25 后续执行授权:用户要求按现有路线图连续完成后续阶段,各阶段按既有规则提交、建立或更新 PR,并在精确修订的 required-checks 通过、讨论解决后合并,不再逐阶段请求确认。该授权允许继续 ENG-03 至 ENG-06 的验收、候选准备和通过发布门槛后的源码预发布;不绕过依赖、CI、许可或数据安全门槛,不包含真实付费模型调用或路线图以外的远期候选功能。 - 一般局部实现沿用现有代码,不为每个函数建立 ADR。跨模块职责、公共 API、档案兼容、权限/隔离、运行时、重要依赖和分发方式变化,需要记清日期、状态、理由、兼容影响、证据及取代关系;需要长篇论证时新增下一编号 ADR 并在本页链接。 diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index dc2bfae..73c115b 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -19,7 +19,8 @@ | [product](product.md)、[architecture](architecture.md)、[workspace](workspace.md)、[harness](harness.md)、[logging](logging.md) | 产品行为与架构目标;原有历史描述继续保留 | | [已确认 UI](../doc/design/README.md) | 视觉、交互、令牌与用户确认的后续修订 | | [development](development.md)、[plugins](plugins.md)、[OpenAPI](openapi.json) | 当前实现、操作方法、插件与接口契约 | -| [implementation-plan](implementation-plan.md)、[plan.md](../plan.md) | 已有迭代计划与两轮已完成执行台账;保留历史,不另抄一份任务状态 | +| [PLAN.md](../PLAN.md) | 用户指定的根计划入口:当前阶段、阶段清单和验收出口;保留前两轮历史台账 | +| [implementation-plan](implementation-plan.md) | 第一应用迭代的历史实施与验证索引;当前任务合同在本路线图,实际结果在 STATUS | | [acceptance](acceptance.md)、[verification](verification.md) | 验收场景、测试条件、实际证据及局限 | | [CONTRIBUTING](../CONTRIBUTING.md)、[maintaining](maintaining.md) | 贡献、CI、GitHub 管理与发布流程 | @@ -62,7 +63,7 @@ ### ENG-01 盘点并收敛现有改动范围(建议首先执行) - 依赖:ENG-00。 -- 范围:检查 Git 中已有改动、`plan.md`、设计规格、依赖及新文件;交付结论写入 STATUS。2026-10-25 用户授权将已有项目改动提交并推送,沿用现有 PR/CI 规则,不增加业务功能。 +- 范围:检查 Git 中已有改动、`PLAN.md`、设计规格、依赖及新文件;交付结论写入 STATUS。2026-10-25 用户授权将已有项目改动提交并推送,沿用现有 PR/CI 规则,不增加业务功能。 - 交付:按已完成行为划分待提交批次,列清依赖和遗漏文件;区分产品源码/测试/许可、已确认设计、本地 `.agents/` 与 `.codex/` 配置、`output/` 未选稿、忽略的数据和缓存。检查 tracked、staged、unstaged、untracked,不使用全量暂存。 - 完成条件:每类改动都有保留/纳入交付/待确认的处置,源码所引用的新文件不会漏交;按新增授权提交、推送项目文件并提供 PR;保留用户所有既有内容和本地工具。需要用户决定的文件列为后续集成阻塞,不妨碍完成盘点。 - 验证:`git status --short --branch`、`git diff --stat`、`git diff --cached --stat`、`git ls-files --others --exclude-standard`、`git diff --check`;逐类核对路径和 import/资源引用,STATUS 记录基线 SHA。单纯盘点无需重跑未变化的完整测试。 diff --git a/docs/STATUS.md b/docs/STATUS.md index d52dc60..f6fdce3 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -1,93 +1,41 @@ # OpenLab 当前状态与交接 -更新时间:2026-10-25(Asia/Shanghai)。ENG-02 已完成:对齐实现、历史文档与验证证据,三项文档检查通过,仅改文档。当前进入 ENG-03,优先定位真实 XeLaTeX CI 超时;ENG-04 仍等待 ENG-03 通过。用户已授权按路线图逐阶段提交、PR 和通过检查后的合并,继续至满足门槛的源码预发布。任务合同见 [ROADMAP](ROADMAP.md),已确认约束见 [DECISIONS](DECISIONS.md)。 +更新时间:2026-10-25(Asia/Shanghai)。当前任务 **ENG-04:alpha 数据与权限验收**。ENG-03 已通过精确 PR CI 并合并;本轮 30 项边界测试通过,验收映射已写入既有记录,正在准备文档 PR。用户指定的计划入口为根 [PLAN.md](../PLAN.md),详细任务合同见 [ROADMAP](ROADMAP.md),约束见 [DECISIONS](DECISIONS.md)。 -## Git 与环境快照 +## Git、授权与交付边界 -- 分支:`codex/research-acceptance`。 -- ENG-01 实现提交为 `22d6db524c08abfd4976bded081cf415b25919c1`,交接提交为 `1574645b8b8bc4da9b7559d7794540e75775724c`;ENG-02 文档提交为 `84381e2`。当前正在准备 ENG-03 修复提交,沿用 PR #11,不重复交付既有实现。 -- ENG-01 盘点开始时有 34 个受跟踪文件修改及未跟踪实现,现已按分类纳入项目提交或保留本机。ENG-02 开始时只有本页的 RUN-01 记录未提交,无暂存改动及 Git 可见未跟踪文件;本轮保留原记录,新增文档改动尚未提交。 -- 当前 Windows 环境为 Node.js `v24.19.0`、npm `11.17.0`,依赖已存在,未安装或升级。用户新授权允许后续阶段提交、PR、通过检查后合并及满足门槛的源码预发布;不调用付费模型。 -- `.openlab/`、`.cache/`、`dist/`、`test-results/` 等已有本地产物;按忽略规则保留。本轮没有读取凭据或研究项目内容。 -- 版本文件仍为 `0.0.1`。该历史发布为基础设施版;本轮不升版、不打 tag、不创建 Release。 -- PR #11 的 main 基线为 `99813c6cc890c1e3e6c080e9cc18fa5ab6ba4865`,对应工作区预览 PR #9 的 squash 提交。ENG-01 已推送既有项目改动;ENG-02 不重复交付旧功能。 -- ENG-01 遇到 SSH 网络关闭,使用单次命令 HTTPS 地址映射完成推送,未修改仓库远程配置;本轮只读取 GitHub 状态与日志。 -- [PR #11](https://github.com/IsaacHuo/OpenLab/pull/11) 仍未合并,包含 86 个项目文件;2026-10-25 重新读取精确 head 的检查,Windows/Linux 仓库、actionlint、Gitleaks 通过,浏览器 11/12、required-checks 失败。实际临时合并 checkout、环境及诊断见 [verification](verification.md#pr-11-ci-inspection-2026-10-25)。本轮文档改动没有远程 CI 结果。 - -## ENG-01 交付范围(历史) - -- 纳入:既有应用源码、测试、依赖与锁文件、构建脚本、已确认的 `doc/design/` 参考/令牌/许可、原台账、验收及协作文档。 -- 保留本机:`.agents/` 的已安装第三方 Skills(241 个文件,约 26 MB)、`.codex/` hooks、`output/design/` 的四份未选稿;在 `.gitignore` 中明确排除,文件不删除。 -- 继续排除:研究数据、保护凭据、`.openlab/`、`.cache/`、依赖目录、构建与测试产物。以精确路径暂存,不使用全量添加。 -- 同步补齐 Unreleased 变更记录,保留既有用户改动。项目文件通过新 PR 进入既有 required-checks;本次不合并 main。 - -## 实际实现进度 - -| 范围 | 本地事实 | 证据与边界 | -| --- | --- | --- | -| 工程基础 | 已有贡献、许可、安全、版本、发布脚本和 Windows/Linux/browser CI | `.github/`、`scripts/`、[maintaining](maintaining.md);本轮未运行远程管理操作 | -| 研究闭环 | 平台、SQLite/文件档案、受监督单 Agent、模型配置、Crossref、计划确认、问题/权限、取消、重放和导出已实现 | 代码与历史 57 项测试;ENG-02 未重跑;live 记录见 [verification](verification.md) | -| 日常工作区 | 连续对话、冻结上下文、材料选择、启动恢复、模型编辑、响应式黑白灰工作区已实现 | [plan.md](../plan.md) 第一轮;已纳入 ENG-01 提交 | -| 插件文档工作区 | 静态插件、Markdown/LaTeX 编辑、草稿、人工不可变修订、比较、BusyTeX、PDF.js、档案 v2 已在本地实现 | 第二轮台账、[plugins](plugins.md)、`app/tests/documents.test.ts`;v1 导入兼容 | -| 浏览器与真实 TeX | ENG-01 的 Windows 本地 12 项通过;最新 PR CI 11 项通过、真实 XeLaTeX 场景超时 | 本地使用已有缓存、隔离研究夹具;CI 根因未定,ENG-02 未重跑浏览器 | -| 后续产品能力 | 尚无第二学术提供商、可靠全文验收、任意代码执行、外部插件隔离、多 Agent、团队部署或安装包 | 这些是后续方向;元数据和模型解读不等于科学论点核实 | +- 当前分支:`codex/alpha-data-gates`,起点为 main `c9a96f3ca22fd85276ca9fb09defa1a541bd08c1`([PR #11](https://github.com/IsaacHuo/OpenLab/pull/11) squash 合并)。ENG-02 文档和 ENG-03 修复已随该 PR 交付。 +- 用户已授权按 ENG-00 至 ENG-06 顺序提交、PR、必需检查通过后合并,满足候选和精确 main CI 门槛后源码预发布;不绕过规则,不调用付费模型,不把远期候选当成已批准功能。 +- Windows x64、Node.js `24.19.0`、npm `11.17.0`;沿用锁文件和已有依赖,未升级依赖。 +- 原小写根计划已按用户要求更名为大写 `PLAN.md`,顶部补当前阶段和验收出口,保留两轮历史台账并同步链接。README 中英文导航已同步。 +- 用户研究数据、保护凭据、本地 Skills/hooks、未选稿、缓存和测试产物保留本机,不纳入源码交付。档案 v2 与 SQLite `user_version=1` 独立;v1 导入兼容。 ## 任务状态 -| ID | 状态 | 当前交接 | +| ID | 状态 | 交接 | | --- | --- | --- | -| ENG-00 | 已完成 | 完善 AGENTS,新增三个协作文档;仅改文档,保留既有台账和 ADR | -| ENG-01 | 已完成 | 范围盘点、本地验证、项目提交及推送完成;[PR #11](https://github.com/IsaacHuo/OpenLab/pull/11) 保留未合并 | -| ENG-02 | 已完成 | 文档事实、历史阶段及 CI 失败记录已对齐,三项文档检查通过;已提交 | -| ENG-03 | 进行中 | 本地构建、57 项 Node 测试及修复后的 13 项浏览器通过;CI 分离资源准备并上传失败证据,等待精确修订远程结果 | -| ENG-04 | 待开始 | 依赖 ENG-03;复核 alpha 数据与权限门槛 | -| ENG-05 | 待开始 | 依赖 ENG-04;准备版本、许可与候选证据 | -| ENG-06 | 待开始 | 本轮已授权按门槛发布;仍依赖 ENG-05 和精确 main CI | +| ENG-00 | 已完成 | 协作入口及架构约束已交付 | +| ENG-01 | 已完成 | 既有实现盘点、提交、推送,PR #11 已合并 | +| ENG-02 | 已完成 | 文档能力、限制、版本和历史证据对齐;三项文档检查通过 | +| ENG-03 | 已完成 | 本地 57 项 Node、13 项浏览器、构建和检查通过;精确 PR CI 全通过后合并 | +| ENG-04 | 进行中 | 30 项数据/权限/兼容边界测试通过,验收表已更新,待文档 PR CI 和合并 | +| ENG-05 | 待开始 | 依赖 ENG-04;候选版本、许可、启动与发布说明及精确候选 CI | +| ENG-06 | 待开始 | 已授权按门槛发布;依赖 ENG-05、release dry-run 与精确 main push CI | -## ENG-00 规划检查记录 +## 本轮实际验证 -在已有未提交实现上执行了 `npm run check`:Markdown、仓库本地链接/YAML/版本策略、服务端及浏览器 TypeScript 全通过;57 项 Node 核心/接口/治理测试通过,0 失败、0 跳过。原生 worker、Windows 凭据保护、归档与文档修订边界属于这些测试;没有真实模型或检索调用。 +- ENG-03:`npm run check`(57 项 Node,0 失败/跳过)、`npm run build`、`npm run test:browser`(13 项)、`npm run check:actions`、`npm run check:secrets`、`git diff --check` 通过。桌面/平板/手机文档截图已检查。 +- [CI 40170016084](https://github.com/IsaacHuo/OpenLab/actions/runs/40170016084):head `73ad1658c7f9f3d4d283d5221af4922668661a99` 的 Windows/Linux、独立 TeX 准备、13 项浏览器、actionlint、Gitleaks、required-checks 全通过。该结果不替代后续文档和版本候选的 CI。 +- ENG-04:`node --test app/tests/platform.test.ts app/tests/runtime.test.ts app/tests/service.test.ts app/tests/store.test.ts app/tests/documents.test.ts app/tests/context.test.ts app/tests/workflow.test.ts`:30 项通过,0 失败/跳过。均使用隔离受控夹具,未调用真实模型。 +- 本阶段 `npm.cmd run lint:markdown`(36 份)、`npm.cmd run check:repository`(159 个文件)及 `git diff --check` 通过,大写路径和链接已核对;详细阶段证据见 [verification](verification.md),alpha 门槛映射见 [acceptance](acceptance.md#alpha-data-and-permission-gates-eng-04-2026-10-25)。 -协作文档写入后,`npm run lint:markdown` 通过(36 份 Markdown),`npm run check:repository` 通过(159 个参与检查的文件),`git diff --check` 通过。对检查前的 397 个 Git 可见文件做 SHA-256 比对:仅根 `AGENTS.md` 内容改变,新增本页、ROADMAP、DECISIONS,无既有文件删除或其他内容变化。任务依赖与新增文档空白检查也通过。 +## 限制与下一动作 -上述为首次规划轮记录;该轮没有重跑构建/浏览器,也没有新增测试、依赖或 CI 机制。 +- 早期 XeLaTeX CI 超时的精确原因没有被日志证明;分离准备后的新 CI 已通过。隔离本地冷下载仍观察到 curl 35 TLS 错误,缓存分片保留,明确重试可续传;不把本地 TLS 故障等同于旧 CI 根因。 +- 预览范围保持 Windows 凭据保护、单 Crossref 元数据提供商、具日期的 DeepSeek 非思考模式兼容;没有通用全文/科学论点核实、任意代码、动态插件隔离、多 Agent、安装包或团队部署。Supervisor-Skills 不随源码分发。 +- 现有超过 500 kB 的分块提示保留;尚无用户性能测量,不为发布引入无目标重构。 +- 下一动作:完成 ENG-04 文档检查与精确 PR CI,按规则合并,再推进 ENG-05 候选准备。 -## ENG-01 推送前验证,2026-10-25 - -- `npm run check`:Markdown、仓库校验、服务端/浏览器类型与 57 项测试通过,0 失败、0 跳过。 -- `npm run build`:通过;已有超过 500 kB 分块提示仍在,不影响构建成功。 -- `npm run test:browser`:12 项通过,用时约 1.5 分钟。真实 XeLaTeX/pdflatex、中文/公式/图片/BibTeX、保留旧 PDF、Worker 取消/截止、插件替换/故障、历史/材料/模型配置及响应式场景通过;使用已有 BusyTeX 缓存,未重新验证冷缓存下载。 -- 本轮生成的文档桌面/手机截图已人工检查;截图保留在忽略的 `.cache/`,不提交用户数据或测试产物。 -- `npm run check:actions`:actionlint 1.7.12 通过。 -- `npm run check:secrets`:Gitleaks 8.30.1 历史与工作区扫描通过,输出脱敏。 -- `git diff --check origin/main...HEAD`:通过;清理了新增上下文测试文件末尾多余空行,无测试逻辑或业务行为变化。 -- 没有真实付费模型调用或新 live 检索兼容声明。远程 [PR 检查](https://github.com/IsaacHuo/OpenLab/pull/11/checks) 必须查看精确最新 head;不以本地通过替代远程门槛。本次任务完成的是提交与推送,尚未合并或发布。 - -## 已发现的问题与阻塞 - -| 项目 | 影响 | 下一步与是否阻塞 | -| --- | --- | --- | -| 原先大量未提交工作 | 已收敛到远程可审阅的项目基线,本地工具/试稿不进入交付 | 已解决;继续保留 [PR #11](https://github.com/IsaacHuo/OpenLab/pull/11) 的提交与检查证据 | -| 文档历史与当前口径 | ENG-02 已区分 45/3、45/5、51/8、57/12 的阶段,按代码说明材料/请求体限制及档案/数据库版本 | 已解决;三项文档检查通过,不改变实现或历史证据 | -| 合并门槛失败 | 精确 PR head 的浏览器和 required-checks 失败;本地历史通过不能替代远程结果 | 阻塞合并;ENG-03 优先复现并修复,ENG-04 继续等待 | -| TeX 超时根因未定 | 首次完成断言超时 125 秒;CI 未上传失败截图和 trace,冷缓存需要约 203 MB,但尚不能认定下载是根因 | ENG-03 补准备状态、编译日志及失败产物,区分资源准备和编译故障 | -| 大分块提示 | 旧构建记录提示部分 JavaScript 超过 500 kB,未提供用户性能影响测量 | 先记录,非当前发布阻塞,不安排无目标重构 | -| 全文访问、平台与许可范围 | 历史网络无法成功完成通用全文读取;原生凭据持久化为 Windows;Supervisor-Skills 再分发条款未解决 | 保留预览限制;不捆绑上游内容时不阻塞第一方源码预览,扩大声明前单独解决 | - -ENG-01 的提交、推送范围已完成;ENG-02 是本地文档修正,不解决 CI 编译失败。本地工具配置和未选稿继续保留本机;项目源码推送不等于已合并或已发布。 - -## ENG-02 文档对齐,2026-10-25 - -本轮仅修改开发、验收、验证、原实施台账、路线图、本页、安全说明和变更日志;热门项目调研的来源与采用方式收录在原有 [verification](verification.md#documentation-alignment-eng-02-2026-10-25)。两份 README 已正确区分当前源码与历史发布,保持原文;原始愿景、ADR、业务代码、API、依赖和数据格式未改。 - -实际验证(Windows、Node.js 24.19.0、npm 11.17.0):`npm.cmd run lint:markdown` 通过(36 份 Markdown),`npm.cmd run check:repository` 通过(159 个文件),`git diff --check` 通过;逐项对照服务/存储代码、既有兼容测试与具日期的验证记录。本轮不重跑历史应用测试、构建、浏览器或 live 调用;未安装依赖、提交、推送或触发远程重跑。 - -## 下一次对话入口 - -ENG-03 本地进展:补充了先失败后通过的跨文档对比回归,修复旧修订 ID 误读;`npm run check`、构建、13 项浏览器、actionlint 和 Gitleaks 通过。隔离冷缓存下载失败并可断点续传;它与既有 CI 超时的因果关系尚未证明。具体命令、故障与截图边界见 [verification](verification.md#eng-03-reproduction-and-local-repair)。下一动作:推送修复至 PR #11,检查独立准备步骤和浏览器结果,门槛通过后合并并进入 ENG-04。 +## 保留的本地预览记录 2026-10-25,RUN-01 本地预览:按用户要求以隐藏后台进程启动 `node app/main.ts`,复用已验证的生产构建与既有本地数据。启动时进程为 `43904`,地址为 `http://127.0.0.1:64865`;HTTP 首页返回 200 且包含前端挂载节点,进程存活,已请求在 Codex 浏览器打开。带认证片段的启动链接只在本地日志和本次会话提供,不写入仓库。无业务代码修改、模型调用、提交或推送;本页操作记录保留为本地改动。 - -下一项为 **ENG-03:优先复现 PR #11 的真实 XeLaTeX 超时,补齐准备状态、编译诊断和失败产物,再按证据最小修复并复核构建与浏览器。** 不以本地缓存成功或旧截图代替 CI;未取得通过证据前 ENG-04 不进入验收。 - -每次任务结束必须更新本文件:日期、任务 ID/状态、实际结果、验证命令和环境、剩余问题、下一项任务。只保留简短交接,详细长期证据继续写入已有 verification/acceptance,不按每轮对话新增台账文件。 diff --git a/docs/acceptance.md b/docs/acceptance.md index f7a02b9..2badb30 100644 --- a/docs/acceptance.md +++ b/docs/acceptance.md @@ -2,7 +2,7 @@ Scope: the first local research loop in [product](product.md), with the explicit preview limits below. This record does not claim completion of the founding vision's later compute, multi-agent, institutional or ecosystem phases. -As of 2026-10-25, the latest recorded Windows local preflight passed 57 core/API/governance tests and 12 browser scenarios, using an existing compiler cache. The latest inspected [PR #11 browser CI job](https://github.com/IsaacHuo/OpenLab/actions/runs/40165761893/job/121086433393) passed 11 scenarios and failed the first real XeLaTeX completion wait; required-checks failed. The [verification record](verification.md) identifies the head, tested merge revision, environment and unresolved cause. This document retains earlier stages as dated evidence; local success does not establish the merge gate. +As of 2026-10-25, ENG-03 passed 57 Node tests and 13 browser scenarios locally. [PR #11 checks](https://github.com/IsaacHuo/OpenLab/actions/runs/40170016084) passed Windows/Linux repository validation, independently prepared compiler resources, all 13 browser scenarios, actionlint, Gitleaks and required-checks. PR #11 was squash merged as `c9a96f3ca22fd85276ca9fb09defa1a541bd08c1`. The earlier first-compilation timeout and its evidence remain historical in [verification](verification.md). No additional live model calls were made. The current task is in [PLAN](../PLAN.md). ## Evidence matrix @@ -27,7 +27,7 @@ As of 2026-10-25, the latest recorded Windows local preflight passed 57 core/API | Conversations and follow-up context | Search, rename, continuous history, old-run focus and draft/selection reload checked in Chrome; server freezes at most six terminal runs, 40,000 history characters and a selected report excerpt of 20,000 characters | | Context isolation and archives | Foreign conversation revisions rejected; new plans require new confirmation; truncation recorded; context IDs remapped on import and archives without context remain readable | | Materials and provider editing | Selected/empty/default material sets frozen; excluded text omitted and foreign IDs rejected; browser selections persist; blank credential retained, failed saves rolled back, active provider edits blocked and changed connections require retesting | -| Repository delivery | Historical local preflight results are in [verification](verification.md); PR #11 remains unmerged with failed browser acceptance and required-checks as inspected on 2026-10-25 | +| Repository delivery | PR #11 required-checks passed on head `73ad1658c7f9f3d4d283d5221af4922668661a99`, then merged as `c9a96f3`; later candidate changes require their own exact-revision checks | The daily-workflow stage on 2026-10-24 recorded 51 unit/integration/governance tests and eight browser scenarios. The later plugin stage and 2026-10-25 local preflight recorded 57/12. Live probes are opt-in and separate from synthetic automation and real compiler tests; none were repeated for ENG-02. Detailed outcomes and the earlier 45/3 and 45/5 stages are in [verification](verification.md). @@ -43,6 +43,31 @@ The daily-workflow stage on 2026-10-24 recorded 51 unit/integration/governance t ## Plugin workspace acceptance -The plugin stage recorded 57 core/API/governance tests and 12 browser scenarios on Windows on 2026-10-24, repeated in the 2026-10-25 local preflight; see the [verification record](verification.md) and [execution ledger](../plan.md). Default capabilities use the shared plugin catalog and host contract. Markdown/LaTeX editing, platform drafts, immutable manual revisions, explicit comparison/conflicts, standalone documents, v2 archives and v1 imports are implemented. Archive versions are independent of SQLite `user_version=1`. Disabling or crashing a view preserves original downloads and the conversation. +The plugin stage recorded 57 core/API/governance tests and 12 browser scenarios on Windows on 2026-10-24, repeated in the 2026-10-25 local preflight; see the [verification record](verification.md) and [execution ledger](../PLAN.md). Default capabilities use the shared plugin catalog and host contract. Markdown/LaTeX editing, platform drafts, immutable manual revisions, explicit comparison/conflicts, standalone documents, v2 archives and v1 imports are implemented. Archive versions are independent of SQLite `user_version=1`. Disabling or crashing a view preserves original downloads and the conversation. -Those local runs covered real XeLaTeX compilation of Chinese, math, PNG, a managed chapter and BibTeX; PDF.js confirmed readable text. Real pdfLaTeX also passed with external network access blocked and components cached. Missing-package recovery preserved the prior PDF; controlled stalled Workers verified cancel/deadline behavior. Desktop, tablet and phone screenshots of the same compiled document were inspected at that stage. ENG-02 did not rerun these checks; the CI timeout remains unresolved. No additional live model/provider compatibility claim is made by this stage. +Those local runs covered real XeLaTeX compilation of Chinese, math, PNG, a managed chapter and BibTeX; PDF.js confirmed readable text. Real pdfLaTeX also passed with external network access blocked and components cached. Missing-package recovery preserved the prior PDF; controlled stalled Workers verified cancel/deadline behavior. Desktop, tablet and phone screenshots of the same compiled document were inspected at that stage. ENG-03 repeated these checks and added the cross-document comparison regression; its CI passed after resource preparation was separated. No additional live model/provider compatibility claim is made by this stage. + +## Alpha data and permission gates, ENG-04, 2026-10-25 + +On Windows x64 with Node.js 24.19.0 and npm 11.17.0, the command below passed 30 tests, with no failures or skips. These are controlled local tests using isolated stores, not live provider acceptance. ENG-03's full 57-test run and 13 browser scenarios provide unchanged supporting evidence. + +```sh +node --test app/tests/platform.test.ts app/tests/runtime.test.ts app/tests/service.test.ts app/tests/store.test.ts app/tests/documents.test.ts app/tests/context.test.ts app/tests/workflow.test.ts +``` + +| Gate | Result | Code and test evidence | +| --- | --- | --- | +| Each new run confirms its current plan | Pass, controlled | `platform.test.ts`: confirmation gates dispatch and duplicate creation keys; `context.test.ts`: follow-up context requires fresh confirmation | +| Permission denial and stale decisions | Pass, controlled | `platform.test.ts`: structured answers validate IDs/versions, denial is retained and contradictory/stale decisions are rejected | +| Reconnect, imported approvals and replay cannot execute | Pass, controlled | `service.test.ts`: independent AG-UI/domain cursor replay creates no work; `store.test.ts`: executable imported runs rejected; `context.test.ts`: historical authorization excluded | +| Cancellation confirms worker termination | Pass, native worker and controlled race | `runtime.test.ts`: child cancellation is terminal only after exit; `platform.test.ts`: cancelling blocks late decisions, completed runs keep completion | +| Restart and explicit linked retry | Pass, controlled/native worker | `platform.test.ts`: reopening reconciles lost runs without dispatch and retries link to a valid parent; `runtime.test.ts`: lost worker is interrupted without automatic restart | +| Credentials and request authorization | Pass, controlled | `service.test.ts`: session/origin/CSRF checks and public-only provider responses; `workflow.test.ts`: protected credential retention/rollback and active-run editing blocked; `store.test.ts`: private imported configuration rejected | +| Manual revisions preserve Agent records | Pass, controlled | `documents.test.ts`: original bytes/events unchanged, human origin retained, idempotent saves and conflicts preserve drafts | +| Portable v1/v2 and exact file bytes | Pass, controlled | `documents.test.ts`: legacy v1 imports, v2 documents/resources/build round trips and source-hash rejection; `store.test.ts`: report/material hashes, corruption and future versions | +| Cross-project and filesystem isolation | Pass, controlled/native filesystem | `context.test.ts`, `workflow.test.ts` and `documents.test.ts`: foreign revisions/materials/citations rejected; `store.test.ts`: traversal, foreign references and junction redirects rejected | +| Persistence and single ownership | Pass, controlled | `platform.test.ts`: state/events roll back together; `store.test.ts`: one control plane owns each data root | + +All test filenames in the table are under `app/tests/`; owners remain Platform, Store, Documents and the existing local HTTP service. No new archive format, database schema, runtime or permission policy was introduced by this audit. + +The release boundary remains a Windows-first, metadata-research source preview: one scholarly provider, Windows-only protected credential persistence, dated DeepSeek non-thinking compatibility, no verified general full-text/claim support, static trusted plugins and no installer. Supervisor-Skills is excluded; prepared TeX/font binaries are downloaded into an ignored runtime cache and are not bundled in source archives. These are documented preview limits, not passed tests for deferred features. Within that boundary the reviewed data and permission gates have no unresolved blocker; candidate identity, licenses and exact candidate/main CI remain ENG-05/06 gates. diff --git a/docs/development.md b/docs/development.md index efd4574..b487a75 100644 --- a/docs/development.md +++ b/docs/development.md @@ -78,7 +78,7 @@ Choose `Tool: metadata search` in the composer to invoke a scholarly tool direct ## Daily research workflow -Track this batch through [plan.md](../plan.md). An unauthenticated browser can paste the complete current launch link for the same local origin; a service restart invalidates previous launch credentials and sessions. Reconnecting only restores the session and subscriptions; it does not create a run. Project and conversation search, archived-project filtering, conversation rename and returning from a focused historical run are available in the workspace. Drafts stay scoped to conversations in session storage; selected conversation, historical run, report revision and material choices survive refresh in local storage. +Track this batch through [PLAN.md](../PLAN.md). An unauthenticated browser can paste the complete current launch link for the same local origin; a service restart invalidates previous launch credentials and sessions. Reconnecting only restores the session and subscriptions; it does not create a run. Project and conversation search, archived-project filtering, conversation rename and returning from a focused historical run are available in the workspace. Drafts stay scoped to conversations in session storage; selected conversation, historical run, report revision and material choices survive refresh in local storage. `PATCH /conversations/{id}` changes only `name`. `POST /conversations/{id}/runs` accepts optional `contextRevisionId` and `materialIds`. The service chooses history itself and rejects client-supplied history/context/messages. Context freezes the same conversation's latest six terminal runs plus an exact report revision. History is limited to 40,000 characters and report excerpts to 20,000; truncation is visible, with no model summarization. Context contains no historical decisions, tool calls or authorization. Each new run still proposes and confirms its own plan. Optional context references are exported and remapped on import; schema-version-1 archives without these fields remain compatible. diff --git a/docs/implementation-plan.md b/docs/implementation-plan.md index 8137efa..555b0e7 100644 --- a/docs/implementation-plan.md +++ b/docs/implementation-plan.md @@ -30,12 +30,12 @@ Each iteration uses a short-lived branch, local checks, a PR, passing required C ## Current product completion batch -The approved [root execution ledger](../plan.md) extends the delivered preview incrementally: authenticated launch recovery, searchable/renameable conversations, continuous history, frozen follow-up context, per-run material choices and editable providers. The black/white/gray [UI specification](../doc/design/README.md) remains authoritative, including the 24px composer and absence of a caption underneath it. Historical iteration counts above remain evidence for their original revisions; current suite counts and local results are in [verification](verification.md). +The approved [root execution ledger](../PLAN.md) extends the delivered preview incrementally: authenticated launch recovery, searchable/renameable conversations, continuous history, frozen follow-up context, per-run material choices and editable providers. The black/white/gray [UI specification](../doc/design/README.md) remains authoritative, including the 24px composer and absence of a caption underneath it. Historical iteration counts above remain evidence for their original revisions; current suite counts and local results are in [verification](verification.md). This batch is implemented and included in commit `22d6db524c08abfd4976bded081cf415b25919c1`, pushed in [PR #11](https://github.com/IsaacHuo/OpenLab/pull/11). The PR is unmerged as inspected on 2026-10-25. This creates no release, installer, publication or new multi-agent capability. ## Plugin document iteration -The approved [root ledger](../plan.md) records completed plugin contracts and document records, editors and revision management, real TeX/PDF validation, workspace interaction and integrated local checks. The [plugin SDK](plugins.md) defines the current static-registration boundary. This implemented iteration adds default Markdown/LaTeX editors, revision comparison, browser-side compilation and PDF preview, included in the same PR #11 implementation commit. External plugin installation, additional scholarly services, arbitrary execution, multiple agents and publishing remain outside this batch. +The approved [root ledger](../PLAN.md) records completed plugin contracts and document records, editors and revision management, real TeX/PDF validation, workspace interaction and integrated local checks. The [plugin SDK](plugins.md) defines the current static-registration boundary. This implemented iteration adds default Markdown/LaTeX editors, revision comparison, browser-side compilation and PDF preview, included in the same PR #11 implementation commit. External plugin installation, additional scholarly services, arbitrary execution, multiple agents and publishing remain outside this batch. ENG-02 aligns these records without changing the application. ENG-03 must first reproduce the real XeLaTeX CI timeout and record compiler preparation and cache conditions, then repair the demonstrated failure. ENG-04 remains dependent on ENG-03 passing. The existing CI log does not establish a cold-cache root cause. diff --git a/docs/plugins.md b/docs/plugins.md index 2db73f8..323f5e4 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -1,6 +1,6 @@ # Plugin SDK and document workspace -Status: local implementation, 2026-10-24. The [execution ledger](../plan.md) records validation. All bundled capabilities declare the same version-1 manifest contract in `app/plugin-contracts.ts`. This iteration uses static registration; it does not install or evaluate external plugin packages. +Status: local implementation, 2026-10-24. The [execution ledger](../PLAN.md) records validation. All bundled capabilities declare the same version-1 manifest contract in `app/plugin-contracts.ts`. This iteration uses static registration; it does not install or evaluate external plugin packages. ## Registration and lifecycle diff --git a/docs/verification.md b/docs/verification.md index 8fe201d..72f741d 100644 --- a/docs/verification.md +++ b/docs/verification.md @@ -40,13 +40,21 @@ The planning research inspected these popular projects on 2026-10-25. Star count ## Local delivery preflight, 2026-10-25 +### ENG-03 remote completion and ENG-04 gate audit + +[Workflow 40170016084](https://github.com/IsaacHuo/OpenLab/actions/runs/40170016084) passed on PR #11 head `73ad1658c7f9f3d4d283d5221af4922668661a99`, using temporary merge checkout `c99db1b22a68a6296889d687cbe51f8400f05ba7`. Both repository jobs, actionlint, Gitleaks, independent compiler preparation, all 13 browser scenarios and required-checks succeeded. Compiler preparation took 12 seconds on that runner. Review threads were empty, and PR #11 was squash merged to main `c9a96f3ca22fd85276ca9fb09defa1a541bd08c1`. This resolves the merge blocker; the old timeout's exact cause remains unproven. + +ENG-04 then mapped each alpha data/permission requirement to the existing tests in [acceptance](acceptance.md#alpha-data-and-permission-gates-eng-04-2026-10-25). Its seven-file `node --test` command passed 30 tests with no failures/skips on Windows, Node.js 24.19.0 / npm 11.17.0. Existing controlled/native-worker evidence covers the documented preview boundary; live metadata/provider records remain dated historical evidence. There were no new live model/retrieval calls or schema changes. + +The user requested an uppercase root `PLAN.md` with visible current execution stages. The file was renamed through a temporary Git path to preserve the case-only change on Windows; all tracked root-plan links were updated. Its prior two rounds remain as history. Both README navigation entries were updated together. The original vision, ADR bodies, research data, dependencies and application code were unchanged by ENG-04. + ### ENG-03 reproduction and local repair On Windows x64, Node.js 24.19.0 and npm 11.17.0, the initial rerun passed real XeLaTeX with the existing cache but failed plugin fault containment because an unrelated `Artifact revision not found` alert appeared. A new document-switching regression failed against the original code: the browser requested the previous document's comparison revision through the new artifact's route. The document panel now checks revision ownership before loading comparison bytes. The same regression and the full browser suite then passed: 13 scenarios, including real Chinese/BibTeX/PDF compilation, cached offline pdfLaTeX, controlled cancellation/deadline, plugin faults and responsive/axe checks. Desktop, tablet and phone document screenshots were inspected. `npm run check` passed all 57 Node tests, Markdown/repository validation and type checking; `npm run build`, actionlint 1.7.12 and Gitleaks 8.30.1 passed. The existing large-chunk advisory remains. Compiler download errors now identify the asset, byte range, curl exit and actual/expected length without exposing credentials. No model provider was called. -A separate empty compiler cache was created under ignored `.cache/eng03-cold/`, leaving the working cache and user data untouched. Preparation failed after approximately 33 MB; explicit retries reused cached ranges, but further downloads also failed. This demonstrates a local cold-preparation failure, not the precise cause of the earlier Linux timeout. New CI separates `plugins:prepare` from the browser completion wait and fails visibly at preparation if it cannot reach `ready`. Failed document scenarios attach compiler resource state and build text; CI uploads `test-results/` for seven days. The Worker deadline remains 120 seconds. Remote verification of the repair is pending. +A separate empty compiler cache was created under ignored `.cache/eng03-cold/`, leaving the working cache and user data untouched. Preparation failed after approximately 33 MB; explicit retries reused cached ranges and reached approximately 197 MB, but further downloads failed with curl exit 35 (TLS connection failure). This demonstrates a local cold-preparation failure, not the precise cause of the earlier Linux timeout. New CI separates `plugins:prepare` from the browser completion wait and fails visibly at preparation if it cannot reach `ready`. Failed document scenarios attach compiler resource state and build text; CI uploads `test-results/` for seven days. The Worker deadline remains 120 seconds. Subsequent remote completion is recorded above. ### ENG-01 preflight (historical) @@ -74,7 +82,7 @@ The Chinese vision is byte-identical to the committed file at the start of this ## Current product completion, 2026-10-24 -This historical section records the daily-workflow batch in the [execution ledger](../plan.md). At that stage, native Windows checks covered 51 unit/integration/governance tests and eight Chrome browser scenarios. Added behavior covers launch-link recovery; project/conversation search and rename; continuous history and scoped refresh restoration; frozen follow-up references, selected old reports, truncation and archive compatibility; selected/empty/default materials; protected provider updates, rollback and active-run blocking. Native worker tests verify that history and material excerpts cross the IPC boundary into the controlled model request without enabling planning tools. +This historical section records the daily-workflow batch in the [execution ledger](../PLAN.md). At that stage, native Windows checks covered 51 unit/integration/governance tests and eight Chrome browser scenarios. Added behavior covers launch-link recovery; project/conversation search and rename; continuous history and scoped refresh restoration; frozen follow-up references, selected old reports, truncation and archive compatibility; selected/empty/default materials; protected provider updates, rollback and active-run blocking. Native worker tests verify that history and material excerpts cross the IPC boundary into the controlled model request without enabling planning tools. The browser suite uses controlled records and a substitute runtime, with no real model calls. It covers Chinese composition/keyboard submission, 1440/1280/1024/768/390-pixel layouts, drawers, old revisions, evidence navigation, material choices, downloads and settings errors. Exercised desktop/mobile axe scans have zero violations. The production build succeeds with the existing advisory about large JavaScript chunks. Earlier live provider/retrieval evidence below remains separate and was not rerun for this batch. @@ -151,4 +159,4 @@ The pinned upstream multi-pass pipeline reused argument arrays mutated by Emscri Actual screenshots of the same compiled document at desktop 1440×1000, tablet 768×1024 and mobile 390×844 were inspected: `.cache/document-desktop.png`, `.cache/document-tablet.png`, `.cache/document-mobile.png`. The exercised focus document, desktop and mobile workspace states have zero axe A/AA violations. The existing user project was also reopened on the local service and its editor inspected at desktop, tablet and phone widths, including narrow-screen draft preview. The retained screenshots are `.cache/plugin-editor-live-desktop.png`, `.cache/plugin-editor-live-tablet.png` and `.cache/plugin-editor-live-mobile.png`. Screenshots and the real compiled proof PDF stay in ignored `.cache/`; test fixtures never use the user's project store. -See the [plugin SDK](plugins.md) and [retained execution ledger](../plan.md). Compiler dependencies are the pinned package collection, not an arbitrary TeX installation. Static browser plugins are trusted code; no external installer or untrusted plugin sandbox is supplied. Existing large JavaScript chunks still trigger the size advisory. +See the [plugin SDK](plugins.md) and [retained execution ledger](../PLAN.md). Compiler dependencies are the pinned package collection, not an arbitrary TeX installation. Static browser plugins are trusted code; no external installer or untrusted plugin sandbox is supplied. Existing large JavaScript chunks still trigger the size advisory.