@su-record/vibe 2.7.18 → 2.7.20
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 +153 -153
- package/LICENSE +21 -21
- package/README.md +451 -449
- 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 -0
- package/agents/event/event-content.md +68 -0
- package/agents/event/event-image.md +95 -0
- package/agents/event/event-ops.md +84 -0
- package/agents/event/event-scheduler.md +69 -0
- package/agents/event/event-speaker.md +86 -0
- 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/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 +94 -94
- 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.event.md +163 -0
- package/commands/vibe.review.md +607 -607
- package/commands/vibe.run.md +2217 -2124
- package/commands/vibe.spec.md +1195 -1195
- package/commands/vibe.spec.review.md +569 -569
- package/commands/vibe.trace.md +50 -0
- package/commands/vibe.utils.md +413 -413
- package/commands/vibe.verify.md +484 -484
- package/dist/__tests__/architecture.test.d.ts +2 -0
- package/dist/__tests__/architecture.test.d.ts.map +1 -0
- package/dist/__tests__/architecture.test.js +207 -0
- package/dist/__tests__/architecture.test.js.map +1 -0
- package/dist/cli/auth.js +3 -3
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/collaborator.js +52 -52
- package/dist/cli/commands/evolution.js +12 -12
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +45 -81
- package/dist/cli/commands/info.js.map +1 -1
- 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/telegram.js +12 -12
- package/dist/cli/detect.d.ts.map +1 -1
- package/dist/cli/detect.js +55 -32
- package/dist/cli/detect.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +52 -52
- 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/constants.d.ts.map +1 -1
- package/dist/cli/postinstall/constants.js +24 -0
- package/dist/cli/postinstall/constants.js.map +1 -1
- 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/setup/Provisioner.js +42 -42
- package/dist/infra/lib/AutomationLevel.d.ts +48 -0
- package/dist/infra/lib/AutomationLevel.d.ts.map +1 -0
- package/dist/infra/lib/AutomationLevel.js +157 -0
- package/dist/infra/lib/AutomationLevel.js.map +1 -0
- package/dist/infra/lib/DecisionTracer.d.ts +81 -0
- package/dist/infra/lib/DecisionTracer.d.ts.map +1 -0
- package/dist/infra/lib/DecisionTracer.js +135 -0
- package/dist/infra/lib/DecisionTracer.js.map +1 -0
- package/dist/infra/lib/DeepInit.js +24 -24
- package/dist/infra/lib/InteractiveCheckpoint.d.ts +75 -0
- package/dist/infra/lib/InteractiveCheckpoint.d.ts.map +1 -0
- package/dist/infra/lib/InteractiveCheckpoint.js +179 -0
- package/dist/infra/lib/InteractiveCheckpoint.js.map +1 -0
- package/dist/infra/lib/IterationTracker.d.ts +44 -0
- package/dist/infra/lib/IterationTracker.d.ts.map +1 -1
- package/dist/infra/lib/IterationTracker.js +267 -12
- package/dist/infra/lib/IterationTracker.js.map +1 -1
- package/dist/infra/lib/LoopBreaker.d.ts +56 -0
- package/dist/infra/lib/LoopBreaker.d.ts.map +1 -0
- package/dist/infra/lib/LoopBreaker.js +109 -0
- package/dist/infra/lib/LoopBreaker.js.map +1 -0
- 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/VerificationLoop.d.ts +105 -0
- package/dist/infra/lib/VerificationLoop.d.ts.map +1 -0
- package/dist/infra/lib/VerificationLoop.js +189 -0
- package/dist/infra/lib/VerificationLoop.js.map +1 -0
- package/dist/infra/lib/__tests__/AutomationLevel.test.d.ts +2 -0
- package/dist/infra/lib/__tests__/AutomationLevel.test.d.ts.map +1 -0
- package/dist/infra/lib/__tests__/AutomationLevel.test.js +297 -0
- package/dist/infra/lib/__tests__/AutomationLevel.test.js.map +1 -0
- package/dist/infra/lib/__tests__/DecisionTracer.test.d.ts +2 -0
- package/dist/infra/lib/__tests__/DecisionTracer.test.d.ts.map +1 -0
- package/dist/infra/lib/__tests__/DecisionTracer.test.js +274 -0
- package/dist/infra/lib/__tests__/DecisionTracer.test.js.map +1 -0
- package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.d.ts +2 -0
- package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.d.ts.map +1 -0
- package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.js +350 -0
- package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.js.map +1 -0
- package/dist/infra/lib/__tests__/LoopBreaker.test.d.ts +2 -0
- package/dist/infra/lib/__tests__/LoopBreaker.test.d.ts.map +1 -0
- package/dist/infra/lib/__tests__/LoopBreaker.test.js +340 -0
- package/dist/infra/lib/__tests__/LoopBreaker.test.js.map +1 -0
- package/dist/infra/lib/__tests__/VerificationLoop.test.d.ts +2 -0
- package/dist/infra/lib/__tests__/VerificationLoop.test.d.ts.map +1 -0
- package/dist/infra/lib/__tests__/VerificationLoop.test.js +486 -0
- package/dist/infra/lib/__tests__/VerificationLoop.test.js.map +1 -0
- 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/embedding/__tests__/EmbeddingProvider.test.js +4 -0
- package/dist/infra/lib/embedding/__tests__/EmbeddingProvider.test.js.map +1 -1
- package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
- package/dist/infra/lib/evolution/DeprecationDetector.d.ts +68 -0
- package/dist/infra/lib/evolution/DeprecationDetector.d.ts.map +1 -0
- package/dist/infra/lib/evolution/DeprecationDetector.js +207 -0
- package/dist/infra/lib/evolution/DeprecationDetector.js.map +1 -0
- 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.d.ts +74 -0
- package/dist/infra/lib/evolution/ParityTester.d.ts.map +1 -0
- package/dist/infra/lib/evolution/ParityTester.js +238 -0
- package/dist/infra/lib/evolution/ParityTester.js.map +1 -0
- 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/evolution/__tests__/deprecation.test.d.ts +2 -0
- package/dist/infra/lib/evolution/__tests__/deprecation.test.d.ts.map +1 -0
- package/dist/infra/lib/evolution/__tests__/deprecation.test.js +251 -0
- package/dist/infra/lib/evolution/__tests__/deprecation.test.js.map +1 -0
- package/dist/infra/lib/evolution/__tests__/parity.test.d.ts +2 -0
- package/dist/infra/lib/evolution/__tests__/parity.test.d.ts.map +1 -0
- package/dist/infra/lib/evolution/__tests__/parity.test.js +319 -0
- package/dist/infra/lib/evolution/__tests__/parity.test.js.map +1 -0
- package/dist/infra/lib/evolution/index.d.ts +4 -0
- package/dist/infra/lib/evolution/index.d.ts.map +1 -1
- package/dist/infra/lib/evolution/index.js +3 -0
- package/dist/infra/lib/evolution/index.js.map +1 -1
- package/dist/infra/lib/gemini/orchestration.js +5 -5
- package/dist/infra/lib/gpt/orchestration.js +4 -4
- package/dist/infra/lib/gpt/specializations.d.ts +1 -1
- package/dist/infra/lib/gpt/specializations.js +1 -1
- 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/lib/telemetry/SkillTelemetry.d.ts +6 -0
- package/dist/infra/lib/telemetry/SkillTelemetry.d.ts.map +1 -1
- package/dist/infra/lib/telemetry/SkillTelemetry.js +11 -0
- package/dist/infra/lib/telemetry/SkillTelemetry.js.map +1 -1
- package/dist/infra/orchestrator/AgentManager.js +12 -12
- package/dist/infra/orchestrator/AgentRegistry.js +65 -65
- package/dist/infra/orchestrator/BackgroundManager.d.ts.map +1 -1
- package/dist/infra/orchestrator/BackgroundManager.js +2 -0
- package/dist/infra/orchestrator/BackgroundManager.js.map +1 -1
- package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
- package/dist/infra/orchestrator/PhasePipeline.js +1 -1
- package/dist/infra/orchestrator/PhasePipeline.js.map +1 -1
- 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/index.d.ts +16 -19
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +15 -27
- package/dist/tools/index.js.map +1 -1
- 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/memory/startSession.js +1 -1
- package/dist/tools/memory/startSession.js.map +1 -1
- package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
- package/dist/tools/semantic/astGrep.test.js +6 -6
- package/dist/tools/spec/index.d.ts +0 -4
- package/dist/tools/spec/index.d.ts.map +1 -1
- package/dist/tools/spec/index.js +0 -4
- package/dist/tools/spec/index.js.map +1 -1
- 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 +137 -137
- package/hooks/scripts/code-check.js +77 -77
- package/hooks/scripts/context-save.js +212 -212
- package/hooks/scripts/evolution-engine.js +69 -0
- package/hooks/scripts/hud-status.js +291 -291
- package/hooks/scripts/keyword-detector.js +214 -214
- package/hooks/scripts/llm-orchestrate.js +475 -475
- package/hooks/scripts/post-edit.js +32 -32
- package/hooks/scripts/pre-tool-guard.js +125 -125
- package/hooks/scripts/prompt-dispatcher.js +185 -185
- package/hooks/scripts/sentinel-guard.js +104 -104
- package/hooks/scripts/session-start.js +106 -106
- package/hooks/scripts/skill-injector.js +83 -0
- package/hooks/scripts/stop-notify.js +209 -209
- package/hooks/scripts/utils.js +100 -100
- 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 -123
- package/skills/agents-md/SKILL.md +120 -120
- package/skills/arch-guard/SKILL.md +180 -180
- package/skills/brand-assets/SKILL.md +146 -146
- package/skills/capability-loop/SKILL.md +167 -167
- package/skills/characterization-test/SKILL.md +206 -206
- package/skills/commerce-patterns/SKILL.md +63 -63
- package/skills/commit-push-pr/SKILL.md +75 -75
- package/skills/context7-usage/SKILL.md +105 -105
- package/skills/core-capabilities/SKILL.md +13 -13
- package/skills/e2e-commerce/SKILL.md +61 -61
- package/skills/event-comms/SKILL.md +161 -0
- package/skills/event-ops/SKILL.md +197 -0
- package/skills/event-planning/SKILL.md +131 -0
- package/skills/exec-plan/SKILL.md +147 -147
- package/skills/frontend-design/SKILL.md +12 -12
- package/skills/git-worktree/SKILL.md +72 -72
- package/skills/handoff/SKILL.md +109 -109
- package/skills/parallel-research/SKILL.md +87 -87
- package/skills/priority-todos/SKILL.md +63 -63
- package/skills/seo-checklist/SKILL.md +57 -57
- package/skills/techdebt/SKILL.md +122 -122
- package/skills/tool-fallback/SKILL.md +103 -103
- package/skills/typescript-advanced-types/SKILL.md +66 -66
- package/skills/ui-ux-pro-max/SKILL.md +221 -221
- package/skills/vercel-react-best-practices/SKILL.md +59 -59
- package/skills/video-production/SKILL.md +51 -51
- 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
|
@@ -92,60 +92,60 @@ export function shouldContinue(session) {
|
|
|
92
92
|
* Generate architect diagnosis prompt
|
|
93
93
|
*/
|
|
94
94
|
export function generateDiagnosisPrompt(result) {
|
|
95
|
-
return `
|
|
96
|
-
## QA Failure Diagnosis Required
|
|
97
|
-
|
|
98
|
-
**Cycle**: ${result.cycle}
|
|
99
|
-
**Goal**: ${result.goal}
|
|
100
|
-
**Command**: ${result.command}
|
|
101
|
-
**Exit Code**: ${result.exitCode}
|
|
102
|
-
|
|
103
|
-
### Output:
|
|
104
|
-
\`\`\`
|
|
105
|
-
${result.output.slice(0, 2000)}
|
|
106
|
-
\`\`\`
|
|
107
|
-
|
|
108
|
-
### Task:
|
|
109
|
-
1. Identify the root cause of this failure
|
|
110
|
-
2. Determine if it's a code issue, config issue, or environment issue
|
|
111
|
-
3. Provide a specific fix recommendation
|
|
112
|
-
|
|
113
|
-
Return JSON:
|
|
114
|
-
\`\`\`json
|
|
115
|
-
{
|
|
116
|
-
"rootCause": "description of root cause",
|
|
117
|
-
"category": "code|config|environment|dependency",
|
|
118
|
-
"fix": "specific fix to apply",
|
|
119
|
-
"files": ["list", "of", "files", "to", "modify"],
|
|
120
|
-
"confidence": "high|medium|low"
|
|
121
|
-
}
|
|
122
|
-
\`\`\`
|
|
95
|
+
return `
|
|
96
|
+
## QA Failure Diagnosis Required
|
|
97
|
+
|
|
98
|
+
**Cycle**: ${result.cycle}
|
|
99
|
+
**Goal**: ${result.goal}
|
|
100
|
+
**Command**: ${result.command}
|
|
101
|
+
**Exit Code**: ${result.exitCode}
|
|
102
|
+
|
|
103
|
+
### Output:
|
|
104
|
+
\`\`\`
|
|
105
|
+
${result.output.slice(0, 2000)}
|
|
106
|
+
\`\`\`
|
|
107
|
+
|
|
108
|
+
### Task:
|
|
109
|
+
1. Identify the root cause of this failure
|
|
110
|
+
2. Determine if it's a code issue, config issue, or environment issue
|
|
111
|
+
3. Provide a specific fix recommendation
|
|
112
|
+
|
|
113
|
+
Return JSON:
|
|
114
|
+
\`\`\`json
|
|
115
|
+
{
|
|
116
|
+
"rootCause": "description of root cause",
|
|
117
|
+
"category": "code|config|environment|dependency",
|
|
118
|
+
"fix": "specific fix to apply",
|
|
119
|
+
"files": ["list", "of", "files", "to", "modify"],
|
|
120
|
+
"confidence": "high|medium|low"
|
|
121
|
+
}
|
|
122
|
+
\`\`\`
|
|
123
123
|
`.trim();
|
|
124
124
|
}
|
|
125
125
|
/**
|
|
126
126
|
* Generate executor fix prompt
|
|
127
127
|
*/
|
|
128
128
|
export function generateFixPrompt(diagnosis, result) {
|
|
129
|
-
return `
|
|
130
|
-
## Apply Fix for QA Failure
|
|
131
|
-
|
|
132
|
-
**Previous Diagnosis**:
|
|
133
|
-
${diagnosis}
|
|
134
|
-
|
|
135
|
-
**Failed Command**: ${result.command}
|
|
136
|
-
**Cycle**: ${result.cycle}
|
|
137
|
-
|
|
138
|
-
### Task:
|
|
139
|
-
Apply the fix identified in the diagnosis. Make minimal changes to resolve the issue.
|
|
140
|
-
|
|
141
|
-
### Rules:
|
|
142
|
-
1. Only modify files mentioned in the diagnosis
|
|
143
|
-
2. Make the smallest change that fixes the issue
|
|
144
|
-
3. Do not refactor or improve unrelated code
|
|
145
|
-
4. Run the verification command after fixing
|
|
146
|
-
|
|
147
|
-
### After fixing, run:
|
|
148
|
-
\`${result.command}\`
|
|
129
|
+
return `
|
|
130
|
+
## Apply Fix for QA Failure
|
|
131
|
+
|
|
132
|
+
**Previous Diagnosis**:
|
|
133
|
+
${diagnosis}
|
|
134
|
+
|
|
135
|
+
**Failed Command**: ${result.command}
|
|
136
|
+
**Cycle**: ${result.cycle}
|
|
137
|
+
|
|
138
|
+
### Task:
|
|
139
|
+
Apply the fix identified in the diagnosis. Make minimal changes to resolve the issue.
|
|
140
|
+
|
|
141
|
+
### Rules:
|
|
142
|
+
1. Only modify files mentioned in the diagnosis
|
|
143
|
+
2. Make the smallest change that fixes the issue
|
|
144
|
+
3. Do not refactor or improve unrelated code
|
|
145
|
+
4. Run the verification command after fixing
|
|
146
|
+
|
|
147
|
+
### After fixing, run:
|
|
148
|
+
\`${result.command}\`
|
|
149
149
|
`.trim();
|
|
150
150
|
}
|
|
151
151
|
/**
|
|
@@ -157,28 +157,28 @@ export function generateArchitectureEscalationPrompt(session) {
|
|
|
157
157
|
const failureSummary = recentFailures
|
|
158
158
|
.map((c, i) => ` Attempt ${i + 1}: ${c.goal} - ${c.output.slice(0, 150)}`)
|
|
159
159
|
.join('\n');
|
|
160
|
-
return `
|
|
161
|
-
## ⚠️ 3-Fix Rule Triggered - Architecture Question Required
|
|
162
|
-
|
|
163
|
-
**Same issue failed ${session.config.maxSameFailure}+ times.** This suggests an architectural problem, not a failed hypothesis.
|
|
164
|
-
|
|
165
|
-
### Failure Pattern:
|
|
166
|
-
${failureSummary}
|
|
167
|
-
|
|
168
|
-
### Architecture Problem Indicators:
|
|
169
|
-
- Each fix reveals new shared state/coupling issues in different places
|
|
170
|
-
- Fixes require "massive refactoring" to implement
|
|
171
|
-
- Each fix creates new symptoms elsewhere
|
|
172
|
-
|
|
173
|
-
### Required Action:
|
|
174
|
-
**STOP attempting more fixes.** Discuss with user before proceeding.
|
|
175
|
-
|
|
176
|
-
### Questions for User:
|
|
177
|
-
1. Is the current approach fundamentally sound?
|
|
178
|
-
2. Are we persisting through sheer inertia?
|
|
179
|
-
3. Should we refactor architecture vs. continue fixing symptoms?
|
|
180
|
-
|
|
181
|
-
**Do NOT attempt Fix #${session.config.maxSameFailure + 1} without architectural discussion.**
|
|
160
|
+
return `
|
|
161
|
+
## ⚠️ 3-Fix Rule Triggered - Architecture Question Required
|
|
162
|
+
|
|
163
|
+
**Same issue failed ${session.config.maxSameFailure}+ times.** This suggests an architectural problem, not a failed hypothesis.
|
|
164
|
+
|
|
165
|
+
### Failure Pattern:
|
|
166
|
+
${failureSummary}
|
|
167
|
+
|
|
168
|
+
### Architecture Problem Indicators:
|
|
169
|
+
- Each fix reveals new shared state/coupling issues in different places
|
|
170
|
+
- Fixes require "massive refactoring" to implement
|
|
171
|
+
- Each fix creates new symptoms elsewhere
|
|
172
|
+
|
|
173
|
+
### Required Action:
|
|
174
|
+
**STOP attempting more fixes.** Discuss with user before proceeding.
|
|
175
|
+
|
|
176
|
+
### Questions for User:
|
|
177
|
+
1. Is the current approach fundamentally sound?
|
|
178
|
+
2. Are we persisting through sheer inertia?
|
|
179
|
+
3. Should we refactor architecture vs. continue fixing symptoms?
|
|
180
|
+
|
|
181
|
+
**Do NOT attempt Fix #${session.config.maxSameFailure + 1} without architectural discussion.**
|
|
182
182
|
`.trim();
|
|
183
183
|
}
|
|
184
184
|
/**
|
|
@@ -263,35 +263,35 @@ export function parseQAGoals(input) {
|
|
|
263
263
|
* Create UltraQA workflow description
|
|
264
264
|
*/
|
|
265
265
|
export function describeUltraQAWorkflow() {
|
|
266
|
-
return `
|
|
267
|
-
## UltraQA Workflow
|
|
268
|
-
|
|
269
|
-
5-cycle autonomous QA loop:
|
|
270
|
-
|
|
271
|
-
\`\`\`
|
|
272
|
-
┌─────────────────────────────────────────────┐
|
|
273
|
-
│ ULTRAQA CYCLE │
|
|
274
|
-
│ │
|
|
275
|
-
│ 1. Run verification (test/build/lint) │
|
|
276
|
-
│ ↓ │
|
|
277
|
-
│ 2. Check result │
|
|
278
|
-
│ ↓ │
|
|
279
|
-
│ ┌───┴───┐ │
|
|
280
|
-
│ PASS FAIL │
|
|
281
|
-
│ ↓ ↓ │
|
|
282
|
-
│ DONE 3. Architect diagnosis │
|
|
283
|
-
│ ↓ │
|
|
284
|
-
│ 4. Executor fix │
|
|
285
|
-
│ ↓ │
|
|
286
|
-
│ 5. Repeat (max 5 cycles) │
|
|
287
|
-
└─────────────────────────────────────────────┘
|
|
288
|
-
\`\`\`
|
|
289
|
-
|
|
290
|
-
Exit conditions:
|
|
291
|
-
- ✅ All goals pass (with evidence)
|
|
292
|
-
- ⚠️ Same failure 3 times → Architecture Question (3-Fix Rule)
|
|
293
|
-
- ❌ Max 5 cycles reached
|
|
294
|
-
- ❌ Environment error
|
|
266
|
+
return `
|
|
267
|
+
## UltraQA Workflow
|
|
268
|
+
|
|
269
|
+
5-cycle autonomous QA loop:
|
|
270
|
+
|
|
271
|
+
\`\`\`
|
|
272
|
+
┌─────────────────────────────────────────────┐
|
|
273
|
+
│ ULTRAQA CYCLE │
|
|
274
|
+
│ │
|
|
275
|
+
│ 1. Run verification (test/build/lint) │
|
|
276
|
+
│ ↓ │
|
|
277
|
+
│ 2. Check result │
|
|
278
|
+
│ ↓ │
|
|
279
|
+
│ ┌───┴───┐ │
|
|
280
|
+
│ PASS FAIL │
|
|
281
|
+
│ ↓ ↓ │
|
|
282
|
+
│ DONE 3. Architect diagnosis │
|
|
283
|
+
│ ↓ │
|
|
284
|
+
│ 4. Executor fix │
|
|
285
|
+
│ ↓ │
|
|
286
|
+
│ 5. Repeat (max 5 cycles) │
|
|
287
|
+
└─────────────────────────────────────────────┘
|
|
288
|
+
\`\`\`
|
|
289
|
+
|
|
290
|
+
Exit conditions:
|
|
291
|
+
- ✅ All goals pass (with evidence)
|
|
292
|
+
- ⚠️ Same failure 3 times → Architecture Question (3-Fix Rule)
|
|
293
|
+
- ❌ Max 5 cycles reached
|
|
294
|
+
- ❌ Environment error
|
|
295
295
|
`.trim();
|
|
296
296
|
}
|
|
297
297
|
//# sourceMappingURL=UltraQA.js.map
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VerificationLoop — SPEC 요구사항 달성률 정량화 + 자동 반복
|
|
3
|
+
*
|
|
4
|
+
* /vibe.trace 결과를 정량화하고, 임계값 미달 시 자동 재시도 지원
|
|
5
|
+
*/
|
|
6
|
+
export interface RequirementResult {
|
|
7
|
+
/** Requirement ID (e.g., REQ-001) */
|
|
8
|
+
id: string;
|
|
9
|
+
/** Requirement description */
|
|
10
|
+
description: string;
|
|
11
|
+
/** Achievement status */
|
|
12
|
+
status: 'pass' | 'fail' | 'partial' | 'skip';
|
|
13
|
+
/** Achievement score 0-100 */
|
|
14
|
+
score: number;
|
|
15
|
+
/** Evidence or reason */
|
|
16
|
+
evidence: string;
|
|
17
|
+
}
|
|
18
|
+
export interface VerificationResult {
|
|
19
|
+
/** Overall achievement rate 0-100 */
|
|
20
|
+
achievementRate: number;
|
|
21
|
+
/** Individual requirement results */
|
|
22
|
+
requirements: RequirementResult[];
|
|
23
|
+
/** Count by status */
|
|
24
|
+
summary: {
|
|
25
|
+
total: number;
|
|
26
|
+
pass: number;
|
|
27
|
+
fail: number;
|
|
28
|
+
partial: number;
|
|
29
|
+
skip: number;
|
|
30
|
+
};
|
|
31
|
+
/** Timestamp */
|
|
32
|
+
timestamp: string;
|
|
33
|
+
/** Iteration number (1-based) */
|
|
34
|
+
iteration: number;
|
|
35
|
+
}
|
|
36
|
+
export interface VerificationLoopConfig {
|
|
37
|
+
/** Achievement threshold to pass (default: 90) */
|
|
38
|
+
threshold: number;
|
|
39
|
+
/** Max iterations (default: 3) */
|
|
40
|
+
maxIterations: number;
|
|
41
|
+
/** Whether auto-retry is enabled */
|
|
42
|
+
autoRetry: boolean;
|
|
43
|
+
}
|
|
44
|
+
export declare const DEFAULT_VERIFICATION_CONFIG: VerificationLoopConfig;
|
|
45
|
+
export interface LoopState {
|
|
46
|
+
/** Feature/SPEC name */
|
|
47
|
+
feature: string;
|
|
48
|
+
/** Configuration */
|
|
49
|
+
config: VerificationLoopConfig;
|
|
50
|
+
/** History of verification results */
|
|
51
|
+
history: VerificationResult[];
|
|
52
|
+
/** Current status */
|
|
53
|
+
status: 'pending' | 'running' | 'passed' | 'failed' | 'max_iterations';
|
|
54
|
+
/** Started at */
|
|
55
|
+
startedAt: string;
|
|
56
|
+
/** Completed at */
|
|
57
|
+
completedAt?: string;
|
|
58
|
+
}
|
|
59
|
+
export type VerificationAction = {
|
|
60
|
+
type: 'passed';
|
|
61
|
+
rate: number;
|
|
62
|
+
} | {
|
|
63
|
+
type: 'retry';
|
|
64
|
+
rate: number;
|
|
65
|
+
iteration: number;
|
|
66
|
+
failedRequirements: RequirementResult[];
|
|
67
|
+
} | {
|
|
68
|
+
type: 'max_iterations';
|
|
69
|
+
rate: number;
|
|
70
|
+
history: VerificationResult[];
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Create a new verification loop
|
|
74
|
+
*/
|
|
75
|
+
export declare function createLoop(feature: string, config?: Partial<VerificationLoopConfig>): LoopState;
|
|
76
|
+
/**
|
|
77
|
+
* Calculate achievement rate from requirement results
|
|
78
|
+
* Weighted average of scores; skip items are excluded
|
|
79
|
+
*/
|
|
80
|
+
export declare function calculateAchievementRate(requirements: RequirementResult[]): number;
|
|
81
|
+
/**
|
|
82
|
+
* Record a verification result and determine next action
|
|
83
|
+
*/
|
|
84
|
+
export declare function recordVerification(state: LoopState, requirements: RequirementResult[]): {
|
|
85
|
+
state: LoopState;
|
|
86
|
+
action: VerificationAction;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Get failed/partial requirements from a result
|
|
90
|
+
*/
|
|
91
|
+
export declare function getUnmetRequirements(result: VerificationResult): RequirementResult[];
|
|
92
|
+
/**
|
|
93
|
+
* Format verification result as readable string
|
|
94
|
+
*/
|
|
95
|
+
export declare function formatVerificationResult(result: VerificationResult, config: VerificationLoopConfig): string;
|
|
96
|
+
/**
|
|
97
|
+
* Format loop summary
|
|
98
|
+
*/
|
|
99
|
+
export declare function formatLoopSummary(state: LoopState): string;
|
|
100
|
+
/**
|
|
101
|
+
* Check if improvement is being made (rate increasing across iterations)
|
|
102
|
+
* Returns true if latest rate is at least 1% higher than the previous
|
|
103
|
+
*/
|
|
104
|
+
export declare function isImproving(state: LoopState): boolean;
|
|
105
|
+
//# sourceMappingURL=VerificationLoop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VerificationLoop.d.ts","sourceRoot":"","sources":["../../../src/infra/lib/VerificationLoop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VerificationLoop — SPEC 요구사항 달성률 정량화 + 자동 반복
|
|
3
|
+
*
|
|
4
|
+
* /vibe.trace 결과를 정량화하고, 임계값 미달 시 자동 재시도 지원
|
|
5
|
+
*/
|
|
6
|
+
export const DEFAULT_VERIFICATION_CONFIG = {
|
|
7
|
+
threshold: 90,
|
|
8
|
+
maxIterations: 3,
|
|
9
|
+
autoRetry: false,
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Create a new verification loop
|
|
13
|
+
*/
|
|
14
|
+
export function createLoop(feature, config) {
|
|
15
|
+
return {
|
|
16
|
+
feature,
|
|
17
|
+
config: { ...DEFAULT_VERIFICATION_CONFIG, ...config },
|
|
18
|
+
history: [],
|
|
19
|
+
status: 'pending',
|
|
20
|
+
startedAt: new Date().toISOString(),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Calculate achievement rate from requirement results
|
|
25
|
+
* Weighted average of scores; skip items are excluded
|
|
26
|
+
*/
|
|
27
|
+
export function calculateAchievementRate(requirements) {
|
|
28
|
+
const active = requirements.filter(r => r.status !== 'skip');
|
|
29
|
+
if (active.length === 0)
|
|
30
|
+
return 100;
|
|
31
|
+
const total = active.reduce((sum, r) => sum + r.score, 0);
|
|
32
|
+
return Math.round(total / active.length);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Build summary counts from requirement results
|
|
36
|
+
*/
|
|
37
|
+
function buildSummary(requirements) {
|
|
38
|
+
return {
|
|
39
|
+
total: requirements.length,
|
|
40
|
+
pass: requirements.filter(r => r.status === 'pass').length,
|
|
41
|
+
fail: requirements.filter(r => r.status === 'fail').length,
|
|
42
|
+
partial: requirements.filter(r => r.status === 'partial').length,
|
|
43
|
+
skip: requirements.filter(r => r.status === 'skip').length,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Determine the next action based on current state
|
|
48
|
+
*/
|
|
49
|
+
function determineAction(state, result) {
|
|
50
|
+
if (result.achievementRate >= state.config.threshold) {
|
|
51
|
+
return { type: 'passed', rate: result.achievementRate };
|
|
52
|
+
}
|
|
53
|
+
const nextIteration = state.history.length;
|
|
54
|
+
if (nextIteration >= state.config.maxIterations) {
|
|
55
|
+
return { type: 'max_iterations', rate: result.achievementRate, history: state.history };
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
type: 'retry',
|
|
59
|
+
rate: result.achievementRate,
|
|
60
|
+
iteration: nextIteration,
|
|
61
|
+
failedRequirements: getUnmetRequirements(result),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Record a verification result and determine next action
|
|
66
|
+
*/
|
|
67
|
+
export function recordVerification(state, requirements) {
|
|
68
|
+
const iteration = state.history.length + 1;
|
|
69
|
+
const achievementRate = calculateAchievementRate(requirements);
|
|
70
|
+
const result = {
|
|
71
|
+
achievementRate,
|
|
72
|
+
requirements,
|
|
73
|
+
summary: buildSummary(requirements),
|
|
74
|
+
timestamp: new Date().toISOString(),
|
|
75
|
+
iteration,
|
|
76
|
+
};
|
|
77
|
+
const newHistory = [...state.history, result];
|
|
78
|
+
const action = determineAction({ ...state, history: newHistory }, result);
|
|
79
|
+
const nextStatus = resolveStatus(action.type);
|
|
80
|
+
const completedAt = nextStatus !== 'running' ? new Date().toISOString() : undefined;
|
|
81
|
+
const newState = {
|
|
82
|
+
...state,
|
|
83
|
+
history: newHistory,
|
|
84
|
+
status: nextStatus,
|
|
85
|
+
...(completedAt && { completedAt }),
|
|
86
|
+
};
|
|
87
|
+
return { state: newState, action };
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Map action type to loop status
|
|
91
|
+
*/
|
|
92
|
+
function resolveStatus(actionType) {
|
|
93
|
+
switch (actionType) {
|
|
94
|
+
case 'passed': return 'passed';
|
|
95
|
+
case 'max_iterations': return 'max_iterations';
|
|
96
|
+
case 'retry': return 'running';
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get failed/partial requirements from a result
|
|
101
|
+
*/
|
|
102
|
+
export function getUnmetRequirements(result) {
|
|
103
|
+
return result.requirements.filter(r => r.status === 'fail' || r.status === 'partial');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get status icon for a requirement result
|
|
107
|
+
*/
|
|
108
|
+
function getRequirementIcon(status) {
|
|
109
|
+
switch (status) {
|
|
110
|
+
case 'pass': return '✅';
|
|
111
|
+
case 'fail': return '❌';
|
|
112
|
+
case 'partial': return '⚠️';
|
|
113
|
+
case 'skip': return '⏭️';
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Build a visual progress bar (e.g., "████████░░ 80%")
|
|
118
|
+
*/
|
|
119
|
+
function buildRateBar(rate, width = 10) {
|
|
120
|
+
const filled = Math.round((rate / 100) * width);
|
|
121
|
+
const empty = width - filled;
|
|
122
|
+
return '█'.repeat(filled) + '░'.repeat(empty) + ` ${rate}%`;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Format verification result as readable string
|
|
126
|
+
*/
|
|
127
|
+
export function formatVerificationResult(result, config) {
|
|
128
|
+
const lines = [];
|
|
129
|
+
const passed = result.achievementRate >= config.threshold;
|
|
130
|
+
const statusLabel = passed ? 'PASSED' : 'BELOW THRESHOLD';
|
|
131
|
+
lines.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
|
132
|
+
lines.push(`Verification Result — Iteration ${result.iteration}`);
|
|
133
|
+
lines.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
|
134
|
+
lines.push(`Achievement: ${buildRateBar(result.achievementRate)} [${statusLabel}]`);
|
|
135
|
+
lines.push(`Threshold: ${config.threshold}%`);
|
|
136
|
+
lines.push(`Summary: ${result.summary.pass} pass / ${result.summary.fail} fail / ${result.summary.partial} partial / ${result.summary.skip} skip`);
|
|
137
|
+
lines.push(``);
|
|
138
|
+
lines.push(`Requirements:`);
|
|
139
|
+
for (const req of result.requirements) {
|
|
140
|
+
const icon = getRequirementIcon(req.status);
|
|
141
|
+
lines.push(` ${icon} [${req.id}] ${req.description}`);
|
|
142
|
+
if (req.status !== 'pass' && req.status !== 'skip') {
|
|
143
|
+
lines.push(` Evidence: ${req.evidence}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
lines.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
|
147
|
+
return lines.join('\n');
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Format loop summary
|
|
151
|
+
*/
|
|
152
|
+
export function formatLoopSummary(state) {
|
|
153
|
+
const lines = [];
|
|
154
|
+
lines.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
|
155
|
+
lines.push(`Verification Loop — ${state.feature}`);
|
|
156
|
+
lines.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
|
157
|
+
lines.push(`Status: ${state.status.toUpperCase()}`);
|
|
158
|
+
lines.push(`Iterations: ${state.history.length}/${state.config.maxIterations}`);
|
|
159
|
+
lines.push(`Threshold: ${state.config.threshold}%`);
|
|
160
|
+
lines.push(`Auto-retry: ${state.config.autoRetry ? 'enabled' : 'disabled'}`);
|
|
161
|
+
if (state.history.length > 0) {
|
|
162
|
+
lines.push(``);
|
|
163
|
+
lines.push(`History:`);
|
|
164
|
+
for (const result of state.history) {
|
|
165
|
+
const bar = buildRateBar(result.achievementRate, 8);
|
|
166
|
+
lines.push(` Iteration ${result.iteration}: ${bar}`);
|
|
167
|
+
}
|
|
168
|
+
const improving = isImproving(state) ? ' (improving)' : '';
|
|
169
|
+
lines.push(`${improving}`);
|
|
170
|
+
}
|
|
171
|
+
if (state.completedAt) {
|
|
172
|
+
lines.push(``);
|
|
173
|
+
lines.push(`Completed: ${state.completedAt}`);
|
|
174
|
+
}
|
|
175
|
+
lines.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
|
176
|
+
return lines.join('\n');
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Check if improvement is being made (rate increasing across iterations)
|
|
180
|
+
* Returns true if latest rate is at least 1% higher than the previous
|
|
181
|
+
*/
|
|
182
|
+
export function isImproving(state) {
|
|
183
|
+
if (state.history.length < 2)
|
|
184
|
+
return false;
|
|
185
|
+
const last = state.history[state.history.length - 1];
|
|
186
|
+
const prev = state.history[state.history.length - 2];
|
|
187
|
+
return last.achievementRate - prev.achievementRate >= 1;
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=VerificationLoop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VerificationLoop.js","sourceRoot":"","sources":["../../../src/infra/lib/VerificationLoop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutomationLevel.test.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/__tests__/AutomationLevel.test.ts"],"names":[],"mappings":""}
|