Reviews 890 and 892 on #517, both about getrawdata.js in this branch. 890 - the -FC strip fed only the shape guard. `withoutCatalog` was computed for the LIBDS test and then dropped, so the filename, the table name and the library were all taken from the unstripped value: a request the guard accepted resolved nothing and came back as an empty download named LIBREF.DS-FC.ext. getrawdata.sas strips the suffix and then works with the stripped pair (`table=cats("&lib..",ds)`), so the mock does that too - `requestTable` is the stripped, upcased name and everything after the guard uses it: the guard, the filename, the library it reads and the name in an abort. 892 - `Number()` is not ISINT's rule. I checked the premise against the estate rather than the macro reading, because the two disagree here: it answers "Invalid filter" for 1,000 and 1abc (which a leading-prefix read would accept), and for 0x10, which Number() reads as 16. What the estate does accept is 7.0, 1e3, +5, 007, " 7 " and -3, each of which then fails downstream on the filter RK rather than on validation. The mock now matches the value with a number pattern first and then asks whether it is whole, which reproduces all of that; the test's claim is corrected to the recorded answers, and the comment no longer says the reading was taken from the macro. Tests: download-headers.test.js is 14 tests. Both new assertions go red against the previous code - leaving the unstripped name downstream fails the catalog test, and dropping the shape match fails the filter test on 0x10. Whole mock suite: 147 tests, 147 pass; parity/check.js unchanged.