@vpxa/aikit 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1207 -0
- package/bin/aikit.mjs +10 -0
- package/package.json +92 -0
- package/packages/aikit-client/dist/direct-client.d.ts +37 -0
- package/packages/aikit-client/dist/direct-client.js +1 -0
- package/packages/aikit-client/dist/index.d.ts +5 -0
- package/packages/aikit-client/dist/index.js +1 -0
- package/packages/aikit-client/dist/mcp-client.d.ts +19 -0
- package/packages/aikit-client/dist/mcp-client.js +4 -0
- package/packages/aikit-client/dist/parsers.d.ts +35 -0
- package/packages/aikit-client/dist/parsers.js +2 -0
- package/packages/aikit-client/dist/types.d.ts +62 -0
- package/packages/aikit-client/dist/types.js +1 -0
- package/packages/analyzers/dist/blast-radius-analyzer.d.ts +19 -0
- package/packages/analyzers/dist/blast-radius-analyzer.js +6 -0
- package/packages/analyzers/dist/dependency-analyzer.d.ts +32 -0
- package/packages/analyzers/dist/dependency-analyzer.js +8 -0
- package/packages/analyzers/dist/diagram-generator.d.ts +16 -0
- package/packages/analyzers/dist/diagram-generator.js +2 -0
- package/packages/analyzers/dist/entry-point-analyzer.d.ts +40 -0
- package/packages/analyzers/dist/entry-point-analyzer.js +4 -0
- package/packages/analyzers/dist/index.d.ts +12 -0
- package/packages/analyzers/dist/index.js +1 -0
- package/packages/analyzers/dist/knowledge-producer.d.ts +40 -0
- package/packages/analyzers/dist/knowledge-producer.js +26 -0
- package/packages/analyzers/dist/pattern-analyzer.d.ts +15 -0
- package/packages/analyzers/dist/pattern-analyzer.js +2 -0
- package/packages/analyzers/dist/regex-call-graph.d.ts +10 -0
- package/packages/analyzers/dist/regex-call-graph.js +1 -0
- package/packages/analyzers/dist/structure-analyzer.d.ts +19 -0
- package/packages/analyzers/dist/structure-analyzer.js +4 -0
- package/packages/analyzers/dist/symbol-analyzer.d.ts +14 -0
- package/packages/analyzers/dist/symbol-analyzer.js +9 -0
- package/packages/analyzers/dist/ts-call-graph.d.ts +29 -0
- package/packages/analyzers/dist/ts-call-graph.js +1 -0
- package/packages/analyzers/dist/types.d.ts +110 -0
- package/packages/analyzers/dist/types.js +1 -0
- package/packages/chunker/dist/call-graph-extractor.d.ts +25 -0
- package/packages/chunker/dist/call-graph-extractor.js +1 -0
- package/packages/chunker/dist/chunker-factory.d.ts +19 -0
- package/packages/chunker/dist/chunker-factory.js +1 -0
- package/packages/chunker/dist/chunker.interface.d.ts +13 -0
- package/packages/chunker/dist/chunker.interface.js +1 -0
- package/packages/chunker/dist/code-chunker.d.ts +17 -0
- package/packages/chunker/dist/code-chunker.js +11 -0
- package/packages/chunker/dist/extractors/call-extractor.d.ts +24 -0
- package/packages/chunker/dist/extractors/call-extractor.js +1 -0
- package/packages/chunker/dist/extractors/entry-point-detector.d.ts +14 -0
- package/packages/chunker/dist/extractors/entry-point-detector.js +1 -0
- package/packages/chunker/dist/extractors/import-extractor.d.ts +14 -0
- package/packages/chunker/dist/extractors/import-extractor.js +1 -0
- package/packages/chunker/dist/extractors/pattern-detector.d.ts +14 -0
- package/packages/chunker/dist/extractors/pattern-detector.js +1 -0
- package/packages/chunker/dist/extractors/scope-resolver.d.ts +26 -0
- package/packages/chunker/dist/extractors/scope-resolver.js +1 -0
- package/packages/chunker/dist/extractors/symbol-extractor.d.ts +14 -0
- package/packages/chunker/dist/extractors/symbol-extractor.js +3 -0
- package/packages/chunker/dist/extractors/types.d.ts +44 -0
- package/packages/chunker/dist/extractors/types.js +1 -0
- package/packages/chunker/dist/generic-chunker.d.ts +15 -0
- package/packages/chunker/dist/generic-chunker.js +5 -0
- package/packages/chunker/dist/index.d.ts +19 -0
- package/packages/chunker/dist/index.js +1 -0
- package/packages/chunker/dist/markdown-chunker.d.ts +17 -0
- package/packages/chunker/dist/markdown-chunker.js +3 -0
- package/packages/chunker/dist/wasm/languages.d.ts +18 -0
- package/packages/chunker/dist/wasm/languages.js +1 -0
- package/packages/chunker/dist/wasm/query-executor.d.ts +70 -0
- package/packages/chunker/dist/wasm/query-executor.js +1 -0
- package/packages/chunker/dist/wasm/runtime.d.ts +44 -0
- package/packages/chunker/dist/wasm/runtime.js +1 -0
- package/packages/chunker/dist/wasm/types.d.ts +84 -0
- package/packages/chunker/dist/wasm/types.js +1 -0
- package/packages/chunker/dist/wasm-chunker.d.ts +23 -0
- package/packages/chunker/dist/wasm-chunker.js +6 -0
- package/packages/chunker/src/queries/go/calls.scm +11 -0
- package/packages/chunker/src/queries/go/entry-points.scm +20 -0
- package/packages/chunker/src/queries/go/imports.scm +6 -0
- package/packages/chunker/src/queries/go/patterns.scm +25 -0
- package/packages/chunker/src/queries/go/symbols.scm +26 -0
- package/packages/chunker/src/queries/java/calls.scm +10 -0
- package/packages/chunker/src/queries/java/entry-points.scm +27 -0
- package/packages/chunker/src/queries/java/imports.scm +11 -0
- package/packages/chunker/src/queries/java/patterns.scm +27 -0
- package/packages/chunker/src/queries/java/symbols.scm +28 -0
- package/packages/chunker/src/queries/javascript/calls.scm +21 -0
- package/packages/chunker/src/queries/javascript/entry-points.scm +31 -0
- package/packages/chunker/src/queries/javascript/imports.scm +32 -0
- package/packages/chunker/src/queries/javascript/patterns.scm +28 -0
- package/packages/chunker/src/queries/javascript/symbols.scm +52 -0
- package/packages/chunker/src/queries/python/calls.scm +11 -0
- package/packages/chunker/src/queries/python/entry-points.scm +21 -0
- package/packages/chunker/src/queries/python/imports.scm +14 -0
- package/packages/chunker/src/queries/python/patterns.scm +25 -0
- package/packages/chunker/src/queries/python/symbols.scm +17 -0
- package/packages/chunker/src/queries/rust/calls.scm +20 -0
- package/packages/chunker/src/queries/rust/entry-points.scm +7 -0
- package/packages/chunker/src/queries/rust/imports.scm +26 -0
- package/packages/chunker/src/queries/rust/patterns.scm +18 -0
- package/packages/chunker/src/queries/rust/symbols.scm +73 -0
- package/packages/chunker/src/queries/typescript/calls.scm +21 -0
- package/packages/chunker/src/queries/typescript/entry-points.scm +48 -0
- package/packages/chunker/src/queries/typescript/imports.scm +35 -0
- package/packages/chunker/src/queries/typescript/patterns.scm +47 -0
- package/packages/chunker/src/queries/typescript/symbols.scm +79 -0
- package/packages/chunker/wasm/tree-sitter-c.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-c_sharp.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-cpp.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-go.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-java.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-javascript.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-kotlin.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-php.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-python.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-ruby.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-rust.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-scala.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-swift.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-typescript.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter.wasm +0 -0
- package/packages/cli/dist/aikit-init.d.ts +54 -0
- package/packages/cli/dist/aikit-init.js +1 -0
- package/packages/cli/dist/commands/analyze.d.ts +6 -0
- package/packages/cli/dist/commands/analyze.js +2 -0
- package/packages/cli/dist/commands/context-cmds.d.ts +6 -0
- package/packages/cli/dist/commands/context-cmds.js +1 -0
- package/packages/cli/dist/commands/environment.d.ts +6 -0
- package/packages/cli/dist/commands/environment.js +1 -0
- package/packages/cli/dist/commands/execution.d.ts +6 -0
- package/packages/cli/dist/commands/execution.js +1 -0
- package/packages/cli/dist/commands/flow.d.ts +6 -0
- package/packages/cli/dist/commands/flow.js +1 -0
- package/packages/cli/dist/commands/graph.d.ts +6 -0
- package/packages/cli/dist/commands/graph.js +6 -0
- package/packages/cli/dist/commands/init/adapters.d.ts +28 -0
- package/packages/cli/dist/commands/init/adapters.js +1 -0
- package/packages/cli/dist/commands/init/config.d.ts +10 -0
- package/packages/cli/dist/commands/init/config.js +3 -0
- package/packages/cli/dist/commands/init/constants.d.ts +41 -0
- package/packages/cli/dist/commands/init/constants.js +1 -0
- package/packages/cli/dist/commands/init/curated.d.ts +7 -0
- package/packages/cli/dist/commands/init/curated.js +1 -0
- package/packages/cli/dist/commands/init/frontmatter.d.ts +54 -0
- package/packages/cli/dist/commands/init/frontmatter.js +2 -0
- package/packages/cli/dist/commands/init/index.d.ts +36 -0
- package/packages/cli/dist/commands/init/index.js +5 -0
- package/packages/cli/dist/commands/init/manifest.d.ts +71 -0
- package/packages/cli/dist/commands/init/manifest.js +1 -0
- package/packages/cli/dist/commands/init/scaffold.d.ts +46 -0
- package/packages/cli/dist/commands/init/scaffold.js +1 -0
- package/packages/cli/dist/commands/init/templates.d.ts +9 -0
- package/packages/cli/dist/commands/init/templates.js +194 -0
- package/packages/cli/dist/commands/init/user.d.ts +61 -0
- package/packages/cli/dist/commands/init/user.js +5 -0
- package/packages/cli/dist/commands/knowledge.d.ts +6 -0
- package/packages/cli/dist/commands/knowledge.js +1 -0
- package/packages/cli/dist/commands/search.d.ts +6 -0
- package/packages/cli/dist/commands/search.js +1 -0
- package/packages/cli/dist/commands/system.d.ts +6 -0
- package/packages/cli/dist/commands/system.js +4 -0
- package/packages/cli/dist/commands/upgrade.d.ts +6 -0
- package/packages/cli/dist/commands/upgrade.js +1 -0
- package/packages/cli/dist/commands/workspace.d.ts +6 -0
- package/packages/cli/dist/commands/workspace.js +1 -0
- package/packages/cli/dist/context.d.ts +7 -0
- package/packages/cli/dist/context.js +1 -0
- package/packages/cli/dist/helpers.d.ts +55 -0
- package/packages/cli/dist/helpers.js +5 -0
- package/packages/cli/dist/index.d.ts +10 -0
- package/packages/cli/dist/index.js +3 -0
- package/packages/cli/dist/types.d.ts +9 -0
- package/packages/cli/dist/types.js +1 -0
- package/packages/core/dist/constants.d.ts +74 -0
- package/packages/core/dist/constants.js +1 -0
- package/packages/core/dist/content-detector.d.ts +13 -0
- package/packages/core/dist/content-detector.js +1 -0
- package/packages/core/dist/errors.d.ts +20 -0
- package/packages/core/dist/errors.js +1 -0
- package/packages/core/dist/global-registry.d.ts +63 -0
- package/packages/core/dist/global-registry.js +1 -0
- package/packages/core/dist/index.d.ts +7 -0
- package/packages/core/dist/index.js +1 -0
- package/packages/core/dist/logger.d.ts +32 -0
- package/packages/core/dist/logger.js +1 -0
- package/packages/core/dist/types.d.ts +133 -0
- package/packages/core/dist/types.js +1 -0
- package/packages/dashboard/dist/assets/index-BjA4YODs.js +21 -0
- package/packages/dashboard/dist/assets/index-BjA4YODs.js.map +1 -0
- package/packages/dashboard/dist/assets/index-CHpVij2M.css +1 -0
- package/packages/dashboard/dist/index.html +18 -0
- package/packages/elicitation/dist/build.d.ts +14 -0
- package/packages/elicitation/dist/build.js +1 -0
- package/packages/elicitation/dist/fields.d.ts +32 -0
- package/packages/elicitation/dist/fields.js +1 -0
- package/packages/elicitation/dist/index.d.ts +5 -0
- package/packages/elicitation/dist/index.js +1 -0
- package/packages/elicitation/dist/normalize.d.ts +15 -0
- package/packages/elicitation/dist/normalize.js +1 -0
- package/packages/elicitation/dist/types.d.ts +88 -0
- package/packages/elicitation/dist/types.js +1 -0
- package/packages/embeddings/dist/embedder.interface.d.ts +26 -0
- package/packages/embeddings/dist/embedder.interface.js +1 -0
- package/packages/embeddings/dist/index.d.ts +3 -0
- package/packages/embeddings/dist/index.js +1 -0
- package/packages/embeddings/dist/onnx-embedder.d.ts +22 -0
- package/packages/embeddings/dist/onnx-embedder.js +1 -0
- package/packages/enterprise-bridge/dist/cache.d.ts +28 -0
- package/packages/enterprise-bridge/dist/cache.js +1 -0
- package/packages/enterprise-bridge/dist/er-client.d.ts +37 -0
- package/packages/enterprise-bridge/dist/er-client.js +1 -0
- package/packages/enterprise-bridge/dist/evolution-collector.d.ts +62 -0
- package/packages/enterprise-bridge/dist/evolution-collector.js +1 -0
- package/packages/enterprise-bridge/dist/index.d.ts +8 -0
- package/packages/enterprise-bridge/dist/index.js +1 -0
- package/packages/enterprise-bridge/dist/policy-store.d.ts +45 -0
- package/packages/enterprise-bridge/dist/policy-store.js +1 -0
- package/packages/enterprise-bridge/dist/push-adapter.d.ts +23 -0
- package/packages/enterprise-bridge/dist/push-adapter.js +1 -0
- package/packages/enterprise-bridge/dist/result-merger.d.ts +14 -0
- package/packages/enterprise-bridge/dist/result-merger.js +1 -0
- package/packages/enterprise-bridge/dist/types.d.ts +81 -0
- package/packages/enterprise-bridge/dist/types.js +1 -0
- package/packages/flows/dist/adapters/claude-plugin.d.ts +12 -0
- package/packages/flows/dist/adapters/claude-plugin.js +1 -0
- package/packages/flows/dist/adapters/copilot.d.ts +10 -0
- package/packages/flows/dist/adapters/copilot.js +1 -0
- package/packages/flows/dist/adapters/index.d.ts +11 -0
- package/packages/flows/dist/adapters/index.js +1 -0
- package/packages/flows/dist/adapters/native.d.ts +10 -0
- package/packages/flows/dist/adapters/native.js +1 -0
- package/packages/flows/dist/builtins.d.ts +16 -0
- package/packages/flows/dist/builtins.js +1 -0
- package/packages/flows/dist/foundation.d.ts +20 -0
- package/packages/flows/dist/foundation.js +11 -0
- package/packages/flows/dist/git.d.ts +34 -0
- package/packages/flows/dist/git.js +1 -0
- package/packages/flows/dist/index.d.ts +12 -0
- package/packages/flows/dist/index.js +1 -0
- package/packages/flows/dist/loader.d.ts +13 -0
- package/packages/flows/dist/loader.js +2 -0
- package/packages/flows/dist/registry.d.ts +23 -0
- package/packages/flows/dist/registry.js +1 -0
- package/packages/flows/dist/state-machine.d.ts +23 -0
- package/packages/flows/dist/state-machine.js +1 -0
- package/packages/flows/dist/symlinks.d.ts +17 -0
- package/packages/flows/dist/symlinks.js +1 -0
- package/packages/flows/dist/types.d.ts +112 -0
- package/packages/flows/dist/types.js +1 -0
- package/packages/indexer/dist/file-hasher.d.ts +13 -0
- package/packages/indexer/dist/file-hasher.js +1 -0
- package/packages/indexer/dist/filesystem-crawler.d.ts +29 -0
- package/packages/indexer/dist/filesystem-crawler.js +1 -0
- package/packages/indexer/dist/graph-extractor.d.ts +18 -0
- package/packages/indexer/dist/graph-extractor.js +1 -0
- package/packages/indexer/dist/hash-cache.d.ts +24 -0
- package/packages/indexer/dist/hash-cache.js +1 -0
- package/packages/indexer/dist/incremental-indexer.d.ts +56 -0
- package/packages/indexer/dist/incremental-indexer.js +1 -0
- package/packages/indexer/dist/index.d.ts +6 -0
- package/packages/indexer/dist/index.js +1 -0
- package/packages/present/dist/index.html +709 -0
- package/packages/server/dist/api.d.ts +3 -0
- package/packages/server/dist/api.js +1 -0
- package/packages/server/dist/auto-gc.d.ts +30 -0
- package/packages/server/dist/auto-gc.js +1 -0
- package/packages/server/dist/completions.d.ts +14 -0
- package/packages/server/dist/completions.js +1 -0
- package/packages/server/dist/config.d.ts +14 -0
- package/packages/server/dist/config.js +1 -0
- package/packages/server/dist/cross-workspace.d.ts +43 -0
- package/packages/server/dist/cross-workspace.js +1 -0
- package/packages/server/dist/curated-manager.d.ts +92 -0
- package/packages/server/dist/curated-manager.js +5 -0
- package/packages/server/dist/dashboard-static.d.ts +27 -0
- package/packages/server/dist/dashboard-static.js +1 -0
- package/packages/server/dist/elicitor.d.ts +18 -0
- package/packages/server/dist/elicitor.js +1 -0
- package/packages/server/dist/index.d.ts +1 -0
- package/packages/server/dist/index.js +1 -0
- package/packages/server/dist/mcp-logging.d.ts +11 -0
- package/packages/server/dist/mcp-logging.js +1 -0
- package/packages/server/dist/output-schemas.d.ts +242 -0
- package/packages/server/dist/output-schemas.js +1 -0
- package/packages/server/dist/prompts.d.ts +13 -0
- package/packages/server/dist/prompts.js +13 -0
- package/packages/server/dist/replay-interceptor.d.ts +23 -0
- package/packages/server/dist/replay-interceptor.js +1 -0
- package/packages/server/dist/resource-links.d.ts +34 -0
- package/packages/server/dist/resource-links.js +1 -0
- package/packages/server/dist/resources/curated-resources.d.ts +13 -0
- package/packages/server/dist/resources/curated-resources.js +2 -0
- package/packages/server/dist/resources/resource-notifier.d.ts +45 -0
- package/packages/server/dist/resources/resource-notifier.js +1 -0
- package/packages/server/dist/resources/resources.d.ts +8 -0
- package/packages/server/dist/resources/resources.js +2 -0
- package/packages/server/dist/sampling.d.ts +41 -0
- package/packages/server/dist/sampling.js +2 -0
- package/packages/server/dist/server.d.ts +47 -0
- package/packages/server/dist/server.js +3 -0
- package/packages/server/dist/structured-content-guard.d.ts +26 -0
- package/packages/server/dist/structured-content-guard.js +1 -0
- package/packages/server/dist/task-manager.d.ts +40 -0
- package/packages/server/dist/task-manager.js +1 -0
- package/packages/server/dist/tool-metadata.d.ts +38 -0
- package/packages/server/dist/tool-metadata.js +1 -0
- package/packages/server/dist/tool-prefix.d.ts +12 -0
- package/packages/server/dist/tool-prefix.js +1 -0
- package/packages/server/dist/tools/analyze.tools.d.ts +14 -0
- package/packages/server/dist/tools/analyze.tools.js +8 -0
- package/packages/server/dist/tools/audit.tool.d.ts +8 -0
- package/packages/server/dist/tools/audit.tool.js +1 -0
- package/packages/server/dist/tools/brainstorm.tool.d.ts +7 -0
- package/packages/server/dist/tools/brainstorm.tool.js +9 -0
- package/packages/server/dist/tools/bridge.tools.d.ts +34 -0
- package/packages/server/dist/tools/bridge.tools.js +15 -0
- package/packages/server/dist/tools/context.tools.d.ts +15 -0
- package/packages/server/dist/tools/context.tools.js +10 -0
- package/packages/server/dist/tools/evolution.tools.d.ts +7 -0
- package/packages/server/dist/tools/evolution.tools.js +5 -0
- package/packages/server/dist/tools/execution.tools.d.ts +14 -0
- package/packages/server/dist/tools/execution.tools.js +4 -0
- package/packages/server/dist/tools/flow.tools.d.ts +7 -0
- package/packages/server/dist/tools/flow.tools.js +1 -0
- package/packages/server/dist/tools/forge.tools.d.ts +13 -0
- package/packages/server/dist/tools/forge.tools.js +10 -0
- package/packages/server/dist/tools/forget.tool.d.ts +8 -0
- package/packages/server/dist/tools/forget.tool.js +1 -0
- package/packages/server/dist/tools/graph.tool.d.ts +7 -0
- package/packages/server/dist/tools/graph.tool.js +5 -0
- package/packages/server/dist/tools/infra.tools.d.ts +10 -0
- package/packages/server/dist/tools/infra.tools.js +5 -0
- package/packages/server/dist/tools/list.tool.d.ts +7 -0
- package/packages/server/dist/tools/list.tool.js +2 -0
- package/packages/server/dist/tools/lookup.tool.d.ts +7 -0
- package/packages/server/dist/tools/lookup.tool.js +3 -0
- package/packages/server/dist/tools/manipulation.tools.d.ts +10 -0
- package/packages/server/dist/tools/manipulation.tools.js +4 -0
- package/packages/server/dist/tools/onboard.tool.d.ts +9 -0
- package/packages/server/dist/tools/onboard.tool.js +2 -0
- package/packages/server/dist/tools/persistence.tools.d.ts +10 -0
- package/packages/server/dist/tools/persistence.tools.js +5 -0
- package/packages/server/dist/tools/policy.tools.d.ts +7 -0
- package/packages/server/dist/tools/policy.tools.js +3 -0
- package/packages/server/dist/tools/present/browser.d.ts +4 -0
- package/packages/server/dist/tools/present/browser.js +93 -0
- package/packages/server/dist/tools/present/helpers.d.ts +18 -0
- package/packages/server/dist/tools/present/helpers.js +1 -0
- package/packages/server/dist/tools/present/html.d.ts +18 -0
- package/packages/server/dist/tools/present/html.js +5 -0
- package/packages/server/dist/tools/present/index.d.ts +2 -0
- package/packages/server/dist/tools/present/index.js +1 -0
- package/packages/server/dist/tools/present/markdown.d.ts +17 -0
- package/packages/server/dist/tools/present/markdown.js +8 -0
- package/packages/server/dist/tools/present/templates.d.ts +14 -0
- package/packages/server/dist/tools/present/templates.js +472 -0
- package/packages/server/dist/tools/present/tool.d.ts +27 -0
- package/packages/server/dist/tools/present/tool.js +19 -0
- package/packages/server/dist/tools/present-blocks.d.ts +46 -0
- package/packages/server/dist/tools/present-blocks.js +27 -0
- package/packages/server/dist/tools/present-charts.d.ts +31 -0
- package/packages/server/dist/tools/present-charts.js +34 -0
- package/packages/server/dist/tools/present-theme.d.ts +14 -0
- package/packages/server/dist/tools/present-theme.js +395 -0
- package/packages/server/dist/tools/present-utils.d.ts +11 -0
- package/packages/server/dist/tools/present-utils.js +1 -0
- package/packages/server/dist/tools/present.tool.d.ts +2 -0
- package/packages/server/dist/tools/present.tool.js +1 -0
- package/packages/server/dist/tools/produce.tool.d.ts +7 -0
- package/packages/server/dist/tools/produce.tool.js +4 -0
- package/packages/server/dist/tools/read.tool.d.ts +7 -0
- package/packages/server/dist/tools/read.tool.js +2 -0
- package/packages/server/dist/tools/reindex.tool.d.ts +11 -0
- package/packages/server/dist/tools/reindex.tool.js +3 -0
- package/packages/server/dist/tools/remember.tool.d.ts +9 -0
- package/packages/server/dist/tools/remember.tool.js +4 -0
- package/packages/server/dist/tools/replay.tool.d.ts +6 -0
- package/packages/server/dist/tools/replay.tool.js +3 -0
- package/packages/server/dist/tools/restore.tool.d.ts +6 -0
- package/packages/server/dist/tools/restore.tool.js +3 -0
- package/packages/server/dist/tools/search.tool.d.ts +11 -0
- package/packages/server/dist/tools/search.tool.js +10 -0
- package/packages/server/dist/tools/status.tool.d.ts +20 -0
- package/packages/server/dist/tools/status.tool.js +3 -0
- package/packages/server/dist/tools/update.tool.d.ts +8 -0
- package/packages/server/dist/tools/update.tool.js +1 -0
- package/packages/server/dist/tools/utility.tools.d.ts +15 -0
- package/packages/server/dist/tools/utility.tools.js +13 -0
- package/packages/server/dist/version-check.d.ts +32 -0
- package/packages/server/dist/version-check.js +1 -0
- package/packages/store/dist/graph-store.interface.d.ts +118 -0
- package/packages/store/dist/graph-store.interface.js +1 -0
- package/packages/store/dist/index.d.ts +6 -0
- package/packages/store/dist/index.js +1 -0
- package/packages/store/dist/lance-store.d.ts +44 -0
- package/packages/store/dist/lance-store.js +1 -0
- package/packages/store/dist/sqlite-graph-store.d.ts +45 -0
- package/packages/store/dist/sqlite-graph-store.js +58 -0
- package/packages/store/dist/store-factory.d.ts +12 -0
- package/packages/store/dist/store-factory.js +1 -0
- package/packages/store/dist/store.interface.d.ts +54 -0
- package/packages/store/dist/store.interface.js +1 -0
- package/packages/tools/dist/audit.d.ts +65 -0
- package/packages/tools/dist/audit.js +6 -0
- package/packages/tools/dist/batch.d.ts +23 -0
- package/packages/tools/dist/batch.js +1 -0
- package/packages/tools/dist/changelog.d.ts +36 -0
- package/packages/tools/dist/changelog.js +2 -0
- package/packages/tools/dist/check.d.ts +48 -0
- package/packages/tools/dist/check.js +2 -0
- package/packages/tools/dist/checkpoint.d.ts +19 -0
- package/packages/tools/dist/checkpoint.js +1 -0
- package/packages/tools/dist/codemod.d.ts +39 -0
- package/packages/tools/dist/codemod.js +2 -0
- package/packages/tools/dist/compact.d.ts +41 -0
- package/packages/tools/dist/compact.js +3 -0
- package/packages/tools/dist/config-extractor.d.ts +9 -0
- package/packages/tools/dist/config-extractor.js +7 -0
- package/packages/tools/dist/data-transform.d.ts +12 -0
- package/packages/tools/dist/data-transform.js +1 -0
- package/packages/tools/dist/dead-symbols.d.ts +28 -0
- package/packages/tools/dist/dead-symbols.js +2 -0
- package/packages/tools/dist/delegate.d.ts +36 -0
- package/packages/tools/dist/delegate.js +1 -0
- package/packages/tools/dist/diagram-builder.d.ts +9 -0
- package/packages/tools/dist/diagram-builder.js +9 -0
- package/packages/tools/dist/diff-parse.d.ts +28 -0
- package/packages/tools/dist/diff-parse.js +3 -0
- package/packages/tools/dist/digest.d.ts +50 -0
- package/packages/tools/dist/digest.js +6 -0
- package/packages/tools/dist/dogfood-log.d.ts +49 -0
- package/packages/tools/dist/dogfood-log.js +2 -0
- package/packages/tools/dist/encode.d.ts +16 -0
- package/packages/tools/dist/encode.js +1 -0
- package/packages/tools/dist/env-info.d.ts +30 -0
- package/packages/tools/dist/env-info.js +1 -0
- package/packages/tools/dist/eval.d.ts +15 -0
- package/packages/tools/dist/eval.js +2 -0
- package/packages/tools/dist/evidence-map.d.ts +92 -0
- package/packages/tools/dist/evidence-map.js +2 -0
- package/packages/tools/dist/file-cache.d.ts +41 -0
- package/packages/tools/dist/file-cache.js +3 -0
- package/packages/tools/dist/file-summary.d.ts +52 -0
- package/packages/tools/dist/file-summary.js +2 -0
- package/packages/tools/dist/file-walk.d.ts +6 -0
- package/packages/tools/dist/file-walk.js +1 -0
- package/packages/tools/dist/find-examples.d.ts +29 -0
- package/packages/tools/dist/find-examples.js +3 -0
- package/packages/tools/dist/find.d.ts +49 -0
- package/packages/tools/dist/find.js +1 -0
- package/packages/tools/dist/forge-classify.d.ts +44 -0
- package/packages/tools/dist/forge-classify.js +2 -0
- package/packages/tools/dist/forge-ground.d.ts +61 -0
- package/packages/tools/dist/forge-ground.js +1 -0
- package/packages/tools/dist/git-context.d.ts +25 -0
- package/packages/tools/dist/git-context.js +3 -0
- package/packages/tools/dist/graph-query.d.ts +86 -0
- package/packages/tools/dist/graph-query.js +1 -0
- package/packages/tools/dist/guide.d.ts +25 -0
- package/packages/tools/dist/guide.js +1 -0
- package/packages/tools/dist/health.d.ts +16 -0
- package/packages/tools/dist/health.js +2 -0
- package/packages/tools/dist/http-request.d.ts +25 -0
- package/packages/tools/dist/http-request.js +1 -0
- package/packages/tools/dist/index.d.ts +57 -0
- package/packages/tools/dist/index.js +1 -0
- package/packages/tools/dist/lane.d.ts +41 -0
- package/packages/tools/dist/lane.js +6 -0
- package/packages/tools/dist/measure.d.ts +42 -0
- package/packages/tools/dist/measure.js +2 -0
- package/packages/tools/dist/onboard-utils.d.ts +12 -0
- package/packages/tools/dist/onboard-utils.js +1 -0
- package/packages/tools/dist/onboard.d.ts +50 -0
- package/packages/tools/dist/onboard.js +18 -0
- package/packages/tools/dist/parse-output.d.ts +82 -0
- package/packages/tools/dist/parse-output.js +2 -0
- package/packages/tools/dist/path-resolver.d.ts +14 -0
- package/packages/tools/dist/path-resolver.js +1 -0
- package/packages/tools/dist/process-manager.d.ts +20 -0
- package/packages/tools/dist/process-manager.js +1 -0
- package/packages/tools/dist/queue.d.ts +40 -0
- package/packages/tools/dist/queue.js +1 -0
- package/packages/tools/dist/regex-test.d.ts +33 -0
- package/packages/tools/dist/regex-test.js +1 -0
- package/packages/tools/dist/regex-utils.d.ts +8 -0
- package/packages/tools/dist/regex-utils.js +1 -0
- package/packages/tools/dist/rename.d.ts +31 -0
- package/packages/tools/dist/rename.js +2 -0
- package/packages/tools/dist/replay.d.ts +59 -0
- package/packages/tools/dist/replay.js +4 -0
- package/packages/tools/dist/response-envelope.d.ts +43 -0
- package/packages/tools/dist/response-envelope.js +1 -0
- package/packages/tools/dist/restore-points.d.ts +22 -0
- package/packages/tools/dist/restore-points.js +1 -0
- package/packages/tools/dist/schema-validate.d.ts +25 -0
- package/packages/tools/dist/schema-validate.js +1 -0
- package/packages/tools/dist/scope-map.d.ts +51 -0
- package/packages/tools/dist/scope-map.js +1 -0
- package/packages/tools/dist/snippet.d.ts +35 -0
- package/packages/tools/dist/snippet.js +1 -0
- package/packages/tools/dist/stash.d.ts +14 -0
- package/packages/tools/dist/stash.js +1 -0
- package/packages/tools/dist/stratum-card.d.ts +30 -0
- package/packages/tools/dist/stratum-card.js +4 -0
- package/packages/tools/dist/symbol.d.ts +45 -0
- package/packages/tools/dist/symbol.js +3 -0
- package/packages/tools/dist/synthesis-engine.d.ts +13 -0
- package/packages/tools/dist/synthesis-engine.js +6 -0
- package/packages/tools/dist/test-run.d.ts +28 -0
- package/packages/tools/dist/test-run.js +2 -0
- package/packages/tools/dist/text-utils.d.ts +24 -0
- package/packages/tools/dist/text-utils.js +2 -0
- package/packages/tools/dist/time-utils.d.ts +20 -0
- package/packages/tools/dist/time-utils.js +1 -0
- package/packages/tools/dist/trace.d.ts +29 -0
- package/packages/tools/dist/trace.js +2 -0
- package/packages/tools/dist/truncation.d.ts +33 -0
- package/packages/tools/dist/truncation.js +7 -0
- package/packages/tools/dist/watch.d.ts +32 -0
- package/packages/tools/dist/watch.js +1 -0
- package/packages/tools/dist/web-fetch.d.ts +47 -0
- package/packages/tools/dist/web-fetch.js +8 -0
- package/packages/tools/dist/web-search.d.ts +25 -0
- package/packages/tools/dist/web-search.js +1 -0
- package/packages/tools/dist/workset.d.ts +47 -0
- package/packages/tools/dist/workset.js +1 -0
- package/packages/tui/dist/App-DU2KEylW.js +2 -0
- package/packages/tui/dist/App.d.ts +13 -0
- package/packages/tui/dist/App.js +2 -0
- package/packages/tui/dist/CuratedPanel-BIamXLNy.js +2 -0
- package/packages/tui/dist/LogPanel-Bo8a8QXB.js +3 -0
- package/packages/tui/dist/SearchPanel-CpJGczAc.js +2 -0
- package/packages/tui/dist/StatusPanel-BAbUxyqQ.js +2 -0
- package/packages/tui/dist/chunk-D6axbAb-.js +2 -0
- package/packages/tui/dist/devtools-DMOZMn70.js +7 -0
- package/packages/tui/dist/hooks/useKBClient.d.ts +9 -0
- package/packages/tui/dist/hooks/useKBClient.js +2 -0
- package/packages/tui/dist/hooks/usePolling.d.ts +8 -0
- package/packages/tui/dist/hooks/usePolling.js +2 -0
- package/packages/tui/dist/index-BXafekwr.d.ts +64 -0
- package/packages/tui/dist/index.d.ts +7 -0
- package/packages/tui/dist/index.js +2 -0
- package/packages/tui/dist/jsx-runtime-y6Gdq5PZ.js +294 -0
- package/packages/tui/dist/panels/CuratedPanel.d.ts +7 -0
- package/packages/tui/dist/panels/CuratedPanel.js +2 -0
- package/packages/tui/dist/panels/LogPanel.d.ts +7 -0
- package/packages/tui/dist/panels/LogPanel.js +2 -0
- package/packages/tui/dist/panels/SearchPanel.d.ts +7 -0
- package/packages/tui/dist/panels/SearchPanel.js +2 -0
- package/packages/tui/dist/panels/StatusPanel.d.ts +7 -0
- package/packages/tui/dist/panels/StatusPanel.js +2 -0
- package/packages/tui/dist/react-D__J1GQe.js +24 -0
- package/packages/tui/dist/useKBClient-C35iA4uG.js +2 -0
- package/packages/tui/dist/usePolling-BbjnRWgx.js +2 -0
- package/scaffold/README.md +192 -0
- package/scaffold/adapters/claude-code.mjs +56 -0
- package/scaffold/adapters/copilot.mjs +270 -0
- package/scaffold/definitions/agents.mjs +189 -0
- package/scaffold/definitions/bodies.mjs +487 -0
- package/scaffold/definitions/hooks.mjs +43 -0
- package/scaffold/definitions/models.mjs +56 -0
- package/scaffold/definitions/plugins.mjs +38 -0
- package/scaffold/definitions/prompts.mjs +145 -0
- package/scaffold/definitions/protocols.mjs +679 -0
- package/scaffold/definitions/tools.mjs +229 -0
- package/scaffold/flows/aikit-advanced/flow.json +60 -0
- package/scaffold/flows/aikit-advanced/skills/execute/SKILL.md +124 -0
- package/scaffold/flows/aikit-advanced/skills/plan/SKILL.md +100 -0
- package/scaffold/flows/aikit-advanced/skills/spec/SKILL.md +100 -0
- package/scaffold/flows/aikit-advanced/skills/task/SKILL.md +99 -0
- package/scaffold/flows/aikit-advanced/skills/verify/SKILL.md +122 -0
- package/scaffold/flows/aikit-basic/flow.json +36 -0
- package/scaffold/flows/aikit-basic/skills/assess/SKILL.md +82 -0
- package/scaffold/flows/aikit-basic/skills/implement/SKILL.md +105 -0
- package/scaffold/flows/aikit-basic/skills/verify/SKILL.md +96 -0
- package/scaffold/general/agents/Architect-Reviewer-Alpha.agent.md +21 -0
- package/scaffold/general/agents/Architect-Reviewer-Beta.agent.md +21 -0
- package/scaffold/general/agents/Code-Reviewer-Alpha.agent.md +12 -0
- package/scaffold/general/agents/Code-Reviewer-Beta.agent.md +12 -0
- package/scaffold/general/agents/Debugger.agent.md +34 -0
- package/scaffold/general/agents/Documenter.agent.md +53 -0
- package/scaffold/general/agents/Explorer.agent.md +63 -0
- package/scaffold/general/agents/Frontend.agent.md +29 -0
- package/scaffold/general/agents/Implementer.agent.md +33 -0
- package/scaffold/general/agents/Orchestrator.agent.md +149 -0
- package/scaffold/general/agents/Planner.agent.md +79 -0
- package/scaffold/general/agents/README.md +57 -0
- package/scaffold/general/agents/Refactor.agent.md +36 -0
- package/scaffold/general/agents/Researcher-Alpha.agent.md +20 -0
- package/scaffold/general/agents/Researcher-Beta.agent.md +20 -0
- package/scaffold/general/agents/Researcher-Delta.agent.md +20 -0
- package/scaffold/general/agents/Researcher-Gamma.agent.md +20 -0
- package/scaffold/general/agents/Security.agent.md +55 -0
- package/scaffold/general/agents/_shared/architect-reviewer-base.md +60 -0
- package/scaffold/general/agents/_shared/code-agent-base.md +262 -0
- package/scaffold/general/agents/_shared/code-reviewer-base.md +64 -0
- package/scaffold/general/agents/_shared/decision-protocol.md +27 -0
- package/scaffold/general/agents/_shared/forge-protocol.md +90 -0
- package/scaffold/general/agents/_shared/researcher-base.md +101 -0
- package/scaffold/general/agents/templates/adr-template.md +28 -0
- package/scaffold/general/agents/templates/execution-state.md +26 -0
- package/scaffold/general/prompts/ask.prompt.md +21 -0
- package/scaffold/general/prompts/debug.prompt.md +25 -0
- package/scaffold/general/prompts/design.prompt.md +23 -0
- package/scaffold/general/prompts/implement.prompt.md +26 -0
- package/scaffold/general/prompts/plan.prompt.md +25 -0
- package/scaffold/general/prompts/review.prompt.md +32 -0
- package/scaffold/general/skills/adr-skill/SKILL.md +329 -0
- package/scaffold/general/skills/adr-skill/assets/templates/adr-madr.md +89 -0
- package/scaffold/general/skills/adr-skill/assets/templates/adr-readme.md +20 -0
- package/scaffold/general/skills/adr-skill/assets/templates/adr-simple.md +46 -0
- package/scaffold/general/skills/adr-skill/references/adr-conventions.md +95 -0
- package/scaffold/general/skills/adr-skill/references/examples.md +193 -0
- package/scaffold/general/skills/adr-skill/references/review-checklist.md +77 -0
- package/scaffold/general/skills/adr-skill/references/template-variants.md +52 -0
- package/scaffold/general/skills/adr-skill/scripts/bootstrap_adr.js +259 -0
- package/scaffold/general/skills/adr-skill/scripts/new_adr.js +391 -0
- package/scaffold/general/skills/adr-skill/scripts/set_adr_status.js +169 -0
- package/scaffold/general/skills/aikit/SKILL.md +521 -0
- package/scaffold/general/skills/brainstorming/SKILL.md +259 -0
- package/scaffold/general/skills/brainstorming/scripts/frame-template.html +365 -0
- package/scaffold/general/skills/brainstorming/scripts/helper.js +216 -0
- package/scaffold/general/skills/brainstorming/scripts/server.cjs +9 -0
- package/scaffold/general/skills/brainstorming/scripts/server.src.cjs +249 -0
- package/scaffold/general/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/scaffold/general/skills/brainstorming/visual-companion.md +430 -0
- package/scaffold/general/skills/c4-architecture/SKILL.md +295 -0
- package/scaffold/general/skills/c4-architecture/references/advanced-patterns.md +552 -0
- package/scaffold/general/skills/c4-architecture/references/c4-syntax.md +492 -0
- package/scaffold/general/skills/c4-architecture/references/common-mistakes.md +437 -0
- package/scaffold/general/skills/lesson-learned/SKILL.md +105 -0
- package/scaffold/general/skills/lesson-learned/references/anti-patterns.md +55 -0
- package/scaffold/general/skills/lesson-learned/references/se-principles.md +109 -0
- package/scaffold/general/skills/multi-agents-development/SKILL.md +435 -0
- package/scaffold/general/skills/multi-agents-development/architecture-review-prompt.md +81 -0
- package/scaffold/general/skills/multi-agents-development/code-quality-review-prompt.md +91 -0
- package/scaffold/general/skills/multi-agents-development/implementer-prompt.md +93 -0
- package/scaffold/general/skills/multi-agents-development/parallel-dispatch-example.md +167 -0
- package/scaffold/general/skills/multi-agents-development/spec-review-prompt.md +81 -0
- package/scaffold/general/skills/present/SKILL.md +424 -0
- package/scaffold/general/skills/requirements-clarity/SKILL.md +324 -0
- package/scaffold/general/skills/session-handoff/SKILL.md +189 -0
- package/scaffold/general/skills/session-handoff/references/handoff-template.md +139 -0
- package/scaffold/general/skills/session-handoff/references/resume-checklist.md +80 -0
- package/scaffold/general/skills/session-handoff/scripts/check_staleness.js +269 -0
- package/scaffold/general/skills/session-handoff/scripts/create_handoff.js +299 -0
- package/scaffold/general/skills/session-handoff/scripts/list_handoffs.js +113 -0
- package/scaffold/general/skills/session-handoff/scripts/validate_handoff.js +241 -0
- package/scaffold/generate.mjs +82 -0
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
# Common C4 Model Mistakes to Avoid
|
|
2
|
+
|
|
3
|
+
This guide documents frequent anti-patterns and errors when creating C4 architecture diagrams, with examples of what to do instead.
|
|
4
|
+
|
|
5
|
+
## Abstraction Level Mistakes
|
|
6
|
+
|
|
7
|
+
### 1. Confusing Containers and Components
|
|
8
|
+
|
|
9
|
+
**The Problem:**
|
|
10
|
+
Containers are **deployable units** (applications, services, databases). Components are **non-deployable elements inside a container** (modules, classes, packages).
|
|
11
|
+
|
|
12
|
+
**Wrong - Java class shown as container:**
|
|
13
|
+
```mermaid
|
|
14
|
+
C4Container
|
|
15
|
+
title WRONG: Class as Container
|
|
16
|
+
|
|
17
|
+
Container(userController, "UserController", "Java Class", "Handles user requests")
|
|
18
|
+
Container(userService, "UserService", "Java Class", "Business logic")
|
|
19
|
+
ContainerDb(db, "Database", "PostgreSQL", "User data")
|
|
20
|
+
|
|
21
|
+
Rel(userController, userService, "Calls")
|
|
22
|
+
Rel(userService, db, "Queries")
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Correct - Classes as components inside a container:**
|
|
26
|
+
```mermaid
|
|
27
|
+
C4Component
|
|
28
|
+
title CORRECT: Classes as Components
|
|
29
|
+
|
|
30
|
+
ContainerDb(db, "Database", "PostgreSQL", "User data")
|
|
31
|
+
|
|
32
|
+
Container_Boundary(api, "User API Service") {
|
|
33
|
+
Component(userController, "UserController", "Spring MVC", "REST endpoints")
|
|
34
|
+
Component(userService, "UserService", "Spring Bean", "Business logic")
|
|
35
|
+
Component(userRepo, "UserRepository", "JPA", "Data access")
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
Rel(userController, userService, "Calls")
|
|
39
|
+
Rel(userService, userRepo, "Uses")
|
|
40
|
+
Rel(userRepo, db, "Queries", "JDBC")
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 2. Adding Undefined Abstraction Levels
|
|
44
|
+
|
|
45
|
+
**The Problem:**
|
|
46
|
+
C4 defines exactly four levels. Don't invent "subcomponents", "modules", or other arbitrary levels.
|
|
47
|
+
|
|
48
|
+
**Wrong:**
|
|
49
|
+
- Level 3.5: "Subcomponents"
|
|
50
|
+
- Level 2.5: "Microservice groups"
|
|
51
|
+
- Custom levels like "packages" or "modules"
|
|
52
|
+
|
|
53
|
+
**Correct:**
|
|
54
|
+
Stick to Person, Software System, Container, Component. If you need more detail, you're at Level 4 (Code) which should use UML class diagrams.
|
|
55
|
+
|
|
56
|
+
### 3. Vague Subsystems
|
|
57
|
+
|
|
58
|
+
**The Problem:**
|
|
59
|
+
"Subsystem" is ambiguous. Is it a system, container, or component?
|
|
60
|
+
|
|
61
|
+
**Wrong:**
|
|
62
|
+
```
|
|
63
|
+
Subsystem(orders, "Order Subsystem", "Handles orders")
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Correct - Be specific:**
|
|
67
|
+
```
|
|
68
|
+
System(orderSystem, "Order System", "Handles order lifecycle")
|
|
69
|
+
# OR
|
|
70
|
+
Container(orderService, "Order Service", "Java", "Order processing API")
|
|
71
|
+
# OR
|
|
72
|
+
Component(orderProcessor, "Order Processor", "Spring Bean", "Order business logic")
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Shared Libraries Mistake
|
|
76
|
+
|
|
77
|
+
**The Problem:**
|
|
78
|
+
Modeling a shared library as a container implies it's an independently running service. Libraries are copied into applications, not deployed separately.
|
|
79
|
+
|
|
80
|
+
**Wrong - Library as separate container:**
|
|
81
|
+
```mermaid
|
|
82
|
+
C4Container
|
|
83
|
+
title WRONG: Library as Container
|
|
84
|
+
|
|
85
|
+
Container(serviceA, "Service A", "Java")
|
|
86
|
+
Container(serviceB, "Service B", "Java")
|
|
87
|
+
Container(sharedLib, "Shared Utils Library", "Java", "Common utilities")
|
|
88
|
+
|
|
89
|
+
Rel(serviceA, sharedLib, "Uses")
|
|
90
|
+
Rel(serviceB, sharedLib, "Uses")
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Correct - Show library within each service:**
|
|
94
|
+
```mermaid
|
|
95
|
+
C4Component
|
|
96
|
+
title CORRECT: Library in Each Service
|
|
97
|
+
|
|
98
|
+
Container_Boundary(serviceA, "Service A") {
|
|
99
|
+
Component(controllerA, "Controller", "Spring MVC")
|
|
100
|
+
Component(utilsA, "Shared Utils", "Java Library", "Bundled copy")
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
Container_Boundary(serviceB, "Service B") {
|
|
104
|
+
Component(controllerB, "Controller", "Spring MVC")
|
|
105
|
+
Component(utilsB, "Shared Utils", "Java Library", "Bundled copy")
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Or simply omit the library from architecture diagrams since it's an implementation detail.
|
|
110
|
+
|
|
111
|
+
## Message Broker Mistakes
|
|
112
|
+
|
|
113
|
+
### Single Message Bus Anti-Pattern
|
|
114
|
+
|
|
115
|
+
**The Problem:**
|
|
116
|
+
Showing Kafka/RabbitMQ as a single container creates a misleading "hub and spoke" diagram that hides actual data flows.
|
|
117
|
+
|
|
118
|
+
**Wrong - Central message bus:**
|
|
119
|
+
```mermaid
|
|
120
|
+
C4Container
|
|
121
|
+
title WRONG: Central Message Bus
|
|
122
|
+
|
|
123
|
+
Container(orderSvc, "Order Service", "Java")
|
|
124
|
+
Container(inventorySvc, "Inventory Service", "Java")
|
|
125
|
+
Container(paymentSvc, "Payment Service", "Java")
|
|
126
|
+
ContainerQueue(kafka, "Kafka", "Event Streaming", "Message bus")
|
|
127
|
+
|
|
128
|
+
Rel(orderSvc, kafka, "Publishes/Subscribes")
|
|
129
|
+
Rel(inventorySvc, kafka, "Publishes/Subscribes")
|
|
130
|
+
Rel(paymentSvc, kafka, "Publishes/Subscribes")
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Correct - Individual topics:**
|
|
134
|
+
```mermaid
|
|
135
|
+
C4Container
|
|
136
|
+
title CORRECT: Individual Topics
|
|
137
|
+
|
|
138
|
+
Container(orderSvc, "Order Service", "Java", "Creates orders")
|
|
139
|
+
Container(inventorySvc, "Inventory Service", "Java", "Manages stock")
|
|
140
|
+
Container(paymentSvc, "Payment Service", "Java", "Processes payments")
|
|
141
|
+
|
|
142
|
+
ContainerQueue(orderCreated, "order.created", "Kafka", "New orders")
|
|
143
|
+
ContainerQueue(stockReserved, "stock.reserved", "Kafka", "Stock events")
|
|
144
|
+
ContainerQueue(paymentComplete, "payment.complete", "Kafka", "Payment events")
|
|
145
|
+
|
|
146
|
+
Rel(orderSvc, orderCreated, "Publishes")
|
|
147
|
+
Rel(inventorySvc, orderCreated, "Consumes")
|
|
148
|
+
Rel(inventorySvc, stockReserved, "Publishes")
|
|
149
|
+
Rel(paymentSvc, stockReserved, "Consumes")
|
|
150
|
+
Rel(paymentSvc, paymentComplete, "Publishes")
|
|
151
|
+
Rel(orderSvc, paymentComplete, "Consumes")
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Alternative - Topics on relationship labels:**
|
|
155
|
+
```mermaid
|
|
156
|
+
C4Container
|
|
157
|
+
title ALTERNATIVE: Topics as Labels
|
|
158
|
+
|
|
159
|
+
Container(orderSvc, "Order Service", "Java")
|
|
160
|
+
Container(inventorySvc, "Inventory Service", "Java")
|
|
161
|
+
Container(paymentSvc, "Payment Service", "Java")
|
|
162
|
+
|
|
163
|
+
Rel(orderSvc, inventorySvc, "order.created", "Kafka")
|
|
164
|
+
Rel(inventorySvc, paymentSvc, "stock.reserved", "Kafka")
|
|
165
|
+
Rel(paymentSvc, orderSvc, "payment.complete", "Kafka")
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## External Systems Mistakes
|
|
169
|
+
|
|
170
|
+
### Showing Internal Details of External Systems
|
|
171
|
+
|
|
172
|
+
**The Problem:**
|
|
173
|
+
You don't control external systems. Showing their internals creates coupling and becomes stale quickly.
|
|
174
|
+
|
|
175
|
+
**Wrong - External system internals:**
|
|
176
|
+
```mermaid
|
|
177
|
+
C4Container
|
|
178
|
+
title WRONG: External System Internals
|
|
179
|
+
|
|
180
|
+
Container(myApp, "My App", "Node.js")
|
|
181
|
+
|
|
182
|
+
System_Boundary(stripe, "Stripe") {
|
|
183
|
+
Container(stripeApi, "Stripe API", "Ruby")
|
|
184
|
+
Container(stripeWorker, "Payment Worker", "Java")
|
|
185
|
+
ContainerDb(stripeDb, "Payment DB", "MySQL")
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
Rel(myApp, stripeApi, "Charges cards")
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
**Correct - External system as black box:**
|
|
192
|
+
```mermaid
|
|
193
|
+
C4Context
|
|
194
|
+
title CORRECT: External System Black Box
|
|
195
|
+
|
|
196
|
+
Container(myApp, "My App", "Node.js", "E-commerce backend")
|
|
197
|
+
System_Ext(stripe, "Stripe", "Payment processing platform")
|
|
198
|
+
|
|
199
|
+
Rel(myApp, stripe, "Processes payments", "REST API")
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Metadata and Documentation Mistakes
|
|
203
|
+
|
|
204
|
+
### 1. Removing Type Labels
|
|
205
|
+
|
|
206
|
+
**The Problem:**
|
|
207
|
+
Removing element type labels (Container, Component, System) to "simplify" diagrams creates ambiguity.
|
|
208
|
+
|
|
209
|
+
**Wrong:**
|
|
210
|
+
```
|
|
211
|
+
Box(api, "API") # What is this? System? Container? Component?
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
**Correct:**
|
|
215
|
+
```
|
|
216
|
+
Container(api, "API Application", "Spring Boot", "REST API backend")
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### 2. Missing Descriptions
|
|
220
|
+
|
|
221
|
+
**The Problem:**
|
|
222
|
+
Elements without descriptions force viewers to guess their purpose.
|
|
223
|
+
|
|
224
|
+
**Wrong:**
|
|
225
|
+
```
|
|
226
|
+
Container(svc, "Service", "Java")
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Correct:**
|
|
230
|
+
```
|
|
231
|
+
Container(orderSvc, "Order Service", "Spring Boot", "Manages order lifecycle and fulfillment")
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### 3. Generic Relationship Labels
|
|
235
|
+
|
|
236
|
+
**The Problem:**
|
|
237
|
+
Labels like "uses" or "communicates with" don't explain what data flows or why.
|
|
238
|
+
|
|
239
|
+
**Wrong:**
|
|
240
|
+
```
|
|
241
|
+
Rel(frontend, api, "Uses")
|
|
242
|
+
Rel(api, db, "Accesses")
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**Correct:**
|
|
246
|
+
```
|
|
247
|
+
Rel(frontend, api, "Fetches products, submits orders", "JSON/HTTPS")
|
|
248
|
+
Rel(api, db, "Reads/writes order data", "JDBC")
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## Diagram Scope Mistakes
|
|
252
|
+
|
|
253
|
+
### 1. Not Tailoring to Audience
|
|
254
|
+
|
|
255
|
+
**The Problem:**
|
|
256
|
+
Showing Level 4 code diagrams to executives, or only Level 1 to developers who need implementation details.
|
|
257
|
+
|
|
258
|
+
| Audience | Appropriate Levels |
|
|
259
|
+
|----------|-------------------|
|
|
260
|
+
| Executives | Level 1 (Context) only |
|
|
261
|
+
| Product Managers | Levels 1-2 |
|
|
262
|
+
| Architects | Levels 1-3 |
|
|
263
|
+
| Developers | All levels as needed |
|
|
264
|
+
| DevOps | Levels 2 + Deployment |
|
|
265
|
+
|
|
266
|
+
### 2. Creating All Four Levels by Default
|
|
267
|
+
|
|
268
|
+
**The Problem:**
|
|
269
|
+
Not every system needs all four levels. Level 3 (Component) and Level 4 (Code) often add no value.
|
|
270
|
+
|
|
271
|
+
**Guidance:**
|
|
272
|
+
- **Always create:** Context (L1) and Container (L2)
|
|
273
|
+
- **Create if valuable:** Component (L3) for complex containers
|
|
274
|
+
- **Rarely create:** Code (L4) - let IDEs generate these
|
|
275
|
+
|
|
276
|
+
### 3. Too Many Elements Per Diagram
|
|
277
|
+
|
|
278
|
+
**The Problem:**
|
|
279
|
+
Diagrams with 20+ elements become unreadable.
|
|
280
|
+
|
|
281
|
+
**Simon Brown's advice:** "If a diagram with a dozen boxes is hard to understand, don't draw a diagram with a dozen boxes!"
|
|
282
|
+
|
|
283
|
+
**Solutions:**
|
|
284
|
+
- Split by bounded context or domain
|
|
285
|
+
- Create separate diagrams per service
|
|
286
|
+
- Show one service + its direct dependencies
|
|
287
|
+
- Use multiple focused diagrams instead of one comprehensive diagram
|
|
288
|
+
|
|
289
|
+
## Arrow Mistakes
|
|
290
|
+
|
|
291
|
+
### 1. Bidirectional Arrows
|
|
292
|
+
|
|
293
|
+
**The Problem:**
|
|
294
|
+
Bidirectional arrows are ambiguous. Who initiates the call? What flows each direction?
|
|
295
|
+
|
|
296
|
+
**Wrong:**
|
|
297
|
+
```
|
|
298
|
+
BiRel(frontend, api, "Data") # Ambiguous direction
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
**Correct:**
|
|
302
|
+
```
|
|
303
|
+
Rel(frontend, api, "Requests products", "JSON/HTTPS")
|
|
304
|
+
Rel(api, frontend, "Returns product data", "JSON/HTTPS")
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Or show the initiator's perspective:
|
|
308
|
+
```
|
|
309
|
+
Rel(frontend, api, "Fetches products", "JSON/HTTPS")
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### 2. Unlabeled Arrows
|
|
313
|
+
|
|
314
|
+
**The Problem:**
|
|
315
|
+
Arrows without labels force readers to guess what flows between elements.
|
|
316
|
+
|
|
317
|
+
**Wrong:**
|
|
318
|
+
```
|
|
319
|
+
Rel(orderSvc, paymentSvc)
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
**Correct:**
|
|
323
|
+
```
|
|
324
|
+
Rel(orderSvc, paymentSvc, "Requests payment authorization", "gRPC")
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
## Deployment Diagram Mistakes
|
|
328
|
+
|
|
329
|
+
### 1. Deployment Details in Container Diagrams
|
|
330
|
+
|
|
331
|
+
**The Problem:**
|
|
332
|
+
Container diagrams should show logical architecture, not infrastructure details.
|
|
333
|
+
|
|
334
|
+
**Wrong - Infrastructure in container diagram:**
|
|
335
|
+
```mermaid
|
|
336
|
+
C4Container
|
|
337
|
+
title WRONG: Infrastructure in Container Diagram
|
|
338
|
+
|
|
339
|
+
Container(api1, "API (Instance 1)", "Java", "Primary")
|
|
340
|
+
Container(api2, "API (Instance 2)", "Java", "Replica")
|
|
341
|
+
Container(api3, "API (Instance 3)", "Java", "Replica")
|
|
342
|
+
Container(lb, "Load Balancer", "HAProxy", "Distributes traffic")
|
|
343
|
+
ContainerDb(primary, "Primary DB", "PostgreSQL", "Write")
|
|
344
|
+
ContainerDb(replica, "Read Replica", "PostgreSQL", "Read")
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
**Correct - Use Deployment diagram for infrastructure:**
|
|
348
|
+
```mermaid
|
|
349
|
+
C4Deployment
|
|
350
|
+
title CORRECT: Deployment Diagram for Infrastructure
|
|
351
|
+
|
|
352
|
+
Deployment_Node(lb, "Load Balancer", "AWS ALB") {
|
|
353
|
+
Container(alb, "ALB", "AWS", "Traffic distribution")
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
Deployment_Node(ecs, "ECS Cluster", "Fargate") {
|
|
357
|
+
Container(api1, "API Instance 1", "Spring Boot")
|
|
358
|
+
Container(api2, "API Instance 2", "Spring Boot")
|
|
359
|
+
Container(api3, "API Instance 3", "Spring Boot")
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
Deployment_Node(rds, "RDS", "Multi-AZ") {
|
|
363
|
+
ContainerDb(primary, "Primary", "PostgreSQL")
|
|
364
|
+
ContainerDb(replica, "Replica", "PostgreSQL")
|
|
365
|
+
}
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### 2. Missing Environment Context
|
|
369
|
+
|
|
370
|
+
**The Problem:**
|
|
371
|
+
Deployment diagrams should specify which environment (production, staging, dev).
|
|
372
|
+
|
|
373
|
+
**Wrong:**
|
|
374
|
+
```
|
|
375
|
+
C4Deployment
|
|
376
|
+
title Deployment Diagram # Which environment?
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
**Correct:**
|
|
380
|
+
```
|
|
381
|
+
C4Deployment
|
|
382
|
+
title Deployment Diagram - Production (AWS us-east-1)
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
## Consistency Mistakes
|
|
386
|
+
|
|
387
|
+
### 1. Inconsistent Notation Across Diagrams
|
|
388
|
+
|
|
389
|
+
**The Problem:**
|
|
390
|
+
Using different colors, shapes, or terminology for the same elements across diagrams.
|
|
391
|
+
|
|
392
|
+
**Wrong:**
|
|
393
|
+
- Context diagram: "Payment System" (blue)
|
|
394
|
+
- Container diagram: "Payment Service" (green)
|
|
395
|
+
- Component diagram: "Payment Module" (red)
|
|
396
|
+
|
|
397
|
+
**Correct:**
|
|
398
|
+
Use consistent naming, colors, and styling. Create a style guide for your team.
|
|
399
|
+
|
|
400
|
+
### 2. No Legend/Key
|
|
401
|
+
|
|
402
|
+
**The Problem:**
|
|
403
|
+
Assuming viewers understand your notation without explanation.
|
|
404
|
+
|
|
405
|
+
**Solution:**
|
|
406
|
+
Always include a legend explaining colors, shapes, and line styles. Even for "obvious" elements.
|
|
407
|
+
|
|
408
|
+
## Decision Documentation Mistakes
|
|
409
|
+
|
|
410
|
+
### Showing Decision Process in Diagrams
|
|
411
|
+
|
|
412
|
+
**The Problem:**
|
|
413
|
+
Architecture diagrams show **outcomes** of decisions, not the decision-making process.
|
|
414
|
+
|
|
415
|
+
**Wrong approach:**
|
|
416
|
+
Including "Option A vs Option B" annotations in diagrams.
|
|
417
|
+
|
|
418
|
+
**Correct approach:**
|
|
419
|
+
- Document decisions separately in Architecture Decision Records (ADRs)
|
|
420
|
+
- Link ADRs to relevant diagrams
|
|
421
|
+
- Diagrams show the chosen architecture, ADRs explain why
|
|
422
|
+
|
|
423
|
+
## Quick Reference: Checklist
|
|
424
|
+
|
|
425
|
+
Before finalizing any C4 diagram, verify:
|
|
426
|
+
|
|
427
|
+
- [ ] Every element has: name, type, technology (if applicable), description
|
|
428
|
+
- [ ] All arrows are unidirectional with action verb labels
|
|
429
|
+
- [ ] Technology/protocol included on relationships
|
|
430
|
+
- [ ] Diagram has a clear, specific title
|
|
431
|
+
- [ ] Under 20 elements (ideally under 15)
|
|
432
|
+
- [ ] Appropriate level for the target audience
|
|
433
|
+
- [ ] Containers are deployable, components are not
|
|
434
|
+
- [ ] External systems shown as black boxes
|
|
435
|
+
- [ ] Message topics shown individually (not as single broker)
|
|
436
|
+
- [ ] No infrastructure details in container diagrams
|
|
437
|
+
- [ ] Consistent with other diagrams in the set
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lesson-learned
|
|
3
|
+
description: "Analyze recent code changes via git history and extract software engineering lessons. Use when the user asks 'what is the lesson here?', 'what can I learn from this?', 'engineering takeaway', 'what did I just learn?', 'reflect on this code', or wants to extract principles from recent work."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Lesson Learned
|
|
7
|
+
|
|
8
|
+
Extract specific, grounded software engineering lessons from actual code changes. Not a lecture -- a mirror. Show the user what their code already demonstrates.
|
|
9
|
+
|
|
10
|
+
## Before You Begin
|
|
11
|
+
|
|
12
|
+
**Load the principles reference first.**
|
|
13
|
+
|
|
14
|
+
1. Read `references/se-principles.md` to have the principle catalog available
|
|
15
|
+
2. Optionally read `references/anti-patterns.md` if you suspect the changes include areas for improvement
|
|
16
|
+
3. Determine the scope of analysis (see Phase 1)
|
|
17
|
+
|
|
18
|
+
**Do not proceed until you've loaded at least `se-principles.md`.**
|
|
19
|
+
|
|
20
|
+
## Phase 1: Determine Scope
|
|
21
|
+
|
|
22
|
+
Ask the user or infer from context what to analyze.
|
|
23
|
+
|
|
24
|
+
| Scope | Git Commands | When to Use |
|
|
25
|
+
|-------|-------------|-------------|
|
|
26
|
+
| Feature branch | `git log main..HEAD --oneline` + `git diff main...HEAD` | User is on a non-main branch (default) |
|
|
27
|
+
| Last N commits | `git log --oneline -N` + `git diff HEAD~N..HEAD` | User specifies a range, or on main (default N=5) |
|
|
28
|
+
| Specific commit | `git show <sha>` | User references a specific commit |
|
|
29
|
+
| Working changes | `git diff` + `git diff --cached` | User says "what about these changes?" before committing |
|
|
30
|
+
|
|
31
|
+
**Default behavior:**
|
|
32
|
+
- If on a feature branch: analyze branch commits vs main
|
|
33
|
+
- If on main: analyze the last 5 commits
|
|
34
|
+
- If the user provides a different scope, use that
|
|
35
|
+
|
|
36
|
+
## Phase 2: Gather Changes
|
|
37
|
+
|
|
38
|
+
1. Run `git log` with the determined scope to get the commit list and messages
|
|
39
|
+
2. Run `git diff` for the full diff of the scope
|
|
40
|
+
3. If the diff is large (>500 lines), use `git diff --stat` first, then selectively read the top 3-5 most-changed files
|
|
41
|
+
4. **Read commit messages carefully** -- they contain intent that raw diffs miss
|
|
42
|
+
5. Only read changed files. Do not read the entire repo.
|
|
43
|
+
|
|
44
|
+
## Phase 3: Analyze
|
|
45
|
+
|
|
46
|
+
Identify the **dominant pattern** -- the single most instructive thing about these changes.
|
|
47
|
+
|
|
48
|
+
Look for:
|
|
49
|
+
- **Structural decisions** -- How was the code organized? Why those boundaries?
|
|
50
|
+
- **Trade-offs made** -- What was gained vs. sacrificed? (readability vs. performance, DRY vs. clarity, speed vs. correctness)
|
|
51
|
+
- **Problems solved** -- What was the before/after? What made the "after" better?
|
|
52
|
+
- **Missed opportunities** -- Where could the code improve? (present gently as "next time, consider...")
|
|
53
|
+
|
|
54
|
+
Map findings to specific principles from `references/se-principles.md`. Be specific -- quote actual code, reference actual file names and line changes.
|
|
55
|
+
|
|
56
|
+
## Phase 4: Present the Lesson
|
|
57
|
+
|
|
58
|
+
Use this template:
|
|
59
|
+
|
|
60
|
+
```markdown
|
|
61
|
+
## Lesson: [Principle Name]
|
|
62
|
+
|
|
63
|
+
**What happened in the code:**
|
|
64
|
+
[2-3 sentences describing the specific change, referencing files and commits]
|
|
65
|
+
|
|
66
|
+
**The principle at work:**
|
|
67
|
+
[1-2 sentences explaining the SE principle]
|
|
68
|
+
|
|
69
|
+
**Why it matters:**
|
|
70
|
+
[1-2 sentences on the practical consequence -- what would go wrong without this, or what goes right because of it]
|
|
71
|
+
|
|
72
|
+
**Takeaway for next time:**
|
|
73
|
+
[One concrete, actionable sentence the user can apply to future work]
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
If there is a second lesson worth noting (maximum 2 additional):
|
|
77
|
+
|
|
78
|
+
```markdown
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
### Also worth noting: [Principle Name]
|
|
82
|
+
|
|
83
|
+
**In the code:** [1 sentence]
|
|
84
|
+
**The principle:** [1 sentence]
|
|
85
|
+
**Takeaway:** [1 sentence]
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## What NOT to Do
|
|
89
|
+
|
|
90
|
+
| Avoid | Why | Instead |
|
|
91
|
+
|-------|-----|---------|
|
|
92
|
+
| Listing every principle that vaguely applies | Overwhelming and generic | Pick the 1-2 most relevant |
|
|
93
|
+
| Analyzing files that were not changed | Scope creep | Stick to the diff |
|
|
94
|
+
| Ignoring commit messages | They contain intent that diffs miss | Read them as primary context |
|
|
95
|
+
| Abstract advice disconnected from the code | Not actionable | Always reference specific files/lines |
|
|
96
|
+
| Negative-only feedback | Demoralizing | Lead with what works, then suggest improvements |
|
|
97
|
+
| More than 3 lessons | Dilutes the insight | One well-grounded lesson beats seven vague ones |
|
|
98
|
+
|
|
99
|
+
## Conversation Style
|
|
100
|
+
|
|
101
|
+
- **Reflective, not prescriptive.** Use the user's own code as primary evidence.
|
|
102
|
+
- **Never say "you should have..."** -- instead use "the approach here shows..." or "next time you face this, consider..."
|
|
103
|
+
- **If the code is good, say so.** Not every lesson is about what went wrong. Recognizing good patterns reinforces them.
|
|
104
|
+
- **If the changes are trivial** (a single config tweak, a typo fix), say so honestly rather than forcing a lesson. "These changes are straightforward -- no deep lesson here, just good housekeeping."
|
|
105
|
+
- **Be specific.** Generic advice is worthless. Every claim must point to a concrete code change.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Common anti-patterns to detect in code diffs. Use alongside se-principles.md for balanced analysis -- principles show what's good, anti-patterns show what to watch for.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Anti-Patterns
|
|
6
|
+
|
|
7
|
+
When analyzing a diff, check for these signals. Present findings gently -- as opportunities, not failures.
|
|
8
|
+
|
|
9
|
+
## God Object / God Class
|
|
10
|
+
|
|
11
|
+
One module doing too much.
|
|
12
|
+
**Diff signals:** A single file with many unrelated changes. One class/module imported everywhere. A file over 500 lines that keeps growing.
|
|
13
|
+
**Suggest:** Extract responsibilities into focused modules (SRP).
|
|
14
|
+
|
|
15
|
+
## Shotgun Surgery
|
|
16
|
+
|
|
17
|
+
One logical change scattered across many files.
|
|
18
|
+
**Diff signals:** 10+ files changed for a single feature or fix. The same type of edit repeated in many places. A rename or config change touching dozens of files.
|
|
19
|
+
**Suggest:** Consolidate the scattered logic. If one change requires editing many files, the abstraction boundaries may be wrong.
|
|
20
|
+
|
|
21
|
+
## Feature Envy
|
|
22
|
+
|
|
23
|
+
A function that uses another module's data more than its own.
|
|
24
|
+
**Diff signals:** Heavy cross-module imports. A function reaching deep into another object's properties. Utility functions that only serve one caller in a different module.
|
|
25
|
+
**Suggest:** Move the function closer to the data it uses.
|
|
26
|
+
|
|
27
|
+
## Premature Abstraction
|
|
28
|
+
|
|
29
|
+
Abstracting before there are multiple concrete cases.
|
|
30
|
+
**Diff signals:** An interface with exactly one implementation. A factory that creates only one type. A generic solution for a problem that exists only once.
|
|
31
|
+
**Suggest:** Wait for the second or third use case before abstracting (Rule of Three).
|
|
32
|
+
|
|
33
|
+
## Copy-Paste Programming
|
|
34
|
+
|
|
35
|
+
Duplicated code blocks with minor variations.
|
|
36
|
+
**Diff signals:** Similar code appearing in multiple places in the diff. Functions that differ by only a parameter or two. Repeated patterns that could be parameterized.
|
|
37
|
+
**Suggest:** Extract shared logic, parameterize the differences.
|
|
38
|
+
|
|
39
|
+
## Magic Numbers / Strings
|
|
40
|
+
|
|
41
|
+
Literal values without explanation.
|
|
42
|
+
**Diff signals:** Hardcoded numbers in conditions (`if (retries > 3)`). String literals used as keys or identifiers. Timeouts, limits, or thresholds without named constants.
|
|
43
|
+
**Suggest:** Extract to named constants that explain the "why."
|
|
44
|
+
|
|
45
|
+
## Long Method
|
|
46
|
+
|
|
47
|
+
Functions that do too much.
|
|
48
|
+
**Diff signals:** New functions over 40-50 lines. Functions with multiple levels of nesting. Functions that require scrolling to read.
|
|
49
|
+
**Suggest:** Extract sub-steps into named functions. Each function should do one thing.
|
|
50
|
+
|
|
51
|
+
## Excessive Comments
|
|
52
|
+
|
|
53
|
+
Comments explaining "what" instead of "why."
|
|
54
|
+
**Diff signals:** Comments restating the code (`// increment counter`). Large comment blocks before straightforward code. Commented-out code left in place.
|
|
55
|
+
**Suggest:** Make the code self-documenting through better naming. Use comments only for "why" -- intent, trade-offs, non-obvious constraints.
|