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 snapshot | App Server plugin_catalog、runtime/plugins、runtime/app_data/plugins | internal/roadmap/plugin/v3/README.md、lime-rs/crates/app-server/src/local_data_source/plugin_catalog.rs |
| Workflow 定义、读、取消、重试、响应与 JSONL 事件语义 | App Server runtime/workflow、processor/workflow.rs、runtime/event_log.rs | lime-rs/crates/app-server/src/runtime/workflow/definition.rs、events.rs、cancel.rs、tests.rs |
| Article artifact / Article Workspace 投影 | App Server article workspace projection + Renderer Article artifact / workspace components | lime-rs/crates/app-server/src/runtime/article_workspace_projection.rs、src/components/agent/chat/components/ArticleArtifactFrame.tsx、src/components/agent/chat/workspace/WorkspaceArticleEditorRightSurface.tsx |
| 内容工厂场景 GUI 回归 | scripts/agent-runtime 下的 test-only fixture | scripts/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 前 materializecontent_factory.workspace_patchartifact、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=7,streamingDocumentLengths=5,hostToolEventCount=9,read model host tool call3个,workflow-events.jsonl写入16条 metadata-only audit 事件,最终turn.completed位于 artifact / tool 事件之后。 - 当前实现进展:RuntimeCore 已新增 terminal deferring sink,
content-factory-app的plugin_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_lines、agentSession/turn/start、content_article_workflowactivation 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.artifacts与thread_read.artifacts已改为用户可见 artifact 集合,过滤 rawcontent_factory.workspace_patch/workspace_patch;artifact/read和evidence/export保留完整内部 artifact。前端历史恢复允许artifact_document + articleWorkspace文章产物恢复为documentartifact,只隐藏 workspace patch;App Serveritem.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中目标 sessionsess_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=runtime、sourceKind=local_folder、provider=agnes、model=agnes-2.0-flash、liveProviderUsed=true、hostManagedGenerationStatus=completed、普通事件1499条、段落级 partial68个、最终正文长度3153、host tool request/result 各3个、workflow audit16条。API key 仅从环境变量读取,evidence 只记录apiKeyEnv=AGNES_API_KEY和apiKeyConfigured=true。 - Production GUI evidence 采集器:
scripts/plugin/content-factory-production-gui-evidence.mjs只连接真实 Electron CDP,断言window.__LIME_ELECTRON__、electronAPI.invoke和 currentapp_server_handle_json_lines,通过pluginInstalled/list、agentSession/read、evidence/export读取当前桌面事实,并从 trace /workflow-events.jsonl匹配workflowResumelifecycle。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 或 rawsourceUri;缺cloud_release、signature verified、live read model、Electron IPC turn/start 或 resume lifecycle 时写出status=failed与missingAssertions。 - 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,sessionsess_c791014cba9e42caabe337db7b81467c,turna3514955-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 审计”的疑问,但不关闭 signedcloud_releaseproduction 门槛。 - Production preflight:新增
scripts/plugin/content-factory-production-preflight.mjs与plugin:content-factory-production-preflight,读取真实外部.lapp,解包后通过 current App ServerpluginLocalPackage/inspect计算 production manifestHash,避免用脚本猜 hash。该入口现在也支持--fetch-cloud-from-catalog,从 production catalog 派生 descriptor 并调用 current App ServerpluginPackage/fetchCloud生成 fetchCloud evidence 摘要,再用 catalogsignatureProof与 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:89aec20e637713c668f8bc34c303256ac83806c5d2e75486e6453bd638ac3f8c、manifestHash=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.yamlproof 字段完整性、schemaVersion、payload hash 格式、signedAt 时间戳、Host verifier 支持算法、trust rootpublicKeyId / algorithm / publicKey与 proof 是否匹配,并重建 canonicalplugin-cloud-release-signature-payload/v2后用 trust root public key 做真实密码学验签;production catalog 的identity.signatureRef与signatureProof.publicKeyId / algorithm / payloadHash / signedAt也必须和本地app.signature.yaml一致。signed release gate 读取 preflight 时也要求signatureCryptographicVerificationStatus=verified和signaturePayloadHashMatched=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。GUIinstalledState还必须携带合法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.mjs与plugin: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改为 currentpluginLocalPackage/inspect,并在publish --dry-run输出releaseReadiness;真实content-factory-appdry-run 证据.lime/qc/gui-evidence/agent-apps/content-factory-studio-publish-dry-run-live-continue-2026-07-05.json显示 Studio 与 Lime preflight 已对齐到packageHash=sha256:0c6f33d42918365b7f4256a78fc99b925133ea8fd956d50da25874998222b59c、manifestHash=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.json仍blocked,15 个 missing codes 覆盖缺 catalog/bootstrap/fetchCloud、GUI 仍是local_folder、signature 未 verified 和 workflow resume lifecycle 缺失。该复核确认当前问题不是 mock 测试误差,而是缺真实 signed remote release 输入和 GUIcloud_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=true、studioDryRun.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 和 GUIcloud_releaseevidence。 - 2026-07-05 22:37 env 别名收口:发现上一轮 preflight 与 Studio CLI 对 tenant/API base/env packageUrl 名称存在错位风险,已统一为
LIMECORE_TENANT_ID / LIME_CLOUD_TENANT_ID、LIME_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 和 GUIcloud_releaseevidence;没有签名、上传、安装、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.yaml带schemaVersion,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_missing。content-factory-signed-release-gate同步要求 preflightsignatureCryptographicVerificationStatus=verified、signaturePayloadHashMatched=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.json仍status=blocked、nextPhase=release_signing_and_trust,preflight 中signatureCryptographicVerificationStatus=not_attempted,原因是外部真实包当前仍缺app.signature.yaml和plugin-signature-trust-root.json;本轮没有签名、上传、安装、Provider 或 production API 调用。 - 2026-07-05 23:56 production catalog sourceKind 收紧复跑:
content-factory-signed-release-gate与 readiness pipeline 现在只接受 production catalogsourceKind=cloud_release,remote不再被视为 signed catalog ready;对应 missing code 为production_catalog_not_cloud_release。随后补齐 pipeline 默认签名输入传递:显式参数优先,否则使用content-factory-app/app.signature.yaml和plugin-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.json仍status=blocked,fetchCloudFromCatalog.skippedReason=catalog_missing,blockerPlan.nextPhase=release_signing_and_trust。当前下一刀仍是补真实app.signature.yaml、带publicKey的 production trust root、Studio 发布输入、production catalog/bootstrap、fetchCloud verified 和 GUIcloud_releaseevidence;本轮没有签名、上传、安装、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、GUIcloud_releasesignature 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.json仍status=blocked、blockerPlan.nextPhase=release_signing_and_trust。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs、node --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.json仍status=blocked,operatorReadiness.inputs.*.configured=false,blockerPlan.nextPhase=release_signing_and_trust。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs scripts/lib/content-factory-production-readiness-plan.test.mjs、npm run governance:scripts、真实只读 pipeline 复跑。 - 2026-07-06 operator missingKeys 收口:
operatorReadiness现在额外输出ready与missingKeys,把本轮继续缺的生产输入归并为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.json仍status=blocked、nextPhase=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.json仍status=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 读取当前真实packageHash与manifestHash,生成只含占位符packageUrl / releaseId / publicKeyId / private-key的签名命令,指向外部真实包content-factory-app/scripts/sign-release.mjs,并输出scriptPresent与hasCurrentHashes。最新只读复跑.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.json仍status=blocked、nextPhase=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.json仍status=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.mjs、npm 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.json仍status=blocked,operatorCommand与signingCommand只保留占位符;该能力只减少 operator 漏填签名上下文,不替代真实 signature proof、trust root、catalog/bootstrap、fetchCloud verified 或 GUIcloud_releaseevidence。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs、node --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 执行顺序改为 Studiopublish --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.json仍status=blocked,但 Studio/preflight packageHash 已对齐,signing hint 使用当前 packageHashsha256:57275a7075c192e93b5fd125ab7cb22f6c546a9d9cca855e8c7d8575f288b115。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs、npm 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 获取当前.lapppackageHash / manifestHash,再调用外部真实content-factory-app/scripts/sign-release.mjs生成app.signature.yaml和plugin-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.json仍status=blocked,steps.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.json仍status=blocked,missing codes 包含production_signature_generation_inputs_missing,且未调用签名脚本。验证:npm test -- scripts/lib/content-factory-production-readiness-pipeline-signing.test.mjs、npm test -- scripts/lib/content-factory-production-readiness-pipeline.test.mjs、npm 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.mjs与scripts/plugin/content-factory-production-release-evidence.mjs,readiness pipeline 只有显式--fetch-production-release-evidence才会读取 LimeCore currentclient/plugins/marketplace?query=content-factory-app和client/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.mjs、node --check对新增 helper / CLI / pipeline。 - LimeCore signed release contract:
limecore本地服务端已经支持 Plugin releasesignatureProof、bootstrappluginSignatureTrustRoots、plugin.signatureTrustRoots[]/PLUGIN_SIGNATURE_TRUST_ROOTS_JSON配置入口和 bulk publish fail-closed 签名校验,并同步 OpenAPI fragments / bundle 与packages/types。这只证明服务端契约可用,不等同于 production 部署或真实桌面安装完成。 - Studio publish chain:
lime-agent-app-studio正式--publish已从旧 developerpackage-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-only | src/features/plugin/testing/fixtures/content-factory-app.json、src/features/plugin/testing/fixtures/package-root/、src/features/plugin/testing/contentFactoryFixtureSync.unit.test.ts |
| 宿主 workflow audit event | App Server 在 activation producer 前生成 workflow.run.started / workflow.step.started,并把 producer progress 中的 workflow.* 分流写入 JSONL。 | current / P1 | lime-rs/crates/app-server/src/runtime/workflow/events.rs、lime-rs/crates/app-server/src/runtime/event_log.rs |
| 硬编码业务步骤 | Rust 宿主不持有 research / strategy / draft / review / image-plan fallback;缺 workflow key / steps 时不伪造。 | current guard | lime-rs/crates/app-server/src/runtime/workflow/definition.rs、lime-rs/crates/app-server/src/runtime/workflow/tests.rs |
| activation producer progress | Plugin 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 pending | lime-rs/crates/app-server/src/runtime/workflow/events.rs、scripts/plugin/content-factory-current-turn-smoke.mjs、scripts/plugin/content-factory-signed-release-gate.mjs |
| host-managed generation | 内容工厂 activation producer 不持有 provider key;App Server 在 current turn 内通过 direct provider config / Provider 池完成托管正文生成,并把结果注入 hostManagedGeneration 与 runtime.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 pending | lime-rs/crates/app-server/src/runtime/workflow/events.rs、scripts/lib/content-factory-host-generation-fixture.mjs、scripts/plugin/content-factory-current-turn-smoke.mjs |
| artifact partial pass-through | App Server 只透传 activation producer 生成期 artifact.snapshot partial,不再用最终 documentText 回切伪流式。 | current guard | lime-rs/crates/app-server/src/runtime/workflow/events.rs、相关 artifact snapshot 测试 |
| 前端过程显示 | 右侧 Article Editor 不渲染 workflow rail;renderer event stream 对 workflow.* 返回 null。 | current / P1 | WorkspaceArticleEditorSurface.tsx、appServerEventStream.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-blocked | scripts/agent-runtime/claw-chat-current-fixture-content-factory-*.mjs、scripts/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 / P1 | lime-rs/crates/app-server/src/runtime/event_log.rs、lime-rs/crates/app-server/src/runtime/exports.rs、lime-rs/crates/app-server/src/runtime/workflow/events.rs、lime-rs/crates/app-server/src/runtime/workflow/cancel.rs |
| read model workflow facts | agentSession/read.detail.thread_read 不再返回 workflow_runs / workflow_steps。 | current / P1 | lime-rs/crates/app-server/src/runtime/read_model.rs |
| step scheduler / retry / cancel / resume | activation 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 / P2 | lime-rs/crates/app-server/src/runtime/workflow.rs、lime-rs/crates/app-server/src/runtime/tests/queue_resume_audit.rs |
| production signed release chain | LimeCore 本地 contract 已能存储、投影和下发 Plugin release signatureProof 与 pluginSignatureTrustRoots,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-studio、scripts/plugin/content-factory-production-preflight.mjs、scripts/plugin/content-factory-signed-release-gate.mjs、scripts/plugin/content-factory-production-evidence-bundle.mjs、scripts/plugin/content-factory-production-readiness-report.mjs、scripts/plugin/content-factory-production-readiness-pipeline.mjs、scripts/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_releaseinstalled state 进入 Lime current App Server 非 local_folder runtime/cache 路径;该证据不等同于生产 LimeCore 签名下发。 - LimeCore 本地服务端契约支持 Plugin release
signatureProof、bootstrappluginSignatureTrustRoots、config trust roots 和 bulk publish fail-closed 签名校验;生产部署和真实 GUI 复测仍未完成。 -
lime-agent-app-studio发布链已改为 current Plugin bulk publish:正式发布必须传真实 HTTPSpackageUrl、本地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/respond的metadata.workflowResume,并匹配workflow.step.resuming/workflow.run.resumingJSONL 事件,缺 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 currentpluginLocalPackage/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 记录输入 JSONsha256、输入集合 digest、gate digest 和 gate resultsha256。 - 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_folderGUI product evidence,不替代 signedcloud_releaseproduction 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_folderApp 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.generatehost 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/export从workflow-events.jsonl读取同一 session / turn 的审计事件,并在 Evidence Pack 中导出 metadata-onlyworkflow_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。(已完成 workerworkflow.connector.requested与 RuntimeBackendhostSearchEvidence -> workflow.connector.completed审计;外部内容工厂包自带 connector executor 仍不在本阶段。) - Hook lifecycle 复制 / 转换为
workflow.hook.completedaudit-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/resumefail-closed 守卫:当前 queued turn resume 只恢复 App Server 会话队列,不会在缺真实 worker lifecycle 时伪造workflow.*resum*审计事件。 - resume / action response 绑定 workflow run / step 的 App Server metadata contract:只有 typed action response 或
workflow/respond的metadata.workflowResume显式带workflowRunId / workflowKey / stepId时,才写 metadata-onlyworkflow.step.resuming/workflow.run.resuming;thread/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来自非 fixtureworkflow-events.jsonl。
当前下一刀
- 以现有 Plugin v3 catalog、
runtime/workflow和 Article Workspace projection 为唯一事实源,补齐内容工厂 activation contract;在实现落地前,文档只能标记为planned/deferred,不能写成 production ready。 - 为新增的 activation contract 同步 App Server protocol、Renderer gateway、fixture 和 Gate B 证据;若没有真实消费者,保持 test-only fixture,不新增旧 package runtime。
- 完成文档收敛后,删除已被 v3 完整替换且无非守卫引用的旧路线图/执行计划;删除前必须取得用户对精确清单的明确确认。
历史下一刀(已被版本替换)
- 发布 / 部署 LimeCore 签名契约变更,配置 production Plugin signature trust roots,使用
plugin:content-factory-production-readiness-pipeline -- --generate-signature-proof结合真实packageUrl / releaseId / publicKeyId / packageHash / manifestHash生成真实 releasesignatureProof;signatureRef必须采用sigstore:content-factory-app@2.2.2:<releaseId>,通过 Studio current/v1/platform/plugins/bulk-publish写入真实 HTTPSpackageUrl、releaseId、packageHash、manifestHash和signatureProof,并复走 Lime 远程 / GUI production 安装运行闭环;不能在客户端绕过,也不能回退旧 developer package upload。 - 用
plugin:content-factory-production-readiness-pipeline -- --fetch-production-release-evidence --fetch-cloud-from-catalog作为发布后验收入口,把真实.lapp的packageHash / manifestHash、app.signature.yaml、plugin-signature-trust-root.json、production catalog、bootstrap 和 fetchCloud evidence 对齐后,再进入 signed release gate;preflight blocked 时不得手写 installed state 或 GUI evidence 绕过。 - 补 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。 - 补 signed remote release + live Provider 的真实 GUI production 证据:current-turn live Provider 已证明 App Server host-managed generation 可用,下一步必须让同一能力在
sourceKind=cloud_release、signature verified、trust roots ready 的真实桌面安装路径中通过。 src/features/agent-app/**与宿主内容工厂硬编码 demo 已退出 current 写集;后续拆分工作应回到 Plugin / App Center current 页面与 runtime surface,不再围绕旧AgentAppLabPage.tsx或旧 demo 文件续命。
当前验证门槛
当前文档与实现收敛只使用仓库现有入口:
npm run docs:boundarynpm run harness:doc-freshnessnpm run governance:legacy-reportnpm run test:contractsnpm run smoke:claw-chat-current-fixturecargo test --manifest-path "lime-rs/Cargo.toml" -p app-server workflow -- --nocapturegit diff --check
旧 package execution、production preflight、签名 gate 和外部 Studio 命令不在当前仓库构建图中;它们仅可作为历史 evidence,不能再作为本项目的验证门槛。
历史验证门槛(旧版本)
最低验证:
cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server agent_app_workercargo 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 export_evidence_summarizes_workflow_audit_jsonl_metadata_only -- --nocapturenpm run test:rust:unit -- -p app-server event_log -- --nocapturenpm run smoke:content-factory-package -- --timeout-ms 180000npm run smoke:content-factory-current-turn -- --timeout-ms 180000npm run smoke:content-factory-current-turn:host-generation -- --timeout-ms 180000npm 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.json和content-factory-production-preflight.json;当前必须保持 blocked,fetchCloudFromCatalog.skippedReason=catalog_missing,blockerPlan.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.json和content-factory-production-preflight.json;当前必须保持 blocked,production catalog 只能是cloud_release,无 catalog 时fetchCloudFromCatalog.skippedReason=catalog_missing,blockerPlan.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=1、npm run openapi:bundle:control-plane、make verify-contracts、make verify-client-contract-sync、make verify-go-fast、git diff --check。 - Studio publish chain:
npm test、git diff --check(/Users/coso/Documents/dev/ai/limecloud/lime-agent-app-studio)。 npm run smoke:content-factory-current-turn:cloud-release -- --timeout-ms 180000npm run smoke:content-factory-current-turn:cloud-release-host-generation -- --timeout-ms 180000npm test/npm run validate:app(src/features/plugin/testing/fixtures/package-root)npm test -- src/features/plugin/testing/contentFactoryFixtureSync.unit.test.tsnpm test -- src/features/plugin/install/cloudReleaseSignature.test.tsnpm test -- scripts/lib/content-factory-host-generation-fixture.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjsnpm test -- scripts/lib/content-factory-host-generation-fixture.test.mjs scripts/plugin/content-factory-current-turn-smoke.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 并写 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.mjsnpm run test:contractsnpm test -- src/lib/api/agentRuntime/threadClient.test.ts src/lib/api/agentRuntime/appServerReadModelProjection.test.tsnpm test -- src/components/agent/chat/workspace/WorkspaceArticleEditorRightSurface.test.tsxnpm run smoke:claw-chat-current-fixture -- --scenario content-factory-article-workspace --timeout-ms 180000npm 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.mjs、node --check scripts/lib/content-factory-production-readiness-pipeline-fetchcloud.test.mjs、TMPDIR="$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.mjs、npx 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=verified、cloudReleaseEvidence.status=ready、packageHashMatched=true和manifestHashMatched=true,也可能缺少可与 catalog/preflight/fetchCloud 对齐的 release identity 字段。本轮要求 GUIinstalledState必须包含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.mjs、TMPDIR="$PWD/.lime/tmp" npm test -- scripts/plugin/content-factory-production-gui-evidence.test.mjs scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs scripts/lib/content-factory-production-readiness-report.test.mjs、npx prettier --check scripts/plugin/content-factory-production-gui-evidence.mjs scripts/plugin/content-factory-production-gui-evidence.test.mjs。 - 2026-07-06:收紧 production GUI evidence provenance。此前 signed release gate 主要信任 GUI evidence 中的
status=passed、liveProviderUsed=true、workflow-events.jsonl路径和若干 assertions 布尔值,手写 JSON 有机会绕过真实 Electron/CDP collector 证据。本轮改为要求 GUI evidence 带schemaVersion=content-factory-production-gui-evidence.v1、真实 CDPattached / usedRealElectron、matchedelectron-ipc -> app_server_handle_json_lines -> agentSession/turn/starttrace、agentSession/read与evidence/exportcurrent 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.jsonl、status=exported、eventCount>0、metadataOnly=true、rawContentIncluded=false、redactionPolicy=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/CDPcloud_releaseGUI 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 必须包含packageHash、manifestHash、非 localhost HTTPSpackageUrl/sourceUri、signatureRef和signatureProof,缺字段或 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.mjs、TMPDIR="$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.json仍status=blocked、missing codes17个。该改动不签名、不上传、不安装、不调用 Provider 或 production API,只提高 production gate fail-closed 可信度。验证:TMPDIR="$PWD/.lime/tmp" npm test -- scripts/lib/content-factory-production-release-evidence.test.mjs、production readiness10文件集合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 明确只使用 currentpluginLocalPackage/inspect做本地预检,并写清 preflight 不签名、不上传、不安装、不调用 Provider、不写 passingcloud_releaseevidence,同时禁止重新出现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 codes17个;显式签名缺输入复跑.lime/qc/gui-evidence/agent-apps/content-factory-production-readiness-secret-hygiene-signing-missing-2026-07-06-2026-07-06T00-08-22-701Z/仍status=blocked,production_signature_generation_inputs_missing且missingKeys=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=blocked、steps.signingProof.status=skipped、blockers=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.mjs、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,当前 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=blocked、steps.signingProof.status=skipped、blockers=17,operator 缺口未变;本轮没有签名、上传、安装、Provider 或 production API 调用。验证:TMPDIR="$PWD/.lime/tmp" npm test -- scripts/lib/content-factory-production-readiness-pipeline-signing.test.mjs、production readiness10文件集合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=required、signatureVerificationStatus=verified、cloudReleaseEvidence.status=ready、packageVerificationStatus=verified、packageHashMatched=true、manifestHashMatched=true,optional / warning / hash 未 matched evidence 一律 blocked。模板也补releaseId、signaturePolicy和双 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.mjs、node --check对本轮脚本、npx prettier --check对本轮脚本和测试、npm run governance:scripts、node 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=false、status=skipped、step=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.mjs、node --check scripts/lib/content-factory-production-operator-readiness.mjs scripts/lib/content-factory-production-readiness-pipeline.mjs scripts/lib/content-factory-production-readiness-plan.mjs、npx prettier --check相关文件、只读 pipeline 复跑。 - 2026-07-06:收口 operator 签名 proof 入口。
release_signing_and_trust的blockerPlan.nextPhase.commandHint、operatorCommand与operatorReadiness.missingActions现在都推荐显式--generate-signature-proof --signing-private-key-env PLUGIN_SIGNING_PRIVATE_KEY_PEM,由 pipeline 用同轮 Studio dry-run 的 packageHash / manifestHash 调外部真实签名工具生成app.signature.yaml与plugin-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_missing,steps.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_releasePlugin worker launch gate。此前 seeded content-factory installed state 可带signaturePolicy=optional / signatureVerificationStatus=not_configured / status=warning的cloudReleaseEvidence,并被 worker 启动 gate 放行;这会让 seeded warning 被误当成 production 可运行证据。本轮改为对任何identity.sourceKind=cloud_release的 worker 启动统一要求signaturePolicy=required、signatureVerificationStatus=verified、cloudReleaseEvidence.status=ready、packageVerificationStatus=verified、packageHashMatched=true、manifestHashMatched=true,optional / not_configured / warning 一律 fail-closed。验证:npm run test:rust:unit -- -p app-server plugin_worker_turn -- --nocapture、cargo fmt --manifest-path "lime-rs/Cargo.toml" --all -- --check、npm 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-pipeline的blockerPlan改为基于 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.mjs、node --check对 release evidence / readiness pipeline / readiness plan / readiness report、npx prettier --check相关脚本、npm run governance:scripts、node 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.mjs、node --check scripts/lib/content-factory-production-release-evidence.mjs scripts/plugin/content-factory-production-release-evidence.mjs、npx prettier --check scripts/lib/content-factory-production-release-evidence.mjs scripts/lib/content-factory-production-release-evidence.test.mjs、npm run governance:scripts、node 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.json,status=blocked且steps.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.json,production_release_evidence_inputs_missing、skippedReason=missing_inputs、step=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.mjs、node --check对 production readiness pipeline/operator/release evidence CLI 与 lib、npx prettier --check对本轮脚本与 Writing v2 文档、npm run governance:scripts、node 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.mjs、npx 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.mjs、scripts/plugin/content-factory-production-readiness-pipeline.mjs、scripts/lib/content-factory-production-readiness-pipeline.test.mjs和plugin:content-factory-production-readiness-pipeline;pipeline 只调用 production preflight 与 Studiopublish --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 currentpluginPackage/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.json为status=blocked,preflight / Studio dry-run packageHashsha256:0c6f33d42918365b7f4256a78fc99b925133ea8fd956d50da25874998222b59c与 manifestHashsha256:5de25a9d61518f027810663cb50685bc6b25f1930f22e67f24ab9b757fd5f7a8对齐;由于当前没有 production catalog,fetchCloud evidence 文件按预期未生成。blocked codes 仍集中在真实 signed remote release 输入、production catalog/bootstrap/fetchCloud、GUIcloud_releasesignature 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.mjs、node --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 字段合并已迁到 currentsrc/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.mjs、node --check scripts/check-harness-contracts.mjs、npm test -- src/components/agent/chat/projection/sessionExecutionRuntimeProjection.test.ts src/components/agent/chat/utils/sessionExecutionRuntime.test.ts、node scripts/check-docs-boundary.mjs、npm run test:contracts。结论:contracts 已恢复绿色,但 productioncloud_release仍 blocked,不能把合同通过写成业务完成。 - 2026-07-05:补强 production preflight 签名 proof fail-closed 规则。
content-factory-production-preflight现在不再只检查app.signature.yaml和plugin-signature-trust-root.json是否存在,还会要求app.signature.yaml包含schemaVersion / signatureRef / publicKeyId / algorithm / signature / payloadHash / signedAt,payloadHash为sha256:<64 hex>,signedAt为有效时间戳,签名算法属于 Host verifier 支持集合;trust root 必须包含匹配的publicKeyId / algorithm / publicKey,算法同样必须受支持;production catalog 的identity.signatureRef与signatureProof.publicKeyId / algorithm / payloadHash / signedAt也必须和本地app.signature.yaml一致,避免手写或旧 catalog proof 通过 gate。随后新增 canonical payload v2 verifier,preflight 会重建签名 payload 并用 trust root publicKey 做真实密码学验签;content-factory-signed-release-gate进一步要求 preflightsignatureCryptographicVerificationStatus=verified、signaturePayloadHashMatched=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.mjs、node --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 resultsha256,方便审计判断 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=true、evidenceBundle.gate.matchesCurrentEvidence=true、signedGate.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.mjs、node --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.mjs、npx 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.rsimport,使用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-server、npm run check:protocol-types、cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server-protocol schema_fixtures_match_generated_output均通过;Electron dev 启动成功,bridge:health通过,CDP9223User-Agent 为Lime/1.91.0 ... Electron/42.3.3,真实页签为http://127.0.0.1:1420/?nativeStartup=1。Playwright CDP 断言window.__LIME_ELECTRON__ === true、electronAPI.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 signedcloud_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_*_mismatch或production_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.mjs、node --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.mjs、scripts/plugin/content-factory-production-readiness-report.mjs、scripts/lib/content-factory-production-readiness-report.test.mjs和plugin: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.mjs、node --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.mjs、scripts/plugin/content-factory-production-evidence-bundle.mjs、scripts/lib/content-factory-production-evidence-bundle.test.mjs和plugin:content-factory-production-evidence-bundle。该入口把 preflight / catalog / bootstrap / fetchCloud / GUI evidence 复制为 signed gate 标准五件套文件名,立即写入content-factory-signed-release-gate.result.json和content-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,gatestatus=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.mjs、node --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.mjs、node --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/respondmetadata、agentSession/thread/resumeselected-actions contract、workflow.step.resuming/workflow.run.resumingaudit 事件匹配、缺 JSONL 文件返回空事件的 fail-closed 行为,以及 App Server trace params 最小投影。collector 从880行降到676行,trace evidence 不再写 raw App Server params、用户 prompt、正文、Bearer 或 rawsourceUri。验证: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、node --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.status、publishReadinessConfigured、真实 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,且不再被 preflightsigningCommand里的说明性占位符误伤。验证:npm test -- scripts/lib/plugin-content-factory-signed-release-gate-core.test.mjs、node --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.mjs、npx 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 中贯通signatureProof,client/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已不再调用旧 developeragent-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.yaml、plugin-signature-payload.json、plugin-signature-trust-root.json,避免签名循环。验证:LimeCorego 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=1、npm run openapi:bundle:control-plane、make verify-contracts、make verify-client-contract-sync、make verify-go-fast、git diff --check;Studionpm test、git diff --check。该证据仍只是本地服务端 / CLI contract,不等同于 production 部署、可信根配置、真实 package upload、catalog 写入或 GUIcloud_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.mjs、node --check scripts/lib/content-factory-production-preflight-core.mjs、node --check scripts/plugin/content-factory-production-preflight.mjs、npx 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"、真实.lapppreflight--check(预期 exit 1)。 - 2026-07-05:补 production release preflight,避免把 local_folder 或手写 evidence 当成 signed
cloud_release。新增scripts/lib/content-factory-production-preflight-core.mjs、scripts/plugin/content-factory-production-preflight.mjs、scripts/lib/content-factory-production-preflight-core.test.mjs和plugin:content-factory-production-preflight。CLI 默认解包真实.lapp并通过 current App ServerpluginLocalPackage/inspect计算 manifestHash;没有 current inspect 时保持 blocked。随后补--fetch-cloud-from-catalog,可从 production catalog 派生 descriptor 并调用 current App ServerpluginPackage/fetchCloud生成 fetchCloud evidence 摘要,减少人工 JSON 误配;该摘要会用 catalogsignatureProof和 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.lapppreflight 已跑,输出.lime/qc/gui-evidence/agent-apps/content-factory-production-preflight-2026-07-05T09-42-06-150Z.json,packageHash=sha256:89aec20e637713c668f8bc34c303256ac83806c5d2e75486e6453bd638ac3f8c、manifestHash=sha256:c1d3aa37d4b2f6c3c4a006525a1bba4b4ee407f61fe9cff8192704b48a209248、包内条目齐全;结果按预期 blocked,缺app.signature.yaml、plugin-signature-trust-root.json、production catalog、bootstrap 和 fetchCloud evidence。验证:node --check scripts/lib/content-factory-production-preflight-core.mjs、node --check scripts/plugin/content-factory-production-preflight.mjs、npm test -- scripts/lib/content-factory-production-preflight-core.test.mjs、真实.lapppreflight--check(预期 exit 1)。 - 2026-07-05:补 production GUI evidence collector 和 signed release gate 的 Electron IPC 硬门槛。新增
scripts/plugin/content-factory-production-gui-evidence.mjs与plugin: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/start经electron-ipc和app_server_handle_json_lines进入 App Server,缺该链路返回production_gui_turn_start_not_electron_ipc/production_gui_app_server_json_rpc_missing。真实 Electron CDP 复跑当前目标 sessionsess_f781bf079f074b7aa2ec0941bade095d,输出.lime/qc/gui-evidence/agent-apps/content-factory-production-gui-evidence-cdp-local-folder-2026-07-05T08-49-00-187Z.json,按预期status=failed,missingAssertions=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.mjs、node --check scripts/lib/plugin-content-factory-signed-release-gate-core.mjs、npm 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=true、usedRealElectron=true、bridgeHealthChecked=true、turnStartViaElectronIpc=true、writingActivationMetadataPresent=true、articleArtifactFrameVisible=true、articleArtifactHasBody=true、processOrGuidanceCaptured=true、noInvokeErrors=true;同名turn-start-trace.json记录app_server_handle_json_lines、electron-ipc、content_article_workflow、sessionsess_986a1c6327914bd58233cebfa50a530e和 turna337d0fa-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-provider或LIME_ALLOW_LIVE_PROVIDER_SMOKE=1 / LIME_REAL_API_TEST=1才会读取--live-api-key-env指向的环境变量;默认 npm smoke 仍是--host-generation-fixture。本轮用 Agnes OpenAI-compatiblehttps://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=true、hostManagedGenerationStatus=completed、finalDocumentLength=3153、workflowEventCount=16。随后修复content-factory-signed-release-gate对hostGenerationFixture: 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.mjs、node --check scripts/lib/content-factory-host-generation-fixture.mjs、node --check scripts/lib/plugin-content-factory-signed-release-gate-core.mjs、npm test -- scripts/lib/content-factory-host-generation-fixture.test.mjs scripts/plugin/content-factory-current-turn-smoke.test.mjs、npm 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_folderlive 已通过,且 production gate 仍要求真正的 signed remote release / trust roots / fetchCloud / GUI cloud_release / resume lifecycle,本次失败记录为组合回归缺口,不把它作为主线完成或阻塞 production gate 的替代证据。 - 2026-07-05:补强
content-factory-current-turn-smoke.mjs的失败诊断,解决 livecloud_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-signedcloud_release当 production 证据,只为下一次真实复测定位 Provider 请求、安装态或 runtime/cache 阶段问题。验证:node --check scripts/plugin/content-factory-current-turn-smoke.mjs、npm 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/respond的metadata.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 可以记录apiKeyEnv或apiKeyConfigured=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(...)、RuntimeResumeContract、lime-runtime-resume-contract/v0.1与agentSession/thread/resumeworkflow metadata gateway 已物理删除,分类为dead / deleted / forbidden-to-restore,不保留 queue/session resume 兼容包装。workflow continuation 的 current evidence 只接受agentSession/action/respond、workflow/respond与metadata.workflowResume;canonicalthread/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显示目标 sessionsess_f781bf079f074b7aa2ec0941bade095d,runtime 为真实 Electronhttp://127.0.0.1:1420/?nativeStartup=1,gateB / 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 + articleWorkspace;thread_item_projection/agent_message.rs对item.updated累计文本做覆盖合并,保留message.delta增量追加。验证:cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server read_session_hides_workspace_patch_from_user_visible_artifacts -- --nocapture、cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server read_session_materializes_content_factory_workspace_patch_into_article_workspace -- --nocapture、cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server item_updated_agent_message_cumulative_text_replaces_delta_prefix -- --nocapture、npx vitest run "src/components/agent/chat/hooks/agentChatHistory.timeline.test.ts" -t "历史应恢复文章 artifact document 且隐藏 workspace patch"。npm run test:related -- ...因本机磁盘空间不足触发ENOSPC,未作为完成证据。 - 2026-07-05:修复普通
@写文章turn 的内容工厂 materialization 顺序。RuntimeCore 新增 terminal deferring sink,对内容工厂plugin_activation暂存普通 backend 发出的turn.completed,先派生后处理PaneActionWorkerTurn执行 article artifact materialization、host tool enrichment 与workflow-events.jsonlaudit 写入,再重新 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 --lib、cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server plugin_worker_turn --lib、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"。最新 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=7、streamingDocumentLengths=5、hostToolEventCount=9、read model host tool call3个,后台workflow-events.jsonl写入16条 metadata-only audit 事件;该证据仍使用本地 OpenAI-compatible fixture,不等同于真实 live Provider / Electron GUI production 完成。 - 2026-07-03:接入
workflow-events.jsonlcompaction 自动触发策略。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-server、npm run test:rust:unit -- -p app-server event_log -- --nocapture、npm run test:rust:unit -- -p app-server export_evidence_summarizes_workflow_audit_jsonl_metadata_only -- --nocapture。 - 2026-07-03:补
workflow-events.jsonlretention / archive compaction 本地 API。EventLogWriter::compact_session_workflow_audit_events(session_id, retain_recent)会把 activeworkflow-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=0fail closed,不允许误清空 audit;clear_session(...)同步删除 active 与 archive,避免压缩后会话清理仍能读到历史 audit。当前剩余缺口只剩自动触发阈值 / 运维策略接入,不再是存储格式或导出能力缺口。验证:cargo fmt --manifest-path "lime-rs/Cargo.toml" --package app-server、npm run test:rust:unit -- -p app-server compact_workflow_audit -- --nocapture、npm run test:rust:unit -- -p app-server clear_session_removes_session_event_log -- --nocapture、npm 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_auditRust 守卫,先写入既有workflow.run.started / workflow.run.completedaudit-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-server、npm 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 0、git diff --check、npx prettier --check(UI / Lab / index / plan 写集)。 - 2026-07-03:修正 Claw GUI 内容工厂 Article Workspace 的 smoke 证据口径。
contentFactoryArticleWorkspaceArticleWritingStructureVisible退出,改为contentFactoryArticleWorkspaceArticleCanvasSurfaceVisible;GUI smoke 现在只把 Article Editor 正文画布、metadataPanelsHidden=true、workflowUiRailHidden=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.mjs、node --check scripts/agent-runtime/claw-chat-current-fixture-content-factory-assertions.mjs、node --check scripts/agent-runtime/claw-chat-current-fixture-constants.mjs、node --check scripts/agent-runtime/claw-chat-current-fixture-smoke.test.mjs、npm test -- scripts/agent-runtime/claw-chat-current-fixture-smoke.test.mjs、npm test -- src/lib/api/oemCloudControlPlane.contract.test.ts src/features/plugin/marketplace/pluginMarketplaceActions.unit.test.ts、cargo build --manifest-path "lime-rs/Cargo.toml" -p app-server、npm run build:renderer:electron、rg -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-panels、npx 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.ts、npx 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.ts、git 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-root的content-factory-worker.mjs已将content.factory.generatehost 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=5、workflowEvents=16、hostGeneration=completed;最新 GUI evidence:.lime/qc/gui-evidence/claw-chat-current-fixture/claw-chat-current-fixture-content-factory-no-template-guard-summary.json。验证:外部包npm test、npm run validate:app;Lime package-rootnpm test、npm run validate:app;npm 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.ts;npm run smoke:content-factory-current-turn -- --timeout-ms 180000 --prefix content-factory-current-turn-smoke-no-template-guard;npm 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.mjs,content-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=13、streamingDocumentLengths共11个段落级 partial、finalDocumentLength=748、hostGenerationFixture.fixtureOnly=true;最新 GUI evidence:.lime/qc/gui-evidence/claw-chat-current-fixture/claw-chat-current-fixture-content-factory-request-derived-fixture-summary.json,显示backendMode=runtime、hostManagedGenerationStatus=completed、hostManagedGenerationOutputIds=["article-draft-document"]、contentFactoryArticleWorkspaceWorkflowFactsHidden=true。验证:node --check scripts/lib/content-factory-host-generation-fixture.mjs、node --check scripts/agent-runtime/claw-chat-current-fixture-content-factory-worker-dogfood.mjs、node --check scripts/plugin/content-factory-current-turn-smoke.mjs、npm 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.mjs、npm run smoke:content-factory-current-turn -- --timeout-ms 180000 --prefix content-factory-current-turn-smoke-request-derived-fixture、npm 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,要求 productioncloud_releasecatalog 版本匹配、非 fixture HTTPS packageUrl、sha256 package/manifest hash、signatureRef、完整signatureProof、bootstrappluginSignatureTrustRoots匹配、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_missing、production_trust_roots_missing、production_fetch_cloud_evidence_missing、production_gui_not_cloud_release、production_gui_signature_not_verified、production_host_generation_not_live、fixture_cloud_release_not_allowed。验证:node --check scripts/lib/plugin-content-factory-signed-release-gate-core.mjs、node --check scripts/plugin/content-factory-signed-release-gate.mjs、npm 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.mjs、node 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.json、content-factory-production-bootstrap.template.json、content-factory-fetch-cloud-evidence.template.json、content-factory-gui-evidence.template.json和content-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.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。 - 2026-07-03:补 production evidence 目录化 gate 入口。新增
scripts/lib/plugin-content-factory-signed-release-gate-evidence-dir.mjs,content-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.mjs、node --check scripts/lib/plugin-content-factory-signed-release-gate-core.mjs、node --check scripts/lib/plugin-content-factory-signed-release-gate-evidence-dir.mjs、npm test -- scripts/lib/plugin-content-factory-signed-release-gate-core.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,当前 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.mjs对content-factory-article-workspace场景切到APP_SERVER_BACKEND_MODE=runtime;claw-chat-current-fixture-content-factory-worker-dogfood.mjs在 worker dogfood turn 上注入本地 OpenAI-compatible SSE fixture 的runtimeOptions.hostOptions.agentChatRequest,触发 App Server currentprepare_agent_app_worker_request(...),并把 fixture provider 请求写入 summary 证据。claw-chat-current-fixture-content-factory-assertions.mjs现在要求hostManagedGenerationStatus=completed、hostManagedGenerationOutputIds包含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 modelhostManagedGenerationStatus=completed、hostManagedGenerationOutputIds=["article-draft-document"]、contentFactoryArticleWorkspaceWorkflowFactsHidden=true。验证:npm test -- scripts/agent-runtime/claw-chat-current-fixture-smoke.test.mjs、npm run smoke:claw-chat-current-fixture -- --scenario content-factory-article-workspace --timeout-ms 240000、npm run smoke:agent-runtime-current-fixture、npx 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-root的src/runtime/article-planning.mjs已从“Golang / 学习路线 / 基础语法到工程实战 / 第一阶段”模板改为主题中性的文章结构规划;articleDraft.documentText仍必须来自 host-managed generation,缺宿主正文继续HOST_MANAGED_GENERATION_REQUIREDfail closed。同步更新contentFactoryWorkerContract.unit.test.ts与 App Serveragent_app_worker_turn测试:正向断言改为宿主生成正文,负向守卫禁止旧学习路线模板作为成功结果;Rust worker turn 使用测试 backend 注入 host generation,避免单测继续证明无宿主 fallback。根testing/fixtures/src/runtime/article-planning.mjs也机械同步到 package-root,并由contentFactoryFixtureSync.unit.test.ts守住,防止再次出现第二套模板。验证:外部包npm test、npm run validate:app;Lime package-rootnpm test、npm run validate:app;npm test -- src/features/plugin-content-factory/contentFactoryWorkerContract.unit.test.ts;npm test -- src/features/plugin/testing/contentFactoryFixtureSync.unit.test.ts;npm run test:rust:unit -- -p app-server article_generation_worker_emits_initial_streaming_workspace_snapshot;npm run test:rust:unit -- -p app-server article_workspace_turn_runs_installed_worker_and_materializes_workspace_patch;npm run smoke:content-factory-current-turn -- --timeout-ms 180000;npm run smoke:content-factory-current-turn:cloud-release -- --timeout-ms 180000;node 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-root的content-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.json的smoke:content-factory-current-turn与smoke:content-factory-current-turn:cloud-release默认都改为--host-generation-fixture,避免继续用 no-host 成功口径。同步把 seeded descriptor / manifest snapshot 推进到2.2.2并补contentFactoryFixtureSync.unit.test.ts版本/hash 守卫。验证:外部包npm test、npm run validate:app、node --check src/runtime/content-factory-worker.mjs;Lime package-rootnpm test、npm run validate:app、node --check src/features/plugin/testing/fixtures/package-root/src/runtime/content-factory-worker.mjs;npm test -- src/features/plugin/testing/contentFactoryFixtureSync.unit.test.ts;npm run smoke:content-factory-current-turn -- --timeout-ms 180000;npm 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.mjs、tests/sign-release.test.mjs和npm run release:sign,按 Lime Host verifier canonical payload 生成signatureProof/app.signature.yaml,支持RSASSA-PKCS1-v1_5-SHA256、RSA-PSS-SHA256、ECDSA-P256-SHA256、Ed25519;私钥只从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-rootscripts/sign-release.mjs生成 proof,并用 HostverifyCloudReleaseSignature(...)验证通过。验证:外部包npm test、npm run validate:app;Lime package-rootnpm test、npm run validate:app;npm test -- src/features/plugin/testing/contentFactoryFixtureSync.unit.test.ts;npm test -- src/features/plugin/install/cloudReleaseSignature.test.ts;npx 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 releasesignatureProof、bootstrappluginSignatureTrustRoots、plugin.signatureTrustRoots/PLUGIN_SIGNATURE_TRUST_ROOTS_JSON配置入口,并同步 OpenAPI source fragments / bundle、packages/types与 API 文档;client/plugins与client/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.jsonlEvidence Pack 摘要导出。RuntimeCore::export_evidence(...)读取同一 session / turn 的 workflow audit JSONL,并把事件传给BasicEvidenceExportProvider;observabilitySummary.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.jsonlmetadata-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,占位同时注入顶层redactionpolicy;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 -- --nocapture、cargo 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=runtime和runtimeOptions.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.2package hash 为sha256:4be73a57bb5d29c5768b13a46c8ed8b07194fa7eda243d79feaf7d824941bdee、manifest hash 为sha256:6df5c193ac89ff4400006a45d8340029446529d9b5953c7c5d03d4349f9dbfc3,普通 event stream 产生19条事件、6个artifact.snapshot、4个段落级 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.mjs与npm 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 test、npm run validate:app,再直接运行src/runtime/content-factory-worker.mjs,断言workflow.connector.requested为 audit-only、段落级artifact.snapshotpartial 递增、最终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-onlyworkflow.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 -- --nocapture、cargo 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(...)、directhostOptions.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 -- --nocapture、npm 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-onlyworkflow.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.hookemit 到普通 runtime stream;hook lifecycle 会转换为 audit-onlyworkflow.hook.completed,按prompt -> first step、task -> 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 -- --nocapture、npm test -- src/lib/api/agentRuntime/appServerEventStream.test.ts、npm 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.retrying与workflow.run.retrying到workflow-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 -- --nocapture、npm 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当成独立 taskentry_source,而是对齐 current 发送边界归一后的at_image_command;scripts/agent-runtime/claw-chat-current-fixture-smoke.test.mjs同步补静态守卫,防止 smoke 再把场景名误当 payload truth;Rust 单测image_command_workflow_creates_task_from_current_intent_metadata也改为 currentat_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 180000、npm run smoke:agent-runtime-current-fixture、cargo 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,描述researchstep 的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 -- --nocapture、cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server rejects_worker_tool_progress_without_declared_step -- --nocapture、cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server workflow_worker_progress_without_context_fails_closed -- --nocapture、cargo 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 Serverplugin_manifest.rs不再兼容skills/article_writing这类下划线 legacy 目录,最小包脚手架同步改为skills/article-writing;外部真实包content-factory-app的plugin.json、README.md、docs/development.md与workflows/content-article.workflow.md同步改口为“正文段落流式 + workflow JSONL 审计”,不再暗示右侧展示流程轨。验证:cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server inspect_local_package_reads_plugin_component_content、cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server resolve_plugin_package_manifest_rejects_legacy_skill_directory_name、npm test、npm run validate:app。 - 2026-07-03:继续收掉 seeded 假包主链。
src/features/plugin/testing/fixtures/seeded-agent-apps.json的packageRoot改为package-root/,该目录同步自真实content-factory-app包并带上app.workbench.yaml、skills/、subagents/、clis/、connectors/、resources/等完整包结构;本地saving_seeded_content_factory_materializes_runtime_package_cache断言升级为检查app.workbench.yaml与skills/article-writing/SKILL.md一并落入 cache。与此同时,Lime 内仍被前端/安装测试直接读取的plugin.json与content-factory-app.json文案同步改成“正文段落流式 + workflow JSONL 审计”。验证:cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server saving_seeded_content_factory_materializes_runtime_package_cache、npm run validate:app、npm test(src/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.json与package-root/app.runtime.yaml、app.workbench.yaml、skills/*/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.ts、cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server agent_app_worker_turn、cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server worker_adapter_streams_ndjson_progress_before_final_response、cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server read_session_projects_runtime_events_into_thread_read_artifacts、cargo 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.yaml与examples/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 ServerMAX_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.ts、npm test/npm run validate:app(src/features/plugin/testing/fixtures/package-root)、cargo test --manifest-path "lime-rs/Cargo.toml" -p app-server worker_adapter_streams_ndjson_progress_before_final_response、cargo 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.jsonl;agentSession/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 / deadsurface。 - 下一刀:正式支持多 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-servicesmodel 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_registryowner 内,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-servicesruntime 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 Broot-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 / deadsurface。完成度:本刀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,并把同一 durablecredentialRef写入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 / deprecatedsurface。完成度:本刀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 / deadsurface。完成度:本刀100%。 - credential telemetry 命令收口:
modelProviderKey/next、modelProviderKey/usage/record、modelProviderKey/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/protocolcargo 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_service、lime-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 ServermediaTaskArtifact/video/create|get|list|cancel;持久化归 workspace.lime/tasks/video_generate/*.jsontask 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/217;lime-core693/693;lime-services201/201,另有 4 个既有 ignored 网络/本地监听测试;npm run governance:legacy-report边界违规0。npm run test:rust:related已完成全部相关 crate 编译,agent-runtime163/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-runtimeroute 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-Idroute 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 仍只携带 durablecredentialRef与 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 / deprecatedsurface。完成度:本刀100%。