Centralized resolver for .agents/ subpaths — replaces scattered hardcoded
paths across hooks and ao subcommands. Honors env precedence:
AO_HOME > CLAUDE_PLUGIN_DATA > \${PWD}/.agents.
- lib/ao-paths.sh: sourceable shell resolver, emits export NAME=value lines
on stdout. Idempotent. Per-subdir env overrides win over the layout.
- cli/internal/paths/paths.go: Go package with Resolve() / ResolveFromRepo()
/ Validate(). 12 resolved roots: AgentsDir, KnowledgeRoot, HooksDir,
ScopeLock, RPIDir, FindingsDir, PlansDir, CouncilDir, LearningsDir,
PatternsDir, DecisionsDir.
- L1 unit + L2 cross-language scenario test asserting shell + Go agree
for the same env (TestShellGoAgreement: 3 subcases).
KnowledgeRoot intentionally maps to .agents/wiki only (internal compiled
wiki); raw+wiki external knowledge tree is unmapped per f-2026-05-01-005.
This is the foundation; consumer migration lands in I5 under a warn-only
ratchet (per warn-then-fail-ratchet pattern).
Wave 1 of epic soc-irg1 (gstack absorption Tier 1).