Writing v2 Workflow 完成计划

September 2, 2026 · View on GitHub

更新时间:2026-09-02 状态:Active(已按 Plugin v3 版本替换重新基线) 路线图:internal/roadmap/Writing/v2/

目标

@写文章 从旧版本的一次性插件执行输出,重新收敛到 Plugin v3 的 typed activation snapshot、普通 Agent turn、段落级 article artifact 和后台 workflow JSONL 审计。最终完成态必须满足:

  • 流程由内容工厂插件 manifest / activation request 声明,Lime 宿主不硬编码内容工厂业务步骤。
  • @写文章 首发必须走普通 Agent turn,保留自然引导、思考 / 工具过程和自然总结;旧 Plugin 执行器 / pane action 不能绕过普通对话。
  • 正文生成、标题、大纲、引用组织等内容工厂领域逻辑必须来自内容工厂 Plugin / workflow contract / host-managed generation 边界,不新增 App Server 宿主 content_factory_* 模板模块。
  • workflow run / step / tool / connector / hook / evidence 只写入 append-only JSONL 审计日志,不进入普通用户 UI。
  • agentSession/read 只恢复 artifact / workspace patch / Article Editor,不返回 UI-facing workflow run / step 列表。
  • WebSearch / connector / hook / artifact delta 后续进入同一个 workflow audit stream。
  • 最终文章仍进入 ArtifactFrame(articleArtifacts) 与右侧 Article Editor,不回退普通 assistant 长文。
  • 右侧 Article Workspace 不自动打开;只有用户点击文章产物或显式动作才打开。

2026-09-02 版本替换基线

本计划早期条目记录了已经被 Plugin v3 替换的 package worker、旧 runtime manifest、旧发布脚本和旧 production evidence。它们只作为历史证据保留,不是当前执行入口;当前仓库没有可继续演进的独立内容工厂 worker owner,也不允许恢复这些路径。

当前唯一可验证的 owner 与边界如下:

能力current owner当前证据
Plugin v3 包发现、安装、启用和 activation snapshotApp Server plugin_catalogruntime/pluginsruntime/app_data/pluginsinternal/roadmap/plugin/v3/README.mdlime-rs/crates/app-server/src/local_data_source/plugin_catalog.rs
Workflow 定义、读、取消、重试、响应与 JSONL 事件语义App Server runtime/workflowprocessor/workflow.rsruntime/event_log.rslime-rs/crates/app-server/src/runtime/workflow/definition.rsevents.rscancel.rstests.rs
Article artifact / Article Workspace 投影App Server article workspace projection + Renderer Article artifact / workspace componentslime-rs/crates/app-server/src/runtime/article_workspace_projection.rssrc/components/agent/chat/components/ArticleArtifactFrame.tsxsrc/components/agent/chat/workspace/WorkspaceArticleEditorRightSurface.tsx
内容工厂场景 GUI 回归scripts/agent-runtime 下的 test-only fixturescripts/agent-runtime/claw-chat-current-fixture-content-factory-article-workspace.mjs;不得视为 production runtime

当前未完成项:

  • 在 App Server current Plugin v3 activation projection 中补齐内容工厂 workflow contract,并接入普通 agentSession/turn/start;不得新增独立 worker 或旧 manifest 入口。
  • 让内容工厂 artifact partial、host tool evidence 和 workflow audit 由现有 RuntimeCore / runtime/workflow 事实源产生,并补真实 Electron Gate B 证据。
  • 如需远程发布,沿 Plugin v3 与现有发布工具的 current contract 重新定义 production evidence;旧 pluginLocalPackage/*、旧 pluginPackage/* 和旧 preflight 记录不得重新成为 Lime consumer runtime。

下方 2026-07-05 及更早的校正、表格和进度日志均为历史验证记录;其中出现的旧 worker、旧脚本和旧路径不构成当前任务清单。

2026-07-05 历史校正记录(已被版本替换)

最新修复说明主缺口已经从“普通 Agent turn 是否正确承接内容工厂产物”推进到“真实桌面 GUI 是否正确投影这条链路”:

  • 已关闭失败:后端 current-turn smoke 曾在 .lime/qc/content-factory-current-turn-debug/content-factory-current-turn-debug-host-generation-2026-07-05T03-29-33-481Z.failure.json 失败,错误为 expected paragraph-level artifact snapshots, got 0
  • 修复结论:plugin_activation 已进入普通 Agent backend;RuntimeCore 现在暂存 backend 的 turn.completed,在 terminal 前 materialize content_factory.workspace_patch artifact、host tool timeline 和 workflow audit,再封口完成态。
  • 验证证据: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" 已通过,证据为 .lime/qc/content-factory-current-turn-debug/content-factory-current-turn-debug-host-generation-2026-07-05T04-19-07-937Z.json 和同名 .workflow-events.jsonl
  • 关键指标:普通事件 35 条,artifactSnapshotCount=7streamingDocumentLengths=5hostToolEventCount=9,read model host tool call 3 个,workflow-events.jsonl 写入 16 条 metadata-only audit 事件,最终 turn.completed 位于 artifact / tool 事件之后。
  • 当前实现进展:RuntimeCore 已新增 terminal deferring sink,content-factory-appplugin_activation 会派生 App Server activation producer,在普通 Agent backend 返回后、turn.completed 落库前执行内容工厂 artifact materialization 与 audit 写入;旧单测的“不得 materialize worker artifacts”断言已改为“普通 backend 先接收请求,artifact snapshot 与 workflow JSONL 必须在 terminal 前出现”。Rust 定向测试、App Server current-turn smoke、Electron/CDP baseline 和 Electron/CDP product acceptance 已通过。
  • Electron/CDP baseline:.lime/qc/gui-evidence/writing/writing-cdp-WRITING_CDP_1783188149738-summary.json 证明真实 Electron/CDP、bridge health、electron-ipc -> app_server_handle_json_linesagentSession/turn/startcontent_article_workflow activation metadata、自然过程捕获、文章产物正文可见且无新增 invoke errors;.lime/qc/gui-evidence/writing/writing-cdp-WRITING_CDP_1783188149738-turn-start-trace.json 保留 session / turn 取证。该脚本主动打开了 Article Editor,不证明右侧不自动打开,也未完成历史恢复。
  • 本轮 read model / 历史恢复修复:agentSession/read.detail.artifactsthread_read.artifacts 已改为用户可见 artifact 集合,过滤 raw content_factory.workspace_patch / workspace_patchartifact/readevidence/export 保留完整内部 artifact。前端历史恢复允许 artifact_document + articleWorkspace 文章产物恢复为 document artifact,只隐藏 workspace patch;App Server item.updated 累计文本按累计全文覆盖,避免引导 / 思考文本重复拼接。验证已通过后端三条定向测试和前端目标 Vitest;npm run test:related 因本机磁盘空间 ENOSPC 未完成。
  • Electron/CDP product acceptance:/tmp/lime-writing-evidence/writing-final-WRITING_LIVE_1783229659461-2026-07-05T06-02-47-474Z-summary.json 证明真实 Electron 页面 http://127.0.0.1:1420/?nativeStartup=1 中目标 session sess_f781bf079f074b7aa2ec0941bade095d 满足 gateB / historyRestored / naturalLeadVisible / toolProcessVisible / articleFrameVisible / rawPatchHidden / workflowStepsHiddenInChat / rightSurfaceNotAutoOpened / rightSurfaceOpensOnClick / traceHasElectronRead 全部为 true;点击文章产物后右侧 Article Editor 正确载入文章正文。
  • App Server current-turn live Provider smoke:node scripts/plugin/content-factory-current-turn-smoke.mjs --live-provider --allow-live-provider --live-provider-id agnes --live-provider-name openai --live-model agnes-2.0-flash --live-base-url https://apihub.agnes-ai.com/v1 --live-api-key-env AGNES_API_KEY --timeout-ms 300000 --evidence-dir ".lime/qc/gui-evidence/agent-apps" --prefix "content-factory-current-turn-live-provider" 已通过,证据为 .lime/qc/gui-evidence/agent-apps/content-factory-current-turn-live-provider-2026-07-05T07-53-24-361Z.json 与同名 workflow-events.jsonl。关键指标:backendMode=runtimesourceKind=local_folderprovider=agnesmodel=agnes-2.0-flashliveProviderUsed=truehostManagedGenerationStatus=completed、普通事件 1499 条、段落级 partial 68 个、最终正文长度 3153、host tool request/result 各 3 个、workflow audit 16 条。API key 仅从环境变量读取,evidence 只记录 apiKeyEnv=AGNES_API_KEYapiKeyConfigured=true
  • Production GUI evidence 采集器:scripts/plugin/content-factory-production-gui-evidence.mjs 只连接真实 Electron CDP,断言 window.__LIME_ELECTRON__electronAPI.invoke 和 current app_server_handle_json_lines,通过 pluginInstalled/listagentSession/readevidence/export 读取当前桌面事实,并从 trace / workflow-events.jsonl 匹配 workflowResume lifecycle。workflow JSONL / resume lifecycle 解析已拆到 scripts/lib/content-factory-production-workflow-evidence.mjs 并有纯单测覆盖 action/respond、queued resume contract、缺 JSONL fail-closed,以及 App Server params 最小投影;collector 从 880 行降到 676 行。trace evidence 只保留 session/action/workflowResume 审计字段,不写 raw App Server params、用户 prompt、正文、Bearer 或 raw sourceUri;缺 cloud_release、signature verified、live read model、Electron IPC turn/start 或 resume lifecycle 时写出 status=failedmissingAssertions
  • 2026-07-05 21:13 真实 Electron/CDP live 写作复测:真实 Lime/Electron 页签 http://127.0.0.1:1420/?nativeStartup=1 中发送 @写文章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 行,workflow audit JSONL /Users/coso/Library/Application Support/lime/app-server/runtime/events/sessions/session_sess_c791014cba9e42caabe337db7b81467c/workflow-events.jsonl 写入 16 行。证据:.lime/qc/gui-evidence/agent-apps/content-factory-writing-cdp-WRITING_CDP_1783257215276.json.lime/qc/gui-evidence/agent-apps/content-factory-production-gui-evidence-cdp-live-writing-WRITING_CDP_1783257215276-2026-07-05T13-15-46-920Z.json。production collector 仍按预期 status=failed,缺 liveProviderUsed / sourceKindCloudRelease / signatureVerified / workflowResumeLifecyclePresent;bundle / readiness report 仍 blocked,输出目录 .lime/qc/gui-evidence/agent-apps/content-factory-production-evidence-bundle-cdp-live-writing-WRITING_CDP_1783257215276/。这条证据关闭“真实桌面是否走普通 turn + JSONL 审计”的疑问,但不关闭 signed cloud_release production 门槛。
  • Production preflight:新增 scripts/plugin/content-factory-production-preflight.mjsplugin:content-factory-production-preflight,读取真实外部 .lapp,解包后通过 current App Server pluginLocalPackage/inspect 计算 production manifestHash,避免用脚本猜 hash。该入口现在也支持 --fetch-cloud-from-catalog,从 production catalog 派生 descriptor 并调用 current App Server pluginPackage/fetchCloud 生成 fetchCloud evidence 摘要,再用 catalog signatureProof 与 bootstrap trust root 校验签名状态;没有真实 HTTPS catalog / package 或签名未由可信根验证时仍保持 blocked,不接受手写 ready。最新真实包 preflight 输出 .lime/qc/gui-evidence/agent-apps/content-factory-production-preflight-bundle-guard-2026-07-05.json,证明 .lapp 可读且包含 44 个条目、packageHash=sha256:89aec20e637713c668f8bc34c303256ac83806c5d2e75486e6453bd638ac3f8cmanifestHash=sha256:c1d3aa37d4b2f6c3c4a006525a1bba4b4ee407f61fe9cff8192704b48a209248、无缺包内条目;同时按预期 blocked 于 production_app_signature_yaml_missing / production_trust_root_missing / production_catalog_missing / production_bootstrap_missing / production_fetch_cloud_evidence_missing。该入口还输出非敏感 publishReadiness,当前本机缺 signing private key、Studio token、tenantId、API base 和远程 packageUrl;该摘要只记录 env 名和 configured 布尔值,不签名、不上传、不安装、不生成 passing cloud_release evidence。preflight 现在还会校验 app.signature.yaml proof 字段完整性、schemaVersion、payload hash 格式、signedAt 时间戳、Host verifier 支持算法、trust root publicKeyId / algorithm / publicKey 与 proof 是否匹配,并重建 canonical plugin-cloud-release-signature-payload/v2 后用 trust root public key 做真实密码学验签;production catalog 的 identity.signatureRefsignatureProof.publicKeyId / algorithm / payloadHash / signedAt 也必须和本地 app.signature.yaml 一致。signed release gate 读取 preflight 时也要求 signatureCryptographicVerificationStatus=verifiedsignaturePayloadHashMatched=true,并要求 bootstrap 匹配 trust root 带 publicKey;存在空壳签名文件、手写 ready preflight、payloadHash 漂移、签名验不过或 catalog proof 漂移仍 blocked。
  • Production signed release gate parity:plugin-content-factory-signed-release-gate-core.mjs 已把 fetchCloud ready 判断拆到 scripts/lib/plugin-content-factory-signed-release-gate-fetch-cloud.mjs,把 GUI evidence summary / requirements 拆到 scripts/lib/plugin-content-factory-signed-release-gate-gui.mjs,core 收敛到 504 行。gate 继续要求 fetchCloud evidence 证明 cloud_release / ready / signaturePolicy=required / verified signature / verified package / packageHashMatched / manifestHashMatched;GUI evidence collector、readiness report 和 pipeline 也必须记录并断言同一组 activation readiness gate 字段。若 evidence 额外带具体 packageHash / manifestHash / sourceUri / signatureRef / signatureProof,这些值必须与 production catalog 和 preflight 摘要一致,任何漂移都会输出 production_fetch_cloud_*_mismatch。GUI installedState 还必须携带合法 appVersion / packageHash / manifestHash / releaseId / signatureRef,并与 catalog / preflight / fetchCloud 同一轮 release identity 对齐;缺字段、hash 非法、identity 漂移或 fixture / localhost marker 都不能 ready。gate 输出不会复制 fetchCloud 原始 package URL,只用于内部比对。
  • Production readiness report:scripts/plugin/content-factory-production-readiness-report.mjsplugin:content-factory-production-readiness-report 只读 production preflight、signed gate result、bundle manifest 和五类 production evidence,输出阻塞矩阵与下一步动作。它复用 signed release gate 的 missing codes,不新增第二套 ready 口径;不签名、不上传、不安装、不调用 Provider 或生产 API,也不复制密钥、token 或 package URL 原文。report 同时输出 preflightBlockers,把签名 proof 不完整、trust root 不匹配等 nested preflight codes 显式列出;现在还覆盖 signed gate 所有 production missing codes 的明确 nextAction,在现有 gate result 与当前 evidence 重新计算结果不一致时输出 production_signed_gate_result_stale,在 bundle manifest 的输入 sha256/digest 与当前 evidence 不一致时输出 production_evidence_bundle_stale,在 bundle gate 摘要 / digest 与当前重算 gate 不一致时输出 production_evidence_bundle_gate_stale。当前真实外部包 report 输出 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-report-bundle-guard-2026-07-05.json,按预期 blocked。
  • 2026-07-05 21:42 production 复核:lime-agent-app-studio 已把 App Server inspect 从旧 agentAppLocalPackage/inspect 改为 current pluginLocalPackage/inspect,并在 publish --dry-run 输出 releaseReadiness;真实 content-factory-app dry-run 证据 .lime/qc/gui-evidence/agent-apps/content-factory-studio-publish-dry-run-live-continue-2026-07-05.json 显示 Studio 与 Lime preflight 已对齐到 packageHash=sha256:0c6f33d42918365b7f4256a78fc99b925133ea8fd956d50da25874998222b59cmanifestHash=sha256:5de25a9d61518f027810663cb50685bc6b25f1930f22e67f24ab9b757fd5f7a8,但 dry-run blocked 于缺 packageUrl、app.signature、tenantId 和 developer token。随后重新跑 plugin:content-factory-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.jsonblocked,15 个 missing codes 覆盖缺 catalog/bootstrap/fetchCloud、GUI 仍是 local_folder、signature 未 verified 和 workflow resume lifecycle 缺失。该复核确认当前问题不是 mock 测试误差,而是缺真实 signed remote release 输入和 GUI cloud_release 安装运行证据。
  • 2026-07-05 21:46 linked readiness report:plugin:content-factory-production-readiness-report --studio-dry-run ... 已把 Studio dry-run evidence 纳入同一 production readiness report,输出 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-report-studio-dry-run-linked-2026-07-05.json。该 report 中 studioDryRun.present=truestudioDryRun.drift=[],Studio packageHash / manifestHash 与 preflight 一致;blockers 同时包含 Studio 发布侧缺口 production_package_url_missing / production_app_signature_yaml_missing_or_invalid / production_tenant_id_missing / production_studio_token_missing 和 signed gate 的 15 个 production missing codes。结论:发布工具链与 Lime gate 已读同一真实包事实,但 production 仍 blocked,不能用 dry-run、local_folder GUI evidence 或缺 catalog/bootstrap/fetchCloud 的 bundle 关闭门槛。
  • 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 均未配置。本轮只复跑本地 fail-closed evidence,不签名、不上传、不调用 production API。新证据 .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 仍全部 blocked;preflight 与 Studio dry-run 的 packageHash / manifestHash 一致且 drift 为空。该刀证明当前不能继续靠代码补齐 production ready,下一步必须提供真实 signing key、HTTPS packageUrl、tenantId/token、production catalog/bootstrap/fetchCloud 和 GUI cloud_release evidence。
  • 2026-07-05 22:37 env 别名收口:发现上一轮 preflight 与 Studio CLI 对 tenant/API base/env packageUrl 名称存在错位风险,已统一为 LIMECORE_TENANT_ID / LIME_CLOUD_TENANT_IDLIME_AGENT_APP_STUDIO_API_BASE / LIMECORE_API_BASE_URL / LIMECORE_API_BASE,并让 Studio publish dry-run 在缺 CLI --package-url 时读取 CONTENT_FACTORY_PACKAGE_URL;Studio error 文案同步提示两个 tenant 别名。新增 preflight 单测证明别名配置会被识别且不泄漏值;Studio config/publisher 测试证明不读本机 token、支持这些 env 别名和 packageUrl env。刷新证据 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-report-env-alias-continue-2026-07-05.json 仍 blocked,说明现在的阻塞不是 env 名称漂移,而是真实发布输入缺失。
  • 2026-07-05 23:16 production readiness phase plan:content-factory-production-readiness-report 现在输出 blockerPlan,把 blocker 分成 local_package_preflight / release_signing_and_trust / studio_publish_inputs / production_catalog_bootstrap / fetch_cloud_verification / desktop_cloud_release_e2e / evidence_integrity,并给出 nextPhase、owner、命令提示和 codes。content-factory-production-readiness-pipeline 同步写入该 plan,并修正 --fetch-cloud-from-catalog 在无 catalog 时不再把 preflight 命令跑失败:pipeline 会记录 fetchCloudFromCatalog.skippedReason=catalog_missing,继续生成 blocked preflight / bundle / report。真实复跑 .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 显示 status=blocked、preflight present、nextPhase=release_signing_and_trust,当前仍缺真实 app.signature.yaml、trust root、Studio 发布输入、catalog/bootstrap/fetchCloud 和 GUI cloud_release evidence;没有签名、上传、安装、Provider 或 production API 调用。
  • 2026-07-05 23:36 production 签名验真收口:新增 scripts/lib/content-factory-production-signature-verifier.mjs,复刻外部 content-factory-app/scripts/sign-release.mjs 的 canonical payload v2,支持 RSASSA-PKCS1-v1_5-SHA256 / RSA-PSS-SHA256 / ECDSA-P256-SHA256 / Ed25519,并只输出 verified/failed/not_attempted、payloadHash 是否匹配和 failure codes,不输出 raw signature / publicKey / private key。content-factory-production-preflight 现在要求 app.signature.yamlschemaVersion,trust root 带 publicKey,并在 production catalog 可用时用 canonical payload + trust root public key 做真实验签;payloadHash 漂移输出 production_signature_payload_hash_mismatch,验签失败输出 production_signature_cryptographic_verification_failed,缺公钥输出 production_signature_trust_root_public_key_missingcontent-factory-signed-release-gate 同步要求 preflight signatureCryptographicVerificationStatus=verifiedsignaturePayloadHashMatched=true,并要求 bootstrap 匹配 trust root 带 publicKey。真实只读 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.jsonstatus=blockednextPhase=release_signing_and_trust,preflight 中 signatureCryptographicVerificationStatus=not_attempted,原因是外部真实包当前仍缺 app.signature.yamlplugin-signature-trust-root.json;本轮没有签名、上传、安装、Provider 或 production API 调用。
  • 2026-07-05 23:56 production catalog sourceKind 收紧复跑:content-factory-signed-release-gate 与 readiness pipeline 现在只接受 production catalog sourceKind=cloud_releaseremote 不再被视为 signed catalog ready;对应 missing code 为 production_catalog_not_cloud_release。随后补齐 pipeline 默认签名输入传递:显式参数优先,否则使用 content-factory-app/app.signature.yamlplugin-signature-trust-root.json,确保 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.jsonstatus=blockedfetchCloudFromCatalog.skippedReason=catalog_missingblockerPlan.nextPhase=release_signing_and_trust。当前下一刀仍是补真实 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、bundle、fetchCloud、GUI cloud_release signature verified、Electron IPC trace 与 workflow resume lifecycle 都 ready 时,pipeline / readiness report / signed gate 会整体 ready 且 blockers 为空;同时保留现有 blocked 测试,防止 fixture、remote、缺 catalog 或缺签名输入误过门禁。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjs
  • 2026-07-06 operator packageUrl 入口收口:plugin:content-factory-production-readiness-pipeline 新增 --package-url <https-url>,以 CONTENT_FACTORY_PACKAGE_URL 子进程环境变量透传给 preflight 与 Studio dry-run,不把原始 URL 写入 pipeline JSON 或命令 args evidence。这样 operator 可以用一条命令提供真实远程包地址,同时保持 report 脱敏。最新只读复跑 .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.jsonstatus=blockedblockerPlan.nextPhase=release_signing_and_trust。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjsnode --check 对 pipeline lib / CLI / test。
  • 2026-07-06 operator auth 输入收口:pipeline 同步支持 --tenant-id--api-base--studio-token-env <ENV_NAME>,同样只通过子进程环境传给 preflight / Studio dry-run;developer token 只从指定环境变量读取,不进入 command args、pipeline JSON 或 report。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs
  • 2026-07-06 operatorReadiness 证据收口:pipeline JSON 新增 operatorReadiness,只记录 signing key / packageUrl / tenantId / API base / Studio token / signature proof / trust root / catalog / bootstrap / fetchCloud / GUI evidence 的 configured 布尔值、env 名和本地文件存在状态,并输出一条脱敏 operatorCommand;不复制 package URL、token、私钥、公钥、签名或 production API response。最新只读复跑 .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.jsonstatus=blockedoperatorReadiness.inputs.*.configured=falseblockerPlan.nextPhase=release_signing_and_trust。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs scripts/lib/content-factory-production-readiness-plan.test.mjsnpm run governance:scripts、真实只读 pipeline 复跑。
  • 2026-07-06 operator missingKeys 收口:operatorReadiness 现在额外输出 readymissingKeys,把本轮继续缺的生产输入归并为 appSignature / signingPrivateKey / releaseId / publicKeyId / trustRoot / packageUrl / tenantId / studioToken / catalog / bootstrap / fetchCloudEvidence / guiEvidence;API base 默认复用 Studio/LimeCore 官方地址,只在覆盖默认地址时需要显式配置。CLI 同步打印 operatorReadiness=missing missingKeys=...。最新只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-pipeline-2026-07-05T19-01-58-117Z/content-factory-production-readiness-pipeline.jsonstatus=blockednextPhase=release_signing_and_trust。这只是审计聚合,不生成假签名、不上传、不安装、不调用 Provider 或 production API。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs、真实只读 pipeline 复跑和敏感值扫描。
  • 2026-07-06 operator missingActions 收口:operatorReadiness 新增 missingActions[],给每个 missing key 一条占位符动作,例如显式运行 pipeline --generate-signature-proof 让同轮 Studio dry-run hash 驱动外部真实签名工具、上传 .lapp 到 production HTTPS、提供 tenant/API/token、读取 catalog/bootstrap、运行 --fetch-cloud-from-catalog、最后用真实 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.jsonstatus=blocked,敏感扫描未命中真实 key/token/URL。该 action list 只是 operator 手册的 machine-readable 版本,不降低 signed release gate。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs、真实只读 pipeline 复跑和敏感值扫描。
  • 2026-07-06 signing command hint 收口:operatorReadiness.signingCommandHint 现在从同轮 preflight evidence 读取当前真实 packageHashmanifestHash,生成只含占位符 packageUrl / releaseId / publicKeyId / private-key 的签名命令,指向外部真实包 content-factory-app/scripts/sign-release.mjs,并输出 scriptPresenthasCurrentHashes。最新只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-signing-hint-2026-07-06-2026-07-05T16-45-18-709Z/content-factory-production-readiness-pipeline.jsonstatus=blockednextPhase=release_signing_and_trust,签名 hint 中 packageHash 为 sha256:0c6f33d42918365b7f4256a78fc99b925133ea8fd956d50da25874998222b59c,manifestHash 为 sha256:5de25a9d61518f027810663cb50685bc6b25f1930f22e67f24ab9b757fd5f7a8;敏感扫描未命中真实 key/token/URL。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs、真实只读 pipeline 复跑。
  • 2026-07-06 signing command CLI 输出收口:readiness pipeline CLI 现在会在 operatorCommand 后直接打印 signingCommand=...,使用同轮 preflight 的真实 hash 和占位符,不需要 operator 先打开 JSON 才能拿到签名准备命令;私钥只通过 --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.jsonstatus=blocked,终端输出只包含 <https-url> / <release-id> / <public-key-id> 这类非 secret 占位符。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjs scripts/lib/content-factory-production-readiness-plan.test.mjsnpm test -- scripts/lib/content-factory-production-preflight-core.test.mjs、真实只读 pipeline 复跑。
  • 2026-07-06 releaseId / publicKeyId operator 输入收口:readiness pipeline CLI 已接收 --release-id--public-key-id,lib 层会把两者纳入 operatorReadiness.inputs、缺真实 app.signature.yaml 时的 missingKeys / missingActions,并用传入值生成 signingCommandHint.signatureRef。最新只读复跑 .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.jsonstatus=blockedoperatorCommandsigningCommand 只保留占位符;该能力只减少 operator 漏填签名上下文,不替代真实 signature proof、trust root、catalog/bootstrap、fetchCloud verified 或 GUI cloud_release evidence。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjsnode --check 对 pipeline lib / CLI、真实只读 pipeline 复跑。
  • 2026-07-06 releaseId 绑定与 Studio-first pipeline 收口:外部 content-factory-app/scripts/sign-release.mjs 已要求 releaseId 存在且 signatureRef 必须以 :<releaseId> 结尾;Lime production preflight 和 signed release gate 同步要求 catalog 带 releaseId 并校验 signatureRef 绑定。readiness pipeline 执行顺序改为 Studio publish --dry-run 先刷新当前 .lapp,preflight 再读取同一轮 dist package,避免 preflight 读旧包造成 production_studio_dry_run_package_hash_mismatch。最新只读复跑 .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.jsonstatus=blocked,但 Studio/preflight packageHash 已对齐,signing hint 使用当前 packageHash sha256:57275a7075c192e93b5fd125ab7cb22f6c546a9d9cca855e8c7d8575f288b115。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjsnpm test -- scripts/lib/content-factory-production-preflight-core.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs、外部 content-factory-app npm test、真实只读 pipeline 复跑。
  • 2026-07-06 optional signing proof generation 收口:readiness pipeline 默认仍保持只读;新增显式 --generate-signature-proof 后,会先跑 Studio dry-run 获取当前 .lapp packageHash / manifestHash,再调用外部真实 content-factory-app/scripts/sign-release.mjs 生成 app.signature.yamlplugin-signature-trust-root.json,随后用生成文件重跑 Studio dry-run 并进入 preflight。缺真实 HTTPS packageUrl、releaseId、publicKeyId 或 signing private key env/file 时 fail-closed 为 production_signature_generation_inputs_missing;签名阶段 evidence 只记录 requested / status / missingKeys / 输出路径存在性 / sanitized args / exitCode / stdoutBytes / stderrBytes,不写入真实 URL、私钥、公钥、签名或 token。最新默认只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-optional-signing-default-2026-07-05T17-27-41-986Z/content-factory-production-readiness-pipeline.jsonstatus=blockedsteps.signingProof.status=skipped;显式缺输入复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-optional-signing-missing-2026-07-05T17-30-55-409Z/content-factory-production-readiness-pipeline.jsonstatus=blocked,missing codes 包含 production_signature_generation_inputs_missing,且未调用签名脚本。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline-signing.test.mjsnpm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjsnpm test -- scripts/lib/content-factory-production-preflight-core.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjs scripts/lib/content-factory-production-readiness-plan.test.mjs、真实只读 / 显式缺输入 pipeline 复跑和脱敏扫描。
  • 2026-07-06 production release evidence 抓取收口:新增 scripts/lib/content-factory-production-release-evidence.mjsscripts/plugin/content-factory-production-release-evidence.mjs,readiness pipeline 只有显式 --fetch-production-release-evidence 才会读取 LimeCore current client/plugins/marketplace?query=content-factory-appclient/bootstrap。API base 默认复用 Studio/LimeCore 官方地址;缺 tenantId / studioToken 时 fail-closed 为 production_release_evidence_inputs_missing,不会调用抓取脚本;抓取成功后只把 marketplace 中 content-factory 的 package ref 转成 signed gate catalog evidence,并把 bootstrap 裁剪到 pluginSignatureTrustRoots,summary / pipeline 不写 token、完整 bootstrap、packageUrl 原文或用户信息。content-factory-production-readiness-pipeline.mjs 同时把 operator readiness 拆到 content-factory-production-operator-readiness.mjs,主 pipeline 从 891 行降到 684 行。验证: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.mjsnode --check 对新增 helper / CLI / pipeline。
  • LimeCore signed release contract:limecore 本地服务端已经支持 Plugin release signatureProof、bootstrap pluginSignatureTrustRootsplugin.signatureTrustRoots[] / PLUGIN_SIGNATURE_TRUST_ROOTS_JSON 配置入口和 bulk publish fail-closed 签名校验,并同步 OpenAPI fragments / bundle 与 packages/types。这只证明服务端契约可用,不等同于 production 部署或真实桌面安装完成。
  • Studio publish chain:lime-agent-app-studio 正式 --publish 已从旧 developer package-upload / /releases 切到 current /v1/platform/plugins/bulk-publish,要求真实 HTTPS --package-url 与本地 app.signature.yaml,并在 bulk publish 前通过 App Server inspect 计算 manifestHash。这只证明发布工具链 ready,不等同于 production signed release 已发布。

历史事实源(旧版本证据,仅供追溯)

Surface当前状态分类证据
插件 workflow declaration前端/安装测试仍主要读取 test-only manifest snapshot;但 seeded runtime package 已改为复制 testing/fixtures/package-root/ 下同步自真实 content-factory-app 的包快照,且 content-factory-app.json 的 workflow/workbench/skill 绑定现已与 package-root 五个 article-* skill 对齐。package-root 也已同步 release 签名工具链守卫,要求 plugin.json / package.json 版本一致、release:sign 入口存在、scripts/sign-release.mjs 和签名测试不漂移。partial current / guarded test-onlysrc/features/plugin/testing/fixtures/content-factory-app.jsonsrc/features/plugin/testing/fixtures/package-root/src/features/plugin/testing/contentFactoryFixtureSync.unit.test.ts
宿主 workflow audit eventApp Server 在 activation producer 前生成 workflow.run.started / workflow.step.started,并把 producer progress 中的 workflow.* 分流写入 JSONL。current / P1lime-rs/crates/app-server/src/runtime/workflow/events.rslime-rs/crates/app-server/src/runtime/event_log.rs
硬编码业务步骤Rust 宿主不持有 research / strategy / draft / review / image-plan fallback;缺 workflow key / steps 时不伪造。current guardlime-rs/crates/app-server/src/runtime/workflow/definition.rslime-rs/crates/app-server/src/runtime/workflow/tests.rs
activation producer progressPlugin v3 activation 只生成 typed snapshot;段落级 artifact.snapshot progress 由 App Server current producer 在 host-managed generation 结果可用时输出,避免无模型结果时把 deterministic 样例伪装成流式文章。外部 package smoke、App Server current local_folder host-generation turn smoke 和受控 cloud_release evidence 只作为验证材料,不能升级为独立 Plugin runtime owner。远程 / GUI production 安装运行闭环仍待服务端部署、真实可信根配置和 GUI 复测。external package + App Server current activation turn verified / production pendinglime-rs/crates/app-server/src/runtime/workflow/events.rsscripts/plugin/content-factory-current-turn-smoke.mjsscripts/plugin/content-factory-signed-release-gate.mjs
host-managed generation内容工厂 activation producer 不持有 provider key;App Server 在 current turn 内通过 direct provider config / Provider 池完成托管正文生成,并把结果注入 hostManagedGenerationruntime.hostManagedGenerationResult。受控 OpenAI-compatible fixture 与 Agnes live Provider current-turn 已证明宿主正文生成可用;production signed cloud_release GUI 证据仍未完成。current host seam + request-derived controlled fixture verified + live provider current-turn verified / production signed cloud_release pendinglime-rs/crates/app-server/src/runtime/workflow/events.rsscripts/lib/content-factory-host-generation-fixture.mjsscripts/plugin/content-factory-current-turn-smoke.mjs
artifact partial pass-throughApp Server 只透传 activation producer 生成期 artifact.snapshot partial,不再用最终 documentText 回切伪流式。current guardlime-rs/crates/app-server/src/runtime/workflow/events.rs、相关 artifact snapshot 测试
前端过程显示右侧 Article Editor 不渲染 workflow rail;renderer event stream 对 workflow.* 返回 nullcurrent / P1WorkspaceArticleEditorSurface.tsxappServerEventStream.ts
GUI 回归内容工厂文章工作台 fixture 改为断言 workflow UI facts / rail 缺席,且 worker dogfood turn 必须在 backendMode=runtime 下通过 host-managed generation 完成;host_generation_unavailable 不再是 GUI 成功证据。GUI dogfood 的本地 OpenAI-compatible provider 现在复用共享 request-derived fixture,并在 evidence 中标记 fixtureOnly,不能作为 production ready 证据。current fixture evidence / production-blockedscripts/agent-runtime/claw-chat-current-fixture-content-factory-*.mjsscripts/lib/content-factory-host-generation-fixture.mjs.lime/qc/gui-evidence/claw-chat-current-fixture/claw-chat-current-fixture-summary.json.lime/qc/gui-evidence/claw-chat-current-fixture/claw-chat-current-fixture-content-factory-article-workspace-regression-summary.json
workflow audit JSONL当前物理路径沿用 event log 根目录:sessions/session_<id>/workflow-events.jsonl。Activation producer 产生的 workflow.connector.requested / workflow.tool.* / workflow.artifact.delta 必须由 App Server 绑定插件声明里的 workflowRunId + stepId 后才能写入 audit;RuntimeBackend 回填到 workspace patch 的 hostSearchEvidence 会追加为 audit-only workflow.connector.completed;插件 hook lifecycle 会转换为 audit-only workflow.hook.completed;retry lifecycle 会追加 workflow.run.retrying / workflow.step.retrying。写盘前统一执行 metadata-only 脱敏,prompt / query / result / providerConfig / message / text / summary 等 raw content 字段被替换为 redaction 占位,保留 workflow id、step、connector、tool、status 等审计元数据。这些事件不进入普通输出 / read model / Article Workspace;App Server current evidence/export 已能读取 JSONL 并在 EvidencePackSummary.observabilitySummary.workflow_audit 输出 metadata-only 摘要。EventLogWriter::compact_session_workflow_audit_events(session_id, retain_recent) 会把 active JSONL 的旧记录归档到同目录 workflow-events.archive.<first_seq>-<last_seq>.jsonl,active 文件只保留最近 N 条;archive 路径按 sequence 范围确定并覆盖写入,重试 compaction 不会重复追加同一批旧 audit;读取和 Evidence Pack 聚合会同时消费 archive + active,retain_recent=0 fail closed,会话清理会删除 active 与 archive。默认自动策略在 active audit 超过 1024 条后触发 compaction,并保留最近 512 条;触发点在 App Server event log 边界,压缩失败只告警,不让已落盘 audit 写入回滚,也不暴露给 UI 或 activation metadata。current / P1lime-rs/crates/app-server/src/runtime/event_log.rslime-rs/crates/app-server/src/runtime/exports.rslime-rs/crates/app-server/src/runtime/workflow/events.rslime-rs/crates/app-server/src/runtime/workflow/cancel.rs
read model workflow factsagentSession/read.detail.thread_read 不再返回 workflow_runs / workflow_stepscurrent / P1lime-rs/crates/app-server/src/runtime/read_model.rs
step scheduler / retry / cancel / resumeactivation producer 当前按普通 turn 生成期输出 artifact;retry / cancel 已有 audit-only 事件;resume/action response 已支持 workflowResume metadata 绑定 workflowRunId / workflowKey / stepId 后写 audit-only workflow.step.resuming / workflow.run.resuming;普通 queued resume 仍 fail-closed,远程包仍需真实上报该 metadata lifecycle。partial / P2lime-rs/crates/app-server/src/runtime/workflow.rslime-rs/crates/app-server/src/runtime/tests/queue_resume_audit.rs
production signed release chainLimeCore 本地 contract 已能存储、投影和下发 Plugin release signatureProofpluginSignatureTrustRoots,Studio 发布 CLI 已切到 current Plugin bulk publish,生产 gate / preflight / readiness report 会拒绝缺 signature proof、trust roots、fetchCloud、GUI cloud_release 或 resume lifecycle 的假完成。evidence bundle 会记录每个输入 JSON 的 sha256 和输入集合 digest;readiness report 会二次计算 gate 并阻断 stale result,还会用 blockerPlan.nextPhase 把缺口分到 release signing、Studio 输入、catalog/bootstrap、fetchCloud 和 desktop cloud_release E2E。readiness pipeline 在缺 catalog 时跳过 fetchCloud 自动调用但保留 blocked preflight evidence,不再把缺 catalog 误升级成 preflight command failure;显式 --fetch-production-release-evidence 可只读 LimeCore current client marketplace/bootstrap,自动落本地 catalog/bootstrap evidence,再交给 preflight / bundle。readiness report 只聚合缺口;readiness pipeline 默认只读,只有显式 --generate-signature-proof 才会调用外部真实签名工具生成 app.signature.yaml / trust root,且仍不上传、不安装、不调用 Provider 或 production publish API。剩余缺口是 production 服务部署、可信根配置、真实 HTTPS packageUrl、production catalog 写入、fetchCloud verified evidence 和 Electron/CDP live cloud_release 证据。contract verified / production pending/Users/coso/Documents/dev/ai/limecloud/limecore/Users/coso/Documents/dev/ai/limecloud/lime-agent-app-studioscripts/plugin/content-factory-production-preflight.mjsscripts/plugin/content-factory-signed-release-gate.mjsscripts/plugin/content-factory-production-evidence-bundle.mjsscripts/plugin/content-factory-production-readiness-report.mjsscripts/plugin/content-factory-production-readiness-pipeline.mjsscripts/plugin/content-factory-production-release-evidence.mjs

历史完成审计(旧版本证据)

已完成 P0

  • @写文章 turn accepted 后,worker 执行前生成 workflow run / first step started audit event。
  • workflow key、title、step id/title/subagent/skill refs/expected output 来自插件声明。
  • 宿主不 fallback 写死内容工厂五步。
  • worker stdout NDJSON progress 可实时转为 workflow.step.progress 等白名单 audit event。
  • 前端不再把 workflow.* 当普通 runtime event 渲染。
  • GUI fixture 证明内容工厂文章工作台不显示流程轨,最终文章和编辑稿仍可恢复。

未完成 P1/P2

  • 真实内容工厂 Plugin package 通过 Lime current App Server local_folder 运行路径进入 artifact read model 与 workflow JSONL,不再只依赖 fixture worker 作为实现证据。
  • 真实内容工厂 Plugin package 通过 fixture-signed cloud_release installed state 进入 Lime current App Server 非 local_folder runtime/cache 路径;该证据不等同于生产 LimeCore 签名下发。
  • LimeCore 本地服务端契约支持 Plugin release signatureProof、bootstrap pluginSignatureTrustRoots、config trust roots 和 bulk publish fail-closed 签名校验;生产部署和真实 GUI 复测仍未完成。
  • lime-agent-app-studio 发布链已改为 current Plugin bulk publish:正式发布必须传真实 HTTPS packageUrl、本地 app.signature.yaml 和 App Server inspect 得到的 manifestHash;旧 developer package upload / releases 不再是主线。
  • 外部 content-factory-app 发布侧具备 signatureProof 生成工具,私钥仅来自环境变量或本地文件参数,不落库;Lime 内 package-root 快照已同步该工具和守卫。该证据只证明发布工具链 ready,不等同于真实 production signed release 已发布。
  • Lime 侧具备 content-factory-signed-release-gate,会拒绝 fixture cloud release、localhost host generation、缺 production preflight / catalog / bootstrap trust roots / fetchCloud / GUI live Provider evidence 的假完成;gate 现在也要求 GUI production evidence 证明真实 electron-ipc -> app_server_handle_json_lines -> agentSession/turn/start、typed action response 或 workflow/respondmetadata.workflowResume,并匹配 workflow.step.resuming / workflow.run.resuming JSONL 事件,缺 Electron IPC turn/start 或 resume lifecycle metadata 继续 blocked;thread/resume 不再作为 workflow resume 证据来源。gate 支持 --evidence-dir 目录化读取 preflight / catalog / bootstrap / fetchCloud / GUI 五份 production evidence 并默认写回 result JSON,减少手工路径误配。
  • Lime 侧具备 content-factory-production-preflight,会从 .lapp 字节计算 package hash,并通过 App Server current pluginLocalPackage/inspect 计算 manifest hash;缺 app signature、trust root、production catalog、bootstrap 或 fetchCloud 时保持 blocked;签名 YAML / trust root 即使存在,也必须字段完整、算法受支持、互相匹配、trust root 带 publicKey,并通过 canonical payload v2 密码学验签,不把 local package fact、空壳签名文件或手写 ready JSON 误当 production release ready。
  • Lime 侧具备 content-factory-production-evidence-bundle,会把 production preflight / catalog / bootstrap / fetchCloud / GUI evidence 复制到 signed gate 标准五件套目录并写入 gate result;未传入的 evidence 会删除目标目录同名旧文件,避免复用目录时 stale JSON 误过门禁;bundle manifest 记录输入 JSON sha256、输入集合 digest、gate digest 和 gate result sha256
  • Lime 侧具备 content-factory-production-readiness-report,会把外部 app 目录、production preflight、signed gate、bundle manifest 和五类 evidence 汇总成只读 blocked/ready 报告;该入口只做审计聚合,不签名、不上传、不安装、不调用 Provider 或生产 API;report 会识别 stale signed gate result 并输出 production_signed_gate_result_stale,也会识别 stale evidence bundle input / gate 摘要并分别输出 production_evidence_bundle_stale / production_evidence_bundle_gate_stale;report 还会输出 blockerPlan.nextPhase,避免 operator 在十多个 blocker 中混淆“先补签名 proof / 发布输入”与“后跑 GUI cloud_release E2E”。
  • 真实 Electron/CDP live @写文章 已证明 ordinary Agent turn、用户自然引导、文章正文、session JSONL 和 workflow audit JSONL 在本地桌面链路可用;该证据是 local_folder GUI product evidence,不替代 signed cloud_release production evidence。
  • 真实内容工厂 Plugin package 接入 Lime 远程 / GUI production 安装运行闭环,不绕过 signature proof / trust roots 门禁。
  • App Server host-managed generation 注入链有离线 provider fixture 回归,且 current-turn smoke 已证明受控 provider 下 hostManagedGenerationStatus=completed,不需要真实 Provider 凭证也能证明宿主会把生成结果注入外部真实 worker。
  • App Server current-turn live Provider host-managed generation 已通过,证明非 fixture Direct provider config 能把 agnes-2.0-flash 生成结果注入外部真实 worker;该证据仍是 local_folder App Server current-turn,不等同于 signed remote release / GUI cloud_release production。
  • Claw GUI 内容工厂 Article Workspace fixture 已切到 backendMode=runtime + 本地 OpenAI-compatible fixture,断言 read model 中 hostManagedGenerationStatus=completed 且包含 article-draft-document,不再把 host_generation_unavailable 当成成功。
  • content.article.generate 缺少宿主 LLM 结果时 fail closed,不再输出“学习路线 / 基础语法到工程实战” deterministic 模板正文。
  • content.factory.generate host worker request 同样缺宿主正文 fail closed,不再通过全量内容工厂入口回流固定文章模板。
  • App Server 将 workflow run / step / progress / tool / connector / hook / artifact.delta 事件写入 JSONL audit log。
  • workflow-events.jsonl 写盘前执行 metadata-only 脱敏,不保存原始 prompt、connector query、provider payload 或正文内容。
  • evidence/exportworkflow-events.jsonl 读取同一 session / turn 的审计事件,并在 Evidence Pack 中导出 metadata-only workflow_audit 摘要。
  • workflow-events.jsonl 具备 retention / archive compaction,旧记录归档为同目录 workflow-events.archive.<first_seq>-<last_seq>.jsonl,Evidence Pack 继续聚合 archive + active;active 超过 1024 条时自动触发,保留最近 512 条。
  • agentSession/read 不返回 workflow facts,普通历史恢复只依赖 workspace patch / artifact metadata。
  • Article Editor 不展示 workflow step / task card / 流程轨。
  • WebSearch / connector 工具调用以 workflowRunId + stepId 强绑定进入 workflow audit log。(已完成 worker workflow.connector.requested 与 RuntimeBackend hostSearchEvidence -> workflow.connector.completed 审计;外部内容工厂包自带 connector executor 仍不在本阶段。)
  • Hook lifecycle 复制 / 转换为 workflow.hook.completed audit-only 事件,继续不进入普通 UI / read model / workerEvidence。
  • 外部真实内容工厂 Plugin worker 已能以段落级 artifact.snapshot 输出 draft 正文增量。
  • 上述真实 package worker 增量通过 Lime current App Server local_folder 运行路径进入 artifact read model。
  • @写文章 普通 Agent turn 通过 App Server current-turn host-generation smoke:普通 backend 先输出自然对话 / provider delta,后处理在 terminal 前补齐 7 个 artifact snapshot、3 组 host tool event 和 16 条 workflow JSONL audit。
  • Electron/CDP Gate B product acceptance 通过:真实 Electron/CDP 历史重进后自然引导、工具过程、文章产物可见;右侧不自动打开;raw JSON / workflow step 隐藏;点击文章产物后 Article Editor 打开。
  • 上述真实 package worker 增量通过 Lime 远程 / GUI production 安装运行路径进入 artifact read model。
  • retry 绑定 workflow run / step,并进入 JSONL audit log。
  • cancel 绑定当前未完成 workflow run / step,并进入 JSONL audit log。
  • agentSession/thread/resume fail-closed 守卫:当前 queued turn resume 只恢复 App Server 会话队列,不会在缺真实 worker lifecycle 时伪造 workflow.*resum* 审计事件。
  • resume / action response 绑定 workflow run / step 的 App Server metadata contract:只有 typed action response 或 workflow/respondmetadata.workflowResume 显式带 workflowRunId / workflowKey / stepId 时,才写 metadata-only workflow.step.resuming / workflow.run.resumingthread/resume 只做 Thread rejoin/history hydrate,不写 workflow audit。
  • production worker / 远程包真实 resume lifecycle 上报:signed release gate 已把该证据设为 ready 硬门槛;真实 production GUI 仍需在 action response 或 queued resume 中填充上述 metadata,并证明 workflow.step.resuming / workflow.run.resuming 来自非 fixture workflow-events.jsonl

当前下一刀

  1. 以现有 Plugin v3 catalog、runtime/workflow 和 Article Workspace projection 为唯一事实源,补齐内容工厂 activation contract;在实现落地前,文档只能标记为 planned/deferred,不能写成 production ready。
  2. 为新增的 activation contract 同步 App Server protocol、Renderer gateway、fixture 和 Gate B 证据;若没有真实消费者,保持 test-only fixture,不新增旧 package runtime。
  3. 完成文档收敛后,删除已被 v3 完整替换且无非守卫引用的旧路线图/执行计划;删除前必须取得用户对精确清单的明确确认。

历史下一刀(已被版本替换)

  1. 发布 / 部署 LimeCore 签名契约变更,配置 production Plugin signature trust roots,使用 plugin:content-factory-production-readiness-pipeline -- --generate-signature-proof 结合真实 packageUrl / releaseId / publicKeyId / packageHash / manifestHash 生成真实 release signatureProofsignatureRef 必须采用 sigstore:content-factory-app@2.2.2:<releaseId>,通过 Studio current /v1/platform/plugins/bulk-publish 写入真实 HTTPS packageUrlreleaseIdpackageHashmanifestHashsignatureProof,并复走 Lime 远程 / GUI production 安装运行闭环;不能在客户端绕过,也不能回退旧 developer package upload。
  2. plugin:content-factory-production-readiness-pipeline -- --fetch-production-release-evidence --fetch-cloud-from-catalog 作为发布后验收入口,把真实 .lapppackageHash / manifestHashapp.signature.yamlplugin-signature-trust-root.json、production catalog、bootstrap 和 fetchCloud evidence 对齐后,再进入 signed release gate;preflight blocked 时不得手写 installed state 或 GUI evidence 绕过。
  3. 补 production worker / 远程包真实 resume lifecycle 上报:App Server typed response metadata contract 和 signed release gate 均已就位,后续必须让内容工厂 signed release 的真实 workflow/respond 或 action response 填充 metadata.workflowResume,并用 GUI production evidence 证明不是 fixture。
  4. 补 signed remote release + live Provider 的真实 GUI production 证据:current-turn live Provider 已证明 App Server host-managed generation 可用,下一步必须让同一能力在 sourceKind=cloud_release、signature verified、trust roots ready 的真实桌面安装路径中通过。
  5. src/features/agent-app/** 与宿主内容工厂硬编码 demo 已退出 current 写集;后续拆分工作应回到 Plugin / App Center current 页面与 runtime surface,不再围绕旧 AgentAppLabPage.tsx 或旧 demo 文件续命。

当前验证门槛

当前文档与实现收敛只使用仓库现有入口:

  • npm run docs:boundary
  • npm run harness:doc-freshness
  • npm run governance:legacy-report
  • npm run test:contracts
  • npm run smoke:claw-chat-current-fixture
  • cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server workflow -- --nocapture
  • git diff --check

旧 package execution、production preflight、签名 gate 和外部 Studio 命令不在当前仓库构建图中;它们仅可作为历史 evidence,不能再作为本项目的验证门槛。

历史验证门槛(旧版本)

最低验证:

  • cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server agent_app_worker
  • cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server workflow_audit_events_are_metadata_only_redacted -- --nocapture
  • cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server export_evidence_summarizes_workflow_audit_jsonl_metadata_only -- --nocapture
  • npm run test:rust:unit -- -p app-server event_log -- --nocapture
  • npm run smoke:content-factory-package -- --timeout-ms 180000
  • npm run smoke:content-factory-current-turn -- --timeout-ms 180000
  • npm run smoke:content-factory-current-turn:host-generation -- --timeout-ms 180000
  • 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"
  • Live Provider current-turn evidence:.lime/qc/gui-evidence/agent-apps/content-factory-current-turn-live-provider-2026-07-05T07-53-24-361Z.json.lime/qc/gui-evidence/agent-apps/content-factory-current-turn-live-provider-2026-07-05T07-53-24-361Z.workflow-events.jsonl
  • Electron/CDP Gate B baseline evidence:.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
  • Electron/CDP Gate B product acceptance evidence:/tmp/lime-writing-evidence/writing-final-WRITING_LIVE_1783229659461-2026-07-05T06-02-47-474Z-summary.json,覆盖右侧不自动打开、执行卡片顺序、raw JSON / 文件卡隐藏和历史恢复
  • Production GUI evidence collector:npm run plugin:content-factory-production-gui-evidence -- --session-id <session_id> --turn-start-trace <turn-start-trace.json> --workflow-jsonl <workflow-events.jsonl> --evidence-dir ".lime/qc/gui-evidence/agent-apps";当前 local_folder 真实 Electron CDP 证据应 fail-closed,不能误报 production ready。
  • Production preflight:npm run plugin:content-factory-production-preflight -- --content-factory-dir "/Users/coso/Documents/dev/ai/limecloud/content-factory-app" --check;缺真实签名、可信根、catalog、bootstrap 或 fetchCloud 时必须 fail-closed。最新 evidence:.lime/qc/gui-evidence/agent-apps/content-factory-production-preflight-bundle-guard-2026-07-05.json
  • Production 复核 evidence:.lime/qc/gui-evidence/agent-apps/content-factory-studio-publish-dry-run-live-continue-2026-07-05.json.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/content-factory-signed-release-gate.result.json.lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-report-studio-dry-run-linked-2026-07-05.json;当前必须保持 blocked,不能因 local_folder GUI evidence、Studio dry-run 或缺 catalog/bootstrap/fetchCloud 的目录被误判 ready。
  • Production env-missing 复核 evidence:.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/content-factory-signed-release-gate.result.json.lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-report-env-missing-continue-2026-07-05.json;当前必须保持 blocked,不能因为 App Server inspect 与 Studio dry-run hash 一致就跳过真实签名 / 远程发布输入。
  • Production env-alias 复核 evidence:.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/content-factory-signed-release-gate.result.json.lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-report-env-alias-continue-2026-07-05.json;当前必须保持 blocked,且该证据证明 env 别名已对齐。
  • Production phase-plan 复核 evidence:.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、同目录 content-factory-production-readiness-report.jsoncontent-factory-production-preflight.json;当前必须保持 blocked,fetchCloudFromCatalog.skippedReason=catalog_missingblockerPlan.nextPhase=release_signing_and_trust,且 preflight evidence 必须存在。
  • Production operator-inputs 复核 evidence:.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、同目录 content-factory-production-readiness-report.jsoncontent-factory-production-preflight.json;当前必须保持 blocked,production catalog 只能是 cloud_release,无 catalog 时 fetchCloudFromCatalog.skippedReason=catalog_missingblockerPlan.nextPhase=release_signing_and_trust,且 pipeline 会默认消费内容工厂目录中的签名 proof / trust root 文件,并支持 --package-url 脱敏透传。
  • Production evidence bundle:npm run plugin:content-factory-production-evidence-bundle -- --preflight <preflight.json> --catalog <catalog.json> --bootstrap <bootstrap.json> --fetch-cloud <fetch-cloud.json> --gui-evidence <gui.json> --expected-version 2.2.2 --output-dir <evidence-dir> --check;该入口只归档 JSON 并运行 gate,不签名、不上传、不安装、不调用 Provider 或生产 API。
  • Production readiness report:npm run plugin:content-factory-production-readiness-report -- --preflight <preflight.json> --evidence-dir <evidence-dir> --expected-version 2.2.2 --output <report.json> --check;该入口只汇总阻塞矩阵,不签名、不上传、不安装、不调用 Provider 或生产 API;如果 evidence-dir 中旧 gate result 与当前 evidence 重新计算结果不一致,必须 blocked。
  • LimeCore signed release contract:go test ./services/control-plane-svc/configs ./services/control-plane-svc/internal/repo ./services/control-plane-svc/internal/service ./services/control-plane-svc/internal/controller -run "Plugin|Signature|Bootstrap|ClientBootstrap" -count=1npm run openapi:bundle:control-planemake verify-contractsmake verify-client-contract-syncmake verify-go-fastgit diff --check
  • Studio publish chain:npm testgit diff --check/Users/coso/Documents/dev/ai/limecloud/lime-agent-app-studio)。
  • npm run smoke:content-factory-current-turn:cloud-release -- --timeout-ms 180000
  • npm run smoke:content-factory-current-turn:cloud-release-host-generation -- --timeout-ms 180000
  • npm test / npm run validate:appsrc/features/plugin/testing/fixtures/package-root
  • npm test -- src/features/plugin/testing/contentFactoryFixtureSync.unit.test.ts
  • npm test -- src/features/plugin/install/cloudReleaseSignature.test.ts
  • npm test -- scripts/lib/content-factory-host-generation-fixture.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs
  • npm test -- scripts/lib/content-factory-host-generation-fixture.test.mjs scripts/plugin/content-factory-current-turn-smoke.test.mjs
  • npm run plugin:content-factory-signed-release-gate -- --write-template-dir .lime/qc/gui-evidence/agent-apps/content-factory-production-evidence-template-2026-07-03
  • npm run plugin:content-factory-signed-release-gate -- --evidence-dir .lime/qc/gui-evidence/agent-apps/content-factory-production-evidence-template-2026-07-03 --check(模板占位未替换时应 blocked 并写 result JSON)
  • npm test -- scripts/lib/content-factory-production-workflow-evidence.test.mjs scripts/plugin/content-factory-production-gui-evidence.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs
  • npm run test:contracts
  • npm test -- src/lib/api/agentRuntime/threadClient.test.ts src/lib/api/agentRuntime/appServerReadModelProjection.test.ts
  • npm test -- src/components/agent/chat/workspace/WorkspaceArticleEditorRightSurface.test.tsx
  • npm run smoke:claw-chat-current-fixture -- --scenario content-factory-article-workspace --timeout-ms 180000
  • npm run smoke:agent-runtime-current-fixture

进度日志

  • 2026-07-06:收紧 pipeline 自动 fetchCloud evidence 优先级。此前 content-factory-production-readiness-pipeline 在同时传入旧 --fetch-cloud 路径和启用 --fetch-cloud-from-catalog 时,preflight / bundle 仍可能消费显式旧路径,造成新 catalog / preflight 与旧 fetchCloud evidence 拼接。现在只要本轮从 catalog 派生 fetchCloud,preflight 不再接收旧 --fetch-cloud 参数,bundle 与 operatorReadiness 只使用本轮生成的 content-factory-fetch-cloud-evidence.json;若生成失败,则保持缺 fetchCloud evidence 的 blocked 状态,不回退旧文件。新增独立测试 content-factory-production-readiness-pipeline-fetchcloud.test.mjs,避免继续扩展已超过 1000 行的旧 pipeline 测试文件。验证:node --check scripts/lib/content-factory-production-readiness-pipeline.mjsnode --check scripts/lib/content-factory-production-readiness-pipeline-fetchcloud.test.mjsTMPDIR="$PWD/.lime/tmp" npm test -- scripts/lib/content-factory-production-readiness-pipeline-fetchcloud.test.mjs scripts/lib/content-factory-production-readiness-pipeline.test.mjs scripts/lib/content-factory-production-readiness-pipeline-signing.test.mjsnpx prettier --check scripts/lib/content-factory-production-readiness-pipeline.mjs scripts/lib/content-factory-production-readiness-pipeline-fetchcloud.test.mjs
  • 2026-07-06:收紧 GUI installed release identity 门禁。此前 GUI production evidence 即使写了 signatureVerificationStatus=verifiedcloudReleaseEvidence.status=readypackageHashMatched=truemanifestHashMatched=true,也可能缺少可与 catalog/preflight/fetchCloud 对齐的 release identity 字段。本轮要求 GUI installedState 必须包含 appVersion / packageHash / manifestHash / releaseId / signatureRef,hash 必须为 sha256:<64 hex>,并逐项与 production catalog、preflight 和 fetchCloud evidence 一致;新增 blocker 覆盖 GUI identity 缺失、catalog/preflight/fetchCloud mismatch,以及 fixture cloud release 的明确 nextAction。该刀不新增 UI、不展示右侧安装态、不签名、不上传、不安装、不调用 Provider;只防止手写 GUI JSON 或旧 ready evidence 误过 signed gate。验证:TMPDIR="$PWD/.lime/tmp" 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 scripts/lib/content-factory-production-readiness-plan.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-fetch-cloud.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjs scripts/plugin/content-factory-production-gui-evidence.test.mjs scripts/lib/content-factory-production-preflight-core.test.mjs scripts/plugin/content-factory-production-preflight.test.mjs
  • 2026-07-06:补 production GUI collector 的 installedState 双口径归一化。content-factory-production-gui-evidence.mjs 现在导出可直接单测的 summarizeInstalledState(...)inferLiveProviderUsed(...),并用 direct-run guard 避免 import CLI 时误连接 CDP;collector 同时识别真实 App Server/Rust 可能返回的 camelCase / snake_case 字段,包括 app_id / app_version / source_kind / source_uri / package_hash / manifest_hash / release_id / signature_ref / cloud_release_evidence。新增回归证明完整 snake_case release identity 可进入同一 signed gate 判定,缺 release_id / signature_ref 仍 fail-closed。验证:node --check scripts/plugin/content-factory-production-gui-evidence.mjsTMPDIR="$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.mjsnpx prettier --check scripts/plugin/content-factory-production-gui-evidence.mjs scripts/plugin/content-factory-production-gui-evidence.test.mjs
  • 2026-07-06:收紧 production GUI evidence provenance。此前 signed release gate 主要信任 GUI evidence 中的 status=passedliveProviderUsed=trueworkflow-events.jsonl 路径和若干 assertions 布尔值,手写 JSON 有机会绕过真实 Electron/CDP collector 证据。本轮改为要求 GUI evidence 带 schemaVersion=content-factory-production-gui-evidence.v1、真实 CDP attached / usedRealElectron、matched electron-ipc -> app_server_handle_json_lines -> agentSession/turn/start trace、agentSession/readevidence/export current App Server method trace、workflow JSONL event count,以及 readModel.generatedArticleMarkerClean=true;collector 同步写入 workflow JSONL event count / event type 摘要。新增回归覆盖“生产布尔都写成 ready 但缺 collector/CDP/JSONL/read model provenance 时必须 blocked”。验证:TMPDIR="$PWD/.lime/tmp" npm test -- scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/plugin/content-factory-production-gui-evidence.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjs
  • 2026-07-06:继续收紧 production GUI live Provider 证据。此前 summarizeGuiEvidence(...) 会在 providerEvidence.productionRoute=true 且未出现 hostGenerationFixture 字符串时推断 liveProviderUsed=true,这仍可能让手写 GUI JSON 越过真实 collector/live 证据。本轮删除该兜底,只接受 liveProviderUsed / providerEvidence.liveProviderUsed / assertions.liveProviderUsed 的显式 true;新增回归证明只写 productionRoute=true 仍 blocked 于 production_host_generation_not_live。该改动不触碰右侧 UI、不签名、不上传、不安装、不调用 Provider,只提高 production signed gate 防伪造能力。
  • 2026-07-06:收紧 workflow audit export 门禁。此前 production gate 只要求 workflow JSONL 路径和事件计数,无法证明审计主链真的能通过 current App Server evidence/export 导出 metadata-only 摘要。本轮要求 GUI evidence 包含 observabilitySummary.workflow_audit 投影,且来自 workflow-events.jsonlstatus=exportedeventCount>0metadataOnly=truerawContentIncluded=falseredactionPolicy=workflow_audit_metadata_only、redaction policy event count 大于 0。新增 blocker 覆盖 production_workflow_audit_export_missing / export_empty / not_metadata_only / raw_content_included / redaction_policy_missing,readiness report 已补 nextAction。该刀继续保持 production pending,因为仍缺真实 production catalog/bootstrap/fetchCloud 与 Electron/CDP cloud_release GUI evidence。
  • 2026-07-06:收紧 fetchCloud production evidence 字段完整性。此前 signed release gate 会在 fetchCloud JSON 只写 packageHashMatched=true / manifestHashMatched=true / signaturePolicy=required / verified / ready 时把 fetchCloud summary 视为 ready,具体 hash、sourceUri、signatureRef 和 signatureProof 缺失时只能依赖“both present 才比较”的 mismatch 逻辑,存在手写或不完整 evidence 跳过比对的风险。本轮改为要求 fetchCloud evidence 必须包含 packageHashmanifestHash、非 localhost HTTPS packageUrl/sourceUrisignatureRefsignatureProof,缺字段或 URL 非 production HTTPS 时输出专门 blocker code;content-factory-production-fetch-cloud-evidence 同步写入 catalog proof 的非密钥审计字段,模板也更新为完整形状。readiness report 只公开 packageUrlProductionHttps 布尔和 blocker code,不复制原始 package URL。验证:TMPDIR="$PWD/.lime/tmp" npm test -- scripts/lib/plugin-content-factory-signed-release-gate-fetch-cloud.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/plugin/content-factory-production-preflight.test.mjsTMPDIR="$PWD/.lime/tmp" npm test -- scripts/lib/content-factory-production-readiness-report.test.mjs scripts/lib/content-factory-production-readiness-pipeline.test.mjs scripts/lib/content-factory-production-readiness-pipeline-signing.test.mjs scripts/lib/content-factory-production-evidence-bundle.test.mjs
  • 2026-07-06:收紧 production release evidence 的 cloud_release 归一化。此前 normalizeMarketplaceCatalogEvidence 会在 marketplace package 有 packageUrl/sourceUri 时直接写出 identity.sourceKind=cloud_release,这会把非 cloud_release 的远程包误当 production signed catalog evidence。本轮改为只接受 package/source 显式声明的 cloud_release,仅有 HTTPS package URL 时 summary 仍 status=blocked 并输出 catalogSourceKindCloudRelease;新增回归覆盖“有 packageUrl 但缺 sourceKind 不能 ready”。最新只读 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.jsonstatus=blocked、missing codes 17 个。该改动不签名、不上传、不安装、不调用 Provider 或 production API,只提高 production gate fail-closed 可信度。验证:TMPDIR="$PWD/.lime/tmp" npm test -- scripts/lib/content-factory-production-release-evidence.test.mjs、production readiness 10 文件集合 85 条测试通过。
  • 2026-07-06:收口 preflight signingCommand 与 CLI help 的 secret hygiene。content-factory-production-preflight 不再输出 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;readiness pipeline / release evidence CLI help 也明确参数接收的是 env var name,不接收 key/token 值,并新增 help 回归守卫;顺手修正 content-factory-production-release-evidence --help 在缺 --output / --catalog-output / --bootstrap-output 时错误退出 1 的行为。随后补 content-factory-production-preflight --help 回归守卫,要求 help 明确只使用 current pluginLocalPackage/inspect 做本地预检,并写清 preflight 不签名、不上传、不安装、不调用 Provider、不写 passing cloud_release evidence,同时禁止重新出现 PRIVATE_KEY_PEM<private-key><token>LIME_AGENT_APP_STUDIO_TOKEN= 这类 secret 值提示。最新默认只读复跑 .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 个;显式签名缺输入复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-secret-hygiene-signing-missing-2026-07-06-2026-07-06T00-08-22-701Z/status=blockedproduction_signature_generation_inputs_missingmissingKeys=packageUrl/releaseId/publicKeyId/signingPrivateKey。本轮新增只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-preflight-help-guard-2026-07-06-2026-07-06T00-53-34-565Z/status=blockedsteps.signingProof.status=skippedblockers=17,operator 缺口仍是 appSignature / signingPrivateKey / releaseId / publicKeyId / trustRoot / packageUrl / tenantId / studioToken / catalog / bootstrap / fetchCloudEvidence / guiEvidence。本轮没有签名、上传、安装、Provider 或 production API 调用。验证:TMPDIR="$PWD/.lime/tmp" npm test -- scripts/lib/content-factory-production-preflight-core.test.mjsTMPDIR="$PWD/.lime/tmp" 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 scripts/lib/content-factory-production-readiness-plan.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-fetch-cloud.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjs scripts/plugin/content-factory-production-gui-evidence.test.mjs scripts/lib/content-factory-production-preflight-core.test.mjs scripts/plugin/content-factory-production-preflight.test.mjs,当前 10 个文件 84 个测试通过。
  • 2026-07-06:收口 signing proof args 审计脱敏边界。此前 pipeline 的 sanitizeArgs 会把 --private-key-env CUSTOM_SIGNING_PRIVATE_KEY_PEM 的 env var name 也改成 <redacted>,导致 evidence 只能证明“用过某个密钥输入”,不能审计使用了哪个本地 env 名。本轮改为保留 --private-key-env <ENV_NAME>--studio-token-env <ENV_NAME>,继续隐藏 --package-url--tenant-id--api-base--private-key-file 后的实际值,并继续扫描/隐藏任何未声明位置出现的 token / secret / private-key 值。签名成功路径测试现在断言 content-factory-production-signing-proof.json 包含 env 名、包含 --private-key-env,但不包含真实 package URL 或私钥内容。最新只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-env-name-audit-2026-07-06-2026-07-06T01-03-11-240Z/status=blockedsteps.signingProof.status=skippedblockers=17,operator 缺口未变;本轮没有签名、上传、安装、Provider 或 production API 调用。验证:TMPDIR="$PWD/.lime/tmp" npm test -- scripts/lib/content-factory-production-readiness-pipeline-signing.test.mjs、production readiness 10 文件集合 84 条测试通过、node --check 对 pipeline lib / signing test、敏感值扫描无命中。
  • 2026-07-06:对齐 signed release gate / readiness evidence 与 App Server worker launch gate。新增 scripts/lib/plugin-content-factory-signed-release-gate-gui.mjs,把 GUI evidence summary 和 missing requirements 从 core 拆出;signed gate / fetchCloud evidence / production GUI collector / production preflight fetchCloud summary / readiness report / readiness pipeline 均要求 signaturePolicy=requiredsignatureVerificationStatus=verifiedcloudReleaseEvidence.status=readypackageVerificationStatus=verifiedpackageHashMatched=truemanifestHashMatched=true,optional / warning / hash 未 matched evidence 一律 blocked。模板也补 releaseIdsignaturePolicy 和双 hash matched 字段,避免 operator 按旧模板生成天生失败的五件套。验证:npm test -- scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-fetch-cloud.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjs scripts/plugin/content-factory-production-gui-evidence.test.mjs scripts/lib/content-factory-production-preflight-core.test.mjs scripts/plugin/content-factory-production-preflight.test.mjs scripts/lib/content-factory-production-readiness-pipeline.test.mjsnode --check 对本轮脚本、npx prettier --check 对本轮脚本和测试、npm run governance:scriptsnode scripts/check-docs-boundary.mjs
  • 2026-07-06:复跑只读 production readiness pipeline 并修正 operator readiness API base 边界。最新证据 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-pipeline-2026-07-05T19-01-58-117Z/status=blocked,missing codes 为 17 个,nextPhase=release_signing_and_trust,signed gate result 与当前 evidence 无 drift,secret scan total 为 0。release evidence fetch 现在默认复用 Studio/LimeCore 官方 API base,operatorReadiness.inputs.apiBase{ configured: true, source: "default", purpose: "release-evidence-fetch", studioDryRunConfigured: true }operatorReadiness.missingKeys 不再包含 apiBase,当前仍缺 appSignature / signingPrivateKey / releaseId / publicKeyId / trustRoot / packageUrl / tenantId / studioToken / catalog / bootstrap / fetchCloudEvidence / guiEvidence。缺 tenantId / studioToken 时 production release evidence 保持 requested=falsestatus=skippedstep=null,不发请求;studio_publish_inputs 的 blockerPlan / operatorCommand 也不再把 --api-base 当成必填参数。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs scripts/lib/content-factory-production-readiness-plan.test.mjsnode --check scripts/lib/content-factory-production-operator-readiness.mjs scripts/lib/content-factory-production-readiness-pipeline.mjs scripts/lib/content-factory-production-readiness-plan.mjsnpx prettier --check 相关文件、只读 pipeline 复跑。
  • 2026-07-06:收口 operator 签名 proof 入口。release_signing_and_trustblockerPlan.nextPhase.commandHintoperatorCommandoperatorReadiness.missingActions 现在都推荐显式 --generate-signature-proof --signing-private-key-env PLUGIN_SIGNING_PRIVATE_KEY_PEM,由 pipeline 用同轮 Studio dry-run 的 packageHash / manifestHash 调外部真实签名工具生成 app.signature.yamlplugin-signature-trust-root.json;不再把 --app-signature <app.signature.yaml> / --trust-root <plugin-signature-trust-root.json> 当作 operator 手工第一步,且 operatorCommand / signingCommand / blockerPlan 不再包含 <private-key><token>,只提示本地 env 名。最新只读证据 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-pipeline-2026-07-05T23-18-56-444Z/status=blocked,missing codes 为 17 个,steps.signingProof.status=skipped。显式 --generate-signature-proof 缺输入复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-pipeline-2026-07-05T23-19-09-932Z/status=blocked,新增 production_signature_generation_inputs_missingsteps.signingProof.missingKeys=packageUrl/releaseId/publicKeyId/signingPrivateKey,且 appSignature.present=false / trustRoot.present=false,说明没有真实输入时不会生成假签名或 trust root。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs scripts/lib/content-factory-production-readiness-plan.test.mjs、只读 pipeline 复跑、显式签名缺输入 pipeline 复跑、evidence 全文扫描 <private-key> / <token> 无命中。
  • 2026-07-06:收紧 App Server cloud_release Plugin worker launch gate。此前 seeded content-factory installed state 可带 signaturePolicy=optional / signatureVerificationStatus=not_configured / status=warningcloudReleaseEvidence,并被 worker 启动 gate 放行;这会让 seeded warning 被误当成 production 可运行证据。本轮改为对任何 identity.sourceKind=cloud_release 的 worker 启动统一要求 signaturePolicy=requiredsignatureVerificationStatus=verifiedcloudReleaseEvidence.status=readypackageVerificationStatus=verifiedpackageHashMatched=truemanifestHashMatched=true,optional / not_configured / warning 一律 fail-closed。验证:npm run test:rust:unit -- -p app-server plugin_worker_turn -- --nocapturecargo fmt --manifest-path "lime-rs/Cargo.toml" --all -- --checknpm run smoke:content-factory-current-turn:cloud-release -- --timeout-ms 180000 --evidence-dir ".lime/qc/gui-evidence/agent-apps" --prefix "content-factory-current-turn-cloud-release-launch-gate-2026-07-06";cloud-release smoke 通过,证据为 .lime/qc/gui-evidence/agent-apps/content-factory-current-turn-cloud-release-launch-gate-2026-07-06-cloud-release-host-generation-2026-07-05T18-21-29-542Z.json 和同名 .workflow-events.jsonl
  • 2026-07-06:修复 production release evidence blocked summary 自报未落盘的问题。此前 pipeline 在 --fetch-production-release-evidence 缺 release evidence 必填输入时会写出 content-factory-production-release-evidence.json,但 JSON 内 outputs.summary.present=false;本轮改为写入后刷新 summary output 状态,真实只读复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-summary-present-2026-07-06T0211/content-factory-production-release-evidence.json 显示 outputs.summary.present=true,pipeline 仍按预期 blocked 且未请求 production API。后续 API base 已改为默认官方地址,当前不请求的原因是缺 tenantId / studioToken。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs scripts/lib/content-factory-production-release-evidence.test.mjs、完整 production readiness 定向集合、真实 fail-closed pipeline 复跑、secret-like scan。
  • 2026-07-06:补 production release evidence blockers 与 pipeline blockerPlan 合并口径。releaseEvidence.missingRequirements[] 现在会映射为 production_release_evidence_* blocker codes,覆盖 marketplace/bootstrap 请求失败、catalog app/sourceKind/packageUrl/hash/releaseId/signatureRef/signatureProof 字段缺失,以及 bootstrap matching trust root 缺失 / 缺 publicKey / 缺 algorithm;readiness plan 把这些 codes 归入 production catalog/bootstrap 阶段。content-factory-production-readiness-pipelineblockerPlan 改为基于 pipeline blockers 与 readiness report blockers 的合并集合生成,避免 pipeline 自身发现的 release evidence 问题被 report-only plan 漏掉。验证: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 scripts/lib/content-factory-production-preflight-core.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjs scripts/lib/content-factory-production-readiness-plan.test.mjsnode --check 对 release evidence / readiness pipeline / readiness plan / readiness report、npx prettier --check 相关脚本、npm run governance:scriptsnode scripts/check-docs-boundary.mjs
  • 2026-07-06:补 production release evidence 完整性诊断。content-factory-production-release-evidence 抓取 marketplace / bootstrap 成功后,summary 现在输出 missingRequirements[],并要求 catalog app 存在、sourceKind=cloud_release、远程 HTTPS package URL、packageHash、manifestHash、releaseId、signatureRef、signatureProof 的 publicKeyId / algorithm / payloadHash / signedAt,以及 bootstrap 中存在同 publicKeyId 且带 publicKey / algorithm 的 matching trust root;proof 和 trust root 不匹配时保持 status=blocked。summary 仍不写 token、完整用户 bootstrap、packageUrl 原文或用户信息。验证: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 scripts/lib/content-factory-production-preflight-core.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjs scripts/lib/content-factory-production-readiness-plan.test.mjsnode --check scripts/lib/content-factory-production-release-evidence.mjs scripts/plugin/content-factory-production-release-evidence.mjsnpx prettier --check scripts/lib/content-factory-production-release-evidence.mjs scripts/lib/content-factory-production-release-evidence.test.mjsnpm run governance:scriptsnode scripts/check-docs-boundary.mjs
  • 2026-07-06:复核 production release evidence 只读抓取链路和本轮脚本治理。默认 pipeline 复跑输出 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-default-2026-07-06T0154/content-factory-production-readiness-pipeline.jsonstatus=blockedsteps.productionReleaseEvidence.status=skipped/not_requested;显式 --fetch-production-release-evidence 但缺 tenantId / studioToken 复跑输出 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-release-inputs-missing-2026-07-06T0154/content-factory-production-readiness-pipeline.jsonproduction_release_evidence_inputs_missingskippedReason=missing_inputsstep=null,证明缺租户和 token 时不发 production release evidence 请求;API base 缺省时默认走 Studio/LimeCore 官方地址,不再作为本机必填输入。验证: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 scripts/lib/content-factory-production-preflight-core.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjs scripts/lib/content-factory-production-readiness-plan.test.mjsnode --check 对 production readiness pipeline/operator/release evidence CLI 与 lib、npx prettier --check 对本轮脚本与 Writing v2 文档、npm run governance:scriptsnode scripts/check-docs-boundary.mjs
  • 2026-07-05:补 production readiness blocker phase plan,并修复无 catalog 时 pipeline fetchCloud 编排。新增 scripts/lib/content-factory-production-readiness-plan.mjs 与单测,把 production blocker 分为本地包 preflight、签名 proof / trust、Studio 发布输入、production catalog/bootstrap、fetchCloud verified、真实 desktop cloud_release E2E 和 evidence 完整性;content-factory-production-readiness-report / pipeline 都输出 blockerPlan.nextPhase。同时修复 --fetch-cloud-from-catalog:无 catalog 时 pipeline 不再向 preflight 传该 flag,避免 preflight 命令直接失败;pipeline 记录 skip reason 并继续生成 blocked preflight/bundle/report。真实复跑 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-phase-plan-rerun-2026-07-05-2026-07-05T15-16-14-303Z/status=blocked、preflight present、nextPhase=release_signing_and_trust。验证:node --check 相关 readiness plan/report/pipeline/CLI、npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs scripts/lib/content-factory-production-readiness-plan.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjsnpx prettier --check ...production-readiness...npm run governance:scripts、真实 pipeline 复跑(预期 blocked)。
  • 2026-07-05:补 production readiness pipeline,减少 operator 手工串 preflight / Studio dry-run / bundle / report 的错配和 stale evidence 风险。新增 scripts/lib/content-factory-production-readiness-pipeline.mjsscripts/plugin/content-factory-production-readiness-pipeline.mjsscripts/lib/content-factory-production-readiness-pipeline.test.mjsplugin:content-factory-production-readiness-pipeline;pipeline 只调用 production preflight 与 Studio publish --dry-run,再复用现有 evidence bundle / readiness report builder,不传 --publish,不签名、不上传、不安装、不调用 Provider 或 production publish API,也不保存密钥/token/package URL 原文。随后补 content-factory-production-preflight --fetch-cloud-output,pipeline 在 --fetch-cloud-from-catalog 下会把 App Server current pluginPackage/fetchCloud 结果写成独立 fetchCloud evidence,并自动送入 bundle,避免真实 catalog 到位后还要手工搬运 JSON。真实本地复跑输出 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-pipeline-fetchcloud-output-continue-2026-07-05/content-factory-production-readiness-pipeline.jsonstatus=blocked,preflight / Studio dry-run packageHash sha256:0c6f33d42918365b7f4256a78fc99b925133ea8fd956d50da25874998222b59c 与 manifestHash sha256:5de25a9d61518f027810663cb50685bc6b25f1930f22e67f24ab9b757fd5f7a8 对齐;由于当前没有 production catalog,fetchCloud evidence 文件按预期未生成。blocked codes 仍集中在真实 signed remote release 输入、production catalog/bootstrap/fetchCloud、GUI cloud_release signature verified 和 workflow resume lifecycle。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs scripts/lib/content-factory-production-preflight-core.test.mjs scripts/lib/content-factory-production-evidence-bundle.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjs scripts/plugin/content-factory-production-preflight.test.mjsnode --check scripts/lib/content-factory-production-readiness-pipeline.mjs scripts/plugin/content-factory-production-readiness-pipeline.mjs scripts/plugin/content-factory-production-preflight.mjs、真实 pipeline 复跑(预期 blocked)。
  • 2026-07-05:收口 Writing v2 production gate 的合同门禁阻塞。check-harness-contracts 原本仍只扫描 src/components/agent/chat/utils/sessionExecutionRuntime.ts,而 execution runtime 字段合并已迁到 current src/components/agent/chat/projection/sessionExecutionRuntimeProjection.ts,导致 session_id / execution_strategy / recent_preferences / recent_team_selection / recent_content_id 被误报缺失。本轮把字段守卫迁到 projection 文件,facade 继续守住 recent preferences / team 适配函数;同时把新增插件发布规划从拼写错误目录 internal/roadmap/plugin/deverlop/ 迁到 internal/roadmap/plugin/develop/,并修正旧文档站 roadmap 引用。验证:node scripts/check-harness-contracts.mjsnode --check scripts/check-harness-contracts.mjsnpm test -- src/components/agent/chat/projection/sessionExecutionRuntimeProjection.test.ts src/components/agent/chat/utils/sessionExecutionRuntime.test.tsnode scripts/check-docs-boundary.mjsnpm run test:contracts。结论:contracts 已恢复绿色,但 production cloud_release 仍 blocked,不能把合同通过写成业务完成。
  • 2026-07-05:补强 production preflight 签名 proof fail-closed 规则。content-factory-production-preflight 现在不再只检查 app.signature.yamlplugin-signature-trust-root.json 是否存在,还会要求 app.signature.yaml 包含 schemaVersion / signatureRef / publicKeyId / algorithm / signature / payloadHash / signedAtpayloadHashsha256:<64 hex>signedAt 为有效时间戳,签名算法属于 Host verifier 支持集合;trust root 必须包含匹配的 publicKeyId / algorithm / publicKey,算法同样必须受支持;production catalog 的 identity.signatureRefsignatureProof.publicKeyId / algorithm / payloadHash / signedAt 也必须和本地 app.signature.yaml 一致,避免手写或旧 catalog proof 通过 gate。随后新增 canonical payload v2 verifier,preflight 会重建签名 payload 并用 trust root publicKey 做真实密码学验签;content-factory-signed-release-gate 进一步要求 preflight signatureCryptographicVerificationStatus=verifiedsignaturePayloadHashMatched=true,并要求 bootstrap 匹配 trust root 带 publicKey。真实外部包最新复跑得到 .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,且只记录 env 名和 configured 布尔值。验证:npm test -- scripts/lib/content-factory-production-signature-verifier.test.mjs scripts/lib/content-factory-production-preflight-core.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjs scripts/lib/content-factory-production-readiness-plan.test.mjsnode --check 对相关 verifier/preflight/gate/report/plan 脚本、真实只读 readiness pipeline。
  • 2026-07-05:补 production bundle 输入 digest 与 readiness stale result / stale bundle guard。content-factory-production-evidence-bundle 现在在 content-factory-production-evidence-bundle.json 中记录每个输入 slot 的 sha256 / size、输入集合 digest、gate digest 和 gate result sha256,方便审计判断 bundle 是否对应当前 preflight/catalog/bootstrap/fetchCloud/GUI evidence 及当前 signed gate 摘要。content-factory-production-readiness-report 现在覆盖 signed gate 所有 production_* missing code 的明确 nextAction,并会重新计算当前 evidence 的 signed gate;若已有 content-factory-signed-release-gate.result.json 与当前 evidence 不一致,报告输出 production_signed_gate_result_stale 并 blocked;若 bundle manifest 的 inputs.slots / digest 与当前 evidence 文件不一致,报告输出 production_evidence_bundle_stale 并 blocked;若输入一致但 bundle 内 gate.missingCodes / ready / status 或 gate digest 被手改 / 陈旧,报告输出 production_evidence_bundle_gate_stale 并 blocked,避免旧 result 文件或旧 bundle manifest 误导 operator。真实外部包复跑得到 .lime/qc/gui-evidence/agent-apps/content-factory-production-preflight-bundle-guard-2026-07-05.json.lime/qc/gui-evidence/agent-apps/content-factory-production-evidence-bundle-bundle-guard-2026-07-05/content-factory-production-evidence-bundle.json.lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-report-bundle-guard-2026-07-05.json,仍按预期 blocked;报告中 evidenceBundle.matchesCurrentEvidence=trueevidenceBundle.gate.matchesCurrentEvidence=truesignedGate.existingResult.matchesCurrentEvidence=true,未伪造 production GUI evidence。验证:npm test -- scripts/lib/content-factory-production-evidence-bundle.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-fetch-cloud.test.mjsnode --check scripts/lib/content-factory-production-evidence-bundle.mjs scripts/lib/content-factory-production-readiness-report.mjs scripts/plugin/content-factory-production-evidence-bundle.mjs scripts/plugin/content-factory-production-readiness-report.mjsnpx prettier --check ...production-evidence-bundle... ...production-readiness-report...npm run governance:scripts、真实 preflight / bundle / readiness --check(预期 exit 1)。
  • 2026-07-05:补真实 Electron/CDP baseline 续测和协议生成物缺口。启动 LIME_ELECTRON_REMOTE_DEBUGGING_PORT=9223 npm run electron:dev 时先暴露 App Server 编译失败:PluginLocalPackageExportParams/Response 已进入 Rust protocol,但 local_data_source.rs 未导入,且 schema / TS generated client 缺 pluginLocalPackage/export。已补 local_data_source.rs import,使用 cargo run --manifest-path "lime-rs/Cargo.toml" -p app-server-protocol --bin write_schema_fixtures -- "lime-rs/crates/app-server-protocol/schema" 刷新 schema fixtures,再运行 npm run generate:protocol-types 同步 packages/app-server-client/src/generated/protocol-types.ts。随后 cargo build --manifest-path "lime-rs/Cargo.toml" -p app-servernpm run check:protocol-typescargo test --manifest-path "lime-rs/Cargo.toml" -p app-server-protocol schema_fixtures_match_generated_output 均通过;Electron dev 启动成功,bridge:health 通过,CDP 9223 User-Agent 为 Lime/1.91.0 ... Electron/42.3.3,真实页签为 http://127.0.0.1:1420/?nativeStartup=1。Playwright CDP 断言 window.__LIME_ELECTRON__ === trueelectronAPI.invoke 存在,trace 中出现 electron-ipc -> app_server_handle_json_lines 和 current App Server method;最小证据为 .lime/qc/gui-evidence/agent-apps/writing-v2-cdp-minimal-gate-b-2026-07-05.json。该证据只证明真实 Electron baseline,不替代 production signed cloud_release 安装运行。
  • 2026-07-05:补 fetchCloud production evidence 交叉校验。content-factory-signed-release-gate 现在不只看 fetchCloud 的 matched 布尔值;当 fetchCloud evidence 携带具体 packageHash / manifestHash / sourceUri / signatureRef / signatureProof 时,会与 production catalog 和 preflight 摘要逐项比对,输出 production_fetch_cloud_catalog_*_mismatchproduction_fetch_cloud_preflight_*_mismatch。新 helper 不把 detached signature 原文放进 gate summary,core 文件从 999 行降到 932 行。验证:npm test -- scripts/lib/plugin-content-factory-signed-release-gate-fetch-cloud.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjsnode --check scripts/lib/plugin-content-factory-signed-release-gate-fetch-cloud.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.mjs scripts/lib/content-factory-production-readiness-report.mjs
  • 2026-07-05:补 production readiness report,避免 operator 只能在 preflight / bundle / signed gate 多个 JSON 间手工判断 production 缺口。新增 scripts/lib/content-factory-production-readiness-report.mjsscripts/plugin/content-factory-production-readiness-report.mjsscripts/lib/content-factory-production-readiness-report.test.mjsplugin:content-factory-production-readiness-report。该入口只读 production preflight、signed gate result 和五类 evidence,复用 signed release gate missing codes 输出 blocked/ready、slot present/ready、publishReadiness 非敏感摘要和下一步动作;报告不会复制 signing private key、Studio token、Provider key、bearer token 或 package URL 原文,也不会签名、上传、安装、调用 Provider 或调用 production API。用当前真实 preflight + blocked bundle 生成 .lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-report-2026-07-05.json,按预期 status=blocked。验证:npm test -- scripts/lib/content-factory-production-readiness-report.test.mjsnode --check scripts/lib/content-factory-production-readiness-report.mjs scripts/plugin/content-factory-production-readiness-report.mjs、真实 readiness report --check(预期 exit 1)。
  • 2026-07-05:补 production evidence bundle,减少 production signed release gate 的手工搬运和 stale JSON 风险。新增 scripts/lib/content-factory-production-evidence-bundle.mjsscripts/plugin/content-factory-production-evidence-bundle.mjsscripts/lib/content-factory-production-evidence-bundle.test.mjsplugin:content-factory-production-evidence-bundle。该入口把 preflight / catalog / bootstrap / fetchCloud / GUI evidence 复制为 signed gate 标准五件套文件名,立即写入 content-factory-signed-release-gate.result.jsoncontent-factory-production-evidence-bundle.json;显式传入的路径不存在会报错,未传入的 slot 会删除目标目录同名旧文件,避免复用 evidence-dir 时 stale catalog/bootstrap 误过门禁。用当前真实 preflight 生成 .lime/qc/gui-evidence/agent-apps/content-factory-production-evidence-bundle-2026-07-05/,按预期只包含 preflight、bundle manifest 和 gate result,gate status=blocked,missing codes 包含 production_preflight_not_ready / production_catalog_missing / production_fetch_cloud_evidence_missing / production_gui_evidence_missing。验证:npm test -- scripts/lib/content-factory-production-evidence-bundle.test.mjsnode --check scripts/lib/content-factory-production-evidence-bundle.mjs scripts/plugin/content-factory-production-evidence-bundle.mjs、真实 preflight bundle --check(预期 exit 1)。
  • 2026-07-05:补 production GUI evidence collector 的真实 CDP turn-start trace 输入,避免 production 复验时只依赖当前 renderer localStorage trace buffer。plugin:content-factory-production-gui-evidence 新增 --turn-start-trace <path> / CONTENT_FACTORY_PRODUCTION_TURN_START_TRACE,可消费 Gate B 生成的 turn-start-trace.json 或 collector trace entries,只提取 app_server_handle_json_lines / electron-ipc / success / agentSession/turn/start / sessionId / turnId 摘要,要求目标 session 匹配,且不会把用户 prompt、provider request、原始 metadata 或 Provider key 写入 production GUI evidence。新增 scripts/lib/content-factory-production-turn-start-trace.mjs 承接纯解析逻辑,避免继续膨胀 800 行以上的 collector。真实现有 Gate B trace .lime/qc/gui-evidence/writing/writing-cdp-WRITING_CDP_1783188149738-turn-start-trace.json 解析后得到 matched=true / sessionMatched=true / transport=electron-ipc / method=agentSession/turn/start。验证:npm test -- scripts/lib/content-factory-production-turn-start-trace.test.mjs scripts/plugin/content-factory-production-gui-evidence.test.mjsnode --check scripts/lib/content-factory-production-turn-start-trace.mjs scripts/plugin/content-factory-production-gui-evidence.mjs、真实 trace 解析 smoke。
  • 2026-07-05:补 production workflow JSONL / resume lifecycle 解析 helper。scripts/plugin/content-factory-production-gui-evidence.mjs 不再内联 workflow JSONL 和 resume lifecycle 解析,新增 scripts/lib/content-factory-production-workflow-evidence.mjs,覆盖 agentSession/action/respond metadata、agentSession/thread/resume selected-actions contract、workflow.step.resuming / workflow.run.resuming audit 事件匹配、缺 JSONL 文件返回空事件的 fail-closed 行为,以及 App Server trace params 最小投影。collector 从 880 行降到 676 行,trace evidence 不再写 raw App Server params、用户 prompt、正文、Bearer 或 raw sourceUri。验证:npm test -- scripts/lib/content-factory-production-workflow-evidence.test.mjs scripts/plugin/content-factory-production-gui-evidence.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjsnode --check scripts/lib/content-factory-production-workflow-evidence.mjs scripts/plugin/content-factory-production-gui-evidence.mjs
  • 2026-07-05:把 production preflight 串入 signed release gate,防止 operator 只手工填 catalog / bootstrap / fetchCloud / GUI evidence 绕过真实 .lapp 和 App Server manifest 预检。content-factory-signed-release-gate 新增 --preflight--evidence-dir 模板目录从四件套升级为 preflight / catalog / bootstrap / fetchCloud / GUI 五件套;gate 输出 preflight.statuspublishReadinessConfigured、真实 packageHash / manifestHash、preflight missing codes,并在 preflight blocked 或 preflight hash 与 catalog hash 不一致时 fail-closed。为遵守 core 文件体量边界,顺手把 signed release gate 的 constants / IO / safety scan / template / preflight summary 拆成独立小模块,core 收缩到 999 行。真实现有 preflight 复跑 gate 得到 .lime/qc/gui-evidence/agent-apps/content-factory-signed-release-gate-preflight-blocked-2026-07-05.json,按预期 status=blocked,包含 production_preflight_not_ready,且不再被 preflight signingCommand 里的说明性占位符误伤。验证:npm test -- scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjsnode --check scripts/lib/plugin-content-factory-signed-release-gate-core.mjs scripts/lib/plugin-content-factory-signed-release-gate-template.mjs scripts/lib/plugin-content-factory-signed-release-gate-preflight.mjs scripts/lib/plugin-content-factory-signed-release-gate-evidence-dir.mjs scripts/plugin/content-factory-signed-release-gate.mjsnpx prettier --check ...signed-release-gate...、真实 preflight gate --check(预期 exit 1)。
  • 2026-07-05:补 production signed release 服务端与发布工具链 contract。/Users/coso/Documents/dev/ai/limecloud/limecore 已在 Plugin catalog / marketplace / bootstrap / bulk publish / MySQL snapshot 中贯通 signatureProofclient/bootstrap 顶层下发 pluginSignatureTrustRoots,配置新增 plugin.signatureTrustRoots[]PLUGIN_SIGNATURE_TRUST_ROOTS_JSON,bulk publish 对缺失或格式错误的签名 proof fail closed,并同步 OpenAPI fragments / bundle 与 packages/types/Users/coso/Documents/dev/ai/limecloud/lime-agent-app-studio 已不再调用旧 developer agent-apps/.../package-upload/releases,正式 --publish 必须提供真实 HTTPS --package-url,本地打包算 packageHash,通过 App Server inspect 算 manifestHash,读取 app.signature.yaml 后调用 current /v1/platform/plugins/bulk-publish 透传 signatureProof.lapp 打包排除 app.signature.yamlplugin-signature-payload.jsonplugin-signature-trust-root.json,避免签名循环。验证:LimeCore go test ./services/control-plane-svc/configs ./services/control-plane-svc/internal/repo ./services/control-plane-svc/internal/service ./services/control-plane-svc/internal/controller -run "Plugin|Signature|Bootstrap|ClientBootstrap" -count=1npm run openapi:bundle:control-planemake verify-contractsmake verify-client-contract-syncmake verify-go-fastgit diff --check;Studio npm testgit diff --check。该证据仍只是本地服务端 / CLI contract,不等同于 production 部署、可信根配置、真实 package upload、catalog 写入或 GUI cloud_release 跑通。
  • 2026-07-05:补 production preflight 的非敏感 operator readiness。content-factory-production-preflight 现在在 evidence 和 CLI 摘要中记录 signing private key、Studio token、tenantId、API base、远程 packageUrl 这些生产发布前提是否已配置;只保存 env 名、configured 布尔值和 packageUrl 是否为 non-local HTTPS,不保存任何密钥、token、URL 原文或 provider request。当前复跑真实外部包得到 .lime/qc/gui-evidence/agent-apps/content-factory-production-preflight-2026-07-05T10-43-28-985Z.json,仍按预期 status=blocked,missing codes 为 production_app_signature_yaml_missing / production_trust_root_missing / production_catalog_missing / production_bootstrap_missing / production_fetch_cloud_evidence_missing,publish readiness 同时显示 signingPrivateKey / studioToken / tenantId / apiBase / packageUrl 均未配置。验证:npm test -- scripts/lib/content-factory-production-preflight-core.test.mjsnode --check scripts/lib/content-factory-production-preflight-core.mjsnode --check scripts/plugin/content-factory-production-preflight.mjsnpx prettier --check "scripts/lib/content-factory-production-preflight-core.mjs" "scripts/lib/content-factory-production-preflight-core.test.mjs" "scripts/plugin/content-factory-production-preflight.mjs"、真实 .lapp preflight --check(预期 exit 1)。
  • 2026-07-05:补 production release preflight,避免把 local_folder 或手写 evidence 当成 signed cloud_release。新增 scripts/lib/content-factory-production-preflight-core.mjsscripts/plugin/content-factory-production-preflight.mjsscripts/lib/content-factory-production-preflight-core.test.mjsplugin:content-factory-production-preflight。CLI 默认解包真实 .lapp 并通过 current App Server pluginLocalPackage/inspect 计算 manifestHash;没有 current inspect 时保持 blocked。随后补 --fetch-cloud-from-catalog,可从 production catalog 派生 descriptor 并调用 current App Server pluginPackage/fetchCloud 生成 fetchCloud evidence 摘要,减少人工 JSON 误配;该摘要会用 catalog signatureProof 和 bootstrap trust root 校验签名状态,不能用 declared / failed 绕过 signed release gate。真实外部包 /Users/coso/Documents/dev/ai/limecloud/content-factory-app/dist-package/content-factory-app-2.2.2.lapp preflight 已跑,输出 .lime/qc/gui-evidence/agent-apps/content-factory-production-preflight-2026-07-05T09-42-06-150Z.jsonpackageHash=sha256:89aec20e637713c668f8bc34c303256ac83806c5d2e75486e6453bd638ac3f8cmanifestHash=sha256:c1d3aa37d4b2f6c3c4a006525a1bba4b4ee407f61fe9cff8192704b48a209248、包内条目齐全;结果按预期 blocked,缺 app.signature.yamlplugin-signature-trust-root.json、production catalog、bootstrap 和 fetchCloud evidence。验证:node --check scripts/lib/content-factory-production-preflight-core.mjsnode --check scripts/plugin/content-factory-production-preflight.mjsnpm test -- scripts/lib/content-factory-production-preflight-core.test.mjs、真实 .lapp preflight --check(预期 exit 1)。
  • 2026-07-05:补 production GUI evidence collector 和 signed release gate 的 Electron IPC 硬门槛。新增 scripts/plugin/content-factory-production-gui-evidence.mjsplugin:content-factory-production-gui-evidence,只读取真实 Electron CDP 和 App Server current JSON-RPC,输出不含 Provider key / bearer token / raw provider request / 完整正文的 production GUI evidence;证据 JSON 现在保存 missingAssertions,且 turnStartViaElectronIpc 纳入 status=passed 条件。content-factory-signed-release-gate 同步要求 production GUI evidence 明确证明 agentSession/turn/startelectron-ipcapp_server_handle_json_lines 进入 App Server,缺该链路返回 production_gui_turn_start_not_electron_ipc / production_gui_app_server_json_rpc_missing。真实 Electron CDP 复跑当前目标 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=failedmissingAssertions=liveProviderUsed,sourceKindCloudRelease,signatureVerified,turnStartViaElectronIpc,workflowResumeLifecyclePresent;随后跑 signed release gate 输出 .lime/qc/gui-evidence/agent-apps/content-factory-production-gui-evidence-cdp-local-folder-gate-2026-07-05T08-49-00-187Z.json,按预期 blocked,missing codes 包含 production catalog / trust roots / fetchCloud / cloud_release GUI / signature / resume lifecycle / Electron IPC turn/start。验证:node --check scripts/plugin/content-factory-production-gui-evidence.mjsnode --check scripts/lib/plugin-content-factory-signed-release-gate-core.mjsnpm test -- scripts/plugin/content-factory-production-gui-evidence.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs、真实 Electron CDP collector、signed release gate --check
  • 2026-07-05:补写 Electron/CDP Gate B baseline 证据分级。最新真实桌面证据 .lime/qc/gui-evidence/writing/writing-cdp-WRITING_CDP_1783188149738-summary.json 显示 usedElectronCdp=trueusedRealElectron=truebridgeHealthChecked=trueturnStartViaElectronIpc=truewritingActivationMetadataPresent=truearticleArtifactFrameVisible=truearticleArtifactHasBody=trueprocessOrGuidanceCaptured=truenoInvokeErrors=true;同名 turn-start-trace.json 记录 app_server_handle_json_lineselectron-ipccontent_article_workflow、session sess_986a1c6327914bd58233cebfa50a530e 和 turn a337d0fa-f791-43eb-bb34-0380b005b8b7。该证据只标记 baseline:脚本主动点击了“打开文档”,所以不能证明右侧不自动打开;也没有覆盖历史恢复和 raw JSON / 文件卡隐藏的负向断言。下一刀必须做 product acceptance,而不是继续堆 worker fixture。
  • 2026-07-05:补 App Server current-turn live Provider host-managed generation 证据,并修复 signed release gate 的 live 判定误伤。content-factory-current-turn-smoke.mjs 新增 --live-provider 分支,只有显式 --allow-live-providerLIME_ALLOW_LIVE_PROVIDER_SMOKE=1 / LIME_REAL_API_TEST=1 才会读取 --live-api-key-env 指向的环境变量;默认 npm smoke 仍是 --host-generation-fixture。本轮用 Agnes OpenAI-compatible https://apihub.agnes-ai.com/v1 + agnes-2.0-flash 跑通真实 Provider,证据 .lime/qc/gui-evidence/agent-apps/content-factory-current-turn-live-provider-2026-07-05T07-53-24-361Z.json 显示 liveProviderUsed=truehostManagedGenerationStatus=completedfinalDocumentLength=3153workflowEventCount=16。随后修复 content-factory-signed-release-gatehostGenerationFixture: null 的字符串误判:live evidence 重新过 gate 后不再报 production_host_generation_not_live,但仍按预期 blocked 于 production catalog / trust roots / fetchCloud / cloud_release GUI / resume lifecycle。验证:node --check scripts/plugin/content-factory-current-turn-smoke.mjsnode --check scripts/lib/content-factory-host-generation-fixture.mjsnode --check scripts/lib/plugin-content-factory-signed-release-gate-core.mjsnpm test -- scripts/lib/content-factory-host-generation-fixture.test.mjs scripts/plugin/content-factory-current-turn-smoke.test.mjsnpm test -- scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs、fixture regression smoke、live provider smoke、npm run plugin:content-factory-signed-release-gate -- --gui-evidence .lime/qc/gui-evidence/agent-apps/content-factory-current-turn-live-provider-2026-07-05T07-53-24-361Z.json --output .lime/qc/gui-evidence/agent-apps/content-factory-signed-release-gate-live-provider-blocked-2026-07-05.json --check(预期 blocked,且 missing codes 不含 production_host_generation_not_live)。
  • 2026-07-05:尝试本地 fixture-signed cloud_release + Agnes live Provider 组合回归,命令为 content-factory-current-turn-smoke.mjs --cloud-release-fixture --live-provider ...。该组合不是 production evidence,只用于提前验证 live 分支和 cloud_release runtime/cache 路径能共存;本次失败于真实 Provider 第 4 次请求返回 404 Not Found,前三次 provider request 已收到 streaming event,failure evidence 为 .lime/qc/gui-evidence/agent-apps/content-factory-current-turn-cloud-release-live-provider-cloud-release-2026-07-05T08-03-37-980Z.failure.json。失败证据已确认未泄漏 API key;由于 local_folder live 已通过,且 production gate 仍要求真正的 signed remote release / trust roots / fetchCloud / GUI cloud_release / resume lifecycle,本次失败记录为组合回归缺口,不把它作为主线完成或阻塞 production gate 的替代证据。
  • 2026-07-05:补强 content-factory-current-turn-smoke.mjs 的失败诊断,解决 live cloud_release 组合失败时 evidence 过薄的问题。失败 evidence 现在会记录脱敏后的 options、installed state、cloud_release 签名状态、session / turn id、运行阶段、sidecar stdout/stderr tail,以及如果已落盘则复制 .failure.events.jsonl / .failure.workflow-events.jsonl;API key 仍只记录 env 名和 configured boolean,不写入源码、命令或 evidence。该改动不改变业务路径,也不把 fixture-signed cloud_release 当 production 证据,只为下一次真实复测定位 Provider 请求、安装态或 runtime/cache 阶段问题。验证:node --check scripts/plugin/content-factory-current-turn-smoke.mjsnpm test -- scripts/plugin/content-factory-current-turn-smoke.test.mjs scripts/lib/content-factory-host-generation-fixture.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs
  • 2026-07-19:Codex 对齐删除旧 queued resume workflow contract。thread/resume 现在只做 Thread rejoin/history hydrate;workflow resume audit 只能由 typed action response / workflow/respondmetadata.workflowResume 触发。旧 queued contract 模板、正向 evidence 与生产门禁输入不再属于 current surface。
  • 2026-07-05:补 production evidence secret scan。content-factory-signed-release-gate 现在会扫描 catalog / bootstrap / fetchCloud / GUI evidence 中的 sk-*Bearer ... secret-like 值,命中时返回 production_secret_values_present,只报告字段路径,不回显密钥内容。production evidence 可以记录 apiKeyEnvapiKeyConfigured=true,不能保存 Provider API key、bearer token、私钥或完整 provider request / response。验证:npm test -- scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs
  • 2026-07-19:旧 resumeAgentRuntimeThread(...)RuntimeResumeContractlime-runtime-resume-contract/v0.1agentSession/thread/resume workflow metadata gateway 已物理删除,分类为 dead / deleted / forbidden-to-restore,不保留 queue/session resume 兼容包装。workflow continuation 的 current evidence 只接受 agentSession/action/respondworkflow/respondmetadata.workflowResume;canonical thread/resume 只承接 Codex-style Thread/Turn/Item cold rejoin/history hydrate,不恢复旧 resume contract。
  • 2026-07-05:补写 Electron/CDP Gate B product acceptance。真实 Electron/CDP evidence /tmp/lime-writing-evidence/writing-final-WRITING_LIVE_1783229659461-2026-07-05T06-02-47-474Z-summary.json 显示目标 session sess_f781bf079f074b7aa2ec0941bade095d,runtime 为真实 Electron http://127.0.0.1:1420/?nativeStartup=1gateB / historyRestored / naturalLeadVisible / toolProcessVisible / articleFrameVisible / rawPatchHidden / workflowStepsHiddenInChat / rightSurfaceNotAutoOpened / rightSurfaceOpensOnClick / traceHasElectronRead 全部为 true。该证据把 Writing v2 的真实桌面 UI / 历史恢复 / 右侧打开边界从待验收推进到已验收;剩余缺口转为 remote signed release GUI production 与 production resume lifecycle。
  • 2026-07-05:补用户面 artifact 可见性、文章历史恢复和累计文本合并。App Server read_model 用户面 artifact 列表改用 stored_user_visible_artifact_summaries_for_turn(...),过滤 raw workspace patch,但 artifact/read 继续保留内部 patch;前端 agentChatHistoryArtifacts 只隐藏 workspace patch,不再隐藏 artifact_document + articleWorkspacethread_item_projection/agent_message.rsitem.updated 累计文本做覆盖合并,保留 message.delta 增量追加。验证:cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server read_session_hides_workspace_patch_from_user_visible_artifacts -- --nocapturecargo test --manifest-path "lime-rs/Cargo.toml" -p app-server read_session_materializes_content_factory_workspace_patch_into_article_workspace -- --nocapturecargo test --manifest-path "lime-rs/Cargo.toml" -p app-server item_updated_agent_message_cumulative_text_replaces_delta_prefix -- --nocapturenpx vitest run "src/components/agent/chat/hooks/agentChatHistory.timeline.test.ts" -t "历史应恢复文章 artifact document 且隐藏 workspace patch"npm run test:related -- ... 因本机磁盘空间不足触发 ENOSPC,未作为完成证据。
  • 2026-07-05:修复普通 @写文章 turn 的内容工厂 materialization 顺序。RuntimeCore 新增 terminal deferring sink,对内容工厂 plugin_activation 暂存普通 backend 发出的 turn.completed,先派生后处理 PaneActionWorkerTurn 执行 article artifact materialization、host tool enrichment 与 workflow-events.jsonl audit 写入,再重新 emit terminal。plugin_activation 仍进入普通 Agent backend,maybe_run_plugin_worker_turn 不接管首发,右侧 pane/action worker 只响应显式右侧动作。同步把旧单测“不得 materialize worker artifacts”改成“普通 backend 先接收请求,artifact snapshot 与 workflow JSONL 必须在 terminal 前出现”。验证:cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server plugin_activation_turn_uses_regular_agent_backend --libcargo test --manifest-path "lime-rs/Cargo.toml" -p app-server plugin_worker_turn --libnpm 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"。最新 smoke evidence:.lime/qc/content-factory-current-turn-debug/content-factory-current-turn-debug-host-generation-2026-07-05T04-19-07-937Z.json,显示普通事件 35 条、artifactSnapshotCount=7streamingDocumentLengths=5hostToolEventCount=9、read model host tool call 3 个,后台 workflow-events.jsonl 写入 16 条 metadata-only audit 事件;该证据仍使用本地 OpenAI-compatible fixture,不等同于真实 live Provider / Electron GUI production 完成。
  • 2026-07-03:接入 workflow-events.jsonl compaction 自动触发策略。EventLogWriter::append_workflow_audit_events(...) 在 audit 写入成功后执行 compact_session_workflow_audit_events_if_needed(...),active audit 超过 1024 条时归档旧记录并保留最近 512 条;archive 文件按 sequence 范围确定并覆盖写入,新增幂等守卫防止 compaction 重试把同一批旧 audit 重复追加到 Evidence Pack;compaction 失败只写 tracing::warn!,不会让已落盘 audit 写入回滚或把 housekeeping 失败投影到普通 turn。event_log.rs 接近 800 行预警后已把同文件单测拆到 runtime/event_log/tests.rs,实现文件降到约 490 行。验证:cargo fmt --manifest-path "lime-rs/Cargo.toml" --package app-servernpm run test:rust:unit -- -p app-server event_log -- --nocapturenpm run test:rust:unit -- -p app-server export_evidence_summarizes_workflow_audit_jsonl_metadata_only -- --nocapture
  • 2026-07-03:补 workflow-events.jsonl retention / archive compaction 本地 API。EventLogWriter::compact_session_workflow_audit_events(session_id, retain_recent) 会把 active workflow-events.jsonl 的旧记录归档到同目录 workflow-events.archive.<first_seq>-<last_seq>.jsonl,active 文件只保留最近 N 条;read_session_workflow_audit_events(...)evidence/export 聚合读取 archive + active,归档后 Evidence Pack 摘要不丢 workflow audit 元数据。retain_recent=0 fail closed,不允许误清空 audit;clear_session(...) 同步删除 active 与 archive,避免压缩后会话清理仍能读到历史 audit。当前剩余缺口只剩自动触发阈值 / 运维策略接入,不再是存储格式或导出能力缺口。验证:cargo fmt --manifest-path "lime-rs/Cargo.toml" --package app-servernpm run test:rust:unit -- -p app-server compact_workflow_audit -- --nocapturenpm run test:rust:unit -- -p app-server clear_session_removes_session_event_log -- --nocapturenpm run test:rust:unit -- -p app-server export_evidence_summarizes_workflow_audit_jsonl_metadata_only -- --nocapture
  • 2026-07-03:补 P2 resume audit fail-closed 守卫。agentSession/thread/resume 仍只负责恢复 App Server queued turn,不代表插件 worker workflow resume;新增 queue_resume_audit Rust 守卫,先写入既有 workflow.run.started / workflow.run.completed audit-only JSONL,再执行 queued turn resume,断言普通 session JSONL 不出现 workflow.*workflow-events.jsonl 不新增任何 workflow.*resum* 事件。该 fail-closed 守卫已被 2026-07-05 metadata contract 正向测试补齐:只有 contract metadata 能绑定既有 workflowRunId + stepId 时才写 metadata-only resume audit。验证:cargo fmt --manifest-path "lime-rs/Cargo.toml" --package app-servernpm run test:rust:unit -- -p app-server resume_queued_turn_does_not_write_workflow_resume_audit_without_worker_lifecycle -- --nocapture
  • 2026-07-03:收掉用户可见的内容工厂硬编码模板面。WorkspaceArticleEditorSurface 不再渲染 worker metadata 中的 researchRounds / outline / citations / titleCandidates / keyTakeaways / writingPlan / reviewNotes / imageSlots 面板,右侧 Article Editor 只保留正文画布、操作按钮和关联产物;这些 workflow / planning facts 继续停留在 worker payload、JSONL audit 和 evidence,不作为普通用户 UI。AgentAppLabPage 同步下线宿主内置硬编码 demo 可见入口,run-content-demo 退出 entry runtime guard operation,src/features/agent-app/index.ts 不再导出该硬编码 demo API;旧 demo 文件已随 src/features/agent-app/** 清理,不再作为 test-only / deprecated residual。AgentAppLabPage.tsx 已退出 current 写集,后续 UI 拆分回到 Plugin / App Center current 页面与 runtime surface。验证:历史 UI / Lab / index / demo 退场测试、npx eslint --max-warnings 0git diff --checknpx prettier --check(UI / Lab / index / plan 写集)。
  • 2026-07-03:修正 Claw GUI 内容工厂 Article Workspace 的 smoke 证据口径。contentFactoryArticleWorkspaceArticleWritingStructureVisible 退出,改为 contentFactoryArticleWorkspaceArticleCanvasSurfaceVisible;GUI smoke 现在只把 Article Editor 正文画布、metadataPanelsHidden=trueworkflowUiRailHidden=true、旧模板 marker 未出现作为成功条件,不再要求 research / outline / citations / imageSlots / titleCandidates / takeaways / writingPlan / review 这些旧 metadata 面板存在。hasWorkerResearchText / hasWorkerDraftText 等误导性 summary 字段同步改为 legacy template / canvas body 口径。分类:正文画布为 current;旧 metadata panel 可见性成功面为 dead;旧模板 marker 仅作为 test-only 负向守卫保留。复跑 GUI smoke 时发现本地 dist 仍是旧 renderer bundle,先修复 submitClientPluginRegistrationCode 重复导出导致的 renderer build 阻塞,再重建 renderer 并确认 dist 已无旧 Article Editor metadata test id。最新 GUI evidence:.lime/qc/gui-evidence/claw-chat-current-fixture/claw-chat-current-fixture-content-factory-canvas-surface-no-template-panels-summary.json,显示 scenario pass。验证:node --check scripts/agent-runtime/claw-chat-current-fixture-content-factory-article-workspace.mjsnode --check scripts/agent-runtime/claw-chat-current-fixture-content-factory-assertions.mjsnode --check scripts/agent-runtime/claw-chat-current-fixture-constants.mjsnode --check scripts/agent-runtime/claw-chat-current-fixture-smoke.test.mjsnpm test -- scripts/agent-runtime/claw-chat-current-fixture-smoke.test.mjsnpm test -- src/lib/api/oemCloudControlPlane.contract.test.ts src/features/plugin/marketplace/pluginMarketplaceActions.unit.test.tscargo build --manifest-path "lime-rs/Cargo.toml" -p app-servernpm run build:renderer:electronrg -n "workspace-article-editor-(title-candidates|research|outline|citations|image-slots|takeaways|writing-plan|review)" dist(预期无匹配)、npm run smoke:claw-chat-current-fixture -- --scenario content-factory-article-workspace --timeout-ms 240000 --prefix claw-chat-current-fixture-content-factory-canvas-surface-no-template-panelsnpx prettier --check scripts/agent-runtime/claw-chat-current-fixture-content-factory-article-workspace.mjs scripts/agent-runtime/claw-chat-current-fixture-content-factory-assertions.mjs scripts/agent-runtime/claw-chat-current-fixture-constants.mjs scripts/agent-runtime/claw-chat-current-fixture-smoke.test.mjs src/lib/api/oemCloudControlPlane.ts src/lib/api/oemCloudControlPlane.contract.test.ts src/features/plugin/marketplace/pluginMarketplaceActions.ts src/features/plugin/marketplace/pluginMarketplaceActions.unit.test.tsnpx eslint --max-warnings 0 scripts/agent-runtime/claw-chat-current-fixture-content-factory-article-workspace.mjs scripts/agent-runtime/claw-chat-current-fixture-content-factory-assertions.mjs scripts/agent-runtime/claw-chat-current-fixture-constants.mjs scripts/agent-runtime/claw-chat-current-fixture-smoke.test.mjs src/lib/api/oemCloudControlPlane.ts src/lib/api/oemCloudControlPlane.contract.test.ts src/features/plugin/marketplace/pluginMarketplaceActions.ts src/features/plugin/marketplace/pluginMarketplaceActions.unit.test.tsgit diff --check -- scripts/agent-runtime/claw-chat-current-fixture-content-factory-article-workspace.mjs scripts/agent-runtime/claw-chat-current-fixture-content-factory-assertions.mjs scripts/agent-runtime/claw-chat-current-fixture-constants.mjs scripts/agent-runtime/claw-chat-current-fixture-smoke.test.mjs src/lib/api/oemCloudControlPlane.ts src/lib/api/oemCloudControlPlane.contract.test.ts src/features/plugin/marketplace/pluginMarketplaceActions.ts src/features/plugin/marketplace/pluginMarketplaceActions.unit.test.ts internal/exec-plans/writing-v2-workflow-completion-plan.md
  • 2026-07-03:收掉内容工厂剩余硬编码模板成功面。外部 /Users/coso/Documents/dev/ai/limecloud/content-factory-app 与 Lime 内 src/features/plugin/testing/fixtures/package-rootcontent-factory-worker.mjs 已将 content.factory.generate host worker request 纳入 host-managed generation fail-closed 边界;缺 articleDraft.documentText 时返回 HOST_MANAGED_GENERATION_REQUIRED,不再从 article-planning.mjs 回退固定正文。共享 scripts/lib/content-factory-host-generation-fixture.mjs 改为请求派生的短 provider stub,指纹放入隐藏 Markdown comment,不再输出固定“请求摘要 / 资料检索 / 正文草稿 / 交付检查”章节;content-factory-current-turn-smoke.mjs、Claw GUI Article Workspace 和 artifact/read assertion 均新增旧模板 marker 守卫。最新 current-turn evidence:.lime/qc/gui-evidence/agent-apps/content-factory-current-turn-smoke-no-template-guard-host-generation-2026-07-03T01-00-27-277Z.json,显示 partials=5workflowEvents=16hostGeneration=completed;最新 GUI evidence:.lime/qc/gui-evidence/claw-chat-current-fixture/claw-chat-current-fixture-content-factory-no-template-guard-summary.json。验证:外部包 npm testnpm run validate:app;Lime package-root npm testnpm run validate:appnpm test -- scripts/lib/content-factory-host-generation-fixture.test.mjs scripts/agent-runtime/claw-chat-current-fixture-smoke.test.mjs src/features/plugin/testing/contentFactoryFixtureSync.unit.test.ts src/features/plugin-content-factory/contentFactoryWorkerContract.unit.test.tsnpm run smoke:content-factory-current-turn -- --timeout-ms 180000 --prefix content-factory-current-turn-smoke-no-template-guardnpm run smoke:claw-chat-current-fixture -- --scenario content-factory-article-workspace --timeout-ms 240000 --prefix claw-chat-current-fixture-content-factory-no-template-guard
  • 2026-07-03:收掉内容工厂 host generation smoke 的写死正文模板。新增 scripts/lib/content-factory-host-generation-fixture.mjscontent-factory-current-turn-smoke.mjs 与 Claw GUI worker dogfood 共同复用同一套本地 OpenAI-compatible fixture;fixture 响应从 provider 请求中提取用户原始 prompt,生成带 fixturePromptFingerprint 的 fixture-only Markdown,不再在两个 smoke 里各自硬编码“受控宿主生成标题 / 内容工厂插件化写作:让文章生产可审计”固定正文。workflow-events.jsonl 泄露断言同步改为检查新 fixture 标记,结构测试新增旧标题负向守卫。最新 current-turn evidence:.lime/qc/gui-evidence/agent-apps/content-factory-current-turn-smoke-request-derived-fixture-host-generation-2026-07-03T00-36-30-160Z.json,显示 artifactSnapshotCount=13streamingDocumentLengths11 个段落级 partial、finalDocumentLength=748hostGenerationFixture.fixtureOnly=true;最新 GUI evidence:.lime/qc/gui-evidence/claw-chat-current-fixture/claw-chat-current-fixture-content-factory-request-derived-fixture-summary.json,显示 backendMode=runtimehostManagedGenerationStatus=completedhostManagedGenerationOutputIds=["article-draft-document"]contentFactoryArticleWorkspaceWorkflowFactsHidden=true。验证:node --check scripts/lib/content-factory-host-generation-fixture.mjsnode --check scripts/agent-runtime/claw-chat-current-fixture-content-factory-worker-dogfood.mjsnode --check scripts/plugin/content-factory-current-turn-smoke.mjsnpm test -- scripts/lib/content-factory-host-generation-fixture.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/agent-runtime/claw-chat-current-fixture-smoke.test.mjsnpm run smoke:content-factory-current-turn -- --timeout-ms 180000 --prefix content-factory-current-turn-smoke-request-derived-fixturenpm run smoke:claw-chat-current-fixture -- --scenario content-factory-article-workspace --timeout-ms 240000 --prefix claw-chat-current-fixture-content-factory-request-derived-fixture
  • 2026-07-03:新增内容工厂 signed remote release production gate。scripts/plugin/content-factory-signed-release-gate.mjs 只读取 operator 提供的 catalog / bootstrap / fetchCloud / GUI evidence JSON,要求 production cloud_release catalog 版本匹配、非 fixture HTTPS packageUrl、sha256 package/manifest hash、signatureRef、完整 signatureProof、bootstrap pluginSignatureTrustRoots 匹配、fetchCloud hashes/signature ready、GUI Article Workspace 通过真实 live Provider 完成 hostManagedGeneration 且 workflow 写入 workflow-events.jsonl。gate 显式拒绝 fixture channel/release/packageUrl、localhost provider、hostGenerationFixture、缺 trust roots、缺 fetchCloud、缺 live Provider evidence。当前用 request-derived fixture smoke 生成 blocked evidence:.lime/qc/gui-evidence/agent-apps/content-factory-signed-release-gate-blocked-2026-07-03.json,missing codes 包含 production_catalog_missingproduction_trust_roots_missingproduction_fetch_cloud_evidence_missingproduction_gui_not_cloud_releaseproduction_gui_signature_not_verifiedproduction_host_generation_not_livefixture_cloud_release_not_allowed。验证:node --check scripts/lib/plugin-content-factory-signed-release-gate-core.mjsnode --check scripts/plugin/content-factory-signed-release-gate.mjsnpm test -- scripts/lib/content-factory-host-generation-fixture.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/agent-runtime/claw-chat-current-fixture-smoke.test.mjsnode scripts/plugin/content-factory-signed-release-gate.mjs --gui-evidence .lime/qc/gui-evidence/agent-apps/content-factory-current-turn-smoke-request-derived-fixture-host-generation-2026-07-03T00-36-30-160Z.json --output .lime/qc/gui-evidence/agent-apps/content-factory-signed-release-gate-blocked-2026-07-03.json
  • 2026-07-03:补 production evidence 模板输出。content-factory-signed-release-gate.mjs --write-template-dir <dir> 会生成 content-factory-production-catalog.template.jsoncontent-factory-production-bootstrap.template.jsoncontent-factory-fetch-cloud-evidence.template.jsoncontent-factory-gui-evidence.template.jsoncontent-factory-signed-release-gate.template.json,README JSON 中的 gate 命令使用模板目录绝对路径,避免 operator 从仓库根执行时误读文件。当前模板目录:.lime/qc/gui-evidence/agent-apps/content-factory-production-evidence-template-2026-07-03/。验证:npm test -- scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjsnpm run plugin:content-factory-signed-release-gate -- --write-template-dir .lime/qc/gui-evidence/agent-apps/content-factory-production-evidence-template-2026-07-03
  • 2026-07-03:补 production evidence 目录化 gate 入口。新增 scripts/lib/plugin-content-factory-signed-release-gate-evidence-dir.mjscontent-factory-signed-release-gate.mjs --evidence-dir <dir> 会按模板目录读取四份 production evidence,并在未显式传 --output 时写回 <dir>/content-factory-signed-release-gate.result.json;显式 --catalog/--bootstrap/--fetch-cloud/--gui-evidence 仍可覆盖目录输入。--write-template-dir 生成的 README JSON 也改为推荐 --evidence-dir,减少 operator 手工路径误配。验证:node --check scripts/plugin/content-factory-signed-release-gate.mjsnode --check scripts/lib/plugin-content-factory-signed-release-gate-core.mjsnode --check scripts/lib/plugin-content-factory-signed-release-gate-evidence-dir.mjsnpm test -- scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjsnpm run plugin:content-factory-signed-release-gate -- --write-template-dir .lime/qc/gui-evidence/agent-apps/content-factory-production-evidence-template-2026-07-03npm run plugin:content-factory-signed-release-gate -- --evidence-dir .lime/qc/gui-evidence/agent-apps/content-factory-production-evidence-template-2026-07-03 --check(预期 blocked,当前 missing codes 为 production_placeholder_values_present / production_package_hash_missing / production_manifest_hash_missing)。
  • 2026-07-03:收掉 Claw GUI 内容工厂 Article Workspace 的旧无宿主生成成功口径。scripts/agent-runtime/claw-chat-current-fixture-smoke.mjscontent-factory-article-workspace 场景切到 APP_SERVER_BACKEND_MODE=runtimeclaw-chat-current-fixture-content-factory-worker-dogfood.mjs 在 worker dogfood turn 上注入本地 OpenAI-compatible SSE fixture 的 runtimeOptions.hostOptions.agentChatRequest,触发 App Server current prepare_agent_app_worker_request(...),并把 fixture provider 请求写入 summary 证据。claw-chat-current-fixture-content-factory-assertions.mjs 现在要求 hostManagedGenerationStatus=completedhostManagedGenerationOutputIds 包含 article-draft-document 且 fixture provider 至少被请求一次;旧 host_generation_unavailable 不再是 GUI smoke 成功条件。证据:.lime/qc/gui-evidence/claw-chat-current-fixture/claw-chat-current-fixture-summary.json 与聚合 .lime/qc/gui-evidence/claw-chat-current-fixture/claw-chat-current-fixture-content-factory-article-workspace-regression-summary.json,显示 backendMode=runtime、fixture /v1/chat/completions 请求 5 次、read model hostManagedGenerationStatus=completedhostManagedGenerationOutputIds=["article-draft-document"]contentFactoryArticleWorkspaceWorkflowFactsHidden=true。验证:npm test -- scripts/agent-runtime/claw-chat-current-fixture-smoke.test.mjsnpm run smoke:claw-chat-current-fixture -- --scenario content-factory-article-workspace --timeout-ms 240000npm run smoke:agent-runtime-current-fixturenpx prettier --check "scripts/agent-runtime/claw-chat-current-fixture-smoke.mjs" "scripts/agent-runtime/claw-chat-current-fixture-content-factory-worker-dogfood.mjs" "scripts/agent-runtime/claw-chat-current-fixture-content-factory-assertions.mjs" "scripts/agent-runtime/claw-chat-current-fixture-content-factory-article-workspace.mjs" "scripts/agent-runtime/claw-chat-current-fixture-smoke.test.mjs" "internal/exec-plans/writing-v2-workflow-completion-plan.md"
  • 2026-07-03:继续收掉内容工厂旧学习路线模板的 metadata 回流。外部 /Users/coso/Documents/dev/ai/limecloud/content-factory-app 与 Lime 内 src/features/plugin/testing/fixtures/package-rootsrc/runtime/article-planning.mjs 已从“Golang / 学习路线 / 基础语法到工程实战 / 第一阶段”模板改为主题中性的文章结构规划;articleDraft.documentText 仍必须来自 host-managed generation,缺宿主正文继续 HOST_MANAGED_GENERATION_REQUIRED fail closed。同步更新 contentFactoryWorkerContract.unit.test.ts 与 App Server agent_app_worker_turn 测试:正向断言改为宿主生成正文,负向守卫禁止旧学习路线模板作为成功结果;Rust worker turn 使用测试 backend 注入 host generation,避免单测继续证明无宿主 fallback。根 testing/fixtures/src/runtime/article-planning.mjs 也机械同步到 package-root,并由 contentFactoryFixtureSync.unit.test.ts 守住,防止再次出现第二套模板。验证:外部包 npm testnpm run validate:app;Lime package-root npm testnpm run validate:appnpm test -- src/features/plugin-content-factory/contentFactoryWorkerContract.unit.test.tsnpm test -- src/features/plugin/testing/contentFactoryFixtureSync.unit.test.tsnpm run test:rust:unit -- -p app-server article_generation_worker_emits_initial_streaming_workspace_snapshotnpm run test:rust:unit -- -p app-server article_workspace_turn_runs_installed_worker_and_materializes_workspace_patchnpm run smoke:content-factory-current-turn -- --timeout-ms 180000npm run smoke:content-factory-current-turn:cloud-release -- --timeout-ms 180000node scripts/plugin/content-factory-current-turn-smoke.mjs --content-factory-dir "src/features/plugin/testing/fixtures/package-root" --host-generation-fixture --timeout-ms 180000 --prefix content-factory-current-turn-smoke-package-root-host-generation。最新 evidence:.lime/qc/gui-evidence/agent-apps/content-factory-current-turn-smoke-host-generation-2026-07-02T23-52-57-467Z.json.lime/qc/gui-evidence/agent-apps/content-factory-current-turn-smoke-cloud-release-host-generation-2026-07-02T23-56-35-608Z.json.lime/qc/gui-evidence/agent-apps/content-factory-current-turn-smoke-package-root-host-generation-host-generation-2026-07-02T23-53-46-075Z.json。外部包 inspect hash 更新为 sha256:1145de4914af9d8ede5fb5e089cd6915d93a5e81ddc027258417297f00839a26;package-root inspect hash 更新为 sha256:2b842c1401459db69e399002eeb2b7ead451e1fe3b8bab192c6a1ca7aa20d354;manifest hash 仍为 sha256:6df5c193ac89ff4400006a45d8340029446529d9b5953c7c5d03d4349f9dbfc3
  • 2026-07-03:撤掉内容工厂文章生成的 deterministic 模板成功路径。外部 /Users/coso/Documents/dev/ai/limecloud/content-factory-app 与 Lime 内 src/features/plugin/testing/fixtures/package-rootcontent-factory-worker.mjs 已改为:content.article.generate 必须拿到 hostManagedGeneration.outputs[] 中的 articleDraft.documentText 才返回 completed artifact 和段落级 artifact.snapshot;宿主无 provider、生成失败或未注入结果时返回 HOST_MANAGED_GENERATION_REQUIRED,不再把 article-planning.mjs 的“学习路线:从基础语法到工程实战 / 第一阶段:打牢基础”样例当正文。示例 runtime-request.sample.json 改为携带宿主生成正文;validate-app.mjs 显式断言正文来自 host generation 且不包含旧模板;README / development 文档同步改口为 fail closed。package.jsonsmoke:content-factory-current-turnsmoke:content-factory-current-turn:cloud-release 默认都改为 --host-generation-fixture,避免继续用 no-host 成功口径。同步把 seeded descriptor / manifest snapshot 推进到 2.2.2 并补 contentFactoryFixtureSync.unit.test.ts 版本/hash 守卫。验证:外部包 npm testnpm run validate:appnode --check src/runtime/content-factory-worker.mjs;Lime package-root npm testnpm run validate:appnode --check src/features/plugin/testing/fixtures/package-root/src/runtime/content-factory-worker.mjsnpm test -- src/features/plugin/testing/contentFactoryFixtureSync.unit.test.tsnpm run smoke:content-factory-current-turn -- --timeout-ms 180000npm run smoke:content-factory-current-turn:cloud-release -- --timeout-ms 180000。最新证据:.lime/qc/gui-evidence/agent-apps/content-factory-current-turn-smoke-host-generation-2026-07-02T23-32-23-024Z.json.lime/qc/gui-evidence/agent-apps/content-factory-current-turn-smoke-cloud-release-host-generation-2026-07-02T23-35-56-358Z.json
  • 2026-07-03:补外部内容工厂发布侧签名工具链,并同步 Lime package-root 快照。/Users/coso/Documents/dev/ai/limecloud/content-factory-app 新增 scripts/sign-release.mjstests/sign-release.test.mjsnpm run release:sign,按 Lime Host verifier canonical payload 生成 signatureProof / app.signature.yaml,支持 RSASSA-PKCS1-v1_5-SHA256RSA-PSS-SHA256ECDSA-P256-SHA256Ed25519;私钥只从 AGENT_APP_SIGNING_PRIVATE_KEY_PEM--private-key-file 读取,不写入仓库。Lime 内 src/features/plugin/testing/fixtures/package-root 同步该签名工具、发布文档和校验脚本,contentFactoryFixtureSync.unit.test.ts 新增守卫,防止 plugin.json / package.json 版本、release:sign 入口、签名脚本和签名测试再次漂移;cloudReleaseSignature.test.ts 进一步直接加载 package-root scripts/sign-release.mjs 生成 proof,并用 Host verifyCloudReleaseSignature(...) 验证通过。验证:外部包 npm testnpm run validate:app;Lime package-root npm testnpm run validate:appnpm test -- src/features/plugin/testing/contentFactoryFixtureSync.unit.test.tsnpm test -- src/features/plugin/install/cloudReleaseSignature.test.tsnpx prettier --check "src/features/plugin/testing/contentFactoryFixtureSync.unit.test.ts" "src/features/plugin/install/cloudReleaseSignature.test.ts"。该证据只证明 signed release 生成工具与宿主验签规则一致,不等同于 production key/trust root 已配置或真实远程 GUI 安装完成。
  • 2026-07-03:补 LimeCore 本地 Plugin 签名下发契约首版。/Users/coso/Documents/dev/ai/limecloud/limecore 新增 Plugin release signatureProof、bootstrap pluginSignatureTrustRootsplugin.signatureTrustRoots / PLUGIN_SIGNATURE_TRUST_ROOTS_JSON 配置入口,并同步 OpenAPI source fragments / bundle、packages/types 与 API 文档;client/pluginsclient/bootstrap.plugins.apps[] 会透传 proof,client/bootstrap 顶层会下发可信根。该条是历史首版记录,2026-07-05 已升级为 catalog / marketplace / bootstrap / bulk publish / MySQL snapshot / Studio current publish 的完整本地 contract,当前验证口径以上方 2026-07-05 进度日志为准。
  • 2026-07-03:补 workflow-events.jsonl Evidence Pack 摘要导出。RuntimeCore::export_evidence(...) 读取同一 session / turn 的 workflow audit JSONL,并把事件传给 BasicEvidenceExportProviderobservabilitySummary.workflow_audit 只输出 event type breakdown、workflow run / key、turn、step、connector、tool、status、sourceEventIds 和 redaction 覆盖统计,不返回原始 workflow audit payload,也不改变普通 agentSession/read / Article Editor。验证:cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server export_evidence_summarizes_workflow_audit_jsonl_metadata_only -- --nocapture
  • 2026-07-03:补 workflow-events.jsonl metadata-only 脱敏。EventLogWriter::append_workflow_audit_events(...) 在写盘前统一克隆并脱敏 workflow audit payload,prompt / query / result / providerConfig / message / text / summary 等 raw content 字段替换为 { redacted: true, policy: "workflow_audit_metadata_only" },含 Bearer / api_key / token / secret / password 的字符串也会替换为 redacted,占位同时注入顶层 redaction policy;workflowRunId / workflowKey / stepId / connectorRef / toolName / status / metadata.agentAppWorkflow 等审计元数据保留。scripts/plugin/content-factory-current-turn-smoke.mjs 同步断言 workflow JSONL 每条事件都有 metadata-only redaction policy,且不会泄露用户 prompt 或 host generation 正文。验证:cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server workflow_audit_events_are_metadata_only_redacted -- --nocapturecargo test --manifest-path "lime-rs/Cargo.toml" -p app-server agent_app_worker -- --nocapture
  • 2026-07-03:补真实外部内容工厂 package 的 fixture-signed cloud_release current-turn smoke。后续 fail-closed 收口已经废弃“无 host generation 也 completed”的旧正向证据;当前 smoke:content-factory-current-turn:cloud-release 默认带 --host-generation-fixture,只接受 hostManagedGenerationStatus=completed 后输出段落级 partial。最新证据:.lime/qc/gui-evidence/agent-apps/content-factory-current-turn-smoke-cloud-release-host-generation-2026-07-02T23-35-56-358Z.json 及同名 workflow-events.jsonl。该证据只证明签名 evidence ready 后的 App Server cloud_release runtime/cache/current-turn 路径,不替代生产 LimeCore 的 signatureProof / pluginSignatureTrustRoots 下发和 GUI 确认安装。
  • 2026-07-03:补真实外部内容工厂 package 的 App Server current-turn host generation smoke。scripts/plugin/content-factory-current-turn-smoke.mjs 新增 --host-generation-fixture 模式,package.json 新增 npm run smoke:content-factory-current-turn:host-generation;该模式启动本地 OpenAI-compatible SSE fixture,显式用 backendMode=runtimeruntimeOptions.hostOptions.agentChatRequest.provider_config 触发 App Server host-managed generation,要求最终 artifact 与 agentSession/read 都得到 hostManagedGenerationStatus=completed,且正文来自宿主生成结果。证据显示外部 /Users/coso/Documents/dev/ai/limecloud/content-factory-app@2.2.2 package hash 为 sha256:4be73a57bb5d29c5768b13a46c8ed8b07194fa7eda243d79feaf7d824941bdee、manifest hash 为 sha256:6df5c193ac89ff4400006a45d8340029446529d9b5953c7c5d03d4349f9dbfc3,普通 event stream 产生 19 条事件、6artifact.snapshot4 个段落级 streaming partial;workflow-events.jsonl 写入 16 条 audit-only workflow 事件,fixture provider 收到 5 次请求。证据:.lime/qc/gui-evidence/agent-apps/content-factory-current-turn-smoke-host-generation-2026-07-02T20-48-56-462Z.json、同名 .workflow-events.jsonl。验证:npm run smoke:content-factory-current-turn:host-generation -- --timeout-ms 180000
  • 2026-07-03:补真实外部内容工厂 package 的 App Server current local_folder turn smoke。后续 fail-closed 收口已经废弃 backendMode=unavailable 下仍生成正文的旧证据;当前 npm run smoke:content-factory-current-turn 默认带 --host-generation-fixture,使用本地 OpenAI-compatible fixture 证明外部真实包进入 App Server current turn、artifact read model 和 JSONL 审计链路,且正文来自宿主生成结果。最新证据:.lime/qc/gui-evidence/agent-apps/content-factory-current-turn-smoke-host-generation-2026-07-02T23-32-23-024Z.json 及同名 workflow-events.jsonl
  • 2026-07-03:补真实外部内容工厂 package smoke。新增 scripts/plugin/content-factory-package-smoke.mjsnpm run smoke:content-factory-package,默认读取 /Users/coso/Documents/dev/ai/limecloud/content-factory-app,校验 content-factory-app@2.2.2.lapp 包结构、plugin.json / app.runtime.yaml 合同、host-managed generation 声明和 worker 入口;同时执行外部包 npm testnpm run validate:app,再直接运行 src/runtime/content-factory-worker.mjs,断言 workflow.connector.requested 为 audit-only、段落级 artifact.snapshot partial 递增、最终 articleDraft.documentText 消费 host-managed generation。证据:.lime/qc/gui-evidence/agent-apps/content-factory-package-smoke-2026-07-02T20-22-46-553Z.json 与同名 .worker.jsonl。验证:npm run smoke:content-factory-package -- --timeout-ms 180000
  • 2026-07-03:补 P2 cancel lifecycle 审计。agentSession/turn/cancel 在普通事件流只返回 turn.canceled,同时读取既有 workflow-events.jsonl,仅对同一 turn 中未完成的 workflow run 追加 audit-only workflow.step.canceled / workflow.run.canceled;已 completed / failed / canceled 的 run 不重复写取消,已终态 step 不会被更早的 started 误判为 open step。事件仍只进入 sessions/session_<id>/workflow-events.jsonl,不进入普通 session JSONL、read model 或右侧 Article Editor。验证:cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server workflow_cancel -- --nocapturecargo test --manifest-path "lime-rs/Cargo.toml" -p app-server cancel_turn -- --nocapture
  • 2026-07-03:补 host-managed generation 注入链回归。agent_app_worker_generation.rs 新增 localhost OpenAI-compatible SSE fixture,走真实 prepare_agent_app_worker_request(...)、direct hostOptions.agentChatRequest.provider_config 和 Agent streaming 解析,断言 App Server 把 fixture 生成的 Markdown 写入 hostManagedGeneration.outputs[0]runtime.hostManagedGenerationResult,输出目标绑定为 article-draft-document -> articleDraft.documentText。同步复跑 Lime 内 package-root 与外部真实包 /Users/coso/Documents/dev/ai/limecloud/content-factory-app 的 worker tests / validate:app,证明 worker 会消费宿主结果覆盖 deterministic fallback。验证:cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server agent_app_worker_generation -- --nocapturenpm test / npm run validate:app(Lime package-root)、npm test / npm run validate:app(外部真实包)。
  • 2026-07-03:补 P1 connector completed 审计。App Server 在 RuntimeBackend 完成 workspace patch host search、并把真实 WebSearch 工具结果回填为 hostSearchEvidence 后,会从最终 artifact 里提取 evidence,去重后生成 audit-only workflow.connector.completed,再用插件 workflow manifest 绑定 workflowRunId + stepId=research 后追加到 workflow-events.jsonl;该事件不进入普通 runtime events、read model 或右侧 Article Workspace。验证:cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server builds_connector_completed_audit_events_from_host_search_evidence -- --nocapture
  • 2026-07-03:补 P1 hook lifecycle 审计。App Server 继续执行插件声明的 prompt/task hooks,但不再把 agent_app_worker.hook emit 到普通 runtime stream;hook lifecycle 会转换为 audit-only workflow.hook.completed,按 prompt -> first steptask -> last step 绑定插件 workflow step 后追加到 workflow-events.jsonl。前端 event stream 对 workflow.connector.* / workflow.hook.* 显式返回 null,避免审计事件误进用户 timeline。验证:cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server agent_app_worker -- --nocapturenpm test -- src/lib/api/agentRuntime/appServerEventStream.test.tsnpm test -- src/lib/api/agentRuntime/threadClient.test.ts
  • 2026-07-03:补 P1 retry lifecycle 审计。Worker retry 分支继续 emit 既有 agent_app_worker.retry 普通事件用于当前 UI / workerEvidence,但同时追加 workflow.step.retryingworkflow.run.retryingworkflow-events.jsonl;retry 耗尽时最终 workflow.run.failed 保留最后一次 retryAttempt。前端 event stream 对 retrying workflow 事件显式返回 null。验证:cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server agent_app_worker -- --nocapturenpm test -- src/lib/api/agentRuntime/appServerEventStream.test.ts
  • 2026-07-03:收掉聚合 current fixture 的 plain-image-intent 假事实源阻塞。scripts/agent-runtime/claw-chat-current-fixture-image-command.mjs 的自然语言图片场景不再把 plain_image_intent 当成独立 task entry_source,而是对齐 current 发送边界归一后的 at_image_commandscripts/agent-runtime/claw-chat-current-fixture-smoke.test.mjs 同步补静态守卫,防止 smoke 再把场景名误当 payload truth;Rust 单测 image_command_workflow_creates_task_from_current_intent_metadata 也改为 current at_image_command,避免测试继续把 compat 值误写成主事实源。验证:npm test -- "scripts/agent-runtime/claw-chat-current-fixture-smoke.test.mjs"npm run smoke:claw-chat-current-fixture -- --scenario plain-image-intent --prefix claw-chat-current-fixture-plain-image-intent-regression --timeout-ms 180000npm run smoke:agent-runtime-current-fixturecargo test --manifest-path "lime-rs/Cargo.toml" -p app-server image_command_workflow_creates_task_from_current_intent_metadata -- --nocapture
  • 2026-07-03:补 P1 workflow audit 绑定守卫和 connector requested 审计。App Server 新增 AgentAppWorkerWorkflowContext::bind_worker_progress_event(...),worker progress 中的 workflow.step.progress / workflow.tool.* / workflow.connector.* / workflow.hook.* / workflow.artifact.delta 必须能绑定到插件 manifest 声明的 workflowRunId + stepId,缺 context、缺 step 或引用未知 step 都 fail closed;内容工厂 worker 在段落级 artifact.snapshot 前输出 workflow.connector.requested,描述 research step 的 web-research / WebSearch 请求,事件只进 workflow-events.jsonl,不进普通 UI。Lime 内 package-root 与外部真实包 /Users/coso/Documents/dev/ai/limecloud/content-factory-app 已同步 worker/test/validate 和文档。验证:npm test -- "tests/content-factory-worker.test.mjs"npm run validate:app(Lime package-root)、npm test -- "tests/content-factory-worker.test.mjs"npm run validate:app(外部真实包)、cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server binds_worker_tool_progress_to_declared_workflow_step -- --nocapturecargo test --manifest-path "lime-rs/Cargo.toml" -p app-server rejects_worker_tool_progress_without_declared_step -- --nocapturecargo test --manifest-path "lime-rs/Cargo.toml" -p app-server workflow_worker_progress_without_context_fails_closed -- --nocapturecargo test --manifest-path "lime-rs/Cargo.toml" -p app-server article_generation_worker_emits_initial_streaming_workspace_snapshot -- --nocapture
  • 2026-07-03:同步内容工厂插件标准与真实包口径。internal/tech/plugin/lime-plugin-package-v1.md 明确 Agent Skills 目录严格匹配、渐进式 references/ scripts/ assets/ 组织和 audit-only workflow UI 边界;App Server plugin_manifest.rs 不再兼容 skills/article_writing 这类下划线 legacy 目录,最小包脚手架同步改为 skills/article-writing;外部真实包 content-factory-appplugin.jsonREADME.mddocs/development.mdworkflows/content-article.workflow.md 同步改口为“正文段落流式 + workflow JSONL 审计”,不再暗示右侧展示流程轨。验证:cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server inspect_local_package_reads_plugin_component_contentcargo test --manifest-path "lime-rs/Cargo.toml" -p app-server resolve_plugin_package_manifest_rejects_legacy_skill_directory_namenpm testnpm run validate:app
  • 2026-07-03:继续收掉 seeded 假包主链。src/features/plugin/testing/fixtures/seeded-agent-apps.jsonpackageRoot 改为 package-root/,该目录同步自真实 content-factory-app 包并带上 app.workbench.yamlskills/subagents/clis/connectors/resources/ 等完整包结构;本地 saving_seeded_content_factory_materializes_runtime_package_cache 断言升级为检查 app.workbench.yamlskills/article-writing/SKILL.md 一并落入 cache。与此同时,Lime 内仍被前端/安装测试直接读取的 plugin.jsoncontent-factory-app.json 文案同步改成“正文段落流式 + workflow JSONL 审计”。验证:cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server saving_seeded_content_factory_materializes_runtime_package_cachenpm run validate:appnpm testsrc/features/plugin/testing/fixtures/package-root)。
  • 2026-07-03:收口前端 / read-model 对旧内容工厂 skill id 的残留依赖。src/features/plugin/testing/fixtures/content-factory-app.json 的 workflow steps、workbench task、subagent skill 绑定和顶层 skillRefs 全部切换到 article-research / article-strategy / article-writing / article-editing / article-image-plan;依赖旧 gongzonghao-article-writer / article-image-cheatsheet 的前端单测、Rust worker/read-model 测试和内联 runtime fixture 一并更新。新增 src/features/plugin/testing/contentFactoryFixtureSync.unit.test.ts 作为守卫,直接校验 content-factory-app.jsonpackage-root/app.runtime.yamlapp.workbench.yamlskills/*/SKILL.md 的关键 skill/runtime/workbench 字段一致,防止 test-only snapshot 再漂移。验证:npm test -- src/features/plugin/projection/projectApp.test.ts src/features/plugin/manifest/pluginContract.unit.test.ts src/components/agent/chat/workspace/workspacePluginActivation.unit.test.ts src/components/agent/chat/workspace/WorkspaceArticleEditorRightSurface.test.tsx src/components/agent/chat/workspace/workspaceArticleWorkspaceWorkflowFacts.unit.test.ts src/features/plugin/marketplace/marketplaceRegistryLoader.unit.test.ts src/features/plugin/marketplace/pluginMarketplaceViewModel.unit.test.ts src/components/skills/SkillsWorkspacePage.localActions.test.tsx src/features/plugin/testing/contentFactoryFixtureSync.unit.test.tscargo test --manifest-path "lime-rs/Cargo.toml" -p app-server agent_app_worker_turncargo test --manifest-path "lime-rs/Cargo.toml" -p app-server worker_adapter_streams_ndjson_progress_before_final_responsecargo test --manifest-path "lime-rs/Cargo.toml" -p app-server read_session_projects_runtime_events_into_thread_read_artifactscargo test --manifest-path "lime-rs/Cargo.toml" -p app-server read_session_hides_workflow_facts_from_runtime_events
  • 2026-07-03:继续收口根 fixture runtime 双轨。src/features/plugin/testing/fixtures/src/runtime/content-factory-worker.mjs 改为薄代理,只负责稳定 CLI 入口,真正的 runContentFactoryTask / buildContentFactoryWorkerProgressEvents / handleContentFactoryWorkerRequest 直接复用 package-root 当前 worker 实现;根 app.runtime.yamlexamples/runtime-request.sample.json 同步到 package-root current 合同;ContentFactoryWorkerRuntimeContract 额外投影 workflow context,buildContentFactoryWorkerRequest(...) 生成的请求骨架现带 workflowKey / subagents / skillRefs / cliRefs / connectorRefs / hookPolicy / orchestration;package-root worker progress patch 缩成 article-only partial,避免段落流式重复整份 workspace patch 导致 App Server MAX_WORKER_STDOUT_BYTES 超限。contentFactoryFixtureSync.unit.test.ts 新增根 runtime 入口委托守卫。验证:npm test -- src/features/plugin-content-factory/contentFactoryDeliveryPlan.unit.test.ts src/features/plugin-content-factory/contentFactoryPlugin.unit.test.ts src/features/plugin-content-factory/contentFactoryWorkerContract.unit.test.ts src/features/plugin/testing/contentFactoryFixtureSync.unit.test.tsnpm test / npm run validate:appsrc/features/plugin/testing/fixtures/package-root)、cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server worker_adapter_streams_ndjson_progress_before_final_responsecargo test --manifest-path "lime-rs/Cargo.toml" -p app-server article_generation_worker_emits_initial_streaming_workspace_snapshot
  • 2026-07-03:历史 note:曾临时让 content article worker 在 non-runtime backend 下把 hostManagedGeneration.status 收敛为 unavailable 后继续 deterministic fallback。该口径已被 2026-07-03 后续 fail-closed 收口取代,不再作为 current 完成依据;当前要求是缺宿主正文直接 HOST_MANAGED_GENERATION_REQUIRED,不输出文章 artifact。
  • 2026-07-02:完成 P0 可见性与插件声明边界。聚合 smoke:agent-runtime-current-fixture 通过。完成审计确认整体 v2 仍缺 P1 durable workflow read model 与 P2 step scheduler,目标不能标记完成。
  • 2026-07-02:补 P1 第一刀:App Server agentSession/read.detail.thread_read 从持久化 workflow.* runtime events 派生 workflow_runs / workflow_steps,新增 Rust read model 单测 read_session_projects_workflow_facts_from_runtime_events
  • 2026-07-02:补 P1 第二刀:新增前端 workflow facts parser,Article Editor 流程轨优先使用宿主 workflow_runs / workflow_steps,内容工厂 GUI fixture 增加 contentFactoryArticleWorkspaceWorkflowFactsProjected 断言并通过。
  • 2026-07-02:按最新产品决策反向收口:workflow 不是右侧展示模型,改为只写 JSONL audit log。App Server 将 workflow.* 分流到 sessions/session_<id>/workflow-events.jsonlagentSession/read 和 renderer event stream 不再暴露 workflow facts;Article Editor 与 GUI fixture 改为断言 workflow rail 缺席。
  • 2026-07-02:纠正实现口径:src/features/agent-app/fixtures 不再作为 production current,fixture 移入 src/features/plugin/testing/fixtures;真实内容工厂 Plugin worker 仍未实现,当前 smoke 只能作为 test-only evidence。
  • 2026-07-02:纠正宿主 / 插件边界:撤回 host-side 内容工厂正文生成模块方向;App Server 只保留 worker artifact partial 通用透传和 JSONL 审计,不再通过最终 documentText 回切伪流式。真实正文生成必须进入内容工厂 Plugin worker / 插件包。

2026-07-22 Plugin worker scoped model cache Gate B

  • Verification Contract:budget:normal / P1;current 主链为 Electron Desktop Host -> App Server JSON-RPC -> RuntimeCore -> Provider metadata -> Plugin worker -> Thread/Turn/Item -> Article Editor。本轮只跑 services/App Server 定向测试与单场景 Electron Gate B;不进入 internal/refactor/v1/**,不接管并行 provider route、canonical store、protocol 或 renderer 热区。
  • Happy Path:modelProvider/fetchModels 写入 credential fingerprint scoped cache;单 enabled key 的 runtime 读取同一 scoped metadata,调用 /v1/chat/completions,worker turn 完成并把正文投影到 Article Editor。失败边界:需要 key 但 credential 缺失或多 key 歧义时不读取 unscoped/其它 credential cache;明确 keyless Provider 才允许读取 unscoped cache。
  • 实现:ModelRegistryService::resolve_provider_model_metadata 按 API key fingerprint 读取 scoped cache;App Server 仅在 Provider 恰好有一个 enabled key 时通过 select_runtime_credential_by_ref 取得 cache credential;Ollama/LM Studio 等 keyless Provider 保留 unscoped cache。多 key 当前保持 cache fail-closed,不回退跨 credential 搜索。
  • 验证:services metadata 4/4、App Server metadata 3/3、sidecar rebuild、局部 rustfmt 与 diff check 通过。Gate B root-plugin-worker-generation-v5 通过:fixture 收到 2 次 /v1/chat/completions,worker read model 为 completed,EventLog 落 turn.completed,Article Editor 正文、编辑、刷新和重开恢复均通过。summary:.lime/qc/gui-evidence/claw-chat-current-fixture/root-plugin-worker-generation-v5-summary.json
  • 分类:credential-scoped cache、keyless cache、RuntimeCore Plugin worker 与 Article Editor 投影均为 current;本刀未新增 compat / deprecated / dead surface。
  • 下一刀:正式支持多 enabled key 时,把 route resolution 拆成 routing/assembly 两阶段;最终 provider/model 确定后只选择一次 credential,并让 metadata、route evidence 与 execution 复用同一 durable ref。

2026-07-22 Plugin worker multi-key route binding

  • 写集:lime-services model registry cache access、App Server route prepare/assembly、runtime credential binding、Knowledge Builder 和定向回归;继续避让 internal/refactor/v1/**、protocol、renderer 与并行 objective 删除热区。
  • 实现:chat route 已拆为 prepare/assembly 两阶段。prepare 只确定 fallback 后的最终 provider/model;assembly 优先精确复用 generation 匹配的 durable credentialRef,否则 round-robin 选择一次,并把同一 runtime credential 同时交给 scoped metadata、ResolvedModelRoute、route evidence 和 execution provider configuration。RuntimeBackend 原有 metadata 后二次选 key/补写 evidence 的逻辑已删除。
  • cache 边界:ProviderModelCacheAccess::{Credential, Keyless, Unavailable} 取代 Option<&str>;API key 解包与 fingerprint 保持在 model_registry owner 内,route、evidence、error 与 payload 只携带 credential ref。key-required Provider 不读 unscoped/其它 key cache,明确 keyless Provider 才读 unscoped cache。
  • 调用链:Plugin worker 与 image presentation 继续复用统一 chat resolver;Knowledge Builder 已接入同一 credential binding。已迁移路径使用显式 credential-ref assembly,不再从 Provider keys 中自行挑第一个 enabled key;尚未迁移的 media task 入口保留原行为,本刀不扩写集。
  • 回归:新增两个 enabled keys、仅 key B 有 scoped cache 的 route/evidence 测试;key B 必须命中 cache 且 auth/evidence 同 ref,key A 必须 fail-closed 且不能读取 B cache。现有 prepared-route pin 测试第二个 key 的 replace_existing 已改为 false,测试现在真实覆盖两个 enabled keys,而不是误删第一个 key。
  • 验证:lime-services runtime metadata 4/4、App Server resolver 10/10、metadata 2/2、route contract 6/6、Knowledge Builder 3/3、prepared durable pin 1/1 均通过;sidecar rebuild 通过。代际变化回归确认 retry 会精确复用首次绑定 ref,不再次推进 round-robin。Gate B root-plugin-worker-multikey-v1 通过:fixture /v1/chat/completions 命中 2 次,worker read model 为 completed,Article Editor 正文、编辑、刷新和重开恢复均通过。summary:.lime/qc/gui-evidence/claw-chat-current-fixture/root-plugin-worker-multikey-v1-summary.json
  • 分类:上述能力均为 current;未新增 compat / deprecated / dead surface。完成度:本刀 100%。后续若迁移 media task route,应直接切到显式 credential-ref assembly,不新增另一套选择逻辑。

2026-07-22 Media task multi-key route binding

  • 写集:App Server media route assessment、共享 route credential helper、resolved-route image worker、route assembly 与定向回归;继续避让 internal/refactor/v1/**、protocol、renderer 与并行 objective 删除热区。
  • 实现:media assessment 不再读取启动后会被清空的全局 models_cache,也不再从 Provider 中取第一个 enabled key。当前链路先 round-robin 选择一次 runtime credential,再用同一 credential 读取 fingerprint-scoped model metadata,并把同一 durable credentialRef 写入 ResolvedModelRoute
  • 执行绑定:image worker 的 resolved-route 分支不再二次 round-robin;它通过 select_runtime_credential_by_ref 精确解密 route 指定的 key,并只记录该 key 的 usage。缺失、跨 Provider、禁用或不可解密的 ref 均 fail closed。
  • route-less 收口:图片与视频创建必须先得到完整 MediaRouteAssessment,缺 model ref、Provider、credential、scoped model metadata 或 capability snapshot 时直接返回稳定 reason code,不写 route-less artifact。image worker 已删除从 task payload 回读 Provider store、重新推断 endpoint/protocol 并再次 round-robin 的生产 fallback;历史 route-less artifact 只会写入 image_worker_start_failed,不会读取或消耗 Provider key。
  • 事实源清理:删除会隐式选择第一个 enabled key 的默认 route assembly;所有调用改为显式 credential-ref assembly。key-required Provider 只读所选 credential 的 scoped cache,明确 keyless Provider 才读 unscoped cache。
  • 回归:media 两 key 测试先推进一次 RR,只给下一 key 写 scoped cache,断言另一 key 无法读取该 cache,最终 route auth 绑定所选 ref 且 evidence 不含明文 key;worker 测试指定 key B 的 ref 并证明真实解密结果为 B。模型列表 fixture 使用随机 localhost /v1/models 服务,不依赖外部域名或厂商特判。
  • 验证:media assessment 10/10、image worker 9/9、image worker route 3/3、model route assembly 3/3、media task payload 5/5 通过;局部 rustfmt、禁止域名扫描与 diff check 通过。首次定向测试因共享 Cargo target 被并行进程清理而重建依赖,最终无代码失败。
  • 分类:media credential-scoped metadata、显式 route credential 与 image worker exact-ref execution 均为 current;默认 first-enabled-key assembly 和 route-less task-provider worker fallback 均为 dead / deleted;未新增 compat / deprecated surface。完成度:本刀 100%

2026-07-22 Keyless Provider cache and image execution

  • 写集:App Server modelProvider/fetchModels、resolved-route image auth、media-runtime OpenAI Images / Responses 请求头与定向回归;继续避让 internal/refactor/v1/**、protocol、renderer 和并行热区。
  • cache 收口:fetchModels 对明确 keyless Provider 不再读取数据库中偶然存在的 key,始终用空 credential 访问模型 API并写入 unscoped cache;runtime 的 ProviderModelCacheAccess::Keyless 因此能读取同一事实源。
  • 执行收口:image worker 接受 resolved route 的 auth.kind=no_auth,不查 Provider store、不生成 credentialRef、不记录 key usage;media-runtime 仅在 API key 非空时为 OpenAI Images / Responses 请求附加 Bearer header,避免把空 Authorization 伪装成 no-auth。
  • 回归:随机 localhost Ollama fixture 证明有已配置 key 时 fetchModels 仍写 unscoped cache且请求不携带该 key;route helper 证明 no-auth 不选择 credential;请求构造证明 keyless 不写 Authorization、authenticated route 仍写 Bearer。
  • 测试配置:Responses 图片模型测试不再引用真实部署域名,统一使用保留 /codex 协议形状的 images.example 测试地址;继续验证 host-based Responses 识别但不绑定外部环境。
  • 验证:App Server model provider tests 3/3、image route tests 4/4、media-runtime image request tests 10/10、services Responses-compatible fetch tests 2/2 通过;npm run verify:gui-smoke 通过,evidence 为 .lime/qc/project-gates/standalone-shell-01-20260722122807-71374/shell-01-electron-smoke/summary.json;局部 rustfmt、禁止域名扫描与 diff check 通过。
  • 分类:keyless fetch cache、no-auth resolved route 和 optional Bearer request 均为 current;未新增 compat / deprecated / dead surface。完成度:本刀 100%
  • credential telemetry 命令收口:modelProviderKey/nextmodelProviderKey/usage/recordmodelProviderKey/error/record 无生产调用,其中 next 会向 Renderer 返回明文 key,三者已按 protocol DTO/catalog、App Server handler/runtime/data source、typed client、Renderer gateway、command policy 与治理 catalog 整链删除,分类为 dead / deleted / forbidden-to-restore;内部 credential 选择与 usage/error 记录 service 继续由 backend current 执行链使用。schema 与 TypeScript client 已统一重生,三份专用 DTO schema 已物理删除,并新增 Rust 方法拒绝测试、frontend/Rust text 回流守卫。验证:App Server/protocol cargo check 通过,schema fixture 1/1、退役方法拒绝 1/1、typed client 75/75、Renderer/治理定向测试 236/236、npm run test:contracts(App Server client contract 296 checks)与 npm run governance:legacy-report(边界违规 0)通过;禁止部署域名全仓扫描零命中。

2026-07-22 Retired video Product DB path deletion

  • 写集:删除 lime-services::video_generation_servicelime-core::database::dao::video_generation_task_dao 及模块导出,精确移除 Product DB schema 的 video_generation_tasks 表与三个索引创建块;同步 DB inventory、legacy catalog/test 和本执行计划。继续避让 internal/refactor/v1/**、App Server protocol/schema 生成物与 managed-objective 并行删除热区。
  • 事实源:Renderer videoGenerationApi 已只投影 App Server mediaTaskArtifact/video/create|get|list|cancel;持久化归 workspace .lime/tasks/video_generate/*.json task artifact,执行归 lime-media-runtime::execute_video_generation_task。旧 VideoGenerationService 无生产消费者,旧 DAO 只有该 service 使用。
  • credential 收口:旧 service 在 create、refresh/query、cancel 各自调用 get_next_api_key_entry,同一 provider task 可能在不同操作中切换 credential。整条旧 service/DAO/table 路径已判定为 dead / deleted / forbidden-to-restore,不保留 wrapper、双写或 Product DB 兼容 owner。
  • 回流守卫:新增 rust-retired-video-generation-database-surface,阻止旧 service/DAO 模块导出、类型和 video_generation_tasks 表名回流;DB inventory 将旧表与 DAO 更新为已删除,并指向唯一 current owner。
  • 部署地址:禁止部署域名全仓扫描零命中;Responses 兼容识别只按通用 /responses/codex 终止路径,测试使用 example 保留域,不绑定具体部署域名。
  • 验证:legacy catalog 定向测试 217/217lime-core 693/693lime-services 201/201,另有 4 个既有 ignored 网络/本地监听测试;npm run governance:legacy-report 边界违规 0npm run test:rust:related 已完成全部相关 crate 编译,agent-runtime 163/163,但 App Server 在并行 canonical item/mailbox/projection/WebSocket fixture 热区有 1458/1466 通过、8 项失败;失败文件均不在本轮写集,不据此扩写或覆盖隔壁改动。
  • 完成度:本刀 100%。下一刀继续审计 lime-rs/crates/server/src/handlers/image_api_provider.rs 及其子模块是否仍存在 production 自行轮转 credential;只在确认 current owner 与消费者后收口。

2026-07-22 Media route execution evidence convergence

  • 写集:App Server media route execution payload、media-runtime route preflight / diagnostics 及定向测试;继续避让 internal/refactor/v1/**、App Server credential route 热区、protocol/schema 与 Renderer。
  • 部署地址:三份本机 ignored network-invoke.json 中残留的真实 Provider host 已替换为 example.com 脱敏地址;全仓含 ignored 文件扫描对该部署域名零命中。生产代码从未包含该 host,Provider endpoint 始终来自 resolved route 的配置事实源。
  • 执行合同:删除固定本机图片/视频 path 和 X-Provider-Id route hint。图片 evidence 声明 media_task_worker,binding key 复用 mediaTaskArtifact/image/create,endpoint source 为 resolved_route,credential source 为 resolved_route_credential_ref。App Server 当前没有视频产品 worker,因此不再为视频 task 伪造 ready execution binding;media-runtime 视频 preflight 只保留为未接入产品入口的库级能力。
  • telemetry:media-runtime provider diagnostics 的 transport 从错误的本机服务标记改为 provider_http;route/evidence 仍只携带 durable credentialRef 与 auth header metadata,不嵌入明文 secret 或 Provider base URL。
  • 回流守卫:新增 rust-retired-local-media-service-execution-contract,在 App Server 与 media-runtime current 代码/集成测试中禁止恢复固定本机 HTTP broker execution owner。
  • 验证:App Server route binding 1/1、image payload 1/1、media-runtime route unit 8/8、route integration 9/9、media-runtime lib 52/52 通过;局部 rustfmt、JSON 语法、禁止部署域名扫描与 diff check 通过。
  • 分类:App Server 图片 direct-provider worker 合同为 current;media-runtime 视频 worker 为无产品消费者的库级能力;旧 local service execution evidence 为 dead / deleted;未新增 compat / deprecated surface。完成度:本刀 100%