cross-tab-worker-databus 0.21.34 → 0.21.35
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/CHANGELOG.md +25 -0
- package/dist/centrifuge.js +1 -1
- package/dist/{chunk-A3UG46FI.js → chunk-EVVTH6BQ.js} +2 -2
- package/dist/chunk-EVVTH6BQ.js.map +7 -0
- package/dist/cjs/centrifuge.cjs +1 -1
- package/dist/cjs/centrifuge.cjs.map +2 -2
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.cjs.map +2 -2
- package/dist/core/routing.d.ts +3 -2
- package/dist/core/routing.d.ts.map +1 -1
- package/dist/core/trace.d.ts +2 -1
- package/dist/core/trace.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/docs/release-checklist.md +2 -2
- package/docs/roadmap.md +12 -1
- package/docs/zh/release-checklist.md +2 -2
- package/docs/zh/roadmap.md +12 -1
- package/package.json +1 -1
- package/dist/chunk-A3UG46FI.js.map +0 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,28 @@
|
|
|
1
|
+
## [0.21.35] - 2026-09-25
|
|
2
|
+
|
|
3
|
+
Two shipped comments cited a test by a fixture string instead of its name, and that class of citation now has a gate; the `AGENTS.md` copy of the `knownTopics` cap rule was the last one still stating a bound the code refuses; the release gate that decides "npm never recorded this version" now asks npm instead of whatever registry the machine is configured to use; and finishing the sweep of one of this release's own corrections turned up three sentences it had broken or left behind in the Chinese mirror. No library behavior, export, option or key changed.
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- **The completeness gate could call a published version unpublished, from a read that succeeded.** `scripts/verify-release-version.mjs` read the packument with a bare `npm view <pkg> time --json`, which consults the *configured* registry. Measured while preparing this release on a machine whose `npm` points at `registry.npmmirror.com`: its copy of the document still reported `modified: 2026-09-25T00:32:51.767Z` — the `0.21.33` publish — when the gate ran at `03:41:18Z`, **3,207 s (53 min)** after npmjs recorded `0.21.34` at `02:47:50.782Z`; the mirror's own `modified` stamp later moved to `03:44:48.778Z`, so it had been answering without that version for 3,418 s. So the gate exited 1 with `CHANGELOG names 1 release(s) the registry has never recorded: 0.21.34` about a version that had been public for 3,207 s. (An earlier draft of this sentence wrote "75 minutes" as an elapsed time in that story; it is the gap between two *previous* stamps, `00:32:51Z` → `02:47:50Z`, and belongs to no interval here.) The header's own inference — "`time[]` records never expire, so a version missing from a read that succeeded was never published" — was wrong in its second premise: a mirror that has not *learned* about a version is not a record of its absence, and because a mirror's sync lag is not HTTP caching, `cache-control: no-cache` returns the same stale document. The read now names `https://registry.npmjs.org` explicitly, which is what makes "the registry" mean the thing whose absence is proof; re-running it after the fix prints `the 48 earlier CHANGELOG releases from 0.20.85 on are all in the registry's time map`, exit 0. `verify-published-consumer.mjs` had already pinned `--registry` on both of its reads for the same reason — this was the last npm-based registry read in the repository that did not, and the documented re-derive command in `docs/release-checklist.md` (en + zh) carried the unpinned form. Every existing case for this gate injects `RELEASE_REGISTRY_TIME`, which is why none of them could see which registry is consulted; the new one runs the un-injected path against a stub `npm` and asserts the flag and the URL arrive as a pair.
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **Every test-name citation in the living prose must now resolve to exactly one case.** `tests/documentation.test.ts` gained "resolve to a case that exists in the file they name", which scans `src/**`, `AGENTS.md`, `README.md` and the public docs for `tests/<file>`'s `<name>` and requires the name to match one `it()`/`test()` title in the file it names (a trailing `…` may prefix-match, against one hit only). 18 citations across 52 files today. Both halves of the scan carry their own control, because both can go empty and an empty `unresolved` list reads as a clean bill either way: the title collector must find the suite's cases (977 titles across 40 files, floored at 500 rather than at the corpus size, since a floor at the current count teaches the next reader to lower it), the citation pattern must examine at least one citation, and the `e2e` corpus is asserted separately — 937 of the 977 titles come from `tests/`, so the total could not notice the e2e sweep going empty. Two scope decisions are measured rather than assumed: the two exempt surfaces hold 11 of these citations between them (`docs/progress.md` 8, `CHANGELOG.md` 3) while the public docs hold 1, and exactly one of the 11 does not resolve — a verbatim quote of the gate's own failure message, not a pointer — where an earlier draft of this sentence had written "`docs/` carries 8" by counting `progress.md`, which the gate deliberately does not scan; and the looser `filename … ('a name')` window was tried and left out, because it produces exactly one candidate across the scope and that candidate is the `new Error(…)` message inside the very function whose doc comment names the test. Mutation-checked five ways: a dead citation kills 1 test, a nine-way ambiguous prefix is reported as `(9 matches)`, neutering the citation pattern trips the `examined` control, neutering the title collector trips the title floor, and shortening the `docs/architecture.md` citation kills one test — which is what says the widened scope has teeth the `src`-only version did not. The gate reddened the `AGENTS.md` bullet written to describe it, because the first draft named the two defective tokens in citation form as examples; the rule now says to name a token bare when the sentence is about a defect rather than pointing at a case.
|
|
12
|
+
|
|
13
|
+
### Documentation
|
|
14
|
+
|
|
15
|
+
- **A load-bearing test-harness count had rotted in two directions at once, and one file held both values.** `ChannelHub`'s synchronous delivery default is documented by what it costs: flipping it reddens the suite. `tests/fakes.ts`, `tests/coordination-invariants.test.ts` and one `AGENTS.md` bullet said 15 post-and-assert tests and 17 failures; `AGENTS.md`'s *other* bullet said 18. Re-measured by editing the field and running the suite: **18** fail — 9 `cluster`, 6 `data-bus`, 1 `stability` (16 that post a frame and assert in the same stack), plus the hub's two own pins in `coordination-invariants`, one of which asserts the default by name. The three surfaces now agree, and each names the edit that regenerates the number rather than leaving it to rot again. **The finding is not the off-by-one; it is that a single file can carry the stale count and its correction simultaneously**, in two bullets written a cycle apart, and nothing contradicts either — the same shape as a drifted line number, one level up.
|
|
16
|
+
- **A correction can break the sentence it lands in, and the zh mirror can keep the figure the English already retired.** Three survivors of the sweep that replaced an unmeasured "75 minutes" with the four timestamps that produce it: `docs/zh/release-checklist.md` still said the mirror ran an hour behind after its English counterpart carried 3,418 s; both zh copies of the measurement read `3,207 s 秒`, the unit written twice, which is what a numeric insert leaves in a sentence whose unit was already spelled out; and two copies of the retraction itself were spliced into running text, producing `…not an elapsed time in this story. so the gate exited 1 with …` and `…) and the gate exited 1 …`. Nothing compiles prose, so no gate can see the last class and no phrase-grep finds the first — a paraphrase shares no substring with the text that was fixed, which is why the closing check is a grep for the *figure* across languages. `AGENTS.md` gained the rule plus the scan recipe (a full stop followed by a lowercase function word over the 70 living-surface files, with inline code stripped and a lone letter before the dot read as an abbreviation); it reported one real hit in the tree (a sentence in `docs/progress.md`, repaired two commits earlier in this same branch at `7168810`, so a run after that one reports none), and the scan is graded by the two pre-fix commits it still finds, because its first pattern required whitespace straight after the stop and cleared the bracketed form, while its first abbreviation filter matched the `e` of `evidence.` and called the tree clean over a genuine defect. The scan then caught this session splicing a second instance while writing the bullet about the first.
|
|
17
|
+
- **Two shipped citations named a fixture, not a case — and both reach consumers.** `src/core/routing.ts` pointed at `tests/cluster.test.ts`'s sticky case by the `clusterKey` literal written inside it, and `src/core/trace.ts` did the same with a `tests/data-bus.test.ts` case named by its `clusterKey` fixture rather than by its title ("keeps tracing disabled by default"); each is a `clusterKey` string sitting in a test *body*, so the pointer landed mid-case rather than at the assertion, and the first rename of either arbitrary fixture would have landed nowhere with nothing in the build, the type check or the suite to contradict it. Both sit in declaration JSDoc, so the wrong pointer is published: after the fix the case titles appear in `dist/core/routing.d.ts` and `dist/core/trace.d.ts` and the fixture strings do not.
|
|
18
|
+
- **The last copy of the `knownTopics` cap absolute is retired.** `AGENTS.md` — the surface that steers every future session — still read "FIFO eviction, max 500 entries" and "never evicts a key the worker still owns" two releases after `src/` and both architecture languages were corrected. It now states the measured rule: the 500 bound counts entries this worker does not own, the eviction scan skips two candidates (an owned key, and the key being remembered, because a fresh `Map.set` lands at the back so the front-scan reaches it only once everything older is owned), and in that state the cap slips — 1,200 adopted peer `CONTROL/SUBSCRIBE` frames grew `knownTopics` and `assignedTopics` to 1,200 together and one reconcile tick returned both to `0`. For that flood the memory bound is the sweep, not the cap.
|
|
19
|
+
- **The publication-lag samples were extended, and the ceiling's derivation did not move.** `0.21.34`'s tag run is the eighth ack→`time[<version>]` reading and the ninth green step duration: `Publish to npm` completed `02:46:35Z`, the registry recorded the version at `02:47:50.782Z` (**75.8 s**), and `Verify published npm consumers` took **304 s**. The three newest record lags — 76.1, 75.5, 75.8 s — span half a second across three consecutive releases while the step still consumes ~304 s each time, which locates the variance in the reader's blindness rather than in the registry's write; the observation is in all four copies (`docs/release-checklist.md` en + zh, the workflow comment, `tests/workflows.test.ts`) beside the `gh api` lookup that re-derives it. 75.8 s does not beat the 310 s that sizes the 720 s ceiling, so `maxMeasuredAckToRecordMs` stays put and the floor passes unmodified.
|
|
20
|
+
|
|
21
|
+
### Compatibility
|
|
22
|
+
|
|
23
|
+
No library code, export, option, default, frame or storage key changed; `verify:compat`, `verify:types` and `verify:pack` run against `v0.21.34`. The suite is 37 files / 952 tests (950 before this cycle, plus the citation gate and the registry-read case). The release-time completeness gate now reports 48 gated releases rather than 47, because `0.21.34` has joined the set it audits — the count rising is that gate working.
|
|
24
|
+
|
|
25
|
+
|
|
1
26
|
## [0.21.34] - 2026-09-25
|
|
2
27
|
|
|
3
28
|
A release gate that can now refuse to tag, one library behavior that got the test it never had, and three shipped sentences about caps that each described a protection the code does not provide. No public API, export, option, default, frame or storage key changed.
|
package/dist/centrifuge.js
CHANGED
|
@@ -2475,7 +2475,7 @@ var SDK_VERSION = (
|
|
|
2475
2475
|
// declaration's type is `string | undefined` and the export's is `string`
|
|
2476
2476
|
// (dropping the conditional is TS2322, measured). Recorded here so the leg reads
|
|
2477
2477
|
// as a shape the harness cannot reach rather than as a case nobody exercised.
|
|
2478
|
-
true ? "0.21.
|
|
2478
|
+
true ? "0.21.35" : ""
|
|
2479
2479
|
);
|
|
2480
2480
|
|
|
2481
2481
|
// src/core/data-bus.ts
|
|
@@ -3715,4 +3715,4 @@ export {
|
|
|
3715
3715
|
parseDataBusPublication,
|
|
3716
3716
|
selectWorkerBackend
|
|
3717
3717
|
};
|
|
3718
|
-
//# sourceMappingURL=chunk-
|
|
3718
|
+
//# sourceMappingURL=chunk-EVVTH6BQ.js.map
|