chore: clean up clear-cut ESLint warnings (#732) (#734)

Pay down pre-existing error→warn lint debt. Removes dead imports/vars, unused functions, redundant regex/string escapes, and stale eslint-disable directives; converts unused `catch (_e)` to optional catch binding (src/*.cts).

No behavior change. Lint 345→125 warnings (0 errors); deferred categories (n/no-process-exit, test-sleeps, control-regex) tracked in #732 for follow-up. Full test suite green (0 failures); code-review verified all removals unused and all escape fixes semantics-preserving.

Closes #732

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Tom Boucher
2026-06-06 11:24:48 -04:00
committed by GitHub
parent 42b74100f1
commit ba231ecbfc
117 changed files with 132 additions and 350 deletions

View File

@@ -271,7 +271,7 @@ function createHub({ cjsRegistry, manifest, logger }: HubOptions = {}): { dispat
}
// err variant: already has kind + typed payload
// Double-cast through unknown to satisfy strict index-signature check.
return hubResult as unknown as Record<string, unknown>; // eslint-disable-line @typescript-eslint/no-unsafe-return
return hubResult as unknown as Record<string, unknown>;
}
/**

View File

@@ -679,7 +679,6 @@ function cmdConfigSetModelProfile(cwd: string, profile: string | undefined, raw:
error(`Usage: config-set-model-profile <${VALID_PROFILES.join('|')}>`);
}
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
const normalizedProfile = profile!.toLowerCase().trim();
if (!VALID_PROFILES.includes(normalizedProfile)) {
error(`Invalid profile '${String(profile)}'. Valid profiles: ${VALID_PROFILES.join(', ')}`);

View File

@@ -33,7 +33,7 @@ function isGraphifyEnabled(planningDir: string): boolean {
(config.graphify as Record<string, unknown>).enabled === true
) return true;
return false;
} catch (_e) {
} catch {
return false;
}
}
@@ -230,7 +230,7 @@ function safeReadJson(filePath: string): Graph | null {
try {
if (!fs.existsSync(filePath)) return null;
return JSON.parse(fs.readFileSync(filePath, 'utf8')) as Graph;
} catch (_e) {
} catch {
return null;
}
}

View File

@@ -61,7 +61,7 @@ function isIntelEnabled(planningDir: string): boolean {
(config.intel as Record<string, unknown>).enabled === true
) return true;
return false;
} catch (_e) {
} catch {
return false;
}
}
@@ -104,7 +104,7 @@ function safeReadJson(filePath: string): IntelData | null {
const raw = platformReadSync(filePath);
if (raw === null) return null;
return JSON.parse(raw) as IntelData;
} catch (_e) {
} catch {
return null;
}
}
@@ -118,7 +118,7 @@ function hashFile(filePath: string): string | null {
const content = platformReadSync(filePath);
if (content === null) return null;
return crypto.createHash('sha256').update(content).digest('hex');
} catch (_e) {
} catch {
return null;
}
}
@@ -175,22 +175,6 @@ function matchesInValue(value: unknown, lowerTerm: string): boolean {
return false;
}
/**
* Search for a term in arch.md text content.
* Returns matching lines.
*/
function searchArchMd(filePath: string, term: string): string[] {
try {
const content = platformReadSync(filePath);
if (content === null) return [];
const lowerTerm = term.toLowerCase();
const lines = content.split(/\r?\n/);
return lines.filter(line => line.toLowerCase().includes(lowerTerm));
} catch (_e) {
return [];
}
}
// ─── Public API ──────────────────────────────────────────────────────────────
interface IntelQueryResult {

View File

@@ -12,7 +12,6 @@
// Types
// ---------------------------------------------------------------------------
type ProviderKind = 'docs' | 'web' | 'scrape';
type ConfidenceLevel = 'HIGH' | 'MEDIUM' | 'LOW';
interface ProviderWaterfall {

View File

@@ -27,9 +27,6 @@ const MIGRATED_PHASE_HEADING_RE = /^#{2,4}\s*(?:\[[^\]]+\]\s*)?Phase\s+\d+-\d{2}
// The optional bracket-token prefix (e.g., [GSD]) must be tested before the emoji group.
const MILESTONE_HEADING_RE = /^##\s+(?:\[[^\]]+\]\s+|Roadmap\s+|[✅🚧]\s*)?v(\d+)\.(\d+)(?:\s|:)/iu;
// Matches checklist phase references: - [ ] **Phase N:** or - [x] **Phase N:** (also decimal)
const CHECKLIST_PHASE_RE = /^(\s*-\s*\[[ x]\]\s*\*{0,2})Phase\s+(\d+[A-Z]?(?:\.\d+)*)\s*:/gi;
// ─── Types ────────────────────────────────────────────────────────────────────
interface ParsedPhaseEntry {
@@ -199,19 +196,6 @@ function buildNewDirName(oldDirName: string, newId: string, projectCode: string
return projectCode ? `${projectCode}-${newBase}` : newBase;
}
/**
* Read project_code from config.json if present.
*/
function readProjectCode(configPath: string): string | null {
try {
const raw = fs.readFileSync(configPath, 'utf8');
const parsed = JSON.parse(raw) as Record<string, unknown>;
return typeof parsed['project_code'] === 'string' ? parsed['project_code'] : null;
} catch {
return null;
}
}
// ─── computeMigrationPlan ─────────────────────────────────────────────────────
/**

View File

@@ -17,7 +17,7 @@ import fs from 'node:fs';
import path from 'node:path';
// eslint-disable-next-line @typescript-eslint/no-require-imports
import core = require('./core.cjs');
const { toPosixPath, readSubdirectories } = core;
const { readSubdirectories } = core;
// eslint-disable-next-line @typescript-eslint/no-require-imports
import planScan = require('./plan-scan.cjs');
// eslint-disable-next-line @typescript-eslint/no-require-imports
@@ -163,7 +163,6 @@ function getOtherActiveWorkstreamInventories(cwd: string, excludeWs: string): Wo
.filter(inventory => !isCompletedInventory(inventory.status));
}
// Re-export toPosixPath for compatibility (used by callers indirectly through core)
export = {
countPhaseFiles,
countRoadmapPhases,