Files
claw/docs/superpowers/specs/2026-04-17-generated-scene-rectification-design.md

11 KiB
Raw Permalink Blame History

Generated Scene Rectification Design

Status: Draft Date: 2026-04-17 Author: Codex

Problem Statement

当前自动场景转 skill 流程虽然已经引入了 Scene IRworkflowArchetype 和 readiness 分级,但对营销类复杂报表场景仍存在三类致命偏差:

  1. sceneId 会从中文场景名退化成低信息量标识,例如 营销2.0零度户报表数据生成 -> 2-0
  2. bootstrap 会被 localhost 导出或辅助服务污染,导致内网入口域名解析错误。
  3. workflow 会在证据不完整时提前归类,导致 paginated_enrichment 场景缺失 paginatesecondary_request 等关键步骤证据。

这三个问题叠加后,会出现“结构上看似已生成 skill实际上放到内网一定跑不通”的假阳性结果。现有生成器仍然偏向“模板填充”没有形成一条对内网场景足够保守、可审计、可拒绝错误输出的整改链路。

Rectification Goal

本次整改目标不是继续提升“生成成功率”,而是把生成器收敛成一个更稳的 scene skill rectifier,做到:

  1. 不再产出 2-0 这类无业务语义的 sceneId
  2. 不再让 localhost、静态资源地址、模板噪声参与 bootstrap 竞争。
  3. 不再在工作流证据缺失时冒然输出 paginated_enrichment 或其它高复杂 archetype。
  4. 不再把低可信生成结果伪装成“可直接内网试跑”的 skill。
  5. 为后续 mini 版 skill-creator 打下可复用的整改底座。

Non-Goals

  1. 不在本轮整改中解决全部历史场景兼容性。
  2. 不要求本轮整改覆盖登录态恢复、复杂鉴权、宿主浏览器差异。
  3. 不要求 LLM 单独完成中文场景语义恢复,整改仍以确定性证据优先。
  4. 不要求一步到位生成所有 browser workflow 细节;允许在 readiness 门禁前失败关闭。

Current Failure Reconstruction

营销2.0零度户报表数据生成 为例,当前错误链路大致如下:

  1. 目录名 fallback 经过仅保留 [a-z0-9] 的 slug 规则后,中文主体被剥离,只剩 2-0
  2. URL 候选集合没有分层,http://localhost:13313/...http://yx.gs.sgcc.com.cnhttp://yxgateway.gs.sgcc.com.cn/... 被放在同一个 bootstrap 竞争池。
  3. 工作流分类优先命中通用的“多模式字段”信号,导致 archetype 判定先偏向 multi_mode_request
  4. endpoint 集合又被 ${apiUrl}、静态模板串、localhost 导出地址等噪声稀释,最终 workflow step 构造无法稳定提取“分页主请求 -> 逐户补数 -> 过滤 -> 导出”的完整证据。
  5. 生成器仍然给出可输出 skill造成用户误以为该 skill 具备内网可运行性。

所以整改不能只修某一个 if 分支而是必须同时修正命名链、bootstrap 链、workflow 链和 readiness 链。

Rectification Principles

1. Fail Closed 优先于 Fail Open

sceneId、bootstrap、workflow 任一关键链路证据不足时,生成器必须降级、阻断或明确标红,而不是继续生成一个“看起来完整”的 skill。

2. 先判定证据类别,再消费证据

URL、函数名、分页变量、过滤条件、导出调用必须先完成“证据分层”与“噪声剔除”再参与 archetype 分类和模板编译。

3. Bootstrap 与 Export 必须解耦

内网业务入口域名与本地导出服务是两类完全不同的运行时概念。localhost 可以作为 export/downstream evidence但绝不能作为 bootstrap candidate。

4. 命名必须具备业务可读性

sceneId 不是目录技术标识,而是 skill 的业务身份。任何低熵、数字化、占位式 id 都必须被视为无效结果。

5. Archetype 输出必须受完整工作流约束

paginated_enrichment 不是“有分页字段”就能输出,而必须同时满足主列表请求、分页证据、二次请求证据和聚合/过滤/导出链路中的最低组合。

Target Architecture

source scene
  -> source scan
  -> evidence stratification
  -> naming chain
  -> bootstrap chain
  -> workflow chain
  -> archetype gating
  -> readiness grading
  -> skill generation or fail-closed report

整改后的核心不是新增一个大模型步骤,而是在现有 Scene IR 前后补齐四道约束:

  1. 命名约束
  2. bootstrap 约束
  3. workflow 约束
  4. readiness 约束

Rectification Design

Naming Chain Rectification

sceneId 整改的目标是让“中文目录名 -> 业务可读 sceneId”成为一条受控链路而不是任由 fallback 退化。

整改方案如下:

  1. sceneId 候选来源按优先级分层:
    • LLM 明确返回的业务语义 id
    • 确定性抽取出的英文业务关键词组合
    • 基于中文场景名的受控 transliteration / alias 规则
    • 最终 fallback 仅可作为 invalid_candidate,不可直接落盘
  2. 新增 sceneId 有效性校验:
    • 不能是纯数字或数字主导
    • 不能短于业务最小可读长度
    • 不能只由版本号或通用词组成
    • 不能与 sceneName 语义完全脱钩
  3. 2-01-0reportscene 这类低熵 id 统一判为 invalid_scene_id
  4. 一旦命中无效 id生成器只能输出整改报告或要求人工确认不允许直接生成正式 skill 目录。

这条链路的结果是:sceneId 从“字符串清洗结果”升级为“业务标识产物”。

Bootstrap Chain Rectification

bootstrap 整改的目标是把 URL 候选集拆成不同证据层,彻底消除 localhost 污染。

整改方案如下:

  1. 对 URL 候选先做角色分层:
    • business_entry
    • business_api
    • gateway_api
    • export_service
    • local_helper
    • static_asset
    • template_noise
  2. 角色识别规则要求:
    • localhost127.0.0.1SurfaceServicesReportServices 默认归入 export_servicelocal_helper
    • .js.css、模板占位 URL、字符串格式化残片归入 static_assettemplate_noise
    • 页面常量中的 sourceUrl、首页入口地址、业务网关前缀优先归入 business_entrybusiness_api
  3. bootstrap 决策只允许消费:
    • business_entry
    • business_api
    • gateway_api
  4. business_entrygateway_api 并存时:
    • expectedDomain 取业务主域
    • API 前缀保留在 request evidence 中,不直接覆盖 target page
  5. 当只识别到 localhost 或噪声地址时bootstrap 必须判为 unresolved_bootstrap,生成器直接降级。

这条链路的结果是:localhost 仍可保留为“导出依赖证据”,但永远不再有资格被提升成业务入口域名。

Workflow Chain Rectification

workflow 整改的目标是从“字段特征分类”转为“请求链重建分类”。

整改方案如下:

  1. Scene IR 中把 workflow 证据拆成四层:
    • request evidence
    • pagination evidence
    • secondary request evidence
    • post-process evidence
  2. archetype 分类不再优先依赖泛化字段名如 type/tab/mode/status,而是优先依赖:
    • 是否存在主列表请求
    • 是否存在稳定分页变量组合
    • 是否存在逐项或逐批二次请求
    • 是否存在过滤、聚合或导出动作
  3. endpoint 进入工作流前必须经过归一化:
    • 去掉 ${apiUrl}、格式化占位串、日志文本、异常字符串
    • 去掉 localhost export endpoint 对 archetype 的干扰
    • 合并同一业务 API 的不同拼接形态
  4. paginated_enrichment 的最小证据门槛改为:
    • 至少一个主列表请求
    • 至少一组分页变量
    • 至少一个二次请求入口或明确定义的逐户补数函数
    • 至少一个后处理动作:filtertransformexport 之一
  5. 如果只满足部分证据:
    • 可保留为 candidate_paginated_enrichment
    • 但不得进入正式 paginated_enrichment 编译路径
  6. multi_mode_request 只在“模式切换显著改变请求体、列定义或响应路径”时成立,不能仅凭通用字段名命中。

这条链路的结果是:营销类场景只有在真正重建出“分页 + 补数 + 后处理”证据后,才会进入对应编译器。

Readiness Chain Rectification

readiness 整改的目标是把“能否生成”与“能否内网试跑”明确分开。

整改方案如下:

  1. 新增关键门禁:
    • scene_id_valid
    • bootstrap_resolved
    • workflow_complete_for_archetype
    • runtime_contract_compatible
  2. 只有全部通过时,结果才可标为 AB
  3. 任一关键门禁失败时:
    • 结果只能是 C
    • UI 与报告中必须显式展示缺失项
    • 允许输出分析报告,但不应默认输出可运行 skill
  4. marketing-zero-consumer-report 这类参考场景readiness 最低通过条件应明确写死为:
    • 非退化 sceneId
    • bootstrap 指向 yx.gs.sgcc.com.cn 体系
    • workflow 含 paginate
    • workflow 含 secondary_request
    • workflow 含 filterexport

这条链路的结果是:生成器从“只要能写文件就算成功”切换为“只有通过门禁才算可试跑”。

Superpowers Landing Strategy

本整改必须通过 superpowers 的 spec -> plan -> execution 三段式落地,不接受直接跳到零散修补。

落地顺序应为:

  1. 先基于本设计补一份对应的 docs/superpowers/plans 执行计划。
  2. 再按计划拆解到 naming、bootstrap、workflow、readiness 四个任务包。
  3. 实施过程中严格以计划边界为准,不额外扩展到登录、鉴权、宿主接入等非本轮范围。

File Impact

本设计预期主要影响以下区域:

File Responsibility
frontend/scene-generator/generator-runner.js 命名 fallback、URL 分层、workflow 证据重建、门禁前分析
frontend/scene-generator/llm-client.js sceneId 语义补全约束、证据摘要输入、低熵输出拦截
frontend/scene-generator/server.js readiness 汇总、整改风险输出、生成阻断策略
frontend/scene-generator/sg_scene_generator.html 显示 invalid sceneId、bootstrap 角色、workflow 缺证和 readiness 风险
src/generated_scene/analyzer.rs 证据分类、endpoint 去噪、archetype 前置判断
src/generated_scene/ir.rs 承载分层 evidence、candidate archetype、门禁状态
src/generated_scene/generator.rs 按门禁决定是否允许进入编译器和正式输出

Acceptance Criteria

满足以下条件时,视为本整改设计达成目标:

  1. 中文场景目录不再退化生成 2-01-0 等低熵 sceneId
  2. localhost127.0.0.1、导出服务地址不再进入 bootstrap 竞争链。
  3. marketing-zero-consumer-report 只有在具备 paginate + secondary_request + post-process 证据时才会进入 paginated_enrichment 编译路径。
  4. 证据不足时,系统输出整改报告和 readiness 风险,而不是默认生成可运行 skill。
  5. 生成器对外定位从“自动模板生成器”收敛为“带门禁的通用场景 skill 转化器”。

Open Questions

  1. sceneId 的中文转英文策略是引入固定 alias 词表,还是允许 LLM 先给候选再由规则校验收敛。
  2. gateway_apibusiness_entry 并存时,是否需要在 Scene IR 中同时保留 entryDomainapiDomain
  3. readiness 阻断后,默认是否仍允许用户手工确认并强制生成一个 draft skill 包。