Skip to content

Android review sheet: size guard + name every excluded stream (#570 parity) - #624

Merged
ryanbr merged 1 commit into
mainfrom
fix/android-review-gate-size-guard-570
Jul 19, 2026
Merged

ryanbr merged 1 commit into
mainfrom
fix/android-review-gate-size-guard-570

Conversation

@ryanbr

@ryanbr ryanbr commented Jul 19, 2026

Copy link
Copy Markdown
Owner

Ports to Android the two defense-in-depth pieces of the iOS #570 review-sheet hang fix that the Kotlin ReportReviewGate was missing. Android already excluded raw-capture from the inline preview (it mirrored the core fix), but it lacked:

  1. A ~1 MiB per-entry size guard. Android excluded large streams by name only, so a pathologically large report.txt — or any future attached stream — would still be inlined into one Compose Text, the same class of layout choke Test Centre: attach Oura ring diagnostics to the report bundle, and guard the review sheet against large streams #570 hardened iOS against. Now ANY entry over MAX_INLINE_BYTES is excluded regardless of name.
  2. Naming every excluded stream in the "attached (not shown above)" note. Android previously listed only binaries, so raw-capture was excluded from the preview but never named — the review was slightly less honest than iOS. Now raw-capture + any oversized entry are named, so the user sees the whole bundle.

Mirrors Strand/System/ReportReviewGate.swift (notShownInline + maxInlineBytes).

Not applicable to Android (context from the #570/#621 discussion): the Oura sidecar attach and the field-aware deviceId redaction (#621) — Android doesn't attach the Oura sidecars, and its device ids are BLE MACs (already masked), not UUIDs. This PR is only the review-sheet robustness half.

Testing

Android-only, no iOS change, no dependency on the GitHub Actions incident — fully validated locally: compileFullDebugKotlin ✓, ReportReviewGateTest 6/6 ✓ (raw-capture excluded-but-named; an oversized entry caught by the guard and named; normal small files still shown in full with no note), i18n audit ✓.

…arity)

Port the two defense-in-depth pieces of the iOS #570 hang fix that Android's
ReportReviewGate was missing:

1. A ~1 MiB per-entry size guard. Android excluded the large streams by NAME
   only (raw-capture + the screenshot), so a pathologically large report.txt —
   or any future attached stream — would still be inlined into one Compose Text,
   the same class of layout choke #570 hardened iOS against. Now ANY entry over
   MAX_INLINE_BYTES is excluded regardless of name.
2. Name EVERY excluded stream in the "attached (not shown above)" note. Android
   previously listed only binaries, so raw-capture was excluded from the inline
   preview but never named — the review was slightly less honest than iOS. Now
   raw-capture + any oversized entry are named, so the user sees the whole bundle.

Mirrors Strand/System/ReportReviewGate.swift (notShownInline + maxInlineBytes).
Android-only; no iOS change. Three tests: raw-capture excluded-but-named, an
oversized entry caught by the guard and named, and normal small files still
shown in full with no note. compileFullDebugKotlin + ReportReviewGateTest (6/6)
+ i18n audit pass locally.
@ryanbr
ryanbr merged commit d8c04dd into main Jul 19, 2026
1 check passed
@ryanbr
ryanbr deleted the fix/android-review-gate-size-guard-570 branch July 19, 2026 20:00
DX23876 pushed a commit to DX23876/noop that referenced this pull request Jul 22, 2026
…#570 parity) (ryanbr#624)

Port the two defense-in-depth pieces of the iOS ryanbr#570 hang fix that Android's
ReportReviewGate was missing:

1. A ~1 MiB per-entry size guard. Android excluded the large streams by NAME
   only (raw-capture + the screenshot), so a pathologically large report.txt —
   or any future attached stream — would still be inlined into one Compose Text,
   the same class of layout choke ryanbr#570 hardened iOS against. Now ANY entry over
   MAX_INLINE_BYTES is excluded regardless of name.
2. Name EVERY excluded stream in the "attached (not shown above)" note. Android
   previously listed only binaries, so raw-capture was excluded from the inline
   preview but never named — the review was slightly less honest than iOS. Now
   raw-capture + any oversized entry are named, so the user sees the whole bundle.

Mirrors Strand/System/ReportReviewGate.swift (notShownInline + maxInlineBytes).
Android-only; no iOS change. Three tests: raw-capture excluded-but-named, an
oversized entry caught by the guard and named, and normal small files still
shown in full with no note. compileFullDebugKotlin + ReportReviewGateTest (6/6)
+ i18n audit pass locally.
simoncad7 pushed a commit to simoncad7/noop that referenced this pull request Aug 17, 2026
…#570 parity) (ryanbr#624)

Port the two defense-in-depth pieces of the iOS ryanbr#570 hang fix that Android's
ReportReviewGate was missing:

1. A ~1 MiB per-entry size guard. Android excluded the large streams by NAME
   only (raw-capture + the screenshot), so a pathologically large report.txt —
   or any future attached stream — would still be inlined into one Compose Text,
   the same class of layout choke ryanbr#570 hardened iOS against. Now ANY entry over
   MAX_INLINE_BYTES is excluded regardless of name.
2. Name EVERY excluded stream in the "attached (not shown above)" note. Android
   previously listed only binaries, so raw-capture was excluded from the inline
   preview but never named — the review was slightly less honest than iOS. Now
   raw-capture + any oversized entry are named, so the user sees the whole bundle.

Mirrors Strand/System/ReportReviewGate.swift (notShownInline + maxInlineBytes).
Android-only; no iOS change. Three tests: raw-capture excluded-but-named, an
oversized entry caught by the guard and named, and normal small files still
shown in full with no note. compileFullDebugKotlin + ReportReviewGateTest (6/6)
+ i18n audit pass locally.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant