cowork-flow 0.0.37 → 0.0.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/README.md +27 -14
  2. package/package.json +1 -1
  3. package/src/commands/init.js +39 -28
  4. package/src/commands/sync.js +2 -2
  5. package/src/lib/asset-plan.js +127 -0
  6. package/src/lib/copy-template.js +101 -141
  7. package/src/lib/host-assets.js +231 -0
  8. package/src/lib/plan-applier.js +329 -0
  9. package/src/lib/platforms.js +15 -76
  10. package/src/lib/skill-registry.js +503 -0
  11. package/template/.claude/agents/cowork-check.md +10 -1
  12. package/template/.claude/agents/cowork-implement.md +11 -2
  13. package/template/.claude/hooks/inject-workflow-state.py +51 -254
  14. package/template/.codex/agents/cowork-check.toml +12 -3
  15. package/template/.codex/agents/cowork-implement.toml +11 -2
  16. package/template/.codex/agents/default.toml +3 -2
  17. package/template/.codex/agents/explorer.toml +3 -2
  18. package/template/.codex/agents/worker.toml +2 -1
  19. package/template/.codex/hooks/inject-workflow-state.py +46 -265
  20. package/template/.cowork-flow/.version +1 -1
  21. package/template/.cowork-flow/scripts/application/__init__.py +1 -0
  22. package/template/.cowork-flow/scripts/application/batch_execution.py +743 -0
  23. package/template/.cowork-flow/scripts/application/runtime_context_service.py +365 -0
  24. package/template/.cowork-flow/scripts/application/task_archive.py +220 -0
  25. package/template/.cowork-flow/scripts/application/task_context.py +765 -0
  26. package/template/.cowork-flow/scripts/application/task_creation.py +201 -0
  27. package/template/.cowork-flow/scripts/application/task_lifecycle.py +532 -0
  28. package/template/.cowork-flow/scripts/application/task_tree.py +179 -0
  29. package/template/.cowork-flow/scripts/commands/doctor.py +78 -57
  30. package/template/.cowork-flow/scripts/commands/party_mode_v2.py +671 -425
  31. package/template/.cowork-flow/scripts/commands/subagent.py +38 -26
  32. package/template/.cowork-flow/scripts/commands/task.py +535 -1953
  33. package/template/.cowork-flow/scripts/commands/task_archive_commands.py +195 -0
  34. package/template/.cowork-flow/scripts/commands/task_context_commands.py +240 -0
  35. package/template/.cowork-flow/scripts/commands/task_create_command.py +164 -0
  36. package/template/.cowork-flow/scripts/commands/task_navigation.py +407 -0
  37. package/template/.cowork-flow/scripts/commands/task_parser.py +364 -0
  38. package/template/.cowork-flow/scripts/commands/task_support.py +76 -0
  39. package/template/.cowork-flow/scripts/commands/task_tree_commands.py +160 -0
  40. package/template/.cowork-flow/scripts/common/core/execution_context.py +161 -85
  41. package/template/.cowork-flow/scripts/common/core/host_manifest.py +393 -0
  42. package/template/.cowork-flow/scripts/common/core/skill_registry.py +568 -0
  43. package/template/.cowork-flow/scripts/common/gates/coding_standards.py +58 -7
  44. package/template/.cowork-flow/scripts/common/gates/gates.py +323 -46
  45. package/template/.cowork-flow/scripts/common/gates/models.py +196 -0
  46. package/template/.cowork-flow/scripts/common/gates/registry.py +79 -0
  47. package/template/.cowork-flow/scripts/common/gates/tdd_evidence.py +13 -13
  48. package/template/.cowork-flow/scripts/common/gates/validate_coding_standards.py +104 -62
  49. package/template/.cowork-flow/scripts/common/gates/validate_implementation.py +39 -22
  50. package/template/.cowork-flow/scripts/common/gates/validate_rules.py +223 -40
  51. package/template/.cowork-flow/scripts/common/git/git_context.py +216 -182
  52. package/template/.cowork-flow/scripts/common/host/__init__.py +1 -0
  53. package/template/.cowork-flow/scripts/common/host/workflow_state_hook.py +303 -0
  54. package/template/.cowork-flow/scripts/common/storage/__init__.py +1 -0
  55. package/template/.cowork-flow/scripts/common/storage/operation_log.py +72 -0
  56. package/template/.cowork-flow/scripts/common/storage/state_store.py +279 -0
  57. package/template/.cowork-flow/scripts/common/storage/unit_of_work.py +214 -0
  58. package/template/.cowork-flow/scripts/common/task/active_task.py +93 -135
  59. package/template/.cowork-flow/scripts/common/task/batch_mode.py +33 -120
  60. package/template/.cowork-flow/scripts/common/task/decision_review.py +85 -0
  61. package/template/.cowork-flow/scripts/common/task/readiness.py +9 -15
  62. package/template/.cowork-flow/scripts/common/task/task_repository.py +156 -0
  63. package/template/.cowork-flow/scripts/run.py +24 -0
  64. package/template/.cowork-flow/spec/contracts/decision-anchor.md +8 -2
  65. package/template/.cowork-flow/spec/contracts/subagent-dispatch.md +2 -4
  66. package/template/.cowork-flow/spec/contracts/workflow-state-templates.md +1 -1
  67. package/template/.cowork-flow/spec/protocols/decision-review.md +28 -0
  68. package/template/.cowork-flow/spec/protocols/review.md +34 -0
  69. package/template/.cowork-flow/spec/protocols/spec-maintenance.md +16 -0
  70. package/template/.cowork-flow/spec/protocols/tdd.md +30 -0
  71. package/template/.cowork-flow/spec/references/definition-of-done.md +4 -4
  72. package/template/.cowork-flow/spec/references/orchestration-patterns.md +1 -1
  73. package/template/.cowork-flow/spec/runtime/contract-registry.json +25 -0
  74. package/template/.cowork-flow/spec/runtime/host-assets.json +214 -0
  75. package/template/.cowork-flow/spec/runtime/index.md +8 -0
  76. package/template/.cowork-flow/spec/runtime/rules.json +61 -10
  77. package/template/.cowork-flow/spec/runtime/skill-registry.json +397 -0
  78. package/template/.cowork-flow/spec/schemas/host-assets.schema.json +173 -0
  79. package/template/.cowork-flow/spec/schemas/rules.schema.json +10 -1
  80. package/template/.cowork-flow/spec/schemas/skill-registry.schema.json +202 -0
  81. package/template/.cowork-flow/workflow.md +18 -13
  82. package/template/.opencode/agents/cowork-check.md +11 -0
  83. package/template/.opencode/agents/cowork-implement.md +16 -1
  84. package/template/.zcode/.zcode-plugin/plugin.json +1 -1
  85. package/template/.zcode/hooks/inject-context.js +3 -85
  86. package/template/.zcode/hooks/inject-context.selfcheck.mjs +6 -6
  87. package/template/.zcode/scaffold/.cowork-flow/spec/contracts/decision-anchor.md +8 -2
  88. package/template/.zcode/scaffold/.cowork-flow/spec/contracts/subagent-dispatch.md +2 -4
  89. package/template/.zcode/scaffold/.cowork-flow/spec/runtime/rules.json +61 -10
  90. package/template/.zcode/scaffold/.cowork-flow/spec/schemas/rules.schema.json +10 -1
  91. package/template/.zcode/scaffold/.cowork-flow/workflow.md +18 -13
  92. package/template/.zcode/scaffold/AGENTS.md +18 -8
  93. package/template/AGENTS.md +1 -1
  94. package/template/skills/batch-mode/SKILL.md +140 -76
  95. package/template/skills/brainstorming/SKILL.md +2 -2
  96. package/template/skills/cowork-flow/SKILL.md +42 -0
  97. package/template/skills/party-mode/SHARED-BOUNDARIES.md +1 -1
  98. package/template/skills/party-mode/SKILL.md +48 -119
  99. package/template/.cowork-flow/scripts/common/gates/spec_validator.py +0 -53
  100. package/template/.cowork-flow/scripts/common/gates/validate_jsonl.py +0 -32
  101. package/template/skills/before-dev/SKILL.md +0 -41
  102. package/template/skills/check/SKILL.md +0 -53
  103. package/template/skills/check/simplification-guide.md +0 -47
  104. package/template/skills/continue/SKILL.md +0 -29
  105. package/template/skills/doubt-review/SKILL.md +0 -118
  106. package/template/skills/finish-work/SKILL.md +0 -32
  107. package/template/skills/party-mode-v2/SKILL.md +0 -75
  108. package/template/skills/start/SKILL.md +0 -78
  109. package/template/skills/tdd/SKILL.md +0 -74
  110. package/template/skills/update-spec/SKILL.md +0 -39
  111. package/template/skills/using-cowork-flow/SKILL.md +0 -80
@@ -0,0 +1,214 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "capabilityValues": [
4
+ "native",
5
+ "shim",
6
+ "plugin",
7
+ "external",
8
+ "experimental",
9
+ "unsupported"
10
+ ],
11
+ "platforms": [
12
+ {
13
+ "id": "codex",
14
+ "displayName": "Codex",
15
+ "aliases": [
16
+ "codex"
17
+ ],
18
+ "detectAny": [
19
+ ".codex"
20
+ ],
21
+ "assetPrefixes": [
22
+ ".codex/",
23
+ ".cowork-flow/adapters/codex/"
24
+ ],
25
+ "assetFiles": [],
26
+ "skillTarget": ".agents/skills",
27
+ "adapterPath": ".cowork-flow/adapters/codex/adapter.yaml",
28
+ "capabilities": {
29
+ "dispatchSubagent": "native",
30
+ "freshChildContext": "native",
31
+ "sendFollowup": "native",
32
+ "waitChild": "native",
33
+ "listChildren": "native",
34
+ "cancelChild": "native",
35
+ "stateInjection": "native",
36
+ "backgroundChild": "native",
37
+ "runtimeContextDispatch": "native",
38
+ "runtimeContextBinding": "shim",
39
+ "runtimeContextCleanup": "native"
40
+ },
41
+ "commandTargets": [
42
+ {
43
+ "config": ".codex/hooks.json",
44
+ "format": "json",
45
+ "target": ".codex/hooks/inject-workflow-state.py"
46
+ }
47
+ ]
48
+ },
49
+ {
50
+ "id": "opencode",
51
+ "displayName": "OpenCode",
52
+ "aliases": [
53
+ "opencode"
54
+ ],
55
+ "detectAny": [
56
+ ".opencode"
57
+ ],
58
+ "assetPrefixes": [
59
+ ".opencode/",
60
+ ".cowork-flow/adapters/opencode/"
61
+ ],
62
+ "assetFiles": [],
63
+ "skillTarget": ".agents/skills",
64
+ "adapterPath": ".cowork-flow/adapters/opencode/adapter.yaml",
65
+ "capabilities": {
66
+ "dispatchSubagent": "native",
67
+ "freshChildContext": "native",
68
+ "sendFollowup": "shim",
69
+ "waitChild": "native",
70
+ "listChildren": "native",
71
+ "cancelChild": "native",
72
+ "stateInjection": "plugin",
73
+ "backgroundChild": "experimental",
74
+ "runtimeContextDispatch": "native",
75
+ "runtimeContextBinding": "shim",
76
+ "runtimeContextCleanup": "native"
77
+ },
78
+ "commandTargets": []
79
+ },
80
+ {
81
+ "id": "claude-code",
82
+ "displayName": "Claude Code",
83
+ "aliases": [
84
+ "claude-code",
85
+ "claude",
86
+ "claudecode"
87
+ ],
88
+ "detectAny": [
89
+ ".claude",
90
+ "CLAUDE.md"
91
+ ],
92
+ "assetPrefixes": [
93
+ ".claude/",
94
+ ".cowork-flow/adapters/claude-code/"
95
+ ],
96
+ "assetFiles": [
97
+ "CLAUDE.md"
98
+ ],
99
+ "skillTarget": ".claude/skills",
100
+ "adapterPath": ".cowork-flow/adapters/claude-code/adapter.yaml",
101
+ "capabilities": {
102
+ "dispatchSubagent": "native",
103
+ "freshChildContext": "native",
104
+ "sendFollowup": "native",
105
+ "waitChild": "native",
106
+ "listChildren": "native",
107
+ "cancelChild": "native",
108
+ "stateInjection": "external",
109
+ "backgroundChild": "native",
110
+ "runtimeContextDispatch": "native",
111
+ "runtimeContextBinding": "shim",
112
+ "runtimeContextCleanup": "native"
113
+ },
114
+ "commandTargets": [
115
+ {
116
+ "config": ".claude/settings.json",
117
+ "format": "json",
118
+ "target": ".claude/hooks/inject-workflow-state.py"
119
+ }
120
+ ]
121
+ }
122
+ ],
123
+ "excludedPrefixes": [
124
+ "skills/",
125
+ ".zcode/"
126
+ ],
127
+ "syncPolicy": {
128
+ "protectedFiles": [
129
+ ".cowork-flow/config.yaml"
130
+ ],
131
+ "protectedPrefixes": [
132
+ ".cowork-flow/spec/",
133
+ ".cowork-flow/workspace/",
134
+ ".cowork-flow/tasks/",
135
+ ".cowork-flow/changes/",
136
+ ".cowork-flow/plans/"
137
+ ],
138
+ "safeFiles": [
139
+ ".cowork-flow/.gitignore",
140
+ ".cowork-flow/.version",
141
+ ".cowork-flow/run",
142
+ ".cowork-flow/run.cmd",
143
+ ".cowork-flow/spec/runtime/rules.json",
144
+ ".cowork-flow/spec/runtime/skill-registry.json",
145
+ ".cowork-flow/spec/schemas/skill-registry.schema.json",
146
+ ".cowork-flow/spec/contracts/workflow-state-templates.md"
147
+ ],
148
+ "safePrefixes": [
149
+ ".cowork-flow/"
150
+ ],
151
+ "managedBlockFiles": [
152
+ "AGENTS.md",
153
+ "CLAUDE.md"
154
+ ],
155
+ "obsoleteFiles": [
156
+ ".cowork-flow/project-context.md",
157
+ ".cowork-flow/scripts/add_session.py",
158
+ ".cowork-flow/scripts/change.py",
159
+ ".cowork-flow/scripts/doctor.py",
160
+ ".cowork-flow/scripts/get_context.py",
161
+ ".cowork-flow/scripts/get_developer.py",
162
+ ".cowork-flow/scripts/init_developer.py",
163
+ ".cowork-flow/scripts/party_mode_v2.py",
164
+ ".cowork-flow/scripts/project_context.py",
165
+ ".cowork-flow/scripts/resume.py",
166
+ ".cowork-flow/scripts/subagent.py",
167
+ ".cowork-flow/scripts/task.py",
168
+ ".cowork-flow/scripts/common/active_task.py",
169
+ ".cowork-flow/scripts/common/archive_utils.py",
170
+ ".cowork-flow/scripts/common/coding_standards.py",
171
+ ".cowork-flow/scripts/common/config.py",
172
+ ".cowork-flow/scripts/common/developer.py",
173
+ ".cowork-flow/scripts/common/execution_context.py",
174
+ ".cowork-flow/scripts/common/files.py",
175
+ ".cowork-flow/scripts/common/gates.py",
176
+ ".cowork-flow/scripts/common/git_context.py",
177
+ ".cowork-flow/scripts/common/git_snapshot.py",
178
+ ".cowork-flow/scripts/common/paths.py",
179
+ ".cowork-flow/scripts/common/readiness.py",
180
+ ".cowork-flow/scripts/common/state_machine.py",
181
+ ".cowork-flow/scripts/common/task_utils.py",
182
+ ".cowork-flow/scripts/common/tdd_evidence.py",
183
+ ".cowork-flow/scripts/common/test_intent.py",
184
+ ".cowork-flow/scripts/common/validate_coding_standards.py",
185
+ ".cowork-flow/scripts/common/validate_implementation.py",
186
+ ".cowork-flow/scripts/common/validate_rules.py",
187
+ ".cowork-flow/scripts/common/gates/spec_validator.py",
188
+ ".cowork-flow/scripts/common/gates/validate_jsonl.py",
189
+ ".cowork-flow/spec/contracts/entry-contract.md",
190
+ ".agents/skills/before-dev",
191
+ ".agents/skills/check",
192
+ ".agents/skills/continue",
193
+ ".agents/skills/doubt-review",
194
+ ".agents/skills/entry-boundary",
195
+ ".agents/skills/finish-work",
196
+ ".agents/skills/party-mode-v2",
197
+ ".agents/skills/start",
198
+ ".agents/skills/tdd",
199
+ ".agents/skills/update-spec",
200
+ ".agents/skills/using-cowork-flow",
201
+ ".claude/skills/before-dev",
202
+ ".claude/skills/check",
203
+ ".claude/skills/continue",
204
+ ".claude/skills/doubt-review",
205
+ ".claude/skills/entry-boundary",
206
+ ".claude/skills/finish-work",
207
+ ".claude/skills/party-mode-v2",
208
+ ".claude/skills/start",
209
+ ".claude/skills/tdd",
210
+ ".claude/skills/update-spec",
211
+ ".claude/skills/using-cowork-flow"
212
+ ]
213
+ }
214
+ }
@@ -5,6 +5,14 @@
5
5
  - `rules.json`: workflow rule 元数据单源。执行器可以按 rule id 做事实判断,
6
6
  但 violation 的 `message`、`severity`、`fix_hint` 和来源信息必须来自这里。
7
7
  - `contract-registry.json`: hook/plugin 注入 contract digest 的注册表。
8
+ - `host-assets.json`: 宿主平台、资产归属、技能目标、同步保护策略和旧资产迁移清单的单源;结构由 `../schemas/host-assets.schema.json` 约束。
8
9
 
9
10
  缺少或损坏的 runtime 文件不能静默放行关键门禁。宿主插件可使用最小 fallback
10
11
  避免崩溃,但必须在 digest 中暴露 warning;doctor/tests 负责发现缺失。
12
+
13
+ 运行时写入边界:
14
+
15
+ - 命令层通过 `scripts/application/` 调用任务与 runtime context 用例。
16
+ - JSON 状态通过 `scripts/common/storage/` 读写并显式使用 UTF-8。
17
+ - init/sync 通过 Asset Plan、staging、备份和 rollback 提交资产,版本文件最后更新。
18
+ - 旧状态只允许在带迁移测试的读取边界兼容;新写入必须使用当前 schema 和权威路径。
@@ -11,7 +11,11 @@
11
11
  "fix_hint": "创建 .cowork-flow/changes/<slug>/proposal.md 并填写目标、用户价值、范围边界",
12
12
  "source_file": ".cowork-flow/workflow.md",
13
13
  "source_excerpt": "定义 L1(增量)、L2(结构性)和 L3(重大)三级工作",
14
- "enforcement": "validate_rules"
14
+ "enforcement": "validate_rules",
15
+ "validator": "runtime.l2_required_file",
16
+ "parameters": {
17
+ "filename": "proposal.md"
18
+ }
15
19
  },
16
20
  {
17
21
  "id": "R-WF-002",
@@ -23,7 +27,11 @@
23
27
  "fix_hint": "创建 .cowork-flow/changes/<slug>/spec.md 并填写功能规格",
24
28
  "source_file": ".cowork-flow/workflow.md",
25
29
  "source_excerpt": "L2(结构性)",
26
- "enforcement": "validate_rules"
30
+ "enforcement": "validate_rules",
31
+ "validator": "runtime.l2_required_file",
32
+ "parameters": {
33
+ "filename": "spec.md"
34
+ }
27
35
  },
28
36
  {
29
37
  "id": "R-WF-003",
@@ -35,7 +43,11 @@
35
43
  "fix_hint": "创建 .cowork-flow/changes/<slug>/design.md 并填写技术设计",
36
44
  "source_file": ".cowork-flow/workflow.md",
37
45
  "source_excerpt": "L2(结构性)",
38
- "enforcement": "validate_rules"
46
+ "enforcement": "validate_rules",
47
+ "validator": "runtime.l2_required_file",
48
+ "parameters": {
49
+ "filename": "design.md"
50
+ }
39
51
  },
40
52
  {
41
53
  "id": "R-WF-004",
@@ -47,7 +59,9 @@
47
59
  "fix_hint": "在 change.yaml 中添加 plan 字段指向 .cowork-flow/plans/ 下的计划文件",
48
60
  "source_file": ".cowork-flow/workflow.md",
49
61
  "source_excerpt": "L2(结构性)",
50
- "enforcement": "validate_rules"
62
+ "enforcement": "validate_rules",
63
+ "validator": "runtime.l2_plan_link",
64
+ "parameters": {}
51
65
  },
52
66
  {
53
67
  "id": "R-WF-005",
@@ -59,7 +73,25 @@
59
73
  "fix_hint": "在 change.yaml 中添加 tasks 字段指向相关任务目录",
60
74
  "source_file": ".cowork-flow/workflow.md",
61
75
  "source_excerpt": "L2(结构性)",
62
- "enforcement": "validate_rules"
76
+ "enforcement": "validate_rules",
77
+ "validator": "runtime.l2_task_link",
78
+ "parameters": {}
79
+ },
80
+ {
81
+ "id": "R-WF-006",
82
+ "type": "phase_gate",
83
+ "severity": "block",
84
+ "scope": "task_start",
85
+ "condition": "L2 任务必须有有效的 decision-review.jsonl",
86
+ "message": "L2 decision review evidence is missing or invalid",
87
+ "fix_hint": "按 .cowork-flow/spec/protocols/decision-review.md 写入已接受的结构化记录",
88
+ "source_file": ".cowork-flow/spec/protocols/decision-review.md",
89
+ "source_excerpt": "L2 task start requires accepted structured decision evidence",
90
+ "enforcement": "validate_rules",
91
+ "validator": "runtime.l2_decision_review",
92
+ "parameters": {
93
+ "filename": "decision-review.jsonl"
94
+ }
63
95
  },
64
96
  {
65
97
  "id": "R-WF-007",
@@ -71,7 +103,13 @@
71
103
  "fix_hint": "运行 ./.cowork-flow/run task review [task-dir] 进入检查阶段,然后运行验证命令",
72
104
  "source_file": ".cowork-flow/workflow.md",
73
105
  "source_excerpt": "先验证再完成",
74
- "enforcement": "validate_rules"
106
+ "enforcement": "validate_rules",
107
+ "validator": "runtime.task_status",
108
+ "parameters": {
109
+ "allowed_statuses": [
110
+ "review"
111
+ ]
112
+ }
75
113
  },
76
114
  {
77
115
  "id": "R-WF-008",
@@ -83,7 +121,14 @@
83
121
  "fix_hint": "创建 <task-dir>/decision-anchor.md,至少包含 ## 目标和 ## 验收标准",
84
122
  "source_file": ".cowork-flow/spec/contracts/decision-anchor.md",
85
123
  "source_excerpt": "每个任务必须有决策锚点",
86
- "enforcement": "validate_rules"
124
+ "enforcement": "validate_rules",
125
+ "validator": "runtime.decision_anchor",
126
+ "parameters": {
127
+ "required_sections": [
128
+ "目标",
129
+ "验收标准"
130
+ ]
131
+ }
87
132
  },
88
133
  {
89
134
  "id": "R-AG-002",
@@ -95,7 +140,9 @@
95
140
  "fix_hint": "规格文件只能由主会话修改,子代理应专注于实现任务",
96
141
  "source_file": ".cowork-flow/spec/contracts/subagent-dispatch.md",
97
142
  "source_excerpt": "cowork-* 固定代理是叶子执行者",
98
- "enforcement": "validate_implementation"
143
+ "enforcement": "validate_implementation",
144
+ "validator": "implementation.spec_files",
145
+ "parameters": {}
99
146
  },
100
147
  {
101
148
  "id": "R-AG-005",
@@ -107,7 +154,9 @@
107
154
  "fix_hint": "通过 ./.cowork-flow/run task add-context <dir> implement <path> <reason> 登记所有需要修改的文件",
108
155
  "source_file": ".cowork-flow/spec/contracts/decision-anchor.md",
109
156
  "source_excerpt": "implement.jsonl 是任务的权威文件白名单",
110
- "enforcement": "validate_implementation"
157
+ "enforcement": "validate_implementation",
158
+ "validator": "implementation.allowed_files",
159
+ "parameters": {}
111
160
  },
112
161
  {
113
162
  "id": "R-AG-006",
@@ -119,7 +168,9 @@
119
168
  "fix_hint": "保持代码简单直接,只有在确认需要复用时才进行抽象",
120
169
  "source_file": "AGENTS.md",
121
170
  "source_excerpt": "不为一次性代码做抽象",
122
- "enforcement": "validate_implementation"
171
+ "enforcement": "validate_implementation",
172
+ "validator": "implementation.premature_abstraction",
173
+ "parameters": {}
123
174
  }
124
175
  ]
125
176
  }