mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-30 13:43:26 +08:00
fix: resolve all CI test failures (19 fixes across 6 files) (#519)
- canonical-session: fall back to JSON file recording when the loaded state-store module has no writer methods (factory vs instance) - install-executor: skip node_modules and .git dirs in listFilesRecursive to prevent ETIMEDOUT copying thousands of .opencode dependency files - ecc.js: increase maxBuffer to 10MB for spawned subcommands to prevent ENOBUFS on large install plan JSON output - install-apply.test: update Cursor and Antigravity path assertions to match flattened rule layout and remapped dirs (workflows, skills) - ecc.test: increase maxBuffer in test runner to handle large output - orchestrate-codex-worker.sh: guard against unreadable task file before cat, write failure status and handoff artifacts on early exit
This commit is contained in:
@@ -150,6 +150,7 @@ function runCommand(commandName, args) {
|
|||||||
cwd: process.cwd(),
|
cwd: process.cwd(),
|
||||||
env: process.env,
|
env: process.env,
|
||||||
encoding: 'utf8',
|
encoding: 'utf8',
|
||||||
|
maxBuffer: 10 * 1024 * 1024,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -83,6 +83,11 @@ function validateLegacyTarget(target) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const IGNORED_DIRECTORY_NAMES = new Set([
|
||||||
|
'node_modules',
|
||||||
|
'.git',
|
||||||
|
]);
|
||||||
|
|
||||||
function listFilesRecursive(dirPath) {
|
function listFilesRecursive(dirPath) {
|
||||||
if (!fs.existsSync(dirPath)) {
|
if (!fs.existsSync(dirPath)) {
|
||||||
return [];
|
return [];
|
||||||
@@ -94,6 +99,9 @@ function listFilesRecursive(dirPath) {
|
|||||||
for (const entry of entries) {
|
for (const entry of entries) {
|
||||||
const absolutePath = path.join(dirPath, entry.name);
|
const absolutePath = path.join(dirPath, entry.name);
|
||||||
if (entry.isDirectory()) {
|
if (entry.isDirectory()) {
|
||||||
|
if (IGNORED_DIRECTORY_NAMES.has(entry.name)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
const childFiles = listFilesRecursive(absolutePath);
|
const childFiles = listFilesRecursive(absolutePath);
|
||||||
for (const childFile of childFiles) {
|
for (const childFile of childFiles) {
|
||||||
files.push(path.join(entry.name, childFile));
|
files.push(path.join(entry.name, childFile));
|
||||||
|
|||||||
@@ -348,7 +348,10 @@ function persistCanonicalSnapshot(snapshot, options = {}) {
|
|||||||
const writer = resolveStateStoreWriter(stateStore);
|
const writer = resolveStateStoreWriter(stateStore);
|
||||||
|
|
||||||
if (stateStore && !writer) {
|
if (stateStore && !writer) {
|
||||||
throw new Error('State store does not expose a supported session snapshot writer');
|
// The loaded object is a factory module (e.g. has createStateStore but no
|
||||||
|
// writer methods). Treat it the same as a missing state store and fall
|
||||||
|
// through to the JSON-file recording path below.
|
||||||
|
return writeFallbackSessionRecording(snapshot, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (writer) {
|
if (writer) {
|
||||||
|
|||||||
@@ -31,6 +31,21 @@ EOF
|
|||||||
}
|
}
|
||||||
|
|
||||||
mkdir -p "$(dirname "$handoff_file")" "$(dirname "$status_file")"
|
mkdir -p "$(dirname "$handoff_file")" "$(dirname "$status_file")"
|
||||||
|
|
||||||
|
if [[ ! -r "$task_file" ]]; then
|
||||||
|
write_status "failed" "- Error: task file is missing or unreadable (\`$task_file\`)"
|
||||||
|
{
|
||||||
|
echo "# Handoff"
|
||||||
|
echo
|
||||||
|
echo "- Failed: $(timestamp)"
|
||||||
|
echo "- Branch: \`$(git rev-parse --abbrev-ref HEAD)\`"
|
||||||
|
echo "- Worktree: \`$(pwd)\`"
|
||||||
|
echo
|
||||||
|
echo "Task file is missing or unreadable: \`$task_file\`"
|
||||||
|
} > "$handoff_file"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
write_status "running" "- Task file: \`$task_file\`"
|
write_status "running" "- Task file: \`$task_file\`"
|
||||||
|
|
||||||
prompt_file="$(mktemp)"
|
prompt_file="$(mktemp)"
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ function runCli(args, options = {}) {
|
|||||||
return spawnSync('node', [SCRIPT, ...args], {
|
return spawnSync('node', [SCRIPT, ...args], {
|
||||||
encoding: 'utf8',
|
encoding: 'utf8',
|
||||||
cwd: options.cwd || process.cwd(),
|
cwd: options.cwd || process.cwd(),
|
||||||
|
maxBuffer: 10 * 1024 * 1024,
|
||||||
env: {
|
env: {
|
||||||
...process.env,
|
...process.env,
|
||||||
...(options.env || {}),
|
...(options.env || {}),
|
||||||
|
|||||||
@@ -126,8 +126,8 @@ function runTests() {
|
|||||||
const result = run(['--target', 'cursor', 'typescript'], { cwd: projectDir, homeDir });
|
const result = run(['--target', 'cursor', 'typescript'], { cwd: projectDir, homeDir });
|
||||||
assert.strictEqual(result.code, 0, result.stderr);
|
assert.strictEqual(result.code, 0, result.stderr);
|
||||||
|
|
||||||
assert.ok(fs.existsSync(path.join(projectDir, '.cursor', 'rules', 'common', 'coding-style.md')));
|
assert.ok(fs.existsSync(path.join(projectDir, '.cursor', 'rules', 'common-coding-style.md')));
|
||||||
assert.ok(fs.existsSync(path.join(projectDir, '.cursor', 'rules', 'typescript', 'testing.md')));
|
assert.ok(fs.existsSync(path.join(projectDir, '.cursor', 'rules', 'typescript-testing.md')));
|
||||||
assert.ok(fs.existsSync(path.join(projectDir, '.cursor', 'agents', 'architect.md')));
|
assert.ok(fs.existsSync(path.join(projectDir, '.cursor', 'agents', 'architect.md')));
|
||||||
assert.ok(fs.existsSync(path.join(projectDir, '.cursor', 'commands', 'plan.md')));
|
assert.ok(fs.existsSync(path.join(projectDir, '.cursor', 'commands', 'plan.md')));
|
||||||
assert.ok(fs.existsSync(path.join(projectDir, '.cursor', 'hooks.json')));
|
assert.ok(fs.existsSync(path.join(projectDir, '.cursor', 'hooks.json')));
|
||||||
@@ -163,10 +163,10 @@ function runTests() {
|
|||||||
const result = run(['--target', 'antigravity', 'typescript'], { cwd: projectDir, homeDir });
|
const result = run(['--target', 'antigravity', 'typescript'], { cwd: projectDir, homeDir });
|
||||||
assert.strictEqual(result.code, 0, result.stderr);
|
assert.strictEqual(result.code, 0, result.stderr);
|
||||||
|
|
||||||
assert.ok(fs.existsSync(path.join(projectDir, '.agent', 'rules', 'common', 'coding-style.md')));
|
assert.ok(fs.existsSync(path.join(projectDir, '.agent', 'rules', 'common-coding-style.md')));
|
||||||
assert.ok(fs.existsSync(path.join(projectDir, '.agent', 'rules', 'typescript', 'testing.md')));
|
assert.ok(fs.existsSync(path.join(projectDir, '.agent', 'rules', 'typescript-testing.md')));
|
||||||
assert.ok(fs.existsSync(path.join(projectDir, '.agent', 'commands', 'plan.md')));
|
assert.ok(fs.existsSync(path.join(projectDir, '.agent', 'workflows', 'plan.md')));
|
||||||
assert.ok(fs.existsSync(path.join(projectDir, '.agent', 'agents', 'architect.md')));
|
assert.ok(fs.existsSync(path.join(projectDir, '.agent', 'skills', 'architect.md')));
|
||||||
|
|
||||||
const statePath = path.join(projectDir, '.agent', 'ecc-install-state.json');
|
const statePath = path.join(projectDir, '.agent', 'ecc-install-state.json');
|
||||||
const state = readJson(statePath);
|
const state = readJson(statePath);
|
||||||
@@ -176,7 +176,7 @@ function runTests() {
|
|||||||
assert.deepStrictEqual(state.resolution.selectedModules, ['rules-core', 'agents-core', 'commands-core']);
|
assert.deepStrictEqual(state.resolution.selectedModules, ['rules-core', 'agents-core', 'commands-core']);
|
||||||
assert.ok(
|
assert.ok(
|
||||||
state.operations.some(operation => (
|
state.operations.some(operation => (
|
||||||
operation.destinationPath.endsWith(path.join('.agent', 'commands', 'plan.md'))
|
operation.destinationPath.endsWith(path.join('.agent', 'workflows', 'plan.md'))
|
||||||
)),
|
)),
|
||||||
'Should record manifest command file copy operation'
|
'Should record manifest command file copy operation'
|
||||||
);
|
);
|
||||||
@@ -266,9 +266,9 @@ function runTests() {
|
|||||||
const result = run(['--target', 'antigravity', '--profile', 'core'], { cwd: projectDir, homeDir });
|
const result = run(['--target', 'antigravity', '--profile', 'core'], { cwd: projectDir, homeDir });
|
||||||
assert.strictEqual(result.code, 0, result.stderr);
|
assert.strictEqual(result.code, 0, result.stderr);
|
||||||
|
|
||||||
assert.ok(fs.existsSync(path.join(projectDir, '.agent', 'rules', 'common', 'coding-style.md')));
|
assert.ok(fs.existsSync(path.join(projectDir, '.agent', 'rules', 'common-coding-style.md')));
|
||||||
assert.ok(fs.existsSync(path.join(projectDir, '.agent', 'agents', 'architect.md')));
|
assert.ok(fs.existsSync(path.join(projectDir, '.agent', 'skills', 'architect.md')));
|
||||||
assert.ok(fs.existsSync(path.join(projectDir, '.agent', 'commands', 'plan.md')));
|
assert.ok(fs.existsSync(path.join(projectDir, '.agent', 'workflows', 'plan.md')));
|
||||||
assert.ok(!fs.existsSync(path.join(projectDir, '.agent', 'skills', 'tdd-workflow', 'SKILL.md')));
|
assert.ok(!fs.existsSync(path.join(projectDir, '.agent', 'skills', 'tdd-workflow', 'SKILL.md')));
|
||||||
|
|
||||||
const state = readJson(path.join(projectDir, '.agent', 'ecc-install-state.json'));
|
const state = readJson(path.join(projectDir, '.agent', 'ecc-install-state.json'));
|
||||||
|
|||||||
Reference in New Issue
Block a user