mirror of
https://github.com/morluto/rea.git
synced 2026-11-04 05:46:17 +00:00
* fix(errors): name fixed allowances in resource-constraint recovery Fixed parser, count, report, input, and capture refusals inherited host-memory, wait-and-retry, or retained-Evidence advice. Producers now attach allowance-specific recovery, and deterministic capacity caps are not retryable. IL2CPP reader occupancy stays retryable capacity. Refs #5556, #5405, #5456, #5459, #5460, #5504, #5505, #5506, #5537, #5628, #5630, #5631, #5632 * fix(il2cpp): keep a closing metadata reader non-retryable close() stops admission before the active inspection finishes. A second inspect in that window was projected as retryable capacity. Closing and closed readers now report capability_unavailable. Occupied readers that remain open stay retryable. * fix(errors): align fixed-cap recovery with retained facts IL2CPP report refusals keep observed source facts instead of denying Evidence. Command-output caps use the capture allowance. Ghidra seed recovery names the limit that was exceeded. * fix(errors): call byte caps a byte allowance WASM representation limits and the IL2CPP Ghidra seed-file cap are byte budgets. Their recovery no longer says the exceeded allowance is a fixed count. * test(ida): keep unresolved procedure lookups non-retryable Main now treats an unchanged invalid request as non-retryable. The IDA lookup tests follow that projection. * fix(errors): qualify capture recovery for live output A fixed capture allowance still rejects the same output. Live captures such as adb logcat can change between requests, so recovery no longer says every unchanged request fails again. * fix(adb): keep a truncated live capture retryable Device output can shrink between calls, so an adb capture that exceeds the allowance stays retryable. Deterministic capture and version-output limits stay non-retryable. * fix(adb): keep truncated mutations non-retryable Only live observations opt into retrying a capture that exceeded the allowance. Push, install, uninstall, and other mutations stay non-retryable. * fix(errors): keep live capture recovery off deterministic limits Artifact-derived capture allowances again say the unchanged request fails. Only volatile adb observations use the live-output sentence. --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com>
37 lines
1.3 KiB
TypeScript
37 lines
1.3 KiB
TypeScript
import { expect, it } from "vitest";
|
|
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
import { WASM_INTERFACE_REPRESENTATION_BYTES } from "../domain/wasm/wasmInterface.js";
|
|
import { WasmInterfaceBudget } from "./WasmInterfaceBudget.js";
|
|
|
|
it("refuses typed WASM interface growth without asking the caller to wait", () => {
|
|
const budget = new WasmInterfaceBudget();
|
|
expect(() =>
|
|
budget.reserve(WASM_INTERFACE_REPRESENTATION_BYTES + 1),
|
|
).toThrowError();
|
|
try {
|
|
budget.reserve(WASM_INTERFACE_REPRESENTATION_BYTES + 1);
|
|
throw new Error("Expected a representation refusal");
|
|
} catch (error) {
|
|
const projected = projectAnalysisError(
|
|
error as Parameters<typeof projectAnalysisError>[0],
|
|
);
|
|
expect(projected).toMatchObject({
|
|
retryable: false,
|
|
details: {
|
|
resource: "capacity",
|
|
reported_limits: {
|
|
maximum_bytes: WASM_INTERFACE_REPRESENTATION_BYTES,
|
|
},
|
|
},
|
|
});
|
|
expect(projected.remediation.action).toContain(
|
|
"typed WASM interface inventory",
|
|
);
|
|
expect(projected.remediation.action).toContain("fixed byte allowance");
|
|
expect(projected.remediation.action).not.toContain("fixed count");
|
|
expect(projected.remediation.action).not.toMatch(
|
|
/Wait for an active analysis/u,
|
|
);
|
|
}
|
|
});
|