diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e3529e5c1..07535b33a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -155,7 +155,9 @@ jobs: path: | *.tsbuildinfo packages/*/*.tsbuildinfo - key: tsbuild-${{ runner.os }}-${{ hashFiles('package-lock.json', 'tsconfig*.json', 'packages/*/tsconfig.json') }} + dist + packages/*/dist + key: tsbuild-${{ runner.os }}-${{ hashFiles('package-lock.json', 'tsconfig*.json', 'packages/*/tsconfig.json', 'src/**/*.ts', 'packages/*/src/**/*.ts') }} restore-keys: | tsbuild-${{ runner.os }}- @@ -222,7 +224,9 @@ jobs: path: | *.tsbuildinfo packages/*/*.tsbuildinfo - key: tsbuild-${{ runner.os }}-${{ hashFiles('package-lock.json', 'tsconfig*.json', 'packages/*/tsconfig.json') }} + dist + packages/*/dist + key: tsbuild-${{ runner.os }}-${{ hashFiles('package-lock.json', 'tsconfig*.json', 'packages/*/tsconfig.json', 'src/**/*.ts', 'packages/*/src/**/*.ts') }} restore-keys: | tsbuild-${{ runner.os }}- @@ -259,7 +263,9 @@ jobs: path: | *.tsbuildinfo packages/*/*.tsbuildinfo - key: tsbuild-${{ runner.os }}-${{ hashFiles('package-lock.json', 'tsconfig*.json', 'packages/*/tsconfig.json') }} + dist + packages/*/dist + key: tsbuild-${{ runner.os }}-${{ hashFiles('package-lock.json', 'tsconfig*.json', 'packages/*/tsconfig.json', 'src/**/*.ts', 'packages/*/src/**/*.ts') }} restore-keys: | tsbuild-${{ runner.os }}- diff --git a/src/resources/extensions/gsd/bootstrap/register-extension.ts b/src/resources/extensions/gsd/bootstrap/register-extension.ts index 1ed3031cd..bdcc436ab 100644 --- a/src/resources/extensions/gsd/bootstrap/register-extension.ts +++ b/src/resources/extensions/gsd/bootstrap/register-extension.ts @@ -11,6 +11,7 @@ import { registerQueryTools } from "./query-tools.js"; import { registerHooks } from "./register-hooks.js"; import { registerShortcuts } from "./register-shortcuts.js"; import { writeCrashLog } from "./crash-log.js"; +import { logWarning } from "../workflow-logger.js"; export { writeCrashLog } from "./crash-log.js"; @@ -86,8 +87,9 @@ export function registerGsdExtension(pi: ExtensionAPI): void { try { register(); } catch (err) { - process.stderr.write( - `[gsd] Failed to register ${name}: ${err instanceof Error ? err.message : String(err)}\n`, + logWarning( + "bootstrap", + `Failed to register ${name}: ${err instanceof Error ? err.message : String(err)}`, ); } } diff --git a/src/resources/extensions/gsd/index.ts b/src/resources/extensions/gsd/index.ts index a50fd6c24..88bc6ee15 100644 --- a/src/resources/extensions/gsd/index.ts +++ b/src/resources/extensions/gsd/index.ts @@ -28,8 +28,10 @@ export default async function registerExtension(pi: ExtensionAPI) { const { registerGsdExtension } = await import("./bootstrap/register-extension.js"); registerGsdExtension(pi); } catch (err) { - process.stderr.write( - `[gsd] Extension setup partially failed — /gsd commands are available but shortcuts/tools may be missing: ${err instanceof Error ? err.message : String(err)}\n`, + const { logWarning } = await import("./workflow-logger.js"); + logWarning( + "bootstrap", + `Extension setup partially failed — /gsd commands are available but shortcuts/tools may be missing: ${err instanceof Error ? err.message : String(err)}`, ); } } diff --git a/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts b/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts index 24c2193e0..f48f91dcd 100644 --- a/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +++ b/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts @@ -58,14 +58,14 @@ describe("index.ts bootstrap isolation", () => { ); }); - test("writes to stderr on bootstrap failure", () => { + test("logs warning on bootstrap failure via workflow-logger", () => { assert.ok( - indexSrc.includes("process.stderr.write"), - "must write to stderr when bootstrap fails", + indexSrc.includes("logWarning"), + "must use logWarning when bootstrap fails", ); assert.ok( - indexSrc.includes("[gsd] Extension setup partially failed"), - "stderr message must indicate partial failure with /gsd still available", + indexSrc.includes("Extension setup partially failed"), + "warning message must indicate partial failure with /gsd still available", ); }); }); @@ -141,10 +141,14 @@ describe("register-extension.ts defensive registration", () => { ); }); - test("writes to stderr when a non-critical registration fails", () => { + test("logs warning when a non-critical registration fails", () => { assert.ok( - registerExtSrc.includes("[gsd] Failed to register"), - "must write descriptive error to stderr for individual registration failures", + registerExtSrc.includes("Failed to register"), + "must log descriptive warning for individual registration failures", + ); + assert.ok( + registerExtSrc.includes("logWarning"), + "must use logWarning from workflow-logger", ); }); });