Commit ab0e5ba
authored
the measurement can run against an engine that has not been released (#452)
* the measurement can run against an engine that has not been released
Every ecosystem repository mcpp's changes reach already honours
`MCPP_SOURCE_REF`: non-empty, it builds the engine from that ref and asserts
that the binary on PATH is the one it built. This workflow was the gap, and it
is the one that matters most --- mcpp's own CI cannot see a defect that appears
only in a real dependency graph, and this repository holds thirty of them.
THE COST OF THE GAP IS MEASURED, NOT HYPOTHETICAL. 2026.9.20.1 shipped on
2026-09-20. Within a day the four members that stop at `#include <windows.h>`
through a borrowed `__CYGWIN__` --- archive, sqlite3, mimalloc, c-ares ---
made a second release necessary. That reading was available from these same
thirty graphs before the first release merged; nothing could produce it,
because this job could only install a published engine.
A release is not one build. It is a tag, four platform builds, two mirrors,
a GET check per asset, an xim-pkgindex bump, an index artifact, and a
consumer-side confirmation. What this closes is a second pass down that whole
chain.
Shape: the released engine the pin names is still installed, because mcpp
builds itself and is its own bootstrap; the build from the ref then replaces it
on PATH, and `MCPP_HOME` follows it. `.xlings.json` is removed from the clone
first --- it pins the mcpp that compiles mcpp, does not move when mcpp is
released, and would otherwise ask the index for a version it may no longer
carry. The version under review is printed, because a PATH entry that does not
win looks exactly like one that does until something has been measured with
the wrong engine.
The pins-agree check is unaffected: it compares this workflow's pin with
pins.toml, and both still name the released version. A source ref is an
override on top of that agreement, not a replacement for it.
* the engine under review replaces the released binary in place
The first revision prepended the freshly built `mcpp` to PATH beside its own
`target/` directory. The measurement then stopped at
error: xlings binary not found
A released archive carries a BUNDLED xlings that mcpp resolves relative to its
own location; a binary sitting in a build tree has no such neighbour, and
moving `MCPP_HOME` to that tree moved the search with it.
Overwriting `bin/mcpp` inside the released root instead keeps everything about
that root as the release left it --- the bundled xlings, the layout,
`MCPP_HOME`, the PATH entry already exported --- and changes only the one file
under review. The version is reported from the path the measurement will
actually run, because a copy that did not land looks exactly like one that did
until something has been measured with the wrong engine.
Found by using this mechanism on its first real cross-verification, which is
where a plumbing defect is cheap.1 parent bf62dd5 commit ab0e5ba
1 file changed
Lines changed: 58 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
20 | 24 | | |
21 | 25 | | |
22 | 26 | | |
| |||
34 | 38 | | |
35 | 39 | | |
36 | 40 | | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
37 | 57 | | |
38 | 58 | | |
39 | 59 | | |
| |||
76 | 96 | | |
77 | 97 | | |
78 | 98 | | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
79 | 137 | | |
80 | 138 | | |
81 | 139 | | |
| |||
0 commit comments