Writing v2 路线图
September 2, 2026 · View on GitHub
更新时间:2026-07-06
状态:Active + ordinary Agent turn orchestration current-turn verified;Electron/CDP real desktop baseline verified;Electron/CDP Gate B product acceptance verified;host audit boundary partial + workflow evidence export summary verified + production workflow audit export gate verified + host-managed generation current-turn fixture verified + live Provider current-turn verified + production preflight + signed gate + readiness report + readiness pipeline fail-closed verified + production signature cryptographic preflight verified + LimeCore signature contract verified + Studio current bulk publish verified + workspace patch host tool evidence verified + inline host command shortcode first pass + external package smoke verified + App Server current local_folder turn verified + cancel audit verified;remote GUI production 安装签名闭环 / resume lifecycle production evidence 未完成
主线:把 @写文章 收敛为“内容工厂 workflow contract 编排 + 普通 Agent 对话流 + 段落级 article artifact + 后台 JSONL 审计”,禁止用旧插件执行器 / fixture / mock 绕过普通对话主链
Plugin v3 对齐:portable 包的唯一入口是根
plugin.json、mcp.json和skills/<skill>/SKILL.md;独立插件执行器、旧运行时 manifest 和旧发布后台不属于 current。本文中的旧执行器 / release evidence 仅作历史记录,新增实现必须回到 App Server typed activation snapshot、RuntimeCore 和普通 Agent turn。
1. 设计结论
Writing v1 已经完成内容工厂插件包、@写文章 激活、ArtifactFrame 和右侧 Article Editor 的基础 UI 闭环。当前有效能力通过 Plugin v3 标准包进入 App Server typed activation snapshot,再由普通 Agent turn 生成段落级 artifact partial;早期外部 package execution、local_folder 安装和签名发布证据仅保留为历史记录,不能作为 production current。尚未完成的是远程 / GUI production 安装运行闭环和 production resume lifecycle 证据,现有仓库内 fixture 仍只能作为 test-only evidence,不能当成 production current。production evidence 还必须证明真实桌面链路,即 electron-ipc -> app_server_handle_json_lines -> agentSession/turn/start,不能只手写 GUI evidence JSON。
当前结构性问题已经进一步明确:不是只缺远程安装,也不是只缺右侧样式,而是 @写文章 曾被误收敛到旧执行器 / fixture 直接完成路径,绕过了普通 Agent turn 的寒暄、思考、引导、工具过程和真实完成态。Writing v2 的产品需求、activation producer 合同、前端 UI、外部包验证和 App Server current local_folder turn 证据仍然有效,但这些证据只能证明内容工厂包与产物合同可用,不能替代真实 agentSession/turn/start 普通对话主链。用户可见主链不能被简化成只有最终文章卡,也不能把内部 JSON / workspace patch 文件卡展示出来;必须把资料检索 / 网络搜索这类能力投影为可展开执行卡片,把文章正文投影为同一个文章产物。
Writing v2 的核心结论是:
@写文章不是普通 agent 自由闲聊,也不是插件执行器自行接管回合;它必须进入普通 Agent turn,由内容工厂workflow_contract约束本轮编排。- 用户面不展示 workflow 步骤列表;聊天区展示可展开执行卡片和文章产物框,右侧只展示 Article Editor 和文章相关编辑能力。
- workflow run / step / tool / connector / hook / evidence 作为后台审计事实追加到 JSONL,不进入右侧流程轨;普通用户只看到被宿主投影成工具卡 / 执行卡的必要摘要。
- 内容工厂插件包只提供 workflow、artifact、host tool、shortcode 所需声明;但
@写文章首发不能由独立插件 runtime 绕过普通 Agent turn。App Server 负责把普通 Agent turn 中产生或后处理得到的content_factory.workspace_patch按段落级artifact.snapshot投影、持久化和封口,不承接内容工厂写作模板,也不再拿最终正文二次切片。 - 后续排障、运营复盘和质量审计读取 append-only
workflow-events.jsonl;产品 UI 默认不消费该日志。 - 正文里的显式
[@配图 ...]属于宿主命令 shortcode:插件只声明占位,宿主解析成结构化请求并复用当前@配图 -> image_command_intent -> ImageCommandWorkflow主链,避免插件能力直接造图片任务或裸正则替换正文。
1.1 2026-07-05 主线校正
最新实现方向固定如下:
@写文章 ...的发送路径必须是useWorkspaceSendActions -> plugin_activation metadata/workflow_contract -> agentSession/turn/start -> RuntimeBackend -> 普通 Agent turn。plugin_activation只提供内容工厂编排合同,不触发已退役的右侧 pane/action 执行器 fast path;右侧显式动作也必须继续委托 App Server current command。- 普通 Agent turn 需要先给用户自然引导、过程说明和工具进展,再展示文章产物;不能只闪一下占位框后直接
done。 - RuntimeCore / RuntimeBackend 必须在最终
turn.completed前补齐内容工厂 artifact snapshot、host tool timeline 和 read model 投影;terminal 之后再补 artifact 会被事件存储丢弃。 workflow-events.jsonl只保存 metadata-only 审计;聊天区、右侧和历史恢复不显示 raw JSON、.lime/artifacts/content-factory/workspace-patch.json文件卡或 workflow step 列表。- 右侧 Article Workspace 不自动打开;只有用户点击文章产物或显式打开时才展示。
- fixture / mock 只能证明受控回归,不能声明真实业务跑通;真实完成必须至少通过 App Server current-turn smoke 和 Electron/CDP Gate B 产品验收。
- Electron/CDP 证据分两层:baseline 只证明真实桌面桥接、turn/start、activation metadata 和文章产物可见;acceptance 还必须证明右侧不自动打开、执行卡片顺序、raw JSON / 文件卡隐藏和历史恢复。
2. 文档索引
| 文档 | 用途 |
|---|---|
product-requirements.md | 产品背景、目的、收益、用户故事、用户用例、功能需求、架构图、流程图、时序图、验收标准。 |
content-factory-plugin-reframe.md | 基于 Image #2 重新梳理内容工厂插件的执行卡片、文章产物、右侧编辑器和后台审计边界。 |
3. v1 到 v2 的边界变化
| 维度 | v1 现状 | v2 目标 |
|---|---|---|
| 任务创建 | 发送后进入旧插件执行路径,由外部结果投影任务状态。 | 发送后 App Server 建立后台 audit context,并把 workflow 事件追加到 JSONL。 |
| 过程可见性 | 初始 snapshot 后等待旧执行器 / tools 完成,再批量出现过程和正文。 | 正文按段落进入同一个 ArtifactFrame;workflow step 不展示在右侧。 |
| 控制权 | 旧 producer 产出 workspace patch,宿主事后解析。 | current producer 在生成期发增量产物;App Server 透传并持久化,不伪造正文流。 |
| 工具调用 | 旧执行器声明 searchRequests,宿主执行后回填。 | 工具调用和 step 状态写入 JSONL 审计日志,必要时用于后台排障。 |
| 历史恢复 | 从 artifact / workspace patch 恢复 Article Workspace。 | 用户面从 artifact / workspace patch 恢复文章;审计面从 JSONL 回放 workflow。 |
| 验收口径 | 最终文章和右侧编辑器可用。 | 段落级流式、最终产物、右侧编辑器和 JSONL 审计可用。 |
| 首发执行 | 可被旧 producer / fixture 直接完成。 | 必须保留普通 Agent turn 对话流,再由内容工厂合同约束产物与审计。 |
4. MVP 完成判定
- App Server current producer 在生成期按段落输出同一 article artifact 的 partial snapshot。
- App Server current activation state 能进入
agentSession/turn/start、artifact read model 和 workflow JSONL;早期 local_folder package execution 仅作为历史验证材料。 - App Server runtime backend 能在 current-turn 中通过受控 OpenAI-compatible provider fixture 完成 host-managed generation,并把正文写入 current artifact producer。
- App Server runtime backend 能在 current-turn 中通过 Agnes live Provider
agnes-2.0-flash完成 host-managed generation;证据仍属于 Provider current-turn 验证,不代表旧 package execution 为 current owner。 - Production preflight 能读取真实
.lapp,通过 App Server currentpluginLocalPackage/inspect计算 manifestHash,并在缺 app signature、trust root、production catalog、bootstrap、fetchCloud 时 fail-closed;现已进一步校验app.signature.yaml的schemaVersion / signatureRef / publicKeyId / algorithm / signature / payloadHash / signedAt、trust rootpublicKeyId / algorithm / publicKey,并按 canonical payload v2 做真实密码学验签,文件存在但 proof 不完整、payloadHash 漂移或 detached signature 验不过都不能进入 signed gate。最新证据为.lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-operator-auth-2026-07-06-2026-07-05T16-20-57-411Z/content-factory-production-readiness-report.json,并带非敏感publishReadiness环境摘要。 - Signed release gate 已强制消费 production preflight,
--evidence-dir从四件套升级为 preflight / catalog / bootstrap / fetchCloud / GUI 五件套;preflight blocked、preflight 未证明signatureCryptographicVerificationStatus=verified、bootstrap trust root 缺publicKey,或 preflight packageHash / manifestHash 与 catalog 不一致时,即使其他 evidence 手工写成 ready 也会 fail-closed。production catalog 只接受sourceKind=cloud_release,remote / local_folder / fixture / localhost都不能关闭 production gate。最新 blocked gate 证据随 readiness pipeline 写入.lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-operator-auth-2026-07-06-2026-07-05T16-20-57-411Z/。 - Production evidence bundle 能把 preflight / catalog / bootstrap / fetchCloud / GUI evidence 归档成 signed gate 标准五件套目录并立即写入 gate result;未提供的 evidence 会删除同名旧文件,防止复用目录时被 stale JSON 误过门禁;bundle manifest 会记录每个输入 JSON 的
sha256、输入集合 digest、gate digest 和 gate resultsha256,便于后续审计判断是否使用当前证据与当前 gate 摘要。最新 blocked bundle 证据为.lime/qc/gui-evidence/agent-apps/content-factory-production-evidence-bundle-bundle-guard-2026-07-05/content-factory-signed-release-gate.result.json。 - Production readiness report 能只读汇总外部 app 目录、production preflight、signed release gate 和五类 evidence 的阻塞矩阵;它不签名、不上传、不安装、不调用 Provider 或生产 API,也不复制密钥、token 或 package URL 原文。report 现在会二次计算 signed gate,并在现有
content-factory-signed-release-gate.result.json与当前 evidence 不一致时输出production_signed_gate_result_stale;也会消费content-factory-production-evidence-bundle.json,当 bundle 输入 digest 与当前 evidence 文件不一致时输出production_evidence_bundle_stale,当 bundle gate 摘要 / digest 与当前重算 gate 不一致时输出production_evidence_bundle_gate_stale;同时输出blockerPlan.nextPhase,把签名 proof、Studio 发布输入、catalog/bootstrap、fetchCloud 和 desktop cloud_release E2E 分阶段展示。当前 blocked report 证据为.lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-operator-auth-2026-07-06-2026-07-05T16-20-57-411Z/content-factory-production-readiness-report.json。 - Production readiness pipeline 已把 Studio
publish --dry-run、preflight、evidence bundle 和 readiness report 串成单一 read-only current 入口;pipeline 不传--publish、不上传、不安装、不调用 Provider 或 production publish API。Studio dry-run 必须先执行并刷新当前.lapp,preflight 再读取同一轮包,避免 preflight 读旧 dist package 后出现production_studio_dry_run_package_hash_mismatch。pipeline 现在会在启用--fetch-production-release-evidence时只读 LimeCore currentclient/plugins/marketplace与client/bootstrap,把 content-factory 的 catalog 记录和 bootstrap trust roots 转成本地 evidence,再在--fetch-cloud-from-catalog下让 preflight 调 current App ServerpluginPackage/fetchCloud生成 fetchCloud evidence 并自动送入 bundle;无 catalog 时会记录fetchCloudFromCatalog.skippedReason=catalog_missing,继续生成 blocked preflight / bundle / report。默认仍只读;只有显式--generate-signature-proof且具备真实 HTTPS packageUrl、releaseId、publicKeyId 和本地 signing private key env/file 时,才会用同轮 Studio dry-run 的 packageHash / manifestHash 调外部真实签名工具生成app.signature.yaml与 trust root。operatorReadiness只写 configured 布尔值、env 名和本地 evidence 文件存在状态,并给出ready / missingKeys / missingActions / signingCommandHint与脱敏operatorCommand。最新真实本地复跑证据.lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-pipeline-2026-07-05T23-18-56-444Z/content-factory-production-readiness-pipeline.json仍status=blocked、missing codes 为17个;API base 为source=default,缺tenantId / studioToken时不会发起 production release evidence 请求;blockerPlan.nextPhase.commandHint与operatorCommand都已指向--generate-signature-proof,不再把--api-base、--app-signature或--trust-root当作 operator 必填手工入口;命令提示只引用 env 名,不再输出<private-key>/<token>。 - Production release evidence summary 已输出结构化
missingRequirements[],抓取成功后仍会检查 catalog 是否显式声明sourceKind=cloud_release、是否包含远程 HTTPS package URL、packageHash、manifestHash、releaseId、signatureRef、signatureProof 必要字段,以及 bootstrap 是否包含同publicKeyId且带publicKey / algorithm的 matching trust root;summary 不写 token、用户 bootstrap、packageUrl 原文或用户信息。packageUrl只表示远程包输入,不能反推或伪造成cloud_release。 - Production readiness pipeline 的
blockerPlan现在基于 pipeline + readiness report 合并 blockers 重新生成;releaseEvidence.missingRequirements[]会映射成production_release_evidence_*codes,并归入 production catalog/bootstrap 阶段,避免真实抓取后仍只显示粗粒度production_release_evidence_not_ready。 - Production readiness pipeline 在 release evidence 缺输入时写出的 blocked summary 会正确标记
outputs.summary.present=true;最新只读复跑证据为.lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-summary-present-2026-07-06T0211/content-factory-production-release-evidence.json。 - 历史 production package readiness gate 已归档;Plugin v3 current 只校验标准包 install/enable/activation 与真实 App Server turn,不启动独立 Plugin runtime。
- 历史签名 / release evidence gate 已归档;旧 package evidence 不得被当作 Plugin v3 current 安装或运行证据。
- fetchCloud production evidence 已从“状态布尔”收紧为可审计字段门禁:除了
packageHashMatched / manifestHashMatched / verified / ready,还必须写回本次拉取的packageHash、manifestHash、非 localhost HTTPSpackageUrl/sourceUri、signatureRef和用于 Host 验签的signatureProof;只手写matched=true或省略 source/proof 的 JSON 继续 blocked,readiness report 只输出布尔与 blocker code,不复制原始 package URL。 - GUI production evidence 已从“手写 ready JSON”收紧为 production collector provenance:signed gate 现在要求
schemaVersion=content-factory-production-gui-evidence.v1、真实 Electron CDP attached/usedRealElectron、matched turn-start trace、agentSession/turn/start + agentSession/read + evidence/exportcurrent App Server method trace、workflow JSONL event count、以及generatedArticleMarkerClean=true;只写liveProviderUsed=true、workflow-events.jsonl路径或若干 GUI 布尔不能关闭 production GUI gate。 - GUI production evidence collector 已对齐真实 App Server installed state 字段形态:
summarizeInstalledState(...)同时归一化 camelCase / snake_case 的identity、cloudReleaseEvidence / cloud_release_evidence、packageHash / manifestHash、releaseId、signatureRef和双 hash matched 状态;测试直接 import 纯函数,证明 Rust / App Server 返回 snake_case 时可识别为同一 production identity,缺release_id / signature_ref时仍 fail-closed,不能把不完整 release 误判为 live production。 - GUI production live Provider 证据不再从
providerEvidence.productionRoute=true推断;signed gate 只接受 collector / read model 形成的显式liveProviderUsed=true,手写 productionRoute 继续 blocked,避免把“走了 production route 字段”误当真实 Provider 生成闭环。 - Production workflow audit evidence 已从“JSONL 路径 / 事件计数”收紧为 App Server current export 门禁:production GUI evidence 必须包含
evidence/export的observabilitySummary.workflow_audit摘要,且证明status=exported、source=workflow-events.jsonl、eventCount>0、metadataOnly=true、rawContentIncluded=false、redactionPolicy=workflow_audit_metadata_only和 redaction 覆盖事件数;只提供 workflow JSONL 路径、手写事件数或 raw content 摘要继续 blocked。 - Production readiness pipeline 的 release evidence fetch 已复用 Studio / LimeCore 官方默认 API base;operatorReadiness 记录
apiBase.source=default与purpose=release-evidence-fetch,只在 operator 需要覆盖默认地址时才要求--api-base或LIME_AGENT_APP_STUDIO_API_BASE / LIMECORE_API_BASE_URL / LIMECORE_API_BASE。 - LimeCore 本地服务端 contract 支持 Plugin release
signatureProof、bootstrappluginSignatureTrustRoots、config trust roots 和 bulk publish fail-closed 签名校验;该证据不等同于 production 部署完成。 -
lime-agent-app-studio发布链已改为 current/v1/platform/plugins/bulk-publish,正式--publish必须使用真实 HTTPS--package-url与app.signature.yaml,不再调用旧 developer package upload / releases 接口;该证据不等同于 production release 已发布。 - 远程 / GUI production 安装运行闭环使用真实 Plugin v3 标准包,而不是仓库内 test-only fixture。
- App Server 对 current producer 输出的 artifact partial 做通用透传,不再对最终正文做二次切片。
- workflow run / step / tool / connector / hook / evidence 事件下线右侧普通用户流程轨,只追加到 append-only JSONL 审计日志。
- 外部内容工厂插件包显式输出
articleDraft.source.hostToolRequests[],为聊天主链执行卡片提供当前事实源。 - Article Editor 首批支持
[@配图 ...]shortcode,物化为 document-inline slot marker 并复用image_command_intent创建 / 回填图片任务;其他@命令先进入通用合同,不自动执行。 -
evidence/export能读取workflow-events.jsonl并输出 metadata-only workflow audit 摘要,供后续审计导出使用。 -
agentSession/read.detail.thread_read不再为右侧 Article Editor 提供 UI-facingworkflow_runs/workflow_steps。 - WebSearch / connector 执行状态写入同一个 JSONL audit stream。(RuntimeBackend
hostSearchEvidence -> workflow.connector.completed已绑定;外部内容工厂包自带 connector executor 未纳入本阶段。) -
thread/resume只负责 Thread rejoin/history hydrate,不启动 queued turn 或 workflow audit;只有workflow/respond/agentSession/action/respond的 typed response 显式携带metadata.workflowResume时,才向workflow-events.jsonl追加workflow.step.resuming/workflow.run.resumingmetadata-only audit。 -
ArtifactFrame(articleArtifacts)仍只承载最终文章,不回退普通 assistant 长文。 - 右侧 Article Editor 从 article artifact / workspace patch 恢复,不显示 workflow 步骤。
- 受控 read model / fixture 历史恢复能看到最终文章和编辑稿;workflow 过程只供审计回放。真实 Electron/CDP 从历史列表重进同一 session 已在 Gate B product acceptance 中通过。
-
@写文章普通 Agent turn current-turn smoke 产生自然对话、host tool timeline 和不少于6个内容工厂artifact.snapshot;2026-07-05 后端修复后最新证据为.lime/qc/content-factory-current-turn-debug/content-factory-current-turn-debug-host-generation-2026-07-05T04-19-07-937Z.json,显示eventCount=35、artifactSnapshotCount=7、streamingDocumentLengths=5、hostToolEventCount=9、workflowEventCount=16、hostManagedGenerationStatus=completed。 - Electron/CDP Gate B baseline 通过:真实 Electron 页面
http://127.0.0.1:1420/?nativeStartup=1,window.__LIME_ELECTRON__/ invoke bridge 可用,agentSession/turn/start经electron-ipc -> app_server_handle_json_lines成功,trace 中带content_article_workflowactivation metadata,聊天中捕获自然过程文本和文章产物正文。证据为.lime/qc/gui-evidence/writing/writing-cdp-WRITING_CDP_1783188149738-summary.json与.lime/qc/gui-evidence/writing/writing-cdp-WRITING_CDP_1783188149738-turn-start-trace.json;2026-07-05 续测还补充.lime/qc/gui-evidence/agent-apps/writing-v2-cdp-minimal-gate-b-2026-07-05.json,证明当前本地 Electron dev 可通过 CDP 连接真实 Lime/Electron 页签,并存在electron-ipc -> app_server_handle_json_linescurrent App Server method trace。 - Electron/CDP Gate B product acceptance 通过:发送后不自动打开右侧 Article Workspace;执行卡片在文章产物前可见;raw JSON、
.lime/artifacts/content-factory/workspace-patch.json文件卡和 workflow step 列表不进入聊天;点击文章产物后右侧打开;从历史重新进入同一会话仍恢复文章。证据为/tmp/lime-writing-evidence/writing-final-WRITING_LIVE_1783229659461-2026-07-05T06-02-47-474Z-summary.json,目标 sessionsess_f781bf079f074b7aa2ec0941bade095d,checks 全部为true。
5. 非目标
- 不把
@写文章恢复为宿主硬编码内置能力。 - 不让插件能力直接拥有全局 workflow 状态。
- 不让 agent 根据自然语言自由决定是否创建任务。
- 不把 stdout progress 当成 UI 长期事实源;需要留痕的 workflow 过程必须进入 JSONL 审计日志。
- 不恢复旧 Profile、已退役应用编排或 legacy Tauri command 路径。
- 不在右侧 Article Editor 展示 workflow step / task card / 流程轨。
6. 实现状态
2026-07-02 首刀
本轮实现后的目标口径调整为:
- 外部真实
content-factory-app@2.2.2package execution 已有 producer-side 段落级 artifact partial 证据;仓库内 execution fixture 仍只允许作为src/features/plugin/testing/fixtures下的 test-only evidence。 - 真实接入后,activation producer 必须在生成期间主动发段落级
artifact.snapshotpartial,最终 response 里的 complete snapshot 只负责封口和历史恢复。 - workflow run / step / tool / connector / hook / evidence 仍可作为后台编排事实存在,但普通用户 UI 不展示步骤列表。
- workflow 过程只写入 append-only
workflow-events.jsonl,用于未来审计、排障和质量复盘。 - 前端默认只消费 article artifact / workspace patch 来更新
ArtifactFrame与右侧 Article Editor。 - 右侧 Article Editor 不再消费
workflow_runs/workflow_steps来展示流程轨。
本轮已完成 JSONL audit writer 和普通用户 UI / read model 的 workflow 下线:workflow 审计事件写入当前 event log 根目录下的 sessions/session_<id>/workflow-events.jsonl,普通 agentSession/read、renderer event stream 和右侧 Article Editor 不再消费 workflow step 列表。
hook lifecycle 已作为 workflow.hook.completed 进入 workflow-events.jsonl,普通输出、read model 和右侧 Article Editor 不消费 hook 事件。
retry lifecycle 已作为 workflow.run.retrying / workflow.step.retrying 进入 workflow-events.jsonl,普通用户面仍只看到既有 retry 摘要。
cancel lifecycle 已作为 workflow.step.canceled / workflow.run.canceled 进入 workflow-events.jsonl:agentSession/turn/cancel 仍只向普通用户事件流返回 turn.canceled,App Server 只对同一 turn 内尚未终态的 workflow run / step 追加 audit-only 取消事件,不向 Article Editor 或 read model 暴露流程状态。
resume lifecycle 已作为显式 metadata contract 进入 workflow-events.jsonl:thread/resume 只做 Thread rejoin/history hydrate,不恢复 queued turn,也不写 workflow 审计事件;只有 typed action response 或 workflow/respond 的 metadata.workflowResume 能绑定 workflowRunId / workflowKey / stepId 时,才追加 audit-only workflow.step.resuming / workflow.run.resuming。response 原文不进入 JSONL。content-factory-signed-release-gate 也已把该 typed response contract 纳入 production ready 条件:GUI production evidence 必须同时证明 runtime response metadata 和匹配的 workflow.step.resuming / workflow.run.resuming JSONL audit 事件,否则 signed release / live Provider 证据仍 blocked。
2026-07-03 追加验证:App Server host-managed generation 注入链已有离线 localhost OpenAI-compatible provider fixture 回归,证明宿主可以在 activation producer 处理前完成受控文本生成,并把 article-draft-document -> articleDraft.documentText 注入 hostManagedGeneration.outputs[] / runtime.hostManagedGenerationResult;Lime 内 package-root 与外部 content-factory-app package execution 测试也证明该结果会覆盖 deterministic fallback 正文。
2026-07-03 追加验证:新增 npm run smoke:content-factory-package,从外部 /Users/coso/Documents/dev/ai/limecloud/content-factory-app 读取 content-factory-app@2.2.2、校验 .lapp 关键包结构和 runtime contract,执行外部包 npm test / npm run validate:app,再直接运行历史 package execution 入口 src/runtime/content-factory-worker.mjs。本次证据显示 .lapp package hash 为 sha256:89aec20e637713c668f8bc34c303256ac83806c5d2e75486e6453bd638ac3f8c,execution 输出 3 个 audit-only workflow.connector.requested 和 6 个段落级 artifact.snapshot partial,最终 articleDraft.documentText 使用 host-managed generation 正文;原始输出写入 .lime/qc/gui-evidence/plugins/content-factory-package-smoke-2026-07-02T20-22-46-553Z.worker.jsonl。该条只保留为历史证据,不定义 Plugin v3 current runtime。
2026-07-03 追加验证:新增 npm run smoke:content-factory-current-turn,使用隔离 HOME / XDG_DATA_HOME / APPDATA / LOCALAPPDATA 启动 App Server stdio current 链路,按 agentAppLocalPackage/inspect -> agentAppInstalled/save -> agentSession/start -> agentSession/turn/start -> agentSession/read -> artifact/read -> evidence/export 验证外部真实 package 的 local_folder installed state。证据显示外部 content-factory-app@2.2.2 的 local folder package hash 为 sha256:4be73a57bb5d29c5768b13a46c8ed8b07194fa7eda243d79feaf7d824941bdee,current turn 产生 24 个 artifact.snapshot,其中 22 个段落级 streaming document partial 递增长度,workflow-events.jsonl 写入 13 条 audit-only workflow 事件,普通 event log / read model 未暴露 workflow 或 hook 事件;证据写入 .lime/qc/gui-evidence/plugins/content-factory-current-turn-smoke-2026-07-02T20-48-56-462Z.json。该 smoke 使用 backendMode=unavailable,所以只能证明真实 package 进入 App Server current turn、artifact read model 和 JSONL 审计链路,不证明 live host-managed LLM generation 完成。
2026-07-03 追加验证:npm run smoke:content-factory-current-turn:host-generation 在同一 current-turn smoke 上增加本地 OpenAI-compatible SSE fixture,并显式用 backendMode=runtime 触发 App Server host-managed generation。证据显示外部 content-factory-app@2.2.2 进入 current turn 后产生 19 条普通事件、6 个 artifact.snapshot、4 个段落级 streaming partial,workflow-events.jsonl 写入 16 条 audit-only workflow 事件,hostManagedGenerationStatus=completed,fixture provider 收到 5 次请求;证据写入 .lime/qc/gui-evidence/plugins/content-factory-current-turn-smoke-host-generation-2026-07-02T20-48-56-462Z.json。这证明受控 provider 下的 current-turn host-managed generation 已闭环,但仍不等同于真实 live Provider / 远程 GUI production 证据。
2026-07-03 追加验证:补强 npm run smoke:content-factory-current-turn:host-generation 与 npm run smoke:content-factory-current-turn:cloud-release-host-generation 的宿主工具证据链,当前 smoke 已断言 streaming / final artifact.snapshot 均保留 3 条 articleDraft.source.hostToolRequests[],普通事件流与 session JSONL 均包含 3 组 tool.started -> tool.args -> tool.result,事件 source=workspace_patch_host_tool_requests;agentSession/read.detail.items 与 thread_read.tool_calls 均投影出 3 个 completed web_search 工具项,evidence/export 也能从 artifact snapshot 证明 hostToolEvidence 已回填。最新证据写入 .lime/qc/gui-evidence/plugins/content-factory-current-turn-smoke-host-generation-2026-07-03T12-31-25-916Z.json、.lime/qc/gui-evidence/plugins/content-factory-current-turn-smoke-host-generation-2026-07-03T12-31-25-916Z.workflow-events.jsonl、.lime/qc/gui-evidence/plugins/content-factory-current-turn-smoke-cloud-release-host-generation-2026-07-03T12-32-45-939Z.json 与 .lime/qc/gui-evidence/plugins/content-factory-current-turn-smoke-cloud-release-host-generation-2026-07-03T12-32-45-939Z.workflow-events.jsonl。这证明 hostToolRequests -> WebSearch tool event/read model -> article artifact 的 App Server current / cloud_release fixture 证据链成立,但仍不替代真实 GUI production 安装运行验证。
2026-07-03 追加验证:新增 npm run smoke:content-factory-current-turn:cloud-release 与 npm run smoke:content-factory-current-turn:cloud-release-host-generation,在隔离数据目录内构造本地签名 proof / trust root,并把外部 content-factory-app@2.2.2 物化到 preferredDataDir/plugins/packages/sha256_4be73a57bb5d29c5768b13a46c8ed8b07194fa7eda243d79feaf7d824941bdee,让 installed state 以 sourceKind=cloud_release、signaturePolicy=required、signatureVerificationStatus=verified、cloudReleaseEvidence.status=ready 进入同一 App Server current-turn activation path。cloud-release smoke 产生 28 条普通事件、22 个段落级 streaming partial、13 条 workflow audit 事件;cloud-release-host-generation 组合 smoke 产生 19 条普通事件、4 个段落级 streaming partial、16 条 workflow audit 事件,且 hostManagedGenerationStatus=completed。证据写入 .lime/qc/gui-evidence/plugins/content-factory-current-turn-smoke-cloud-release-2026-07-02T20-59-19-433Z.json 与 .lime/qc/gui-evidence/plugins/content-factory-current-turn-smoke-cloud-release-host-generation-2026-07-02T20-59-28-730Z.json。这只证明签名证据 ready 后的 cloud_release runtime/cache/current-turn 路径成立,不替代生产 LimeCore 下发 signatureProof 与 pluginSignatureTrustRoots 的真实远程 GUI 安装证据。
2026-07-03 追加实现:workflow-events.jsonl 写盘前统一执行 metadata-only 脱敏,prompt / query / result / providerConfig / message / text / summary 等 raw content 字段会替换为 workflow_audit_metadata_only redaction 占位,同时保留 workflowRunId / workflowKey / stepId / connectorRef / toolName / status / agentAppWorkflow 等审计元数据;普通 session JSONL、read model 和 Article Editor 仍不消费 workflow 事件。定向验证已覆盖 EventLogWriter::append_workflow_audit_events 与 current activation turn 中的 workflow run prompt / connector query 脱敏。
2026-07-03 追加实现:App Server current evidence/export 会在生成 Evidence Pack 时读取同一 session / turn 的 workflow-events.jsonl,并把 workflow_audit metadata-only 摘要写入 observabilitySummary,只暴露 event type breakdown、workflow run / key、turn、step、connector、tool、status 和 redaction 覆盖统计,不返回 workflow audit 原始 payload,也不改变普通 UI / read model。定向验证覆盖 workflow.run.started / workflow.step.completed / workflow.run.completed 摘要导出,确认 raw prompt、connector query、provider config 和结果正文不会出现在导出摘要里。
2026-07-05 排查闭环:npm run smoke:content-factory-current-turn:host-generation -- --timeout-ms 180000 --evidence-dir ".lime/qc/content-factory-current-turn-debug" --prefix "content-factory-current-turn-debug" 曾失败,错误为 expected paragraph-level artifact snapshots, got 0,证据文件为 .lime/qc/content-factory-current-turn-debug/content-factory-current-turn-debug-host-generation-2026-07-05T03-29-33-481Z.failure.json。根因是普通 plugin_activation turn 在 turn.completed 后才尝试补内容工厂 artifact,事件存储会丢弃 terminal 后事件。该后端缺口已通过 RuntimeCore terminal deferring 和 current-turn smoke 修复;后续 GUI/CDP Gate B product acceptance 也已通过。
2026-07-05 最新做法:RuntimeCore 对可识别的内容工厂 plugin_activation 普通 turn 使用 terminal deferring sink 暂存 backend 发出的 turn.completed,先让普通 RuntimeBackend 完成自然对话 / 工具过程,再按插件 activation 派生 App Server activation producer 处理内容工厂 artifact materialization、host tool enrichment 与 workflow-events.jsonl audit 写入,最后重新 emit 暂存的 turn.completed。该路径不改变普通 Agent turn 的触发条件,也不恢复旧 pane/action 执行器;@写文章 首发仍是普通 Agent turn,右侧显式动作继续走 current command。当前 Rust 定向测试、App Server current-turn smoke、Electron/CDP baseline 和 Electron/CDP product acceptance 已通过。
2026-07-05 最新验证:cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server plugin_activation_turn_uses_regular_agent_backend --lib 通过,确认普通 backend 先收到 plugin_activation 请求,artifact snapshot 和 workflow JSONL 在 terminal 前落下;旧 pane/action 执行器 guard 的负向测试继续通过,确认没有旧入口回流;npm run smoke:content-factory-current-turn:host-generation -- --timeout-ms 180000 --evidence-dir ".lime/qc/content-factory-current-turn-debug" --prefix "content-factory-current-turn-debug" 通过,外部 /Users/coso/Documents/dev/ai/limecloud/content-factory-app@2.2.2 以 local_folder installed state 进入 App Server current ordinary turn,普通事件流有 message.delta、artifact.snapshot、tool.started/tool.args/tool.result 和最终 turn.completed,后台 workflow-events.jsonl 写入 16 条 metadata-only audit 事件。真实 Electron/CDP baseline 证据 .lime/qc/gui-evidence/writing/writing-cdp-WRITING_CDP_1783188149738-summary.json 进一步确认桌面桥接、electron-ipc turn/start、activation metadata、自然过程捕获和文章产物正文可见;最终 product acceptance 证据已补充右侧不自动打开、历史恢复和 raw JSON / workflow step 隐藏断言。
2026-07-05 read model / 历史恢复补丁:agentSession/read.detail.artifacts 与 thread_read.artifacts 改为用户可见 artifact 集合,过滤 content_factory.workspace_patch / workspace_patch / workspace-patch.json,避免普通聊天和历史列表恢复 raw JSON / 文件卡;artifact/read 与 evidence/export 仍保留完整 workspace patch,供右侧点击读取和未来审计。前端历史恢复同步允许 artifact_document + articleWorkspace 文章产物恢复为 document artifact,只隐藏 workspace patch;App Server item.updated 累计文本投影改为覆盖累计全文,避免普通 Agent 的引导 / 思考文本在历史 read model 中重复拼接。验证:cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server read_session_hides_workspace_patch_from_user_visible_artifacts -- --nocapture、cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server read_session_materializes_content_factory_workspace_patch_into_article_workspace -- --nocapture、cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server item_updated_agent_message_cumulative_text_replaces_delta_prefix -- --nocapture、npx vitest run "src/components/agent/chat/hooks/agentChatHistory.timeline.test.ts" -t "历史应恢复文章 artifact document 且隐藏 workspace patch"。npm run test:related -- ... 因本机磁盘仅剩约 961MiB 时触发 ENOSPC 未完成,不能作为失败业务证据。
2026-07-05 Electron/CDP product acceptance 已通过:真实 Electron 页面 http://127.0.0.1:1420/?nativeStartup=1 中,从历史列表重新进入目标 session sess_f781bf079f074b7aa2ec0941bade095d,确认自然引导、工具过程、文章产物可见;raw workspace patch / workflow step 不进入普通聊天;点击文章产物前右侧 Article Workspace 不自动打开;点击文章产物后右侧 Article Editor 正确载入文章正文。证据为 /tmp/lime-writing-evidence/writing-final-WRITING_LIVE_1783229659461-2026-07-05T06-02-47-474Z-summary.json,gateB / historyRestored / naturalLeadVisible / toolProcessVisible / articleFrameVisible / rawPatchHidden / workflowStepsHiddenInChat / rightSurfaceNotAutoOpened / rightSurfaceOpensOnClick / traceHasElectronRead 全部为 true。
2026-07-05 production readiness pipeline 已补:plugin:content-factory-production-readiness-pipeline 顺序运行 production preflight、Studio publish --dry-run、evidence bundle 和 readiness report,并把输出归档到 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-pipeline-env-alias-continue-2026-07-05/。本次真实本地复跑 status=blocked,missing codes 同时覆盖 preflight、signed gate、GUI cloud_release 和 Studio 发布侧缺口;其中 preflight / Studio dry-run 的 packageHash 为 sha256:0c6f33d42918365b7f4256a78fc99b925133ea8fd956d50da25874998222b59c、manifestHash 为 sha256:5de25a9d61518f027810663cb50685bc6b25f1930f22e67f24ab9b757fd5f7a8,两侧对齐。随后补 --fetch-cloud-output 自动落盘:当 pipeline 启用 --fetch-cloud-from-catalog 且 production catalog 存在时,preflight 会把 current App Server pluginPackage/fetchCloud 结果写成独立 fetchCloud evidence,并由 bundle 自动消费。最新无 catalog 复跑写入 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-pipeline-fetchcloud-output-continue-2026-07-05/,仍按预期 status=blocked 且未生成 fetchCloud 文件。结论不变:pipeline 只减少 operator 手工串命令和 stale evidence 风险,不能替代真实 signed remote release、fetchCloud verified、GUI cloud_release signature verified 和 workflow resume lifecycle。
2026-07-05 23:16 production readiness phase plan 已补:content-factory-production-readiness-report 和 pipeline 都输出 blockerPlan,按本地 preflight、签名 proof / trust、Studio 发布输入、production catalog/bootstrap、fetchCloud verified、真实 desktop cloud_release E2E 和 evidence 完整性分阶段展示 blocker。pipeline 同时修正无 catalog 时的 --fetch-cloud-from-catalog 编排:不会再让 preflight 命令失败,而是记录 fetchCloudFromCatalog.skippedReason=catalog_missing 并继续写出 blocked preflight。最新真实复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-phase-plan-rerun-2026-07-05-2026-07-05T15-16-14-303Z/content-factory-production-readiness-pipeline.json 显示 preflight.present=true、nextPhase=release_signing_and_trust,当前下一刀仍是补真实 app.signature.yaml 和 production trust root,再进入 Studio 发布输入 / catalog / fetchCloud / GUI cloud_release 复测。
2026-07-05 23:36 production 签名验真已补:preflight 新增独立 canonical payload verifier,按外部 content-factory-app 发布签名 payload v2 重建 appId / version / releaseId / tenantId / tenantEnablementRef / channel / packageUrl / packageHash / manifestHash / signatureRef / signatureProof,再用 trust root publicKey 做真实密码学验签。app.signature.yaml 现在必须包含 schemaVersion,trust root 必须包含 publicKey;payloadHash 漂移、detached signature 验不过或 bootstrap 匹配 trust root 缺 publicKey 都会进入 production blocker。最新只读 pipeline 复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-signature-verify-final2-2026-07-05-2026-07-05T15-48-09-615Z/content-factory-production-readiness-pipeline.json 仍 status=blocked、nextPhase=release_signing_and_trust,preflight signatureCryptographicVerificationStatus=not_attempted,原因是当前真实外部包仍缺真实 app.signature.yaml 和 plugin-signature-trust-root.json;本轮没有签名、上传、安装、Provider 或 production API 调用。
2026-07-05 23:56 production catalog sourceKind 收紧后复跑:content-factory-signed-release-gate 与 readiness pipeline 现在只接受 cloud_release 作为 production catalog sourceKind,remote 不再被视为 production signed catalog ready。随后补齐 pipeline 默认签名输入传递:当 content-factory-app/app.signature.yaml 和 plugin-signature-trust-root.json 已存在时,不需要重复传 --app-signature / --trust-root,preflight 与 Studio dry-run 会消费同一组文件。最新只读 pipeline .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-signature-defaults-2026-07-05-2026-07-05T16-02-26-791Z/content-factory-production-readiness-pipeline.json 仍 status=blocked、fetchCloudFromCatalog.skippedReason=catalog_missing、blockerPlan.nextPhase=release_signing_and_trust;report 的下一步仍是补真实 app.signature.yaml、带 publicKey 的 production trust root、Studio 发布输入、production catalog/bootstrap、fetchCloud verified 和真实 GUI cloud_release evidence。本轮没有签名、上传、安装、Provider 或 production API 调用。
2026-07-06 pipeline ready path 回归已补:content-factory-production-readiness-pipeline.test.mjs 现在覆盖完整 production evidence 组合的绿色路径,要求 production preflight、Studio dry-run、evidence bundle、fetchCloud、GUI cloud_release signature verified、Electron IPC trace 和 workflow resume lifecycle 同时 ready 后,pipeline / readiness report / signed gate 才能整体 ready 且 blockers 为空。这证明当前工具链不会在真实输入齐备后被本地编排卡住;但该测试仍是 test-only fixture,不替代真实 signed release、fetchCloud verified 和 GUI cloud_release 证据。
2026-07-06 operator packageUrl 入口已补:production readiness pipeline 支持 --package-url <https-url>,并只通过子进程 CONTENT_FACTORY_PACKAGE_URL 传给 preflight / Studio dry-run;pipeline JSON 与命令 args evidence 不写原始 URL。真实远程包地址、tenant/token、签名 proof、trust root、catalog/bootstrap 到位后,operator 可以继续用同一个 pipeline 入口验证,不需要再手工搬运 package URL。最新只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-operator-inputs-2026-07-06-2026-07-05T16-15-09-136Z/content-factory-production-readiness-pipeline.json 仍按预期 blocked,下一阶段仍是 release_signing_and_trust。
2026-07-06 operator auth 输入已补:pipeline 支持 --tenant-id、--api-base 和 --studio-token-env <ENV_NAME>,其中 developer token 只从指定环境变量读取并注入子进程,不写入 pipeline JSON、命令 args 或 readiness report。真实发布时 operator 可以把 token 留在 shell env 中,pipeline 只记录是否配置完成。最新只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-operator-auth-2026-07-06-2026-07-05T16-20-57-411Z/content-factory-production-readiness-pipeline.json 仍 status=blocked,下一阶段仍是 release_signing_and_trust。
2026-07-06 operatorReadiness 已补:pipeline JSON 新增 operatorReadiness.inputs,以非敏感方式展示 signing key、HTTPS packageUrl、tenant/API base、Studio token、signature proof、trust root、catalog/bootstrap/fetchCloud/GUI evidence 是否配置或存在;CLI 同步打印一条包含占位符的 operatorCommand,不输出真实 package URL、token、签名或 key。最新只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-operator-readiness-2026-07-06-2026-07-05T16-26-30-882Z/content-factory-production-readiness-pipeline.json 仍 blocked,说明当前仍缺真实 production 输入,而不是本地 pipeline 编排缺口。
2026-07-06 operator missingKeys 已补:operatorReadiness 现在输出 ready=false 和 missingKeys,当前真实本机缺口明确为 appSignature / signingPrivateKey / trustRoot / packageUrl / tenantId / studioToken / catalog / bootstrap / fetchCloudEvidence / guiEvidence;API base 默认复用 Studio / LimeCore 官方地址,只有覆盖默认地址时才需要显式配置。最新只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-pipeline-2026-07-05T19-01-58-117Z/content-factory-production-readiness-pipeline.json 仍 blocked;这条证据只帮助 operator 精确补输入,不降低 production signed release gate。
2026-07-06 operator missingActions 已补:operatorReadiness.missingActions[] 会把每个 missing key 映射到占位符动作,包括显式运行 pipeline --generate-signature-proof 让同轮 Studio dry-run hash 驱动外部真实签名工具、上传 production HTTPS 包、提供 Studio auth 输入、读取 catalog/bootstrap、通过 current App Server fetchCloud 验证,以及最终用真实 Electron CDP 采集 GUI evidence。最新只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-operator-actions-2026-07-06-2026-07-05T16-38-30-089Z/content-factory-production-readiness-pipeline.json 仍 blocked;actions 不包含真实 URL、token、key 或签名值。
2026-07-06 signing command hint 已补:operatorReadiness.signingCommandHint 从同轮 preflight evidence 读取当前 packageHash / manifestHash,生成指向外部真实包 scripts/sign-release.mjs 的签名命令,占位只保留 <https-url> / <release-id> / <public-key-id>,私钥只通过 --private-key-env PLUGIN_SIGNING_PRIVATE_KEY_PEM 引用本地环境变量。最新只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-pipeline-2026-07-05T23-18-56-444Z/content-factory-production-readiness-pipeline.json 仍 blocked;hint 证明签名前置 facts 已可审计,不代表已生成 production 签名。
2026-07-06 signing command CLI 输出已补:plugin:content-factory-production-readiness-pipeline 现在在终端输出 signingCommand=...,直接带当前 packageHash / manifestHash 和占位符参数。最新只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-signing-cli-2026-07-06-2026-07-05T16-49-01-323Z/content-factory-production-readiness-pipeline.json 仍 blocked;CLI 输出仍不执行签名、不打印私钥、不打印真实 packageUrl。
2026-07-06 releaseId / publicKeyId operator 输入已补:pipeline CLI 与 operatorReadiness 会把 --release-id、--public-key-id 作为签名前置非敏感输入展示;缺真实 app.signature.yaml 时,未传这两个值也会进入 missingKeys / missingActions。最新只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-release-key-inputs-2026-07-06-2026-07-05T16-56-11-013Z/content-factory-production-readiness-pipeline.json 仍 blocked,operatorCommand 与 signingCommand 只包含占位符,不执行签名、不写 trust root、不降低 signed release gate。
2026-07-06 releaseId 绑定门禁已补:外部 content-factory-app/scripts/sign-release.mjs 现在要求 releaseId 存在,并要求 signatureRef 以 :<releaseId> 结尾;Lime production preflight 与 signed release gate 同步要求 production catalog 提供 releaseId,且 signatureRef 绑定该 releaseId。旧示例 sigstore:content-factory-app@2.2.2 会被 signing tool / gate fail-closed,不能再生成看似可用但无法审计到具体 release 的 proof。
2026-07-06 Studio-first pipeline 已补:production readiness pipeline 的执行顺序改为 Studio dry-run 先刷新当前 .lapp,preflight 再读取 dist package。最新只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-studio-first-2026-07-06-2026-07-05T17-07-47-825Z/content-factory-production-readiness-pipeline.json 仍 blocked,但 production_studio_dry_run_package_hash_mismatch 已消失,签名 hint 使用当前 packageHash sha256:57275a7075c192e93b5fd125ab7cb22f6c546a9d9cca855e8c7d8575f288b115 和 manifestHash sha256:5de25a9d61518f027810663cb50685bc6b25f1930f22e67f24ab9b757fd5f7a8。
2026-07-06 optional signing proof generation 已补:readiness pipeline 默认仍是只读;只有显式传 --generate-signature-proof 且同时具备真实 HTTPS packageUrl、releaseId、publicKeyId 和 signing private key env/file 时,才会在 Studio dry-run 得到当前 packageHash / manifestHash 后调用外部真实包 content-factory-app/scripts/sign-release.mjs,写入 app.signature.yaml 与 plugin-signature-trust-root.json,随后用生成文件重跑 Studio dry-run 并进入 preflight。pipeline evidence 只记录签名阶段 requested / status / missingKeys / stdoutBytes / stderrBytes / sanitized args,不写入真实 packageUrl、私钥、公钥或签名值。最新默认复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-optional-signing-default-2026-07-05T17-27-41-986Z/content-factory-production-readiness-pipeline.json 仍 status=blocked,steps.signingProof.status=skipped,说明无显式 flag 时不会签名、不会生成 trust root、不会降低 production signed release gate。
2026-07-06 preflight signingCommand hygiene 已补:production preflight 里的 signingCommand 不再输出 PLUGIN_SIGNING_PRIVATE_KEY_PEM=$PRIVATE_KEY_PEM ... 这种 env 赋值示例,统一改为 plugin:content-factory-production-readiness-pipeline -- --generate-signature-proof --signing-private-key-env PLUGIN_SIGNING_PRIVATE_KEY_PEM。默认只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-secret-hygiene-2026-07-06-2026-07-06T00-08-08-683Z/ 仍 status=blocked、missing codes 17 个;显式 --generate-signature-proof 缺输入复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-secret-hygiene-signing-missing-2026-07-06-2026-07-06T00-08-22-701Z/ 仍 status=blocked,steps.signingProof.status=blocked、missingKeys=packageUrl/releaseId/publicKeyId/signingPrivateKey。两条 evidence 全文扫描均无 PLUGIN_SIGNING_PRIVATE_KEY_PEM=、$PRIVATE_KEY_PEM、<private-key> 或 <token>;本轮没有签名、上传、安装、Provider 或 production API 调用。随后补 CLI help 守卫,要求 readiness pipeline / release evidence help 明确只接收 env var name,且修正 content-factory-production-release-evidence --help 不再因缺 output 参数退出 1;content-factory-production-preflight --help 也有回归守卫,明确 preflight 只做本地包事实和缺口检查,使用 current pluginLocalPackage/inspect,不会签名、上传、安装、调用 Provider 或写入 passing cloud_release evidence。最新只读 pipeline .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-preflight-help-guard-2026-07-06-2026-07-06T00-53-34-565Z/ 仍 status=blocked,steps.signingProof.status=skipped,缺 appSignature / signingPrivateKey / releaseId / publicKeyId / trustRoot / packageUrl / tenantId / studioToken / catalog / bootstrap / fetchCloudEvidence / guiEvidence。最新 production readiness 脚本集合回归为 10 个文件 84 条测试通过。
2026-07-06 signing proof evidence 审计性已补:readiness pipeline 的 sanitizeArgs 现在保留 --private-key-env <ENV_NAME> 和 --studio-token-env <ENV_NAME>,只隐藏真实 package URL、tenantId、API base、private key file path 和 token/key 值。这样成功生成签名 proof 后,content-factory-production-signing-proof.json 能审计使用了哪个本地 env 名,但仍不会泄漏 CONTENT_FACTORY_PACKAGE_URL、私钥内容或 token。最新只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-env-name-audit-2026-07-06-2026-07-06T01-03-11-240Z/ 仍 status=blocked、steps.signingProof.status=skipped、blockers=17,证明该改动没有生成假签名或降低 production gate。验证:TMPDIR="$PWD/.lime/tmp" npm test -- scripts/lib/content-factory-production-readiness-pipeline-signing.test.mjs,以及 production readiness 10 文件集合 84 条测试通过。
2026-07-06 release evidence sourceKind 推断已收紧:content-factory-production-release-evidence 不再因为 LimeCore marketplace package 有 packageUrl/sourceUri 就写出 identity.sourceKind=cloud_release;真实 ready path 必须由 package/source 显式声明 cloud_release。缺显式 sourceKind 时 summary 仍 status=blocked 并输出 catalogSourceKindCloudRelease。最新只读 pipeline .lime/qc/gui-evidence/agent-apps/content-factory-production-release-sourcekind-audit-2026-07-06-2026-07-06T01-13-12-511Z/content-factory-production-readiness-pipeline.json 仍 status=blocked、missing codes 17 个;production readiness 10 文件集合更新为 85 条测试通过。
2026-07-06 production GUI installedState 归一化已补:content-factory-production-gui-evidence 现在安全导出 summarizeInstalledState(...) / inferLiveProviderUsed(...) 供单测直接覆盖,并用 direct-run guard 避免 import CLI 时误连 CDP。collector 支持真实 App Server/Rust JSON 可能返回的 app_id / app_version / source_kind / source_uri / package_hash / manifest_hash / release_id / signature_ref / cloud_release_evidence,但 live 判定仍要求 cloud_release + signaturePolicy=required + signatureVerificationStatus=verified + cloudReleaseEvidence.status=ready + packageVerificationStatus=verified + 双 hash matched + releaseId/signatureRef + hostManagedGeneration completed + 非 fixture 正文 全部成立;缺 release identity 会保持 failed。验证:node --check scripts/plugin/content-factory-production-gui-evidence.mjs、TMPDIR="$PWD/.lime/tmp" npm test -- scripts/plugin/content-factory-production-gui-evidence.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjs、npx prettier --check scripts/plugin/content-factory-production-gui-evidence.mjs scripts/plugin/content-factory-production-gui-evidence.test.mjs。
2026-07-06 production release evidence 抓取入口已补:新增 scripts/plugin/content-factory-production-release-evidence.mjs 与 scripts/lib/content-factory-production-release-evidence.mjs,pipeline 显式传 --fetch-production-release-evidence 后才会读取 LimeCore current GET /v1/public/tenants/:tenantId/client/plugins/marketplace?query=content-factory-app 和 GET /v1/public/tenants/:tenantId/client/bootstrap;API base 默认复用 Studio / LimeCore 官方地址,缺 tenantId 或 token env 时 fail-closed 为 production_release_evidence_inputs_missing,不会发网络请求。抓取后只把 marketplace 中 content-factory 的 package ref 转成 signed gate 可消费的 catalog evidence,并把 bootstrap 裁剪到 pluginSignatureTrustRoots;summary / pipeline 不写 token、完整 bootstrap、packageUrl 原文或用户信息。该入口减少 catalog/bootstrap 手工搬运和 stale evidence 风险,但仍不上传、不发布、不安装、不调用 Provider,也不替代 fetchCloud verified 或真实 GUI cloud_release evidence。验证:npm test -- scripts/lib/content-factory-production-release-evidence.test.mjs scripts/lib/content-factory-production-readiness-pipeline.test.mjs scripts/lib/content-factory-production-readiness-pipeline-signing.test.mjs。
2026-07-05 live Provider current-turn 已通过:content-factory-current-turn-live-provider-2026-07-05T07-53-24-361Z.json 显示 backendMode=runtime、sourceKind=local_folder、provider=agnes、model=agnes-2.0-flash、liveProviderUsed=true、hostManagedGenerationStatus=completed、普通事件 1499 条、段落级 partial 68 个、最终正文长度 3153、workflow audit 16 条。content-factory-signed-release-gate 已修复 hostGenerationFixture: null 字段名误判,live evidence 重新跑 gate 后不再报 production_host_generation_not_live。
2026-07-05 live cloud_release 组合复测准备:content-factory-current-turn-smoke.mjs 已补失败诊断。后续 --cloud-release-fixture --live-provider 或真实 production GUI cloud_release 失败时,failure evidence 会保留脱敏 options、installed state、签名状态、session / turn、运行阶段、sidecar tail 和已落盘的 .failure.events.jsonl / .failure.workflow-events.jsonl。该诊断只用于定位 Provider / 安装态 / runtime/cache 问题,不降低 production 门槛;fixture-signed cloud_release 仍不能替代真实 LimeCore catalog、trust roots、fetchCloud 和 GUI signature verification。
2026-07-05 production GUI evidence collector 已补:plugin:content-factory-production-gui-evidence 只读取真实 Electron CDP 和 App Server current JSON-RPC,不安装插件、不调用 Provider、不创建 mock evidence,并把 cloud_release、signature verified、live read model、Electron IPC turn/start、workflow JSONL 和 resume lifecycle 统一写成 fail-closed 断言。collector 现在也支持 --turn-start-trace <path> 读取真实 CDP Gate B turn-start-trace.json,只提取 command / transport / status / sessionId / turnId / method 摘要并要求 session 匹配,不把用户 prompt、provider request 或原始 trace metadata 写入 production GUI evidence;这避免页面重开后 localStorage trace buffer 被清空时误判 Electron IPC 证据缺失。用当前真实 Electron session sess_f781bf079f074b7aa2ec0941bade095d 复跑得到 .lime/qc/gui-evidence/agent-apps/content-factory-production-gui-evidence-cdp-local-folder-2026-07-05T08-49-00-187Z.json,结果按预期 status=failed,因为当前仍是 local_folder、缺 signature verification、缺目标 session 的 Electron IPC turn/start trace、缺 workflowResume lifecycle。对应 signed release gate 仍 blocked,证明采集器不会把本地历史状态误报为 production ready。
2026-07-05 21:13 真实 Electron/CDP live 写作复测:复用正在运行的 Lime Electron 页签 http://127.0.0.1:1420/?nativeStartup=1,断言 window.__LIME_ELECTRON__ === true 与 electronAPI.invoke 后,从真实输入框发送 @写文章,本轮 agentSession/turn/start 通过 electron-ipc -> app_server_handle_json_lines 进入 App Server,session 为 sess_c791014cba9e42caabe337db7b81467c,turn 为 a3514955-35c8-4052-9c95-77c298d7dcfd。用户面出现自然写作引导和文章正文,普通聊天未显示 raw JSON / workspace-patch.json;后端普通 session JSONL 为 /Users/coso/Library/Application Support/lime/app-server/runtime/events/sessions/session_sess_c791014cba9e42caabe337db7b81467c.jsonl,共 3061 行,包含 turn.accepted / message.delta / artifact.snapshot / tool.started / tool.result / turn.completed;workflow audit JSONL 为同目录 session_sess_c791014cba9e42caabe337db7b81467c/workflow-events.jsonl,共 16 行,包含 workflow.run.started / workflow.connector.requested / workflow.connector.completed / workflow.run.completed。本轮证据写入 .lime/qc/gui-evidence/agent-apps/content-factory-writing-cdp-WRITING_CDP_1783257215276.json 和同名截图;production collector 复跑写入 .lime/qc/gui-evidence/agent-apps/content-factory-production-gui-evidence-cdp-live-writing-WRITING_CDP_1783257215276-2026-07-05T13-15-46-920Z.json,按预期 status=failed,剩余 liveProviderUsed / sourceKindCloudRelease / signatureVerified / workflowResumeLifecyclePresent。随后 evidence bundle 与 readiness report 写入 .lime/qc/gui-evidence/agent-apps/content-factory-production-evidence-bundle-cdp-live-writing-WRITING_CDP_1783257215276/ 和 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-report-cdp-live-writing-WRITING_CDP_1783257215276.json,signed gate 仍 blocked,缺 production catalog、fetchCloud、trust roots、GUI cloud_release signature verification 和 resume lifecycle。该结果证明真实桌面普通 turn / JSONL 审计链路可用,但仍不能声明 production signed cloud_release ready。
2026-07-05 workflow evidence helper 收口:production GUI collector 的 workflow JSONL / resume lifecycle 解析已从 880 行脚本中拆到 scripts/lib/content-factory-production-workflow-evidence.mjs,collector 降到 676 行。该 helper 真实读取 workflow-events.jsonl,支持 workflow.step.resuming / workflow.run.resuming 两种 audit 事件形态,能从 agentSession/action/respond 和 agentSession/thread/resume 的 selected-actions contract 提取 workflowResume metadata;缺 JSONL 文件时返回空事件,让 collector 保持 fail-closed,而不是靠手写 GUI evidence 关闭 production gate。collector trace evidence 现在只保留 session/action/workflowResume 等审计字段,不再写入 raw App Server params、用户 prompt、正文、Bearer 或 raw sourceUri;installed state 只记录 sourceUriConfigured 布尔值。
2026-07-05 production preflight 已补:plugin:content-factory-production-preflight 默认解包真实 /Users/coso/Documents/dev/ai/limecloud/content-factory-app/dist-package/content-factory-app-2.2.2.lapp,再通过 App Server current pluginLocalPackage/inspect 计算 manifestHash,避免手写或猜测 release hash;并支持 --fetch-cloud-from-catalog 从 production catalog 派生 descriptor 后调用 current App Server pluginPackage/fetchCloud 生成摘要证据,且会用 catalog signatureProof 与 bootstrap trust root 校验签名状态。早期证据 .lime/qc/gui-evidence/agent-apps/content-factory-production-preflight-bundle-guard-2026-07-05.json 显示 .lapp 包条目齐全;最新签名验真复跑见 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-signature-verify-final2-2026-07-05-2026-07-05T15-48-09-615Z/content-factory-production-readiness-report.json,当前真实包仍按预期 blocked 于缺 app.signature.yaml、plugin-signature-trust-root.json、production catalog、bootstrap 和 fetchCloud evidence。preflight 现在不只校验字段:app.signature.yaml 必须包含 schemaVersion / signatureRef / publicKeyId / algorithm / signature / payloadHash / signedAt,trust root 必须包含匹配的 publicKeyId / algorithm / publicKey,并会重建 canonical payload v2 后做真实密码学验签;production catalog 的 identity.signatureRef 与 signatureProof.publicKeyId / algorithm / payloadHash / signedAt 也必须和本地签名一致。content-factory-signed-release-gate 会直接读取该 preflight,blocked preflight 输出 production_preflight_not_ready,并额外要求 preflight packageHash / manifestHash 与 catalog 一致、preflight 验签通过、bootstrap 匹配 trust root 带 publicKey,防止旧 ready JSON、空壳签名文件、payloadHash 漂移或 catalog proof 漂移误过门禁。plugin:content-factory-production-evidence-bundle 进一步把这些 evidence 归档成 signed gate 标准五件套目录,并在未传某类 evidence 时删除目标目录同名旧文件,防止 stale JSON 误配。
2026-07-05 fetchCloud gate 收口,2026-07-06 继续对齐 activation readiness gate:content-factory-signed-release-gate 已把 fetchCloud summary / requirements 拆出 plugin-content-factory-signed-release-gate-fetch-cloud.mjs,又把 GUI evidence summary / requirements 拆到 plugin-content-factory-signed-release-gate-gui.mjs,core 收敛到 504 行。fetchCloud evidence 现在以 current App Server pluginPackage/fetchCloud 的 sourceKind=cloud_release、status=ready、signaturePolicy=required、packageVerificationStatus=verified、signatureVerificationStatus=verified、packageHashMatched=true、manifestHashMatched=true 为 ready 条件;GUI evidence 也必须证明相同安装态条件,否则即使 read model 显示文章生成完成也 blocked。如果 evidence 同时携带具体 packageHash / manifestHash / sourceUri / signatureRef / signatureProof,gate 会要求这些值与 production catalog 和 preflight 摘要一致,任何漂移都会输出 production_fetch_cloud_*_mismatch 并 blocked。gate 输出会去掉 fetchCloud 原始 package URL,只保留可审计摘要,避免 readiness report 扩大 URL 暴露面。
2026-07-05 production readiness report 已补:plugin:content-factory-production-readiness-report 只读 production preflight、signed gate result、catalog、bootstrap、fetchCloud 和 GUI evidence,输出 release readiness 阻塞矩阵与下一步动作;它不签名、不上传、不安装、不调用 Provider 或生产 API,也不把 signing private key、Studio token、Provider key、bearer token 或 package URL 原文写入报告。report 现在会把 preflight 内部细分缺口作为 preflightBlockers 输出,避免只看到 production_preflight_not_ready 而漏掉签名 proof 字段不完整、trust root 不匹配等具体问题;同时覆盖 signed gate 所有 production missing codes 的明确 nextAction,并在现有 gate result 与当前 evidence 重新计算结果不一致时输出 production_signed_gate_result_stale。report 还会读取 bundle manifest,比较 inputs.slots[*].sha256、输入集合 digest、gate.missingCodes / ready / status 与 gate digest;若当前 evidence 文件被替换、或 bundle 内 gate 摘要被手改 / 陈旧,分别以 production_evidence_bundle_stale / production_evidence_bundle_gate_stale blocked。当前用真实外部包 preflight 和 blocked bundle 生成 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-report-bundle-guard-2026-07-05.json,仍按预期 status=blocked,missing codes 继续指向 preflight / catalog / fetchCloud / GUI evidence 缺口,证明新增入口只是审计聚合,不降低 production signed release gate。
2026-07-05 21:42 继续复核 production 缺口并修正 Studio 发布入口:外部 /Users/coso/Documents/dev/ai/limecloud/lime-agent-app-studio 的 App Server inspect 已从旧 agentAppLocalPackage/inspect 改为 current pluginLocalPackage/inspect,并新增 dry-run releaseReadiness,在不调用 LimeCore、不上传、不发布的前提下打包、计算 packageHash、通过 App Server current inspect 取得 manifestHash、解析 app.signature.yaml 并检查 HTTPS packageUrl / tenantId / developer token。真实 content-factory-app dry-run 证据为 .lime/qc/gui-evidence/agent-apps/content-factory-studio-publish-dry-run-live-continue-2026-07-05.json,当前 packageHash / manifestHash 为 sha256:0c6f33d42918365b7f4256a78fc99b925133ea8fd956d50da25874998222b59c / sha256:5de25a9d61518f027810663cb50685bc6b25f1930f22e67f24ab9b757fd5f7a8,releaseReadiness 仍 blocked 于 production_package_url_missing / production_app_signature_yaml_missing_or_invalid / production_tenant_id_missing / production_studio_token_missing。随后重新跑 Lime production preflight / bundle / readiness report,证据为 .lime/qc/gui-evidence/agent-apps/content-factory-production-preflight-studio-dry-run-continue-2026-07-05T13-42-15-968Z.json、.lime/qc/gui-evidence/agent-apps/content-factory-production-evidence-bundle-studio-dry-run-continue-2026-07-05/、.lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-report-studio-dry-run-continue-2026-07-05.json;signed gate 仍 blocked,15 个 missing codes 同时覆盖缺 catalog/bootstrap/fetchCloud、GUI 非 cloud_release、signature 未 verified 和缺 workflow resume lifecycle。结论保持不变:本地真实 ordinary turn + JSONL 审计已成立,下一刀必须补真实 signed remote release 输入和 GUI cloud_release 安装运行证据,不能继续用 local_folder / fixture / 手写 evidence 关闭 production gate。
2026-07-05 21:46 readiness report 已链接 Studio dry-run:plugin:content-factory-production-readiness-report 新增 --studio-dry-run 输入后,使用同一组 production preflight、真实 Electron/CDP GUI evidence、bundle 和 signed gate result 重新生成 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-report-studio-dry-run-linked-2026-07-05.json。报告中 studioDryRun.present=true,Studio packageHash / manifestHash 与 preflight 一致,studioDryRun.drift=[],同时显式继承 Studio 发布侧 blockers:production_package_url_missing / production_app_signature_yaml_missing_or_invalid / production_tenant_id_missing / production_studio_token_missing。整体 status=blocked、signed gate missing count 仍为 15,这证明 Studio 发布入口、Lime preflight、bundle 与 readiness report 已对齐同一真实包事实,但 production signed cloud_release 还不能宣称 ready。
2026-07-05 22:23 production 输入缺口复核:在不打印任何密钥值的前提下探测本机环境,AGENT_APP_SIGNING_PRIVATE_KEY_PEM / PLUGIN_SIGNING_PRIVATE_KEY_PEM / CONTENT_FACTORY_PACKAGE_URL / LIME_AGENT_APP_STUDIO_TOKEN / LIMECORE_TENANT_ID / LIME_CLOUD_TENANT_ID / LIME_AGENT_APP_STUDIO_API_BASE / LIMECORE_API_BASE_URL / LIMECORE_API_BASE 均未配置;因此本轮没有执行签名、上传、bulk publish 或 production API 调用。重新用本地 App Server current binary 复跑 production preflight 与 Studio dry-run,证据为 .lime/qc/gui-evidence/agent-apps/content-factory-production-preflight-env-missing-continue-2026-07-05.json、.lime/qc/gui-evidence/agent-apps/content-factory-studio-publish-dry-run-env-missing-continue-2026-07-05.json、.lime/qc/gui-evidence/agent-apps/content-factory-production-evidence-bundle-env-missing-continue-2026-07-05/、.lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-report-env-missing-continue-2026-07-05.json。结果仍 status=blocked:preflight 缺 production_app_signature_yaml_missing / production_trust_root_missing / production_catalog_missing / production_bootstrap_missing / production_fetch_cloud_evidence_missing,Studio dry-run 缺 packageUrl、app.signature、tenantId 和 token,Studio 与 preflight 的 packageHash / manifestHash 继续一致且 drift 为空。该复核进一步确认剩余问题是 production operator 输入,不是 current inspect / 打包 / readiness 聚合回归。
2026-07-05 22:37 env 别名收口:修正 Studio CLI 与 Lime production preflight 的 env 读取口径,tenantId 同时接受 LIMECORE_TENANT_ID / LIME_CLOUD_TENANT_ID,API base 同时接受 LIME_AGENT_APP_STUDIO_API_BASE / LIMECORE_API_BASE_URL / LIMECORE_API_BASE,packageUrl 同时接受 CLI --package-url 与 CONTENT_FACTORY_PACKAGE_URL,避免 operator 配置了 Studio 侧变量但 preflight 仍误判缺失。新证据 .lime/qc/gui-evidence/agent-apps/content-factory-production-preflight-env-alias-continue-2026-07-05.json、.lime/qc/gui-evidence/agent-apps/content-factory-studio-publish-dry-run-env-alias-continue-2026-07-05.json、.lime/qc/gui-evidence/agent-apps/content-factory-production-evidence-bundle-env-alias-continue-2026-07-05/、.lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-report-env-alias-continue-2026-07-05.json 仍按预期 blocked,且 packageHash / manifestHash 与 Studio dry-run 对齐、drift 为空。
2026-07-06 07:19 production readiness 只读复跑:使用 signed gate / activation readiness parity 规则运行 content-factory-production-readiness-pipeline,输出 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-pipeline-2026-07-05T23-18-56-444Z/,整体仍 status=blocked,missing codes 为 17 个,下一阶段仍是 release_signing_and_trust。operatorReadiness.inputs.apiBase 继续为 configured=true / source=default / purpose=release-evidence-fetch;当前仍缺 appSignature / signingPrivateKey / releaseId / publicKeyId / trustRoot / packageUrl / tenantId / studioToken / catalog / bootstrap / fetchCloudEvidence / guiEvidence。本轮已把 blockerPlan.nextPhase.commandHint、operatorCommand 和 missingActions 收敛为推荐显式 --generate-signature-proof,由 pipeline 用同轮 Studio dry-run hash 生成签名 proof;不再引导 operator 先手工传 --app-signature / --trust-root,也不把 --api-base 当必填参数。随后显式 --generate-signature-proof 缺输入复跑输出 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-pipeline-2026-07-05T23-19-09-932Z/,production_signature_generation_inputs_missing,steps.signingProof.missingKeys=packageUrl/releaseId/publicKeyId/signingPrivateKey,且 appSignature.present=false / trustRoot.present=false。两条最新 evidence 目录全文均不含 <private-key> / <token>,本轮没有签名、上传、安装、Provider 或 production API 调用。
2026-07-05 production signed release 发布链已补到本地 contract:limecore 的 Plugin catalog / marketplace / bootstrap / bulk publish / MySQL snapshot 均可透传 signatureProof,client/bootstrap 顶层下发 pluginSignatureTrustRoots,bulk publish 对缺失或格式错误的签名 proof fail closed;lime-agent-app-studio 正式发布已从旧 developer package-upload / /releases 切到 current /v1/platform/plugins/bulk-publish,只接受真实 HTTPS packageUrl 与本地 app.signature.yaml,并通过 App Server inspect 计算 manifestHash。这些证据只说明服务端与发布工具链已可承接 signed release,不表示 production 环境已经部署可信根、上传真实 .lapp、写入 catalog 或完成 GUI cloud_release 安装运行。
2026-07-05 contract gate 复核已通过:check-harness-contracts 的 execution runtime 字段守卫已从旧 facade 扫描迁到 current sessionExecutionRuntimeProjection.ts,继续由 sessionExecutionRuntime.ts 守住 recent preferences / team 适配函数;npm run test:contracts 已完整通过,覆盖 App Server protocol、命令边界、harness runtime、脚本治理、Electron release workflow、cleanup report 和 docs boundary。该门禁通过只证明 current 合同未漂移,不替代 production cloud_release ready 证据。
尚未完成的是:远程 / GUI production 安装签名门禁补齐,以及远程包对 resume lifecycle metadata 的真实上报证据。resume lifecycle 已有 App Server action/respond + queued resume contract 和 signed release gate 守卫,但还没有真实 production GUI 运行证据证明远程包恢复动作上报了该 metadata;current-turn live Provider 证据仍是 local_folder,不能替代 signed cloud_release 桌面安装链路;production GUI evidence 还必须保留真实 electron-ipc -> app_server_handle_json_lines -> agentSession/turn/start 证据。
2026-07-06 追加 GUI release identity gate:production GUI evidence 现在还必须证明已安装 cloud_release 与同一轮 release 绑定,installedState 需要包含 appVersion / packageHash / manifestHash / releaseId / signatureRef,并与 catalog、preflight、fetchCloud evidence 一致;只写 verified / ready / hashMatched=true 不再足够。该要求只服务 signed release 审计,不要求右侧 UI 展示这些字段,也不能通过 fixture、localhost 或手写 JSON 关闭。
2026-07-06 追加 pipeline fetchCloud 同轮证据优先级:当 content-factory-production-readiness-pipeline 启用 --fetch-cloud-from-catalog 且 catalog 存在时,preflight 不再同时接收显式旧 --fetch-cloud 路径,bundle / operatorReadiness 也只消费本轮生成的 content-factory-fetch-cloud-evidence.json;如果本轮生成失败则保持 blocked,不回退旧文件。该改动继续服务 signed cloud_release 防 stale 审计,不签名、不上传、不安装、不调用 Provider 或 production API,也不能替代真实 production catalog/bootstrap/fetchCloud 与 Electron/CDP GUI evidence。
持续执行计划见:internal/exec-plans/writing-v2-workflow-completion-plan.md。