-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfeature_list.json
More file actions
151 lines (151 loc) · 11.1 KB
/
Copy pathfeature_list.json
File metadata and controls
151 lines (151 loc) · 11.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
{
"status_legend": {
"not_started": "未开始",
"in_progress": "进行中(全局最多一个,WIP=1)",
"blocked": "阻塞(必须附 blocked_reason 与解除条件)",
"passing": "仅由验证门置位(验证通过 + 证据落盘)"
},
"features": [
{
"id": "F-001",
"name": "out-of-tree bundle 仓库骨架",
"description": "package.json(dsh.bundle)/tsconfig/cordis.patch.yml/src/tests 结构可构建、可被 Loader 识别",
"status": "passing",
"verification": "npm run check 通过;pnpm dsh 组合可装载",
"evidence": "npm run lint && npm test && npm run build 全绿(vitest 11/11,tsc 零错误);headless profile 装载成功(dsh plugin add + boot exit 0)",
"dependencies": []
},
{
"id": "F-002",
"name": "方法论 persona 提示段",
"description": "system-prompt section(order -90)编码 §1.3 会话生命周期、核心不变式、状态词表、反模式速查",
"status": "passing",
"verification": "单测断言 section 文本含生命周期步骤与状态词表;REAL-composition 装载后模型可见",
"evidence": "单测断言通过(tests/agent-discipline.spec.ts prompt describe);headless REAL-composition boot 装载成功、提示段注册于 systemPrompt(模型可见)",
"dependencies": [
"F-001"
]
},
{
"id": "F-003",
"name": "agent_discipline_init 工具",
"description": "在目标仓库生成 §8 工件模板(入口指令/特性清单/进度/验证入口/命名注册/清洁清单/评估准则/架构规则),跳过已存在文件",
"status": "passing",
"verification": "单测断言模板内容;手工在临时仓库运行生成并 check",
"evidence": "scripts/acceptance.mjs init 在临时仓库真实生成 12 个工件(含 scripts/verify-feature.sh、session-handoff.md),created 全列、skipped 空;对生成仓库 agent_discipline_audit 可运行(C1-C4/C6 过,C5 因骨架无 package.json 如实失败)",
"dependencies": [
"F-001"
]
},
{
"id": "F-004",
"name": "agent_discipline_audit 工具",
"description": "§10 审计:CRITICAL 6 项 + RECOMMENDED 抽样,五子系统 1-5 评分、总分/25、最弱子系统、判定 pass/fail",
"status": "passing",
"verification": "单测用构造 facts 断言评分与判定;对自证仓库运行应 CRITICAL 全过",
"evidence": "单测 5 用例覆盖空仓 fail/合规 pass/部分合规最弱子系统/评分边界/报告渲染;scripts/acceptance.mjs self 对自证仓库输出 verdict=pass(CRITICAL 6/6,总分 92/100,最弱子系统=生命周期,唯一缺项 R18 session-handoff.md)",
"dependencies": [
"F-001"
]
},
{
"id": "F-005",
"name": "bundle 装配与安装流程验证",
"description": "cordis.patch.yml 行可被 Loader 解析;dsh plugin add(本地路径)安装成功",
"status": "passing",
"verification": "在 harness 检出目录 pnpm dsh --profile headless plugin add ../dsh-methodology 后 boot 成功",
"evidence": "pnpm dsh plugin --profile headless add ../dsh-methodology 成功;--dump-config exit 0,组合树含 # == agent-discipline 层(agent-discipline 行)",
"dependencies": [
"F-002",
"F-003",
"F-004"
]
},
{
"id": "F-006",
"name": "REAL-composition 装载测试",
"description": "boot 一个含本 bundle 的 cordis.yml 过 Loader,断言提示段与两工具已注册",
"status": "passing",
"verification": "vitest 集成用例:Loader boot + ctx.systemPrompt/tools 断言",
"evidence": "CLI REAL-composition boot:pnpm dsh --profile headless \"say ok\" exit 0 输出 ok(插件树装载、提示段参与请求);vitest 进程内组合测试(tests/composition.spec.ts,2 用例):提示段位于身份与 persona 之间、文本含生命周期内容,两工具注册且无多余;**完整版 Loader boot(tests/loader-composition.spec.ts,复用 @deepseek-ai/dsh-app-boot 的 boot() = dsh 二进制启动路径):装载 fixture cordis.yml + 本包 cordis.patch.yml 成功,assertEntriesActivated 通过,提示段与两工具注册、invariant 伴生缺席、entryNames 含 agent-discipline(D-010/D-011/D-012 升级为机器断言)**;vitest 19/19 全绿(lint + build + test)",
"dependencies": [
"F-005"
]
},
{
"id": "F-007",
"name": "init 多语言 check.sh 变体",
"description": "methodology_init 的 check.sh 模板支持 --lang python|go|node(或生成时提示填验证命令),消除对 TS/npm 生态的默认假设",
"status": "not_started",
"verification": "单测断言各语言变体模板内容;init 真实生成后 check 可跑",
"evidence": "",
"dependencies": [
"F-003"
]
},
{
"id": "F-008",
"name": "存量 AGENTS.md 升级助手",
"description": "识别旧式/非路由器入口文件,生成路由器格式的升级版(保留用户内容,不覆盖),缓解 brownfield 最大摩擦点",
"status": "not_started",
"verification": "单测:旧式入口 → 生成含路由器骨架 + 原内容的升级文件;init 不改写已存在文件约束不受破坏",
"evidence": "",
"dependencies": [
"F-003"
]
},
{
"id": "F-009",
"name": "形态 C-1:ctx.features 状态机服务 + 严格 fold + 三工具",
"description": "ctx.features:create/update/transition/verify;真源=插件自管事件日志(.harness/features/events.jsonl,append-only,D-017 修订)+ feature_list.json 导出投影;严格 fold(WIP=1 违约、passing 无证据、非法状态跳转 → corrupt);工具 get_feature/update_feature/verify_feature 替代手改 JSON(D-016)",
"status": "passing",
"verification": "单测:合法转移/非法跳转/WIP 违约/无证据 passing 各断言;装载断言服务与三工具注册",
"evidence": "vitest 29/29 全绿(19 存量 + 10 新 tests/features.spec.ts);fold 5 用例(合法序列/非法跳转/passing 无证据/WIP 违约/重复 create+update 改状态 → corrupt);service 5 用例(create→transition→verify 全链路 + 事件日志 3 行落盘 + feature_list.json 投影导出 / blocked 缺 reason 与直接 passing 拒绝 / WIP 拒绝 / 手改投影被真源覆盖(机器强制)/ verify 空命令空摘要拒绝);composition.spec.ts 断言 ctx.features 服务与三工具注册(工具表恰好 5 个);lint 0 错误 + build 成功。注:verify 为门卫版(服务生成受控 evidence,不内置执行命令,真执行版留 C-2,D-016 折中)",
"dependencies": [
"F-006"
]
},
{
"id": "F-010",
"name": "形态 C-2:真实 invariant(会话增量折叠 + 预提交拦截)",
"description": "feature 事件日志健康 + 投影一致性 invariant:internal/dispatch 预提交拦截违规(D-016;D-017 自管日志适配)",
"status": "passing",
"verification": "invariant 单测:违规 dispatch 被拦截;装载于含 @deepseek-ai/dsh-invariants 的组合",
"evidence": "tests/features-invariant.spec.ts 8 用例:checkFeatureLogHealth 纯函数 4(健康日志+一致投影无违规 / 坏 JSON 行 / 手写 passing 无证据事件 → fold corrupt / 手改 feature_list.json 投影漂移);installer 挂点 4(健康状态 internal/dispatch 不 fail / 投影漂移时预提交 fail / 正常工具路径不受影响 / FeatureError 属域错误非 invariant 违规);installer 注入 features 服务(rootPath)并挂 internal/dispatch 全局预提交(对齐 goal/invariant.ts 模式);src/invariant.ts 伴生由解释性空安装器升级为真实 invariant;vitest 37/37 全绿(29 存量 + 8 新;lint 0 错误 + build 成功)",
"dependencies": [
"F-009"
]
},
{
"id": "F-011",
"name": "形态 C-3:featureStatus 投影单元 + 状态视图",
"description": "投影单元(FeatureService.exportProjection:折叠 → feature_list.json + 一致性校验)+ 模型可见状态视图(feature_dashboard 工具);GUI 看板机制已验证可行、实施暂缓(D-018)",
"status": "passing",
"verification": "投影单测:事件折叠 → feature_list.json 导出一致",
"evidence": "tests/features-dashboard.spec.ts 5 用例:exportProjection 3(健康日志导出+无问题 / 投影漂移→重建覆盖+报告不一致 / corrupt 日志→不写+报告);feature_dashboard 2(折叠汇总:total/byStatus 计数/wipOccupants/projectionConsistent/每特性证据摘要;投影漂移时 projectionConsistent=false);checkFeatureLogHealth 迁至 store(C-2/C-3 共用,invariant 与服务同源);composition.spec.ts 断言 6 工具注册(含 feature_dashboard);vitest 42/42 全绿(lint 0 + build 成功)。注:GUI 看板(C-3b)mechanism 已验证可行(harness dsh.client 双面插件机制,ui-goal 蓝本),实施暂缓——D-018:React client 工程成本与形态 C 核心(机器强制)正交,模型可见视图以零成本覆盖信息需求",
"dependencies": [
"F-010"
]
},
{
"id": "F-012",
"name": "形态 B→C 迁移(importExisting)+ 工具输出 lossless 修复",
"description": "存量 feature_list.json(无事件日志时)逐条导入为事件(ScanApp 实测暴露的投影覆盖丢失缺口);工具 out() 剔除 undefined 字段修复 harness output lossless 校验(D-019)",
"status": "passing",
"verification": "单测:存量 JSON(含 passing 数组 evidence)逐条导入 + 日志非空跳过 + 工具输出 JSON 往返 lossless",
"evidence": "vitest 47/47(44 + 3 新:importExisting 2 + lossless 1,lint 0 + build);ScanApp 实测:F-001/F-002/F-003 经 importExisting 导入事件日志(7 行),投影重建含全部条目、passing evidence 数组 join 落盘;update_feature 工具加 importExisting 操作;out() 修复后工具输出 JSON 往返一致(实测 'value is not lossless JSON' 修复)",
"dependencies": [
"F-009"
]
},
{
"id": "F-013",
"name": "web 会话 root 解析修复(D-020)",
"description": "FeatureService root 构造时固化 sandboxPolicy 静态根导致 web 会话操作错目录;修复为 resolveRoot(session) per-call 解析;audit/init 无 target 时按会话 root;get_feature 未找到返回 feature:null;output schema 补全",
"status": "passing",
"verification": "npm run check 全绿;L3 脚本模拟 web 会话读 ScanApp 三条特性;audit/init 按会话 root 工作",
"evidence": "verify: npm run check; L3 脚本模拟 web 会话读 ScanApp/audit/init\n输出摘要:vitest 7 文件 56/56 passed(含 web-session-root.spec.ts 9 用例);L1 零错误;L3:get_feature 读出 ScanApp F-001/F-002/F-003、audit 100/100 pass lossless true、init 落盘会话仓库——全部 exit 0\n时间:2026-09-02T03:31:32.013Z\n由 ctx.features.verify 生成(形态 C-1 门卫版)",
"dependencies": []
}
]
}