From a5f213e73ead1aca0cafd1803cb71ce4289374a2 Mon Sep 17 00:00:00 2001 From: Tom Boucher Date: Mon, 15 Jun 2026 16:18:54 -0400 Subject: [PATCH] =?UTF-8?q?refactor(#1281):=20T2=20=E2=80=94=20migrate=201?= =?UTF-8?q?2=20single-leaf=20callers=20off=20the=20core=20spine=20(batch?= =?UTF-8?q?=201)=20(#1282)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per the T1 design rubber-duck, batch by FILE so each tranche drops convergence-lint allowlist entries. Migrate 12 files' core imports to the leaf modules directly (behaviour-identical — leaves are the objects core re-exports by reference): - io (output/error/ERROR_REASON): agent-command-router, capability-state, capability-writer, frontmatter, gsd2-import, learnings, loop-resolver, task-command-router - roadmap-command-router -> config-loader; workstream-inventory -> core-utils - milestone, verify -> their full leaf sets (both were multi-leaf, not single-leaf as first scoped; migrated completely) All 12 files now import zero core symbols and are removed from the allowlist (30 -> 18). core.cts re-exports untouched (still serve the remaining 18 files); teardown is T-final. Stale core.cjs docstrings in the migrated files corrected to reference io.cjs. No behaviour change. Closes #1281 Co-authored-by: Claude Opus 4.8 --- .../lint-core-spine-imports.allowlist.json | 12 ------- src/agent-command-router.cts | 4 +-- src/capability-state.cts | 12 +++---- src/capability-writer.cts | 6 ++-- src/frontmatter.cts | 4 +-- src/gsd2-import.cts | 4 +-- src/learnings.cts | 4 +-- src/loop-resolver.cts | 12 +++---- src/milestone.cts | 25 +++++++------ src/roadmap-command-router.cts | 4 +-- src/task-command-router.cts | 4 +-- src/verify.cts | 36 +++++++++---------- src/workstream-inventory.cts | 4 +-- 13 files changed, 59 insertions(+), 72 deletions(-) diff --git a/scripts/lint-core-spine-imports.allowlist.json b/scripts/lint-core-spine-imports.allowlist.json index bdb738c1e..3f1ffbcb1 100644 --- a/scripts/lint-core-spine-imports.allowlist.json +++ b/scripts/lint-core-spine-imports.allowlist.json @@ -2,34 +2,22 @@ "_comment": "Files allowed to import the core re-export spine during the staged retirement (issue #1268). Entries are REMOVED as each tranche migrates a leaf; the file + this lint are deleted in T-final.", "allow": [ "gsd-core/bin/gsd-tools.cjs", - "src/agent-command-router.cts", "src/audit-command-router.cts", - "src/capability-state.cts", - "src/capability-writer.cts", "src/check-command-router.cts", "src/commands.cts", "src/config.cts", "src/docs.cts", - "src/frontmatter.cts", "src/gap-checker.cts", "src/graphify-command-router.cts", - "src/gsd2-import.cts", "src/init.cts", "src/intel-command-router.cts", - "src/learnings.cts", - "src/loop-resolver.cts", - "src/milestone.cts", "src/phase.cts", "src/profile-output.cts", - "src/roadmap-command-router.cts", "src/roadmap.cts", "src/state.cts", - "src/task-command-router.cts", "src/template.cts", "src/uat.cts", "src/verification.cts", - "src/verify.cts", - "src/workstream-inventory.cts", "src/workstream.cts" ] } diff --git a/src/agent-command-router.cts b/src/agent-command-router.cts index e11f415d0..71b89a7dc 100644 --- a/src/agent-command-router.cts +++ b/src/agent-command-router.cts @@ -7,8 +7,8 @@ */ // eslint-disable-next-line @typescript-eslint/no-require-imports -import core = require('./core.cjs'); -const { output, error, ERROR_REASON } = core; +import io = require('./io.cjs'); +const { output, error, ERROR_REASON } = io; // ─── Types ──────────────────────────────────────────────────────────────────── diff --git a/src/capability-state.cts b/src/capability-state.cts index c410782d3..dc0c58475 100644 --- a/src/capability-state.cts +++ b/src/capability-state.cts @@ -17,9 +17,9 @@ * pure, config-only resolution with no filesystem I/O. * cmdCapabilityState is the I/O handler. * - * Dependencies (leaf modules only — no core.cjs circular risk): + * Dependencies (leaf modules only — no circular risk): * - node:path - * - ./core.cjs (output, error) + * - ./io.cjs (output, error) * - ./capability-activation.cjs (_resolveActivationValue) * - ./install-profiles.cjs (readActiveProfile, loadSkillsManifest, resolveProfile) * - ./surface.cjs (resolveSurface) @@ -32,8 +32,8 @@ import path from 'node:path'; import fs from 'node:fs'; // eslint-disable-next-line @typescript-eslint/no-require-imports -import core = require('./core.cjs'); -const { output: coreOutput, error: coreError } = core; +import ioMod = require('./io.cjs'); +const { output: coreOutput, error: coreError } = ioMod; // eslint-disable-next-line @typescript-eslint/no-require-imports import activationMod = require('./capability-activation.cjs'); @@ -363,7 +363,7 @@ function _resolveManifest(commandsGsdDir: string, configDir: string): Map