You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: resolve 5 open bugs and eliminate test flakiness (#1045)
* fix: resolve 5 open bugs and eliminate test flakiness
Bug fixes:
- #1037: static analysis gate now detects project type (Node.js, .NET,
Go, Rust) and runs appropriate toolchain instead of unconditionally
requiring package.json
- #1038: event append validates misplaced fields — returns
VALIDATION_ERROR when event-type-specific fields appear at top level
instead of inside the data envelope
- #1040: expose checkpoint action in exarchos_workflow composite tool
(handler already existed but was unreachable)
- #1041: fix wrong phase names in refactor skill — "implement" →
"polish-implement" in polish-implement.md and polish-validate.md
- #1044: allReviewsPassed guard now enforces required review dimensions
(spec-compliance, code-quality) for feature workflows, configurable
via .exarchos.yml required-reviews field
Test infrastructure:
- Switch vitest pool to forks for module-level mock isolation
- Add missing EventStore.initialize() calls in 4 test files
- Eliminates intermittent test failures from PID lock contention
Closes#1037, closes#1038, closes#1040, closes#1041, closes#1044
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: address review feedback from Seer and CodeRabbit
- Fix go vet skip flag: skipTypecheck → skipLint (Seer)
- Validate repoRoot exists on disk before project detection — return
error instead of false-positive pass for non-existent paths (CodeRabbit)
- Make _requiredReviews transient — delete from state after guard
evaluation so it's not persisted to disk (CodeRabbit)
- Update parity test mock to include statSync for new validation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@@ -38,6 +75,18 @@ export async function handleEventAppend(
38
75
39
76
conststore=eventStore;
40
77
78
+
// Detect fields that should be inside data but were placed at the top level
79
+
constmisplaced=detectMisplacedFields(args.event);
80
+
if(misplaced.length>0){
81
+
return{
82
+
success: false,
83
+
error: {
84
+
code: 'VALIDATION_ERROR',
85
+
message: `Event fields placed at wrong level — ${misplaced.map(f=>`"${f}"`).join(', ')} should be inside "data", not at the top level. Wrap them: { type: "${eventType}", data: { ${misplaced.join(', ')}: ... } }`,
86
+
},
87
+
};
88
+
}
89
+
41
90
try{
42
91
// Validate at the system boundary (MCP tool handler = untrusted input)
43
92
// Sequence 1 is a placeholder — appendValidated overwrites it with the real sequence
@@ -121,7 +170,7 @@ export async function handleBatchAppend(
121
170
};
122
171
}
123
172
124
-
// Validate all events have a type before passing to store
173
+
// Validate all events have a type and no misplaced fields
message: `events[${i}]: fields placed at wrong level — ${misplaced.map(f=>`"${f}"`).join(', ')} should be inside "data", not at the top level. Wrap them: { type: "${eventType}", data: { ${misplaced.join(', ')}: ... } }`,
0 commit comments