validateCLI command (2026-03-25): validate index structure from the command line (ai-loadout validate <index>)- Fix:
loadIndex()now emits structured error on malformed JSON instead of raw stack trace (2026-03-25) - Fix (CI) (2026-05-18, PR #8):
tsconfig.jsonadds"types": ["node"]so TypeScript 6 +@types/node25 +module: Node16actually include node typings — CI had been red since 2026-04-25 withTS2591 Cannot find name 'node:fs'across allnode:*imports - Fix (security) (2026-05-18): pick up
npm audit fixfor transitivebrace-expansion(GHSA-f886-m6hf-6m8v, GHSA-jxxr-4gwj-5jf2, moderate) so thenpm audit --audit-level=moderateCI gate passes
- README overhaul: Document full API surface — agent runtime (
planLoad,recordLoad,manualLookup), resolver, observability, merge, CLI commands - Add claude-memories to consumers list
- Fix tokenizer: hyphens now split into separate tokens (
claude-memories→claude+memories), fixing keyword matching for hyphenated task descriptions - Dogfooded end-to-end: install → index → resolve → planLoad against a real 32-entry workspace
- Agent runtime contract:
planLoad(),recordLoad(),manualLookup()— the canonical agent integration API - LoadPlan: stable output shape with preload/onDemand/manual separation, provenance, budget, token costs
- AGENT_CONTRACT.md: portable integration guide for Claude agents, MCP servers, CLIs, and editor extensions
- SPEC.md updated with runtime section and LoadPlan schema
- 13 new tests (runtime), 93 total
- Hierarchical resolver:
discoverLayers(),resolveLoadout()for layered indexes (global → org → project → session) - Entry explanation:
explainEntry()traces an entry's decision path across layers ("why did this rule win?") - CLI:
ai-loadout resolveandai-loadout explain <id>commands - CLI options:
--project,--global,--org,--sessionfor resolver configuration - Environment variables:
$AI_LOADOUT_ORG,$AI_LOADOUT_SESSIONfor layer discovery - SPEC.md updated with resolver semantics and CLI reference
- 17 new tests (resolver), 80 total
- Usage tracking:
recordUsage(),readUsage(),summarizeUsage()for append-only JSONL logs - Dead entry detection:
findDeadEntries()finds entries never loaded - Keyword overlap analysis:
findKeywordOverlaps()finds routing ambiguities - Budget breakdown:
analyzeBudget()with observed-vs-estimated comparison - CLI:
ai-loadoutcommand withusage,dead,overlaps,budgetsubcommands - All commands support
--jsonoutput for scripting - 23 new tests (usage + analysis), 63 total
- MatchResult enrichment:
reason(human-readable explanation) andmode(eager/lazy/manual) - Merge semantics:
mergeIndexes()for hierarchical loadouts (global → org → project → task) - MergedIndex with provenance tracking and conflict reporting
- UsageEvent schema for local-only observability
- lazyLoad flag on
LoadoutIndexfor demand-paged context - LoadMode type (
eager | lazy | manual) - SPEC.md: Full specification document
- 8 new tests (merge), 40 total
- Brand logo URL (mcp-tool-shop-org/brand)
- Code coverage via c8 + Codecov badge
- Translations re-done via polyglot-mcp (TranslateGemma 12B)
- SHIP_GATE.md and SCORECARD.md (shipcheck audit: 100% pass)
- dependabot.yml (monthly, grouped)
- .gitignore: site/.astro/, site/dist/, .polyglot-cache.json
- Shipcheck gates added (SHIP_GATE.md, SCORECARD.md)
- dependabot.yml
- Add
hintfield toValidationIssue(Tier 1 error shape compliance) - Add hints to key validation issues (MISSING_ID, MISSING_PATH, EMPTY_KEYWORDS)
- Add SECURITY.md with threat model
- Expand README security section with threat model table
- Add logo
- Include SECURITY.md and logo.png in npm package
Initial release.
LoadoutIndexschema — dispatch table for agent knowledgeparseFrontmatter()/serializeFrontmatter()— payload file metadatamatchLoadout()— deterministic keyword + pattern matcherlookupEntry()— explicit entry lookup by IDvalidateIndex()— structural linter for index integrityestimateTokens()— chars/4 heuristic for budget dashboards- Three priority tiers: core / domain / manual
- Trigger phases: task / plan / edit
- Zero production dependencies