You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Cut padding from nine evidence records; every measurement, table,
command fence, hash, pin, date, verdict, and rejection rationale
survives verbatim. Removed classes: table-reading prose restating
complete result tables, baseline-eligibility and scope/status doctrine
restated beyond its first occurrence or its owning record (PERF-R2 owns
the trusted-baseline criteria, docs/evidence.md owns the DOC-A manifest
architecture, each header owns its status line), per-iteration ritual
boilerplate in the t11 log, and acquisition narration duplicating
recorded commands.
Gate-counted legacy identity strings preserved at identical per-class
counts (verified per file before and after edit). Alignment allowances
unchanged.
Gates: bun test scripts 915/915 (includes alignment witnesses,
docs-evidence adversarial, release-docs dry runs, style ledger,
supported-platforms citation contract).
All four distributions pass the noise gate. The Rust cold collection is borderline at ~0.8 s; the paired TypeScript cold collection exceeds 1 s, and the warm collections for both implementations exceed 1 s. The lane has a trusted baseline.
54
-
55
53
Ranked time share: one-time startup cost. Negligible in long sessions; dominant in short `--version`-class invocations. Ranked 8/11 by session time share (startup is a fixed cost, not a sustained loop).
56
54
57
55
Hot/cold unit split:
@@ -64,8 +62,6 @@ Hot/cold unit split:
64
62
| Version lookup | Hot | In-memory constant-time path |
65
63
| One output write + clean exit | Hot | Executes on every invocation |
66
64
67
-
Cold units dominate: Rust cold is approximately warm (40.07 vs 40.93), TS cold is approximately warm (540.42 vs 535.01), confirming runtime loading is the dominant cost and cache-drop has minimal marginal effect.
Ranked time share: one-time per session. For a 30-minute coding session, ~0.4 s (Rust) is <0.02% of wall time. For a 5-second short session, it is ~5%. Ranked 7/11 by session time share.
95
89
96
90
Hot/cold unit split:
@@ -103,8 +97,6 @@ Hot/cold unit split:
103
97
| TUI construction + layout | Hot | Every invocation; scales with component tree |
104
98
| First terminal paint (synchronized output) | Hot | Every invocation; I/O-bound |
105
99
106
-
Cold-warm delta: Rust +4.75 ms (243.61 to 248.36), TS +47.59 ms (552.65 to 600.24). The TS warm path is 10x more affected by warmup, suggesting JIT/initialization work that the Rust binary does not have. Hot units: TUI construction, layout, first paint. Cold units: process creation, runtime loading.
| Rust | 1.133 | 5.13% | pass |~11.8 s (23 x 512 ms minimum) |
127
119
| TS | 2.441 | 3.59% | pass |~11.8 s |
128
120
129
-
All pass. Trusted baseline established. Threshold validity confirmed: zero starvation samples in either implementation (`thresholdValid: true`).
121
+
Threshold validity confirmed: zero starvation samples in either implementation (`thresholdValid: true`).
130
122
131
123
Ranked time share: sustained dominant workload during active model interaction. During a streaming turn, this is approximately 60 to 80% of wall time. Ranked 1/11 by session time share.
All per-frame units are hot (>=5% of time, input-scaling). The 512 ms injected delay (256 x 2 ms) is wall time but not CPU, so CPU/frame is the clean implementation metric.
136
+
The 512 ms injected delay (256 x 2 ms) is wall time but not CPU, so CPU/frame is the clean implementation metric.
| Input dispatch to state mutation | Hot | Per-keystroke |
169
161
| Terminal diff/encode/write (paint) | Hot | Per-keystroke |
170
162
171
-
All units are hot. No cold units (process is already warm; this is a steady-state interactive measurement).
163
+
No cold units (process is already warm; this is a steady-state interactive measurement).
172
164
173
165
Claim class: single-implementation regression floor. The p99 threshold is 5 ms (current p99: 2.59 ms, passes the regression floor). No comparative claim is supportable because no TypeScript peer exists. The noise-gate failure means the current distribution cannot feed a verdict; remediation requires pinning CPU governor, isolating the process, widening sample counts, or enlarging the input.
174
166
@@ -195,7 +187,7 @@ Trusted baseline: none. All seven measured timed distributions fail the noise ga
195
187
| active20 frame | 0.018 | 34.4% | FAIL |
196
188
| fast terminalInput | 0.024 | 46.5% | FAIL |
197
189
198
-
The artifact is rejected as noise (the `requireQuiet` gating set covers five distributions; the active20 keypress and frame distributions are reported in the artifact but not gated by the script). Sub-millisecond medians with high jitter are inherent to the current sample size and input granularity. Collection wall per scenario is < 1 s.
190
+
The artifact is rejected as noise (the `requireQuiet` gating set covers five distributions; the active20 keypress and frame distributions are reported in the artifact but not gated by the script). Sub-millisecond medians with high jitter are inherent to the current sample size and input granularity.
199
191
200
192
Ranked time share: per-input-event overhead. During active interaction with extensions, this is per-keystroke overhead. Ranked 5/11 by session time share (amortized over the extension fan-out).
201
193
@@ -210,7 +202,7 @@ Hot/cold unit split:
210
202
| Widget callback + UI-slot traffic | Hot | Per-frame when active |
Claim class: single-implementation regression floor (TypeScript `ExtensionHost` only). No Rust peer executes the same frames. The Rust `serve_io` scaling suite (lane 6) covers the production server path but does not produce timed distributions. Remediation for the noise gate: enlarge the input (heavier per-request work), widen sample counts, or pin CPU governor.
205
+
Claim class: single-implementation regression floor (TypeScript `ExtensionHost` only). No Rust peer executes the same frames. The Rust `serve_io` scaling suite (lane 6) covers the production server path but does not produce timed distributions.
All per-frame units are hot. The static scenario measures pure recomposition churn; the editor scenario adds one text mutation per frame.
247
+
The static scenario measures pure recomposition churn; the editor scenario adds one text mutation per frame.
256
248
257
249
Claim class: D8-blocked. Upstream-only; no symmetric Rust benchmark. PERF-T3 (#89) will build the Rust peer with the same tree, viewport, warmups, frame count, and scenarios. Until then, this lane is an explicit non-claim.
All four distributions pass the noise gate; per-implementation collection wall exceeds 1 s (10 samples × 10 000 calls each); order alternates per sample.
283
-
284
274
Claim class: paired comparative. Wall ratio TS/Rust 0.77x (TypeScript's slice is faster in wall time); CPU ratio TS/Rust 2.04x (Rust uses half the CPU per call). Recorded as lane data — the Rust dispatch slice pays tokio task-spawn scheduling for the production parallel batch path, while upstream executes the batch on promises. Both implementations reject the shared invalid payload (`count: 999`) during argument validation with `update=0` and an error result per call; upstream additionally coerces mistyped primitives (TypeBox `Value.Convert`) where Rust rejects them — a recorded validation divergence, kept out of the timed payload.
285
275
286
276
### Lane 9: Session persistence/reopen (D8-blocked)
@@ -306,7 +296,7 @@ Hot/cold unit split:
306
296
| Session/tree state reconstruction | Hot | Per-session; input-scaling |
All persistence units are hot (>=5% of time during append/reopen). The cold-cache lane (page-cache miss on reopen) is a cold unit that requires explicit instrumentation.
299
+
The cold-cache lane (page-cache miss on reopen) is a cold unit that requires explicit instrumentation.
310
300
311
301
Claim class: D8-blocked. Composite evidence exists; no isolated timed boundary. PERF-T4 (#86) will add isolated session append and reopen timing lanes. Until then, this lane is an explicit non-claim.
All five crates have at least one paired comparative lane with a trusted baseline (lane 3 crosses all five crates). `pi-agent` has no standalone lane; its tool-dispatch path is measured through lane 8 (`pi` entry, `pi-agent` dispatch).
415
-
416
402
## Evidence provenance
417
403
418
404
-`target/bench/performance-comparison.json`: check 9 artifact, generated 2026-08-26T14:22:29Z on this machine.
All four distributions pass the noise gate. Per-implementation collection
199
-
wall exceeds 1 s (10 samples x 10 000 calls each). Trusted baseline
200
-
established.
201
-
202
177
Claim class: paired comparative. Wall ratio TS/Rust 0.75x (TypeScript's
203
178
slice is faster in wall time — the Rust dispatch slice pays tokio task-spawn
204
179
scheduling for the production parallel batch path). CPU ratio TS/Rust 2.04x
@@ -327,7 +302,7 @@ lanes and confirms one existing baseline. No units are removed.
327
302
328
303
### Lanes with trusted baselines after R8
329
304
330
-
Seven lanes now have trusted baselines or paired measurements (up from five in R2's amended text — R2's summary tables listed four, but R2's Lane 8 section was amended to record a fifth):
305
+
Seven lanes now have trusted baselines or paired measurements:
331
306
332
307
| Lane | Rust median | TS median | TS/Rust ratio | Noise gate | Type |
Copy file name to clipboardExpand all lines: docs/REL-R2-macos-signing.md
-6Lines changed: 0 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -67,7 +67,6 @@ those facts outside this repository.
67
67
### Required credential set
68
68
Confirm or provision every item below before enabling the signed channel.
69
69
70
-
71
70
| Credential | Purpose | Who confirms or provisions | Notes |
72
71
|---|---|---|---|
73
72
| Apple Developer Program membership | Prerequisite for every Developer ID / notarization credential | Apple Developer account owner | Confirm active membership; enroll only if absent. |
@@ -175,11 +174,6 @@ repository administrator confirms or provisions the required Actions secrets.
175
174
The required tools are already present on the `macos-15-intel` and `macos-15`
176
175
runners at the dated image snapshot.
177
176
178
-
This verdict is **non-gating by design**: the unsigned seven-target release definition is
179
-
unaffected and remains the current ship contract. The darwin legs already build and package
180
-
correctly unsigned; signing/notarization is a credential-gated follow-on, as the issue
181
-
states.
182
-
183
177
## 7. Open items for the REL implementer (out of scope here)
184
178
185
179
- Archive/container strategy for notarization: `notarytool` accepts ZIP, DMG, and PKG, but
0 commit comments