[GH-ISSUE #5632] [Bug] Flutter file budgets and Go report refusals give recovery that cannot admit the same input #3412

Closed
opened 2026-10-31 00:40:06 +00:00 by bsakaguchi · 2 comments
Owner

Originally created by @cursor[bot] on GitHub (Oct 20, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/5632

Before submitting

  • I searched the open and closed issues for a related report.
  • I removed credentials, tokens, private paths, and sensitive target data.

Area

Native analysis or decompilation

Observed behavior

Source-derived, with one provider-level check of the Flutter APK size refusal after the recovery text was corrected. Before that change, these fixed allowances had no remediationAction, so projection used the generic file-size or transport fallback.

File-size sites tell the caller to raise the evidence-reply file-size allowance. That setting does not admit the input:

  • src/flutter/FlutterBuildProvider.ts: APK snapshot budget, per-library read budget, cumulative extraction budget, and the Dart AOT declared-size and streaming checks
  • src/captures/TsharkCaptureProvider.ts and src/signals/SigrokRecordingProvider.ts: artifact input byte limits
  • src/pcap/PcapSnapshot.ts: owned capture snapshot disk budget

Transport site tells the caller to retrieve retained Evidence or use complete CLI JSON, but the refusal returns no completed report:

  • src/go/GoBinaryProvider.ts outputLimit (maximum_output_bytes, complete Go metadata)

Two IL2CPP capacity allowances are deterministic but project as retryable capacity ("wait, then retry"):

  • src/il2cpp/Il2cppMetadataProvider.ts native-link capacity failures
  • src/il2cpp/Il2cppGhidraSeeds.ts seed-name and seed-byte allowance

#5556 already covers the Flutter ABI inventory row and other static memory budgets. #5505 covers the Rust complete-report sibling of the Go output limit. This report is the remaining producers found beside those.

The Flutter snapshot-storage path that forwards an arbitrary filesystem code was not changed. Whether that path should use disk-space recovery is NOT_ENOUGH_INFO.

Reproduction

NOT_ENOUGH_INFO for a CLI replay of each row. The Flutter APK size guard is checkApkSize in FlutterBuildProvider.ts. A focused provider test covers that refusal's corrected recovery. The other rows are source readings of the constructors.

Expected behavior

Keep the refusals and numeric allowances. Input-size recovery should say an evidence-reply allowance does not admit the input. Report recovery should not offer Evidence that was not produced. Fixed IL2CPP count allowances should not be retryable.

Impact and scope

Recovery text. Refusals remain intentional. Real-world frequency is unknown.

REA version

Source on main during this audit (6.7.0 line).

Runtime and platform

Node provider test for the Flutter APK size guard. Other rows were not executed.

Target and artifact context

The Flutter check uses a sparse file above the APK snapshot allowance. No Android or Go application was inspected.

Interface

CLI and MCP projection of these provider errors.

Earliest failure stage

Provider result projection

Relevant output or evidence

Constructors cited above. The generic sentences are the file-size and transport branches of analysisErrorRemediationAction.

Typed outcome or recovery expected

resource_constraint, retryable: false, recovery that names the fixed allowance actually exceeded.

Analysis or suspected cause

These producers relied on the shared resource-kind fallback instead of naming the allowance they enforce.

Additional context

Prepared while auditing #5556, #5405, and #5505.

Originally created by @cursor[bot] on GitHub (Oct 20, 2026). Original GitHub issue: https://github.com/morluto/rea/issues/5632 ### Before submitting - [x] I searched the open and closed issues for a related report. - [x] I removed credentials, tokens, private paths, and sensitive target data. ### Area Native analysis or decompilation ### Observed behavior Source-derived, with one provider-level check of the Flutter APK size refusal after the recovery text was corrected. Before that change, these fixed allowances had no `remediationAction`, so projection used the generic file-size or transport fallback. File-size sites tell the caller to raise the evidence-reply file-size allowance. That setting does not admit the input: - `src/flutter/FlutterBuildProvider.ts`: APK snapshot budget, per-library read budget, cumulative extraction budget, and the Dart AOT declared-size and streaming checks - `src/captures/TsharkCaptureProvider.ts` and `src/signals/SigrokRecordingProvider.ts`: artifact input byte limits - `src/pcap/PcapSnapshot.ts`: owned capture snapshot disk budget Transport site tells the caller to retrieve retained Evidence or use complete CLI JSON, but the refusal returns no completed report: - `src/go/GoBinaryProvider.ts` `outputLimit` (`maximum_output_bytes`, complete Go metadata) Two IL2CPP capacity allowances are deterministic but project as retryable capacity ("wait, then retry"): - `src/il2cpp/Il2cppMetadataProvider.ts` native-link capacity failures - `src/il2cpp/Il2cppGhidraSeeds.ts` seed-name and seed-byte allowance #5556 already covers the Flutter ABI inventory row and other static memory budgets. #5505 covers the Rust complete-report sibling of the Go output limit. This report is the remaining producers found beside those. The Flutter snapshot-storage path that forwards an arbitrary filesystem `code` was not changed. Whether that path should use disk-space recovery is NOT_ENOUGH_INFO. ### Reproduction NOT_ENOUGH_INFO for a CLI replay of each row. The Flutter APK size guard is `checkApkSize` in `FlutterBuildProvider.ts`. A focused provider test covers that refusal's corrected recovery. The other rows are source readings of the constructors. ### Expected behavior Keep the refusals and numeric allowances. Input-size recovery should say an evidence-reply allowance does not admit the input. Report recovery should not offer Evidence that was not produced. Fixed IL2CPP count allowances should not be retryable. ### Impact and scope Recovery text. Refusals remain intentional. Real-world frequency is unknown. ### REA version Source on `main` during this audit (6.7.0 line). ### Runtime and platform Node provider test for the Flutter APK size guard. Other rows were not executed. ### Target and artifact context The Flutter check uses a sparse file above the APK snapshot allowance. No Android or Go application was inspected. ### Interface CLI and MCP projection of these provider errors. ### Earliest failure stage Provider result projection ### Relevant output or evidence Constructors cited above. The generic sentences are the `file-size` and `transport` branches of `analysisErrorRemediationAction`. ### Typed outcome or recovery expected `resource_constraint`, `retryable: false`, recovery that names the fixed allowance actually exceeded. ### Analysis or suspected cause These producers relied on the shared resource-kind fallback instead of naming the allowance they enforce. ### Additional context Prepared while auditing #5556, #5405, and #5505.
Author
Owner

@matbrgz commented on GitHub (Oct 20, 2026):

Cross-referencing with canonical issue #5504 and siblings #5628, #5630, #5631. Addressed by maintainer PR #5633 regarding fixed file/report budget refusals and unfulfillable recovery guidance. Cataloged under Cluster AJ in consolidation tracker #4330.

<!-- gh-comment-id:6297498360 --> @matbrgz commented on GitHub (Oct 20, 2026): Cross-referencing with canonical issue #5504 and siblings #5628, #5630, #5631. Addressed by maintainer PR #5633 regarding fixed file/report budget refusals and unfulfillable recovery guidance. Cataloged under Cluster AJ in consolidation tracker #4330.
Author
Owner

@morluto commented on GitHub (Oct 21, 2026):

Closing as fixed on main by github.com/morluto/rea@ef59174c1e, retained at 67a6477f01.

The listed Flutter, TShark, Sigrok, Pcap, Go and IL2CPP fixed budget producers now attach allowance-specific recovery, including suitable complete input and report guidance. IL2CPP report refusal preserves observed source facts; occupancy remains separately retryable. Producer/shared tests cover representative cases. The Go complete-report and Pcap snapshot-specific remediation branches have direct source assignments but were not separately runtime-verified here; the issue's explicitly unestablished arbitrary-filesystem-error case is outside this closure.

This audit inspected the current producer, regression source, issue discussion and main ancestry. Tests/runtime reproductions were not rerun, and no additional real-provider or platform coverage is implied.

<!-- gh-comment-id:6324329921 --> @morluto commented on GitHub (Oct 21, 2026): Closing as fixed on main by https://github.com/morluto/rea/commit/ef59174c1edd6ed9adb0722b86a5b9a57217e310, retained at 67a6477f011ae358fc333e5a6e26c86d932654ed. The listed Flutter, TShark, Sigrok, Pcap, Go and IL2CPP fixed budget producers now attach allowance-specific recovery, including suitable complete input and report guidance. IL2CPP report refusal preserves observed source facts; occupancy remains separately retryable. Producer/shared tests cover representative cases. The Go complete-report and Pcap snapshot-specific remediation branches have direct source assignments but were not separately runtime-verified here; the issue's explicitly unestablished arbitrary-filesystem-error case is outside this closure. This audit inspected the current producer, regression source, issue discussion and main ancestry. Tests/runtime reproductions were not rerun, and no additional real-provider or platform coverage is implied.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#3412
No description provided.