chore(bmad-module): diagnose vendor:check ide-sync drift in CI

Print committed-vs-fresh lengths and the first differing window on a
vendor:check mismatch so a CI-only drift (passes locally, fails in CI) is
actionable from the log. Temporary diagnostic to locate the divergence.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
pbean 2026-06-21 11:40:05 -07:00
parent ce314ba600
commit 962e9a068a
1 changed files with 24 additions and 0 deletions

View File

@ -140,6 +140,10 @@ if (checkMode) {
` The committed bundle no longer matches tools/installer/ide/*.\n` +
` Fix: run \`npm run vendor:build\` and commit the regenerated files.\n`,
);
// Pinpoint the first divergence so a CI-only mismatch is diagnosable from the
// log instead of just "they differ".
reportFirstDiff('ide-sync.mjs', currentBundle, built);
reportFirstDiff('platform-codes.yaml', currentSidecar, sidecar);
process.exit(1);
}
@ -149,6 +153,26 @@ process.stdout.write(`built ide-sync.mjs + platform-codes.yaml (self-check OK, e
// ---------------------------------------------------------------------------
// On a --check mismatch, print the committed vs freshly-built lengths and a
// window around the first differing character. Keeps CI logs actionable when a
// drift is environment-specific and can't be reproduced locally.
function reportFirstDiff(label, committed, fresh) {
if (committed === fresh) return;
if (committed == null) {
process.stderr.write(` [diff] ${label}: committed file missing\n`);
return;
}
const n = Math.min(committed.length, fresh.length);
let i = 0;
while (i < n && committed[i] === fresh[i]) i++;
const win = (s) => JSON.stringify(s.slice(Math.max(0, i - 40), i + 40));
process.stderr.write(
` [diff] ${label}: committed=${committed.length}B fresh=${fresh.length}B firstDiff@${i}\n` +
` committed: ${win(committed)}\n` +
` fresh : ${win(fresh)}\n`,
);
}
async function selfCheck(bundleText, sidecarText) {
const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'bmad-ide-sync-check-'));
try {