* fix(#2602): discover project-local Codex agents
- Select an existing local Codex agents directory before global fallback
- Prove init reports the canonical local installation through compiled CJS
* test(#2602): lock Codex agent precedence
- Cover override, local authority, global fallback, and runtime compatibility
- Exercise installed state through the compiled resolver
* fix(#2602): resolve local Codex agent skills
- Pass the canonical project root to the non-Claude persona fallback
- Cover nested-Codex fallback and Claude compatibility through the CLI
* test(#2602): cover local Codex validation status
- Assert emitted validate and health commands use the project-local install
- Preserve empty local-directory authority beside complete global agents
* fix(#2602): align validation with local Codex discovery
- Pass the resolved runtime and project root to health W010
- Resolve the validate-agents runtime before checking installation status
* test(#2602): cover local Codex docs status
- Assert docs-init reports an authoritative empty local install as unhealthy
* fix(#2602): align docs with local Codex discovery
- Pass the resolved runtime and canonical project root to the shared agent checker
* fix(#2602): honor agent-skills runtime override
- Resolve agent-skills fallback runtime through the canonical project resolver
- Cover conflicting config and GSD_RUNTIME values through the emitted CLI
* fix(#2602): ignore non-directory local agents paths
- Treat only a local Codex agents directory as authoritative
- Cover regular-file fallback through the emitted install checker
* chore(#2602): add changelog fragment
- record the user-visible local Codex agent discovery fix for PR #2623
* fix(#2602): align local agent discovery with runtime policy
- Resolve Codex's local config directory through the canonical runtime policy
- Use test-managed cleanup for local-agent discovery coverage
* fix(#2602): discover local agents across runtimes
- Prefer manifest-backed project-local installs for non-Claude runtimes
- Respect runtime-specific local install roots and preserve global fallback behavior
- Cover native, partial, cross-runtime, and project-root local discovery
* fix(#2602): preserve agent discovery fallback
- Fall back globally when local-install probes fail
- Document and test symlink rejection
- Align the changeset with repository format
* fix(#2602): reuse local directory policy
- Resolve runtimes without local config through the canonical sentinel
- Document the manifest gate and refresh the context index
---------
Co-authored-by: Daniel E. <daniel.e@teachingstrategies.com>
Co-authored-by: Rezolv <dave@sienkowski.com>
* refactor(#1294): T-final — delete the core.cjs re-export spine (epic #1267 complete)
After T0–T6 nothing imports core, so retire the spine and its scaffolding:
- delete src/core.cts (and the gitignored gsd-core/bin/lib/core.cjs artifact;
remove its .gitignore + eslint-ignore entries)
- delete scripts/lint-core-spine-imports.cjs + its allowlist; drop it from the
package.json lint:ci chain
- regenerate docs/INVENTORY-MANIFEST.json (drops the core.cjs surface)
- sweep stale references: CONTEXT.md glossary back-compat clauses (spine retired,
callers import the leaf directly), planning-config.md CONFIG_DEFAULTS owner,
and false present-tense core.cjs claims in leaf-module docstrings
The ADR-857 decomposition is complete: the former Core god-module is fully
dissolved into its leaf modules; no re-export spine remains. No behaviour change.
Closes#1294
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* fix(#1294): migrate the computed-path core.cjs importers the literal grep missed
bin/install.js used require(path.join(_gsdLibDir, 'core.cjs')) (a computed
path, and bin/install.js was never in the convergence lint's scan roots), and
~8 test files referenced core.cjs via path.join/readFileSync/existsSync/FILE_ARG
forms the literal-string migration grep missed. Route install.js's symbols to
their leaves (RUNTIME_PROFILE_MAP->model-catalog, resolveTierEntry/EFFORT_SET->
model-resolver) and repoint/adjust the test references to the leaves. Recovers
the 161 'Cannot find module core.cjs' failures from the spine deletion.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Re-home the 6 implementation functions squatting in the core.cjs re-export
spine (ADR-857) into the modules whose interface they belong to, with core
re-exporting them BY REFERENCE so all 32 callers + the shim-identity tests
keep resolving unchanged:
- worktree-safety: resolveWorktreeRoot, pruneOrphanedWorktrees
- git-base-branch (broadened to the Git Query Module): gitWorktreeInfoInternal
- agent-install-check (new leaf): getAgentsDir, checkAgentsInstalled
- delete the _resetRuntimeWarningCacheForTests wrapper; consumers use a
shared resetRuntimeWarningCaches() helper in tests/helpers.cjs
Add scripts/lint-core-spine-imports.cjs (migration-convergence lint with a
30-importer allowlist, wired into lint:ci) so the staged spine retirement
provably converges: CI fails on any new ./core import. Register the new
generated agent-install-check.cjs in eslint-ignore + .gitignore +
INVENTORY-MANIFEST.json.
No behaviour change. First tranche (T0) of epic #1267.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>