feat(regression): skill scaffold + resolveBinary/buildHeader/parseExit
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env node
|
||||
// .claude/skills/regression/run.mjs
|
||||
// Regression sweep orchestrator for the /regression skill.
|
||||
// Design: docs/superpowers/specs/2026-05-16-regression-skill-design.md
|
||||
import process from 'node:process';
|
||||
|
||||
// ── pure: platform binary resolution ───────────────────────────────
|
||||
export function resolveBinary(name, platform = process.platform) {
|
||||
return platform === 'win32' ? `bin\\${name}.exe` : name;
|
||||
}
|
||||
|
||||
// ── pure: output header line ───────────────────────────────────────
|
||||
export function buildHeader(tier) {
|
||||
const head = `─ /regression ${tier} `;
|
||||
return head + '─'.repeat(Math.max(3, 48 - head.length));
|
||||
}
|
||||
|
||||
// ── pure: exit-code token ──────────────────────────────────────────
|
||||
export function parseExit(label, code) {
|
||||
return `${label} ${code}`;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import {
|
||||
resolveBinary, buildHeader, parseExit,
|
||||
} from './run.mjs';
|
||||
|
||||
test('resolveBinary: win32 → bin\\<name>.exe', () => {
|
||||
assert.equal(resolveBinary('gitleaks', 'win32'), 'bin\\gitleaks.exe');
|
||||
});
|
||||
test('resolveBinary: non-win32 → bare name on PATH', () => {
|
||||
assert.equal(resolveBinary('lychee', 'linux'), 'lychee');
|
||||
assert.equal(resolveBinary('lychee', 'darwin'), 'lychee');
|
||||
});
|
||||
|
||||
test('buildHeader: starts with the tier banner', () => {
|
||||
assert.ok(buildHeader('quick').startsWith('─ /regression quick '));
|
||||
assert.ok(buildHeader('full').startsWith('─ /regression full '));
|
||||
});
|
||||
test('buildHeader: is padded with dashes', () => {
|
||||
assert.ok(buildHeader('full').length >= 30);
|
||||
});
|
||||
|
||||
test('parseExit: builds "<label> <code>" token', () => {
|
||||
assert.equal(parseExit('Pint', 0), 'Pint 0');
|
||||
assert.equal(parseExit('ESLint', 1), 'ESLint 1');
|
||||
});
|
||||
Reference in New Issue
Block a user