Function and class nodes were invisible in the graph because they
are not directly assigned to layers (only file-level nodes are).
Expand layer membership by following `contains` edges from file nodes
in the active layer to include their child function/class nodes.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The previous wording ("MUST have sub-nodes") implied every code file
must produce function nodes, which is wrong for files without significant
functions. Now correctly states: if significant functions exist in the
script output, you must create nodes for them.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Delete the 5 prompt template files from skills/understand/ now that
they live in agents/. Update auto-update-prompt.md hook to reference
agent definitions instead of deleted prompt files.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Prompt templates (file-analyzer, project-scanner, architecture-analyzer,
tour-builder, graph-reviewer) were being compressed by the orchestrator
when dispatched as subagent prompts, causing function/class extraction
to be silently skipped. Moving them to agents/ ensures the framework
loads the full prompt without compression.
- Move 5 prompt templates from skills/understand/ to agents/
- Update SKILL.md to reference agent definitions instead of templates
- Set all agent models to `inherit` for cross-platform compatibility
- Update CLAUDE.md to reflect new agent model policy
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove direction-inverting `implemented_by` alias (same pattern as fd0df15)
- Replace ambiguous `process` alias with `business_process`
- Fix duplicate React Flow edge IDs in DomainGraphView
- Fix navigateToDomain clearing selectedNodeId and losing history
- Preserve domain viewMode when structural graph loads after domain graph
- Add domain/flow/step to fileLevelTypes in GraphView
- Add domain edge category to EDGE_CATEGORY_MAP
- Extend COMPLEXITY_STRING_MAP with trivial/basic/mid/average/advanced
- Normalize string complexity values in normalizeBatchOutput (not just numeric)
- Infer node type from ID prefix in edge fallback normalization
- Include flow discriminator in bare-path step ID normalization
- Clean up domain-context.json intermediate file in SKILL.md
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix race condition: setGraph no longer wipes domainGraph on parallel fetch
- Remove workflow/action aliases that conflicted with pipeline type
- Remove duplicate onNodeDoubleClick handler in DomainGraphView
- Add clearActiveDomain store action (replaces direct setState call)
- Remove auto-switch to domain viewMode in setDomainGraph
- Add DomainMetaSchema Zod validation for domainMeta fields
- Add Array.isArray guards for domainMeta collections in NodeInfo
- Remove as-any cast in getDomainMeta (use typed domainMeta directly)
- Add "domain" filter category for domain/flow/step nodes
- Keep flow discriminator in step ID normalization to prevent collisions
- Update SKILL.md Phase 2 to use tool-based scanning (no missing script)
- Update EDGE_LABELS comment to reflect 29 edge types
- Bump version to 2.1.0 in all 4 required files
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove unnecessary `as any` and `as string[]` casts by using the properly
typed DomainMeta interface. Fix historyNodes and childNodes to resolve from
activeGraph instead of graph so domain view mode works correctly. Use
type-narrowing filters to eliminate non-null assertions. Add early return
guard for step nodes with no filePath.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add ViewMode type, DOMAIN_EDGE_TYPES, and domain/flow/step entries to
dashboard store, CustomNode, GraphView, and NodeInfo Record maps so the
dashboard compiles with the new core domain node and edge types.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add all 13 node types (including non-code) to VALID_PREFIXES and TYPE_TO_PREFIX
to prevent valid IDs like config:tsconfig.json from being stripped
- Add fallback normalizeNodeId on edge endpoints not found in idMap, fixing
silent relationship loss when edges use different malformed variants than nodes
- Add DroppedEdge interface with source, target, type, and reason fields so
callers can surface exactly which edges were lost and why
- Use honest Record<string, unknown>[] return types instead of unsafe type casts
- Align SKILL.md complexity aliases with COMPLEXITY_STRING_MAP
- Add 5 new tests for non-code types, cross-variant edges, dropped edge detail,
and validateGraph integration
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Parallel file-analyzer subagents can produce inconsistent node IDs
(project-name prefixed, double-prefixed, bare paths) and invalid
complexity values. Phase 3 ASSEMBLE now normalizes these deterministically
before merging, preventing cascading edge drops and dashboard load failures.
- Add normalize-graph.ts with normalizeNodeId, normalizeComplexity,
and normalizeBatchOutput utilities
- Rewrite SKILL.md Phase 3 with 6-step normalization sequence
- Strengthen file-analyzer prompt with ID format warnings
- Add 32 normalization tests and 2 schema boundary tests
The PostToolUse hook used `<<<` (bash herestring) which fails when
Claude Code runs hooks under `/bin/sh`. Replace with `echo | grep`
for POSIX compatibility.
Runs on every pull_request: builds core and skill packages (which also
serves as TypeScript type-check), then runs all Vitest tests.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add README.zh-TW.md (Traditional Chinese translation)
- Update language nav links in all READMEs to include 繁體中文
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove displayName from plugin.json (not in Copilot manifest schema)
- Use ln -sf for idempotent skill symlinks
- Use rm -f for safer uninstall
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Each skill must be symlinked individually into ~/.copilot/skills/,
not the entire skills directory as a single entry.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add `.copilot-plugin/plugin.json` for auto-discovery in VS Code (mirrors `.cursor-plugin/` format)
- Add `.vscode/INSTALL.md` with two install options: auto-discovery and personal skills via symlink
- Update README.md and README.zh-CN.md with VS Code section and compatibility table row
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Expand feature cards from 3 to 6 covering new capabilities across
v1.2.0–v2.0.0 releases. Update install note and footer tagline to
reflect multi-platform support.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Split the header into three sections: fixed left (project name, persona),
scrollable middle (diff toggle, node type filters, layer legend), and
fixed right (filter, export, path, theme actions). Prevents toolbar
overflow when projects have many layers or node types.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The foreignObject approach caused canvas tainting — browsers block
canvas.toBlob() when the SVG contains embedded DOM content. Extracted
a shared buildCleanSvg() helper using only rect/line/text elements,
reused by both PNG and SVG export.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Resolved conflicts by keeping main's features (ThemeProvider, TokenGate,
WarningBanner, graph validation, layer navigation, sidebar composing
behavior) and integrating PR's new features (FilterPanel, ExportMenu,
PathFinderModal, NodeTooltip, ProjectOverview stats) on top.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>