|
40 | 40 | * depth over the class, at the price of a regex — and the blind spot named |
41 | 41 | * under "Known limit" below is exactly the half the simulation harness holds. |
42 | 42 | * |
| 43 | + * ## The BOUNDARY: the axis is the bash INTERPRETER, not the userland binaries |
| 44 | + * |
| 45 | + * A gate that states its class but not its boundary can be widened by a |
| 46 | + * well-meaning row, so the boundary is written here rather than left to be |
| 47 | + * re-derived. This gate's axis is the VERSION OF BASH THAT RUNS A SCRIPT, and |
| 48 | + * the row schema says so by construction, not by convention: every |
| 49 | + * `CONSTRUCTS` row carries a `since:` that is a bash version, and every `kind` |
| 50 | + * is a bash category — a builtin, a piece of syntax, a variable. There is no |
| 51 | + * value for "an external binary", and a row about one has nowhere to put it. |
| 52 | + * |
| 53 | + * So a difference between the GNU and BSD USERLAND BINARIES a script calls — |
| 54 | + * `mktemp` and where it will accept the `XXXXXX`, `sed -i` and whether it |
| 55 | + * demands a suffix argument, `readlink -f`, `date` and its flags — is a |
| 56 | + * DIFFERENT AXIS, and ⛔ it is not a row here. Such a row could not be written |
| 57 | + * honestly: `mktemp` has no bash version, so its `since:` would have to be a |
| 58 | + * lie or a special case, and the verdict line this gate prints ends |
| 59 | + * "constructs checked, floor bash 3.2" — which becomes false advertising the |
| 60 | + * moment a coreutils-vs-BSD rule joins the table it counts. Widening here |
| 61 | + * would silently convert a gate that means "this script needs bash 4" into one |
| 62 | + * that means "this script behaves differently on a Mac": a strictly larger |
| 63 | + * claim, made by adding a row. |
| 64 | + * |
| 65 | + * ⇒ That class wants a SIBLING gate, not a row here — and ⛔ not yet. The |
| 66 | + * measured population of real userland defects in this repo is ONE: an |
| 67 | + * `mktemp` template whose `XXXXXX` was not last. It is already fixed and |
| 68 | + * guarded by a per-script pin, which ⛔ stays — nothing here replaces it. A |
| 69 | + * shared gate for a population of one is not warranted, and the evidence that |
| 70 | + * would change that is a SECOND real instance; the place to land it is the |
| 71 | + * boundary card this paragraph came from (#17141). |
| 72 | + * |
| 73 | + * ⚠️ The basis is written out and not just the verdict, on purpose: a boundary |
| 74 | + * stated without its basis gets re-litigated by the next person who |
| 75 | + * provisionally leans yes. That is not hypothetical. This exact question — |
| 76 | + * should this gate grow a BSD/portability rule, so the `mktemp` class is |
| 77 | + * caught by a shared gate instead of a per-script pin — was asked, was |
| 78 | + * answered NO, and the seat that answered it had leaned the other way first |
| 79 | + * and put that on the record: *"measuring is what produced it — I had |
| 80 | + * provisionally leaned yes."* ⇒ Measuring is the part that is reproducible. |
| 81 | + * Read any row's `since:` and `kind:` before re-opening this; ⛔ do not |
| 82 | + * re-litigate it from intuition. |
| 83 | + * |
43 | 84 | * ## The exemption rule: telling a HUNTER from a USER |
44 | 85 | * |
45 | 86 | * The hard part of a repo-wide scan is that the files which document this floor |
|
0 commit comments