amicus 4.9.1 → 4.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/utils/ttft.js CHANGED
@@ -9,12 +9,23 @@
9
9
  * blank the way `utils/result-schema.js`'s already is.
10
10
  *
11
11
  * `ttftMs` is produced once — in `src/headless.js`'s poll loop, as a
12
- * `Date.now()` delta — and then passes four EMIT GATES on its way to a
12
+ * `Date.now()` delta — and then passes five EMIT GATES on its way to a
13
13
  * document: `headless.js`'s three returns, `sidecar/fanout-leg.js`'s leg patch,
14
- * `utils/result-schema.js :: buildRunResult`, and
15
- * `council/run-stats-entry.js :: buildRunStatsEntry`. Every gate used to spell
16
- * its own `typeof x === 'number'` test, which is four chances to disagree and
17
- * four ways to publish a value both schemas forbid.
14
+ * `utils/result-schema.js :: buildRunResult`,
15
+ * `council/run-stats-entry.js :: buildRunStatsEntry`, and
16
+ * `council/tally.js :: tally`'s runStats re-projection. Every gate used to spell
17
+ * its own `typeof x === 'number'` test, which is five chances to disagree and
18
+ * five ways to publish a value both schemas forbid.
19
+ *
20
+ * ⚠️ The fifth gate is different in KIND from the four above it, which is why it
21
+ * was missed for a release (#202). Those four are PRODUCERS — each writes the
22
+ * field onto a document it is building. `tally.js` is a RE-PROJECTION: it copies
23
+ * an already-built row through a hand-maintained allowlist, so omitting the field
24
+ * there does not fail to produce it, it DESTROYS one already produced. Between
25
+ * v4.9.0 and v4.9.1 that is exactly what happened — the probe wrote real values
26
+ * into tally-input.json and every one was stripped before tally.json and
27
+ * verdict.json, the only run artifacts CI uploads (MEASURED, run 33030485388:
28
+ * 11 of 12 rows carried it going in, 0 of 12 coming out).
18
29
  *
19
30
  * ⚠️ `typeof` is not the schema's contract. `schemas/run.schema.json` and
20
31
  * `schemas/council-tally.schema.json` both declare this field
@@ -35,7 +46,7 @@
35
46
  * already means "no honest measurement was made", and a dishonest number is
36
47
  * exactly that. `0` itself stays a real, emittable measurement.
37
48
  *
38
- * ⚠️ Three of the four gates import this. The fourth,
49
+ * ⚠️ Four of the five gates import this. The one that does not,
39
50
  * `council/run-stats-entry.js`, is pinned REQUIRE-FREE (P3,
40
51
  * tests/council/run-stats-entry.test.js — the pin fires on the character
41
52
  * sequence anywhere in that file, comments included) so require-free consumers