* 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>
First leaf-migration tranche of epic #1267 (after T0 #1268). Migrate the
via-core callers of the two leaves T0 created to import from the leaf
modules directly, and stop core re-exporting their symbols:
- checkAgentsInstalled: docs.cts, verify.cts, init.cts -> agent-install-check.cjs
- gitWorktreeInfoInternal: init.cts -> git-base-branch.cjs
- getAgentsDir had no external via-core caller (internal to the leaf)
core no longer re-exports getAgentsDir / checkAgentsInstalled /
gitWorktreeInfoInternal; the now-unused agent-install-check + git-base-branch
requires are dropped from core; the shim-identity assertions for these are
deleted (behaviour tests retained). Convergence lint stays green (0 new).
No behaviour change.
Closes#1277
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>