diff --git a/.gitignore b/.gitignore index 95c9164e0..d544939b3 100644 --- a/.gitignore +++ b/.gitignore @@ -103,3 +103,5 @@ gitnexus/vendor/**/node_modules/ local_docs/ +undefined/ +_bmad/ \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index f4fbcadc0..d51fb0b9d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -58,65 +58,54 @@ Commands and gotchas live under **Repo reference** below and in **[CONTRIBUTING. # GitNexus — Code Intelligence -Indexed as **GitNexus** (4325 symbols, 10556 relationships, 300 execution flows). Use MCP tools to understand code, assess impact, and navigate safely. +This project is indexed by GitNexus as **gitnexus** (17439 symbols, 24477 relationships, 300 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely. -> If any tool warns the index is stale, run `npx gitnexus analyze` first. +> If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first. ## Always Do -- **MUST run impact analysis before editing any symbol.** `gitnexus_impact({target: "symbolName", direction: "upstream"})` — report blast radius to the user. -- **MUST run `gitnexus_detect_changes()` before committing** — verify only expected symbols and flows are affected. -- **MUST warn the user** if impact returns HIGH or CRITICAL risk. -- Explore unfamiliar code with `gitnexus_query({query: "concept"})` (process-grouped, ranked) instead of grepping. -- Full context on a symbol: `gitnexus_context({name: "symbolName"})`. +- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `gitnexus_impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user. +- **MUST run `gitnexus_detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows. +- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits. +- When exploring unfamiliar code, use `gitnexus_query({query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance. +- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `gitnexus_context({name: "symbolName"})`. ## When Debugging -1. `gitnexus_query({query: ""})` — find related execution flows -2. `gitnexus_context({name: ""})` — callers, callees, process participation -3. `READ gitnexus://repo/GitNexus/process/{processName}` — trace flow step by step -4. Regressions: `gitnexus_detect_changes({scope: "compare", base_ref: "main"})` +1. `gitnexus_query({query: ""})` — find execution flows related to the issue +2. `gitnexus_context({name: ""})` — see all callers, callees, and process participation +3. `READ gitnexus://repo/gitnexus/process/{processName}` — trace the full execution flow step by step +4. For regressions: `gitnexus_detect_changes({scope: "compare", base_ref: "main"})` — see what your branch changed ## When Refactoring -- **Rename:** `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` first. Graph edits are safe; text_search edits need manual review. -- **Extract/Split:** `gitnexus_context` (incoming/outgoing refs) then `gitnexus_impact` (upstream callers) before moving code. -- **After any refactor:** `gitnexus_detect_changes({scope: "all"})` to verify scope. +- **Renaming**: MUST use `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` first. Review the preview — graph edits are safe, text_search edits need manual review. Then run with `dry_run: false`. +- **Extracting/Splitting**: MUST run `gitnexus_context({name: "target"})` to see all incoming/outgoing refs, then `gitnexus_impact({target: "target", direction: "upstream"})` to find all external callers before moving code. +- After any refactor: run `gitnexus_detect_changes({scope: "all"})` to verify only expected files changed. ## Never Do -- Edit a symbol without running `gitnexus_impact` first. -- Ignore HIGH/CRITICAL risk warnings. -- Rename with find-and-replace — use `gitnexus_rename`. -- Commit without `gitnexus_detect_changes()`. -- Add language-specific behavior to shared ingestion code (`gitnexus/src/core/ingestion/`) — use a `LanguageProvider` hook. Seeing `provider.mroStrategy === 'xxx'` or an import from `languages/xxx.ts` in shared code means stop and add a hook. +- NEVER edit a function, class, or method without first running `gitnexus_impact` on it. +- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis. +- NEVER rename symbols with find-and-replace — use `gitnexus_rename` which understands the call graph. +- NEVER commit changes without running `gitnexus_detect_changes()` to check affected scope. ## Tools Quick Reference -| Tool | When to use | Example | +| Tool | When to use | Command | |------|-------------|---------| -| `list_repos` | Discover indexed repos | `gitnexus_list_repos({})` | | `query` | Find code by concept | `gitnexus_query({query: "auth validation"})` | | `context` | 360-degree view of one symbol | `gitnexus_context({name: "validateUser"})` | | `impact` | Blast radius before editing | `gitnexus_impact({target: "X", direction: "upstream"})` | | `detect_changes` | Pre-commit scope check | `gitnexus_detect_changes({scope: "staged"})` | | `rename` | Safe multi-file rename | `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` | | `cypher` | Custom graph queries | `gitnexus_cypher({query: "MATCH ..."})` | -| `api_impact` | Pre-change API route impact | `gitnexus_api_impact({route: "/api/users", method: "GET"})` | -| `route_map` | Route → handler → consumer map | `gitnexus_route_map({})` | -| `tool_map` | MCP/RPC tool definitions | `gitnexus_tool_map({})` | -| `shape_check` | Response shape vs consumer access | `gitnexus_shape_check({route: "/api/users"})` | -| `group_list` | List repo groups | `gitnexus_group_list({})` | -| `group_query` | Cross-repo search in a group | `gitnexus_group_query({name: "myGroup", query: "auth"})` | -| `group_sync` | Rebuild group Contract Registry | `gitnexus_group_sync({name: "myGroup"})` | -| `group_contracts` | Inspect group contracts | `gitnexus_group_contracts({name: "myGroup"})` | -| `group_status` | Group staleness report | `gitnexus_group_status({name: "myGroup"})` | ## Impact Risk Levels | Depth | Meaning | Action | |-------|---------|--------| -| d=1 | WILL BREAK — direct callers/importers | MUST update | +| d=1 | WILL BREAK — direct callers/importers | MUST update these | | d=2 | LIKELY AFFECTED — indirect deps | Should test | | d=3 | MAY NEED TESTING — transitive | Test if critical path | @@ -124,39 +113,67 @@ Indexed as **GitNexus** (4325 symbols, 10556 relationships, 300 execution flows) | Resource | Use for | |----------|---------| -| `gitnexus://repo/GitNexus/context` | Codebase overview, index freshness | -| `gitnexus://repo/GitNexus/clusters` | All functional areas | -| `gitnexus://repo/GitNexus/processes` | All execution flows | -| `gitnexus://repo/GitNexus/process/{name}` | Step-by-step execution trace | +| `gitnexus://repo/gitnexus/context` | Codebase overview, check index freshness | +| `gitnexus://repo/gitnexus/clusters` | All functional areas | +| `gitnexus://repo/gitnexus/processes` | All execution flows | +| `gitnexus://repo/gitnexus/process/{name}` | Step-by-step execution trace | ## Self-Check Before Finishing +Before completing any code modification task, verify: 1. `gitnexus_impact` was run for all modified symbols -2. No HIGH/CRITICAL warnings were ignored -3. `gitnexus_detect_changes()` confirms expected scope -4. All d=1 dependents were updated +2. No HIGH/CRITICAL risk warnings were ignored +3. `gitnexus_detect_changes()` confirms changes match expected scope +4. All d=1 (WILL BREAK) dependents were updated ## Keeping the Index Fresh +After committing code changes, the GitNexus index becomes stale. Re-run analyze to update it: + ```bash -npx gitnexus analyze # basic refresh -npx gitnexus analyze --embeddings # preserve embeddings +npx gitnexus analyze ``` -Check `.gitnexus/meta.json` `stats.embeddings` (0 = none). Running without `--embeddings` deletes existing vectors. +If the index previously included embeddings, preserve them by adding `--embeddings`: -> Claude Code: PostToolUse hook handles this after `git commit` and `git merge`. +```bash +npx gitnexus analyze --embeddings +``` -## CLI Skills +To check whether embeddings exist, inspect `.gitnexus/meta.json` — the `stats.embeddings` field shows the count (0 means no embeddings). **Running analyze without `--embeddings` will delete any previously generated embeddings.** -| Task | Skill file | -|------|-----------| -| Architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` | -| Blast radius / "What breaks?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` | -| Debugging / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` | -| Refactoring | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` | -| Tools/resources/schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` | -| CLI commands (index, status, clean, wiki) | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` | +> Claude Code users: A PostToolUse hook handles this automatically after `git commit` and `git merge`. + +## CLI + +| Task | Read this skill file | +|------|---------------------| +| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` | +| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` | +| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` | +| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` | +| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` | +| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` | +| Work in the Ingestion area (224 symbols) | `.claude/skills/generated/ingestion/SKILL.md` | +| Work in the Type-extractors area (206 symbols) | `.claude/skills/generated/type-extractors/SKILL.md` | +| Work in the Cli area (86 symbols) | `.claude/skills/generated/cli/SKILL.md` | +| Work in the Wiki area (69 symbols) | `.claude/skills/generated/wiki/SKILL.md` | +| Work in the Group area (67 symbols) | `.claude/skills/generated/group/SKILL.md` | +| Work in the Components area (63 symbols) | `.claude/skills/generated/components/SKILL.md` | +| Work in the Embeddings area (62 symbols) | `.claude/skills/generated/embeddings/SKILL.md` | +| Work in the Server area (58 symbols) | `.claude/skills/generated/server/SKILL.md` | +| Work in the Local area (55 symbols) | `.claude/skills/generated/local/SKILL.md` | +| Work in the Workers area (54 symbols) | `.claude/skills/generated/workers/SKILL.md` | +| Work in the Scope-resolution area (53 symbols) | `.claude/skills/generated/scope-resolution/SKILL.md` | +| Work in the Extractors area (52 symbols) | `.claude/skills/generated/extractors/SKILL.md` | +| Work in the Lbug area (49 symbols) | `.claude/skills/generated/lbug/SKILL.md` | +| Work in the Model area (40 symbols) | `.claude/skills/generated/model/SKILL.md` | +| Work in the Configs area (39 symbols) | `.claude/skills/generated/configs/SKILL.md` | +| Work in the Unit area (38 symbols) | `.claude/skills/generated/unit/SKILL.md` | +| Work in the Services area (36 symbols) | `.claude/skills/generated/services/SKILL.md` | +| Work in the Cobol area (34 symbols) | `.claude/skills/generated/cobol/SKILL.md` | +| Work in the Import-resolvers area (32 symbols) | `.claude/skills/generated/import-resolvers/SKILL.md` | +| Work in the Mcp area (28 symbols) | `.claude/skills/generated/mcp/SKILL.md` | diff --git a/CLAUDE.md b/CLAUDE.md index af4069fcd..2ce6aaa00 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -51,4 +51,124 @@ If always-on instructions grow, load deep conventions via conditional reads (e.g ## GitNexus rules -See the `` block in **[AGENTS.md](AGENTS.md)** for the canonical MCP tools, impact analysis rules, and index instructions. +See the ` +# GitNexus — Code Intelligence + +This project is indexed by GitNexus as **gitnexus** (17439 symbols, 24477 relationships, 300 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely. + +> If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first. + +## Always Do + +- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `gitnexus_impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user. +- **MUST run `gitnexus_detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows. +- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits. +- When exploring unfamiliar code, use `gitnexus_query({query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance. +- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `gitnexus_context({name: "symbolName"})`. + +## When Debugging + +1. `gitnexus_query({query: ""})` — find execution flows related to the issue +2. `gitnexus_context({name: ""})` — see all callers, callees, and process participation +3. `READ gitnexus://repo/gitnexus/process/{processName}` — trace the full execution flow step by step +4. For regressions: `gitnexus_detect_changes({scope: "compare", base_ref: "main"})` — see what your branch changed + +## When Refactoring + +- **Renaming**: MUST use `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` first. Review the preview — graph edits are safe, text_search edits need manual review. Then run with `dry_run: false`. +- **Extracting/Splitting**: MUST run `gitnexus_context({name: "target"})` to see all incoming/outgoing refs, then `gitnexus_impact({target: "target", direction: "upstream"})` to find all external callers before moving code. +- After any refactor: run `gitnexus_detect_changes({scope: "all"})` to verify only expected files changed. + +## Never Do + +- NEVER edit a function, class, or method without first running `gitnexus_impact` on it. +- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis. +- NEVER rename symbols with find-and-replace — use `gitnexus_rename` which understands the call graph. +- NEVER commit changes without running `gitnexus_detect_changes()` to check affected scope. + +## Tools Quick Reference + +| Tool | When to use | Command | +|------|-------------|---------| +| `query` | Find code by concept | `gitnexus_query({query: "auth validation"})` | +| `context` | 360-degree view of one symbol | `gitnexus_context({name: "validateUser"})` | +| `impact` | Blast radius before editing | `gitnexus_impact({target: "X", direction: "upstream"})` | +| `detect_changes` | Pre-commit scope check | `gitnexus_detect_changes({scope: "staged"})` | +| `rename` | Safe multi-file rename | `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` | +| `cypher` | Custom graph queries | `gitnexus_cypher({query: "MATCH ..."})` | + +## Impact Risk Levels + +| Depth | Meaning | Action | +|-------|---------|--------| +| d=1 | WILL BREAK — direct callers/importers | MUST update these | +| d=2 | LIKELY AFFECTED — indirect deps | Should test | +| d=3 | MAY NEED TESTING — transitive | Test if critical path | + +## Resources + +| Resource | Use for | +|----------|---------| +| `gitnexus://repo/gitnexus/context` | Codebase overview, check index freshness | +| `gitnexus://repo/gitnexus/clusters` | All functional areas | +| `gitnexus://repo/gitnexus/processes` | All execution flows | +| `gitnexus://repo/gitnexus/process/{name}` | Step-by-step execution trace | + +## Self-Check Before Finishing + +Before completing any code modification task, verify: +1. `gitnexus_impact` was run for all modified symbols +2. No HIGH/CRITICAL risk warnings were ignored +3. `gitnexus_detect_changes()` confirms changes match expected scope +4. All d=1 (WILL BREAK) dependents were updated + +## Keeping the Index Fresh + +After committing code changes, the GitNexus index becomes stale. Re-run analyze to update it: + +```bash +npx gitnexus analyze +``` + +If the index previously included embeddings, preserve them by adding `--embeddings`: + +```bash +npx gitnexus analyze --embeddings +``` + +To check whether embeddings exist, inspect `.gitnexus/meta.json` — the `stats.embeddings` field shows the count (0 means no embeddings). **Running analyze without `--embeddings` will delete any previously generated embeddings.** + +> Claude Code users: A PostToolUse hook handles this automatically after `git commit` and `git merge`. + +## CLI + +| Task | Read this skill file | +|------|---------------------| +| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` | +| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` | +| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` | +| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` | +| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` | +| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` | +| Work in the Ingestion area (224 symbols) | `.claude/skills/generated/ingestion/SKILL.md` | +| Work in the Type-extractors area (206 symbols) | `.claude/skills/generated/type-extractors/SKILL.md` | +| Work in the Cli area (86 symbols) | `.claude/skills/generated/cli/SKILL.md` | +| Work in the Wiki area (69 symbols) | `.claude/skills/generated/wiki/SKILL.md` | +| Work in the Group area (67 symbols) | `.claude/skills/generated/group/SKILL.md` | +| Work in the Components area (63 symbols) | `.claude/skills/generated/components/SKILL.md` | +| Work in the Embeddings area (62 symbols) | `.claude/skills/generated/embeddings/SKILL.md` | +| Work in the Server area (58 symbols) | `.claude/skills/generated/server/SKILL.md` | +| Work in the Local area (55 symbols) | `.claude/skills/generated/local/SKILL.md` | +| Work in the Workers area (54 symbols) | `.claude/skills/generated/workers/SKILL.md` | +| Work in the Scope-resolution area (53 symbols) | `.claude/skills/generated/scope-resolution/SKILL.md` | +| Work in the Extractors area (52 symbols) | `.claude/skills/generated/extractors/SKILL.md` | +| Work in the Lbug area (49 symbols) | `.claude/skills/generated/lbug/SKILL.md` | +| Work in the Model area (40 symbols) | `.claude/skills/generated/model/SKILL.md` | +| Work in the Configs area (39 symbols) | `.claude/skills/generated/configs/SKILL.md` | +| Work in the Unit area (38 symbols) | `.claude/skills/generated/unit/SKILL.md` | +| Work in the Services area (36 symbols) | `.claude/skills/generated/services/SKILL.md` | +| Work in the Cobol area (34 symbols) | `.claude/skills/generated/cobol/SKILL.md` | +| Work in the Import-resolvers area (32 symbols) | `.claude/skills/generated/import-resolvers/SKILL.md` | +| Work in the Mcp area (28 symbols) | `.claude/skills/generated/mcp/SKILL.md` | + +` block in **[AGENTS.md](AGENTS.md)** for the canonical MCP tools, impact analysis rules, and index instructions.