Skip to content

Commit f123470

Browse files
suryaiyer95claude
andcommitted
fix: [AI-5975] dispatcher wrappers: success means "handler completed", not "result was positive"
12 `altimate_core.*` dispatcher handlers derived `success` from result data (`data.equivalent !== false`, `data.valid !== false`, etc.), conflating "the tool crashed" with "the tool gave a negative finding". Now all handlers return `ok(true, data)` when the Rust NAPI call completes without throwing. Parse failures still throw → `fail(e)` → `success: false` with the actual error message. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 40f8e92 commit f123470

3 files changed

Lines changed: 408 additions & 16 deletions

File tree

packages/opencode/src/altimate/native/altimate-core.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ register("altimate_core.validate", async (params) => {
9292
const schema = schemaOrEmpty(params.schema_path, params.schema_context)
9393
const raw = await core.validate(params.sql, schema)
9494
const data = toData(raw)
95-
return ok(data.valid !== false, data)
95+
return ok(true, data)
9696
} catch (e) {
9797
return fail(e)
9898
}
@@ -104,7 +104,7 @@ register("altimate_core.lint", async (params) => {
104104
const schema = schemaOrEmpty(params.schema_path, params.schema_context)
105105
const raw = core.lint(params.sql, schema)
106106
const data = toData(raw)
107-
return ok(data.clean !== false, data)
107+
return ok(true, data)
108108
} catch (e) {
109109
return fail(e)
110110
}
@@ -115,7 +115,7 @@ register("altimate_core.safety", async (params) => {
115115
try {
116116
const raw = core.scanSql(params.sql)
117117
const data = toData(raw)
118-
return ok(data.safe !== false, data)
118+
return ok(true, data)
119119
} catch (e) {
120120
return fail(e)
121121
}
@@ -147,7 +147,7 @@ register("altimate_core.transpile", async (params) => {
147147
}
148148
}
149149

150-
return ok(data.success !== false, data)
150+
return ok(true, data)
151151
} catch (e) {
152152
return fail(e)
153153
}
@@ -159,7 +159,7 @@ register("altimate_core.explain", async (params) => {
159159
const schema = schemaOrEmpty(params.schema_path, params.schema_context)
160160
const raw = await core.explain(params.sql, schema)
161161
const data = toData(raw)
162-
return ok(data.valid !== false, data)
162+
return ok(true, data)
163163
} catch (e) {
164164
return fail(e)
165165
}
@@ -193,7 +193,7 @@ register("altimate_core.fix", async (params) => {
193193
params.max_iterations ?? undefined,
194194
)
195195
const data = toData(raw)
196-
return ok(data.fixed !== false, data)
196+
return ok(true, data)
197197
} catch (e) {
198198
return fail(e)
199199
}
@@ -205,7 +205,7 @@ register("altimate_core.policy", async (params) => {
205205
const schema = schemaOrEmpty(params.schema_path, params.schema_context)
206206
const raw = await core.checkPolicy(params.sql, schema, params.policy_json)
207207
const data = toData(raw)
208-
return ok(data.allowed !== false, data)
208+
return ok(true, data)
209209
} catch (e) {
210210
return fail(e)
211211
}
@@ -217,7 +217,7 @@ register("altimate_core.semantics", async (params) => {
217217
const schema = schemaOrEmpty(params.schema_path, params.schema_context)
218218
const raw = await core.checkSemantics(params.sql, schema)
219219
const data = toData(raw)
220-
return ok(data.valid !== false, data)
220+
return ok(true, data)
221221
} catch (e) {
222222
return fail(e)
223223
}
@@ -240,7 +240,7 @@ register("altimate_core.equivalence", async (params) => {
240240
const schema = schemaOrEmpty(params.schema_path, params.schema_context)
241241
const raw = await core.checkEquivalence(params.sql1, params.sql2, schema)
242242
const data = toData(raw)
243-
return ok(data.equivalent !== false, data)
243+
return ok(true, data)
244244
} catch (e) {
245245
return fail(e)
246246
}
@@ -256,7 +256,7 @@ register("altimate_core.migration", async (params) => {
256256
)
257257
const raw = core.analyzeMigration(params.new_ddl, schema)
258258
const data = toData(raw)
259-
return ok(data.safe !== false, data)
259+
return ok(true, data)
260260
} catch (e) {
261261
return fail(e)
262262
}
@@ -291,7 +291,7 @@ register("altimate_core.correct", async (params) => {
291291
const schema = schemaOrEmpty(params.schema_path, params.schema_context)
292292
const raw = await core.correct(params.sql, schema)
293293
const data = toData(raw)
294-
return ok(data.status !== "unfixable", data)
294+
return ok(true, data)
295295
} catch (e) {
296296
return fail(e)
297297
}
@@ -337,7 +337,7 @@ register("altimate_core.resolve_term", async (params) => {
337337
const raw = core.resolveTerm(params.term, schema)
338338
// Rust returns an array of matches — wrap for consistent object shape
339339
const matches = Array.isArray(raw) ? JSON.parse(JSON.stringify(raw)) : []
340-
return ok(matches.length > 0, { matches })
340+
return ok(true, { matches })
341341
} catch (e) {
342342
return fail(e)
343343
}
@@ -374,7 +374,7 @@ register("altimate_core.format", async (params) => {
374374
try {
375375
const raw = core.formatSql(params.sql, params.dialect || undefined)
376376
const data = toData(raw)
377-
return ok(data.success !== false, data)
377+
return ok(true, data)
378378
} catch (e) {
379379
return fail(e)
380380
}

0 commit comments

Comments
 (0)