mustflow 2.112.13 → 2.113.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/skill.js +13 -0
- package/dist/cli/lib/external-skill-import.js +194 -4
- package/package.json +1 -1
- package/schemas/skill-import-report.schema.json +75 -0
- package/templates/default/i18n.toml +6 -6
- package/templates/default/locales/en/.mustflow/skills/INDEX.md +16 -13
- package/templates/default/locales/en/.mustflow/skills/llm-token-cost-control-review/SKILL.md +62 -24
- package/templates/default/locales/en/.mustflow/skills/rag-pipeline-triage/SKILL.md +77 -23
- package/templates/default/locales/en/.mustflow/skills/search-index-integrity-review/SKILL.md +64 -14
- package/templates/default/locales/en/.mustflow/skills/security-privacy-review/SKILL.md +4 -1
- package/templates/default/locales/en/.mustflow/skills/vector-search-integrity-review/SKILL.md +59 -32
- package/templates/default/manifest.toml +1 -1
|
@@ -16,6 +16,7 @@ const SKILL_OPTIONS = [
|
|
|
16
16
|
{ name: '--dry-run', kind: 'boolean' },
|
|
17
17
|
{ name: '--name', kind: 'string' },
|
|
18
18
|
{ name: '--ref', kind: 'string' },
|
|
19
|
+
{ name: '--trust-scripts', kind: 'boolean' },
|
|
19
20
|
];
|
|
20
21
|
export function getSkillHelp(lang = 'en') {
|
|
21
22
|
return renderHelp({
|
|
@@ -32,6 +33,7 @@ export function getSkillHelp(lang = 'en') {
|
|
|
32
33
|
{ label: '--install', description: 'Install an external skill after previewing the same source' },
|
|
33
34
|
{ label: '--name <slug>', description: 'Override the installed external skill directory name' },
|
|
34
35
|
{ label: '--ref <ref>', description: 'Override the GitHub ref used for import' },
|
|
36
|
+
{ label: '--trust-scripts', description: 'Create command-contract intents for imported scripts; requires --install to write them' },
|
|
35
37
|
{ label: '--json', description: t(lang, 'cli.option.json') },
|
|
36
38
|
{ label: '-h, --help', description: t(lang, 'cli.option.help') },
|
|
37
39
|
],
|
|
@@ -73,6 +75,7 @@ function parseSkillArgs(args) {
|
|
|
73
75
|
dryRun: hasParsedCliOption(parsed, '--dry-run'),
|
|
74
76
|
name: getParsedCliStringOption(parsed, '--name'),
|
|
75
77
|
ref: getParsedCliStringOption(parsed, '--ref'),
|
|
78
|
+
trustScripts: hasParsedCliOption(parsed, '--trust-scripts'),
|
|
76
79
|
error: parsed.error,
|
|
77
80
|
};
|
|
78
81
|
}
|
|
@@ -138,6 +141,15 @@ function renderSkillImportReport(report) {
|
|
|
138
141
|
lines.push(`- ${file.relative_path} (${file.kind}, ${file.bytes} bytes, ${file.sha256})`);
|
|
139
142
|
}
|
|
140
143
|
}
|
|
144
|
+
if (report.script_trust) {
|
|
145
|
+
lines.push('', 'Script trust', `- requested: ${String(report.script_trust.requested)}`, `- status: ${report.script_trust.status}`, `- command authority: ${String(report.script_trust.grants_command_authority)}`);
|
|
146
|
+
if (report.script_trust.fragment_path) {
|
|
147
|
+
lines.push(`- command fragment: ${report.script_trust.fragment_path}`);
|
|
148
|
+
}
|
|
149
|
+
for (const intent of report.script_trust.intents) {
|
|
150
|
+
lines.push(`- intent: ${intent.intent}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
141
153
|
if (report.warnings.length > 0) {
|
|
142
154
|
lines.push('', 'Warnings', ...report.warnings.map((warning) => `- ${warning}`));
|
|
143
155
|
}
|
|
@@ -183,6 +195,7 @@ export async function runSkill(args, reporter, lang = 'en') {
|
|
|
183
195
|
mode,
|
|
184
196
|
name: parsed.name,
|
|
185
197
|
ref: parsed.ref,
|
|
198
|
+
trustScripts: parsed.trustScripts,
|
|
186
199
|
});
|
|
187
200
|
if (parsed.json) {
|
|
188
201
|
reporter.stdout(JSON.stringify(report, null, 2));
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { existsSync, renameSync, rmSync } from 'node:fs';
|
|
2
2
|
import { createHash } from 'node:crypto';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
-
import {
|
|
4
|
+
import { readCommandContract, readCommandContractIncludePaths, } from '../../core/config-loading.js';
|
|
5
|
+
import { ensureFileTargetInsideWithoutSymlinks, readUtf8FileInsideWithoutSymlinks, writeJsonFileInsideWithoutSymlinks, writeUtf8FileInsideWithoutSymlinks, } from '../../core/safe-filesystem.js';
|
|
5
6
|
const EXTERNAL_SKILL_ROOT = '.mustflow/external-skills';
|
|
6
7
|
const PROVENANCE_FILE = 'mustflow-skill-source.json';
|
|
8
|
+
const COMMANDS_CONFIG_PATH = '.mustflow/config/commands.toml';
|
|
9
|
+
const COMMAND_FRAGMENT_DIRECTORY = '.mustflow/config/commands';
|
|
7
10
|
const DEFAULT_GITHUB_REF = 'HEAD';
|
|
8
11
|
const MAX_IMPORTED_FILES = 40;
|
|
9
12
|
const MAX_TOTAL_BYTES = 512 * 1024;
|
|
@@ -130,6 +133,9 @@ function sanitizeSkillName(value) {
|
|
|
130
133
|
.replace(/^-+|-+$/gu, '')
|
|
131
134
|
.replace(/-{2,}/gu, '-');
|
|
132
135
|
}
|
|
136
|
+
function commandSafeSegment(value) {
|
|
137
|
+
return sanitizeSkillName(value).replace(/-/gu, '_');
|
|
138
|
+
}
|
|
133
139
|
function readFrontmatterScalar(content, key) {
|
|
134
140
|
if (!content.startsWith('---')) {
|
|
135
141
|
return null;
|
|
@@ -359,7 +365,172 @@ function createTarget(skillName) {
|
|
|
359
365
|
provenance_path: `${skillDir}/${PROVENANCE_FILE}`,
|
|
360
366
|
};
|
|
361
367
|
}
|
|
362
|
-
function
|
|
368
|
+
function scriptNameForIntent(relativePath) {
|
|
369
|
+
const basename = path.posix.basename(relativePath);
|
|
370
|
+
const withoutExtension = basename.replace(/\.[^.]+$/u, '');
|
|
371
|
+
const sanitized = commandSafeSegment(withoutExtension);
|
|
372
|
+
if (!sanitized) {
|
|
373
|
+
throw new Error(`External script path cannot be converted to a safe intent name: ${relativePath}`);
|
|
374
|
+
}
|
|
375
|
+
return sanitized;
|
|
376
|
+
}
|
|
377
|
+
function trustedScriptArgv(skillName, scriptPath) {
|
|
378
|
+
const extension = path.posix.extname(scriptPath).toLowerCase();
|
|
379
|
+
const projectScriptPath = `${EXTERNAL_SKILL_ROOT}/${skillName}/${scriptPath}`;
|
|
380
|
+
if (['.js', '.mjs', '.cjs'].includes(extension)) {
|
|
381
|
+
return ['node', projectScriptPath];
|
|
382
|
+
}
|
|
383
|
+
if (['.ts', '.mts', '.cts'].includes(extension)) {
|
|
384
|
+
return ['bun', projectScriptPath];
|
|
385
|
+
}
|
|
386
|
+
if (extension === '.ps1') {
|
|
387
|
+
return ['pwsh', '-NoProfile', '-File', projectScriptPath];
|
|
388
|
+
}
|
|
389
|
+
if (extension === '.sh') {
|
|
390
|
+
return ['sh', projectScriptPath];
|
|
391
|
+
}
|
|
392
|
+
throw new Error(`External script import cannot create a trusted command intent for unsupported script type: ${scriptPath}`);
|
|
393
|
+
}
|
|
394
|
+
function createTrustedScriptIntent(skillName, scriptPath) {
|
|
395
|
+
return {
|
|
396
|
+
intent: `external_skill_${commandSafeSegment(skillName)}_${scriptNameForIntent(scriptPath)}`,
|
|
397
|
+
script_path: scriptPath,
|
|
398
|
+
argv: trustedScriptArgv(skillName, scriptPath),
|
|
399
|
+
run_policy: 'agent_allowed',
|
|
400
|
+
network: true,
|
|
401
|
+
destructive: true,
|
|
402
|
+
approval_required: ['network_access', 'destructive_command'],
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
function createScriptTrust(projectRoot, target, files, trustScripts, mode) {
|
|
406
|
+
const scripts = files.filter((file) => file.kind === 'script');
|
|
407
|
+
if (!trustScripts) {
|
|
408
|
+
return {
|
|
409
|
+
requested: false,
|
|
410
|
+
status: 'not_requested',
|
|
411
|
+
grants_command_authority: false,
|
|
412
|
+
command_contract_path: null,
|
|
413
|
+
include_entry: null,
|
|
414
|
+
fragment_path: null,
|
|
415
|
+
intents: [],
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
if (scripts.length === 0) {
|
|
419
|
+
return {
|
|
420
|
+
requested: true,
|
|
421
|
+
status: 'no_scripts',
|
|
422
|
+
grants_command_authority: false,
|
|
423
|
+
command_contract_path: null,
|
|
424
|
+
include_entry: null,
|
|
425
|
+
fragment_path: null,
|
|
426
|
+
intents: [],
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
const fragmentName = `external-skills-${target.skill_name}.toml`;
|
|
430
|
+
const includeEntry = `commands/${fragmentName}`;
|
|
431
|
+
const fragmentPath = `${COMMAND_FRAGMENT_DIRECTORY}/${fragmentName}`;
|
|
432
|
+
const intents = scripts.map((script) => createTrustedScriptIntent(target.skill_name, script.relative_path));
|
|
433
|
+
const duplicateIntent = findDuplicate(intents.map((intent) => intent.intent));
|
|
434
|
+
if (duplicateIntent) {
|
|
435
|
+
throw new Error(`External skill trusted script intents contain a duplicate name: ${duplicateIntent}`);
|
|
436
|
+
}
|
|
437
|
+
validateTrustedScriptCommandPlan(projectRoot, includeEntry, fragmentPath, intents);
|
|
438
|
+
return {
|
|
439
|
+
requested: true,
|
|
440
|
+
status: mode === 'install' ? 'trusted' : 'planned',
|
|
441
|
+
grants_command_authority: mode === 'install',
|
|
442
|
+
command_contract_path: COMMANDS_CONFIG_PATH,
|
|
443
|
+
include_entry: includeEntry,
|
|
444
|
+
fragment_path: fragmentPath,
|
|
445
|
+
intents,
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
function findDuplicate(values) {
|
|
449
|
+
const seen = new Set();
|
|
450
|
+
for (const value of values) {
|
|
451
|
+
if (seen.has(value)) {
|
|
452
|
+
return value;
|
|
453
|
+
}
|
|
454
|
+
seen.add(value);
|
|
455
|
+
}
|
|
456
|
+
return null;
|
|
457
|
+
}
|
|
458
|
+
function validateTrustedScriptCommandPlan(projectRoot, includeEntry, fragmentPath, intents) {
|
|
459
|
+
const existingIncludes = new Set(readCommandContractIncludePaths(projectRoot).map((entry) => entry.replace(/^\.mustflow\/config\//u, '')));
|
|
460
|
+
if (existingIncludes.has(includeEntry)) {
|
|
461
|
+
throw new Error(`External skill trusted script command include already exists: ${includeEntry}`);
|
|
462
|
+
}
|
|
463
|
+
if (existsSync(path.join(projectRoot, ...fragmentPath.split('/')))) {
|
|
464
|
+
throw new Error(`External skill trusted script command fragment already exists: ${fragmentPath}`);
|
|
465
|
+
}
|
|
466
|
+
const contract = readCommandContract(projectRoot);
|
|
467
|
+
for (const intent of intents) {
|
|
468
|
+
if (Object.prototype.hasOwnProperty.call(contract.intents, intent.intent)) {
|
|
469
|
+
throw new Error(`External skill trusted script intent already exists in command contract: ${intent.intent}`);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
function renderTomlString(value) {
|
|
474
|
+
return JSON.stringify(value);
|
|
475
|
+
}
|
|
476
|
+
function renderTomlStringArray(values) {
|
|
477
|
+
return `[${values.map(renderTomlString).join(', ')}]`;
|
|
478
|
+
}
|
|
479
|
+
function renderTrustedScriptCommandFragment(target, source, scriptTrust) {
|
|
480
|
+
const lines = [
|
|
481
|
+
`# Generated by mf skill import --trust-scripts for external skill ${JSON.stringify(target.skill_name)}.`,
|
|
482
|
+
`# Source: ${source.source_url}`,
|
|
483
|
+
'# These intents execute imported external script files. They are agent-runnable only through mf run,',
|
|
484
|
+
'# and remain gated by network_access and destructive_command approvals.',
|
|
485
|
+
'',
|
|
486
|
+
];
|
|
487
|
+
for (const intent of scriptTrust.intents) {
|
|
488
|
+
lines.push(`[intents.${intent.intent}]`, 'status = "configured"', 'lifecycle = "oneshot"', 'run_policy = "agent_allowed"', `description = ${renderTomlString(`Run trusted external skill script ${intent.script_path} from ${target.skill_name}.`)}`, `argv = ${renderTomlStringArray(intent.argv)}`, 'cwd = "."', 'timeout_seconds = 300', 'stdin = "closed"', 'success_exit_codes = [0]', 'writes = []', 'network = true', 'destructive = true', 'env_policy = "minimal"', '');
|
|
489
|
+
}
|
|
490
|
+
return lines.join('\n');
|
|
491
|
+
}
|
|
492
|
+
function updateCommandIncludeText(content, includeEntry) {
|
|
493
|
+
const normalizedContent = content.replace(/\r\n?/gu, '\n');
|
|
494
|
+
const lines = normalizedContent.split('\n');
|
|
495
|
+
const includeLineIndex = lines.findIndex((line) => /^\s*\[include\]\s*$/u.test(line));
|
|
496
|
+
const includeLine = ` ${renderTomlString(includeEntry)},`;
|
|
497
|
+
if (includeLineIndex < 0) {
|
|
498
|
+
const separator = normalizedContent.endsWith('\n') ? '' : '\n';
|
|
499
|
+
return `${normalizedContent}${separator}\n[include]\nfiles = [\n${includeLine}\n]\n`;
|
|
500
|
+
}
|
|
501
|
+
const nextSectionIndex = lines.findIndex((line, index) => index > includeLineIndex && /^\s*\[[^\]]+\]\s*$/u.test(line));
|
|
502
|
+
const sectionEnd = nextSectionIndex < 0 ? lines.length : nextSectionIndex;
|
|
503
|
+
const filesLineIndex = lines.findIndex((line, index) => index > includeLineIndex &&
|
|
504
|
+
index < sectionEnd &&
|
|
505
|
+
/^\s*files\s*=\s*\[/u.test(line));
|
|
506
|
+
if (filesLineIndex < 0) {
|
|
507
|
+
lines.splice(includeLineIndex + 1, 0, 'files = [', includeLine, ']');
|
|
508
|
+
return lines.join('\n');
|
|
509
|
+
}
|
|
510
|
+
if (lines[filesLineIndex].includes(']')) {
|
|
511
|
+
const existingValues = [...lines[filesLineIndex].matchAll(/"([^"]+)"/gu)].map((match) => match[1]);
|
|
512
|
+
const values = [...new Set([...existingValues, includeEntry])].sort((left, right) => left.localeCompare(right));
|
|
513
|
+
lines.splice(filesLineIndex, 1, 'files = [', ...values.map((entry) => ` ${renderTomlString(entry)},`), ']');
|
|
514
|
+
return lines.join('\n');
|
|
515
|
+
}
|
|
516
|
+
const closingLineIndex = lines.findIndex((line, index) => index > filesLineIndex && index < sectionEnd && /^\s*\]\s*$/u.test(line));
|
|
517
|
+
if (closingLineIndex < 0) {
|
|
518
|
+
throw new Error(`[include].files in ${COMMANDS_CONFIG_PATH} must be a TOML array`);
|
|
519
|
+
}
|
|
520
|
+
lines.splice(closingLineIndex, 0, includeLine);
|
|
521
|
+
return lines.join('\n');
|
|
522
|
+
}
|
|
523
|
+
function writeTrustedScriptCommandContract(projectRoot, target, source, scriptTrust) {
|
|
524
|
+
if (scriptTrust.status !== 'trusted' || !scriptTrust.fragment_path || !scriptTrust.include_entry) {
|
|
525
|
+
return;
|
|
526
|
+
}
|
|
527
|
+
const fragmentContent = renderTrustedScriptCommandFragment(target, source, scriptTrust);
|
|
528
|
+
writeUtf8FileInsideWithoutSymlinks(projectRoot, path.join(projectRoot, ...scriptTrust.fragment_path.split('/')), fragmentContent);
|
|
529
|
+
const commandsPath = path.join(projectRoot, ...COMMANDS_CONFIG_PATH.split('/'));
|
|
530
|
+
const commandsContent = readUtf8FileInsideWithoutSymlinks(projectRoot, commandsPath, { maxBytes: 256 * 1024 });
|
|
531
|
+
writeUtf8FileInsideWithoutSymlinks(projectRoot, commandsPath, updateCommandIncludeText(commandsContent, scriptTrust.include_entry));
|
|
532
|
+
}
|
|
533
|
+
function writeImportedSkillFiles(projectRoot, target, source, files, fileReport, warnings, scriptTrust) {
|
|
363
534
|
const targetPath = path.join(projectRoot, ...target.skill_dir.split('/'));
|
|
364
535
|
const skillPath = path.join(targetPath, 'SKILL.md');
|
|
365
536
|
if (existsSync(targetPath)) {
|
|
@@ -384,6 +555,7 @@ function writeImportedSkillFiles(projectRoot, target, source, files, fileReport,
|
|
|
384
555
|
kind: 'external_skill_source',
|
|
385
556
|
source,
|
|
386
557
|
files: fileReport,
|
|
558
|
+
script_trust: scriptTrust,
|
|
387
559
|
warnings,
|
|
388
560
|
});
|
|
389
561
|
renameSync(tempPath, targetPath);
|
|
@@ -424,14 +596,31 @@ export async function createExternalSkillImportReport(projectRoot, inputUrl, opt
|
|
|
424
596
|
const source = externalSkillSourceFromParsed(inputUrl, parsed);
|
|
425
597
|
const files = normalizeImportedSkillFiles(sourceFiles);
|
|
426
598
|
const reports = fileReports(files);
|
|
599
|
+
const scriptTrust = createScriptTrust(projectRoot, target, reports, options.trustScripts === true, mode);
|
|
427
600
|
const warnings = [
|
|
428
|
-
...(reports.some((file) => file.kind === 'script')
|
|
601
|
+
...(reports.some((file) => file.kind === 'script') && scriptTrust.status !== 'trusted'
|
|
429
602
|
? ['Imported scripts are inert reference files; mustflow does not grant command authority for external scripts.']
|
|
430
603
|
: []),
|
|
604
|
+
...(scriptTrust.status === 'trusted'
|
|
605
|
+
? ['Imported scripts were trusted by request; mustflow created command-contract intents gated by network and destructive approvals.']
|
|
606
|
+
: []),
|
|
607
|
+
...(scriptTrust.status === 'planned'
|
|
608
|
+
? ['Imported scripts would be trusted by request during install; dry-run only reports the command-contract plan.']
|
|
609
|
+
: []),
|
|
431
610
|
'External skills are untrusted until the agent reads and evaluates the selected SKILL.md.',
|
|
432
611
|
];
|
|
433
612
|
if (mode === 'install') {
|
|
434
|
-
|
|
613
|
+
try {
|
|
614
|
+
writeImportedSkillFiles(projectRoot, target, source, files, reports, warnings, scriptTrust);
|
|
615
|
+
writeTrustedScriptCommandContract(projectRoot, target, source, scriptTrust);
|
|
616
|
+
}
|
|
617
|
+
catch (error) {
|
|
618
|
+
rmSync(path.join(projectRoot, ...target.skill_dir.split('/')), { recursive: true, force: true });
|
|
619
|
+
if (scriptTrust.fragment_path) {
|
|
620
|
+
rmSync(path.join(projectRoot, ...scriptTrust.fragment_path.split('/')), { force: true });
|
|
621
|
+
}
|
|
622
|
+
throw error;
|
|
623
|
+
}
|
|
435
624
|
}
|
|
436
625
|
return {
|
|
437
626
|
schema_version: '1',
|
|
@@ -444,6 +633,7 @@ export async function createExternalSkillImportReport(projectRoot, inputUrl, opt
|
|
|
444
633
|
source,
|
|
445
634
|
target,
|
|
446
635
|
files: reports,
|
|
636
|
+
script_trust: scriptTrust,
|
|
447
637
|
warnings,
|
|
448
638
|
issues: [],
|
|
449
639
|
wrote_files: mode === 'install',
|
package/package.json
CHANGED
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"type": "array",
|
|
44
44
|
"items": { "$ref": "#/$defs/file" }
|
|
45
45
|
},
|
|
46
|
+
"script_trust": { "$ref": "#/$defs/scriptTrust" },
|
|
46
47
|
"warnings": {
|
|
47
48
|
"type": "array",
|
|
48
49
|
"items": { "type": "string" }
|
|
@@ -92,6 +93,80 @@
|
|
|
92
93
|
"bytes": { "type": "integer", "minimum": 0 },
|
|
93
94
|
"sha256": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" }
|
|
94
95
|
}
|
|
96
|
+
},
|
|
97
|
+
"scriptTrust": {
|
|
98
|
+
"type": "object",
|
|
99
|
+
"additionalProperties": false,
|
|
100
|
+
"required": [
|
|
101
|
+
"requested",
|
|
102
|
+
"status",
|
|
103
|
+
"grants_command_authority",
|
|
104
|
+
"command_contract_path",
|
|
105
|
+
"include_entry",
|
|
106
|
+
"fragment_path",
|
|
107
|
+
"intents"
|
|
108
|
+
],
|
|
109
|
+
"properties": {
|
|
110
|
+
"requested": { "type": "boolean" },
|
|
111
|
+
"status": { "type": "string", "enum": ["not_requested", "no_scripts", "planned", "trusted"] },
|
|
112
|
+
"grants_command_authority": { "type": "boolean" },
|
|
113
|
+
"command_contract_path": {
|
|
114
|
+
"oneOf": [
|
|
115
|
+
{ "const": ".mustflow/config/commands.toml" },
|
|
116
|
+
{ "type": "null" }
|
|
117
|
+
]
|
|
118
|
+
},
|
|
119
|
+
"include_entry": {
|
|
120
|
+
"oneOf": [
|
|
121
|
+
{ "type": "string", "pattern": "^commands/external-skills-[a-z0-9]+(?:-[a-z0-9]+)*\\.toml$" },
|
|
122
|
+
{ "type": "null" }
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
"fragment_path": {
|
|
126
|
+
"oneOf": [
|
|
127
|
+
{ "type": "string", "pattern": "^\\.mustflow/config/commands/external-skills-[a-z0-9]+(?:-[a-z0-9]+)*\\.toml$" },
|
|
128
|
+
{ "type": "null" }
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
"intents": {
|
|
132
|
+
"type": "array",
|
|
133
|
+
"items": { "$ref": "#/$defs/trustedScriptIntent" }
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"trustedScriptIntent": {
|
|
138
|
+
"type": "object",
|
|
139
|
+
"additionalProperties": false,
|
|
140
|
+
"required": [
|
|
141
|
+
"intent",
|
|
142
|
+
"script_path",
|
|
143
|
+
"argv",
|
|
144
|
+
"run_policy",
|
|
145
|
+
"network",
|
|
146
|
+
"destructive",
|
|
147
|
+
"approval_required"
|
|
148
|
+
],
|
|
149
|
+
"properties": {
|
|
150
|
+
"intent": { "type": "string", "pattern": "^external_skill_[A-Za-z0-9_-]+$" },
|
|
151
|
+
"script_path": { "type": "string", "pattern": "^scripts/.+$" },
|
|
152
|
+
"argv": {
|
|
153
|
+
"type": "array",
|
|
154
|
+
"minItems": 2,
|
|
155
|
+
"items": { "type": "string" }
|
|
156
|
+
},
|
|
157
|
+
"run_policy": { "const": "agent_allowed" },
|
|
158
|
+
"network": { "const": true },
|
|
159
|
+
"destructive": { "const": true },
|
|
160
|
+
"approval_required": {
|
|
161
|
+
"type": "array",
|
|
162
|
+
"prefixItems": [
|
|
163
|
+
{ "const": "network_access" },
|
|
164
|
+
{ "const": "destructive_command" }
|
|
165
|
+
],
|
|
166
|
+
"minItems": 2,
|
|
167
|
+
"maxItems": 2
|
|
168
|
+
}
|
|
169
|
+
}
|
|
95
170
|
}
|
|
96
171
|
}
|
|
97
172
|
}
|
|
@@ -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 = 226
|
|
66
66
|
translations = {}
|
|
67
67
|
|
|
68
68
|
[documents."skill.adapter-boundary"]
|
|
@@ -565,19 +565,19 @@ translations = {}
|
|
|
565
565
|
[documents."skill.search-index-integrity-review"]
|
|
566
566
|
source = "locales/en/.mustflow/skills/search-index-integrity-review/SKILL.md"
|
|
567
567
|
source_locale = "en"
|
|
568
|
-
revision =
|
|
568
|
+
revision = 3
|
|
569
569
|
translations = {}
|
|
570
570
|
|
|
571
571
|
[documents."skill.vector-search-integrity-review"]
|
|
572
572
|
source = "locales/en/.mustflow/skills/vector-search-integrity-review/SKILL.md"
|
|
573
573
|
source_locale = "en"
|
|
574
|
-
revision =
|
|
574
|
+
revision = 4
|
|
575
575
|
translations = {}
|
|
576
576
|
|
|
577
577
|
[documents."skill.rag-pipeline-triage"]
|
|
578
578
|
source = "locales/en/.mustflow/skills/rag-pipeline-triage/SKILL.md"
|
|
579
579
|
source_locale = "en"
|
|
580
|
-
revision =
|
|
580
|
+
revision = 3
|
|
581
581
|
translations = {}
|
|
582
582
|
|
|
583
583
|
[documents."skill.dependency-injection"]
|
|
@@ -1164,7 +1164,7 @@ translations = {}
|
|
|
1164
1164
|
[documents."skill.security-privacy-review"]
|
|
1165
1165
|
source = "locales/en/.mustflow/skills/security-privacy-review/SKILL.md"
|
|
1166
1166
|
source_locale = "en"
|
|
1167
|
-
revision =
|
|
1167
|
+
revision = 25
|
|
1168
1168
|
translations = {}
|
|
1169
1169
|
|
|
1170
1170
|
[documents."skill.security-regression-tests"]
|
|
@@ -1272,7 +1272,7 @@ translations = {}
|
|
|
1272
1272
|
[documents."skill.llm-token-cost-control-review"]
|
|
1273
1273
|
source = "locales/en/.mustflow/skills/llm-token-cost-control-review/SKILL.md"
|
|
1274
1274
|
source_locale = "en"
|
|
1275
|
-
revision =
|
|
1275
|
+
revision = 4
|
|
1276
1276
|
translations = {}
|
|
1277
1277
|
|
|
1278
1278
|
[documents."skill.llm-response-latency-review"]
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
mustflow_doc: skills.index
|
|
3
3
|
locale: en
|
|
4
4
|
canonical: true
|
|
5
|
-
revision:
|
|
5
|
+
revision: 226
|
|
6
6
|
authority: router
|
|
7
7
|
lifecycle: mustflow-owned
|
|
8
8
|
---
|
|
@@ -76,7 +76,8 @@ refer to `AGENTS.md` and `.mustflow/config/commands.toml` to implement the most
|
|
|
76
76
|
citations, claim maps, evidence IDs, answerability states, retrieval thresholds, validators,
|
|
77
77
|
abstain behavior, or hallucination metrics need product-controlled grounding review.
|
|
78
78
|
- Use `llm-token-cost-control-review` as a primary route when LLM request assembly, token budgets,
|
|
79
|
-
prompt caching, chat history, RAG context size,
|
|
79
|
+
prompt caching, chat history, RAG context size, prompt packing, document metadata, source maps,
|
|
80
|
+
question-scoped compression, evidence cards, tool or schema payloads, model routing, reasoning
|
|
80
81
|
budget, retries, Batch, Flex, predicted outputs, or cost-per-success telemetry need token spend
|
|
81
82
|
review.
|
|
82
83
|
- Use `llm-response-latency-review` as a primary route when LLM response speed, time to first
|
|
@@ -424,16 +425,18 @@ refer to `AGENTS.md` and `.mustflow/config/commands.toml` to implement the most
|
|
|
424
425
|
index-defeating predicates, plan skew, or long transaction scope before live plan evidence.
|
|
425
426
|
- Use `search-index-integrity-review` as a primary route when keyword search, full-text search,
|
|
426
427
|
Elasticsearch, OpenSearch, Lucene-style indexing, aliases, bulk ingestion, refresh visibility,
|
|
427
|
-
analyzer,
|
|
428
|
-
|
|
428
|
+
analyzer, metadata taxonomy, negative metadata, exact keyword fields, source maps, synonym,
|
|
429
|
+
autocomplete, pagination, shard failure, search quality, or search performance needs
|
|
430
|
+
source-to-search and query-contract evidence.
|
|
429
431
|
- Use `vector-search-integrity-review` as a primary route when vector search, semantic search, RAG
|
|
430
|
-
retrieval, embeddings,
|
|
431
|
-
namespaces, tenants, hybrid search, reranking,
|
|
432
|
-
retrieval-contract review.
|
|
432
|
+
retrieval, embeddings, contextual headers, synthetic questions, chunk text variants, ANN indexes,
|
|
433
|
+
exact-versus-approximate search, filters, metadata, namespaces, tenants, hybrid search, reranking,
|
|
434
|
+
recall, latency, or golden-set behavior needs retrieval-contract review.
|
|
433
435
|
- Use `rag-pipeline-triage` as a primary route when a RAG, knowledge-base answer, grounded chat,
|
|
434
436
|
citation answer, document QA, or support bot failure is not yet localized to ingestion, parsing,
|
|
435
|
-
|
|
436
|
-
|
|
437
|
+
document metadata, frontmatter schema, source maps, heading paths, chunking, retrieval, filtering,
|
|
438
|
+
reranking, context assembly, prompt construction, generation, citation validation, answerability,
|
|
439
|
+
access control, latency, or cost.
|
|
437
440
|
- Use `database-json-modeling-review` as an adjunct when database review needs to decide whether
|
|
438
441
|
JSON, jsonb, metadata, settings, raw payload, or dynamic keys should become typed columns,
|
|
439
442
|
child tables, generated/computed columns, JSON indexes, schema versions, or key registries
|
|
@@ -533,8 +536,8 @@ routes. Event routes stay inactive until their event occurs.
|
|
|
533
536
|
| AI product features, AI Gateways, provider/model integrations, prompt/RAG/tool paths, AI caches, fallback paths, streaming paths, evaluation gates, user-data flows, model registries, AI observability, incident runbooks, or model portability plans are created, changed, reviewed, or reported before the risk is narrow enough for one specialist LLM skill | `.mustflow/skills/ai-product-readiness-review/SKILL.md` | Product role ledger, harm model, gateway ledger, authority and action ledger, data ledger, cost and cache ledger, eval ledger, fallback and streaming ledger, model portability ledger, observability ledger, changed files, and command contract entries | AI Gateway boundaries, provider adapters, model registries, prompt registries, policy engines, tool proposal gates, quota guards, token budgets, cache keys, redaction, retry and fallback states, streaming validators, eval fixtures, observability fields, incident runbooks, tests, docs, route metadata, and directly synchronized templates | model-as-product shortcut, automatic high-risk decision, direct client provider call, prompt-only security, RAG permission leak, unvalidated model output, missing policy engine, cost budget gap, app cache tenant leak, eval theater, fallback-as-second-model, partial streaming disclosure, raw AI log retention, scattered model names, stale provider assumption, or missing kill switch | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `prompt_cache_audit`, `docs_validate_fast`, `test_release`, `mustflow_check` | AI product-readiness surface reviewed, AI role and harm model, gateway and policy boundaries, prompt-injection/data/output/permission/side-effect controls, cost/cache/eval/fallback/streaming/observability/model-portability decisions, specialist skills applied or deferred, verification, and remaining AI product-readiness risk |
|
|
534
537
|
| Prompts, prompt builders, system or developer messages, RAG prompt assembly, few-shot examples, structured outputs, tool-use instructions, model selection, reasoning-effort settings, eval sets, refusal or fallback handling, prompt versioning, or AI feature completion criteria are created, changed, reviewed, or reported | `.mustflow/skills/prompt-contract-quality-review/SKILL.md` | Prompt contract ledger, input ledger, authority ledger, output schema, tool policy, model/runtime ledger, RAG evidence ledger, eval ledger, changed files, and command contract entries | Prompt builders, prompt templates, schemas, validators, eval fixtures, boundary examples, tool policies, fallback states, completion definitions, docs, tests, and directly synchronized templates | prompt-as-function gap, user input treated as authority, buried RAG evidence, happy-path-only examples, JSON-parse theater, unpinned production model, hidden prompt storage, raw chain-of-thought request, guessed tool parameters, missing failure state, unbounded reasoning/token cost, or vibe-based prompt improvement claim | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `test_release`, `mustflow_check` | Prompt contract reviewed, function boundary, authority and source separation, eval and semantic validation status, model/runtime policy, RAG/tool/failure/completion states, verification, and remaining prompt-contract risk |
|
|
535
538
|
| LLM answers, RAG responses, citations, source grounding, claim extraction, evidence IDs, answerability states, abstain behavior, retrieval thresholds, tool-backed facts, output validators, LLM judges, or hallucination-control metrics are created, changed, reviewed, or reported | `.mustflow/skills/llm-hallucination-control-review/SKILL.md` | Answer contract ledger, evidence ledger, claim ledger, tool ledger, validator ledger, eval ledger, observability ledger, changed files, and command contract entries | Answerability states, abstain states, missing-information states, source-coverage gates, claim maps, evidence-ID requirements, citation validators, retrieval thresholds, chunk metadata, tool-parameter ownership, deterministic calculators, domain validators, eval fixtures, tests, docs, route metadata, and directly synchronized templates | unsupported factual claim, fabricated citation, source ID invention, weak retrieval gate, noisy semantic-only retrieval, chunk context loss, summary-on-summary hallucination, guessed tool parameter, model arithmetic, source-priority conflict, LLM judge overtrust, low-temperature theater, missing abstain path, missing dirty eval, false citation metric gap, or unobservable grounding drift | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `test_release`, `mustflow_check` | Hallucination-control surface reviewed, answerability and abstain states, evidence IDs, claim map, citations, source coverage, validators, retrieval thresholds, tool ownership, evals, metrics, verification, and remaining hallucination-control risk |
|
|
536
|
-
| RAG, knowledge-base answer, grounded chat, citation answer, retrieval-augmented support bot, or document QA flow is wrong, stale, unsupported, slow, leaking data, over-refusing, or not yet localized to ingestion, parsing, chunking, retrieval, filtering, reranking, context assembly, prompt construction, generation, citation validation, or answerability boundaries | `.mustflow/skills/rag-pipeline-triage/SKILL.md` | Symptom classification, trace ledger, source ledger, comparison ledger, eval ledger, privacy ledger, changed files, and command contract entries | End-to-end trace preservation, source availability and parsed-text checks, chunk
|
|
537
|
-
| LLM API calls, prompt assembly, chat history, RAG context, tool schemas, structured output schemas, model routing, reasoning settings, token budgets, provider prompt caching, app-level response caching, retries, batch or flex processing, predicted outputs, image or file inputs, or LLM cost metrics are created, changed, reviewed, or reported | `.mustflow/skills/llm-token-cost-control-review/SKILL.md` | Cost surface ledger, request ledger, cache ledger, context ledger, output ledger, routing ledger, observability ledger, changed files, and command contract entries | Request builders, prompt prefix ordering, canonical serialization, prompt hashes, cache keys, token counters, budget guards, model routers, context trimming, RAG packing, tool and schema payloads, output patch formats, retry repair paths, metrics, logs, tests, docs, route metadata, and directly synchronized templates | prompt-cache prefix drift, volatile field before stable prefix, unmeasured token count, full transcript replay, RAG chunk bloat, oversized tool or JSON schema payload, expensive model default, unbounded reasoning, no visible output after token cap, full-output regeneration, full-context retry replay, app cache key leak, predicted-output cost confusion, image or file token surprise, or per-call cost hiding cost-per-success regression | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `prompt_cache_audit`, `docs_validate_fast`, `test_release`, `mustflow_check` | LLM token-cost surface reviewed, cost unit and measurement source, stable prefix and cache behavior, app cache/history/RAG/tool/schema/input choices, routing/reasoning/output/retry/Batch/Flex/prediction choices, observability, verification, and remaining token-cost risk |
|
|
539
|
+
| RAG, knowledge-base answer, grounded chat, citation answer, retrieval-augmented support bot, or document QA flow is wrong, stale, unsupported, slow, leaking data, over-refusing, or not yet localized to ingestion, parsing, document metadata, frontmatter schema, source maps, heading paths, chunking, retrieval, filtering, reranking, context assembly, prompt construction, generation, citation validation, or answerability boundaries | `.mustflow/skills/rag-pipeline-triage/SKILL.md` | Symptom classification, trace ledger, source ledger with original/index/prompt text, stable source/doc/chunk ids, document type/status/authority, routing summaries, document graph links, comparison ledger, eval ledger, privacy ledger, changed files, and command contract entries | End-to-end trace preservation, source availability and parsed-text checks, metadata, source maps, ACL prefilters, heading paths, semantic code chunks, table record shape, chunk graph, source-of-truth and supersession checks, duplicate and stale source checks, no-retrieval/current-context/gold-context comparison, keyword/vector/hybrid/retriever/reranker/context/prompt/generation/citation/answerability localization, safe synthetic fixtures, metrics, docs, and directly synchronized templates | model scapegoating, tuning top-k before source proof, original-document theater while parsed text is broken, generic heading coordinates, generated summary cited as source, missing source map, source/doc/chunk id collapse, stale source mixing, draft or meeting-note evidence outranking canonical documents, ACL inherited after retrieval, filter blamed as vector failure, fixed line-count code slicing, table number without row or column meaning, reranker candidate starvation, critical evidence truncated or buried, retrieved text treated as instruction, citation decoration, answerability missing state, private corpus dump, access filter bypass, or single satisfaction score hiding layer failure | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `test_release`, `mustflow_check` | RAG pipeline triaged, localized boundary, trace/source/comparison/eval/metric/privacy ledgers, metadata/frontmatter/source-map/ACL/chunk-graph/document-graph findings, fix or recommendation, evidence level, verification, and remaining RAG pipeline risk |
|
|
540
|
+
| LLM API calls, prompt assembly, chat history, RAG context, document metadata, chunk summaries, prompt packing, question-scoped compression, evidence cards, tool schemas, structured output schemas, model routing, reasoning settings, token budgets, provider prompt caching, app-level response caching, retries, batch or flex processing, predicted outputs, image or file inputs, or LLM cost metrics are created, changed, reviewed, or reported | `.mustflow/skills/llm-token-cost-control-review/SKILL.md` | Cost surface ledger, request ledger with authority lanes, cache ledger, context ledger with inclusion tests, block role tags, filter-only versus LLM-visible metadata, source maps, state cards, and evidence cards, output ledger, routing ledger, observability ledger, changed files, and command contract entries | Request builders, prompt prefix ordering, canonical serialization, prompt hashes, cache keys, token counters, budget guards, model routers, context trimming, RAG packing, question-scoped compression, slot records, state snapshots, original/index/prompt text separation, source-map references, tool and schema payloads, output patch formats, retry repair paths, metrics, logs, tests, docs, route metadata, and directly synchronized templates | prompt-cache prefix drift, volatile field before stable prefix, unmeasured token count, full transcript replay, state delta without baseline, answer-irrelevant context hoarding, RAG chunk bloat, generated summary treated as original evidence, search-only metadata treated as answer text, missing source coordinate, missing token_count, compression not evaluated, oversized tool or JSON schema payload, expensive model default, unbounded reasoning, no visible output after token cap, full-output regeneration, full-context retry replay, app cache key leak, predicted-output cost confusion, image or file token surprise, or per-call cost hiding cost-per-success regression | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `prompt_cache_audit`, `docs_validate_fast`, `test_release`, `mustflow_check` | LLM token-cost surface reviewed, cost unit and measurement source, stable prefix and cache behavior, authority lanes, app cache/history/RAG/metadata/source-map/prompt-packing/evidence-card/tool/schema/input choices, routing/reasoning/output/retry/Batch/Flex/prediction choices, observability, verification, and remaining token-cost risk |
|
|
538
541
|
| LLM response latency, time to first token, first useful output, streaming, output length, LLM round trips, tool-call wait, prompt-cache latency, model routing, speculative or parallel execution, realtime continuation, priority tiers, predicted outputs, or user-perceived AI speed are created, changed, reviewed, or reported | `.mustflow/skills/llm-response-latency-review/SKILL.md` | Latency target ledger, request timeline ledger, call graph ledger, output ledger, cache ledger, routing ledger, observability ledger, changed files, and command contract entries | Streaming paths, first-useful-output contracts, request timeline metrics, call graph simplification, parallel or speculative work, model routers, fallback cascades, output caps, schema shortening, prompt-cache prefix ordering, cache keys, realtime continuation, priority-tier routing, timeout and cancellation behavior, tests, docs, route metadata, and directly synchronized templates | slow first token, useless streamed preamble, extra sequential LLM round trip, tool wait blocking first output, cache-prefix drift, unmeasured cache miss, verbose output drift, long JSON key or enum overhead, RAG chunk bloat, router escalation loop, prediction-token mismatch, priority-tier misuse, unsafe speculative work, missing cancellation, or raw prompt telemetry leak | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `test_release`, `mustflow_check` | LLM response-latency surface reviewed, latency unit and request timeline, round trips, parallel/tool/stream/cancel behavior, output/schema/cache/history/RAG/routing/fallback/prediction/realtime/priority choices, observability, verification, and remaining response-latency risk |
|
|
539
542
|
| Autonomous or semi-autonomous LLM agents, agentic workflows, planners, executors, verifiers, tool contracts, tool-call gates, human approval or interrupt flows, durable agent state, handoffs, guardrails, loop budgets, retry policies, trace evaluation, or agent outcome metrics are created, changed, reviewed, or reported | `.mustflow/skills/agent-execution-control-review/SKILL.md` | Autonomy ledger, stage gate ledger, role separation ledger, tool contract ledger, effect ledger, state and resume ledger, memory and context ledger, handoff and guardrail ledger, loop, retry, and budget ledger, trace and eval outcome ledger, changed files, and command contract entries | Workflow-versus-agent routing, stage gates, planner/executor/verifier boundaries, tool contracts, tool argument ownership, draft/execute separation, idempotency keys, approval records, durable checkpoints, state schema versions, memory partitions, handoff filters, guardrails, loop budgets, retry classification, trace spans, eval fixtures, tests, docs, route metadata, and directly synchronized templates | unnecessary autonomous agent, one model self-certifying success, ungated bad plan, ambiguous tool contract, guessed tool argument, relative-path trap, external effect before approval, missing idempotency key, interrupt replay side effect, stale state schema, over-shared handoff, misplaced guardrail, repeated tool loop, blind retry, final-answer-only eval, or unsafe trace data | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `test_release`, `mustflow_check` | Agent execution-control surface reviewed, workflow-versus-agent decision, autonomy envelope, stage gates, role separation, tool contracts, approval and side-effect replay safety, state/resume/memory/handoff/guardrail/loop/retry/trace/eval checks, verification, and remaining agent execution-control risk |
|
|
540
543
|
| Browser automation, UI automation, Playwright, Selenium, Puppeteer, WebDriver, computer-use or browser-driving agents, visual browser verification, flaky selectors, page readiness, authentication state, CAPTCHA or anti-bot handling, rate limits, screenshot checks, retry, timeout, human approval, or browser automation observability is created, changed, reviewed, triaged, or reported | `.mustflow/skills/browser-automation-reliability-review/SKILL.md` | Automation intent ledger, state ledger, readiness ledger, selector and action ledger, auth and identity ledger, external pressure ledger, verification ledger, agent and approval ledger, changed files, and command contract entries | Browser automation state machines, locator contracts, test IDs, accessible names, readiness assertions, frame and popup handlers, input verification, auth fixtures, per-worker account isolation, retry classification, timeout hierarchy, idempotency checks, rate-limit handling, approval gates, manual fallback states, traces, screenshots, redaction, cleanup, tests, docs, route metadata, and directly synchronized templates | sleep-as-readiness, `networkidle` faith, flaky selector string patch, hidden duplicate DOM, skeleton-as-content, stale element handle, force-click default, shared mutable account, CAPTCHA bypass, anti-bot evasion, retry storm, non-idempotent replay, timeout layer mismatch, screenshot-as-business-proof, unredacted trace data, page prompt injection, stale approval resume, coordinate click drift, or unverified browser success claim | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `test_release`, `mustflow_check` | Browser automation surface reviewed, browser-versus-API boundary, automation owner, state/readiness/locator/actionability/auth/rate-limit/retry/timeout/idempotency decisions, screenshot and business-success evidence, agent page-content trust, approval and resume checks, verification, and remaining browser automation reliability risk |
|
|
@@ -660,8 +663,8 @@ routes. Event routes stay inactive until their event occurs.
|
|
|
660
663
|
| PostgreSQL-specific schema, query, transaction, migration, indexing, extension, role, row-level security, connection pooling, replication, backup, restore, managed Postgres, or Postgres runtime behavior is created, changed, reviewed, or reported | `.mustflow/skills/postgresql-code-change/SKILL.md` | PostgreSQL role, version, provider, extension inventory, topology, pooler, schema/type rules, query-plan evidence, transaction/retry rules, migration and recovery needs, changed files, and command contract entries | PostgreSQL schema, queries, migrations, generated SQL, connection setup, pool settings, roles, RLS policies, extensions, tests, docs, and directly synchronized templates | version drift, provider constraint miss, connection storm, lock or rewrite surprise, unsafe online DDL claim, bad pooler assumption, RLS bypass, search-path risk, extension drift, stale replica read, query-plan overclaim, or unverified restore | `changes_status`, `changes_diff_summary`, `test_related`, `test`, `lint`, `build`, `docs_validate_fast`, `test_release`, `mustflow_check` | PostgreSQL version/topology, pooling, lock/transaction, schema/type/RLS/role, query/index/statistics, backup/restore, verification, and remaining PostgreSQL risk |
|
|
661
664
|
| ClickHouse-specific schema, MergeTree engine configuration, partition or sorting keys, primary keys, projections, materialized views, dictionaries, ingest, async inserts, deduplication, mutations, joins, CTEs, aggregate states, arrays, maps, window functions, distributed queries, or query performance behavior is created, changed, reviewed, or reported | `.mustflow/skills/clickhouse-code-change/SKILL.md` | ClickHouse role, version or Cloud track, topology, engine, table shape, ingest shape, query shape, operational evidence, changed files, and command contract entries | ClickHouse DDL, SQL, query builders, ingest code, backfill code, materialized views, projections, dictionaries, settings, fixtures, tests, docs, and synchronized templates | OLTP-shaped table design, high-cardinality partition part explosion, primary-key uniqueness myth, bad sorting locality, tiny insert parts, async insert durability overclaim, block dedup retry drift, MV trigger misunderstanding, stale dictionary lookup, aggregate-state merge bug, `arrayJoin` row explosion, default window-frame bug, `FINAL` cost patch, `OPTIMIZE FINAL` routine, mutation write amplification, JOIN fan-out, CTE rerun surprise, projection backfill miss, skip-index cargo cult, or unverified query-plan claim | `changes_status`, `changes_diff_summary`, `test_related`, `test`, `lint`, `build`, `docs_validate_fast`, `test_release`, `mustflow_check` | ClickHouse role/version/topology, engine/storage, ingest/dedup/MV/backfill, aggregate/query/JOIN/distributed findings, evidence level, verification, and remaining ClickHouse risk |
|
|
662
665
|
| DuckDB-specific embedded OLAP database use, `.duckdb` file ownership, concurrency, language bindings, Appender usage, CSV/Parquet/JSON ingestion, query determinism, timestamp behavior, memory and temp spill settings, profiling, indexes, CTEs, macros, or DuckDB runtime behavior is created, changed, reviewed, or reported | `.mustflow/skills/duckdb-code-change/SKILL.md` | DuckDB role, version or track, binding, extension inventory, file and process ownership, ingest/export shape, query shape, memory and temp spill settings, profiling evidence, changed files, and command contract entries | DuckDB SQL, schemas, query builders, connection setup, binding-specific code, ingest/export code, Appender code, settings, fixtures, tests, docs, and synchronized templates | SQLite-like OLTP assumption, native file multi-process write bug, hidden global connection, thread/process confusion, Appender visibility overclaim, CSV sampling loss, `ignore_errors` data loss, schema-drift memory spike, `SELECT *` Parquet scan, partition file explosion, missing `ORDER BY`, order-sensitive aggregate drift, TIMESTAMPTZ timezone surprise, memory-limit overclaim, temp spill disk-full, overwritten profiling output, ART-index theater, CTE materialization surprise, window memory spike, unsafe macro input, or unverified query-plan claim | `changes_status`, `changes_diff_summary`, `test_related`, `test`, `lint`, `build`, `docs_validate_fast`, `test_release`, `mustflow_check` | DuckDB role/version/binding, file/process ownership, concurrency/Appender/import/export, deterministic SQL, memory/temp/profiling, query-plan evidence, verification, and remaining DuckDB risk |
|
|
663
|
-
| Keyword search, full-text search, Elasticsearch, OpenSearch, Lucene-style indexing, search APIs, indexing pipelines, aliases, bulk indexing, refresh visibility, analyzers, mappings, synonyms, autocomplete, pagination, shard failures, search quality, or search performance are created, changed, reviewed, or failing | `.mustflow/skills/search-index-integrity-review/SKILL.md` | Symptom classification, source-to-search ledger, query contract ledger, index contract ledger, quality ledger, performance ledger, privacy ledger, changed files, and command contract entries | Search canaries, indexing ledgers, bulk item error handling, alias checks, mapping and analyzer fixtures, exact-versus-full-text tests, tenant and permission filters, golden-set tests, synonym regression tests, pagination guards, query metrics, docs, and directly synchronized templates | cluster-green theater, batch-level bulk success, source/index count illusion, write alias drift, partial shard result, direct/API/UI mismatch, wrong keyword/text field, analyzer drift, synonym regression, rank eyeballing, profile misuse, query fingerprint leak, shard fan-out, cache-only benchmark, refresh overuse, segment merge backlog, disk watermark write block, deep pagination, oversized fetch, or private query/document leak | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `test_release`, `mustflow_check` | Search index integrity reviewed, source-to-search/query/index/quality/performance/privacy ledgers,
|
|
664
|
-
| Vector search, semantic search, RAG retrieval, embedding generation, preprocessing, chunking, vector schema, collection, namespace, tenant, named vector, metadata payload, filter, ANN index, exact-versus-approximate search, hybrid search, reranking, recall, latency, quantization, HNSW, IVF, pgvector, Qdrant, Milvus, Weaviate, OpenSearch kNN, or retrieval golden-set behavior is created, changed, reviewed, or failing | `.mustflow/skills/vector-search-integrity-review/SKILL.md` | Retrieval symptom, query contract ledger, ingestion ledger, quality ledger, performance ledger, privacy ledger, changed files, and command contract entries | Embedding and
|
|
666
|
+
| Keyword search, full-text search, Elasticsearch, OpenSearch, Lucene-style indexing, search APIs, indexing pipelines, source maps, metadata taxonomy, negative metadata, exact keyword fields, aliases, bulk indexing, refresh visibility, analyzers, mappings, synonyms, autocomplete, pagination, shard failures, search quality, or search performance are created, changed, reviewed, or failing | `.mustflow/skills/search-index-integrity-review/SKILL.md` | Symptom classification, source-to-search ledger, query contract ledger, index contract ledger with taxonomy/source-map fields, metadata key budget, stable source/doc/chunk ids, lifecycle and effective-date fields, quality ledger, performance ledger, privacy ledger, changed files, and command contract entries | Search canaries, indexing ledgers, bulk item error handling, alias checks, mapping and analyzer fixtures, metadata taxonomy checks, frontmatter schema checks, controlled-vocabulary fixtures, exact-keyword fixtures, negative-metadata filters, filter-only versus LLM-visible metadata checks, exact-versus-full-text tests, tenant and permission filters, golden-set tests, synonym regression tests, pagination guards, query and miss-log metrics, docs, and directly synchronized templates | cluster-green theater, batch-level bulk success, source/index count illusion, write alias drift, partial shard result, direct/API/UI mismatch, wrong keyword/text field, analyzer drift, uncontrolled tag vocabulary, unbounded metadata keys, file path treated as status, synonym regression, negative metadata ignored, missing source map, stale index hash, rank eyeballing, profile misuse, query fingerprint leak, shard fan-out, cache-only benchmark, refresh overuse, segment merge backlog, disk watermark write block, deep pagination, oversized fetch, or private query/document leak | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `test_release`, `mustflow_check` | Search index integrity reviewed, source-to-search/query/index/quality/performance/privacy ledgers, taxonomy/metadata-budget/exact-keyword/source-map/query-log findings, fix or recommendation, evidence level, verification, and remaining search-index risk |
|
|
667
|
+
| Vector search, semantic search, RAG retrieval, embedding generation, preprocessing, chunking, contextual headers, synthetic questions, chunk text variants, vector schema, collection, namespace, tenant, named vector, metadata payload, filter, ANN index, exact-versus-approximate search, hybrid search, reranking, recall, latency, quantization, HNSW, IVF, pgvector, Qdrant, Milvus, Weaviate, OpenSearch kNN, or retrieval golden-set behavior is created, changed, reviewed, or failing | `.mustflow/skills/vector-search-integrity-review/SKILL.md` | Retrieval symptom, query contract ledger, ingestion ledger with stable source/doc/chunk ids, parent document genealogy, text variants and hashes, quality ledger, performance ledger, privacy ledger, changed files, and command contract entries | Embedding, preprocessing, and chunker versioning, vector validation, deterministic ids, contextual retrieval headers, synthetic question fields, original/index/prompt/embedding text separation, namespace and tenant selection, metadata payload field typing, metadata indexes, ACL prefilters, filter construction, exact-search checks, ANN parameters, lexical safeguards for exact identifiers, hybrid score ledgers, RRF or MMR settings, reranker candidates, golden-set tests, synthetic fixtures, metrics, docs, and directly synchronized templates | vector-DB scapegoating, wrong embedding dimension, model revision drift, contextual retrieval text treated as source, synthetic question cited as evidence, unstable source/doc/chunk lineage, tiny chunk subject loss, huge chunk semantic averaging, overlap top-k duplication, filter post-candidate loss, metadata type drift, ACL applied after retrieval, tenant leak, duplicate chunk ids, stale deletes, content hash or embedding hash drift, metric or normalization mismatch, ANN tuning before exact-search proof, quantization recall loss, reranker candidate starvation, hybrid score misuse, exact identifiers smoothed into embedding-only text, deep ANN pagination, raw vector or document leak, or unmeasured p95 latency | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `test_release`, `mustflow_check` | Vector search integrity reviewed, retrieval/query/ingestion/quality/performance/privacy ledgers, exact-versus-ANN/filter/text-variant/contextual-header/lineage/hybrid/rerank findings, fix or recommendation, evidence level, verification, and remaining vector-search risk |
|
|
665
668
|
| Dependency versions, lockfiles, package-manager metadata, workspace constraints, runtime engines, peer dependencies, optional dependencies, security advisory fixes, vulnerability scanner alerts, generated dependency output, framework plugins, dev servers, test runners, TypeScript compiler tracks, CI actions, Docker base images, package manager behavior, or toolchain versions are upgraded, downgraded, pinned, widened, regenerated, reviewed, or reported | `.mustflow/skills/dependency-upgrade-review/SKILL.md` | Dependency name, old and new versions or ranges, direct or transitive path, ecosystem and package manager, declaration files, lockfiles, runtime or toolchain files, advisory or release-note evidence, exploit preconditions, generated outputs, callers, docs, package output, Docker, CI, dev-server or test-UI exposure, protocol role, or TypeScript compiler-track surfaces, and command contract entries | Package declarations, lockfiles, generated outputs, compatibility code, tests, docs, package metadata, Docker or CI files, dev-server/test-runner config notes, TypeScript compiler-track notes, and directly synchronized examples | lockfile churn, hidden transitive replacement, peer or engine break, module-format drift, native or optional package break, framework or generator output drift, devDependency advisory dismissed despite exposure, unsafe broad security update, weakened tests, Docker or CI runtime drift, protocol DoS misclassified, TS7 RC over-adoption, TS7 nightly over-adoption, or unreviewed supply-chain change | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `test_release`, `mustflow_check` | Upgrade reason, ecosystem surface, direct and transitive graph changes, compatibility classification, runtime/peer/engine/module/feature/platform/generated-output/compiler-track risks, advisory exploit preconditions, synchronized surfaces, verification, and remaining dependency-upgrade risk |
|
|
666
669
|
| Dependency, package, runtime, framework, tool, command, plugin, service, platform capability, supported-version policy, security patch path, ecosystem maturity claim, maintainer-risk assumption, runtime portability claim, edge or serverless compatibility claim, critical-path library choice, package script, lifecycle hook, binary download, lockfile, audit result, or supply-chain-sensitive dependency surface is assumed, added, removed, imported, invoked, installed, audited, or documented | `.mustflow/skills/dependency-reality-check/SKILL.md` | Assumed dependency or capability, declaration files, version or feature expectation, role criticality, supported-version or end-of-life evidence, patchability expectation, runtime compatibility boundary, maintainer and ecosystem evidence when available, lockfile entry, package script or lifecycle hook, audit or provenance evidence, and relevant command intents | Package metadata, lockfiles, imports, scripts, command contracts, docs, tests, runtime policy notes, portability notes, and reports | unavailable dependency, hallucinated or lookalike package, fragile single-maintainer core dependency, experimental technology in a survival path, unsupported runtime, unclear security patch path, runtime-specific API leakage into core logic, stale version claim, lifecycle script risk, audit suppression, lockfile drift, or install guidance mismatch | `changes_status`, `changes_diff_summary`, `build`, `test_release`, `mustflow_check` | Dependency checked, ecosystem and maintainer-risk boundary reviewed, supported-version, patchability, and runtime-portability boundary reviewed, supply-chain surface reviewed, declarations synchronized, verification, and remaining dependency risk |
|
|
667
670
|
| Generated or edited code, configuration, CI workflows, package metadata, install instructions, examples, Docker images, framework setup, runtime declarations, toolchain declarations, TypeScript compiler-track references, Go release or framework references, Java/JDK GA, LTS, JEP, JVM, GC, or toolchain references, Rust release or MSRV references, or migration-sensitive snippets introduce explicit external version references, action refs, package ranges, runtime versions, framework majors, Docker image tags, or scaffold commands that may be stale | `.mustflow/skills/version-freshness-check/SKILL.md` | Versioned reference, owning files, repository version policy, approved freshness source, compatibility context, migration risk, TypeScript compiler track, Go toolchain/framework track, Java JDK/toolchain/bytecode/JEP track, or Rust MSRV/toolchain track when relevant, and command contract entries | Package metadata, lockfiles, CI workflows, Dockerfiles, runtime files, framework config, docs, examples, templates, tests, and version-decision reports | stale default version, false latest claim, accidental major migration, repository policy mismatch, unsupported generated example, TypeScript RC/nightly/API-track confusion, Java latest-GA/LTS/runtime/JEP/preview/incubator confusion, Rust stable/nightly/MSRV confusion, floating-tag drift, or unverified security/support claim | `changes_status`, `changes_diff_summary`, `build`, `test_related`, `docs_validate_fast`, `test_release`, `mustflow_check` | Versioned surfaces checked, repository policy and freshness source, selected version track, compatibility classification, TypeScript stable/RC/nightly/API-track, Go runtime/framework, Java GA/LTS/runtime/JEP/toolchain, and Rust stable/nightly/MSRV split when relevant, approval need, synchronized surfaces, verification, and remaining version-freshness risk |
|