mustflow 2.58.1 → 2.68.6
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.
- package/README.md +4 -0
- package/dist/cli/commands/context.js +81 -6
- package/dist/cli/commands/quality.js +89 -0
- package/dist/cli/commands/skill.js +116 -0
- package/dist/cli/i18n/en.js +16 -0
- package/dist/cli/i18n/es.js +16 -0
- package/dist/cli/i18n/fr.js +16 -0
- package/dist/cli/i18n/hi.js +16 -0
- package/dist/cli/i18n/ko.js +16 -0
- package/dist/cli/i18n/zh.js +16 -0
- package/dist/cli/index.js +1 -0
- package/dist/cli/lib/agent-context.js +981 -8
- package/dist/cli/lib/command-registry.js +12 -0
- package/dist/cli/lib/local-index/constants.js +4 -5
- package/dist/cli/lib/local-index/freshness.js +5 -1
- package/dist/cli/lib/local-index/index.js +1 -1
- package/dist/cli/lib/repo-map.js +7 -1
- package/dist/cli/lib/validation/constants.js +3 -0
- package/dist/cli/lib/validation/index.js +41 -2
- package/dist/core/check-issues.js +5 -0
- package/dist/core/prompt-cache-rendering.js +19 -0
- package/dist/core/public-json-contracts.js +35 -0
- package/dist/core/quality-gaming.js +304 -0
- package/dist/core/skill-route-fixtures.js +173 -0
- package/dist/core/skill-route-resolution.js +398 -0
- package/dist/core/source-anchors.js +91 -5
- package/package.json +1 -1
- package/schemas/README.md +9 -1
- package/schemas/context-report.schema.json +442 -0
- package/schemas/quality-gaming-report.schema.json +96 -0
- package/schemas/route-fixture.schema.json +57 -0
- package/schemas/skill-route-report.schema.json +242 -0
- package/templates/default/common/.mustflow/config/commands.toml +34 -2
- package/templates/default/common/.mustflow/config/mustflow.toml +16 -10
- package/templates/default/i18n.toml +14 -8
- package/templates/default/locales/en/.mustflow/context/PROJECT.md +5 -3
- package/templates/default/locales/en/.mustflow/docs/agent-workflow.md +13 -9
- package/templates/default/locales/en/.mustflow/skills/INDEX.md +3 -2
- package/templates/default/locales/en/.mustflow/skills/llm-token-cost-control-review/SKILL.md +5 -2
- package/templates/default/locales/en/.mustflow/skills/quality-gaming-guard/SKILL.md +165 -0
- package/templates/default/locales/en/.mustflow/skills/router.toml +67 -0
- package/templates/default/locales/en/.mustflow/skills/routes.toml +6 -0
- package/templates/default/locales/en/AGENTS.md +15 -7
- package/templates/default/locales/ko/.mustflow/context/PROJECT.md +4 -2
- package/templates/default/locales/ko/.mustflow/docs/agent-workflow.md +18 -12
- package/templates/default/locales/ko/AGENTS.md +8 -6
- package/templates/default/manifest.toml +9 -1
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://mustflow.github.io/schemas/quality-gaming-report.schema.json",
|
|
4
|
+
"title": "mustflow quality-gaming report",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"schema_version",
|
|
9
|
+
"command",
|
|
10
|
+
"mode",
|
|
11
|
+
"scope",
|
|
12
|
+
"ok",
|
|
13
|
+
"mustflow_root",
|
|
14
|
+
"git_tracked",
|
|
15
|
+
"checked_files",
|
|
16
|
+
"risk_count",
|
|
17
|
+
"risky_files",
|
|
18
|
+
"issues"
|
|
19
|
+
],
|
|
20
|
+
"properties": {
|
|
21
|
+
"schema_version": { "const": "1" },
|
|
22
|
+
"command": { "const": "quality" },
|
|
23
|
+
"mode": { "const": "check" },
|
|
24
|
+
"scope": { "enum": ["changed", "tracked"] },
|
|
25
|
+
"ok": { "type": "boolean" },
|
|
26
|
+
"mustflow_root": { "type": "string" },
|
|
27
|
+
"git_tracked": { "type": "boolean" },
|
|
28
|
+
"checked_files": { "type": "integer", "minimum": 0 },
|
|
29
|
+
"risk_count": { "type": "integer", "minimum": 0 },
|
|
30
|
+
"risky_files": {
|
|
31
|
+
"type": "array",
|
|
32
|
+
"items": { "$ref": "#/$defs/riskyFile" }
|
|
33
|
+
},
|
|
34
|
+
"issues": {
|
|
35
|
+
"type": "array",
|
|
36
|
+
"items": { "type": "string" }
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"$defs": {
|
|
40
|
+
"metric": {
|
|
41
|
+
"type": "object",
|
|
42
|
+
"additionalProperties": false,
|
|
43
|
+
"required": ["name", "value", "threshold"],
|
|
44
|
+
"properties": {
|
|
45
|
+
"name": { "type": "string" },
|
|
46
|
+
"value": { "type": "number" },
|
|
47
|
+
"threshold": { "type": "number" }
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"risk": {
|
|
51
|
+
"type": "object",
|
|
52
|
+
"additionalProperties": false,
|
|
53
|
+
"required": ["code", "severity", "path", "line", "detail", "metric"],
|
|
54
|
+
"properties": {
|
|
55
|
+
"code": {
|
|
56
|
+
"enum": [
|
|
57
|
+
"line_stuffing_added",
|
|
58
|
+
"multiple_statements_per_line_added",
|
|
59
|
+
"suppression_added",
|
|
60
|
+
"type_escape_added",
|
|
61
|
+
"test_bypass_marker_added",
|
|
62
|
+
"placeholder_added",
|
|
63
|
+
"empty_catch_swallow_added",
|
|
64
|
+
"generated_or_vendor_logic_added",
|
|
65
|
+
"large_helper_container_added"
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
"severity": { "enum": ["medium", "high", "critical"] },
|
|
69
|
+
"path": { "type": "string" },
|
|
70
|
+
"line": { "type": ["integer", "null"], "minimum": 1 },
|
|
71
|
+
"detail": { "type": "string" },
|
|
72
|
+
"metric": {
|
|
73
|
+
"anyOf": [
|
|
74
|
+
{ "$ref": "#/$defs/metric" },
|
|
75
|
+
{ "type": "null" }
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"riskyFile": {
|
|
81
|
+
"type": "object",
|
|
82
|
+
"additionalProperties": false,
|
|
83
|
+
"required": ["path", "checked_lines", "risk_count", "risks"],
|
|
84
|
+
"properties": {
|
|
85
|
+
"path": { "type": "string" },
|
|
86
|
+
"checked_lines": { "type": "integer", "minimum": 0 },
|
|
87
|
+
"risk_count": { "type": "integer", "minimum": 1 },
|
|
88
|
+
"risks": {
|
|
89
|
+
"type": "array",
|
|
90
|
+
"items": { "$ref": "#/$defs/risk" },
|
|
91
|
+
"minItems": 1
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://mustflow.github.io/schemas/route-fixture.schema.json",
|
|
4
|
+
"title": "mustflow skill route fixture",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schema_version", "cases"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schema_version": { "const": "1" },
|
|
10
|
+
"cases": {
|
|
11
|
+
"type": "array",
|
|
12
|
+
"items": { "$ref": "#/$defs/case" }
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"$defs": {
|
|
16
|
+
"nonEmptyString": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"minLength": 1
|
|
19
|
+
},
|
|
20
|
+
"nonEmptyStringArray": {
|
|
21
|
+
"type": "array",
|
|
22
|
+
"minItems": 1,
|
|
23
|
+
"items": { "$ref": "#/$defs/nonEmptyString" }
|
|
24
|
+
},
|
|
25
|
+
"case": {
|
|
26
|
+
"type": "object",
|
|
27
|
+
"additionalProperties": false,
|
|
28
|
+
"required": ["id", "paths", "reasons"],
|
|
29
|
+
"anyOf": [
|
|
30
|
+
{ "required": ["required_main"] },
|
|
31
|
+
{ "required": ["required_candidates"] },
|
|
32
|
+
{ "required": ["required_adjuncts"] },
|
|
33
|
+
{ "required": ["forbidden_candidates"] }
|
|
34
|
+
],
|
|
35
|
+
"properties": {
|
|
36
|
+
"id": { "$ref": "#/$defs/nonEmptyString" },
|
|
37
|
+
"task": {
|
|
38
|
+
"oneOf": [
|
|
39
|
+
{ "$ref": "#/$defs/nonEmptyString" },
|
|
40
|
+
{ "type": "null" }
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
"paths": { "$ref": "#/$defs/nonEmptyStringArray" },
|
|
44
|
+
"reasons": { "$ref": "#/$defs/nonEmptyStringArray" },
|
|
45
|
+
"max_candidates": {
|
|
46
|
+
"type": "integer",
|
|
47
|
+
"minimum": 1,
|
|
48
|
+
"maximum": 10
|
|
49
|
+
},
|
|
50
|
+
"required_main": { "$ref": "#/$defs/nonEmptyString" },
|
|
51
|
+
"required_candidates": { "$ref": "#/$defs/nonEmptyStringArray" },
|
|
52
|
+
"required_adjuncts": { "$ref": "#/$defs/nonEmptyStringArray" },
|
|
53
|
+
"forbidden_candidates": { "$ref": "#/$defs/nonEmptyStringArray" }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://mustflow.github.io/schemas/skill-route-report.schema.json",
|
|
4
|
+
"title": "mustflow skill route report",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"schema_version",
|
|
9
|
+
"kind",
|
|
10
|
+
"input",
|
|
11
|
+
"signals",
|
|
12
|
+
"selected",
|
|
13
|
+
"candidates",
|
|
14
|
+
"source_files",
|
|
15
|
+
"gap_notes",
|
|
16
|
+
"command",
|
|
17
|
+
"action"
|
|
18
|
+
],
|
|
19
|
+
"properties": {
|
|
20
|
+
"schema_version": { "const": "1" },
|
|
21
|
+
"kind": { "const": "skill_route_resolution" },
|
|
22
|
+
"command": { "const": "skill" },
|
|
23
|
+
"action": { "const": "route" },
|
|
24
|
+
"input": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"additionalProperties": false,
|
|
27
|
+
"required": ["task_text_present", "paths", "reasons", "max_candidates"],
|
|
28
|
+
"properties": {
|
|
29
|
+
"task_text_present": { "type": "boolean" },
|
|
30
|
+
"paths": {
|
|
31
|
+
"type": "array",
|
|
32
|
+
"items": { "type": "string" }
|
|
33
|
+
},
|
|
34
|
+
"reasons": {
|
|
35
|
+
"type": "array",
|
|
36
|
+
"items": { "type": "string" }
|
|
37
|
+
},
|
|
38
|
+
"max_candidates": {
|
|
39
|
+
"type": "integer",
|
|
40
|
+
"minimum": 1,
|
|
41
|
+
"maximum": 10
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"signals": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"additionalProperties": false,
|
|
48
|
+
"required": ["task_terms", "path_terms", "reasons", "read_shards"],
|
|
49
|
+
"properties": {
|
|
50
|
+
"task_terms": {
|
|
51
|
+
"type": "array",
|
|
52
|
+
"items": { "type": "string" }
|
|
53
|
+
},
|
|
54
|
+
"path_terms": {
|
|
55
|
+
"type": "array",
|
|
56
|
+
"items": { "type": "string" }
|
|
57
|
+
},
|
|
58
|
+
"reasons": {
|
|
59
|
+
"type": "array",
|
|
60
|
+
"items": { "type": "string" }
|
|
61
|
+
},
|
|
62
|
+
"read_shards": {
|
|
63
|
+
"type": "array",
|
|
64
|
+
"items": { "type": "string" }
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"selected": {
|
|
69
|
+
"type": "object",
|
|
70
|
+
"additionalProperties": false,
|
|
71
|
+
"required": ["main", "adjuncts"],
|
|
72
|
+
"properties": {
|
|
73
|
+
"main": {
|
|
74
|
+
"oneOf": [
|
|
75
|
+
{ "$ref": "#/$defs/candidate" },
|
|
76
|
+
{ "type": "null" }
|
|
77
|
+
]
|
|
78
|
+
},
|
|
79
|
+
"adjuncts": {
|
|
80
|
+
"type": "array",
|
|
81
|
+
"items": { "$ref": "#/$defs/candidate" }
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"candidates": {
|
|
86
|
+
"type": "array",
|
|
87
|
+
"items": { "$ref": "#/$defs/candidate" }
|
|
88
|
+
},
|
|
89
|
+
"read_plan": {
|
|
90
|
+
"type": "object",
|
|
91
|
+
"additionalProperties": false,
|
|
92
|
+
"required": [
|
|
93
|
+
"selection_limits",
|
|
94
|
+
"stable_kernel",
|
|
95
|
+
"selected_skill_paths",
|
|
96
|
+
"candidate_skill_paths",
|
|
97
|
+
"fallback_route_metadata",
|
|
98
|
+
"expanded_index",
|
|
99
|
+
"avoid_by_default",
|
|
100
|
+
"notes"
|
|
101
|
+
],
|
|
102
|
+
"properties": {
|
|
103
|
+
"selection_limits": {
|
|
104
|
+
"type": "object",
|
|
105
|
+
"additionalProperties": false,
|
|
106
|
+
"required": ["candidates", "main", "adjuncts"],
|
|
107
|
+
"properties": {
|
|
108
|
+
"candidates": {
|
|
109
|
+
"type": "integer",
|
|
110
|
+
"minimum": 1,
|
|
111
|
+
"maximum": 10
|
|
112
|
+
},
|
|
113
|
+
"main": {
|
|
114
|
+
"type": "integer",
|
|
115
|
+
"minimum": 1,
|
|
116
|
+
"maximum": 1
|
|
117
|
+
},
|
|
118
|
+
"adjuncts": {
|
|
119
|
+
"type": "integer",
|
|
120
|
+
"minimum": 0,
|
|
121
|
+
"maximum": 2
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"stable_kernel": {
|
|
126
|
+
"type": "array",
|
|
127
|
+
"items": { "type": "string" }
|
|
128
|
+
},
|
|
129
|
+
"selected_skill_paths": {
|
|
130
|
+
"type": "array",
|
|
131
|
+
"items": { "type": "string" }
|
|
132
|
+
},
|
|
133
|
+
"candidate_skill_paths": {
|
|
134
|
+
"type": "array",
|
|
135
|
+
"items": { "type": "string" }
|
|
136
|
+
},
|
|
137
|
+
"fallback_route_metadata": { "$ref": "#/$defs/readPlanFile" },
|
|
138
|
+
"expanded_index": { "$ref": "#/$defs/readPlanFile" },
|
|
139
|
+
"avoid_by_default": {
|
|
140
|
+
"type": "array",
|
|
141
|
+
"items": { "type": "string" }
|
|
142
|
+
},
|
|
143
|
+
"notes": {
|
|
144
|
+
"type": "array",
|
|
145
|
+
"items": { "type": "string" }
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"source_files": {
|
|
150
|
+
"type": "array",
|
|
151
|
+
"items": { "type": "string" }
|
|
152
|
+
},
|
|
153
|
+
"gap_notes": {
|
|
154
|
+
"type": "array",
|
|
155
|
+
"items": { "type": "string" }
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
"$defs": {
|
|
159
|
+
"candidate": {
|
|
160
|
+
"type": "object",
|
|
161
|
+
"additionalProperties": false,
|
|
162
|
+
"required": [
|
|
163
|
+
"skill",
|
|
164
|
+
"skill_path",
|
|
165
|
+
"trigger",
|
|
166
|
+
"category",
|
|
167
|
+
"route_type",
|
|
168
|
+
"priority",
|
|
169
|
+
"applies_to_reasons",
|
|
170
|
+
"score",
|
|
171
|
+
"score_breakdown",
|
|
172
|
+
"selection_reasons",
|
|
173
|
+
"verification_intents"
|
|
174
|
+
],
|
|
175
|
+
"properties": {
|
|
176
|
+
"skill": { "type": "string" },
|
|
177
|
+
"skill_path": { "type": "string" },
|
|
178
|
+
"trigger": { "type": "string" },
|
|
179
|
+
"category": {
|
|
180
|
+
"type": ["string", "null"],
|
|
181
|
+
"enum": [
|
|
182
|
+
"bug_failure",
|
|
183
|
+
"general_code",
|
|
184
|
+
"tests",
|
|
185
|
+
"docs_release",
|
|
186
|
+
"security_privacy",
|
|
187
|
+
"data_external",
|
|
188
|
+
"ui_assets",
|
|
189
|
+
"architecture_patterns",
|
|
190
|
+
"workflow_contracts",
|
|
191
|
+
null
|
|
192
|
+
]
|
|
193
|
+
},
|
|
194
|
+
"route_type": { "type": "string" },
|
|
195
|
+
"priority": { "type": "integer" },
|
|
196
|
+
"applies_to_reasons": {
|
|
197
|
+
"type": "array",
|
|
198
|
+
"items": { "type": "string" }
|
|
199
|
+
},
|
|
200
|
+
"score": { "type": "number" },
|
|
201
|
+
"score_breakdown": {
|
|
202
|
+
"type": "object",
|
|
203
|
+
"additionalProperties": false,
|
|
204
|
+
"required": [
|
|
205
|
+
"reason_match",
|
|
206
|
+
"task_text_match",
|
|
207
|
+
"path_match",
|
|
208
|
+
"route_type_weight",
|
|
209
|
+
"priority_weight"
|
|
210
|
+
],
|
|
211
|
+
"properties": {
|
|
212
|
+
"reason_match": { "type": "number" },
|
|
213
|
+
"task_text_match": { "type": "number" },
|
|
214
|
+
"path_match": { "type": "number" },
|
|
215
|
+
"route_type_weight": { "type": "number" },
|
|
216
|
+
"priority_weight": { "type": "number" }
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
"selection_reasons": {
|
|
220
|
+
"type": "array",
|
|
221
|
+
"items": { "type": "string" }
|
|
222
|
+
},
|
|
223
|
+
"verification_intents": {
|
|
224
|
+
"type": "array",
|
|
225
|
+
"items": { "type": "string" }
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
"readPlanFile": {
|
|
230
|
+
"type": "object",
|
|
231
|
+
"additionalProperties": false,
|
|
232
|
+
"required": ["path", "read_when"],
|
|
233
|
+
"properties": {
|
|
234
|
+
"path": { "type": "string" },
|
|
235
|
+
"read_when": {
|
|
236
|
+
"type": "array",
|
|
237
|
+
"items": { "type": "string" }
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
@@ -127,6 +127,38 @@ network = false
|
|
|
127
127
|
destructive = false
|
|
128
128
|
required_after = ["line_ending_warning", "formatting_change"]
|
|
129
129
|
|
|
130
|
+
[intents.quality_gaming_check]
|
|
131
|
+
status = "configured"
|
|
132
|
+
kind = "mustflow_builtin"
|
|
133
|
+
lifecycle = "oneshot"
|
|
134
|
+
run_policy = "agent_allowed"
|
|
135
|
+
description = "Inspect changed files for AI quality-gaming patterns."
|
|
136
|
+
argv = ["mf", "quality", "check", "--json"]
|
|
137
|
+
cwd = "."
|
|
138
|
+
timeout_seconds = 120
|
|
139
|
+
stdin = "closed"
|
|
140
|
+
success_exit_codes = [0]
|
|
141
|
+
writes = []
|
|
142
|
+
network = false
|
|
143
|
+
destructive = false
|
|
144
|
+
required_after = ["code_change", "behavior_change", "test_change", "public_api_change", "performance_change", "unknown_change"]
|
|
145
|
+
|
|
146
|
+
[intents.prompt_cache_audit]
|
|
147
|
+
status = "configured"
|
|
148
|
+
kind = "mustflow_builtin"
|
|
149
|
+
lifecycle = "oneshot"
|
|
150
|
+
run_policy = "agent_allowed"
|
|
151
|
+
description = "Measure prompt-cache profile sizes and configured budget status read-only."
|
|
152
|
+
argv = ["mf", "context", "--json", "--cache-profile", "all", "--cache-audit"]
|
|
153
|
+
cwd = "."
|
|
154
|
+
timeout_seconds = 120
|
|
155
|
+
stdin = "closed"
|
|
156
|
+
success_exit_codes = [0]
|
|
157
|
+
writes = []
|
|
158
|
+
network = false
|
|
159
|
+
destructive = false
|
|
160
|
+
required_after = ["mustflow_config_change", "mustflow_docs_change", "public_api_change", "performance_change", "unknown_change"]
|
|
161
|
+
|
|
130
162
|
[intents.line_endings_normalize]
|
|
131
163
|
status = "manual_only"
|
|
132
164
|
description = "Normalize tracked text files to the repository line-ending policy."
|
|
@@ -234,8 +266,8 @@ status = "configured"
|
|
|
234
266
|
kind = "mustflow_builtin"
|
|
235
267
|
lifecycle = "oneshot"
|
|
236
268
|
run_policy = "agent_allowed"
|
|
237
|
-
description = "Create or refresh the generated mustflow SQLite local index."
|
|
238
|
-
argv = ["mf", "index"]
|
|
269
|
+
description = "Create or refresh the generated mustflow SQLite local index, including bounded source anchors."
|
|
270
|
+
argv = ["mf", "index", "--source"]
|
|
239
271
|
cwd = "."
|
|
240
272
|
timeout_seconds = 300
|
|
241
273
|
stdin = "closed"
|
|
@@ -8,10 +8,12 @@ read_order = [
|
|
|
8
8
|
".mustflow/config/commands.toml",
|
|
9
9
|
".mustflow/config/preferences.toml",
|
|
10
10
|
".mustflow/config/technology.toml",
|
|
11
|
-
".mustflow/skills/
|
|
11
|
+
".mustflow/skills/router.toml",
|
|
12
12
|
]
|
|
13
13
|
optional_read_order = [
|
|
14
14
|
".mustflow/context/INDEX.md",
|
|
15
|
+
".mustflow/skills/routes.toml",
|
|
16
|
+
".mustflow/skills/INDEX.md",
|
|
15
17
|
"REPO_MAP.md",
|
|
16
18
|
]
|
|
17
19
|
|
|
@@ -19,6 +21,8 @@ optional_read_order = [
|
|
|
19
21
|
primary_instruction = "AGENTS.md"
|
|
20
22
|
repository_map = "REPO_MAP.md"
|
|
21
23
|
skill_index = ".mustflow/skills/INDEX.md"
|
|
24
|
+
skill_router = ".mustflow/skills/router.toml"
|
|
25
|
+
skill_routes = ".mustflow/skills/routes.toml"
|
|
22
26
|
command_contract = ".mustflow/config/commands.toml"
|
|
23
27
|
workflow_preferences = ".mustflow/config/preferences.toml"
|
|
24
28
|
technology_preferences = ".mustflow/config/technology.toml"
|
|
@@ -38,6 +42,8 @@ anchor_files = [
|
|
|
38
42
|
".mustflow/config/commands.toml",
|
|
39
43
|
".mustflow/config/preferences.toml",
|
|
40
44
|
".mustflow/config/technology.toml",
|
|
45
|
+
".mustflow/skills/router.toml",
|
|
46
|
+
".mustflow/skills/routes.toml",
|
|
41
47
|
".mustflow/skills/INDEX.md",
|
|
42
48
|
"README.md",
|
|
43
49
|
"PROJECT.md",
|
|
@@ -130,25 +136,24 @@ stable_prefix_policy = "hash_verified"
|
|
|
130
136
|
prefer_references_when_unchanged = true
|
|
131
137
|
exclude_volatile_state_from_prefix = true
|
|
132
138
|
include_content_hashes = true
|
|
133
|
-
max_stable_prefix_kb =
|
|
139
|
+
max_stable_prefix_kb = 48
|
|
134
140
|
max_task_context_kb = 48
|
|
135
141
|
max_volatile_suffix_kb = 24
|
|
136
142
|
|
|
137
143
|
[prompt_cache.layers.stable]
|
|
144
|
+
target_kb = 32
|
|
138
145
|
read = [
|
|
139
146
|
"AGENTS.md",
|
|
140
|
-
".mustflow/
|
|
141
|
-
".mustflow/config/mustflow.toml",
|
|
142
|
-
".mustflow/config/commands.toml",
|
|
143
|
-
".mustflow/config/technology.toml",
|
|
144
|
-
".mustflow/skills/INDEX.md",
|
|
147
|
+
".mustflow/skills/router.toml",
|
|
145
148
|
]
|
|
146
149
|
|
|
147
150
|
[prompt_cache.layers.task]
|
|
148
151
|
read_policy = "task_relevant_only"
|
|
149
152
|
sources = [
|
|
150
153
|
".mustflow/context/INDEX.md",
|
|
151
|
-
"
|
|
154
|
+
"skill_route_candidates",
|
|
155
|
+
"route_metadata_fallback",
|
|
156
|
+
"repo_map_navigation",
|
|
152
157
|
"matching_skill",
|
|
153
158
|
"relevant_source_files",
|
|
154
159
|
]
|
|
@@ -242,7 +247,7 @@ read = [
|
|
|
242
247
|
method = "hash_check"
|
|
243
248
|
read = [
|
|
244
249
|
"AGENTS.md",
|
|
245
|
-
".mustflow/skills/
|
|
250
|
+
".mustflow/skills/router.toml",
|
|
246
251
|
]
|
|
247
252
|
|
|
248
253
|
[refresh.levels.full]
|
|
@@ -254,7 +259,8 @@ read = [
|
|
|
254
259
|
".mustflow/config/commands.toml",
|
|
255
260
|
".mustflow/config/preferences.toml",
|
|
256
261
|
".mustflow/config/technology.toml",
|
|
257
|
-
".mustflow/skills/
|
|
262
|
+
".mustflow/skills/router.toml",
|
|
263
|
+
".mustflow/skills/routes.toml",
|
|
258
264
|
]
|
|
259
265
|
|
|
260
266
|
[compaction]
|
|
@@ -10,8 +10,8 @@ status_values = ["current", "stale", "needs_review", "missing"]
|
|
|
10
10
|
[documents."agents.root"]
|
|
11
11
|
source = "locales/en/AGENTS.md"
|
|
12
12
|
source_locale = "en"
|
|
13
|
-
revision =
|
|
14
|
-
translations.ko = { path = "locales/ko/AGENTS.md", source_revision =
|
|
13
|
+
revision = 17
|
|
14
|
+
translations.ko = { path = "locales/ko/AGENTS.md", source_revision = 17, status = "current" }
|
|
15
15
|
translations.zh = { path = "locales/zh/AGENTS.md", source_revision = 11, status = "needs_review" }
|
|
16
16
|
translations.es = { path = "locales/es/AGENTS.md", source_revision = 11, status = "needs_review" }
|
|
17
17
|
translations.fr = { path = "locales/fr/AGENTS.md", source_revision = 11, status = "needs_review" }
|
|
@@ -30,8 +30,8 @@ translations.hi = { path = "locales/hi/.mustflow/context/INDEX.md", source_revis
|
|
|
30
30
|
[documents."context.project"]
|
|
31
31
|
source = "locales/en/.mustflow/context/PROJECT.md"
|
|
32
32
|
source_locale = "en"
|
|
33
|
-
revision =
|
|
34
|
-
translations.ko = { path = "locales/ko/.mustflow/context/PROJECT.md", source_revision =
|
|
33
|
+
revision = 3
|
|
34
|
+
translations.ko = { path = "locales/ko/.mustflow/context/PROJECT.md", source_revision = 3, status = "current" }
|
|
35
35
|
translations.zh = { path = "locales/zh/.mustflow/context/PROJECT.md", source_revision = 1, status = "needs_review" }
|
|
36
36
|
translations.es = { path = "locales/es/.mustflow/context/PROJECT.md", source_revision = 1, status = "needs_review" }
|
|
37
37
|
translations.fr = { path = "locales/fr/.mustflow/context/PROJECT.md", source_revision = 1, status = "needs_review" }
|
|
@@ -40,8 +40,8 @@ translations.hi = { path = "locales/hi/.mustflow/context/PROJECT.md", source_rev
|
|
|
40
40
|
[documents."docs.agent-workflow"]
|
|
41
41
|
source = "locales/en/.mustflow/docs/agent-workflow.md"
|
|
42
42
|
source_locale = "en"
|
|
43
|
-
revision =
|
|
44
|
-
translations.ko = { path = "locales/ko/.mustflow/docs/agent-workflow.md", source_revision =
|
|
43
|
+
revision = 23
|
|
44
|
+
translations.ko = { path = "locales/ko/.mustflow/docs/agent-workflow.md", source_revision = 23, status = "current" }
|
|
45
45
|
translations.zh = { path = "locales/zh/.mustflow/docs/agent-workflow.md", source_revision = 18, status = "needs_review" }
|
|
46
46
|
translations.es = { path = "locales/es/.mustflow/docs/agent-workflow.md", source_revision = 18, status = "needs_review" }
|
|
47
47
|
translations.fr = { path = "locales/fr/.mustflow/docs/agent-workflow.md", source_revision = 18, status = "needs_review" }
|
|
@@ -62,7 +62,7 @@ translations = {}
|
|
|
62
62
|
[documents."skills.index"]
|
|
63
63
|
source = "locales/en/.mustflow/skills/INDEX.md"
|
|
64
64
|
source_locale = "en"
|
|
65
|
-
revision =
|
|
65
|
+
revision = 169
|
|
66
66
|
translations = {}
|
|
67
67
|
|
|
68
68
|
[documents."skill.adapter-boundary"]
|
|
@@ -119,6 +119,12 @@ source_locale = "en"
|
|
|
119
119
|
revision = 2
|
|
120
120
|
translations = {}
|
|
121
121
|
|
|
122
|
+
[documents."skill.quality-gaming-guard"]
|
|
123
|
+
source = "locales/en/.mustflow/skills/quality-gaming-guard/SKILL.md"
|
|
124
|
+
source_locale = "en"
|
|
125
|
+
revision = 2
|
|
126
|
+
translations = {}
|
|
127
|
+
|
|
122
128
|
[documents."skill.module-boundary-review"]
|
|
123
129
|
source = "locales/en/.mustflow/skills/module-boundary-review/SKILL.md"
|
|
124
130
|
source_locale = "en"
|
|
@@ -978,7 +984,7 @@ translations = {}
|
|
|
978
984
|
[documents."skill.llm-token-cost-control-review"]
|
|
979
985
|
source = "locales/en/.mustflow/skills/llm-token-cost-control-review/SKILL.md"
|
|
980
986
|
source_locale = "en"
|
|
981
|
-
revision =
|
|
987
|
+
revision = 2
|
|
982
988
|
translations = {}
|
|
983
989
|
|
|
984
990
|
[documents."skill.llm-response-latency-review"]
|
|
@@ -3,7 +3,7 @@ mustflow_doc: context.project
|
|
|
3
3
|
kind: mustflow-context
|
|
4
4
|
locale: en
|
|
5
5
|
canonical: true
|
|
6
|
-
revision:
|
|
6
|
+
revision: 3
|
|
7
7
|
name: project
|
|
8
8
|
authority: contextual
|
|
9
9
|
lifecycle: user-editable
|
|
@@ -58,9 +58,11 @@ Unset. List paths, public APIs, generated files, migrations, secrets, or compati
|
|
|
58
58
|
- `.mustflow/docs/agent-workflow.md`
|
|
59
59
|
- `.mustflow/config/mustflow.toml`
|
|
60
60
|
- `.mustflow/config/commands.toml`
|
|
61
|
-
- `.mustflow/skills/
|
|
61
|
+
- `.mustflow/skills/router.toml`
|
|
62
|
+
- `.mustflow/skills/routes.toml` only when detailed route metadata is needed
|
|
63
|
+
- `.mustflow/skills/INDEX.md` only when human-readable route evidence is needed
|
|
62
64
|
|
|
63
65
|
## Staleness Check
|
|
64
66
|
|
|
65
67
|
- If this file conflicts with current code, tests, command contracts, or user instructions, treat it as stale and report the conflict.
|
|
66
|
-
- Update this file only when the project direction, non-goals, or repository-wide promises change.
|
|
68
|
+
- Update this file only when the project direction, non-goals, or repository-wide promises change.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
mustflow_doc: docs.agent-workflow
|
|
3
3
|
locale: en
|
|
4
4
|
canonical: true
|
|
5
|
-
revision:
|
|
5
|
+
revision: 23
|
|
6
6
|
lifecycle: mustflow-owned
|
|
7
7
|
authority: workflow-policy
|
|
8
8
|
---
|
|
@@ -31,7 +31,9 @@ mustflow documents have specific, narrow roles. Do not move a rule into a lower-
|
|
|
31
31
|
| `.mustflow/config/preferences.toml` | Repository-level defaults for style, language, Git suggestions, testing tendency, verification selection, and version-impact handling. | Lower-authority preferences; not permissions. | Repository-local TOML, user-customizable. |
|
|
32
32
|
| `.mustflow/context/INDEX.md` | Router for task-specific context files. | Selects optional context only; not a policy manual. | mustflow-owned Markdown. |
|
|
33
33
|
| `.mustflow/context/PROJECT.md` | Cautious project facts, unknowns, and domain conventions. | Contextual reference below user instructions, code, tests, commands, and configured policies. | User-editable context. |
|
|
34
|
-
| `.mustflow/skills/
|
|
34
|
+
| `.mustflow/skills/router.toml` | Stable compact route taxonomy and fallback rules for prompt-cache-friendly first-pass skill selection. | Selection kernel only; procedure detail remains in `SKILL.md`. | mustflow-owned TOML. |
|
|
35
|
+
| `.mustflow/skills/routes.toml` | Full route metadata for detailed procedure selection when the compact router is insufficient. | Selection hint only; procedure detail remains in `SKILL.md`. | mustflow-owned TOML. |
|
|
36
|
+
| `.mustflow/skills/INDEX.md` | Expanded human-readable route table for detailed skill selection and route maintenance. | Selection contract only; procedure detail remains in `SKILL.md`. | mustflow-owned Markdown. |
|
|
35
37
|
| `.mustflow/skills/<name>/SKILL.md` | Repeatable task procedure with inputs, allowed scope, checks, and reporting format. | Procedure guidance only; cannot authorize commands or override rules. | mustflow-owned Markdown, optionally localized. |
|
|
36
38
|
| `REPO_MAP.md` | Generated anchor map for broad navigation and nested repository entry points. | Generated navigation aid below current files and instructions. | Generated; refresh with the configured `repo_map` intent or `mf map`. |
|
|
37
39
|
|
|
@@ -53,10 +55,12 @@ Skills are task procedures, not autonomous tools. Activating a skill means readi
|
|
|
53
55
|
|
|
54
56
|
At task start and before the first edit:
|
|
55
57
|
|
|
56
|
-
1. Read `.mustflow/skills/
|
|
57
|
-
2. Match the current task against
|
|
58
|
-
3. Read
|
|
59
|
-
4.
|
|
58
|
+
1. Read `.mustflow/skills/router.toml` for the stable route taxonomy, category signals, selection limits, and fallback rules.
|
|
59
|
+
2. Match the current task against category signals, user intent, expected paths, discovered technology, and event signals.
|
|
60
|
+
3. Read `.mustflow/skills/routes.toml` when the compact router is insufficient, the task edits skill routing, detailed route metadata is needed, or route confidence is ambiguous.
|
|
61
|
+
4. Read `.mustflow/skills/INDEX.md` when full route metadata is insufficient, the task edits the expanded route table, or human-readable trigger evidence is needed.
|
|
62
|
+
5. Read every matching `SKILL.md` before editing that part of the work.
|
|
63
|
+
6. If no skill applies, proceed with the smallest safe change under `AGENTS.md` and `.mustflow/config/commands.toml`.
|
|
60
64
|
|
|
61
65
|
Activate a skill later if new evidence changes the task type. For example, a failing configured command activates failure triage; a test contract change activates test maintenance; and a documentation or workflow change activates documentation update.
|
|
62
66
|
|
|
@@ -82,8 +86,8 @@ Prompt caching is a performance optimization, not an authority source. A cached
|
|
|
82
86
|
|
|
83
87
|
Hosts and agent harnesses assembling model input should keep context in this order:
|
|
84
88
|
|
|
85
|
-
1. Stable prefix: repository rules and
|
|
86
|
-
2. Task context: selected context files, matching skills, repository-map anchors, relevant source files, and `mf search --json` results with `cache_layer` set to `task`.
|
|
89
|
+
1. Stable prefix: repository entrypoint rules and the compact route kernel from `mf context --json --cache-profile stable`.
|
|
90
|
+
2. Task context: selected context files, workflow/configuration refresh slices, command intent definitions, full route metadata fallback, detailed skill index fallback, matching skills, repository-map anchors, relevant source files, and `mf search --json` results with `cache_layer` set to `task`.
|
|
87
91
|
3. Volatile suffix: current user request, changed-file lists, command output tails, latest run receipt metadata, timestamps, and any `mf search --json` result whose `volatile` field is `true`.
|
|
88
92
|
|
|
89
93
|
Before reusing a stable prefix, compare the reported content hashes with the current files. If any stable document hash changes, reread the document instead of reusing cached text. Do not place absolute local paths, run receipt timestamps, command output, changed files, or current user task text before the stable prefix.
|
|
@@ -126,7 +130,7 @@ Use `.mustflow/config/mustflow.toml` `[refresh]` to determine the refresh level:
|
|
|
126
130
|
- `command`: reread `AGENTS.md` and `.mustflow/config/commands.toml`
|
|
127
131
|
- `edit`: reread `AGENTS.md`, `.mustflow/config/mustflow.toml`, and `.mustflow/docs/agent-workflow.md` before sensitive edits
|
|
128
132
|
- `report`: reread `AGENTS.md`, `.mustflow/config/mustflow.toml`, and `.mustflow/config/preferences.toml` before the final report
|
|
129
|
-
- `skill`: reread `AGENTS.md` and `.mustflow/skills/
|
|
133
|
+
- `skill`: reread `AGENTS.md` and `.mustflow/skills/router.toml`
|
|
130
134
|
- `full`: reread the full mustflow read sequence
|
|
131
135
|
|
|
132
136
|
`before_command_run` is a freshness checkpoint for the current command intent, not a requirement to reread every file before every repeated command when the command contract has not changed.
|