@zakkster/lite-signal-decorators 0.2.0 → 0.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/CHANGELOG.md CHANGED
@@ -4,6 +4,57 @@ All notable changes to `@zakkster/lite-signal-decorators` are documented here.
4
4
  The format follows Keep a Changelog; this project adheres to Semantic
5
5
  Versioning.
6
6
 
7
+ ## [0.3.0] - 2026-08-26
8
+
9
+ The class-reactivity benchmark release. Zero runtime changes: the 11-export
10
+ surface ships logic-identical to 0.2.0 (version constants aside); what this
11
+ release adds is the proof. Stage gate, all measured at closeout: 171/171
12
+ tests on both lanes; torture 13 scenarios / 13 sabotage controls all
13
+ green-and-breakable; the full benchmark matrix 42/42 lanes `sink=ok`, exit 0.
14
+
15
+ ### Added
16
+
17
+ - `bench/` -- a private, never-shipped benchmark sub-package: six admitted
18
+ engines (`lsd` decorators, `lsd-define` buildless, the `lite-raw-boxes`
19
+ honesty baseline, MobX 7, signal-utils + signal-polyfill, a hand-rolled
20
+ alien-signals class) x seven class-shaped scenarios (vm-write, fleet-read
21
+ and fleet-tick over 10k instances, cascade 64/16+aggregate, deep-vm 64-deep,
22
+ churn as the headline, retention as gates). Ported lite-signal rig: anti-DCE
23
+ sink with analytic expected-sum oracles (skipped work rejects the lane),
24
+ median-of-5 + min, GC-fenced runs with real delta/retained heap columns,
25
+ machine provenance stamps with resolved adapter versions, a sabotaged-adapter
26
+ self-test proving the harness can fail, and machine-gated effect liveness on
27
+ lifecycle lanes. Candidates `classy-solid` and `@reactively/decorate` probed
28
+ and excluded with recorded one-line blockers (solid's stock-Node SSR
29
+ resolution; legacy-only decorators). Reproducible from a clean clone:
30
+ `cd bench && npm install && npm run bench`.
31
+ - `fleet-soak` -- the 13th torture scenario (soak group): 2000 VMs (16000 pool
32
+ nodes exactly) under sustained ticks with partial churn rotations for a
33
+ wall-clock budget; per-sample F-0, flat retained heap, gcGate maxMajor 0;
34
+ its sabotage control leaks one VM per rotation and is caught at the first
35
+ sample.
36
+ - `decisions/0006-kill-criteria.md` -- the formal verdicts. Criterion 1 (the
37
+ 2.0x line vs the hand-written instance-field baseline) CLEARED WITH MARGIN:
38
+ vm-write 0.94x, fleet-read 1.10x (parity, per 0003's tied-layout finding).
39
+ Criterion 2 (churn cleanliness) CLEARED: 0 major and 0 minor collections
40
+ over 4096 lifecycle cycles on every lite lane, pools at floor (asserted
41
+ in-lane), retained settled at-or-below baseline -- and the decorated churn
42
+ loop emits ~12.6x less transient garbage than the hand-rolled equivalent.
43
+ Every competitor number published under the same stamp (AD-6 honesty
44
+ tiering); the wide-shape cascade/deep-vm gap vs raw boxes is recorded as an
45
+ S4 investigation item, not hidden.
46
+
47
+ ### Changed
48
+
49
+ - README: the measured-numbers section now cites the cross-framework matrix
50
+ and the 0006 verdicts alongside the package's own committed probes; version
51
+ references bumped.
52
+ - CHANGELOG release links now point at the package `repository`
53
+ (github.com/PeshoVurtoleta/lite-signal-decorators), matching the new
54
+ `repository`/`homepage`/`funding` fields in package.json.
55
+ - `llms.txt` scope note: 0.3.0 adds only dev-side proof; the export surface
56
+ is unchanged and frozen for 0.x.
57
+
7
58
  ## [0.2.0] - 2026-08-26
8
59
 
9
60
  The adversarial-torture release: the 0.2 surface is frozen for 0.x, proven by
@@ -54,9 +105,8 @@ gc major=0 minor=0`.
54
105
 
55
106
  ## [0.2.0-preview.1] - 2026-08-26
56
107
 
57
- The full runtime surface. Exports grow from 8 to 11. Never published: the
58
- preview publish was pending npm authentication when 0.2.0 superseded it; the
59
- changes below first shipped with 0.2.0.
108
+ The full runtime surface. Exports grow from 8 to 11. Published under the
109
+ `preview` dist-tag on the same day 0.2.0 went to `latest`.
60
110
 
61
111
  ### Added
62
112
 
@@ -152,6 +202,7 @@ Initial release -- the decorator core.
152
202
  - Torture skeleton (`@zakkster/lite-leak` + `@zakkster/lite-gc-profiler`):
153
203
  retention, conservation, lifecycle, and zero-GC lanes.
154
204
 
155
- [0.2.0]: https://github.com/zakkster/lite-signal-decorators/releases/tag/v0.2.0
156
- [0.2.0-preview.1]: https://github.com/zakkster/lite-signal-decorators/releases/tag/v0.2.0-preview.1
157
- [0.1.0]: https://github.com/zakkster/lite-signal-decorators/releases/tag/v0.1.0
205
+ [0.3.0]: https://github.com/PeshoVurtoleta/lite-signal-decorators/releases/tag/v0.3.0
206
+ [0.2.0]: https://github.com/PeshoVurtoleta/lite-signal-decorators/releases/tag/v0.2.0
207
+ [0.2.0-preview.1]: https://github.com/PeshoVurtoleta/lite-signal-decorators/releases/tag/v0.2.0-preview.1
208
+ [0.1.0]: https://github.com/PeshoVurtoleta/lite-signal-decorators/releases/tag/v0.1.0
package/README.md CHANGED
@@ -245,7 +245,7 @@ Symbol keys work (`Reflect.ownKeys`). A spec key colliding with an own property
245
245
  | Export | Value |
246
246
  |---|---|
247
247
  | `ReactiveDisposedError` | `extends Error`; `name: "ReactiveDisposedError"`; fields `className`, `key`. Thrown on ANY touch of a disposed instance's surface. |
248
- | `VERSION` | `"0.2.0"` |
248
+ | `VERSION` | `"0.3.0"` |
249
249
 
250
250
  ### The rejection matrix
251
251
 
@@ -348,7 +348,7 @@ The gates that hold it (run on every change, all green at 0.2.0):
348
348
  - Torture: **12/12 scenarios** (zero-GC read/write lanes at `maxMajor 0, maxPauseMs 4`; 4096-cycle leak gate at 0 live / 0 findings / 0 warnings; capacity atomicity at every overflow point; a 300-seed x 20k-op oracle with zero divergences) -- plus **12/12 sabotage controls** proving each gate can actually fail.
349
349
  - `churn-soak`: sustained construct/use/dispose for a wall-clock budget; pools at floor and retained heap flat at every sample.
350
350
 
351
- The cross-framework churn benchmark (vs MobX-style layers and signal-utils, with the same anti-DCE rig) is the 0.3.0 milestone; the numbers above are the package's own committed probes.
351
+ The cross-framework matrix lives in `bench/` (private, never shipped): six engines -- both our tiers, the hand-written `lite-raw-boxes` baseline, MobX 7, signal-utils/signal-polyfill, and a hand-rolled alien-signals class -- across seven class-shaped scenarios, checksum-verified for identical work, stamped into `bench/results.txt`. The formal verdicts are in [`decisions/0006-kill-criteria.md`](decisions/0006-kill-criteria.md): the decorated path measured **0.94x** the hand-written baseline on vm-write and **1.10x** on a 10k-instance fleet read (the 2.0x kill line cleared with margin), and **0 major + 0 minor GC over 4096 construct/use/dispose cycles** with pools at floor -- while emitting ~12.6x less transient garbage per churn run than the hand-rolled class it replaces.
352
352
 
353
353
  </details>
354
354
 
@@ -473,7 +473,7 @@ Because an instance whose base-class boxes live in one pool and whose subclass b
473
473
  No, and the README says so with numbers: 22.12 ns/op vs 15.25 raw vs 11.67 unbatched on the reference rig -- a thunk + rest-array per call. Use it for actions; keep per-frame writes on plain accessors.
474
474
 
475
475
  **Where are `costOf`, labels, the audit hook, private members?**
476
- Not in 0.2.0 -- the runtime surface is complete and frozen for 0.x, and the introspection layer is roadmapped behind the 0.3.0 benchmark. The `llms.txt` scope note tracks exactly what is and isn't included.
476
+ Not in 0.3.0 -- the runtime surface froze for 0.x at 0.2.0, and the introspection layer (capacity accounting, devtools identity) is the 0.4.0 milestone. The `llms.txt` scope note tracks exactly what is and isn't included.
477
477
 
478
478
  ---
479
479
 
@@ -273,4 +273,4 @@ export class ReactiveDisposedError extends Error {
273
273
  // --- Version ------------------------------------------------------------------
274
274
 
275
275
  /** Package version. Kept in lockstep with package.json and llms.txt. */
276
- export const VERSION: "0.2.0";
276
+ export const VERSION: "0.3.0";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @zakkster/lite-signal-decorators v0.2.0
2
+ * @zakkster/lite-signal-decorators v0.3.0
3
3
  * --------------------
4
4
  * Stage-3 decorator layer over @zakkster/lite-signal. Turns a plain class into
5
5
  * a reactive view-model with measured per-instance cost and deterministic
@@ -1298,4 +1298,4 @@ export function rootOf(vm) {
1298
1298
  // --- Version ------------------------------------------------------------------
1299
1299
 
1300
1300
  /** Package version. Kept in lockstep with package.json and llms.txt. */
1301
- export const VERSION = "0.2.0";
1301
+ export const VERSION = "0.3.0";
package/llms.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  # @zakkster/lite-signal-decorators
2
2
 
3
- VERSION 0.2.0
3
+ VERSION 0.3.0
4
4
 
5
5
  > Stage-3 decorator layer over @zakkster/lite-signal. Turns a plain class into a
6
6
  > reactive view-model where each instance has a measured per-property cost, a
@@ -55,7 +55,7 @@ slot for a poison handle, so any later read/write throws a named
55
55
  `forEachOwned` / lite-devtools. Throws `ReactiveDisposedError` after dispose.
56
56
  - `ReactiveDisposedError` -- `extends Error`, `name` `"ReactiveDisposedError"`,
57
57
  fields `className` and `key`.
58
- - `VERSION` -- `"0.2.0"`.
58
+ - `VERSION` -- `"0.3.0"`.
59
59
 
60
60
  ## Registry law (one registry per host chain)
61
61
 
@@ -137,7 +137,8 @@ routed per-registry via `createRegistry()`).
137
137
 
138
138
  ## Scope note
139
139
 
140
- 0.2.0 ships the full runtime surface: the decorator core plus
141
- `@reactiveEffect`, `@batched`, `@reactiveHost({ registry })`, and
142
- `defineReactive`. Not yet included: cost introspection (`costOf`/`capacityFor`),
143
- labels, an audit hook, and private-member support.
140
+ 0.3.0 = the 0.2.0 runtime surface (unchanged -- the same 11 exports, frozen for
141
+ 0.x) plus the dev-side class-reactivity benchmark (`bench/`, private, never
142
+ shipped) and the fleet-soak torture scenario; the formal kill-criteria verdicts
143
+ live in decisions/0006-kill-criteria.md. Not yet included: cost introspection
144
+ (`costOf`/`capacityFor`), labels, an audit hook, and private-member support.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zakkster/lite-signal-decorators",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Stage-3 decorator layer over @zakkster/lite-signal. The reactive class layer where an instance has a measured cost, deterministic teardown, and a churn benchmark.",
5
5
  "author": "Zahary Shinikchiev <shinikchiev@yahoo.com>",
6
6
  "license": "MIT",