fix: remove design-debt shims — falsy ID bug, selector normalization, concurrency, exception swallowing
pipeline.ts: || undefined → ?? undefined (9 occurrences) - || converts valid subject ID 0 to undefined because 0 is falsy in JS. This broke clause witnesses and topology references for the first subject. domain-index.ts: remove .toLowerCase() on CSS selectors - CSS selectors are case-sensitive (IDs, class names, attribute values). Lowercasing on lookup but not on storage (selectorIndex) meant case- sensitive selectors never matched — returning empty arrays silently. canonical.ts: add warning when visualBoxes falls back to layout boxes - visualBoxes ?? boxes silently substituted layout coordinates for visual space, producing incorrect results for transform-dependent assertions. Now emits console.warn so silent data corruption is visible. extraction.ts: serialize materializeSemanticSelector calls (3 sites) - Changed Promise.all over page.evaluate() to sequential for..of. While Playwright serializes CDP calls internally, concurrent DOM-modifying evaluate() calls create undefined execution order. Sequential resolution eliminates theoretical race conditions for semantic selector injection. engine.ts: include stack trace in evaluator exception diagnostics - Catch-all converted ALL exceptions (including TypeError from programming bugs) to IMH_EVALUATOR_EXCEPTION with just err.message. Now includes stack trace and logs to console.warn for visibility. Distinguishes TypeError (programming bug) from other evaluation errors. 648 SDK tests + 57 E2E hard tests pass, zero regressions.
This commit is contained in:
@@ -272,7 +272,13 @@ export function evaluate(
|
||||
diagnostics.push(...result.diagnostics);
|
||||
}
|
||||
} catch (err) {
|
||||
const message = err instanceof Error ? err.message : String(err);
|
||||
const message = err instanceof Error ? err.message : String(err)
|
||||
const stack = err instanceof Error ? err.stack : undefined
|
||||
console.warn(`[imhotep-solver] clause evaluator exception for kind "${clause.clauseKind}" (id ${clause.clauseId}): ${message}`)
|
||||
if (stack) console.warn(stack)
|
||||
const detail = err instanceof Error && err.name === 'TypeError'
|
||||
? `UNCAUGHT PROGRAMMING BUG: ${message}\n${stack ?? ''}`
|
||||
: `Evaluator error: ${message}`
|
||||
const result: ClauseResult = {
|
||||
clauseId: clause.clauseId,
|
||||
status: 'error',
|
||||
@@ -282,7 +288,7 @@ export function evaluate(
|
||||
code: 'IMH_EVALUATOR_EXCEPTION',
|
||||
severity: 'error',
|
||||
category: 'internal-error',
|
||||
message,
|
||||
message: detail,
|
||||
clauseId: clause.clauseId,
|
||||
},
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user