mustflow 2.28.0 → 2.29.0
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/dist/cli/commands/context.js +1 -0
- package/dist/cli/commands/help.js +55 -1
- package/dist/cli/commands/tech.js +346 -0
- package/dist/cli/i18n/en.js +1 -0
- package/dist/cli/i18n/es.js +1 -0
- package/dist/cli/i18n/fr.js +1 -0
- package/dist/cli/i18n/hi.js +1 -0
- package/dist/cli/i18n/ko.js +1 -0
- package/dist/cli/i18n/zh.js +1 -0
- package/dist/cli/index.js +1 -0
- package/dist/cli/lib/agent-context.js +16 -0
- package/dist/cli/lib/command-registry.js +6 -0
- package/dist/cli/lib/validation/index.js +11 -0
- package/dist/cli/lib/validation/primitives.js +5 -0
- package/dist/core/technology-preferences.js +189 -0
- package/package.json +1 -1
- package/schemas/context-report.schema.json +61 -0
- package/templates/default/common/.mustflow/config/mustflow.toml +8 -0
- package/templates/default/common/.mustflow/config/technology.toml +20 -0
- package/templates/default/i18n.toml +78 -12
- package/templates/default/locales/en/.mustflow/skills/INDEX.md +33 -1
- package/templates/default/locales/en/.mustflow/skills/code-review/SKILL.md +15 -5
- package/templates/default/locales/en/.mustflow/skills/codebase-orientation/SKILL.md +15 -8
- package/templates/default/locales/en/.mustflow/skills/command-intent-mapping-gate/SKILL.md +124 -0
- package/templates/default/locales/en/.mustflow/skills/completion-evidence-gate/SKILL.md +178 -0
- package/templates/default/locales/en/.mustflow/skills/contract-sync-check/SKILL.md +9 -3
- package/templates/default/locales/en/.mustflow/skills/dependency-reality-check/SKILL.md +6 -3
- package/templates/default/locales/en/.mustflow/skills/evidence-stall-breaker/SKILL.md +166 -0
- package/templates/default/locales/en/.mustflow/skills/external-prompt-injection-defense/SKILL.md +8 -6
- package/templates/default/locales/en/.mustflow/skills/provenance-license-gate/SKILL.md +131 -0
- package/templates/default/locales/en/.mustflow/skills/public-json-contract-change/SKILL.md +133 -0
- package/templates/default/locales/en/.mustflow/skills/restricted-handoff-resume/SKILL.md +122 -0
- package/templates/default/locales/en/.mustflow/skills/routes.toml +60 -0
- package/templates/default/locales/en/.mustflow/skills/runtime-target-selection/SKILL.md +203 -0
- package/templates/default/locales/en/.mustflow/skills/rust-code-change/SKILL.md +55 -18
- package/templates/default/locales/en/.mustflow/skills/secret-exposure-response/SKILL.md +125 -0
- package/templates/default/locales/en/.mustflow/skills/security-privacy-review/SKILL.md +10 -1
- package/templates/default/locales/en/.mustflow/skills/skill-authoring/SKILL.md +9 -5
- package/templates/default/locales/en/.mustflow/skills/source-freshness-check/SKILL.md +3 -2
- package/templates/default/locales/en/.mustflow/skills/structure-first-engineering/SKILL.md +205 -0
- package/templates/default/locales/en/.mustflow/skills/template-install-surface-sync/SKILL.md +131 -0
- package/templates/default/locales/en/AGENTS.md +8 -7
- package/templates/default/locales/ko/AGENTS.md +8 -7
- package/templates/default/manifest.toml +66 -1
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { isRecord } from './config-loading.js';
|
|
4
|
+
export const TECHNOLOGY_CONFIG_RELATIVE_PATH = '.mustflow/config/technology.toml';
|
|
5
|
+
export const TECHNOLOGY_SCHEMA_VERSION = '1';
|
|
6
|
+
export const TECHNOLOGY_AUTHORITY = 'hint';
|
|
7
|
+
export const TECHNOLOGY_GUIDANCE = [
|
|
8
|
+
'Technology preferences are hints only; inspect the current repository stack before proposing changes.',
|
|
9
|
+
'They do not authorize dependency installation, framework migration, command execution, or ignoring existing style.',
|
|
10
|
+
'When adding packages, verify package reality and use the configured command contract or direct user approval.',
|
|
11
|
+
];
|
|
12
|
+
export const TECHNOLOGY_KINDS = [
|
|
13
|
+
'language',
|
|
14
|
+
'runtime',
|
|
15
|
+
'framework',
|
|
16
|
+
'library',
|
|
17
|
+
'tool',
|
|
18
|
+
'service',
|
|
19
|
+
'platform',
|
|
20
|
+
];
|
|
21
|
+
export const TECHNOLOGY_STATUSES = ['preferred', 'allowed', 'avoid'];
|
|
22
|
+
function isTechnologyKind(value) {
|
|
23
|
+
return TECHNOLOGY_KINDS.includes(value);
|
|
24
|
+
}
|
|
25
|
+
function isTechnologyStatus(value) {
|
|
26
|
+
return TECHNOLOGY_STATUSES.includes(value);
|
|
27
|
+
}
|
|
28
|
+
function readString(value) {
|
|
29
|
+
return typeof value === 'string' && value.trim().length > 0 ? value.trim() : null;
|
|
30
|
+
}
|
|
31
|
+
function readStringArray(value) {
|
|
32
|
+
if (!Array.isArray(value)) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const entries = value
|
|
36
|
+
.filter((entry) => typeof entry === 'string')
|
|
37
|
+
.map((entry) => entry.trim())
|
|
38
|
+
.filter((entry) => entry.length > 0);
|
|
39
|
+
return entries.length === value.length ? entries : null;
|
|
40
|
+
}
|
|
41
|
+
function normalizeStringList(values) {
|
|
42
|
+
return [...new Set(values.map((value) => value.trim()).filter((value) => value.length > 0))];
|
|
43
|
+
}
|
|
44
|
+
export function normalizeTechnologyName(value) {
|
|
45
|
+
return value.trim().replace(/\s+/gu, ' ');
|
|
46
|
+
}
|
|
47
|
+
export function normalizeTechnologyKey(value) {
|
|
48
|
+
return normalizeTechnologyName(value).toLowerCase();
|
|
49
|
+
}
|
|
50
|
+
function slug(value) {
|
|
51
|
+
const normalized = normalizeTechnologyKey(value)
|
|
52
|
+
.replace(/[^a-z0-9]+/gu, '-')
|
|
53
|
+
.replace(/^-+|-+$/gu, '');
|
|
54
|
+
return normalized.length > 0 ? normalized : 'item';
|
|
55
|
+
}
|
|
56
|
+
export function createTechnologyPreferenceId(kind, name, scope) {
|
|
57
|
+
const scopePart = scope.length > 0 ? `${slug(scope[0])}.` : '';
|
|
58
|
+
return `${kind}.${scopePart}${slug(name)}`;
|
|
59
|
+
}
|
|
60
|
+
function normalizePreference(raw, index, issues) {
|
|
61
|
+
const rawKind = readString(raw.kind);
|
|
62
|
+
if (!rawKind || !isTechnologyKind(rawKind)) {
|
|
63
|
+
issues.push(`[preferences.${index}].kind must be one of ${TECHNOLOGY_KINDS.join(', ')}`);
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
const rawName = readString(raw.name);
|
|
67
|
+
if (!rawName) {
|
|
68
|
+
issues.push(`[preferences.${index}].name must be a non-empty string`);
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
const rawStatus = readString(raw.status) ?? 'preferred';
|
|
72
|
+
if (!isTechnologyStatus(rawStatus)) {
|
|
73
|
+
issues.push(`[preferences.${index}].status must be preferred, allowed, or avoid`);
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const rawAuthority = readString(raw.authority) ?? TECHNOLOGY_AUTHORITY;
|
|
77
|
+
if (rawAuthority !== TECHNOLOGY_AUTHORITY) {
|
|
78
|
+
issues.push(`[preferences.${index}].authority must be "${TECHNOLOGY_AUTHORITY}"`);
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
const scope = normalizeStringList(readStringArray(raw.scope) ?? []);
|
|
82
|
+
const packages = normalizeStringList(readStringArray(raw.packages) ?? []);
|
|
83
|
+
const constraints = normalizeStringList(readStringArray(raw.constraints) ?? []);
|
|
84
|
+
const id = readString(raw.id) ?? createTechnologyPreferenceId(rawKind, rawName, scope);
|
|
85
|
+
return {
|
|
86
|
+
id,
|
|
87
|
+
kind: rawKind,
|
|
88
|
+
name: normalizeTechnologyName(rawName),
|
|
89
|
+
status: rawStatus,
|
|
90
|
+
authority: TECHNOLOGY_AUTHORITY,
|
|
91
|
+
scope,
|
|
92
|
+
ecosystem: readString(raw.ecosystem),
|
|
93
|
+
packages,
|
|
94
|
+
rationale: readString(raw.rationale),
|
|
95
|
+
constraints,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
export function normalizeTechnologyPreferencesTable(table, exists) {
|
|
99
|
+
const issues = [];
|
|
100
|
+
const schemaVersion = table ? readString(table.schema_version) ?? '' : TECHNOLOGY_SCHEMA_VERSION;
|
|
101
|
+
if (table && schemaVersion !== TECHNOLOGY_SCHEMA_VERSION) {
|
|
102
|
+
issues.push(`[technology].schema_version must be "${TECHNOLOGY_SCHEMA_VERSION}"`);
|
|
103
|
+
}
|
|
104
|
+
const rawPreferences = table?.preferences;
|
|
105
|
+
const preferences = [];
|
|
106
|
+
if (rawPreferences !== undefined) {
|
|
107
|
+
if (!Array.isArray(rawPreferences)) {
|
|
108
|
+
issues.push('[technology].preferences must be an array of tables');
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
for (const [index, rawPreference] of rawPreferences.entries()) {
|
|
112
|
+
if (!isRecord(rawPreference)) {
|
|
113
|
+
issues.push(`[preferences.${index}] must be a TOML table`);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const preference = normalizePreference(rawPreference, index, issues);
|
|
117
|
+
if (preference) {
|
|
118
|
+
preferences.push(preference);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const seenIds = new Set();
|
|
124
|
+
for (const preference of preferences) {
|
|
125
|
+
if (seenIds.has(preference.id)) {
|
|
126
|
+
issues.push(`[technology].preferences contains duplicate id "${preference.id}"`);
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
seenIds.add(preference.id);
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
path: TECHNOLOGY_CONFIG_RELATIVE_PATH,
|
|
133
|
+
exists,
|
|
134
|
+
schema_version: schemaVersion || TECHNOLOGY_SCHEMA_VERSION,
|
|
135
|
+
authority: TECHNOLOGY_AUTHORITY,
|
|
136
|
+
guidance: TECHNOLOGY_GUIDANCE,
|
|
137
|
+
preferences,
|
|
138
|
+
issues,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
export function technologyPreferenceMatches(preference, filters) {
|
|
142
|
+
if (filters.kind && preference.kind !== filters.kind) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
if (filters.status && preference.status !== filters.status) {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
if (filters.scope) {
|
|
149
|
+
const expectedScope = normalizeTechnologyKey(filters.scope);
|
|
150
|
+
if (!preference.scope.some((scope) => normalizeTechnologyKey(scope) === expectedScope)) {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
function quoteTomlString(value) {
|
|
157
|
+
return JSON.stringify(value);
|
|
158
|
+
}
|
|
159
|
+
function renderStringArray(values) {
|
|
160
|
+
return `[${values.map((value) => quoteTomlString(value)).join(', ')}]`;
|
|
161
|
+
}
|
|
162
|
+
export function serializeTechnologyPreferences(preferences) {
|
|
163
|
+
const lines = [
|
|
164
|
+
`schema_version = ${quoteTomlString(TECHNOLOGY_SCHEMA_VERSION)}`,
|
|
165
|
+
'',
|
|
166
|
+
'# Repository-local technology preferences for agents.',
|
|
167
|
+
'# Entries here are low-authority hints. They do not authorize dependency installation,',
|
|
168
|
+
'# migration, command execution, or ignoring current project style.',
|
|
169
|
+
];
|
|
170
|
+
for (const preference of [...preferences].sort((left, right) => left.id.localeCompare(right.id))) {
|
|
171
|
+
lines.push('', '[[preferences]]', `id = ${quoteTomlString(preference.id)}`, `kind = ${quoteTomlString(preference.kind)}`, `name = ${quoteTomlString(preference.name)}`, `status = ${quoteTomlString(preference.status)}`, `authority = ${quoteTomlString(TECHNOLOGY_AUTHORITY)}`, `scope = ${renderStringArray(preference.scope)}`);
|
|
172
|
+
if (preference.ecosystem) {
|
|
173
|
+
lines.push(`ecosystem = ${quoteTomlString(preference.ecosystem)}`);
|
|
174
|
+
}
|
|
175
|
+
if (preference.packages.length > 0) {
|
|
176
|
+
lines.push(`packages = ${renderStringArray(preference.packages)}`);
|
|
177
|
+
}
|
|
178
|
+
if (preference.rationale) {
|
|
179
|
+
lines.push(`rationale = ${quoteTomlString(preference.rationale)}`);
|
|
180
|
+
}
|
|
181
|
+
if (preference.constraints.length > 0) {
|
|
182
|
+
lines.push(`constraints = ${renderStringArray(preference.constraints)}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return `${lines.join('\n')}\n`;
|
|
186
|
+
}
|
|
187
|
+
export function technologyConfigExists(projectRoot) {
|
|
188
|
+
return existsSync(path.join(projectRoot, ...TECHNOLOGY_CONFIG_RELATIVE_PATH.split('/')));
|
|
189
|
+
}
|
package/package.json
CHANGED
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
"items": { "$ref": "#/$defs/pathContext" }
|
|
48
48
|
},
|
|
49
49
|
"command_contract": { "$ref": "#/$defs/commandContractContext" },
|
|
50
|
+
"technology_preferences": { "$ref": "#/$defs/technologyPreferencesContext" },
|
|
50
51
|
"effective_policy": { "$ref": "#/$defs/effectivePolicy" },
|
|
51
52
|
"state_policy": { "$ref": "#/$defs/statePolicy" },
|
|
52
53
|
"blocked_actions": {
|
|
@@ -149,6 +150,66 @@
|
|
|
149
150
|
}
|
|
150
151
|
}
|
|
151
152
|
},
|
|
153
|
+
"technologyPreference": {
|
|
154
|
+
"type": "object",
|
|
155
|
+
"additionalProperties": false,
|
|
156
|
+
"required": [
|
|
157
|
+
"id",
|
|
158
|
+
"kind",
|
|
159
|
+
"name",
|
|
160
|
+
"status",
|
|
161
|
+
"authority",
|
|
162
|
+
"scope",
|
|
163
|
+
"ecosystem",
|
|
164
|
+
"packages",
|
|
165
|
+
"rationale",
|
|
166
|
+
"constraints"
|
|
167
|
+
],
|
|
168
|
+
"properties": {
|
|
169
|
+
"id": { "type": "string" },
|
|
170
|
+
"kind": { "enum": ["language", "runtime", "framework", "library", "tool", "service", "platform"] },
|
|
171
|
+
"name": { "type": "string" },
|
|
172
|
+
"status": { "enum": ["preferred", "allowed", "avoid"] },
|
|
173
|
+
"authority": { "const": "hint" },
|
|
174
|
+
"scope": {
|
|
175
|
+
"type": "array",
|
|
176
|
+
"items": { "type": "string" }
|
|
177
|
+
},
|
|
178
|
+
"ecosystem": { "type": ["string", "null"] },
|
|
179
|
+
"packages": {
|
|
180
|
+
"type": "array",
|
|
181
|
+
"items": { "type": "string" }
|
|
182
|
+
},
|
|
183
|
+
"rationale": { "type": ["string", "null"] },
|
|
184
|
+
"constraints": {
|
|
185
|
+
"type": "array",
|
|
186
|
+
"items": { "type": "string" }
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
"technologyPreferencesContext": {
|
|
191
|
+
"type": "object",
|
|
192
|
+
"additionalProperties": false,
|
|
193
|
+
"required": ["path", "exists", "authority", "guidance", "count", "preferences", "issues"],
|
|
194
|
+
"properties": {
|
|
195
|
+
"path": { "type": "string" },
|
|
196
|
+
"exists": { "type": "boolean" },
|
|
197
|
+
"authority": { "const": "hint" },
|
|
198
|
+
"guidance": {
|
|
199
|
+
"type": "array",
|
|
200
|
+
"items": { "type": "string" }
|
|
201
|
+
},
|
|
202
|
+
"count": { "type": "integer", "minimum": 0 },
|
|
203
|
+
"preferences": {
|
|
204
|
+
"type": "array",
|
|
205
|
+
"items": { "$ref": "#/$defs/technologyPreference" }
|
|
206
|
+
},
|
|
207
|
+
"issues": {
|
|
208
|
+
"type": "array",
|
|
209
|
+
"items": { "type": "string" }
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
},
|
|
152
213
|
"effectivePolicy": {
|
|
153
214
|
"type": "object",
|
|
154
215
|
"additionalProperties": false,
|
|
@@ -7,6 +7,7 @@ read_order = [
|
|
|
7
7
|
".mustflow/config/mustflow.toml",
|
|
8
8
|
".mustflow/config/commands.toml",
|
|
9
9
|
".mustflow/config/preferences.toml",
|
|
10
|
+
".mustflow/config/technology.toml",
|
|
10
11
|
".mustflow/skills/INDEX.md",
|
|
11
12
|
]
|
|
12
13
|
optional_read_order = [
|
|
@@ -20,6 +21,7 @@ repository_map = "REPO_MAP.md"
|
|
|
20
21
|
skill_index = ".mustflow/skills/INDEX.md"
|
|
21
22
|
command_contract = ".mustflow/config/commands.toml"
|
|
22
23
|
workflow_preferences = ".mustflow/config/preferences.toml"
|
|
24
|
+
technology_preferences = ".mustflow/config/technology.toml"
|
|
23
25
|
workflow_reference = ".mustflow/docs/agent-workflow.md"
|
|
24
26
|
context_index = ".mustflow/context/INDEX.md"
|
|
25
27
|
project_context = ".mustflow/context/PROJECT.md"
|
|
@@ -35,6 +37,7 @@ anchor_files = [
|
|
|
35
37
|
".mustflow/config/mustflow.toml",
|
|
36
38
|
".mustflow/config/commands.toml",
|
|
37
39
|
".mustflow/config/preferences.toml",
|
|
40
|
+
".mustflow/config/technology.toml",
|
|
38
41
|
".mustflow/skills/INDEX.md",
|
|
39
42
|
"README.md",
|
|
40
43
|
"PROJECT.md",
|
|
@@ -98,6 +101,7 @@ command_contract = true
|
|
|
98
101
|
skills = true
|
|
99
102
|
repo_map = "generated_optional"
|
|
100
103
|
preferences = "optional"
|
|
104
|
+
technology_preferences = "optional"
|
|
101
105
|
context = "optional"
|
|
102
106
|
local_index = "generated_optional"
|
|
103
107
|
work_items = "disabled"
|
|
@@ -136,6 +140,7 @@ read = [
|
|
|
136
140
|
".mustflow/docs/agent-workflow.md",
|
|
137
141
|
".mustflow/config/mustflow.toml",
|
|
138
142
|
".mustflow/config/commands.toml",
|
|
143
|
+
".mustflow/config/technology.toml",
|
|
139
144
|
".mustflow/skills/INDEX.md",
|
|
140
145
|
]
|
|
141
146
|
|
|
@@ -230,6 +235,7 @@ read = [
|
|
|
230
235
|
"AGENTS.md",
|
|
231
236
|
".mustflow/config/mustflow.toml",
|
|
232
237
|
".mustflow/config/preferences.toml",
|
|
238
|
+
".mustflow/config/technology.toml",
|
|
233
239
|
]
|
|
234
240
|
|
|
235
241
|
[refresh.levels.skill]
|
|
@@ -247,6 +253,7 @@ read = [
|
|
|
247
253
|
".mustflow/config/mustflow.toml",
|
|
248
254
|
".mustflow/config/commands.toml",
|
|
249
255
|
".mustflow/config/preferences.toml",
|
|
256
|
+
".mustflow/config/technology.toml",
|
|
250
257
|
".mustflow/skills/INDEX.md",
|
|
251
258
|
]
|
|
252
259
|
|
|
@@ -369,6 +376,7 @@ canonical = [
|
|
|
369
376
|
".mustflow/config/commands.toml",
|
|
370
377
|
".mustflow/config/mustflow.toml",
|
|
371
378
|
".mustflow/config/preferences.toml",
|
|
379
|
+
".mustflow/config/technology.toml",
|
|
372
380
|
".mustflow/context/**",
|
|
373
381
|
".mustflow/docs/**",
|
|
374
382
|
".mustflow/skills/**",
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
schema_version = "1"
|
|
2
|
+
|
|
3
|
+
# Repository-local technology preferences for agents.
|
|
4
|
+
# Entries here are low-authority hints. They do not authorize dependency installation,
|
|
5
|
+
# migration, command execution, or ignoring current project style.
|
|
6
|
+
#
|
|
7
|
+
# [[preferences]]
|
|
8
|
+
# id = "framework.frontend.nextjs"
|
|
9
|
+
# kind = "framework"
|
|
10
|
+
# name = "nextjs"
|
|
11
|
+
# status = "preferred"
|
|
12
|
+
# authority = "hint"
|
|
13
|
+
# scope = ["frontend", "web", "react"]
|
|
14
|
+
# ecosystem = "npm"
|
|
15
|
+
# packages = ["next", "react", "react-dom"]
|
|
16
|
+
# rationale = "Preferred React full-stack framework for product web apps."
|
|
17
|
+
# constraints = [
|
|
18
|
+
# "Check existing project stack before proposing migration.",
|
|
19
|
+
# "Do not install packages without direct user approval or a configured command intent.",
|
|
20
|
+
# ]
|
|
@@ -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 = 14
|
|
14
|
+
translations.ko = { path = "locales/ko/AGENTS.md", source_revision = 14, 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" }
|
|
@@ -53,10 +53,16 @@ source_locale = "en"
|
|
|
53
53
|
revision = 4
|
|
54
54
|
translations = {}
|
|
55
55
|
|
|
56
|
+
[documents."config.technology"]
|
|
57
|
+
source = "common/.mustflow/config/technology.toml"
|
|
58
|
+
source_locale = "en"
|
|
59
|
+
revision = 1
|
|
60
|
+
translations = {}
|
|
61
|
+
|
|
56
62
|
[documents."skills.index"]
|
|
57
63
|
source = "locales/en/.mustflow/skills/INDEX.md"
|
|
58
64
|
source_locale = "en"
|
|
59
|
-
revision =
|
|
65
|
+
revision = 94
|
|
60
66
|
translations = {}
|
|
61
67
|
|
|
62
68
|
[documents."skill.adapter-boundary"]
|
|
@@ -92,13 +98,13 @@ translations = {}
|
|
|
92
98
|
[documents."skill.code-review"]
|
|
93
99
|
source = "locales/en/.mustflow/skills/code-review/SKILL.md"
|
|
94
100
|
source_locale = "en"
|
|
95
|
-
revision =
|
|
101
|
+
revision = 6
|
|
96
102
|
translations = {}
|
|
97
103
|
|
|
98
104
|
[documents."skill.contract-sync-check"]
|
|
99
105
|
source = "locales/en/.mustflow/skills/contract-sync-check/SKILL.md"
|
|
100
106
|
source_locale = "en"
|
|
101
|
-
revision =
|
|
107
|
+
revision = 3
|
|
102
108
|
translations = {}
|
|
103
109
|
|
|
104
110
|
[documents."skill.date-number-audit"]
|
|
@@ -128,7 +134,7 @@ translations = {}
|
|
|
128
134
|
[documents."skill.dependency-reality-check"]
|
|
129
135
|
source = "locales/en/.mustflow/skills/dependency-reality-check/SKILL.md"
|
|
130
136
|
source_locale = "en"
|
|
131
|
-
revision =
|
|
137
|
+
revision = 7
|
|
132
138
|
translations = {}
|
|
133
139
|
|
|
134
140
|
[documents."skill.dependency-upgrade-review"]
|
|
@@ -164,7 +170,7 @@ translations = {}
|
|
|
164
170
|
[documents."skill.codebase-orientation"]
|
|
165
171
|
source = "locales/en/.mustflow/skills/codebase-orientation/SKILL.md"
|
|
166
172
|
source_locale = "en"
|
|
167
|
-
revision =
|
|
173
|
+
revision = 3
|
|
168
174
|
translations = {}
|
|
169
175
|
|
|
170
176
|
[documents."skill.astro-code-change"]
|
|
@@ -266,7 +272,19 @@ translations = {}
|
|
|
266
272
|
[documents."skill.rust-code-change"]
|
|
267
273
|
source = "locales/en/.mustflow/skills/rust-code-change/SKILL.md"
|
|
268
274
|
source_locale = "en"
|
|
269
|
-
revision =
|
|
275
|
+
revision = 3
|
|
276
|
+
translations = {}
|
|
277
|
+
|
|
278
|
+
[documents."skill.runtime-target-selection"]
|
|
279
|
+
source = "locales/en/.mustflow/skills/runtime-target-selection/SKILL.md"
|
|
280
|
+
source_locale = "en"
|
|
281
|
+
revision = 1
|
|
282
|
+
translations = {}
|
|
283
|
+
|
|
284
|
+
[documents."skill.structure-first-engineering"]
|
|
285
|
+
source = "locales/en/.mustflow/skills/structure-first-engineering/SKILL.md"
|
|
286
|
+
source_locale = "en"
|
|
287
|
+
revision = 1
|
|
270
288
|
translations = {}
|
|
271
289
|
|
|
272
290
|
[documents."skill.svelte-code-change"]
|
|
@@ -305,6 +323,36 @@ source_locale = "en"
|
|
|
305
323
|
revision = 3
|
|
306
324
|
translations = {}
|
|
307
325
|
|
|
326
|
+
[documents."skill.completion-evidence-gate"]
|
|
327
|
+
source = "locales/en/.mustflow/skills/completion-evidence-gate/SKILL.md"
|
|
328
|
+
source_locale = "en"
|
|
329
|
+
revision = 2
|
|
330
|
+
translations = {}
|
|
331
|
+
|
|
332
|
+
[documents."skill.evidence-stall-breaker"]
|
|
333
|
+
source = "locales/en/.mustflow/skills/evidence-stall-breaker/SKILL.md"
|
|
334
|
+
source_locale = "en"
|
|
335
|
+
revision = 1
|
|
336
|
+
translations = {}
|
|
337
|
+
|
|
338
|
+
[documents."skill.command-intent-mapping-gate"]
|
|
339
|
+
source = "locales/en/.mustflow/skills/command-intent-mapping-gate/SKILL.md"
|
|
340
|
+
source_locale = "en"
|
|
341
|
+
revision = 1
|
|
342
|
+
translations = {}
|
|
343
|
+
|
|
344
|
+
[documents."skill.public-json-contract-change"]
|
|
345
|
+
source = "locales/en/.mustflow/skills/public-json-contract-change/SKILL.md"
|
|
346
|
+
source_locale = "en"
|
|
347
|
+
revision = 1
|
|
348
|
+
translations = {}
|
|
349
|
+
|
|
350
|
+
[documents."skill.provenance-license-gate"]
|
|
351
|
+
source = "locales/en/.mustflow/skills/provenance-license-gate/SKILL.md"
|
|
352
|
+
source_locale = "en"
|
|
353
|
+
revision = 1
|
|
354
|
+
translations = {}
|
|
355
|
+
|
|
308
356
|
[documents."skill.composition-over-inheritance"]
|
|
309
357
|
source = "locales/en/.mustflow/skills/composition-over-inheritance/SKILL.md"
|
|
310
358
|
source_locale = "en"
|
|
@@ -362,7 +410,7 @@ translations = {}
|
|
|
362
410
|
[documents."skill.external-prompt-injection-defense"]
|
|
363
411
|
source = "locales/en/.mustflow/skills/external-prompt-injection-defense/SKILL.md"
|
|
364
412
|
source_locale = "en"
|
|
365
|
-
revision =
|
|
413
|
+
revision = 6
|
|
366
414
|
translations = {}
|
|
367
415
|
|
|
368
416
|
[documents."skill.external-skill-intake"]
|
|
@@ -463,7 +511,7 @@ translations = {}
|
|
|
463
511
|
[documents."skill.source-freshness-check"]
|
|
464
512
|
source = "locales/en/.mustflow/skills/source-freshness-check/SKILL.md"
|
|
465
513
|
source_locale = "en"
|
|
466
|
-
revision =
|
|
514
|
+
revision = 4
|
|
467
515
|
translations = {}
|
|
468
516
|
|
|
469
517
|
[documents."skill.source-anchor-authoring"]
|
|
@@ -499,7 +547,7 @@ translations = {}
|
|
|
499
547
|
[documents."skill.security-privacy-review"]
|
|
500
548
|
source = "locales/en/.mustflow/skills/security-privacy-review/SKILL.md"
|
|
501
549
|
source_locale = "en"
|
|
502
|
-
revision =
|
|
550
|
+
revision = 21
|
|
503
551
|
translations = {}
|
|
504
552
|
|
|
505
553
|
[documents."skill.security-regression-tests"]
|
|
@@ -517,7 +565,25 @@ translations = {}
|
|
|
517
565
|
[documents."skill.skill-authoring"]
|
|
518
566
|
source = "locales/en/.mustflow/skills/skill-authoring/SKILL.md"
|
|
519
567
|
source_locale = "en"
|
|
520
|
-
revision =
|
|
568
|
+
revision = 8
|
|
569
|
+
translations = {}
|
|
570
|
+
|
|
571
|
+
[documents."skill.template-install-surface-sync"]
|
|
572
|
+
source = "locales/en/.mustflow/skills/template-install-surface-sync/SKILL.md"
|
|
573
|
+
source_locale = "en"
|
|
574
|
+
revision = 1
|
|
575
|
+
translations = {}
|
|
576
|
+
|
|
577
|
+
[documents."skill.restricted-handoff-resume"]
|
|
578
|
+
source = "locales/en/.mustflow/skills/restricted-handoff-resume/SKILL.md"
|
|
579
|
+
source_locale = "en"
|
|
580
|
+
revision = 1
|
|
581
|
+
translations = {}
|
|
582
|
+
|
|
583
|
+
[documents."skill.secret-exposure-response"]
|
|
584
|
+
source = "locales/en/.mustflow/skills/secret-exposure-response/SKILL.md"
|
|
585
|
+
source_locale = "en"
|
|
586
|
+
revision = 1
|
|
521
587
|
translations = {}
|
|
522
588
|
|
|
523
589
|
[documents."skill.test-design-guard"]
|