- 注册表:docs/architecture/README.md §2,37 份 canonical(frontmatter topic+canonical:true)与表双向机器对账
- 门:.agents/tools/docs-gate.py 六检(品牌根/canonical唯一/死链/入口卫生/留痕隔离/设计档申报),挂 .githooks/pre-commit(本仓已激活)+ .gitea/workflows/docs-gate.yml(待runner)+ wave-close 第8步;旧 check-deadlinks.sh 退役并入 G3
- 清缩:删 54 项历史档(plans 16/agent-specs 设计与spike 20/brainstorms 5/memorys 3/goals+作战清单完成史归档/王蓝莓design/SAA现状html/add-game-template);channel-spike 564K 代码资产迁仓级 spikes/;六件删前蒸馏已迁(代码评审16条open项→进度总账§5、prefix-cache字段表→cheap-model skill、意图基线29条→需求清单附录、九门降级rationale→验收门、A11 TODO→tech-decisions、3layer边界→littlejs-game-dev 指针)
- 修口径约90处:六处SAA『现行主线』旧标、Nacos/RocketMQ『未部署』旧述(07-01反转)、gameDefinition残留、全部死链改 git show 定位;AGENTS.md 249→136行(决策史归tech-decisions);_index 改纯在飞板;对外演示版 md→html
- 依据:docs/agent-specs/2026-07-02-文档治理-{全量普查与裁决-report,SoT注册表与治理门-设计}.md(四路普查191份md+Codex/Opus双评审必修项已折入);恢复基线 8ea97234(单档 git checkout 8ea97234 -- <路径>)
90 lines
5.2 KiB
JavaScript
90 lines
5.2 KiB
JavaScript
export const meta = {
|
||
name: 'doc-organizer-analyze',
|
||
description: '文档整理·分析相:按三轴 fan-out 分类窗口内/热目录候选文档,返回结构化处置建议(只读,绝不改文件)',
|
||
phases: [
|
||
{ title: '轴①过期分类', detail: '每候选档判 KEEP/ARCHIVE/COMPRESS/EVICT/DELETE' },
|
||
{ title: '轴②核心档措辞', detail: '每 stale 档逐处判当现行=改/已降级=放过' },
|
||
],
|
||
}
|
||
|
||
// args = { candidates:[{file,lines,type}], staleDocs:[{file,suspect}], ledgerGap }
|
||
// 防御:Workflow 工具有时把 args 当 JSON 字符串透传(非对象)→ 字符串则解析,保证 candidates/staleDocs 取得到。
|
||
let A = args || {}
|
||
if (typeof A === 'string') { try { A = JSON.parse(A) } catch (e) { A = {} } }
|
||
const candidates = Array.isArray(A.candidates) ? A.candidates : []
|
||
const staleDocs = Array.isArray(A.staleDocs) ? A.staleDocs : []
|
||
|
||
// 现行真相基准(与 .agents/knowledge/tech-decisions.md + AGENTS §3 对齐;子代理仍须自读权威源核实)
|
||
const TRUTH =
|
||
'现行真相:生成主线=生成 agent 写真 src/ 多文件工程于插件库(HJ-GEN-001 终审 2026-06-12;gameDefinition 已废·A-model 直写真 src·旧"模板驱动/LLM 直出 GameConfig"已废) via new-api 网关(Dify/OpenGame 降远期·MVP 从不部署);' +
|
||
'正交两轴:AI 参与深度 Tier0/1/2 与引擎按表现复杂度选(轻-中=LittleJS 增强发行版+Runner v2,勿写13/15KB;最高=Phaser)是两根正交轴、引擎不是分档轴;自研 Canvas<15KB 已废;Cocos 只留 3D/渠道导出轴(人在环);' +
|
||
'模板=LittleJS 插件;游戏模板/填参线已废(W-CLEAN),玩法模板(品类框架·引导生成·非pre-built代码)未废=有效待建;agentic 框架 2026-06-25 reframe 统一收敛 AgentScope(三档共用一个 agent 框架),SAA(Spring AI Alibaba v1.1.2.2)/dify/coze 降最低优先级、留作远期适配验证;' +
|
||
'美术/音乐=mmx-cli,ComfyUI 退备选;Nacos(配置中心+服务发现)/RocketMQ(异步 gen 队列)/Sentinel(准入侧流控)=MVP 生产基建三件套·已自托管 mini-infra(2026-07-01 build-vs-buy 反转旧"未部署"口径,勿再标 future-state);命名空间=com.wanxiang.huijing;品牌=绘境AI'
|
||
|
||
const CLS = {
|
||
type: 'object',
|
||
required: ['action', 'status', 'rationale'],
|
||
properties: {
|
||
action: { type: 'string', enum: ['KEEP', 'ARCHIVE', 'COMPRESS', 'EVICT', 'DELETE'] },
|
||
status: { type: 'string', enum: ['ACTIVE', 'SHIPPED', 'SUPERSEDED', 'SPIKE-DONE', 'DUP'] },
|
||
pointer: { type: 'string', description: '收口报告/.agents skill/commit/memory/替代档' },
|
||
rationale: { type: 'string', description: '一句话理由' },
|
||
},
|
||
}
|
||
|
||
const STALE = {
|
||
type: 'object',
|
||
required: ['revise', 'findings'],
|
||
properties: {
|
||
revise: { type: 'boolean', description: '是否需改(有把废弃选型当现行的句)' },
|
||
bigRewrite: { type: 'boolean', description: '是否>200行重写/多图重画需先单独出计划' },
|
||
findings: {
|
||
type: 'array',
|
||
items: {
|
||
type: 'object',
|
||
required: ['line', 'verdict'],
|
||
properties: {
|
||
line: { type: 'string', description: '行号或定位' },
|
||
verdict: { type: 'string', enum: ['改', '放过'] },
|
||
fix: { type: 'string', description: 'verdict=改时:现行口径一句' },
|
||
},
|
||
},
|
||
},
|
||
},
|
||
}
|
||
|
||
// 轴① 过期历史档分类(判据=§10/_index;每片自读 head+tail+MEMORY.md+_index.md)
|
||
phase('轴①过期分类')
|
||
const axis1 = await parallel(
|
||
candidates.map((c) => () =>
|
||
agent(
|
||
`只读分类 docs/agent-specs/${c.file}(${c.lines || '?'}行,${c.type || '?'})。` +
|
||
`先读其前45+后25行 + /root/.claude/projects/-root-games-development-ai/memory/MEMORY.md + docs/agent-specs/_index.md。` +
|
||
`判据:review/政策含"为什么"=KEEP或ARCHIVE;execution/edit-plan 一次性=COMPRESS;代码/证据/原始输出=EVICT;机器噪声=DELETE。` +
|
||
`KEEP=仍管当前/未来工作 或 某线唯一 SoT(决策/收口)。绝不改任何文件。`,
|
||
{ label: `cls:${c.file}`, phase: '轴①过期分类', model: 'opus', schema: CLS }
|
||
).then((r) => ({ file: c.file, ...r }))
|
||
)
|
||
)
|
||
|
||
// 轴② 核心设计档措辞对齐(基准=tech-decisions.md+AGENTS §3;事实核查据 contracts/Flyway)
|
||
phase('轴②核心档措辞')
|
||
const axis2 = await parallel(
|
||
staleDocs.map((d) => () =>
|
||
agent(
|
||
`只读审 ${d.file}(${d.suspect || '?'}处疑似)残留废弃选型词。逐处判"把废弃选型当现行架构/默认/MVP在用"=改, "已标降级/future-state/删除线/决策史/甘特蓝图"=放过。` +
|
||
`${TRUTH}。基准先读 .agents/knowledge/tech-decisions.md + AGENTS.md §3。` +
|
||
`事实核查勿臆造:字段名/MQ是否真部署 据 contracts/+DB Flyway 实测,虚构字段才删、规划项标 future-state 勿删。绝不改文件,只产 findings。`,
|
||
{ label: `stale:${d.file}`, phase: '轴②核心档措辞', model: 'opus', schema: STALE }
|
||
).then((r) => ({ file: d.file, ...r }))
|
||
)
|
||
)
|
||
|
||
// 返回结构化结果供主代理编译"清理计划"(主代理写计划档→另派评审子代理→呈创始人审批→批准后才执行)
|
||
return {
|
||
axis1: axis1.filter(Boolean),
|
||
axis2: axis2.filter(Boolean),
|
||
ledgerGap: A.ledgerGap || null,
|
||
note: '本结果仅供编计划;任何归档/压缩/改写须等创始人批准后由阶段二执行',
|
||
}
|