* fix(#2834): write defaults.json before agent TOML generation on clean Codex install Extracted writeNonClaudeDefaults(runtime) and called it BEFORE installCodexConfig so the runtime-aware model resolver has resolve_model_ids=omit + runtime=codex in ~/.gsd/defaults.json before agent TOMLs are generated. Pre-fix, a clean first Codex install generated TOMLs with no model fields (the resolver didn't know the runtime); a second run fixed it. The original inline defaults-write block (which ran AFTER agent generation) is replaced by the earlier function call (idempotent). * chore(#2834): changeset fragment * fix+test(#2834): acknowledge codex TOML drift (emitted-attribution) + fix test comment window The emitted-attribution gate flags 19 codex agent TOMLs that now carry model-routing fields (the fix's correct effect) but can't link them to a .md or src/ change (the fix is in bin/install.js ordering). Acknowledge the drift in emitted-drift-ack.json. Fix the test's comment-detection window (300 chars to capture the #2834 rationale). * fix(#2834): ack remaining 15 codex TOML drift paths * chore(#2834): backfill changeset PR number (2900) * chore(#2834): ack code-review.md growth from concurrent merge (rebase pickup) * fix(#2834): remove stale code-review.md ack (emitted-attribution failure) CI failed: 'differential attribution over the real tree' — the code-review.md ack added in 6e0b4b3b8 ('ack code-review.md growth from concurrent merge') is STALE: this PR's diff does not touch code-review.md (only bin/install.js + tests + changeset), so the ack explains growth that isn't here. The base already absorbed the concurrent code-review.md growth; the ack is inert here and the gate flags it as stale. Remove it. --------- Co-authored-by: Test <test@example.com>
44 lines
2.4 KiB
JavaScript
44 lines
2.4 KiB
JavaScript
// allow-test-rule: structural-implementation-guard (#2834)
|
|
'use strict';
|
|
|
|
// Regression guard for #2834: on a clean Codex install, agent TOMLs contained no
|
|
// model-routing fields because defaults.json (resolve_model_ids + runtime) was written
|
|
// AFTER installCodexConfig generated the TOMLs. The fix extracts writeNonClaudeDefaults
|
|
// and calls it BEFORE installCodexConfig. This test asserts the ordering invariant in
|
|
// the install source so a future edit can't silently re-introduce the gap.
|
|
|
|
const { test } = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const INSTALL_JS = path.join(__dirname, '..', 'bin', 'install.js');
|
|
|
|
test('writeNonClaudeDefaults is called before installCodexConfig in the Codex install flow (#2834)', () => {
|
|
const src = fs.readFileSync(INSTALL_JS, 'utf8');
|
|
|
|
// Find the call to writeNonClaudeDefaults that precedes installCodexConfig.
|
|
const writeIdx = src.indexOf('writeNonClaudeDefaults(runtime);');
|
|
assert.ok(writeIdx !== -1, 'writeNonClaudeDefaults(runtime) must be called in the install flow');
|
|
|
|
// Find the FIRST installCodexConfig call AFTER the writeNonClaudeDefaults call.
|
|
const codexGenIdx = src.indexOf('installCodexConfig(targetDir', writeIdx);
|
|
assert.ok(codexGenIdx !== -1 && codexGenIdx > writeIdx,
|
|
'installCodexConfig must be called AFTER writeNonClaudeDefaults so defaults.json ' +
|
|
'(resolve_model_ids + runtime) exists before agent TOML generation reads it (#2834)');
|
|
|
|
// The #2834 comment must be present at the call site.
|
|
const callSite = src.slice(writeIdx - 300, writeIdx + 100);
|
|
assert.ok(/#2834/.test(callSite), 'the writeNonClaudeDefaults call must carry the #2834 rationale comment');
|
|
});
|
|
|
|
test('writeNonClaudeDefaults function exists and is a no-op for Claude (#2834)', () => {
|
|
const src = fs.readFileSync(INSTALL_JS, 'utf8');
|
|
const fnIdx = src.indexOf('function writeNonClaudeDefaults(');
|
|
assert.ok(fnIdx !== -1, 'writeNonClaudeDefaults must be defined as a function');
|
|
const fnBody = src.slice(fnIdx, fnIdx + 1200);
|
|
assert.ok(/nativeModelAliases/.test(fnBody), 'writeNonClaudeDefaults must early-return for Claude (nativeModelAliases check)');
|
|
assert.ok(/resolve_model_ids/.test(fnBody), 'writeNonClaudeDefaults must write resolve_model_ids');
|
|
assert.ok(/defaults\.runtime/.test(fnBody), 'writeNonClaudeDefaults must write runtime');
|
|
});
|