Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Take current main host bundles through the rebase, then rebuild so authority-refusal reporting ships in both plugin copies. Co-authored-by: Anton Lykhoyda <lykhoyda@gmail.com>
a8a10ed to
3956fff
Compare
A recognized authority refusal persists the producer's error text after sanitizeString, and METRO_ORIGIN_MISMATCH names the bound device by its simulator UDID. The shared redaction rules did not cover UUIDs, so the UDID landed in patterns.jsonl. Add one UUID rule to REDACTION_RULES and bump REDACTION_RULES_VERSION so retained rows re-sanitize on their next rewrite. Evidence pointers keep a random id but drop the dashes so the rule does not collapse them. Regenerate both host runtimes.
|
FAILED — independent exact-head QA of #1034 at A failed native Android journey cannot become a full PASS. This is evidence for the captain, not a merge gate. No approval or merge decision. The Android first native surface after a fresh owned build/pin/attachOnly was the Expo development-server picker, not the app. Pin exhausted 120s with 0 Hermes targets. The APK does contain iOS at this same pair passed: usable Welcome baseline, hide Reporting recheck on this run’s private store: four real codes ( Cleanup: owned runner/Metro/transport closed, integration restored, owned simulator and emulator removed. Foreign inventory unchanged (two booted iOS simulators; physical USB phone untouched).
|
|
FAILED — QA input-correction experiment for #1034 at Binding the existing Expo Dev Client URL before the owned Android build did not produce a visible app result from the original saved action. This is evidence for the captain, not a merge gate. No approval or merge decision. No product source was patched. What changed vs prior Android runs. Previous exact-head QA bound the device without a URL, then built, then pinned (0 Hermes targets / 120s; first native surface was the Expo picker). This run called What still failed. Picker-first and iOS, CLI/reporting, and Desktop were NOT RUN (preserved / out of scope). Foreign iOS simulators and the attached USB phone were not touched. Owned emulator and Metro were removed; package scripts restored to The bind-first input correction did not avoid the Android saved-action wall. No product patch is justified from this run. |







Summary
Closes #981.
Behavior And Boundaries
Structured codes take precedence over prose, including unknown codes. Only the first MCP content item is eligible, with a 16 KiB JSON limit. Missing or conflicting metadata stays unknown; causes remain unknown until a fixed vocabulary is supported. Malformed refusal extensions cannot fall back to legacy interpretation.
Reporting covers retained local history, not exact time-window counts;
--sinceaffects only new-pattern selection. Rising counts with zero recorded recoveries do not prove a dead end or a currently blocked session. Session authority, admission, cleanup, runner sidecars, and the storage-signature algorithm remain unchanged. No live-device recovery proof is claimed.Validation
Measured at head
d4d7de43(the UUID redaction fix on top of3956fff9):check-dist-fresh, package-sync, TypeScript-only, formatting, lint, andgit diff --checkpass.d4d7de43: 24 check runs succeeded and CodeQL reported neutral.d4d7de43: reporting scope PASS (fix(core): surface systemic authority refusal recurrence #1034 (comment)); full iOS/Android acceptance FAILED on the Android first-run tutorial and saved-action replay journey (fix(core): surface systemic authority refusal recurrence #1034 (comment)), which is being addressed in the workspace fixture rather than in this reporting change.d4d7de43; the exact-revision comparison below covers the eight historical cases only.Local Test Failures
Historical full-suite runs on earlier checkpoints (not re-run since, kept for the record):
08dfa90eBoth completed runs had zero cancelled or skipped tests; the serial leg passed separately on both. Seven failures matched: five action-engine migration assertions, one save-as-action overwrite-lock timeout, and one managed-Metro attestation assertion. The eighth, hard-reset shutdown proof, reproduced in 2 of 10 isolated runs on each revision at that time. The comparison checkpoint includes Phases 1 and 2; it is not pristine main.
Exact-revision comparison of those eight cases (2026-09-14): candidate
d4d7de43versus current maind76a9e2a(merge-base20854792), same macOS host, Node v26.8.1, unsandboxed shell, disposable copies, the four test files byte-identical on both revisions. "Original" is the default macOS$TMPDIRunder/var/folders(a symlink to/private/var); "normalized" is a realpath-clean temp root on the task-owned SSD.$TMPDIR$TMPDIRaction-engine-compatmigration assertionssave-as-actionoverwrite-lock timeoutmanaged-sandbox-v1expected,reported-v1actual)resolvedCommandAllowed:false, command exit 127, manifest utility unresolved. Pre-existing.None of the eight is introduced by this PR. No test or authority requirement was weakened, and the historical rows are not relabeled as current passes.
Merge Status
Head
d4d7de43is based on20854792; main has since moved tod76a9e2awithout touching the experience or trends paths. GitHub reports the PR as mergeable with the required Build & Test check green. Full acceptance remains open on the Android journey above, so no merge is requested until independent QA passes that row.Greptile Summary
This PR adds bounded decoding and sanitized persistence for six authority-refusal codes, aggregates recorded and unambiguous legacy evidence into deterministic systemic trends, and exposes those trends through JSON and text CLI reporting.
Confidence Score: 5/5
The reviewed changes appear safe to merge, with no concrete correctness, security, or repository-rule violations identified.
The decoder matches the established producer shapes, conflicting metadata intentionally fails closed to unknown, aggregation remains deterministic, and the reporting boundaries are explicitly represented and extensively tested.
Important Files Changed
Flowchart
%%{init: {'theme': 'neutral'}}%% flowchart TD A[Failed or errored tool call] --> B[Bounded authority-envelope decoding] B -->|Recognized code| C[Sanitize symptom and metadata] B -->|Not recognized| D[Existing experience classification] C --> E[Persist code-specific tool pattern] E --> F[Aggregate retained records] G[Eligible legacy symptom] --> F F --> H[Group by code, axis, cause, and platform] H --> I[JSON report] H --> J[Text CLI report] I --> K[Recovery not verified; authority state unknown] J --> KReviews (1): Last reviewed commit: "feat(core): include unambiguous legacy r..." | Re-trigger Greptile