chore(deps): cover .mts/.cts in the shared-source scan, fix the README validate row
Both from Copilot's review of #1962. The candidate-set enumeration matched only `.ts`/`.tsx`, while `verify:format-coverage` and `verify:typecheck-coverage` both gate all four TypeScript extensions. No `.mts`/`.cts` exists under `core/` or `test-servers/src` today, which is exactly why the omission would have gone unnoticed until a shared dependency arrived through one and skewed — the failure this guard exists to prevent. Extract the rule as the exported `isSharedSourceFile` predicate, cover all four extensions, and pin it with regression tests (including path-boundary anchoring, so a `core-internal/` sibling isn't swept in). The README's `validate` row also omitted `test:scripts` and claimed typecheck was cli/tui only; launcher runs one too, and web typechecks via `tsc -b` inside its `build`. Restate the row to match the actual script chain. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HDdo1rNRVQnVRRdsqSrvG3
This commit is contained in:
parent
6c33da38c9
commit
e480fdc49d
1 changed files with 51 additions and 3 deletions
|
|
@ -170,14 +170,30 @@ export function partitionSkew(skewed, tolerated = TOLERATED_SKEW) {
|
|||
};
|
||||
}
|
||||
|
||||
/** Tracked `.ts`/`.tsx` files under the shared first-party source trees. */
|
||||
// The TypeScript extensions the shared trees can hold. Deliberately the same
|
||||
// four `verify:format-coverage` and `verify:typecheck-coverage` gate on: a
|
||||
// `.mts`/`.cts` under `core/` or `test-servers/src` is typechecked like any
|
||||
// other source, so its imports must reach the candidate set too. None exist
|
||||
// under those trees today, which is exactly why omitting them would go
|
||||
// unnoticed until a new shared dependency arrived through one and skewed.
|
||||
const SOURCE_EXTENSIONS = [".ts", ".tsx", ".mts", ".cts"];
|
||||
|
||||
/** Whether a repo-relative path is a TypeScript source of a shared tree. */
|
||||
export function isSharedSourceFile(file) {
|
||||
if (!SOURCE_EXTENSIONS.some((ext) => file.endsWith(ext))) return false;
|
||||
// Anchored on a path boundary so a sibling whose name merely starts with a
|
||||
// shared dir (`core-internal/`, `test-servers/src-legacy/`) isn't swept in.
|
||||
return SHARED_SOURCE_DIRS.some((dir) => file.startsWith(`${dir}/`));
|
||||
}
|
||||
|
||||
/** Tracked TypeScript files under the shared first-party source trees. */
|
||||
function sharedSourceFiles() {
|
||||
const out = execFileSync(
|
||||
"git",
|
||||
["ls-files", "--", ...SHARED_SOURCE_DIRS.map((d) => `${d}/**`)],
|
||||
{ cwd: repoRoot, encoding: "utf8" },
|
||||
);
|
||||
return out.split("\n").filter((f) => f.endsWith(".ts") || f.endsWith(".tsx"));
|
||||
return out.split("\n").filter(isSharedSourceFile);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue