dsh-vision-router 2.2.7 → 2.3.0
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/README.md +8 -8
- package/README.zh.md +8 -8
- package/docs/architecture/2.3.0-compat-retirement.md +147 -0
- package/docs/architecture/2.3.0-execution-plan.md +410 -0
- package/docs/architecture/2.3.0-final-audit.md +279 -0
- package/docs/architecture/2.3.0-reopened-plan.md +720 -0
- package/docs/architecture/compat-inventory.md +26 -34
- package/docs/architecture/dsh-020-rc2-adaptation.md +23 -0
- package/docs/architecture/dsh-compatibility-matrix.md +65 -54
- package/docs/architecture/dsh-support-window.md +29 -21
- package/docs/architecture/final-closure-audit.md +2 -0
- package/docs/architecture/host-first-proxy-convergence.md +1 -1
- package/docs/releases/v2.2.8.md +25 -0
- package/docs/releases/v2.3.0.md +53 -0
- package/entry.js +8 -56
- package/index.js +161 -691
- package/lib/catalog-corrections.js +1 -2
- package/lib/client-host-compat-prelude.js +7 -12
- package/lib/client-maintenance-actions.js +145 -0
- package/lib/client-presentation-boundary-main.js +82 -32
- package/lib/client-presentation-boundary.js +60 -40
- package/lib/client-script-carrier.js +90 -0
- package/lib/client.js +248 -146
- package/lib/core-apply-lifecycle.js +47 -0
- package/lib/core-primitives.js +88 -135
- package/lib/desktop-screenshot-tool.js +262 -0
- package/lib/dsh-contract-compat.js +11 -26
- package/lib/dsh-support-window.js +4 -4
- package/lib/guide-vision-toggle-highlight.js +7 -10
- package/lib/http-compat.js +1 -2
- package/lib/live-model-client-prelude.js +7 -14
- package/lib/local-remote-settings-permission.js +41 -16
- package/lib/maintenance-routes.js +136 -0
- package/lib/public-config.js +57 -0
- package/lib/public-entry.js +2 -7
- package/lib/remote-settings-bridge.js +11 -0
- package/lib/remote-settings-risk-client-boundary.js +155 -0
- package/lib/remote-settings-risk-confirmation.js +17 -105
- package/lib/runtime-composition.js +105 -30
- package/lib/runtime-i18n-boundary.js +10 -11
- package/lib/session-message-source-compat.js +7 -3
- package/lib/session-vision-index.js +154 -9
- package/lib/session-vision-mode-boundary.js +43 -8
- package/lib/settings-client-loader-lifecycle.js +129 -0
- package/lib/settings-factory-lifecycle.js +25 -14
- package/lib/settings-ia-client-prelude.js +11 -11
- package/lib/settings-limit-client-prelude.js +7 -9
- package/lib/sharp-runtime.js +0 -7
- package/lib/strict-live-model-client-prelude.js +7 -10
- package/lib/structured-flow-hardening.js +3 -2
- package/lib/v2-settings-ia-integration.js +21 -6
- package/lib/vision-backend-runtime-policy.js +3 -2
- package/lib/vision-background-benchmark.js +3 -5
- package/lib/vision-capability-benchmark-client.js +7 -10
- package/lib/vision-capability-benchmark-service.js +1 -0
- package/lib/vision-diagnostics-routes.js +216 -0
- package/lib/vision-evidence-guidance.js +3 -1
- package/lib/vision-exact-check-client.js +11 -6
- package/lib/vision-model-visibility-boundary-main.js +7 -11
- package/lib/vision-model-visibility-boundary.js +7 -12
- package/lib/vision-provider-transport.js +0 -29
- package/lib/vision-routing-settings-prelude.js +7 -11
- package/lib/vision-toggle-root-hardening.js +50 -8
- package/lib/vision-tool-runtime-boundary.js +5 -1
- package/lib/vision-turn-budget-client-prelude.js +7 -10
- package/lib/web/remote-settings-client.js +9 -14
- package/package.json +23 -13
- package/lib/android-attachment-compat.js +0 -244
- package/lib/settings-client-rc8-lifecycle.js +0 -402
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
# DVR 2.3.0 final architecture audit
|
|
2
|
+
|
|
3
|
+
> **R5 final decision.** This document replaces the earlier first-pass snapshot that was later superseded by `2.3.0-reopened-plan.md`.
|
|
4
|
+
|
|
5
|
+
Audited production baseline: `079781cf175308d3f46925c413c1891894d3dec0` — `refactor(core): prune retired import fan-out`.
|
|
6
|
+
|
|
7
|
+
R5 evidence head: `3bd943915a7fa3ff9bd440b89f9be60318b7614e`. The R5 evidence commits align architecture tests and the temporary deep-audit runner around the audited production baseline.
|
|
8
|
+
|
|
9
|
+
Post-R5 release-preparation code baseline: `5af60011819a05f9ad7c068e1d798c435e4125b0` — `ci(release): fail closed on generated client and Host policy`. The architecture phase itself remained closed after this point, but the later pre-release bug audit found concrete lifecycle/transport correctness defects that were fixed without changing the established semantic-owner model.
|
|
10
|
+
|
|
11
|
+
Final pre-release closure was integrated by PR #607/#609 for Session v4 producer-owned message sources and PR #611 for provider-transport propagation, cancellation ownership, Remote Settings RPC isolation, and latest-selection recovery. PR #611 final head `b8bbd8de7658423019dc83090e7c6a15a5b651d4` merged into the final production-code baseline `0c3c08078fd4c744f97560dc4fb6fea7935698f1`.
|
|
12
|
+
|
|
13
|
+
The release-document reconciliation that follows this code baseline is documentation-only. The eventual `v2.3.0` tag must point to the exact current `main` after that reconciliation; this audit intentionally does not hardcode a self-referential post-documentation merge SHA. There is still **no `v2.3.0` tag, npm 2.3.0 publication, or GitHub Release** at this point.
|
|
14
|
+
|
|
15
|
+
## 1. Exit decision and finding ledger
|
|
16
|
+
|
|
17
|
+
| Severity | Unresolved findings |
|
|
18
|
+
| --- | ---: |
|
|
19
|
+
| High | 0 |
|
|
20
|
+
| Medium | 0 |
|
|
21
|
+
|
|
22
|
+
The reopened 2.3 architecture phase is therefore **complete**.
|
|
23
|
+
|
|
24
|
+
This is not a claim of complete modularization. It means the R0-R5 architecture findings have been reconciled without creating a second semantic owner, the supported Host window is evidenced, retained compatibility has explicit removal conditions, and the final adversarial/resource/browser/pack gates are green.
|
|
25
|
+
|
|
26
|
+
Two R5 audit findings were closed during the audit itself:
|
|
27
|
+
|
|
28
|
+
1. the frozen Architecture Closure matrix still asserted that DeepSeek ownership diagnostics lived in `index.js`, although R3 had intentionally extracted that responsibility to `lib/vision-diagnostics-routes.js`; `fd97e5e` corrected the contract so Core is forbidden from regaining that Web response ownership while the diagnostics owner must continue the live route-availability check;
|
|
29
|
+
2. repository import review found retired/unused mature-Core import fan-out; `079781c` removed those edges without moving runtime authority or behavior.
|
|
30
|
+
|
|
31
|
+
Post-R5 release-readiness review also closed two non-architecture consistency findings:
|
|
32
|
+
|
|
33
|
+
1. `cea9ca4` aligned Doctor's human-readable `0.2.0-rc.2` evidence with the actual peer-admitted 0.2.x support boundary, and `75c4973` aligned the previously dormant support-window contract; the contract is now part of the branch-local Node 22/24 critical gate;
|
|
34
|
+
2. `5af6001` made the release workflow independently fail closed on deterministic browser-source synchronization and the Host support-window contract before any tag/npm/GitHub write phase.
|
|
35
|
+
|
|
36
|
+
A small client-bundle review-margin issue remains **Low retained debt**, not a release-blocking architecture finding: `lib/client.js` is 261,672 bytes against the existing 262,144-byte single-file review bound, leaving 472 bytes. The bound is intentionally not weakened. Future browser growth should prefer further source-owner extraction instead of raising the limit or hiding growth through fragile late minification.
|
|
37
|
+
|
|
38
|
+
## 2. What 2.3 inherited versus what 2.3 changed
|
|
39
|
+
|
|
40
|
+
### Inherited hardening
|
|
41
|
+
|
|
42
|
+
The branch began from the v2.2.7 line with substantial Desktop/Host work already present, including official Desktop origin handling, Settings/Session/Web lifecycle compatibility, Host-first proxy behavior, and earlier Session/fetch repairs.
|
|
43
|
+
|
|
44
|
+
Those inherited changes are prerequisites, not 2.3-authored accomplishments.
|
|
45
|
+
|
|
46
|
+
### Parallel main/Desktop work integrated into 2.3
|
|
47
|
+
|
|
48
|
+
R0 first merged the v2.2.8 mainline. Later, before R4 browser work, the then-current main `65415159` was reconciled with a true dual-parent merge:
|
|
49
|
+
|
|
50
|
+
- `0f642b92` — `merge: reconcile latest main before R4`.
|
|
51
|
+
|
|
52
|
+
That integration brought the newer Desktop Settings launcher/onboarding lifecycle into the same ancestry before further browser modularization.
|
|
53
|
+
|
|
54
|
+
### New 2.3 architecture work
|
|
55
|
+
|
|
56
|
+
Major 2.3-owned changes include:
|
|
57
|
+
|
|
58
|
+
- descriptor-safe runtime-i18n fetch wrapping and the complete fetch-composition matrix;
|
|
59
|
+
- explicit five-phase runtime composition;
|
|
60
|
+
- explicit `VisionProviderTransport` plumbing with the process-global registry removed;
|
|
61
|
+
- continuous DSH support policy from the 0.1.5 train plus exact rc.2 development Host pinning;
|
|
62
|
+
- retirement of pre-floor Android/no-batch attachment fallback, legacy DeepSeek provider reconstruction, and rc.7 public archaeology aliases;
|
|
63
|
+
- bounded Session event-feed overflow recovery;
|
|
64
|
+
- async Core bootstrap settlement correctness;
|
|
65
|
+
- public Config, maintenance Web routes and Desktop screenshot-tool extraction;
|
|
66
|
+
- diagnostics Web ownership extraction to `lib/vision-diagnostics-routes.js`;
|
|
67
|
+
- source-owned browser maintenance actions with deterministic generated-bundle checking;
|
|
68
|
+
- source-owned remote Settings risk/reminder behavior and local permission behavior;
|
|
69
|
+
- capability-named Settings loader lifecycle ownership;
|
|
70
|
+
- DSH `ModelDirectory.select()` `RemoteResult` semantics honored by the Vision toggle;
|
|
71
|
+
- durable production ESM-cycle audit.
|
|
72
|
+
|
|
73
|
+
## 3. Semantic ownership after R5
|
|
74
|
+
|
|
75
|
+
The established owners remain unchanged:
|
|
76
|
+
|
|
77
|
+
| Responsibility | Owner |
|
|
78
|
+
| --- | --- |
|
|
79
|
+
| routing/background authority | `vision-routing-authority.js` |
|
|
80
|
+
| routing evidence | `vision-routing-evidence.js` |
|
|
81
|
+
| planning/scoring | `vision-capability-router.js` |
|
|
82
|
+
| execution order | `vision-execution-order.js` |
|
|
83
|
+
| Session visual state/index | explicit Session runtime/state/index |
|
|
84
|
+
| managed artifacts | `vision-artifact-store.js` |
|
|
85
|
+
| Router-owned provider HTTP | explicit `vision-provider-transport.js` instance |
|
|
86
|
+
| product/Host presentation | server product/presentation boundaries |
|
|
87
|
+
| browser rendering | client/presentation layer |
|
|
88
|
+
|
|
89
|
+
Final closure tests continue to forbid hidden module-global `current*` semantic owners, unregistered module-level `installed[]` registries and Core-like runtime facades.
|
|
90
|
+
|
|
91
|
+
The R3 secondary “provider-call transport binding” extraction was deliberately rejected: moving three one-line closures would add an interface without reducing the real transport dependency of the primitives/data plane.
|
|
92
|
+
|
|
93
|
+
## 4. Composition and mature-Core snapshot
|
|
94
|
+
|
|
95
|
+
Current production metrics:
|
|
96
|
+
|
|
97
|
+
| File | Lines | UTF-8 bytes | Direct local import fan-out |
|
|
98
|
+
| --- | ---: | ---: | ---: |
|
|
99
|
+
| `index.js` | 4,787 | 223,815 | 28 |
|
|
100
|
+
| `lib/core-primitives.js` | 2,935 | 120,717 | 11 |
|
|
101
|
+
| `lib/runtime-composition.js` | 468 | 20,774 | 44 |
|
|
102
|
+
| `lib/client.js` | 4,961 | 261,672 | 0 ESM imports |
|
|
103
|
+
| `entry.js` | 33 | 1,218 | 3 |
|
|
104
|
+
|
|
105
|
+
`runtime-composition.js` remains the highest-fan-out module because it is the construction root. Its five explicit phases make lifecycle ordering inspectable; fan-out there is not treated as a reason to invent another container/facade.
|
|
106
|
+
|
|
107
|
+
`index.js` and `core-primitives.js` remain large. R3 intentionally stopped extraction when the next candidate would only move callbacks/dependencies without creating a stable owner.
|
|
108
|
+
|
|
109
|
+
## 5. Browser/source modularization verdict
|
|
110
|
+
|
|
111
|
+
R4 moved current Settings product semantics out of compatibility preludes:
|
|
112
|
+
|
|
113
|
+
- `remote-settings-risk-client-boundary.js` is the single owner for the remote risk/reminder behavior;
|
|
114
|
+
- `local-remote-settings-permission.js` owns the local permission normalization/write behavior;
|
|
115
|
+
- `settings-client-loader-lifecycle.js` owns only the supported Host queue-to-live reattachment lifecycle.
|
|
116
|
+
|
|
117
|
+
The old rc.8-labelled source/API name is gone. The historical in-page marker/sentinel remains only for mixed-generation/HMR idempotency.
|
|
118
|
+
|
|
119
|
+
The standalone remote-risk Web `tapIndex()` fallback is intentionally retained. Moving it onto the shared Desktop structured carrier was reviewed and rejected because Desktop/live attachment is already handled by the loader lifecycle; installing the fallback there would create duplicate wrapper execution, not improve ownership.
|
|
120
|
+
|
|
121
|
+
Likewise, `settings-factory-lifecycle.js` and `settings-client-loader-lifecycle.js` remain separate because they re-arm different responsibilities. Combining them would couple unrelated lifecycle concerns.
|
|
122
|
+
|
|
123
|
+
## 6. Compatibility retirement verdict
|
|
124
|
+
|
|
125
|
+
Canonical inventory at R5:
|
|
126
|
+
|
|
127
|
+
| State | Count |
|
|
128
|
+
| --- | ---: |
|
|
129
|
+
| `retain-host-gap` | 6 |
|
|
130
|
+
| `product-compat` | 4 |
|
|
131
|
+
| `retire-ready` | 0 |
|
|
132
|
+
| `historical-only` | 0 |
|
|
133
|
+
|
|
134
|
+
Retained Host-gap seams:
|
|
135
|
+
|
|
136
|
+
- `dsh-contract-compat.js`;
|
|
137
|
+
- `adapter-update-coalescer.js`;
|
|
138
|
+
- `pi-ai-bridge-wire-compat.js`;
|
|
139
|
+
- `settings-client-loader-lifecycle.js`;
|
|
140
|
+
- `legacy-global-proxy-boundary.js`;
|
|
141
|
+
- `legacy-core-vision-policy-bridge.js`.
|
|
142
|
+
|
|
143
|
+
Retained product/platform/durable-data seams:
|
|
144
|
+
|
|
145
|
+
- `replay-envelope-v2-compat.js`;
|
|
146
|
+
- `http-compat.js`;
|
|
147
|
+
- `tesseract-exec-compat.js`;
|
|
148
|
+
- `abort-signal-compat.js`.
|
|
149
|
+
|
|
150
|
+
No remaining seam satisfies its recorded deletion protocol. In particular, durable replay/profile compatibility is not retired merely because the Host support floor moved forward.
|
|
151
|
+
|
|
152
|
+
The DSH Web activation overlays remain externally blocked on upstream ownership and continue to be classified through exact-source contracts.
|
|
153
|
+
|
|
154
|
+
Remote Settings remains the frozen product contract: the confirmation is **reminder/acknowledgement only**. `acceptedRisk: true` is not authentication, authorization proof, local-presence proof, a challenge response or a credential.
|
|
155
|
+
|
|
156
|
+
## 7. Final Host and runtime evidence
|
|
157
|
+
|
|
158
|
+
### Current/minimum Host
|
|
159
|
+
|
|
160
|
+
DSH Contract run `36673859352`: **success**.
|
|
161
|
+
|
|
162
|
+
It validates both:
|
|
163
|
+
|
|
164
|
+
- minimum supported `0.1.5-rc.1`, including minimum Settings persistence;
|
|
165
|
+
- current stable evidence `0.1.5-rc.3`.
|
|
166
|
+
|
|
167
|
+
### Exact supported 0.1.x source matrix
|
|
168
|
+
|
|
169
|
+
Run `36672168695`: **success** across all nine jobs:
|
|
170
|
+
|
|
171
|
+
- `0.1.5-rc.1` on Ubuntu/macOS/Windows;
|
|
172
|
+
- `0.1.5-rc.3` on Ubuntu/macOS/Windows;
|
|
173
|
+
- `0.1.7-rc.2` on Ubuntu/macOS/Windows.
|
|
174
|
+
|
|
175
|
+
This run is after the R4 Settings/browser lifecycle changes.
|
|
176
|
+
|
|
177
|
+
### Node 22 / Node 24 and rc.2 Desktop/Host
|
|
178
|
+
|
|
179
|
+
Aggregate run `36673859774`: **success**.
|
|
180
|
+
|
|
181
|
+
On the audited evidence head it covers:
|
|
182
|
+
|
|
183
|
+
- Node 22 full regression: **1,556 tests / 1,550 pass / 6 skip / 0 fail**;
|
|
184
|
+
- Node 24 full regression: **1,556 tests / 1,550 pass / 6 skip / 0 fail**;
|
|
185
|
+
- current Host contract;
|
|
186
|
+
- exact `0.2.0-rc.2` source on Ubuntu/macOS/Windows;
|
|
187
|
+
- real Host + Chromium;
|
|
188
|
+
- Windows Desktop on Node 22 and Node 24;
|
|
189
|
+
- real macOS Desktop renderer lifecycle;
|
|
190
|
+
- final aggregate `critical-gate`.
|
|
191
|
+
|
|
192
|
+
Package smoke succeeds. Post-R5 release preparation sets the package identity to `2.3.0`; publication remains separate. Release-ready validation on `5af6001` is aggregate run `36683695105` — **success** across Node 22/24, current Host, rc.2 source/browser/Desktop and final `critical-gate`. The supported 0.1.x exact-source matrix after the support-policy wording fix is run `36682332455` — **success** on `cea9ca4`; the following `75c4973` commit changes only the contract wording itself.
|
|
193
|
+
|
|
194
|
+
### Final pre-release candidate after #606 / #611
|
|
195
|
+
|
|
196
|
+
The final integrated candidate was exercised again after the release-blocker audit:
|
|
197
|
+
|
|
198
|
+
- CI run `36807044745`: Node 22 and Node 24 each **1,569 tests / 1,563 pass / 6 skip / 0 fail**, plus **10/10** backend-runtime-policy tests;
|
|
199
|
+
- Architecture Closure run `36807044583`: **131/131** on Node 22 and **131/131** on Node 24;
|
|
200
|
+
- DSH `0.1.7-rc.2` real Host run `36807044648`: Chromium, Windows Desktop Node 22/24, and macOS Desktop renderer all pass; the first macOS attempt hit an Electron runner startup timeout and the isolated rerun passed, matching a successful local run against the same upstream `477b4f4` source;
|
|
201
|
+
- DSH `0.2.0-rc.2` validation run `36807044773`: exact source Windows/Linux/macOS, real Host + Chromium, Windows Desktop Node 22/24, official peer admission, Host proxy authority, and real macOS Desktop renderer all pass;
|
|
202
|
+
- production ESM graph at release prep: **166 modules / 354 static relative edges / 0 cycles**;
|
|
203
|
+
- exact upstream v4 row-admission assertions cover every DVR-owned durable v4 message source.
|
|
204
|
+
|
|
205
|
+
These post-R5 fixes close concrete lifecycle and transport regressions while preserving the R5 semantic ownership decisions.
|
|
206
|
+
|
|
207
|
+
## 8. R5 adversarial, quality and resource evidence
|
|
208
|
+
|
|
209
|
+
Temporary R5 deep-audit run `36673859366`: **success**.
|
|
210
|
+
|
|
211
|
+
Architecture Closure:
|
|
212
|
+
|
|
213
|
+
- Node 22: **132 / 132**;
|
|
214
|
+
- Node 24: **132 / 132**.
|
|
215
|
+
|
|
216
|
+
Static dependency audit:
|
|
217
|
+
|
|
218
|
+
- **166** production ESM modules;
|
|
219
|
+
- **347** static relative dependency edges;
|
|
220
|
+
- **0** cycles.
|
|
221
|
+
|
|
222
|
+
Fuzz evidence:
|
|
223
|
+
|
|
224
|
+
- deterministic property fuzz: 1,000 cases, seed `1592639710`;
|
|
225
|
+
- deterministic adversarial fuzz: 500 cases, seed `1592639710`;
|
|
226
|
+
- rotating property fuzz: 3,000 cases, seed `2314120998`;
|
|
227
|
+
- rotating adversarial fuzz: 1,500 cases, seed `2314120998`;
|
|
228
|
+
- all passed.
|
|
229
|
+
|
|
230
|
+
Quality baseline:
|
|
231
|
+
|
|
232
|
+
- **12 / 12**.
|
|
233
|
+
|
|
234
|
+
100MP compressed-image resource stress, with a 256 MiB peak-delta gate:
|
|
235
|
+
|
|
236
|
+
- Linux peak delta: **61.0 MiB** maximum;
|
|
237
|
+
- macOS peak delta: **72.1 MiB** maximum;
|
|
238
|
+
- Windows peak delta: **92.5 MiB** maximum;
|
|
239
|
+
- every concurrency record ended with `activeBytes=0`, `activeCount=0`, `queued=0`.
|
|
240
|
+
|
|
241
|
+
The one-shot R5 workflow existed only to make this evidence reproducible and is removed after recording these results. The durable ESM-cycle test remains in the default test manifest.
|
|
242
|
+
|
|
243
|
+
## 9. Retained debt
|
|
244
|
+
|
|
245
|
+
R5 closes with explicit debt, not a purity claim:
|
|
246
|
+
|
|
247
|
+
1. **Mature Core remains large.** Further extraction should wait for a stable owner seam rather than chase LOC.
|
|
248
|
+
2. **Composition remains high fan-out.** This is acceptable for a construction root but new installers should continue to be challenged.
|
|
249
|
+
3. **The delivered browser bundle remains monolithic and near its review bound.** It has only 472 bytes of headroom under the 256 KiB single-file review limit. Do not raise the bound casually; continue source extraction before adding substantial product logic.
|
|
250
|
+
4. **Ten compatibility seams remain intentionally supported.** None currently meets its removal condition.
|
|
251
|
+
5. **DSH Web activation overlays remain upstream-blocked.** Exact-source watchers must continue to detect when the upstream gap actually closes.
|
|
252
|
+
|
|
253
|
+
None of these retained items is an unresolved High or Medium 2.3 architecture finding.
|
|
254
|
+
|
|
255
|
+
## 10. Release handoff
|
|
256
|
+
|
|
257
|
+
Architecture closure, code integration, and publication remain separate phases. **The 2.3.0 code candidate is integrated into `main`; publication is still intentionally not performed.**
|
|
258
|
+
|
|
259
|
+
Completed before publication:
|
|
260
|
+
|
|
261
|
+
- package version -> `2.3.0`;
|
|
262
|
+
- #606 Session v4 producer-source fix and exact upstream admission hardening merged;
|
|
263
|
+
- #611 final lifecycle/transport/Settings/toggle closure merged as `0c3c080`;
|
|
264
|
+
- bilingual CHANGELOG and curated `docs/releases/v2.3.0.md` reconciled to the final candidate;
|
|
265
|
+
- README release/support messaging is already present;
|
|
266
|
+
- Doctor/support-window wording remains aligned with the peer-admitted `0.2.0-rc.2` boundary;
|
|
267
|
+
- release verification runs both `pnpm client:check` and `tests/dsh-support-window.test.js` before any write-token phase;
|
|
268
|
+
- Node 22/24, 0.1.7 real Host, rc.2 exact-source/Desktop, Architecture Closure, P1/P2/P3, dependency/fuzz/resource and source-sync gates are green.
|
|
269
|
+
|
|
270
|
+
Repository-governance review found one active ruleset, **Main PR safety**, requiring PR-based integration/thread resolution but exposing no required status-check rule. No ruleset or branch-protection mutation is part of the 2.3 release preparation.
|
|
271
|
+
|
|
272
|
+
Once this release-document reconciliation is present on `main`, only explicit publication authorization remains:
|
|
273
|
+
|
|
274
|
+
- create `v2.3.0` at the then-current exact `main` SHA;
|
|
275
|
+
- publish npm/GitHub Release/provenance through `.github/workflows/release.yml`.
|
|
276
|
+
|
|
277
|
+
The release workflow is fail-closed: manual dispatch requires the exact current `origin/main` SHA, materializes the immutable tag only after verification, packs once, verifies npm registry identity by tarball hash, publishes through trusted OIDC, and emits provenance/attestation. Creating `v2.3.0` is therefore a real publication action, not housekeeping.
|
|
278
|
+
|
|
279
|
+
At this handoff npm latest is still `2.2.8`; npm has no `2.3.0`, the remote repository has no `v2.3.0` tag, and there is no GitHub Release for 2.3.0.
|