opencode-swarm-plugin 0.31.7 → 0.33.0
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/.turbo/turbo-build.log +4 -4
- package/.turbo/turbo-test.log +324 -316
- package/CHANGELOG.md +394 -0
- package/README.md +129 -181
- package/bin/swarm.test.ts +31 -0
- package/bin/swarm.ts +635 -140
- package/dist/compaction-hook.d.ts +1 -1
- package/dist/compaction-hook.d.ts.map +1 -1
- package/dist/hive.d.ts.map +1 -1
- package/dist/index.d.ts +17 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +653 -139
- package/dist/memory-tools.d.ts.map +1 -1
- package/dist/memory.d.ts +5 -4
- package/dist/memory.d.ts.map +1 -1
- package/dist/observability-tools.d.ts +116 -0
- package/dist/observability-tools.d.ts.map +1 -0
- package/dist/plugin.js +648 -136
- package/dist/skills.d.ts.map +1 -1
- package/dist/swarm-orchestrate.d.ts +29 -5
- package/dist/swarm-orchestrate.d.ts.map +1 -1
- package/dist/swarm-prompts.d.ts +66 -0
- package/dist/swarm-prompts.d.ts.map +1 -1
- package/dist/swarm.d.ts +17 -2
- package/dist/swarm.d.ts.map +1 -1
- package/evals/lib/{data-loader.test.ts → data-loader.evalite-test.ts} +7 -6
- package/evals/lib/data-loader.ts +1 -1
- package/evals/scorers/{outcome-scorers.test.ts → outcome-scorers.evalite-test.ts} +1 -1
- package/examples/plugin-wrapper-template.ts +316 -12
- package/global-skills/swarm-coordination/SKILL.md +118 -8
- package/package.json +3 -2
- package/src/compaction-hook.ts +5 -3
- package/src/hive.integration.test.ts +83 -1
- package/src/hive.ts +37 -12
- package/src/index.ts +25 -1
- package/src/mandate-storage.integration.test.ts +601 -0
- package/src/memory-tools.ts +6 -4
- package/src/memory.integration.test.ts +117 -49
- package/src/memory.test.ts +41 -217
- package/src/memory.ts +12 -8
- package/src/observability-tools.test.ts +346 -0
- package/src/observability-tools.ts +594 -0
- package/src/repo-crawl.integration.test.ts +441 -0
- package/src/skills.integration.test.ts +1192 -0
- package/src/skills.test.ts +42 -1
- package/src/skills.ts +8 -4
- package/src/structured.integration.test.ts +817 -0
- package/src/swarm-deferred.integration.test.ts +157 -0
- package/src/swarm-deferred.test.ts +38 -0
- package/src/swarm-mail.integration.test.ts +15 -19
- package/src/swarm-orchestrate.integration.test.ts +282 -0
- package/src/swarm-orchestrate.test.ts +123 -0
- package/src/swarm-orchestrate.ts +279 -201
- package/src/swarm-prompts.test.ts +481 -0
- package/src/swarm-prompts.ts +297 -0
- package/src/swarm-research.integration.test.ts +544 -0
- package/src/swarm-research.test.ts +698 -0
- package/src/swarm-research.ts +472 -0
- package/src/swarm-review.integration.test.ts +290 -0
- package/src/swarm.integration.test.ts +23 -20
- package/src/swarm.ts +6 -3
- package/src/tool-adapter.integration.test.ts +1221 -0
package/.turbo/turbo-test.log
CHANGED
|
@@ -2,223 +2,229 @@ $ bun test --timeout 10000 src/anti-patterns.test.ts src/mandate-promotion.test.
|
|
|
2
2
|
bun test v1.3.4 (5eb2145b)
|
|
3
3
|
|
|
4
4
|
src/structured.test.ts:
|
|
5
|
-
(pass) extractJsonFromText > Strategy 1: Direct parse > extracts clean JSON directly [0.
|
|
6
|
-
(pass) extractJsonFromText > Strategy 1: Direct parse > handles nested objects [0.
|
|
5
|
+
(pass) extractJsonFromText > Strategy 1: Direct parse > extracts clean JSON directly [0.14ms]
|
|
6
|
+
(pass) extractJsonFromText > Strategy 1: Direct parse > handles nested objects [0.02ms]
|
|
7
7
|
(pass) extractJsonFromText > Strategy 1: Direct parse > handles arrays [0.01ms]
|
|
8
|
-
(pass) extractJsonFromText > Strategy 1: Direct parse > handles complex nested structures [0.
|
|
9
|
-
(pass) extractJsonFromText > Strategy 2: JSON code block > extracts JSON from ```json code block [0.
|
|
8
|
+
(pass) extractJsonFromText > Strategy 1: Direct parse > handles complex nested structures [0.05ms]
|
|
9
|
+
(pass) extractJsonFromText > Strategy 2: JSON code block > extracts JSON from ```json code block [0.67ms]
|
|
10
10
|
(pass) extractJsonFromText > Strategy 2: JSON code block > handles code block with surrounding text [0.02ms]
|
|
11
|
-
(pass) extractJsonFromText > Strategy 2: JSON code block > handles multiline JSON in code block [0.
|
|
12
|
-
(pass) extractJsonFromText > Strategy 3: Generic code block > extracts JSON from unlabeled code block [0.
|
|
13
|
-
(pass) extractJsonFromText > Strategy 3: Generic code block > prefers json-labeled block over generic block [0.
|
|
14
|
-
(pass) extractJsonFromText > Strategy 4: Brace matching for objects > extracts JSON with surrounding text [0.
|
|
15
|
-
(pass) extractJsonFromText > Strategy 4: Brace matching for objects > extracts first balanced object when multiple present
|
|
16
|
-
(pass) extractJsonFromText > Strategy 4: Brace matching for objects > handles deeply nested objects
|
|
17
|
-
(pass) extractJsonFromText > Strategy 4: Brace matching for objects > handles strings containing braces
|
|
18
|
-
(pass) extractJsonFromText > Strategy 4: Brace matching for objects > handles escaped quotes in strings
|
|
19
|
-
(pass) extractJsonFromText > Strategy 5: Bracket matching for arrays > extracts arrays with surrounding text [0.
|
|
20
|
-
(pass) extractJsonFromText > Strategy 5: Bracket matching for arrays > handles nested arrays [0.
|
|
21
|
-
(pass) extractJsonFromText > Strategy 5: Bracket matching for arrays > prefers object matching over array when both present [0.
|
|
22
|
-
(pass) extractJsonFromText > Strategy 6: JSON repair > fixes single quotes in keys (limited support) [0.
|
|
11
|
+
(pass) extractJsonFromText > Strategy 2: JSON code block > handles multiline JSON in code block [0.01ms]
|
|
12
|
+
(pass) extractJsonFromText > Strategy 3: Generic code block > extracts JSON from unlabeled code block [0.03ms]
|
|
13
|
+
(pass) extractJsonFromText > Strategy 3: Generic code block > prefers json-labeled block over generic block [0.01ms]
|
|
14
|
+
(pass) extractJsonFromText > Strategy 4: Brace matching for objects > extracts JSON with surrounding text [0.04ms]
|
|
15
|
+
(pass) extractJsonFromText > Strategy 4: Brace matching for objects > extracts first balanced object when multiple present
|
|
16
|
+
(pass) extractJsonFromText > Strategy 4: Brace matching for objects > handles deeply nested objects
|
|
17
|
+
(pass) extractJsonFromText > Strategy 4: Brace matching for objects > handles strings containing braces
|
|
18
|
+
(pass) extractJsonFromText > Strategy 4: Brace matching for objects > handles escaped quotes in strings
|
|
19
|
+
(pass) extractJsonFromText > Strategy 5: Bracket matching for arrays > extracts arrays with surrounding text [0.02ms]
|
|
20
|
+
(pass) extractJsonFromText > Strategy 5: Bracket matching for arrays > handles nested arrays [0.01ms]
|
|
21
|
+
(pass) extractJsonFromText > Strategy 5: Bracket matching for arrays > prefers object matching over array when both present [0.01ms]
|
|
22
|
+
(pass) extractJsonFromText > Strategy 6: JSON repair > fixes single quotes in keys (limited support) [0.05ms]
|
|
23
23
|
(pass) extractJsonFromText > Strategy 6: JSON repair > fixes trailing commas in objects [0.02ms]
|
|
24
|
-
(pass) extractJsonFromText > Strategy 6: JSON repair > fixes trailing commas in arrays [0.
|
|
24
|
+
(pass) extractJsonFromText > Strategy 6: JSON repair > fixes trailing commas in arrays [0.01ms]
|
|
25
25
|
(pass) extractJsonFromText > Strategy 6: JSON repair > fixes multiple trailing commas [0.02ms]
|
|
26
26
|
(pass) extractJsonFromText > Error cases > throws JsonExtractionError for invalid JSON [0.02ms]
|
|
27
27
|
(pass) extractJsonFromText > Error cases > throws JsonExtractionError for empty input [0.03ms]
|
|
28
|
-
(pass) extractJsonFromText > Error cases > throws JsonExtractionError for unbalanced braces [0.
|
|
29
|
-
(pass) extractJsonFromText > Error cases > throws JsonExtractionError for malformed JSON [0.
|
|
30
|
-
(pass) extractJsonFromText > Error cases > includes attempted strategies in error [0.
|
|
28
|
+
(pass) extractJsonFromText > Error cases > throws JsonExtractionError for unbalanced braces [0.02ms]
|
|
29
|
+
(pass) extractJsonFromText > Error cases > throws JsonExtractionError for malformed JSON [0.02ms]
|
|
30
|
+
(pass) extractJsonFromText > Error cases > includes attempted strategies in error [0.03ms]
|
|
31
31
|
(pass) extractJsonFromText > Error cases > returns null for deeply nested input exceeding MAX_BRACE_DEPTH [0.05ms]
|
|
32
|
-
(pass) formatZodErrors > formats single error with path [0.
|
|
33
|
-
(pass) formatZodErrors > formats multiple errors [0.
|
|
34
|
-
(pass) formatZodErrors > formats nested path [0.
|
|
35
|
-
(pass) formatZodErrors > formats error without path [0.
|
|
32
|
+
(pass) formatZodErrors > formats single error with path [0.58ms]
|
|
33
|
+
(pass) formatZodErrors > formats multiple errors [0.20ms]
|
|
34
|
+
(pass) formatZodErrors > formats nested path [0.12ms]
|
|
35
|
+
(pass) formatZodErrors > formats error without path [0.04ms]
|
|
36
36
|
(pass) getSchemaByName > returns EvaluationSchema for 'evaluation' [0.02ms]
|
|
37
37
|
(pass) getSchemaByName > returns TaskDecompositionSchema for 'task_decomposition'
|
|
38
38
|
(pass) getSchemaByName > returns CellTreeSchema for 'cell_tree'
|
|
39
|
-
(pass) getSchemaByName > throws error for unknown schema name
|
|
40
|
-
(pass) getSchemaByName > error message lists available schemas [0.
|
|
41
|
-
(pass) StructuredValidationError > formats error bullets from ZodError [0.
|
|
42
|
-
(pass) StructuredValidationError > handles null ZodError [0.
|
|
39
|
+
(pass) getSchemaByName > throws error for unknown schema name
|
|
40
|
+
(pass) getSchemaByName > error message lists available schemas [0.02ms]
|
|
41
|
+
(pass) StructuredValidationError > formats error bullets from ZodError [0.10ms]
|
|
42
|
+
(pass) StructuredValidationError > handles null ZodError [0.02ms]
|
|
43
43
|
(pass) StructuredValidationError > includes extraction method when provided [0.01ms]
|
|
44
|
-
(pass) structured_extract_json > returns success for valid JSON [0.
|
|
45
|
-
(pass) structured_extract_json > returns success for JSON in code block [0.
|
|
44
|
+
(pass) structured_extract_json > returns success for valid JSON [0.07ms]
|
|
45
|
+
(pass) structured_extract_json > returns success for JSON in code block [0.07ms]
|
|
46
46
|
(pass) structured_extract_json > returns error for invalid JSON [0.05ms]
|
|
47
|
-
(pass) structured_extract_json > includes raw input preview in error [0.
|
|
48
|
-
(pass) structured_validate > evaluation schema > validates correct evaluation [
|
|
49
|
-
(pass) structured_validate > evaluation schema > returns error for invalid evaluation [0.
|
|
50
|
-
(pass) structured_validate > evaluation schema > handles empty response [0.
|
|
51
|
-
(pass) structured_validate > evaluation schema > handles whitespace-only response [0.
|
|
52
|
-
(pass) structured_validate > task_decomposition schema > validates correct decomposition [0.
|
|
53
|
-
(pass) structured_validate > cell_tree schema > validates correct bead tree [0.
|
|
54
|
-
(pass) structured_validate > extracts JSON from markdown before validation [0.
|
|
55
|
-
(pass) structured_validate > includes retry hint when attempts < max_retries [0.
|
|
56
|
-
(pass) structured_parse_evaluation > parses valid evaluation [0.
|
|
57
|
-
(pass) structured_parse_evaluation > identifies failed criteria in summary [0.
|
|
58
|
-
(pass) structured_parse_evaluation > returns error for malformed JSON [0.
|
|
59
|
-
(pass) structured_parse_evaluation > returns error for invalid evaluation schema [0.
|
|
60
|
-
(pass) structured_parse_evaluation > includes expected shape in error feedback [0.
|
|
61
|
-
(pass) structured_parse_decomposition > parses valid decomposition [0.
|
|
62
|
-
(pass) structured_parse_decomposition > includes effort breakdown in summary [0.
|
|
63
|
-
(pass) structured_parse_decomposition > handles dependencies in summary [0.
|
|
64
|
-
(pass) structured_parse_decomposition > deduplicates files in summary [0.
|
|
65
|
-
(pass) structured_parse_decomposition > returns error for invalid decomposition [0.
|
|
66
|
-
(pass) structured_parse_cell_tree > parses valid bead tree [0.
|
|
67
|
-
(pass) structured_parse_cell_tree > calculates complexity total [0.
|
|
47
|
+
(pass) structured_extract_json > includes raw input preview in error [0.03ms]
|
|
48
|
+
(pass) structured_validate > evaluation schema > validates correct evaluation [0.49ms]
|
|
49
|
+
(pass) structured_validate > evaluation schema > returns error for invalid evaluation [0.09ms]
|
|
50
|
+
(pass) structured_validate > evaluation schema > handles empty response [0.03ms]
|
|
51
|
+
(pass) structured_validate > evaluation schema > handles whitespace-only response [0.03ms]
|
|
52
|
+
(pass) structured_validate > task_decomposition schema > validates correct decomposition [0.38ms]
|
|
53
|
+
(pass) structured_validate > cell_tree schema > validates correct bead tree [0.33ms]
|
|
54
|
+
(pass) structured_validate > extracts JSON from markdown before validation [0.05ms]
|
|
55
|
+
(pass) structured_validate > includes retry hint when attempts < max_retries [0.06ms]
|
|
56
|
+
(pass) structured_parse_evaluation > parses valid evaluation [0.12ms]
|
|
57
|
+
(pass) structured_parse_evaluation > identifies failed criteria in summary [0.09ms]
|
|
58
|
+
(pass) structured_parse_evaluation > returns error for malformed JSON [0.05ms]
|
|
59
|
+
(pass) structured_parse_evaluation > returns error for invalid evaluation schema [0.04ms]
|
|
60
|
+
(pass) structured_parse_evaluation > includes expected shape in error feedback [0.04ms]
|
|
61
|
+
(pass) structured_parse_decomposition > parses valid decomposition [0.24ms]
|
|
62
|
+
(pass) structured_parse_decomposition > includes effort breakdown in summary [0.09ms]
|
|
63
|
+
(pass) structured_parse_decomposition > handles dependencies in summary [0.14ms]
|
|
64
|
+
(pass) structured_parse_decomposition > deduplicates files in summary [0.05ms]
|
|
65
|
+
(pass) structured_parse_decomposition > returns error for invalid decomposition [0.07ms]
|
|
66
|
+
(pass) structured_parse_cell_tree > parses valid bead tree [0.16ms]
|
|
67
|
+
(pass) structured_parse_cell_tree > calculates complexity total [0.08ms]
|
|
68
68
|
(pass) structured_parse_cell_tree > lists unique files [0.07ms]
|
|
69
|
-
(pass) structured_parse_cell_tree > returns error for invalid bead tree [0.
|
|
70
|
-
(pass) structured_parse_cell_tree > includes expected shape in error [0.
|
|
71
|
-
(pass) Edge cases > handles JSON with unicode characters [0.
|
|
72
|
-
(pass) Edge cases > handles very long strings in JSON [0.
|
|
73
|
-
(pass) Edge cases > handles JSON with null values [0.
|
|
69
|
+
(pass) structured_parse_cell_tree > returns error for invalid bead tree [0.09ms]
|
|
70
|
+
(pass) structured_parse_cell_tree > includes expected shape in error [0.04ms]
|
|
71
|
+
(pass) Edge cases > handles JSON with unicode characters [0.01ms]
|
|
72
|
+
(pass) Edge cases > handles very long strings in JSON [0.03ms]
|
|
73
|
+
(pass) Edge cases > handles JSON with null values [0.01ms]
|
|
74
74
|
(pass) Edge cases > handles JSON with boolean values [0.01ms]
|
|
75
75
|
(pass) Edge cases > handles JSON with number types [0.01ms]
|
|
76
|
-
(pass) Edge cases > handles mixed content markdown with multiple code blocks [0.
|
|
76
|
+
(pass) Edge cases > handles mixed content markdown with multiple code blocks [0.01ms]
|
|
77
77
|
(pass) Edge cases > handles JSON with escaped characters [0.02ms]
|
|
78
78
|
|
|
79
79
|
src/mandate-storage.test.ts:
|
|
80
|
-
(pass) InMemoryMandateStorage > Entry operations > should store and retrieve mandate entry [0.
|
|
81
|
-
(pass) InMemoryMandateStorage > Entry operations > should return null for non-existent mandate [0.
|
|
82
|
-
(pass) InMemoryMandateStorage > Entry operations > should find mandates by query [0.
|
|
83
|
-
(pass) InMemoryMandateStorage > Entry operations > should list all mandates [0.
|
|
84
|
-
(pass) InMemoryMandateStorage > Entry operations > should filter mandates by status [0.
|
|
80
|
+
(pass) InMemoryMandateStorage > Entry operations > should store and retrieve mandate entry [0.17ms]
|
|
81
|
+
(pass) InMemoryMandateStorage > Entry operations > should return null for non-existent mandate [0.03ms]
|
|
82
|
+
(pass) InMemoryMandateStorage > Entry operations > should find mandates by query [0.21ms]
|
|
83
|
+
(pass) InMemoryMandateStorage > Entry operations > should list all mandates [0.06ms]
|
|
84
|
+
(pass) InMemoryMandateStorage > Entry operations > should filter mandates by status [0.06ms]
|
|
85
85
|
(pass) InMemoryMandateStorage > Entry operations > should filter mandates by content_type [0.05ms]
|
|
86
86
|
(pass) InMemoryMandateStorage > Entry operations > should update mandate entry [0.06ms]
|
|
87
|
-
(pass) InMemoryMandateStorage > Entry operations > should throw when updating non-existent mandate [0.
|
|
88
|
-
(pass) InMemoryMandateStorage > Vote operations > should cast vote and verify storage [0.
|
|
89
|
-
(pass) InMemoryMandateStorage > Vote operations > should prevent duplicate votes from same agent [0.
|
|
90
|
-
(pass) InMemoryMandateStorage > Vote operations > should check if agent has voted [0.
|
|
91
|
-
(pass) InMemoryMandateStorage > Vote operations > should get all votes for a mandate [0.
|
|
92
|
-
(pass) InMemoryMandateStorage > Score calculation with decay > should calculate score with no votes [0.
|
|
93
|
-
(pass) InMemoryMandateStorage > Score calculation with decay > should calculate score with recent upvotes [0.
|
|
87
|
+
(pass) InMemoryMandateStorage > Entry operations > should throw when updating non-existent mandate [0.06ms]
|
|
88
|
+
(pass) InMemoryMandateStorage > Vote operations > should cast vote and verify storage [0.10ms]
|
|
89
|
+
(pass) InMemoryMandateStorage > Vote operations > should prevent duplicate votes from same agent [0.05ms]
|
|
90
|
+
(pass) InMemoryMandateStorage > Vote operations > should check if agent has voted [0.05ms]
|
|
91
|
+
(pass) InMemoryMandateStorage > Vote operations > should get all votes for a mandate [0.04ms]
|
|
92
|
+
(pass) InMemoryMandateStorage > Score calculation with decay > should calculate score with no votes [0.10ms]
|
|
93
|
+
(pass) InMemoryMandateStorage > Score calculation with decay > should calculate score with recent upvotes [0.10ms]
|
|
94
94
|
(pass) InMemoryMandateStorage > Score calculation with decay > should calculate score with mixed votes [0.06ms]
|
|
95
|
-
(pass) InMemoryMandateStorage > Score calculation with decay > should apply decay to old votes [
|
|
96
|
-
(pass) InMemoryMandateStorage > Score calculation with decay > should handle vote weights [0.
|
|
97
|
-
(pass) InMemoryMandateStorage > Status updates based on score > should transition to mandate status with high score [0.
|
|
98
|
-
(pass) InMemoryMandateStorage > Status updates based on score > should transition to established status [0.
|
|
95
|
+
(pass) InMemoryMandateStorage > Score calculation with decay > should apply decay to old votes [0.44ms]
|
|
96
|
+
(pass) InMemoryMandateStorage > Score calculation with decay > should handle vote weights [0.09ms]
|
|
97
|
+
(pass) InMemoryMandateStorage > Status updates based on score > should transition to mandate status with high score [0.18ms]
|
|
98
|
+
(pass) InMemoryMandateStorage > Status updates based on score > should transition to established status [0.08ms]
|
|
99
99
|
(pass) InMemoryMandateStorage > Status updates based on score > should transition to rejected status [0.06ms]
|
|
100
|
-
(pass) InMemoryMandateStorage > Status updates based on score > should batch update all mandates [0.
|
|
101
|
-
(pass) InMemoryMandateStorage > Factory > should create in-memory storage [0.
|
|
100
|
+
(pass) InMemoryMandateStorage > Status updates based on score > should batch update all mandates [0.17ms]
|
|
101
|
+
(pass) InMemoryMandateStorage > Factory > should create in-memory storage [0.02ms]
|
|
102
102
|
(pass) InMemoryMandateStorage > Factory > should throw on unknown backend [0.02ms]
|
|
103
103
|
|
|
104
104
|
src/skills.test.ts:
|
|
105
|
-
(pass) parseFrontmatter > parses valid frontmatter with all fields [1.
|
|
106
|
-
(pass) parseFrontmatter > parses minimal frontmatter with only required fields [0.
|
|
107
|
-
(pass) parseFrontmatter > returns null for missing name value [0.
|
|
108
|
-
(pass) parseFrontmatter > returns empty result for content without frontmatter [0.
|
|
105
|
+
(pass) parseFrontmatter > parses valid frontmatter with all fields [1.76ms]
|
|
106
|
+
(pass) parseFrontmatter > parses minimal frontmatter with only required fields [0.11ms]
|
|
107
|
+
(pass) parseFrontmatter > returns null for missing name value [0.06ms]
|
|
108
|
+
(pass) parseFrontmatter > returns empty result for content without frontmatter [0.01ms]
|
|
109
109
|
(pass) parseFrontmatter > returns empty result for empty content
|
|
110
110
|
(pass) parseFrontmatter > handles frontmatter with extra fields [0.08ms]
|
|
111
111
|
(pass) parseFrontmatter > handles multiline description [0.05ms]
|
|
112
|
-
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-
|
|
112
|
+
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md: Skill at /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md missing required 'name' field
|
|
113
113
|
[skills] Failed to load /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md: Skill at /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md missing required 'name' field
|
|
114
|
-
(pass) discoverSkills > discovers skills in project directory [
|
|
115
|
-
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-
|
|
114
|
+
(pass) discoverSkills > discovers skills in project directory [9.28ms]
|
|
115
|
+
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md: Skill at /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md missing required 'name' field
|
|
116
116
|
[skills] Failed to load /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md: Skill at /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md missing required 'name' field
|
|
117
|
-
(pass) discoverSkills > skips skills with invalid frontmatter [
|
|
118
|
-
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-
|
|
117
|
+
(pass) discoverSkills > skips skills with invalid frontmatter [3.72ms]
|
|
118
|
+
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md: Skill at /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md missing required 'name' field
|
|
119
119
|
[skills] Failed to load /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md: Skill at /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md missing required 'name' field
|
|
120
|
-
(pass) discoverSkills > caches discovered skills [
|
|
121
|
-
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-
|
|
120
|
+
(pass) discoverSkills > caches discovered skills [3.11ms]
|
|
121
|
+
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md: Skill at /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md missing required 'name' field
|
|
122
122
|
[skills] Failed to load /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md: Skill at /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md missing required 'name' field
|
|
123
|
-
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-
|
|
123
|
+
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md: Skill at /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md missing required 'name' field
|
|
124
124
|
[skills] Failed to load /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md: Skill at /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md missing required 'name' field
|
|
125
|
-
(pass) discoverSkills > invalidates cache when requested [
|
|
126
|
-
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-
|
|
125
|
+
(pass) discoverSkills > invalidates cache when requested [35.28ms]
|
|
126
|
+
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md: Skill at /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md missing required 'name' field
|
|
127
127
|
[skills] Failed to load /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md: Skill at /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md missing required 'name' field
|
|
128
|
-
(pass) getSkill > returns skill by exact name [
|
|
129
|
-
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-
|
|
128
|
+
(pass) getSkill > returns skill by exact name [10.93ms]
|
|
129
|
+
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md: Skill at /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md missing required 'name' field
|
|
130
130
|
[skills] Failed to load /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md: Skill at /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md missing required 'name' field
|
|
131
|
-
(pass) getSkill > returns null for non-existent skill [
|
|
132
|
-
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-
|
|
131
|
+
(pass) getSkill > returns null for non-existent skill [11.51ms]
|
|
132
|
+
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md: Skill at /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md missing required 'name' field
|
|
133
133
|
[skills] Failed to load /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md: Skill at /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md missing required 'name' field
|
|
134
|
-
(pass) getSkill > returns null for empty name [
|
|
135
|
-
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-
|
|
134
|
+
(pass) getSkill > returns null for empty name [10.31ms]
|
|
135
|
+
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md: Skill at /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md missing required 'name' field
|
|
136
136
|
[skills] Failed to load /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md: Skill at /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md missing required 'name' field
|
|
137
|
-
(pass) listSkills > returns skill refs with name, description, and path [
|
|
138
|
-
(pass) path traversal protection > detects basic path traversal attempts [0.
|
|
139
|
-
(pass) path traversal protection > allows valid relative paths [0.
|
|
140
|
-
(pass) path traversal protection > resolve + relative check catches encoded traversal
|
|
141
|
-
(pass) ES module compatibility > import.meta.url is available [0.
|
|
142
|
-
(pass) ES module compatibility > can construct path from import.meta.url [0.
|
|
143
|
-
(pass) validateCSOCompliance > description validation > passes for CSO-compliant description with 'Use when' [0.
|
|
144
|
-
(pass) validateCSOCompliance > description validation > warns when missing 'Use when...' pattern
|
|
145
|
-
(pass) validateCSOCompliance > description validation > warns for first-person voice [0.
|
|
146
|
-
(pass) validateCSOCompliance > description validation > warns for second-person voice [0.
|
|
147
|
-
(pass) validateCSOCompliance > description validation > rejects description > 1024 chars [0.
|
|
137
|
+
(pass) listSkills > returns skill refs with name, description, and path [18.10ms]
|
|
138
|
+
(pass) path traversal protection > detects basic path traversal attempts [0.07ms]
|
|
139
|
+
(pass) path traversal protection > allows valid relative paths [0.03ms]
|
|
140
|
+
(pass) path traversal protection > resolve + relative check catches encoded traversal
|
|
141
|
+
(pass) ES module compatibility > import.meta.url is available [0.07ms]
|
|
142
|
+
(pass) ES module compatibility > can construct path from import.meta.url [0.03ms]
|
|
143
|
+
(pass) validateCSOCompliance > description validation > passes for CSO-compliant description with 'Use when' [0.13ms]
|
|
144
|
+
(pass) validateCSOCompliance > description validation > warns when missing 'Use when...' pattern
|
|
145
|
+
(pass) validateCSOCompliance > description validation > warns for first-person voice [0.06ms]
|
|
146
|
+
(pass) validateCSOCompliance > description validation > warns for second-person voice [0.02ms]
|
|
147
|
+
(pass) validateCSOCompliance > description validation > rejects description > 1024 chars [0.04ms]
|
|
148
148
|
(pass) validateCSOCompliance > description validation > suggests improvement for description > 500 chars [0.02ms]
|
|
149
149
|
(pass) validateCSOCompliance > description validation > accepts description < 500 chars with no length warnings
|
|
150
|
-
(pass) validateCSOCompliance > name validation > accepts gerund-based names [0.
|
|
151
|
-
(pass) validateCSOCompliance > name validation > accepts verb-first names
|
|
152
|
-
(pass) validateCSOCompliance > name validation > accepts action verbs [0.
|
|
153
|
-
(pass) validateCSOCompliance > name validation > suggests verb-first for noun-first names [0.
|
|
154
|
-
(pass) validateCSOCompliance > name validation > warns for name > 64 chars [0.
|
|
155
|
-
(pass) validateCSOCompliance > name validation > warns for invalid name format [0.
|
|
156
|
-
(pass) validateCSOCompliance > comprehensive examples > perfect CSO compliance
|
|
150
|
+
(pass) validateCSOCompliance > name validation > accepts gerund-based names [0.02ms]
|
|
151
|
+
(pass) validateCSOCompliance > name validation > accepts verb-first names [0.01ms]
|
|
152
|
+
(pass) validateCSOCompliance > name validation > accepts action verbs [0.02ms]
|
|
153
|
+
(pass) validateCSOCompliance > name validation > suggests verb-first for noun-first names [0.02ms]
|
|
154
|
+
(pass) validateCSOCompliance > name validation > warns for name > 64 chars [0.01ms]
|
|
155
|
+
(pass) validateCSOCompliance > name validation > warns for invalid name format [0.01ms]
|
|
156
|
+
(pass) validateCSOCompliance > comprehensive examples > perfect CSO compliance
|
|
157
157
|
(pass) validateCSOCompliance > comprehensive examples > multiple critical issues [0.03ms]
|
|
158
|
+
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md: Skill at /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md missing required 'name' field
|
|
158
159
|
[skills] Failed to load /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md: Skill at /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md missing required 'name' field
|
|
159
|
-
(pass)
|
|
160
|
+
(pass) deprecation warnings > listSkills emits deprecation warning [10.68ms]
|
|
161
|
+
[skills] Failed to load /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md: Skill at /Users/joel/Code/joelhooks/opencode-swarm-plugin/packages/opencode-swarm-plugin/.test-skills-1766517392485-7ssinh/.opencode/skills/invalid-skill/SKILL.md missing required 'name' field
|
|
160
162
|
[skills] Failed to load /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md: Skill at /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md missing required 'name' field
|
|
161
|
-
(pass)
|
|
163
|
+
(pass) deprecation warnings > getSkill does NOT emit deprecation warning (internal function) [13.85ms]
|
|
162
164
|
[skills] Failed to load /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md: Skill at /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md missing required 'name' field
|
|
163
|
-
(pass) edge cases > handles
|
|
165
|
+
(pass) edge cases > handles non-existent skills directory gracefully [8.98ms]
|
|
166
|
+
[skills] Failed to load /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md: Skill at /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md missing required 'name' field
|
|
167
|
+
(pass) edge cases > handles empty skills directory [9.58ms]
|
|
168
|
+
[skills] Failed to load /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md: Skill at /Users/joel/.config/opencode/skills/ai-optimized-content/SKILL.md missing required 'name' field
|
|
169
|
+
(pass) edge cases > handles skill directory without SKILL.md [3.54ms]
|
|
164
170
|
|
|
165
171
|
src/anti-patterns.test.ts:
|
|
166
|
-
(pass) PatternKindSchema > validates 'pattern' kind [0.
|
|
167
|
-
(pass) PatternKindSchema > validates 'anti_pattern' kind [0.
|
|
168
|
-
(pass) PatternKindSchema > rejects invalid kind [0.
|
|
169
|
-
(pass) DecompositionPatternSchema > validates a complete valid pattern [0.
|
|
172
|
+
(pass) PatternKindSchema > validates 'pattern' kind [0.02ms]
|
|
173
|
+
(pass) PatternKindSchema > validates 'anti_pattern' kind [0.01ms]
|
|
174
|
+
(pass) PatternKindSchema > rejects invalid kind [0.16ms]
|
|
175
|
+
(pass) DecompositionPatternSchema > validates a complete valid pattern [0.44ms]
|
|
170
176
|
(pass) DecompositionPatternSchema > validates a valid anti-pattern [0.06ms]
|
|
171
|
-
(pass) DecompositionPatternSchema > applies default values for optional fields [0.
|
|
172
|
-
(pass) DecompositionPatternSchema > rejects negative success_count [0.
|
|
173
|
-
(pass) DecompositionPatternSchema > rejects negative failure_count [0.
|
|
174
|
-
(pass) DecompositionPatternSchema > rejects invalid kind [0.
|
|
175
|
-
(pass) PatternInversionResultSchema > validates a complete inversion result [0.
|
|
176
|
-
(pass) shouldInvertPattern > returns true when failure rate exceeds 60% [0.
|
|
177
|
-
(pass) shouldInvertPattern > returns true when failure rate equals 60%
|
|
177
|
+
(pass) DecompositionPatternSchema > applies default values for optional fields [0.03ms]
|
|
178
|
+
(pass) DecompositionPatternSchema > rejects negative success_count [0.09ms]
|
|
179
|
+
(pass) DecompositionPatternSchema > rejects negative failure_count [0.04ms]
|
|
180
|
+
(pass) DecompositionPatternSchema > rejects invalid kind [0.05ms]
|
|
181
|
+
(pass) PatternInversionResultSchema > validates a complete inversion result [0.14ms]
|
|
182
|
+
(pass) shouldInvertPattern > returns true when failure rate exceeds 60% [0.02ms]
|
|
183
|
+
(pass) shouldInvertPattern > returns true when failure rate equals 60% [0.01ms]
|
|
178
184
|
(pass) shouldInvertPattern > returns false when failure rate is below 60%
|
|
179
185
|
(pass) shouldInvertPattern > returns false when failure rate is just below threshold
|
|
180
|
-
(pass) shouldInvertPattern > returns false with insufficient observations (< minObservations)
|
|
186
|
+
(pass) shouldInvertPattern > returns false with insufficient observations (< minObservations) [0.01ms]
|
|
181
187
|
(pass) shouldInvertPattern > returns false when exactly at minObservations but low failure rate
|
|
182
|
-
(pass) shouldInvertPattern > returns true when at minObservations with high failure rate
|
|
183
|
-
(pass) shouldInvertPattern > returns false when already an anti-pattern
|
|
188
|
+
(pass) shouldInvertPattern > returns true when at minObservations with high failure rate
|
|
189
|
+
(pass) shouldInvertPattern > returns false when already an anti-pattern
|
|
184
190
|
(pass) shouldInvertPattern > returns false with zero observations
|
|
185
191
|
(pass) shouldInvertPattern > respects custom config minObservations
|
|
186
192
|
(pass) shouldInvertPattern > respects custom config failureRatioThreshold
|
|
187
|
-
(pass) invertToAntiPattern > converts pattern to anti-pattern with correct kind [0.
|
|
188
|
-
(pass) invertToAntiPattern > prefixes content with AVOID: [0.
|
|
193
|
+
(pass) invertToAntiPattern > converts pattern to anti-pattern with correct kind [0.06ms]
|
|
194
|
+
(pass) invertToAntiPattern > prefixes content with AVOID: [0.02ms]
|
|
189
195
|
(pass) invertToAntiPattern > appends reason to content
|
|
190
|
-
(pass) invertToAntiPattern > preserves success and failure counts [0.
|
|
191
|
-
(pass) invertToAntiPattern > preserves example_beads
|
|
192
|
-
(pass) invertToAntiPattern > preserves tags [0.
|
|
193
|
-
(pass) invertToAntiPattern > generates new ID with 'anti-' prefix [0.
|
|
194
|
-
(pass) invertToAntiPattern > stores reason in inverted pattern
|
|
196
|
+
(pass) invertToAntiPattern > preserves success and failure counts [0.01ms]
|
|
197
|
+
(pass) invertToAntiPattern > preserves example_beads [0.02ms]
|
|
198
|
+
(pass) invertToAntiPattern > preserves tags [0.02ms]
|
|
199
|
+
(pass) invertToAntiPattern > generates new ID with 'anti-' prefix [0.01ms]
|
|
200
|
+
(pass) invertToAntiPattern > stores reason in inverted pattern
|
|
195
201
|
(pass) invertToAntiPattern > updates updated_at timestamp [0.02ms]
|
|
196
202
|
(pass) invertToAntiPattern > returns original pattern in result [0.01ms]
|
|
197
203
|
(pass) invertToAntiPattern > returns reason in result
|
|
198
|
-
(pass) invertToAntiPattern > cleans existing AVOID: prefix [0.
|
|
199
|
-
(pass) invertToAntiPattern > cleans existing DO NOT: prefix
|
|
200
|
-
(pass) invertToAntiPattern > cleans existing NEVER: prefix
|
|
204
|
+
(pass) invertToAntiPattern > cleans existing AVOID: prefix [0.06ms]
|
|
205
|
+
(pass) invertToAntiPattern > cleans existing DO NOT: prefix [0.05ms]
|
|
206
|
+
(pass) invertToAntiPattern > cleans existing NEVER: prefix [0.02ms]
|
|
201
207
|
(pass) invertToAntiPattern > respects custom antiPatternPrefix
|
|
202
208
|
(pass) recordPatternObservation > increments success count on success [0.05ms]
|
|
203
209
|
(pass) recordPatternObservation > increments failure count on failure [0.02ms]
|
|
204
|
-
(pass) recordPatternObservation > adds bead to example_beads when provided [0.
|
|
205
|
-
(pass) recordPatternObservation > does not modify example_beads when beadId not provided
|
|
210
|
+
(pass) recordPatternObservation > adds bead to example_beads when provided [0.02ms]
|
|
211
|
+
(pass) recordPatternObservation > does not modify example_beads when beadId not provided [0.02ms]
|
|
206
212
|
(pass) recordPatternObservation > limits example_beads to MAX_EXAMPLE_BEADS (10) [0.04ms]
|
|
207
213
|
(pass) recordPatternObservation > keeps newest beads when trimming example_beads [0.02ms]
|
|
208
|
-
(pass) recordPatternObservation > updates updated_at timestamp [0.
|
|
214
|
+
(pass) recordPatternObservation > updates updated_at timestamp [0.02ms]
|
|
209
215
|
(pass) recordPatternObservation > does not invert when below threshold
|
|
210
|
-
(pass) recordPatternObservation > inverts when crossing threshold [0.
|
|
211
|
-
(pass) recordPatternObservation > includes failure statistics in inversion reason [0.
|
|
216
|
+
(pass) recordPatternObservation > inverts when crossing threshold [0.01ms]
|
|
217
|
+
(pass) recordPatternObservation > includes failure statistics in inversion reason [0.02ms]
|
|
212
218
|
(pass) recordPatternObservation > does not invert already-inverted anti-patterns [0.01ms]
|
|
213
|
-
(pass) recordPatternObservation > respects custom config for inversion
|
|
219
|
+
(pass) recordPatternObservation > respects custom config for inversion
|
|
214
220
|
(pass) recordPatternObservation > preserves original pattern fields
|
|
215
|
-
(pass) extractPatternsFromDescription > detects 'split by file type' pattern [0.
|
|
216
|
-
(pass) extractPatternsFromDescription > detects 'splitting by file type' variant
|
|
221
|
+
(pass) extractPatternsFromDescription > detects 'split by file type' pattern [0.13ms]
|
|
222
|
+
(pass) extractPatternsFromDescription > detects 'splitting by file type' variant
|
|
217
223
|
(pass) extractPatternsFromDescription > detects 'split by component' pattern
|
|
218
224
|
(pass) extractPatternsFromDescription > detects 'split by layer' pattern
|
|
219
225
|
(pass) extractPatternsFromDescription > detects 'split by feature' pattern
|
|
220
|
-
(pass) extractPatternsFromDescription > detects 'one file per task' pattern
|
|
221
|
-
(pass) extractPatternsFromDescription > detects 'shared types first' pattern
|
|
226
|
+
(pass) extractPatternsFromDescription > detects 'one file per task' pattern
|
|
227
|
+
(pass) extractPatternsFromDescription > detects 'shared types first' pattern
|
|
222
228
|
(pass) extractPatternsFromDescription > detects 'API routes separate' pattern
|
|
223
229
|
(pass) extractPatternsFromDescription > detects 'tests with code' pattern
|
|
224
230
|
(pass) extractPatternsFromDescription > detects 'tests in separate subtask' pattern
|
|
@@ -226,248 +232,250 @@ src/anti-patterns.test.ts:
|
|
|
226
232
|
(pass) extractPatternsFromDescription > detects 'sequential order' pattern
|
|
227
233
|
(pass) extractPatternsFromDescription > detects 'dependency chain' pattern
|
|
228
234
|
(pass) extractPatternsFromDescription > returns empty array for unrecognized descriptions
|
|
229
|
-
(pass) extractPatternsFromDescription > detects multiple patterns in one description
|
|
230
|
-
(pass) extractPatternsFromDescription > is case-insensitive
|
|
231
|
-
(pass) extractPatternsFromDescription > handles partial matches in longer sentences
|
|
235
|
+
(pass) extractPatternsFromDescription > detects multiple patterns in one description
|
|
236
|
+
(pass) extractPatternsFromDescription > is case-insensitive
|
|
237
|
+
(pass) extractPatternsFromDescription > handles partial matches in longer sentences
|
|
232
238
|
(pass) createPattern > creates pattern with provided content [0.03ms]
|
|
233
239
|
(pass) createPattern > creates pattern with kind='pattern' [0.01ms]
|
|
234
240
|
(pass) createPattern > creates pattern with is_negative=false
|
|
235
|
-
(pass) createPattern > initializes counts to zero
|
|
236
|
-
(pass) createPattern > includes provided tags
|
|
241
|
+
(pass) createPattern > initializes counts to zero [0.01ms]
|
|
242
|
+
(pass) createPattern > includes provided tags
|
|
237
243
|
(pass) createPattern > defaults to empty tags array
|
|
238
|
-
(pass) createPattern > generates unique ID
|
|
239
|
-
(pass) createPattern > sets created_at timestamp [0.
|
|
244
|
+
(pass) createPattern > generates unique ID
|
|
245
|
+
(pass) createPattern > sets created_at timestamp [0.02ms]
|
|
240
246
|
(pass) createPattern > sets updated_at equal to created_at
|
|
241
247
|
(pass) createPattern > initializes example_beads to empty array
|
|
242
248
|
(pass) formatAntiPatternsForPrompt > formats anti-patterns with header [0.04ms]
|
|
243
|
-
(pass) formatAntiPatternsForPrompt > filters out non-anti-patterns [0.
|
|
244
|
-
(pass) formatAntiPatternsForPrompt > returns empty string when no anti-patterns [0.
|
|
249
|
+
(pass) formatAntiPatternsForPrompt > filters out non-anti-patterns [0.02ms]
|
|
250
|
+
(pass) formatAntiPatternsForPrompt > returns empty string when no anti-patterns [0.02ms]
|
|
245
251
|
(pass) formatAntiPatternsForPrompt > returns empty string for empty array [0.01ms]
|
|
246
|
-
(pass) formatAntiPatternsForPrompt > formats multiple anti-patterns [0.
|
|
247
|
-
(pass) formatSuccessfulPatternsForPrompt > filters patterns below minSuccessRate [0.
|
|
248
|
-
(pass) formatSuccessfulPatternsForPrompt > includes success rate percentage in output [0.
|
|
249
|
-
(pass) formatSuccessfulPatternsForPrompt > filters out anti-patterns
|
|
250
|
-
(pass) formatSuccessfulPatternsForPrompt > filters out patterns with < 2 total observations
|
|
251
|
-
(pass) formatSuccessfulPatternsForPrompt > returns empty string when no qualifying patterns
|
|
252
|
+
(pass) formatAntiPatternsForPrompt > formats multiple anti-patterns [0.02ms]
|
|
253
|
+
(pass) formatSuccessfulPatternsForPrompt > filters patterns below minSuccessRate [0.05ms]
|
|
254
|
+
(pass) formatSuccessfulPatternsForPrompt > includes success rate percentage in output [0.01ms]
|
|
255
|
+
(pass) formatSuccessfulPatternsForPrompt > filters out anti-patterns
|
|
256
|
+
(pass) formatSuccessfulPatternsForPrompt > filters out patterns with < 2 total observations
|
|
257
|
+
(pass) formatSuccessfulPatternsForPrompt > returns empty string when no qualifying patterns
|
|
252
258
|
(pass) formatSuccessfulPatternsForPrompt > returns empty string for empty array
|
|
253
259
|
(pass) formatSuccessfulPatternsForPrompt > uses default minSuccessRate of 0.7 [0.01ms]
|
|
254
|
-
(pass) formatSuccessfulPatternsForPrompt > respects custom minSuccessRate
|
|
255
|
-
(pass) formatSuccessfulPatternsForPrompt > formats multiple successful patterns
|
|
256
|
-
(pass) formatSuccessfulPatternsForPrompt > includes header when patterns exist
|
|
257
|
-
(pass) InMemoryPatternStorage > stores and retrieves a pattern [0.
|
|
260
|
+
(pass) formatSuccessfulPatternsForPrompt > respects custom minSuccessRate
|
|
261
|
+
(pass) formatSuccessfulPatternsForPrompt > formats multiple successful patterns [0.01ms]
|
|
262
|
+
(pass) formatSuccessfulPatternsForPrompt > includes header when patterns exist
|
|
263
|
+
(pass) InMemoryPatternStorage > stores and retrieves a pattern [0.09ms]
|
|
258
264
|
(pass) InMemoryPatternStorage > returns null for non-existent pattern [0.02ms]
|
|
259
265
|
(pass) InMemoryPatternStorage > updates existing pattern on store [0.03ms]
|
|
260
|
-
(pass) InMemoryPatternStorage > getAll returns all stored patterns [0.
|
|
261
|
-
(pass) InMemoryPatternStorage > getAll returns empty array when no patterns [0.
|
|
262
|
-
(pass) InMemoryPatternStorage > getAntiPatterns filters by kind [0.
|
|
263
|
-
(pass) InMemoryPatternStorage > getByTag filters by tag [0.
|
|
266
|
+
(pass) InMemoryPatternStorage > getAll returns all stored patterns [0.06ms]
|
|
267
|
+
(pass) InMemoryPatternStorage > getAll returns empty array when no patterns [0.01ms]
|
|
268
|
+
(pass) InMemoryPatternStorage > getAntiPatterns filters by kind [0.06ms]
|
|
269
|
+
(pass) InMemoryPatternStorage > getByTag filters by tag [0.07ms]
|
|
264
270
|
(pass) InMemoryPatternStorage > getByTag returns empty for non-existent tag [0.03ms]
|
|
265
|
-
(pass) InMemoryPatternStorage > findByContent finds patterns by substring [0.
|
|
266
|
-
(pass) InMemoryPatternStorage > findByContent is case-insensitive [0.
|
|
271
|
+
(pass) InMemoryPatternStorage > findByContent finds patterns by substring [0.05ms]
|
|
272
|
+
(pass) InMemoryPatternStorage > findByContent is case-insensitive [0.04ms]
|
|
267
273
|
(pass) InMemoryPatternStorage > findByContent returns empty for no matches [0.02ms]
|
|
268
274
|
|
|
269
275
|
src/output-guardrails.test.ts:
|
|
270
|
-
(pass) truncateWithBoundaries > returns unchanged text when under limit [0.
|
|
271
|
-
(pass) truncateWithBoundaries > preserves complete JSON objects [6.
|
|
272
|
-
(pass) truncateWithBoundaries > preserves nested JSON structure [0.
|
|
273
|
-
(pass) truncateWithBoundaries > preserves code block boundaries [0.
|
|
276
|
+
(pass) truncateWithBoundaries > returns unchanged text when under limit [0.02ms]
|
|
277
|
+
(pass) truncateWithBoundaries > preserves complete JSON objects [6.38ms]
|
|
278
|
+
(pass) truncateWithBoundaries > preserves nested JSON structure [0.11ms]
|
|
279
|
+
(pass) truncateWithBoundaries > preserves code block boundaries [0.10ms]
|
|
274
280
|
(pass) truncateWithBoundaries > preserves markdown header boundaries [0.03ms]
|
|
275
|
-
(pass) truncateWithBoundaries > handles text without structure boundaries [0.
|
|
281
|
+
(pass) truncateWithBoundaries > handles text without structure boundaries [0.01ms]
|
|
276
282
|
(pass) truncateWithBoundaries > adds truncation suffix with character count [0.04ms]
|
|
277
|
-
(pass) truncateWithBoundaries > avoids truncating mid-word [0.
|
|
283
|
+
(pass) truncateWithBoundaries > avoids truncating mid-word [0.06ms]
|
|
278
284
|
(pass) truncateWithBoundaries > handles empty string
|
|
279
285
|
(pass) truncateWithBoundaries > handles exact limit length
|
|
280
286
|
(pass) truncateWithBoundaries > handles just over limit [0.01ms]
|
|
281
|
-
(pass) truncateWithBoundaries > extends limit by 20% to include matching braces
|
|
282
|
-
(pass) truncateWithBoundaries > extends limit by 20% to include closing code block [0.
|
|
283
|
-
(pass) guardrailOutput > skips configured tools
|
|
284
|
-
(pass) guardrailOutput > truncates oversized output for non-skip tools [0.
|
|
287
|
+
(pass) truncateWithBoundaries > extends limit by 20% to include matching braces [0.02ms]
|
|
288
|
+
(pass) truncateWithBoundaries > extends limit by 20% to include closing code block [0.03ms]
|
|
289
|
+
(pass) guardrailOutput > skips configured tools [0.04ms]
|
|
290
|
+
(pass) guardrailOutput > truncates oversized output for non-skip tools [0.61ms]
|
|
285
291
|
(pass) guardrailOutput > respects per-tool limits [0.16ms]
|
|
286
|
-
(pass) guardrailOutput > uses custom config when provided [0.
|
|
287
|
-
(pass) guardrailOutput > returns complete metadata [0.
|
|
288
|
-
(pass) guardrailOutput > handles all skip tools from DEFAULT_GUARDRAIL_CONFIG [0.
|
|
289
|
-
(pass) createMetrics > creates metrics entry from guardrail result [0.
|
|
290
|
-
(pass) createMetrics > timestamp is reasonable
|
|
292
|
+
(pass) guardrailOutput > uses custom config when provided [0.05ms]
|
|
293
|
+
(pass) guardrailOutput > returns complete metadata [0.27ms]
|
|
294
|
+
(pass) guardrailOutput > handles all skip tools from DEFAULT_GUARDRAIL_CONFIG [0.04ms]
|
|
295
|
+
(pass) createMetrics > creates metrics entry from guardrail result [0.03ms]
|
|
296
|
+
(pass) createMetrics > timestamp is reasonable [0.01ms]
|
|
291
297
|
(pass) DEFAULT_GUARDRAIL_CONFIG > has sensible defaults [0.01ms]
|
|
292
298
|
(pass) DEFAULT_GUARDRAIL_CONFIG > includes higher limits for code/doc tools
|
|
293
299
|
(pass) DEFAULT_GUARDRAIL_CONFIG > includes lower limits for stats tools
|
|
294
300
|
(pass) DEFAULT_GUARDRAIL_CONFIG > skips all internal coordination tools [0.02ms]
|
|
295
|
-
(pass) edge cases > handles JSON array at truncation boundary [0.
|
|
296
|
-
(pass) edge cases > handles mixed code blocks and JSON [0.
|
|
297
|
-
(pass) edge cases > handles unicode characters correctly [0.
|
|
301
|
+
(pass) edge cases > handles JSON array at truncation boundary [0.03ms]
|
|
302
|
+
(pass) edge cases > handles mixed code blocks and JSON [0.02ms]
|
|
303
|
+
(pass) edge cases > handles unicode characters correctly [0.02ms]
|
|
298
304
|
(pass) edge cases > handles CRLF line endings [0.01ms]
|
|
299
305
|
|
|
300
306
|
src/pattern-maturity.test.ts:
|
|
301
|
-
(pass) calculateDecayedCounts > returns zero counts for empty feedback [0.
|
|
307
|
+
(pass) calculateDecayedCounts > returns zero counts for empty feedback [0.10ms]
|
|
302
308
|
(pass) calculateDecayedCounts > counts recent helpful feedback at full weight [0.04ms]
|
|
303
|
-
(pass) calculateDecayedCounts > counts recent harmful feedback at full weight
|
|
304
|
-
(pass) calculateDecayedCounts > applies decay to old feedback
|
|
305
|
-
(pass) calculateDecayedCounts > handles mixed feedback types
|
|
306
|
-
(pass) calculateDecayedCounts > respects weight parameter
|
|
307
|
-
(pass) calculateDecayedCounts > uses custom config half-life
|
|
308
|
-
(pass) calculateDecayedCounts > uses custom now parameter for decay calculation
|
|
309
|
-
(pass) calculateMaturityState > returns candidate with no feedback
|
|
310
|
-
(pass) calculateMaturityState > returns candidate with insufficient feedback
|
|
309
|
+
(pass) calculateDecayedCounts > counts recent harmful feedback at full weight
|
|
310
|
+
(pass) calculateDecayedCounts > applies decay to old feedback [0.03ms]
|
|
311
|
+
(pass) calculateDecayedCounts > handles mixed feedback types [0.02ms]
|
|
312
|
+
(pass) calculateDecayedCounts > respects weight parameter [0.02ms]
|
|
313
|
+
(pass) calculateDecayedCounts > uses custom config half-life [0.01ms]
|
|
314
|
+
(pass) calculateDecayedCounts > uses custom now parameter for decay calculation [0.02ms]
|
|
315
|
+
(pass) calculateMaturityState > returns candidate with no feedback [0.04ms]
|
|
316
|
+
(pass) calculateMaturityState > returns candidate with insufficient feedback [0.02ms]
|
|
311
317
|
(pass) calculateMaturityState > returns established with enough neutral feedback
|
|
312
|
-
(pass) calculateMaturityState > returns proven with strong positive feedback [0.
|
|
313
|
-
(pass) calculateMaturityState > returns deprecated with high harmful ratio [0.
|
|
314
|
-
(pass) calculateMaturityState > proven requires minimum helpful count
|
|
315
|
-
(pass) calculateMaturityState > proven requires low harmful ratio
|
|
316
|
-
(pass) calculateMaturityState > deprecation takes priority over proven [0.
|
|
318
|
+
(pass) calculateMaturityState > returns proven with strong positive feedback [0.03ms]
|
|
319
|
+
(pass) calculateMaturityState > returns deprecated with high harmful ratio [0.01ms]
|
|
320
|
+
(pass) calculateMaturityState > proven requires minimum helpful count [0.02ms]
|
|
321
|
+
(pass) calculateMaturityState > proven requires low harmful ratio [0.07ms]
|
|
322
|
+
(pass) calculateMaturityState > deprecation takes priority over proven [0.07ms]
|
|
317
323
|
(pass) calculateMaturityState > uses custom config thresholds [0.02ms]
|
|
318
|
-
(pass) calculateMaturityState > accounts for decay in state calculation [0.
|
|
319
|
-
(pass) createPatternMaturity > creates initial maturity in candidate state
|
|
324
|
+
(pass) calculateMaturityState > accounts for decay in state calculation [0.02ms]
|
|
325
|
+
(pass) createPatternMaturity > creates initial maturity in candidate state [0.03ms]
|
|
320
326
|
(pass) createPatternMaturity > sets last_validated timestamp [0.02ms]
|
|
321
327
|
(pass) createPatternMaturity > does not set promoted_at or deprecated_at initially
|
|
322
|
-
(pass) updatePatternMaturity > updates state based on feedback [0.
|
|
323
|
-
(pass) updatePatternMaturity > updates helpful and harmful counts [0.
|
|
328
|
+
(pass) updatePatternMaturity > updates state based on feedback [0.05ms]
|
|
329
|
+
(pass) updatePatternMaturity > updates helpful and harmful counts [0.03ms]
|
|
324
330
|
(pass) updatePatternMaturity > sets promoted_at on first transition to proven [0.03ms]
|
|
325
|
-
(pass) updatePatternMaturity > does not update promoted_at if already proven [0.
|
|
331
|
+
(pass) updatePatternMaturity > does not update promoted_at if already proven [0.03ms]
|
|
326
332
|
(pass) updatePatternMaturity > sets deprecated_at on first transition to deprecated [0.02ms]
|
|
327
|
-
(pass) updatePatternMaturity > does not update deprecated_at if already deprecated
|
|
328
|
-
(pass) updatePatternMaturity > updates last_validated timestamp
|
|
329
|
-
(pass) updatePatternMaturity > handles state transitions: candidate -> established
|
|
330
|
-
(pass) updatePatternMaturity > handles state transitions: established -> proven
|
|
331
|
-
(pass) updatePatternMaturity > handles state transitions: proven -> deprecated
|
|
332
|
-
(pass) updatePatternMaturity > handles empty feedback array
|
|
333
|
+
(pass) updatePatternMaturity > does not update deprecated_at if already deprecated [0.03ms]
|
|
334
|
+
(pass) updatePatternMaturity > updates last_validated timestamp [0.02ms]
|
|
335
|
+
(pass) updatePatternMaturity > handles state transitions: candidate -> established [0.01ms]
|
|
336
|
+
(pass) updatePatternMaturity > handles state transitions: established -> proven [0.04ms]
|
|
337
|
+
(pass) updatePatternMaturity > handles state transitions: proven -> deprecated [0.05ms]
|
|
338
|
+
(pass) updatePatternMaturity > handles empty feedback array [0.01ms]
|
|
333
339
|
[PatternMaturity] Promoting candidate with insufficient data: test-pattern (0 helpful observations)
|
|
334
|
-
(pass) promotePattern > promotes candidate to proven [0.
|
|
335
|
-
(pass) promotePattern > promotes established to proven
|
|
340
|
+
(pass) promotePattern > promotes candidate to proven [0.03ms]
|
|
341
|
+
(pass) promotePattern > promotes established to proven [0.01ms]
|
|
336
342
|
[PatternMaturity] Promoting candidate with insufficient data: test-pattern (0 helpful observations)
|
|
337
|
-
(pass) promotePattern > sets promoted_at timestamp
|
|
343
|
+
(pass) promotePattern > sets promoted_at timestamp [0.02ms]
|
|
338
344
|
[PatternMaturity] Promoting candidate with insufficient data: test-pattern (0 helpful observations)
|
|
339
|
-
(pass) promotePattern > updates last_validated timestamp
|
|
340
|
-
(pass) promotePattern > throws error when promoting deprecated pattern
|
|
345
|
+
(pass) promotePattern > updates last_validated timestamp [0.01ms]
|
|
346
|
+
(pass) promotePattern > throws error when promoting deprecated pattern [0.02ms]
|
|
341
347
|
[PatternMaturity] Pattern already proven: test-pattern
|
|
342
|
-
(pass) promotePattern > returns unchanged maturity when already proven
|
|
343
|
-
(pass) deprecatePattern > deprecates candidate pattern
|
|
344
|
-
(pass) deprecatePattern > deprecates established pattern
|
|
345
|
-
(pass) deprecatePattern > deprecates proven pattern
|
|
348
|
+
(pass) promotePattern > returns unchanged maturity when already proven [0.02ms]
|
|
349
|
+
(pass) deprecatePattern > deprecates candidate pattern [0.01ms]
|
|
350
|
+
(pass) deprecatePattern > deprecates established pattern [0.01ms]
|
|
351
|
+
(pass) deprecatePattern > deprecates proven pattern
|
|
346
352
|
(pass) deprecatePattern > sets deprecated_at timestamp [0.01ms]
|
|
347
|
-
(pass) deprecatePattern > updates last_validated timestamp
|
|
348
|
-
(pass) deprecatePattern > returns unchanged maturity when already deprecated
|
|
349
|
-
(pass) deprecatePattern > accepts optional reason parameter
|
|
350
|
-
(pass) getMaturityMultiplier > returns 0.5 for candidate
|
|
351
|
-
(pass) getMaturityMultiplier > returns 1.0 for established [0.
|
|
353
|
+
(pass) deprecatePattern > updates last_validated timestamp [0.01ms]
|
|
354
|
+
(pass) deprecatePattern > returns unchanged maturity when already deprecated [0.02ms]
|
|
355
|
+
(pass) deprecatePattern > accepts optional reason parameter
|
|
356
|
+
(pass) getMaturityMultiplier > returns 0.5 for candidate [0.01ms]
|
|
357
|
+
(pass) getMaturityMultiplier > returns 1.0 for established [0.01ms]
|
|
352
358
|
(pass) getMaturityMultiplier > returns 1.5 for proven
|
|
353
359
|
(pass) getMaturityMultiplier > returns 0 for deprecated
|
|
354
|
-
(pass) formatMaturityForPrompt > shows limited data for insufficient observations [0.
|
|
355
|
-
(pass) formatMaturityForPrompt > shows singular observation for count of 1
|
|
360
|
+
(pass) formatMaturityForPrompt > shows limited data for insufficient observations [0.03ms]
|
|
361
|
+
(pass) formatMaturityForPrompt > shows singular observation for count of 1 [0.01ms]
|
|
356
362
|
(pass) formatMaturityForPrompt > shows candidate with observation count when >= 3 [0.01ms]
|
|
357
363
|
(pass) formatMaturityForPrompt > shows established with percentages
|
|
358
364
|
(pass) formatMaturityForPrompt > shows proven with helpful percentage
|
|
359
365
|
(pass) formatMaturityForPrompt > shows deprecated with harmful percentage
|
|
360
366
|
(pass) formatMaturityForPrompt > rounds percentages correctly
|
|
361
|
-
(pass) formatMaturityForPrompt > handles zero counts edge case
|
|
367
|
+
(pass) formatMaturityForPrompt > handles zero counts edge case
|
|
362
368
|
(pass) formatPatternsWithMaturityForPrompt > formats empty map [0.04ms]
|
|
363
369
|
(pass) formatPatternsWithMaturityForPrompt > groups patterns by maturity state [0.04ms]
|
|
364
|
-
(pass) formatPatternsWithMaturityForPrompt > omits sections with no patterns
|
|
365
|
-
(pass) formatPatternsWithMaturityForPrompt > includes pattern maturity labels
|
|
366
|
-
(pass) formatPatternsWithMaturityForPrompt > maintains multiple patterns in same section [0.
|
|
367
|
-
(pass) formatPatternsWithMaturityForPrompt > formats section headers correctly
|
|
368
|
-
(pass) InMemoryMaturityStorage > store and get > stores and retrieves maturity by pattern ID [0.
|
|
369
|
-
(pass) InMemoryMaturityStorage > store and get > returns null for non-existent pattern
|
|
370
|
-
(pass) InMemoryMaturityStorage > store and get > overwrites existing maturity on store
|
|
371
|
-
(pass) InMemoryMaturityStorage > getAll > returns empty array when no maturities stored
|
|
372
|
-
(pass) InMemoryMaturityStorage > getAll > returns all stored maturities [0.
|
|
373
|
-
(pass) InMemoryMaturityStorage > getByState > returns empty array when no patterns match state
|
|
374
|
-
(pass) InMemoryMaturityStorage > getByState > returns only patterns matching state [0.
|
|
375
|
-
(pass) InMemoryMaturityStorage > getByState > handles multiple patterns with same state [0.
|
|
376
|
-
(pass) InMemoryMaturityStorage > storeFeedback and getFeedback > stores and retrieves feedback for pattern [0.
|
|
377
|
-
(pass) InMemoryMaturityStorage > storeFeedback and getFeedback > returns empty array for pattern with no feedback
|
|
370
|
+
(pass) formatPatternsWithMaturityForPrompt > omits sections with no patterns [0.03ms]
|
|
371
|
+
(pass) formatPatternsWithMaturityForPrompt > includes pattern maturity labels [0.01ms]
|
|
372
|
+
(pass) formatPatternsWithMaturityForPrompt > maintains multiple patterns in same section [0.02ms]
|
|
373
|
+
(pass) formatPatternsWithMaturityForPrompt > formats section headers correctly [0.02ms]
|
|
374
|
+
(pass) InMemoryMaturityStorage > store and get > stores and retrieves maturity by pattern ID [0.10ms]
|
|
375
|
+
(pass) InMemoryMaturityStorage > store and get > returns null for non-existent pattern [0.01ms]
|
|
376
|
+
(pass) InMemoryMaturityStorage > store and get > overwrites existing maturity on store [0.04ms]
|
|
377
|
+
(pass) InMemoryMaturityStorage > getAll > returns empty array when no maturities stored [0.03ms]
|
|
378
|
+
(pass) InMemoryMaturityStorage > getAll > returns all stored maturities [0.05ms]
|
|
379
|
+
(pass) InMemoryMaturityStorage > getByState > returns empty array when no patterns match state [0.04ms]
|
|
380
|
+
(pass) InMemoryMaturityStorage > getByState > returns only patterns matching state [0.06ms]
|
|
381
|
+
(pass) InMemoryMaturityStorage > getByState > handles multiple patterns with same state [0.04ms]
|
|
382
|
+
(pass) InMemoryMaturityStorage > storeFeedback and getFeedback > stores and retrieves feedback for pattern [0.06ms]
|
|
383
|
+
(pass) InMemoryMaturityStorage > storeFeedback and getFeedback > returns empty array for pattern with no feedback [0.01ms]
|
|
378
384
|
(pass) InMemoryMaturityStorage > storeFeedback and getFeedback > stores multiple feedback events for same pattern [0.04ms]
|
|
379
|
-
(pass) InMemoryMaturityStorage > storeFeedback and getFeedback > filters feedback by pattern ID [0.
|
|
380
|
-
(pass) InMemoryMaturityStorage > storeFeedback and getFeedback > preserves feedback event data [0.
|
|
381
|
-
(pass) InMemoryMaturityStorage > integration: full workflow > supports complete maturity tracking workflow [0.
|
|
385
|
+
(pass) InMemoryMaturityStorage > storeFeedback and getFeedback > filters feedback by pattern ID [0.04ms]
|
|
386
|
+
(pass) InMemoryMaturityStorage > storeFeedback and getFeedback > preserves feedback event data [0.03ms]
|
|
387
|
+
(pass) InMemoryMaturityStorage > integration: full workflow > supports complete maturity tracking workflow [0.06ms]
|
|
382
388
|
|
|
383
389
|
src/mandate-promotion.test.ts:
|
|
384
|
-
(pass) shouldPromote > candidate stays candidate with insufficient votes [0.
|
|
385
|
-
(pass) shouldPromote > candidate → established at threshold (net_votes >= 2) [0.
|
|
390
|
+
(pass) shouldPromote > candidate stays candidate with insufficient votes [0.05ms]
|
|
391
|
+
(pass) shouldPromote > candidate → established at threshold (net_votes >= 2) [0.02ms]
|
|
386
392
|
(pass) shouldPromote > candidate → established above threshold
|
|
387
393
|
(pass) shouldPromote > established stays established with insufficient mandate votes
|
|
388
394
|
(pass) shouldPromote > established stays established with low vote ratio
|
|
389
|
-
(pass) shouldPromote > established → mandate at threshold (net >= 5, ratio >= 0.7)
|
|
390
|
-
(pass) shouldPromote > established → mandate above threshold
|
|
391
|
-
(pass) shouldPromote > mandate stays mandate (no demotion)
|
|
392
|
-
(pass) shouldPromote > candidate → rejected with negative votes
|
|
393
|
-
(pass) shouldPromote > established → rejected with negative votes
|
|
395
|
+
(pass) shouldPromote > established → mandate at threshold (net >= 5, ratio >= 0.7) [0.02ms]
|
|
396
|
+
(pass) shouldPromote > established → mandate above threshold [0.01ms]
|
|
397
|
+
(pass) shouldPromote > mandate stays mandate (no demotion)
|
|
398
|
+
(pass) shouldPromote > candidate → rejected with negative votes
|
|
399
|
+
(pass) shouldPromote > established → rejected with negative votes
|
|
394
400
|
(pass) shouldPromote > rejected stays rejected (permanent)
|
|
395
|
-
(pass) shouldPromote > uses custom config thresholds [0.
|
|
396
|
-
(pass) evaluatePromotion > returns correct promotion result for candidate → established [0.
|
|
401
|
+
(pass) shouldPromote > uses custom config thresholds [0.01ms]
|
|
402
|
+
(pass) evaluatePromotion > returns correct promotion result for candidate → established [0.08ms]
|
|
397
403
|
(pass) evaluatePromotion > returns correct promotion result for established → mandate [0.02ms]
|
|
398
|
-
(pass) evaluatePromotion > returns correct promotion result for candidate → rejected
|
|
399
|
-
(pass) evaluatePromotion > returns correct result for no status change [0.
|
|
400
|
-
(pass) evaluatePromotion > returns correct result for mandate staying mandate
|
|
401
|
-
(pass) evaluatePromotion > returns correct result for rejected staying rejected
|
|
402
|
-
(pass) decay affects promotion timing > net_votes can decay below promotion threshold [0.
|
|
403
|
-
(pass) decay affects promotion timing > vote_ratio decay prevents mandate promotion
|
|
404
|
-
(pass) decay affects promotion timing > fresh votes can push over mandate threshold
|
|
404
|
+
(pass) evaluatePromotion > returns correct promotion result for candidate → rejected [0.02ms]
|
|
405
|
+
(pass) evaluatePromotion > returns correct result for no status change [0.02ms]
|
|
406
|
+
(pass) evaluatePromotion > returns correct result for mandate staying mandate [0.01ms]
|
|
407
|
+
(pass) evaluatePromotion > returns correct result for rejected staying rejected
|
|
408
|
+
(pass) decay affects promotion timing > net_votes can decay below promotion threshold [0.01ms]
|
|
409
|
+
(pass) decay affects promotion timing > vote_ratio decay prevents mandate promotion
|
|
410
|
+
(pass) decay affects promotion timing > fresh votes can push over mandate threshold [0.01ms]
|
|
405
411
|
(pass) formatPromotionResult > formats promoted result with arrow [0.02ms]
|
|
406
|
-
(pass) formatPromotionResult > formats no-change result without arrow [0.
|
|
407
|
-
(pass) evaluateBatchPromotions > evaluates multiple entries [0.
|
|
408
|
-
(pass) evaluateBatchPromotions > skips entries without scores
|
|
409
|
-
(pass) getStatusChanges > filters to only promoted entries [0.
|
|
410
|
-
(pass) groupByTransition > groups results by transition type [0.
|
|
412
|
+
(pass) formatPromotionResult > formats no-change result without arrow [0.01ms]
|
|
413
|
+
(pass) evaluateBatchPromotions > evaluates multiple entries [0.01ms]
|
|
414
|
+
(pass) evaluateBatchPromotions > skips entries without scores [0.07ms]
|
|
415
|
+
(pass) getStatusChanges > filters to only promoted entries [0.05ms]
|
|
416
|
+
(pass) groupByTransition > groups results by transition type [0.06ms]
|
|
411
417
|
(pass) groupByTransition > uses status name for no-change transitions [0.04ms]
|
|
412
418
|
(pass) edge cases > handles exact threshold values [0.02ms]
|
|
413
|
-
(pass) edge cases > handles zero votes
|
|
419
|
+
(pass) edge cases > handles zero votes [0.01ms]
|
|
414
420
|
(pass) edge cases > handles negative vote ratio edge case [0.01ms]
|
|
415
421
|
(pass) edge cases > rejects at exact rejection threshold
|
|
416
422
|
|
|
417
423
|
src/schemas/index.test.ts:
|
|
418
|
-
(pass) BeadSchema > validates a complete bead [
|
|
419
|
-
(pass) BeadSchema > rejects invalid priority [0.
|
|
420
|
-
(pass) BeadSchema > accepts all valid types [0.
|
|
421
|
-
(pass) BeadCreateArgsSchema > validates minimal create args [0.
|
|
422
|
-
(pass) BeadCreateArgsSchema > rejects empty title [0.
|
|
423
|
-
(pass) EpicCreateArgsSchema > validates epic with subtasks [0.
|
|
424
|
+
(pass) BeadSchema > validates a complete bead [0.55ms]
|
|
425
|
+
(pass) BeadSchema > rejects invalid priority [0.14ms]
|
|
426
|
+
(pass) BeadSchema > accepts all valid types [0.04ms]
|
|
427
|
+
(pass) BeadCreateArgsSchema > validates minimal create args [0.18ms]
|
|
428
|
+
(pass) BeadCreateArgsSchema > rejects empty title [0.10ms]
|
|
429
|
+
(pass) EpicCreateArgsSchema > validates epic with subtasks [0.27ms]
|
|
424
430
|
(pass) EpicCreateArgsSchema > requires at least one subtask [0.05ms]
|
|
425
|
-
(pass) EvaluationSchema > validates a passing evaluation
|
|
426
|
-
(pass) EvaluationSchema > validates a failing evaluation with retry suggestion
|
|
427
|
-
(pass) TaskDecompositionSchema > validates a decomposition
|
|
428
|
-
(pass) TaskDecompositionSchema > validates subtask effort levels
|
|
429
|
-
(pass) SwarmStatusSchema > validates swarm status [
|
|
430
|
-
(pass) ValidationResultSchema > validates success result [0.
|
|
431
|
-
(pass) ValidationResultSchema > validates failure result with errors [0.
|
|
431
|
+
(pass) EvaluationSchema > validates a passing evaluation [0.05ms]
|
|
432
|
+
(pass) EvaluationSchema > validates a failing evaluation with retry suggestion [0.02ms]
|
|
433
|
+
(pass) TaskDecompositionSchema > validates a decomposition [0.06ms]
|
|
434
|
+
(pass) TaskDecompositionSchema > validates subtask effort levels [0.04ms]
|
|
435
|
+
(pass) SwarmStatusSchema > validates swarm status [0.31ms]
|
|
436
|
+
(pass) ValidationResultSchema > validates success result [0.15ms]
|
|
437
|
+
(pass) ValidationResultSchema > validates failure result with errors [0.03ms]
|
|
432
438
|
|
|
433
439
|
src/schemas/cell-events.test.ts:
|
|
434
|
-
(pass) CellEventSchema > createCellEvent > creates valid cell_created event [
|
|
435
|
-
(pass) CellEventSchema > createCellEvent > creates valid cell_closed event [0.
|
|
436
|
-
(pass) CellEventSchema > createCellEvent > creates valid cell_dependency_added event [0.
|
|
437
|
-
(pass) CellEventSchema > createCellEvent > creates valid cell_epic_child_added event [0.
|
|
438
|
-
(pass) CellEventSchema > createCellEvent > throws on invalid event data [0.
|
|
440
|
+
(pass) CellEventSchema > createCellEvent > creates valid cell_created event [0.70ms]
|
|
441
|
+
(pass) CellEventSchema > createCellEvent > creates valid cell_closed event [0.23ms]
|
|
442
|
+
(pass) CellEventSchema > createCellEvent > creates valid cell_dependency_added event [0.21ms]
|
|
443
|
+
(pass) CellEventSchema > createCellEvent > creates valid cell_epic_child_added event [0.15ms]
|
|
444
|
+
(pass) CellEventSchema > createCellEvent > throws on invalid event data [0.08ms]
|
|
439
445
|
(pass) CellEventSchema > type guards > isCellEventType narrows type correctly [0.03ms]
|
|
440
446
|
(pass) CellEventSchema > type guards > isStateTransitionEvent identifies status changes [0.03ms]
|
|
441
447
|
(pass) CellEventSchema > type guards > isEpicEvent identifies epic operations [0.03ms]
|
|
442
|
-
(pass) CellEventSchema > type guards > isAgentEvent detects agent-triggered events [0.
|
|
448
|
+
(pass) CellEventSchema > type guards > isAgentEvent detects agent-triggered events [0.21ms]
|
|
443
449
|
(pass) CellEventSchema > getCellIdFromEvent > extracts cell_id from any event [0.04ms]
|
|
444
|
-
(pass) CellEventSchema > discriminated union validation > validates against full CellEventSchema [0.
|
|
445
|
-
(pass) CellEventSchema > discriminated union validation > rejects invalid event type [0.
|
|
446
|
-
(pass) CellEventSchema > discriminated union validation > validates dependency types [0.
|
|
447
|
-
(pass) CellEventSchema > event metadata > supports metadata field [0.
|
|
448
|
-
(pass) CellEventSchema > epic closure eligible event > creates valid closure eligible event [0.
|
|
449
|
-
(pass) CellEventSchema > status changed event > tracks status transitions [0.
|
|
450
|
-
(pass) CellEventSchema > status changed event > includes optional reason for blocked/closed [0.
|
|
451
|
-
(pass) CellEventSchema > comment events > creates comment with optional parent [0.
|
|
452
|
-
(pass) CellEventSchema > work tracking events > tracks work start with file reservations [0.
|
|
450
|
+
(pass) CellEventSchema > discriminated union validation > validates against full CellEventSchema [0.03ms]
|
|
451
|
+
(pass) CellEventSchema > discriminated union validation > rejects invalid event type [0.02ms]
|
|
452
|
+
(pass) CellEventSchema > discriminated union validation > validates dependency types [0.03ms]
|
|
453
|
+
(pass) CellEventSchema > event metadata > supports metadata field [0.02ms]
|
|
454
|
+
(pass) CellEventSchema > epic closure eligible event > creates valid closure eligible event [0.16ms]
|
|
455
|
+
(pass) CellEventSchema > status changed event > tracks status transitions [0.16ms]
|
|
456
|
+
(pass) CellEventSchema > status changed event > includes optional reason for blocked/closed [0.01ms]
|
|
457
|
+
(pass) CellEventSchema > comment events > creates comment with optional parent [0.17ms]
|
|
458
|
+
(pass) CellEventSchema > work tracking events > tracks work start with file reservations [0.14ms]
|
|
453
459
|
|
|
454
460
|
src/schemas/worker-handoff.test.ts:
|
|
455
|
-
(pass) WorkerHandoffContractSchema > valid contract parses correctly [0.
|
|
461
|
+
(pass) WorkerHandoffContractSchema > valid contract parses correctly [0.26ms]
|
|
456
462
|
(pass) WorkerHandoffContractSchema > missing task_id fails [0.08ms]
|
|
457
|
-
(pass) WorkerHandoffContractSchema > empty files_owned is valid (read-only tasks) [0.
|
|
458
|
-
(pass) WorkerHandoffContractSchema > empty success_criteria fails [0.
|
|
459
|
-
(pass) WorkerHandoffContractSchema >
|
|
460
|
-
(pass)
|
|
461
|
-
(pass)
|
|
462
|
-
(pass) WorkerHandoffContextSchema >
|
|
463
|
-
(pass)
|
|
464
|
-
(pass)
|
|
465
|
-
(pass)
|
|
463
|
+
(pass) WorkerHandoffContractSchema > empty files_owned is valid (read-only tasks) [0.10ms]
|
|
464
|
+
(pass) WorkerHandoffContractSchema > empty success_criteria fails [0.06ms]
|
|
465
|
+
(pass) WorkerHandoffContractSchema > empty task_id fails [0.04ms]
|
|
466
|
+
(pass) WorkerHandoffContractSchema > short project name with hash is valid [0.01ms]
|
|
467
|
+
(pass) WorkerHandoffContractSchema > partial hash is valid (resolvePartialId will expand it) [0.02ms]
|
|
468
|
+
(pass) WorkerHandoffContextSchema > valid context parses correctly [0.12ms]
|
|
469
|
+
(pass) WorkerHandoffContextSchema > missing required fields fails [0.04ms]
|
|
470
|
+
(pass) WorkerHandoffContextSchema > empty strings are valid [0.02ms]
|
|
471
|
+
(pass) WorkerHandoffEscalationSchema > valid escalation parses correctly [0.06ms]
|
|
472
|
+
(pass) WorkerHandoffEscalationSchema > missing required fields fails [0.03ms]
|
|
473
|
+
(pass) WorkerHandoffSchema > complete valid handoff parses correctly [0.08ms]
|
|
466
474
|
(pass) WorkerHandoffSchema > missing contract section fails [0.03ms]
|
|
467
|
-
(pass) WorkerHandoffSchema > nested validation catches contract errors [0.
|
|
475
|
+
(pass) WorkerHandoffSchema > nested validation catches contract errors [0.03ms]
|
|
468
476
|
(pass) WorkerHandoffSchema > type inference works correctly [0.02ms]
|
|
469
477
|
|
|
470
|
-
|
|
478
|
+
425 pass
|
|
471
479
|
0 fail
|
|
472
|
-
|
|
473
|
-
Ran
|
|
480
|
+
776 expect() calls
|
|
481
|
+
Ran 425 tests across 10 files. [271.00ms]
|