Measured by arc FR's review (round 1), identical at base 0c0d33b and the FR tip 2c6e56eb; evidence under tooling arcs/fr_file_readers/fr_reviewer/. (N1, N3)
N1: a read_json input whose key changes type after the inference window (int → string, int → object) reaches a slice index past its bounds in the decode path; the query boundary recovers it and the client sees XX000 … index out of range (the connection survives). A data-shaped input must never reach a recover: decode each value against the inferred type and raise a loud 22P02-class error naming the column and row. N3: on the coordinator's ASYNC door, a scalar subquery over a reader for a DENIED identity refuses with the DAG's table-less-SELECT sentence rather than 42501 — the file is untouched (arc FR's safety property holds), but the client cannot tell it was an authorization refusal.
Measured by arc FR's review (round 1), identical at base 0c0d33b and the FR tip 2c6e56eb; evidence under tooling arcs/fr_file_readers/fr_reviewer/. (N1, N3)
N1: a
read_jsoninput whose key changes type after the inference window (int → string, int → object) reaches a slice index past its bounds in the decode path; the query boundary recovers it and the client seesXX000 … index out of range(the connection survives). A data-shaped input must never reach a recover: decode each value against the inferred type and raise a loud 22P02-class error naming the column and row. N3: on the coordinator's ASYNC door, a scalar subquery over a reader for a DENIED identity refuses with the DAG's table-less-SELECT sentence rather than 42501 — the file is untouched (arc FR's safety property holds), but the client cannot tell it was an authorization refusal.