ワンクリックで
verify
Verify that a previous step's claimed outputs actually exist and are correct — emits PASS, FAIL, or BLOCKED
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Verify that a previous step's claimed outputs actually exist and are correct — emits PASS, FAIL, or BLOCKED
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | verify |
| description | Verify that a previous step's claimed outputs actually exist and are correct — emits PASS, FAIL, or BLOCKED |
Core principle: The VFS state is ground truth. What the agent said it did is a claim. Verify the claim.
Emit blocked (not done) if verification fails. This halts dependent workflow steps.
// Check common plan locations
const planPaths = context.vfs.list().filter(p =>
p.endsWith('plan.md') || p.endsWith('plan.json')
);
if (planPaths.length === 0) {
context.emit({ type: 'blocked', reason: 'No plan found — cannot verify without a plan' });
return;
}
const planPath = planPaths[planPaths.length - 1]; // most recent
const plan = context.vfs.read(planPath);
context.emit({ type: 'file_read', path: planPath });
const srcFiles = context.vfs.list().filter(p => p.startsWith('/src/'));
context.emit({ type: 'progress', message: `VFS has ${srcFiles.length} files in /src/` });
Parse "files to create" and "files to modify" sections from the plan markdown:
const claimedCreates = [];
const claimedModifies = [];
// Extract from markdown table rows or bullet lists
const createSection = plan.match(/## Files to create([\s\S]*?)(?=##|$)/i)?.[1] ?? '';
const modifySection = plan.match(/## Files to modify([\s\S]*?)(?=##|$)/i)?.[1] ?? '';
// Collect /src/ paths from both sections
for (const line of createSection.split('\n')) {
const match = line.match(/(`\/src\/[^`]+`|\/src\/\S+)/);
if (match) claimedCreates.push(match[1].replace(/`/g, ''));
}
for (const line of modifySection.split('\n')) {
const match = line.match(/(`\/src\/[^`]+`|\/src\/\S+)/);
if (match) claimedModifies.push(match[1].replace(/`/g, ''));
}
const failures = [];
const passes = [];
for (const path of claimedCreates) {
const content = context.vfs.read(path);
if (!content) {
failures.push(`MISSING: ${path} (claimed created, not in VFS)`);
} else if (content.trim().length < 20) {
failures.push(`EMPTY: ${path} (only ${content.trim().length} chars — likely truncated)`);
} else {
passes.push(`EXISTS: ${path} (${content.length} chars)`);
}
}
for (const path of claimedModifies) {
const content = context.vfs.read(path);
if (!content) {
failures.push(`MISSING: ${path} (claimed modified, not in VFS)`);
} else {
passes.push(`EXISTS: ${path}`);
}
}
for (const path of [...claimedCreates, ...claimedModifies]) {
const content = context.vfs.read(path);
if (!content) continue;
// Check for placeholder content
if (content.includes('TODO') && content.includes('implement')) {
failures.push(`STUB: ${path} contains unimplemented TODOs`);
}
// Check for truncation markers
if (content.includes('// ...') && content.split('\n').length < 10) {
failures.push(`TRUNCATED: ${path} appears to be a skeleton`);
}
}
const report = {
plan: planPath,
checked: claimedCreates.length + claimedModifies.length,
passed: passes.length,
failed: failures.length,
failures,
passes,
};
// Write report to VFS for downstream steps
const reportPath = planPath.replace('plan.md', 'verification.md');
const lines = [
'# Verification Report',
'',
`**Plan:** ${planPath}`,
`**Result:** ${failures.length === 0 ? 'PASS' : 'FAIL'}`,
`**Checked:** ${report.checked} files`,
'',
];
if (passes.length > 0) {
lines.push('## Passed', ...passes.map(p => `- ✓ ${p}`), '');
}
if (failures.length > 0) {
lines.push('## Failed', ...failures.map(f => `- ✗ ${f}`), '');
}
context.vfs.write(reportPath, lines.join('\n'));
context.emit({ type: 'file_write', path: reportPath });
if (failures.length > 0) {
context.emit({ type: 'result', value: report });
context.emit({ type: 'blocked', reason: `Verification FAIL: ${failures.length} issue(s) — ${failures[0]}` });
} else {
context.emit({ type: 'result', value: report });
context.emit({ type: 'done', message: `Verification PASS: ${passes.length} files checked` });
}
blocked with the failure reason: this halts dependent workflow stepsdone only when every claimed file exists and has real contentdone if any claimed file is missing.Evaluate workflow run quality by analyzing artifacts and scratch outputs, identify gaps and root causes, and write a structured assessment with actionable recommendations.
Write an Architecture Decision Record (ADR) for a technical decision
Diagnose a bug, identify root cause, implement a targeted fix, and verify it
Analyze requirements and produce a detailed implementation plan before writing code
Create a GitHub branch, commit changes to it, and open a pull request
Explore a newly-loaded workspace, map its structure, and write project notes to memory