@su-record/vibe 2.8.49 → 2.8.51
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/.env.example +37 -37
- package/CLAUDE.md +169 -169
- package/LICENSE +21 -21
- package/README.ko.md +190 -0
- package/README.md +97 -461
- package/agents/architect-low.md +41 -41
- package/agents/architect-medium.md +59 -59
- package/agents/architect.md +80 -80
- package/agents/build-error-resolver.md +115 -115
- package/agents/compounder.md +261 -261
- package/agents/diagrammer.md +178 -178
- package/agents/docs/api-documenter.md +99 -99
- package/agents/docs/changelog-writer.md +93 -93
- package/agents/e2e-tester.md +294 -294
- package/agents/event/event-comms.md +78 -78
- package/agents/event/event-content.md +68 -68
- package/agents/event/event-image.md +95 -95
- package/agents/event/event-ops.md +84 -84
- package/agents/event/event-scheduler.md +69 -69
- package/agents/event/event-speaker.md +86 -86
- package/agents/explorer-low.md +42 -42
- package/agents/explorer-medium.md +59 -59
- package/agents/explorer.md +48 -48
- package/agents/implementer-low.md +43 -43
- package/agents/implementer-medium.md +52 -52
- package/agents/implementer.md +54 -54
- package/agents/junior-mentor.md +141 -141
- package/agents/planning/requirements-analyst.md +84 -84
- package/agents/planning/ux-advisor.md +83 -83
- package/agents/qa/acceptance-tester.md +86 -86
- package/agents/qa/edge-case-finder.md +93 -93
- package/agents/qa/qa-coordinator.md +131 -131
- package/agents/refactor-cleaner.md +143 -143
- package/agents/research/best-practices-agent.md +199 -199
- package/agents/research/codebase-patterns-agent.md +157 -157
- package/agents/research/framework-docs-agent.md +188 -188
- package/agents/research/security-advisory-agent.md +213 -213
- package/agents/review/architecture-reviewer.md +107 -107
- package/agents/review/complexity-reviewer.md +116 -116
- package/agents/review/data-integrity-reviewer.md +88 -88
- package/agents/review/git-history-reviewer.md +103 -103
- package/agents/review/performance-reviewer.md +86 -86
- package/agents/review/python-reviewer.md +150 -150
- package/agents/review/rails-reviewer.md +139 -139
- package/agents/review/react-reviewer.md +144 -144
- package/agents/review/security-reviewer.md +80 -80
- package/agents/review/simplicity-reviewer.md +140 -140
- package/agents/review/test-coverage-reviewer.md +116 -116
- package/agents/review/typescript-reviewer.md +127 -127
- package/agents/searcher.md +54 -54
- package/agents/simplifier.md +120 -120
- package/agents/tester.md +49 -49
- package/agents/ui/ui-a11y-auditor.md +93 -93
- package/agents/ui/ui-antipattern-detector.md +102 -102
- package/agents/ui/ui-dataviz-advisor.md +69 -69
- package/agents/ui/ui-design-system-gen.md +57 -57
- package/agents/ui/ui-industry-analyzer.md +49 -49
- package/agents/ui/ui-layout-architect.md +65 -65
- package/agents/ui/ui-stack-implementer.md +68 -68
- package/agents/ui/ux-compliance-reviewer.md +81 -81
- package/agents/ui-previewer.md +258 -258
- package/commands/vibe.analyze.md +379 -379
- package/commands/vibe.docs.md +32 -32
- package/commands/vibe.event.md +163 -163
- package/commands/vibe.figma.md +69 -69
- package/commands/vibe.review.md +686 -686
- package/commands/vibe.run.md +2276 -2276
- package/commands/vibe.spec.md +1195 -1195
- package/commands/vibe.spec.review.md +609 -609
- package/commands/vibe.trace.md +259 -259
- package/commands/vibe.utils.md +413 -413
- package/commands/vibe.verify.md +510 -510
- package/dist/cli/collaborator.js +52 -52
- package/dist/cli/commands/config.js +9 -9
- package/dist/cli/commands/evolution.js +12 -12
- package/dist/cli/commands/figma.js +20 -20
- package/dist/cli/commands/info.js +53 -53
- package/dist/cli/commands/init.js +5 -5
- package/dist/cli/commands/remove.js +14 -14
- package/dist/cli/commands/sentinel.js +27 -27
- package/dist/cli/commands/skills.js +5 -5
- package/dist/cli/commands/slack.js +10 -10
- package/dist/cli/commands/stats.js +6 -6
- package/dist/cli/commands/telegram.js +12 -12
- package/dist/cli/detect.js +32 -32
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +52 -57
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/llm/claude-commands.js +16 -16
- package/dist/cli/llm/config.js +18 -18
- package/dist/cli/llm/gemini-commands.js +16 -16
- package/dist/cli/llm/gpt-commands.js +19 -19
- package/dist/cli/llm/help.js +21 -21
- package/dist/cli/postinstall/cursor-agents.js +32 -32
- package/dist/cli/postinstall/cursor-rules.js +83 -83
- package/dist/cli/postinstall/cursor-skills.js +743 -743
- package/dist/cli/postinstall/inline-skills.js +2 -2
- package/dist/cli/postinstall/inline-skills.js.map +1 -1
- package/dist/cli/postinstall/main.js +1 -1
- package/dist/cli/postinstall/main.js.map +1 -1
- package/dist/cli/setup/Provisioner.js +42 -42
- package/dist/infra/lib/DeepInit.js +24 -24
- package/dist/infra/lib/IterationTracker.js +11 -11
- package/dist/infra/lib/PythonParser.js +108 -108
- package/dist/infra/lib/ReviewRace.js +96 -96
- package/dist/infra/lib/SkillFrontmatter.js +28 -28
- package/dist/infra/lib/SkillQualityGate.js +9 -9
- package/dist/infra/lib/SkillRepository.js +159 -159
- package/dist/infra/lib/UltraQA.js +99 -99
- package/dist/infra/lib/autonomy/AuditStore.js +41 -41
- package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
- package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
- package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
- package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
- package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
- package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
- package/dist/infra/lib/embedding/VectorStore.js +22 -22
- package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
- package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
- package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
- package/dist/infra/lib/evolution/InsightStore.js +90 -90
- package/dist/infra/lib/evolution/ParityTester.js +57 -57
- package/dist/infra/lib/evolution/RollbackManager.js +5 -5
- package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
- package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
- package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
- package/dist/infra/lib/evolution/UsageTracker.js +28 -28
- package/dist/infra/lib/gemini/orchestration.js +5 -5
- package/dist/infra/lib/gpt/orchestration.js +4 -4
- package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
- package/dist/infra/lib/memory/MemorySearch.js +57 -57
- package/dist/infra/lib/memory/MemoryStorage.js +181 -181
- package/dist/infra/lib/memory/ObservationStore.js +28 -28
- package/dist/infra/lib/memory/ReflectionStore.js +30 -30
- package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
- package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
- package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
- package/dist/infra/orchestrator/AgentManager.js +12 -12
- package/dist/infra/orchestrator/AgentRegistry.js +65 -65
- package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
- package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
- package/dist/infra/orchestrator/parallelResearch.js +24 -24
- package/dist/tools/convention/analyzeComplexity.test.js +115 -115
- package/dist/tools/convention/validateCodeQuality.test.js +104 -104
- package/dist/tools/memory/createMemoryTimeline.js +10 -10
- package/dist/tools/memory/getMemoryGraph.js +12 -12
- package/dist/tools/memory/getSessionContext.js +9 -9
- package/dist/tools/memory/linkMemories.js +14 -14
- package/dist/tools/memory/listMemories.js +4 -4
- package/dist/tools/memory/recallMemory.js +4 -4
- package/dist/tools/memory/saveMemory.js +4 -4
- package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
- package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
- package/dist/tools/semantic/astGrep.test.js +6 -6
- package/dist/tools/spec/prdParser.test.js +171 -171
- package/dist/tools/spec/specGenerator.js +169 -169
- package/dist/tools/spec/traceabilityMatrix.js +64 -64
- package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
- package/hooks/gemini-hooks.json +73 -73
- package/hooks/hooks.json +170 -170
- package/hooks/scripts/__tests__/keyword-detector.test.js +199 -199
- package/hooks/scripts/__tests__/pre-tool-guard.test.js +286 -286
- package/hooks/scripts/__tests__/sentinel-guard.test.js +210 -210
- package/hooks/scripts/auto-commit.js +97 -65
- package/hooks/scripts/auto-format.js +64 -64
- package/hooks/scripts/auto-test.js +81 -81
- package/hooks/scripts/code-check.js +268 -216
- package/hooks/scripts/codex-detect.js +46 -46
- package/hooks/scripts/codex-review-gate.js +80 -80
- package/hooks/scripts/command-log.js +32 -32
- package/hooks/scripts/context-save.js +353 -353
- package/hooks/scripts/evolution-engine.js +91 -91
- package/hooks/scripts/figma-extract.js +477 -602
- package/hooks/scripts/hud-status.js +321 -321
- package/hooks/scripts/keyword-detector.js +214 -214
- package/hooks/scripts/llm-orchestrate.js +572 -555
- package/hooks/scripts/post-edit.js +32 -32
- package/hooks/scripts/pr-test-gate.js +52 -52
- package/hooks/scripts/pre-tool-guard.js +159 -159
- package/hooks/scripts/prompt-dispatcher.js +185 -185
- package/hooks/scripts/sentinel-guard.js +131 -131
- package/hooks/scripts/session-start.js +177 -106
- package/hooks/scripts/skill-injector.js +83 -83
- package/hooks/scripts/stop-notify.js +209 -209
- package/hooks/scripts/utils.js +243 -186
- package/languages/csharp-unity.md +515 -515
- package/languages/gdscript-godot.md +470 -470
- package/languages/ruby-rails.md +489 -489
- package/languages/typescript-angular.md +433 -433
- package/languages/typescript-astro.md +416 -416
- package/languages/typescript-electron.md +406 -406
- package/languages/typescript-nestjs.md +524 -524
- package/languages/typescript-svelte.md +407 -407
- package/languages/typescript-tauri.md +365 -365
- package/package.json +101 -100
- package/skills/agents-md/SKILL.md +121 -121
- package/skills/agents-md/rubrics/what-to-keep.md +49 -49
- package/skills/agents-md/templates/agents-md.md +36 -36
- package/skills/arch-guard/SKILL.md +181 -181
- package/skills/arch-guard/agents/detector.md +48 -48
- package/skills/arch-guard/agents/reporter.md +48 -48
- package/skills/arch-guard/agents/rule-generator.md +49 -49
- package/skills/arch-guard/agents/violation-checker.md +51 -51
- package/skills/arch-guard/frameworks/clean-architecture.md +108 -108
- package/skills/arch-guard/frameworks/solid.md +102 -102
- package/skills/arch-guard/scripts/check-boundaries.js +90 -90
- package/skills/arch-guard/templates/arch-rules.json +47 -47
- package/skills/arch-guard/templates/violation-report.md +53 -53
- package/skills/brand-assets/SKILL.md +147 -147
- package/skills/brand-assets/rubrics/asset-checklist.md +98 -98
- package/skills/brand-assets/templates/brand-guide.md +161 -161
- package/skills/capability-loop/SKILL.md +168 -168
- package/skills/capability-loop/agents/capability-designer.md +61 -61
- package/skills/capability-loop/agents/failure-analyst.md +55 -55
- package/skills/capability-loop/agents/implementer.md +50 -50
- package/skills/capability-loop/agents/tester.md +53 -53
- package/skills/capability-loop/templates/capability-spec.md +118 -118
- package/skills/capability-loop/templates/failure-analysis.md +118 -118
- package/skills/characterization-test/SKILL.md +207 -207
- package/skills/characterization-test/agents/behavior-capturer.md +50 -50
- package/skills/characterization-test/agents/coverage-checker.md +54 -54
- package/skills/characterization-test/agents/reporter.md +50 -50
- package/skills/characterization-test/agents/test-writer.md +49 -49
- package/skills/characterization-test/rubrics/coverage-criteria.md +53 -53
- package/skills/characterization-test/templates/test-template.ts +101 -101
- package/skills/chub-usage/SKILL.md +139 -115
- package/skills/claude-md-guide/SKILL.md +351 -351
- package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -88
- package/skills/claude-md-guide/templates/claude-md.md +54 -54
- package/skills/commerce-patterns/SKILL.md +64 -64
- package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -48
- package/skills/commerce-patterns/templates/product-schema.md +85 -85
- package/skills/commit-push-pr/SKILL.md +77 -77
- package/skills/commit-push-pr/agents/change-analyzer.md +55 -55
- package/skills/commit-push-pr/agents/message-writer.md +50 -50
- package/skills/commit-push-pr/agents/pr-writer.md +58 -58
- package/skills/commit-push-pr/agents/reviewer.md +52 -52
- package/skills/commit-push-pr/rubrics/commit-message.md +73 -73
- package/skills/commit-push-pr/templates/pr-body.md +63 -63
- package/skills/context7-usage/SKILL.md +106 -106
- package/skills/context7-usage/rubrics/when-to-use.md +50 -50
- package/skills/create-prd/SKILL.md +90 -90
- package/skills/create-prd/agents/edge-case-finder.md +48 -48
- package/skills/create-prd/agents/prioritizer.md +60 -60
- package/skills/create-prd/agents/requirements-writer.md +48 -48
- package/skills/create-prd/agents/researcher.md +55 -55
- package/skills/create-prd/agents/reviewer.md +54 -54
- package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -96
- package/skills/create-prd/frameworks/rice-scoring.md +97 -97
- package/skills/create-prd/orchestrator.md +70 -70
- package/skills/create-prd/rubrics/completeness.md +58 -58
- package/skills/create-prd/templates/prd.md +139 -139
- package/skills/design-audit/SKILL.md +152 -152
- package/skills/design-audit/agents/a11y-auditor.md +43 -43
- package/skills/design-audit/agents/performance-auditor.md +46 -46
- package/skills/design-audit/agents/responsive-auditor.md +46 -46
- package/skills/design-audit/agents/scorer.md +47 -47
- package/skills/design-audit/agents/slop-detector.md +47 -47
- package/skills/design-audit/frameworks/core-web-vitals.md +107 -107
- package/skills/design-audit/frameworks/wcag-checklist.md +64 -64
- package/skills/design-audit/orchestrator.md +64 -64
- package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -83
- package/skills/design-audit/rubrics/scoring.md +63 -63
- package/skills/design-audit/templates/report.md +88 -88
- package/skills/design-critique/SKILL.md +139 -139
- package/skills/design-critique/rubrics/ux-heuristics.md +143 -143
- package/skills/design-critique/templates/critique-report.md +86 -86
- package/skills/design-distill/SKILL.md +130 -130
- package/skills/design-distill/templates/design-system.md +132 -132
- package/skills/design-normalize/SKILL.md +133 -133
- package/skills/design-normalize/rubrics/token-naming.md +117 -117
- package/skills/design-normalize/templates/token-audit.md +89 -89
- package/skills/design-polish/SKILL.md +131 -131
- package/skills/design-polish/rubrics/polish-checklist.md +68 -68
- package/skills/design-polish/templates/polish-report.md +64 -64
- package/skills/design-teach/SKILL.md +182 -182
- package/skills/design-teach/rubrics/brand-personality.md +73 -73
- package/skills/design-teach/templates/design-context.json +36 -36
- package/skills/e2e-commerce/SKILL.md +62 -62
- package/skills/e2e-commerce/templates/test-scenarios.md +170 -170
- package/skills/event-comms/SKILL.md +162 -162
- package/skills/event-comms/templates/email-invite.md +99 -99
- package/skills/event-comms/templates/sns-post.md +133 -133
- package/skills/event-ops/SKILL.md +198 -198
- package/skills/event-ops/rubrics/contingency.md +85 -85
- package/skills/event-ops/templates/d-day-checklist.md +65 -65
- package/skills/event-planning/SKILL.md +132 -132
- package/skills/event-planning/rubrics/timeline.md +70 -70
- package/skills/event-planning/templates/event-plan.md +91 -91
- package/skills/exec-plan/SKILL.md +149 -149
- package/skills/exec-plan/agents/decomposer.md +47 -47
- package/skills/exec-plan/agents/dependency-mapper.md +44 -44
- package/skills/exec-plan/agents/estimator.md +43 -43
- package/skills/exec-plan/agents/validator.md +55 -55
- package/skills/exec-plan/orchestrator.md +70 -70
- package/skills/exec-plan/rubrics/complexity-scoring.md +75 -75
- package/skills/exec-plan/templates/plan.md +147 -147
- package/skills/git-worktree/SKILL.md +73 -73
- package/skills/git-worktree/rubrics/when-to-use.md +55 -55
- package/skills/handoff/SKILL.md +110 -110
- package/skills/handoff/agents/context-summarizer.md +51 -51
- package/skills/handoff/agents/document-writer.md +63 -63
- package/skills/handoff/agents/state-collector.md +53 -53
- package/skills/handoff/agents/verifier.md +48 -48
- package/skills/handoff/rubrics/completeness.md +62 -62
- package/skills/handoff/templates/handoff.md +107 -107
- package/skills/parallel-research/SKILL.md +89 -89
- package/skills/parallel-research/agents/best-practices.md +43 -43
- package/skills/parallel-research/agents/codebase-patterns.md +46 -46
- package/skills/parallel-research/agents/framework-docs.md +45 -45
- package/skills/parallel-research/agents/security-advisory.md +46 -46
- package/skills/parallel-research/agents/synthesizer.md +52 -52
- package/skills/parallel-research/experts/best-practices.md +50 -50
- package/skills/parallel-research/experts/codebase-patterns.md +70 -70
- package/skills/parallel-research/experts/framework-docs.md +65 -65
- package/skills/parallel-research/experts/security-advisory.md +69 -69
- package/skills/parallel-research/orchestrator.md +65 -65
- package/skills/parallel-research/templates/synthesis.md +101 -101
- package/skills/prioritization-frameworks/SKILL.md +87 -87
- package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -79
- package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -69
- package/skills/priority-todos/SKILL.md +64 -64
- package/skills/priority-todos/rubrics/prioritization.md +70 -70
- package/skills/priority-todos/templates/todo-board.md +59 -59
- package/skills/seo-checklist/SKILL.md +58 -58
- package/skills/seo-checklist/frameworks/structured-data.md +153 -153
- package/skills/seo-checklist/rubrics/content-seo.md +42 -42
- package/skills/seo-checklist/rubrics/technical-seo.md +48 -48
- package/skills/techdebt/SKILL.md +124 -124
- package/skills/techdebt/agents/analyzer.md +50 -50
- package/skills/techdebt/agents/fixer.md +41 -41
- package/skills/techdebt/agents/reviewer.md +47 -47
- package/skills/techdebt/agents/scanner.md +44 -44
- package/skills/techdebt/orchestrator.md +70 -70
- package/skills/techdebt/rubrics/severity.md +51 -51
- package/skills/techdebt/scripts/scan.js +90 -90
- package/skills/techdebt/templates/report.md +86 -86
- package/skills/tool-fallback/SKILL.md +104 -104
- package/skills/tool-fallback/rubrics/fallback-chain.md +58 -58
- package/skills/typescript-advanced-types/SKILL.md +67 -67
- package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -109
- package/skills/ui-ux-pro-max/SKILL.md +236 -236
- package/skills/ui-ux-pro-max/reference/color-and-contrast.md +517 -517
- package/skills/ui-ux-pro-max/reference/interaction-design.md +544 -544
- package/skills/ui-ux-pro-max/reference/motion-design.md +591 -591
- package/skills/ui-ux-pro-max/reference/responsive-design.md +463 -463
- package/skills/ui-ux-pro-max/reference/spatial-design.md +390 -390
- package/skills/ui-ux-pro-max/reference/typography.md +455 -455
- package/skills/ui-ux-pro-max/reference/ux-writing.md +469 -469
- package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -83
- package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -99
- package/skills/user-personas/SKILL.md +75 -75
- package/skills/user-personas/rubrics/research-methods.md +56 -56
- package/skills/user-personas/templates/persona.md +89 -89
- package/skills/vercel-react-best-practices/SKILL.md +60 -60
- package/skills/vercel-react-best-practices/rubrics/performance.md +82 -82
- package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -86
- package/skills/vibe.docs/SKILL.md +171 -171
- package/skills/vibe.docs/templates/architecture.md +80 -80
- package/skills/vibe.docs/templates/readme.md +84 -84
- package/skills/vibe.docs/templates/release-notes.md +74 -74
- package/skills/vibe.figma/SKILL.md +982 -209
- package/skills/vibe.figma/rubrics/extraction-checklist.md +51 -51
- package/skills/vibe.figma/templates/component-index.md +126 -126
- package/skills/vibe.figma/templates/figma-handoff.md +100 -100
- package/skills/vibe.figma/templates/remapped-tree.md +277 -277
- package/skills/vibe.figma.convert/SKILL.md +511 -630
- package/skills/vibe.figma.convert/rubrics/conversion-rules.md +113 -129
- package/skills/vibe.figma.convert/templates/component.md +140 -140
- package/skills/vibe.figma.extract/SKILL.md +300 -349
- package/skills/vibe.figma.extract/rubrics/image-rules.md +137 -145
- package/skills/video-production/SKILL.md +52 -52
- package/skills/video-production/rubrics/quality-checklist.md +58 -58
- package/skills/video-production/templates/production-plan.md +104 -104
- package/vibe/config.json +29 -29
- package/vibe/constitution.md +227 -227
- package/vibe/rules/principles/communication-guide.md +98 -98
- package/vibe/rules/principles/development-philosophy.md +52 -52
- package/vibe/rules/principles/quick-start.md +102 -102
- package/vibe/rules/quality/bdd-contract-testing.md +393 -393
- package/vibe/rules/quality/checklist.md +276 -276
- package/vibe/rules/quality/performance.md +236 -236
- package/vibe/rules/quality/testing-strategy.md +440 -440
- package/vibe/rules/standards/anti-patterns.md +541 -541
- package/vibe/rules/standards/code-structure.md +291 -291
- package/vibe/rules/standards/complexity-metrics.md +313 -313
- package/vibe/rules/standards/git-workflow.md +237 -237
- package/vibe/rules/standards/naming-conventions.md +198 -198
- package/vibe/rules/standards/security.md +305 -305
- package/vibe/rules/writing/document-style.md +74 -74
- package/vibe/setup.sh +31 -31
- package/vibe/templates/constitution-template.md +252 -252
- package/vibe/templates/contract-backend-template.md +526 -526
- package/vibe/templates/contract-frontend-template.md +599 -599
- package/vibe/templates/feature-template.md +96 -96
- package/vibe/templates/spec-template.md +221 -221
- package/vibe/ui-ux-data/charts.csv +26 -26
- package/vibe/ui-ux-data/colors.csv +97 -97
- package/vibe/ui-ux-data/icons.csv +101 -101
- package/vibe/ui-ux-data/landing.csv +31 -31
- package/vibe/ui-ux-data/products.csv +96 -96
- package/vibe/ui-ux-data/react-performance.csv +45 -45
- package/vibe/ui-ux-data/stacks/astro.csv +54 -54
- package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
- package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
- package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
- package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
- package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
- package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
- package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
- package/vibe/ui-ux-data/stacks/react.csv +54 -54
- package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
- package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
- package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
- package/vibe/ui-ux-data/stacks/vue.csv +50 -50
- package/vibe/ui-ux-data/styles.csv +68 -68
- package/vibe/ui-ux-data/typography.csv +57 -57
- package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
- package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
- package/vibe/ui-ux-data/version.json +31 -31
- package/vibe/ui-ux-data/web-interface.csv +31 -31
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: techdebt-orchestrator
|
|
3
|
-
type: orchestrator
|
|
4
|
-
agents: [scanner, analyzer, fixer, reviewer]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Techdebt Orchestrator
|
|
8
|
-
|
|
9
|
-
## Workflow
|
|
10
|
-
|
|
11
|
-
### Phase 1: Scan
|
|
12
|
-
- **Agent**: scanner
|
|
13
|
-
- **Input**: Changed file paths (or root dir + glob filter)
|
|
14
|
-
- **Output**: Raw findings list `[{category, file, line, snippet}]`
|
|
15
|
-
- **Parallel**: yes — each file scanned independently
|
|
16
|
-
|
|
17
|
-
### Phase 2: Analyze
|
|
18
|
-
- **Agent**: analyzer
|
|
19
|
-
- **Input**: Raw findings list from Phase 1
|
|
20
|
-
- **Output**: Scored findings with severity (P0–P3) and auto-fix eligibility flag
|
|
21
|
-
- **Parallel**: no — requires full findings set for deduplication
|
|
22
|
-
|
|
23
|
-
### Phase 3: Fix
|
|
24
|
-
- **Agent**: fixer
|
|
25
|
-
- **Input**: Findings flagged `auto-fixable: true` from Phase 2
|
|
26
|
-
- **Output**: Patch set (file edits) for each auto-fixable item
|
|
27
|
-
- **Parallel**: yes — patches per file are independent
|
|
28
|
-
|
|
29
|
-
### Phase 4: Review
|
|
30
|
-
- **Agent**: reviewer
|
|
31
|
-
- **Input**: Patch set from Phase 3
|
|
32
|
-
- **Output**: Approved patches + rejected patches with rejection reason
|
|
33
|
-
- **Parallel**: no — needs holistic view to catch patch conflicts
|
|
34
|
-
|
|
35
|
-
### Phase 5: Apply
|
|
36
|
-
- **Agent**: orchestrator (self)
|
|
37
|
-
- **Input**: Approved patches from Phase 4 + manual-review items from Phase 2
|
|
38
|
-
- **Output**: Applied fixes + final report with manual-review list
|
|
39
|
-
- **Parallel**: no — sequential file writes to avoid conflicts
|
|
40
|
-
|
|
41
|
-
## DAG (Dependency Graph)
|
|
42
|
-
|
|
43
|
-
```mermaid
|
|
44
|
-
graph TD
|
|
45
|
-
A[Phase 1: Scanner\nparallel per file] --> B[Phase 2: Analyzer]
|
|
46
|
-
B --> C[Phase 3: Fixer\nparallel per file]
|
|
47
|
-
B --> E[Manual Review Items]
|
|
48
|
-
C --> D[Phase 4: Reviewer]
|
|
49
|
-
D --> F[Phase 5: Apply]
|
|
50
|
-
E --> F
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## Error Handling
|
|
54
|
-
|
|
55
|
-
| Phase | Failure Mode | Strategy |
|
|
56
|
-
|-------|-------------|----------|
|
|
57
|
-
| Phase 1 | File unreadable / binary file | Skip file, log warning, continue |
|
|
58
|
-
| Phase 1 | Glob returns 0 files | Escalate — prompt user to verify path |
|
|
59
|
-
| Phase 2 | Analyzer returns 0 findings | Skip phases 3–4, output clean report |
|
|
60
|
-
| Phase 3 | Patch generation fails for a file | Skip that file, flag for manual review |
|
|
61
|
-
| Phase 4 | Reviewer rejects all patches | Fallback to manual-review-only report |
|
|
62
|
-
| Phase 5 | Write conflict detected | Abort apply, show diff for manual resolution |
|
|
63
|
-
|
|
64
|
-
## Scalability Modes
|
|
65
|
-
|
|
66
|
-
| Mode | When | Agents Used |
|
|
67
|
-
|------|------|-------------|
|
|
68
|
-
| Full | Normal operation | scanner + analyzer + fixer + reviewer |
|
|
69
|
-
| Reduced | Time pressure / large repo | scanner + analyzer only (no auto-fix) |
|
|
70
|
-
| Single | Quick scan / pre-commit check | scanner only — raw findings, no scoring |
|
|
1
|
+
---
|
|
2
|
+
name: techdebt-orchestrator
|
|
3
|
+
type: orchestrator
|
|
4
|
+
agents: [scanner, analyzer, fixer, reviewer]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Techdebt Orchestrator
|
|
8
|
+
|
|
9
|
+
## Workflow
|
|
10
|
+
|
|
11
|
+
### Phase 1: Scan
|
|
12
|
+
- **Agent**: scanner
|
|
13
|
+
- **Input**: Changed file paths (or root dir + glob filter)
|
|
14
|
+
- **Output**: Raw findings list `[{category, file, line, snippet}]`
|
|
15
|
+
- **Parallel**: yes — each file scanned independently
|
|
16
|
+
|
|
17
|
+
### Phase 2: Analyze
|
|
18
|
+
- **Agent**: analyzer
|
|
19
|
+
- **Input**: Raw findings list from Phase 1
|
|
20
|
+
- **Output**: Scored findings with severity (P0–P3) and auto-fix eligibility flag
|
|
21
|
+
- **Parallel**: no — requires full findings set for deduplication
|
|
22
|
+
|
|
23
|
+
### Phase 3: Fix
|
|
24
|
+
- **Agent**: fixer
|
|
25
|
+
- **Input**: Findings flagged `auto-fixable: true` from Phase 2
|
|
26
|
+
- **Output**: Patch set (file edits) for each auto-fixable item
|
|
27
|
+
- **Parallel**: yes — patches per file are independent
|
|
28
|
+
|
|
29
|
+
### Phase 4: Review
|
|
30
|
+
- **Agent**: reviewer
|
|
31
|
+
- **Input**: Patch set from Phase 3
|
|
32
|
+
- **Output**: Approved patches + rejected patches with rejection reason
|
|
33
|
+
- **Parallel**: no — needs holistic view to catch patch conflicts
|
|
34
|
+
|
|
35
|
+
### Phase 5: Apply
|
|
36
|
+
- **Agent**: orchestrator (self)
|
|
37
|
+
- **Input**: Approved patches from Phase 4 + manual-review items from Phase 2
|
|
38
|
+
- **Output**: Applied fixes + final report with manual-review list
|
|
39
|
+
- **Parallel**: no — sequential file writes to avoid conflicts
|
|
40
|
+
|
|
41
|
+
## DAG (Dependency Graph)
|
|
42
|
+
|
|
43
|
+
```mermaid
|
|
44
|
+
graph TD
|
|
45
|
+
A[Phase 1: Scanner\nparallel per file] --> B[Phase 2: Analyzer]
|
|
46
|
+
B --> C[Phase 3: Fixer\nparallel per file]
|
|
47
|
+
B --> E[Manual Review Items]
|
|
48
|
+
C --> D[Phase 4: Reviewer]
|
|
49
|
+
D --> F[Phase 5: Apply]
|
|
50
|
+
E --> F
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Error Handling
|
|
54
|
+
|
|
55
|
+
| Phase | Failure Mode | Strategy |
|
|
56
|
+
|-------|-------------|----------|
|
|
57
|
+
| Phase 1 | File unreadable / binary file | Skip file, log warning, continue |
|
|
58
|
+
| Phase 1 | Glob returns 0 files | Escalate — prompt user to verify path |
|
|
59
|
+
| Phase 2 | Analyzer returns 0 findings | Skip phases 3–4, output clean report |
|
|
60
|
+
| Phase 3 | Patch generation fails for a file | Skip that file, flag for manual review |
|
|
61
|
+
| Phase 4 | Reviewer rejects all patches | Fallback to manual-review-only report |
|
|
62
|
+
| Phase 5 | Write conflict detected | Abort apply, show diff for manual resolution |
|
|
63
|
+
|
|
64
|
+
## Scalability Modes
|
|
65
|
+
|
|
66
|
+
| Mode | When | Agents Used |
|
|
67
|
+
|------|------|-------------|
|
|
68
|
+
| Full | Normal operation | scanner + analyzer + fixer + reviewer |
|
|
69
|
+
| Reduced | Time pressure / large repo | scanner + analyzer only (no auto-fix) |
|
|
70
|
+
| Single | Quick scan / pre-commit check | scanner only — raw findings, no scoring |
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
# Techdebt Severity Rubric
|
|
2
|
-
|
|
3
|
-
## P1 — Blocks Merge
|
|
4
|
-
|
|
5
|
-
Issues that introduce bugs, security holes, or break type safety. Must fix before merging.
|
|
6
|
-
|
|
7
|
-
| Pattern | Why P1 |
|
|
8
|
-
|---------|--------|
|
|
9
|
-
| `: any` / `as any` | Breaks TypeScript safety guarantee |
|
|
10
|
-
| `@ts-ignore` | Hides real type errors |
|
|
11
|
-
| `debugger` statement | Halts execution in production |
|
|
12
|
-
| Hardcoded secrets / credentials | Security risk |
|
|
13
|
-
| Circular imports causing runtime errors | Breaks module loading |
|
|
14
|
-
|
|
15
|
-
**Rule**: P1 count must be 0 before merge.
|
|
16
|
-
|
|
17
|
-
## P2 — Fix Before PR
|
|
18
|
-
|
|
19
|
-
Issues that reduce maintainability, performance, or correctness. Should be resolved before PR review.
|
|
20
|
-
|
|
21
|
-
| Pattern | Why P2 |
|
|
22
|
-
|---------|--------|
|
|
23
|
-
| `console.log` / `console.warn` | Debug noise in production logs |
|
|
24
|
-
| Functions > 50 lines | Violates complexity limit; hard to test |
|
|
25
|
-
| Nesting depth > 4 | Cognitive overload; obscures logic |
|
|
26
|
-
| Unused imports | Bundle bloat; misleading code |
|
|
27
|
-
| TODO/FIXME without ticket | Ambiguous ownership |
|
|
28
|
-
| Duplicate logic (2+ files) | Maintenance hazard |
|
|
29
|
-
|
|
30
|
-
**Rule**: P2 items are warnings. Resolve or create a tracked P3 ticket before merge.
|
|
31
|
-
|
|
32
|
-
## P3 — Backlog
|
|
33
|
-
|
|
34
|
-
Issues that are cosmetic or nice-to-have. Address during scheduled cleanup sessions.
|
|
35
|
-
|
|
36
|
-
| Pattern | Why P3 |
|
|
37
|
-
|---------|--------|
|
|
38
|
-
| Magic numbers (non-critical) | Readability |
|
|
39
|
-
| Commented-out code | Noise |
|
|
40
|
-
| Inconsistent naming | Style drift |
|
|
41
|
-
| Missing JSDoc on internal helpers | Documentation gap |
|
|
42
|
-
| Slightly long files (200–499 lines) | Future extraction candidate |
|
|
43
|
-
|
|
44
|
-
**Rule**: P3 items never block. Review weekly; archive when resolved.
|
|
45
|
-
|
|
46
|
-
## Convergence Rule
|
|
47
|
-
|
|
48
|
-
- Round 1: address all P1 + P2
|
|
49
|
-
- Round 2: address remaining P1 + P2 only
|
|
50
|
-
- Round 3+: P1 only
|
|
51
|
-
- Same findings as previous round → stop immediately
|
|
1
|
+
# Techdebt Severity Rubric
|
|
2
|
+
|
|
3
|
+
## P1 — Blocks Merge
|
|
4
|
+
|
|
5
|
+
Issues that introduce bugs, security holes, or break type safety. Must fix before merging.
|
|
6
|
+
|
|
7
|
+
| Pattern | Why P1 |
|
|
8
|
+
|---------|--------|
|
|
9
|
+
| `: any` / `as any` | Breaks TypeScript safety guarantee |
|
|
10
|
+
| `@ts-ignore` | Hides real type errors |
|
|
11
|
+
| `debugger` statement | Halts execution in production |
|
|
12
|
+
| Hardcoded secrets / credentials | Security risk |
|
|
13
|
+
| Circular imports causing runtime errors | Breaks module loading |
|
|
14
|
+
|
|
15
|
+
**Rule**: P1 count must be 0 before merge.
|
|
16
|
+
|
|
17
|
+
## P2 — Fix Before PR
|
|
18
|
+
|
|
19
|
+
Issues that reduce maintainability, performance, or correctness. Should be resolved before PR review.
|
|
20
|
+
|
|
21
|
+
| Pattern | Why P2 |
|
|
22
|
+
|---------|--------|
|
|
23
|
+
| `console.log` / `console.warn` | Debug noise in production logs |
|
|
24
|
+
| Functions > 50 lines | Violates complexity limit; hard to test |
|
|
25
|
+
| Nesting depth > 4 | Cognitive overload; obscures logic |
|
|
26
|
+
| Unused imports | Bundle bloat; misleading code |
|
|
27
|
+
| TODO/FIXME without ticket | Ambiguous ownership |
|
|
28
|
+
| Duplicate logic (2+ files) | Maintenance hazard |
|
|
29
|
+
|
|
30
|
+
**Rule**: P2 items are warnings. Resolve or create a tracked P3 ticket before merge.
|
|
31
|
+
|
|
32
|
+
## P3 — Backlog
|
|
33
|
+
|
|
34
|
+
Issues that are cosmetic or nice-to-have. Address during scheduled cleanup sessions.
|
|
35
|
+
|
|
36
|
+
| Pattern | Why P3 |
|
|
37
|
+
|---------|--------|
|
|
38
|
+
| Magic numbers (non-critical) | Readability |
|
|
39
|
+
| Commented-out code | Noise |
|
|
40
|
+
| Inconsistent naming | Style drift |
|
|
41
|
+
| Missing JSDoc on internal helpers | Documentation gap |
|
|
42
|
+
| Slightly long files (200–499 lines) | Future extraction candidate |
|
|
43
|
+
|
|
44
|
+
**Rule**: P3 items never block. Review weekly; archive when resolved.
|
|
45
|
+
|
|
46
|
+
## Convergence Rule
|
|
47
|
+
|
|
48
|
+
- Round 1: address all P1 + P2
|
|
49
|
+
- Round 2: address remaining P1 + P2 only
|
|
50
|
+
- Round 3+: P1 only
|
|
51
|
+
- Same findings as previous round → stop immediately
|
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* techdebt/scripts/scan.js
|
|
4
|
-
* Scan a directory for technical debt patterns.
|
|
5
|
-
* Usage: node scan.js <directory>
|
|
6
|
-
* Output: JSON array of findings to stdout.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import fs from 'fs';
|
|
10
|
-
import path from 'path';
|
|
11
|
-
|
|
12
|
-
const TARGET_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx']);
|
|
13
|
-
|
|
14
|
-
/** @returns {string[]} */
|
|
15
|
-
function collectFiles(dir) {
|
|
16
|
-
const results = [];
|
|
17
|
-
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
18
|
-
if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist') continue;
|
|
19
|
-
const full = path.join(dir, entry.name);
|
|
20
|
-
if (entry.isDirectory()) results.push(...collectFiles(full));
|
|
21
|
-
else if (TARGET_EXTENSIONS.has(path.extname(entry.name))) results.push(full);
|
|
22
|
-
}
|
|
23
|
-
return results;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/** @param {string} file @returns {import('./scan.js').Finding[]} */
|
|
27
|
-
function scanFile(file) {
|
|
28
|
-
const lines = fs.readFileSync(file, 'utf-8').split('\n');
|
|
29
|
-
const findings = [];
|
|
30
|
-
let functionLineStart = -1;
|
|
31
|
-
let braceDepth = 0;
|
|
32
|
-
let functionLineCount = 0;
|
|
33
|
-
let maxNesting = 0;
|
|
34
|
-
let currentNesting = 0;
|
|
35
|
-
|
|
36
|
-
const push = (line, type, severity, message) =>
|
|
37
|
-
findings.push({ file, line: line + 1, type, severity, message });
|
|
38
|
-
|
|
39
|
-
for (let i = 0; i < lines.length; i++) {
|
|
40
|
-
const raw = lines[i];
|
|
41
|
-
const trimmed = raw.trim();
|
|
42
|
-
|
|
43
|
-
if (/:\s*any\b|as\s+any\b/.test(trimmed)) push(i, 'any-type', 'P1', `'any' type usage detected`);
|
|
44
|
-
if (/console\.(log|warn|error|debug)\s*\(/.test(trimmed)) push(i, 'console-log', 'P2', `console statement found`);
|
|
45
|
-
if (/^import\s+/.test(trimmed)) {
|
|
46
|
-
const match = trimmed.match(/^import\s+\{([^}]+)\}/);
|
|
47
|
-
if (match) {
|
|
48
|
-
const names = match[1].split(',').map(n => n.trim().split(/\s+as\s+/).pop());
|
|
49
|
-
for (const name of names) {
|
|
50
|
-
const usedElsewhere = lines.slice(i + 1).some(l => new RegExp(`\\b${name}\\b`).test(l));
|
|
51
|
-
if (!usedElsewhere) push(i, 'unused-import', 'P2', `Possibly unused import: ${name}`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
const magicNumber = trimmed.match(/(?<![A-Za-z_$'"`])\b([2-9]\d{2,}|\d{4,})\b(?![A-Za-z_$'"`])/);
|
|
56
|
-
if (magicNumber && !/^\s*(\/\/|\/\*)/.test(raw)) push(i, 'magic-number', 'P3', `Magic number: ${magicNumber[1]}`);
|
|
57
|
-
|
|
58
|
-
const opens = (raw.match(/\{/g) || []).length;
|
|
59
|
-
const closes = (raw.match(/\}/g) || []).length;
|
|
60
|
-
if (/\bfunction\b|\=\>/.test(raw) && opens > closes) {
|
|
61
|
-
functionLineStart = i;
|
|
62
|
-
functionLineCount = 0;
|
|
63
|
-
braceDepth = opens - closes;
|
|
64
|
-
} else if (functionLineStart >= 0) {
|
|
65
|
-
braceDepth += opens - closes;
|
|
66
|
-
functionLineCount++;
|
|
67
|
-
if (braceDepth <= 0) {
|
|
68
|
-
if (functionLineCount > 50) push(functionLineStart, 'long-function', 'P2', `Function is ${functionLineCount} lines (limit: 50)`);
|
|
69
|
-
functionLineStart = -1;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const indent = raw.match(/^(\s*)/)[1].length;
|
|
74
|
-
currentNesting = Math.floor(indent / 2);
|
|
75
|
-
if (currentNesting > maxNesting) maxNesting = currentNesting;
|
|
76
|
-
if (currentNesting > 4) push(i, 'deep-nesting', 'P2', `Nesting depth ${currentNesting} exceeds limit of 4`);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return findings;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const dir = process.argv[2] || process.cwd();
|
|
83
|
-
if (!fs.existsSync(dir)) {
|
|
84
|
-
process.stderr.write(`Directory not found: ${dir}\n`);
|
|
85
|
-
process.exit(1);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
const files = collectFiles(path.resolve(dir));
|
|
89
|
-
const findings = files.flatMap(scanFile);
|
|
90
|
-
process.stdout.write(JSON.stringify(findings, null, 2) + '\n');
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* techdebt/scripts/scan.js
|
|
4
|
+
* Scan a directory for technical debt patterns.
|
|
5
|
+
* Usage: node scan.js <directory>
|
|
6
|
+
* Output: JSON array of findings to stdout.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import fs from 'fs';
|
|
10
|
+
import path from 'path';
|
|
11
|
+
|
|
12
|
+
const TARGET_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx']);
|
|
13
|
+
|
|
14
|
+
/** @returns {string[]} */
|
|
15
|
+
function collectFiles(dir) {
|
|
16
|
+
const results = [];
|
|
17
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
18
|
+
if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist') continue;
|
|
19
|
+
const full = path.join(dir, entry.name);
|
|
20
|
+
if (entry.isDirectory()) results.push(...collectFiles(full));
|
|
21
|
+
else if (TARGET_EXTENSIONS.has(path.extname(entry.name))) results.push(full);
|
|
22
|
+
}
|
|
23
|
+
return results;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** @param {string} file @returns {import('./scan.js').Finding[]} */
|
|
27
|
+
function scanFile(file) {
|
|
28
|
+
const lines = fs.readFileSync(file, 'utf-8').split('\n');
|
|
29
|
+
const findings = [];
|
|
30
|
+
let functionLineStart = -1;
|
|
31
|
+
let braceDepth = 0;
|
|
32
|
+
let functionLineCount = 0;
|
|
33
|
+
let maxNesting = 0;
|
|
34
|
+
let currentNesting = 0;
|
|
35
|
+
|
|
36
|
+
const push = (line, type, severity, message) =>
|
|
37
|
+
findings.push({ file, line: line + 1, type, severity, message });
|
|
38
|
+
|
|
39
|
+
for (let i = 0; i < lines.length; i++) {
|
|
40
|
+
const raw = lines[i];
|
|
41
|
+
const trimmed = raw.trim();
|
|
42
|
+
|
|
43
|
+
if (/:\s*any\b|as\s+any\b/.test(trimmed)) push(i, 'any-type', 'P1', `'any' type usage detected`);
|
|
44
|
+
if (/console\.(log|warn|error|debug)\s*\(/.test(trimmed)) push(i, 'console-log', 'P2', `console statement found`);
|
|
45
|
+
if (/^import\s+/.test(trimmed)) {
|
|
46
|
+
const match = trimmed.match(/^import\s+\{([^}]+)\}/);
|
|
47
|
+
if (match) {
|
|
48
|
+
const names = match[1].split(',').map(n => n.trim().split(/\s+as\s+/).pop());
|
|
49
|
+
for (const name of names) {
|
|
50
|
+
const usedElsewhere = lines.slice(i + 1).some(l => new RegExp(`\\b${name}\\b`).test(l));
|
|
51
|
+
if (!usedElsewhere) push(i, 'unused-import', 'P2', `Possibly unused import: ${name}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const magicNumber = trimmed.match(/(?<![A-Za-z_$'"`])\b([2-9]\d{2,}|\d{4,})\b(?![A-Za-z_$'"`])/);
|
|
56
|
+
if (magicNumber && !/^\s*(\/\/|\/\*)/.test(raw)) push(i, 'magic-number', 'P3', `Magic number: ${magicNumber[1]}`);
|
|
57
|
+
|
|
58
|
+
const opens = (raw.match(/\{/g) || []).length;
|
|
59
|
+
const closes = (raw.match(/\}/g) || []).length;
|
|
60
|
+
if (/\bfunction\b|\=\>/.test(raw) && opens > closes) {
|
|
61
|
+
functionLineStart = i;
|
|
62
|
+
functionLineCount = 0;
|
|
63
|
+
braceDepth = opens - closes;
|
|
64
|
+
} else if (functionLineStart >= 0) {
|
|
65
|
+
braceDepth += opens - closes;
|
|
66
|
+
functionLineCount++;
|
|
67
|
+
if (braceDepth <= 0) {
|
|
68
|
+
if (functionLineCount > 50) push(functionLineStart, 'long-function', 'P2', `Function is ${functionLineCount} lines (limit: 50)`);
|
|
69
|
+
functionLineStart = -1;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const indent = raw.match(/^(\s*)/)[1].length;
|
|
74
|
+
currentNesting = Math.floor(indent / 2);
|
|
75
|
+
if (currentNesting > maxNesting) maxNesting = currentNesting;
|
|
76
|
+
if (currentNesting > 4) push(i, 'deep-nesting', 'P2', `Nesting depth ${currentNesting} exceeds limit of 4`);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return findings;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const dir = process.argv[2] || process.cwd();
|
|
83
|
+
if (!fs.existsSync(dir)) {
|
|
84
|
+
process.stderr.write(`Directory not found: ${dir}\n`);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const files = collectFiles(path.resolve(dir));
|
|
89
|
+
const findings = files.flatMap(scanFile);
|
|
90
|
+
process.stdout.write(JSON.stringify(findings, null, 2) + '\n');
|
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
# Technical Debt Report
|
|
2
|
-
|
|
3
|
-
**Project**: {{PROJECT_NAME}}
|
|
4
|
-
**Date**: {{DATE}}
|
|
5
|
-
**Scanned Directory**: {{SCAN_DIR}}
|
|
6
|
-
**Files Scanned**: {{FILE_COUNT}}
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Summary
|
|
11
|
-
|
|
12
|
-
| Priority | Count | Status |
|
|
13
|
-
|----------|-------|--------|
|
|
14
|
-
| P1 — Blocks Merge | {{P1_COUNT}} | {{P1_STATUS}} |
|
|
15
|
-
| P2 — Fix Before PR | {{P2_COUNT}} | {{P2_STATUS}} |
|
|
16
|
-
| P3 — Backlog | {{P3_COUNT}} | {{P3_STATUS}} |
|
|
17
|
-
| **Total** | **{{TOTAL_COUNT}}** | |
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## P1 — Blocks Merge ({{P1_COUNT}} items)
|
|
22
|
-
|
|
23
|
-
{{P1_ITEMS}}
|
|
24
|
-
|
|
25
|
-
<!-- Example entry:
|
|
26
|
-
- `src/services/auth.ts:42` — `any` type usage: parameter `payload` typed as `any`
|
|
27
|
-
-->
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## P2 — Fix Before PR ({{P2_COUNT}} items)
|
|
32
|
-
|
|
33
|
-
### Console Statements ({{CONSOLE_COUNT}})
|
|
34
|
-
|
|
35
|
-
{{CONSOLE_ITEMS}}
|
|
36
|
-
|
|
37
|
-
### Unused Imports ({{UNUSED_IMPORT_COUNT}})
|
|
38
|
-
|
|
39
|
-
{{UNUSED_IMPORT_ITEMS}}
|
|
40
|
-
|
|
41
|
-
### Long Functions ({{LONG_FUNCTION_COUNT}})
|
|
42
|
-
|
|
43
|
-
{{LONG_FUNCTION_ITEMS}}
|
|
44
|
-
|
|
45
|
-
### Deep Nesting ({{DEEP_NESTING_COUNT}})
|
|
46
|
-
|
|
47
|
-
{{DEEP_NESTING_ITEMS}}
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## P3 — Backlog ({{P3_COUNT}} items)
|
|
52
|
-
|
|
53
|
-
### Magic Numbers ({{MAGIC_NUMBER_COUNT}})
|
|
54
|
-
|
|
55
|
-
{{MAGIC_NUMBER_ITEMS}}
|
|
56
|
-
|
|
57
|
-
### Commented-Out Code ({{COMMENTED_CODE_COUNT}})
|
|
58
|
-
|
|
59
|
-
{{COMMENTED_CODE_ITEMS}}
|
|
60
|
-
|
|
61
|
-
---
|
|
62
|
-
|
|
63
|
-
## Auto-fixable Items
|
|
64
|
-
|
|
65
|
-
The following can be removed safely without review:
|
|
66
|
-
|
|
67
|
-
{{AUTOFIXABLE_LIST}}
|
|
68
|
-
|
|
69
|
-
> Run with user confirmation before applying auto-fixes.
|
|
70
|
-
|
|
71
|
-
---
|
|
72
|
-
|
|
73
|
-
## Requires Manual Review
|
|
74
|
-
|
|
75
|
-
The following require human judgment:
|
|
76
|
-
|
|
77
|
-
{{MANUAL_REVIEW_LIST}}
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
## Next Steps
|
|
82
|
-
|
|
83
|
-
1. Fix all P1 items immediately
|
|
84
|
-
2. Address P2 items before opening PR
|
|
85
|
-
3. Create tracked tickets for P3 items
|
|
86
|
-
4. Re-run scan after fixes: `node skills/techdebt/scripts/scan.js {{SCAN_DIR}}`
|
|
1
|
+
# Technical Debt Report
|
|
2
|
+
|
|
3
|
+
**Project**: {{PROJECT_NAME}}
|
|
4
|
+
**Date**: {{DATE}}
|
|
5
|
+
**Scanned Directory**: {{SCAN_DIR}}
|
|
6
|
+
**Files Scanned**: {{FILE_COUNT}}
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Summary
|
|
11
|
+
|
|
12
|
+
| Priority | Count | Status |
|
|
13
|
+
|----------|-------|--------|
|
|
14
|
+
| P1 — Blocks Merge | {{P1_COUNT}} | {{P1_STATUS}} |
|
|
15
|
+
| P2 — Fix Before PR | {{P2_COUNT}} | {{P2_STATUS}} |
|
|
16
|
+
| P3 — Backlog | {{P3_COUNT}} | {{P3_STATUS}} |
|
|
17
|
+
| **Total** | **{{TOTAL_COUNT}}** | |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## P1 — Blocks Merge ({{P1_COUNT}} items)
|
|
22
|
+
|
|
23
|
+
{{P1_ITEMS}}
|
|
24
|
+
|
|
25
|
+
<!-- Example entry:
|
|
26
|
+
- `src/services/auth.ts:42` — `any` type usage: parameter `payload` typed as `any`
|
|
27
|
+
-->
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## P2 — Fix Before PR ({{P2_COUNT}} items)
|
|
32
|
+
|
|
33
|
+
### Console Statements ({{CONSOLE_COUNT}})
|
|
34
|
+
|
|
35
|
+
{{CONSOLE_ITEMS}}
|
|
36
|
+
|
|
37
|
+
### Unused Imports ({{UNUSED_IMPORT_COUNT}})
|
|
38
|
+
|
|
39
|
+
{{UNUSED_IMPORT_ITEMS}}
|
|
40
|
+
|
|
41
|
+
### Long Functions ({{LONG_FUNCTION_COUNT}})
|
|
42
|
+
|
|
43
|
+
{{LONG_FUNCTION_ITEMS}}
|
|
44
|
+
|
|
45
|
+
### Deep Nesting ({{DEEP_NESTING_COUNT}})
|
|
46
|
+
|
|
47
|
+
{{DEEP_NESTING_ITEMS}}
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## P3 — Backlog ({{P3_COUNT}} items)
|
|
52
|
+
|
|
53
|
+
### Magic Numbers ({{MAGIC_NUMBER_COUNT}})
|
|
54
|
+
|
|
55
|
+
{{MAGIC_NUMBER_ITEMS}}
|
|
56
|
+
|
|
57
|
+
### Commented-Out Code ({{COMMENTED_CODE_COUNT}})
|
|
58
|
+
|
|
59
|
+
{{COMMENTED_CODE_ITEMS}}
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Auto-fixable Items
|
|
64
|
+
|
|
65
|
+
The following can be removed safely without review:
|
|
66
|
+
|
|
67
|
+
{{AUTOFIXABLE_LIST}}
|
|
68
|
+
|
|
69
|
+
> Run with user confirmation before applying auto-fixes.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Requires Manual Review
|
|
74
|
+
|
|
75
|
+
The following require human judgment:
|
|
76
|
+
|
|
77
|
+
{{MANUAL_REVIEW_LIST}}
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Next Steps
|
|
82
|
+
|
|
83
|
+
1. Fix all P1 items immediately
|
|
84
|
+
2. Address P2 items before opening PR
|
|
85
|
+
3. Create tracked tickets for P3 items
|
|
86
|
+
4. Re-run scan after fixes: `node skills/techdebt/scripts/scan.js {{SCAN_DIR}}`
|