@openlup/outbox 0.23.0 → 0.25.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
@@ -2,29 +2,25 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
- ## [0.23.0]
6
-
7
- - Publishable on the npm `latest` dist-tag as `0.23.0`, from tag
8
- `openlup-outbox-v0.23.0`.
5
+ ## [0.25.0]
9
6
 
10
- - Republish unchanged APIs, runtime behavior and shipped SQL from `0.22.0` as part of the complete `0.23.0` package set.
11
-
12
- Migration: upgrade the complete set together for exact internal peers; outbox introduces no API or schema migration.
7
+ - Publishable on the npm `latest` dist-tag as `0.25.0`, from tag
8
+ `openlup-outbox-v0.25.0`.
13
9
 
14
- ## [0.22.0]
10
+ ## [0.24.0]
15
11
 
16
- - Publishable on the npm `latest` dist-tag as `0.22.0`, from tag
17
- `openlup-outbox-v0.22.0`.
12
+ - Publishable on the npm `latest` dist-tag as `0.24.0`, from tag
13
+ `openlup-outbox-v0.24.0`.
18
14
 
19
- - Republish unchanged APIs, runtime behavior and shipped SQL from `0.21.0` as part of the complete `0.22.0` package set.
15
+ - Republish unchanged APIs, runtime behavior and shipped SQL from `0.23.0` as part of the complete `0.24.0` package set.
20
16
 
21
- Migration: upgrade the complete set together; outbox introduces no API or schema migration in this release.
17
+ Migration: upgrade the complete set together for exact internal peers; outbox introduces no API or schema migration.
22
18
 
23
- ## [0.21.0]
19
+ ## [0.23.0]
24
20
 
25
- - Publishable on the npm `latest` dist-tag as `0.21.0`, from tag
26
- `openlup-outbox-v0.21.0`.
21
+ - Publishable on the npm `latest` dist-tag as `0.23.0`, from tag
22
+ `openlup-outbox-v0.23.0`.
27
23
 
28
- - Republish unchanged APIs, runtime behavior and shipped SQL from `0.20.0` as part of the complete `0.21.0` package set.
24
+ - Republish unchanged APIs, runtime behavior and shipped SQL from `0.22.0` as part of the complete `0.23.0` package set.
29
25
 
30
- Migration: upgrade the complete set together; outbox introduces no API or schema migration in this release.
26
+ Migration: upgrade the complete set together for exact internal peers; outbox introduces no API or schema migration.
package/README.md CHANGED
@@ -4,11 +4,11 @@ Development preview, kind `rail`. One at-least-once dispatch engine, lease-bound
4
4
 
5
5
  The publication catalogue admits this complete rail to the release set. Catalogue admission does not publish it: direct directory publishing still refuses, and the reviewed release workflow owns provenance-backed publication. New API and shipped SQL require the next minor set.
6
6
 
7
- The prepared `0.23.0` set republishes this rail unchanged with an exact
8
- `@openlup/core@0.23.0` peer. Upgrade the complete set together; no outbox schema
9
- migration is introduced. Read [0.23.0 notes](CHANGELOG.md#0230); releases older
10
- than `0.21.0` are retained in the source-only `CHANGELOG-HISTORY.md`.
11
- Size comparison uses the published `0.22.0` tarball; preparation grants no
7
+ The prepared `0.25.0` set republishes this rail unchanged with an exact
8
+ `@openlup/core@0.25.0` peer. Upgrade the complete set together; no outbox schema
9
+ migration is introduced. Read [0.25.0 notes](CHANGELOG.md#0250); releases older
10
+ than `0.23.0` are retained in the source-only `CHANGELOG-HISTORY.md`.
11
+ Size comparison uses the published `0.24.0` tarball; preparation grants no
12
12
  publication or installation proof.
13
13
 
14
14
  ## Package Surface Maturity
@@ -50,7 +50,7 @@ node --experimental-strip-types scripts/packages/outbox-consumer-proof.ts \
50
50
 
51
51
  Supply both manifest inputs together. The runner verifies the exact publishable inventory, versions, commit and tarball digests before installation; missing or damaged input refuses without repacking. It installs only Core and Outbox, the packages imported by this reference composition; unrelated modules have their own consumers. It installs outside checkout ancestry with scripts disabled, records consumed artifacts and installed identities in task scratch, injects only the host PostgreSQL test driver and compiles the actual reference composition. Omitting both inputs retains manual packing of already-built packages. The caller owns the disposable database; the proof closes its pools and removes its temporary consumer on success or failure. Required CI and its local runner provide an owned PostgreSQL 17 instance and an enclosing deadline.
52
52
 
53
- For the local required route, run `node --experimental-strip-types scripts/packages/outbox-disposable-postgres.ts --manifest <manifest-path> --expected-commit <full-sha>`. It owns a fresh pinned PostgreSQL 17 container, loopback port, database and cleanup; it refuses invalid artifacts before starting the service. The CI form receives the exact pinned job service container ID and mapped port, creates only this proof's UUID-named database and drops it afterward, including when the CREATE response is lost. The manual proof above retains its fixed disposable database name; the owned route uses `openlup_outbox_proof_<32 lowercase UUID hex digits>`. Neither form adopts an ambient service. Local cleanup can recover the container by its known unique name if its creation response is lost, and requires the actual name, ID and owner label before removal. Startup is bounded at 30 seconds, packed child work at 180 seconds, and each Docker operation at 30 seconds; interruptions terminate the child process group before owned cleanup. Repeated signals forwarded by npm or the package wrapper remain handled until cleanup finishes. The actual proof owner also shields its bounded cleanup inspect, container removal and database DROP commands from verifier group signals. The owner stays in that group until those commands finish; their existing 30-second limits and all ownership checks remain. Local containers use one CPU and 512 MiB of memory. These are proof bounds, not package runtime settings.
53
+ For the local required route, run `node --experimental-strip-types scripts/packages/outbox-disposable-postgres.ts --manifest <manifest-path> --expected-commit <full-sha>`. It owns a fresh pinned PostgreSQL 17 container, loopback port, database and cleanup; it refuses invalid artifacts before starting the service. The CI form receives the exact pinned job service container ID and mapped port, creates only this proof's UUID-named database and drops it afterward, including when the CREATE response is lost. The manual proof above retains its fixed disposable database name; the owned route uses `openlup_outbox_proof_<32 lowercase UUID hex digits>`. Neither form adopts an ambient service. Before creating a local container, the owner resolves the CI image inventory's exact PostgreSQL pin through the shared mirror-first pull helper, verifies its RepoDigest and starts the returned local reference with `--pull=never`. Supplied job services retain the exact container ID, running state and mapped-port checks; only the canonical or configured pinned image references with a matching local RepoDigest are accepted. Image acquisition responds to cancellation before container creation. Local cleanup can recover the container by its known unique name if its creation response is lost, and requires the actual name, ID and owner label before removal. Startup is bounded at 30 seconds, packed child work at 180 seconds, and each Docker operation at 30 seconds; interruptions terminate the child process group before owned cleanup. Repeated signals forwarded by npm or the package wrapper remain handled until cleanup finishes. The actual proof owner also shields its bounded cleanup inspect, container removal and database DROP commands from verifier group signals. The owner stays in that group until those commands finish; their existing 30-second limits and all ownership checks remain. Local containers use one CPU and 512 MiB of memory. These are proof bounds, not package runtime settings.
54
54
 
55
55
  Before SQL, the Outbox binding supplies its actual installed schema/probe/checker exports and reference input to the common repository test utility `scripts/packages/schema-budget-proof.mjs`. Future modules can reuse that utility with their own installed requirement and input callback; it carries no package registry or duplicate schema inventory. Its positive serial model uses 250 ms setup plus 100 ms per presence operation, so actual schema growth participates automatically. A single operation longer than the unchanged 3000 ms waiting deadline proves timeout refusal even if the adapter later batches reads. Completeness and overload cases follow the supplied schema's capabilities. Timer cleanup does not imply cancellation of pending driver work; the proof settles its owned fake queue before restoring real timers. The same real database then demonstrates absent table, column and function-overload observations. A single replay witness accepts a synthetic durable effect, loses acknowledgement, reclaims the same event through scheduled work after immediate work, refuses the formerly valid token and acknowledges the new claim. Multiple attempts with one application-owned deduped effect demonstrate at-least-once recovery for this synthetic example, not provider recovery or a universal exactly-once contract.
56
56
 
@@ -70,7 +70,7 @@ Invalid catalog resolution still propagates to the host. This reuses the existin
70
70
  pinned PostgreSQL service, artifact checks and cleanup; it adds no gate or host
71
71
  admission policy and does not prove effective authorization or SQL behavior.
72
72
 
73
- The root companion tests retain real interruption and lost-response fixtures. Their owned JSON witness markers are written completely to a same-directory temporary file and then renamed into place, so readers never treat a newly created, partially written file as a ready observation. A plain Node process owns each fixture's service and launcher and stays in the root test process group until teardown finishes, even when Vitest's worker exits. Only the bounded Docker cleanup commands detach; their process-start window can still receive a group TERM. The companion fixture allows one recovery only for a child terminated by SIGTERM with no reported error, inside the original 10-second inspect or removal deadline. An interrupted removal is followed by actual Docker inspection: normal no-such-object refusal confirms absence, otherwise the same full ID, name and UUID label must still match before one removal retry. The recovery never resets its deadline, treats a signal as absence, or masks a timeout, nonzero result, wrong owner or second interruption. Cleanup recovers by the known unique name after a lost creation response. Root cancellation regressions interrupt actual Vitest workers after service creation and after detached proof readiness, and check resource termination before releasing their own test lock. They create no verification stamp or shared verifier lock. Separate teardown regressions cancel the actual npm/launcher route during each cleanup operation and assert that its container or UUID database is removed while an unrelated supplied-service database remains.
73
+ The root companion tests prepare that verified local image in a separate 330-second hook before their interruption and lost-response deadlines begin. Their fixture containers use `--pull=never`, so those scenarios do not depend on a registry request. The tests also refuse an untrusted service image reference or wrong RepoDigest before SQL, leaving the supplied service running. The root companion tests retain real interruption and lost-response fixtures. Their owned JSON witness markers are written completely to a same-directory temporary file and then renamed into place, so readers never treat a newly created, partially written file as a ready observation. A plain Node process owns each fixture's service and launcher and stays in the root test process group until teardown finishes, even when Vitest's worker exits. Only the bounded Docker cleanup commands detach; their process-start window can still receive a group TERM. The companion fixture allows one recovery only for a child terminated by SIGTERM with no reported error, inside the original 10-second inspect or removal deadline. An interrupted removal is followed by actual Docker inspection: normal no-such-object refusal confirms absence, otherwise the same full ID, name and UUID label must still match before one removal retry. The recovery never resets its deadline, treats a signal as absence, or masks a timeout, nonzero result, wrong owner or second interruption. Cleanup recovers by the known unique name after a lost creation response. Root cancellation regressions interrupt actual Vitest workers after service creation and after detached proof readiness, and check resource termination before releasing their own test lock. They create no verification stamp or shared verifier lock. Separate teardown regressions cancel the actual npm/launcher route during each cleanup operation and assert that its container or UUID database is removed while an unrelated supplied-service database remains.
74
74
 
75
75
  The standalone-driver fixtures run builtin-only proof stubs or stop before the
76
76
  packed consumer starts, so they need no Zod directory copy. Artifact-set and
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openlup/outbox",
3
- "version": "0.23.0",
3
+ "version": "0.25.0",
4
4
  "private": false,
5
5
  "description": "Transactional PostgreSQL outbox rail; development preview.",
6
6
  "license": "Apache-2.0",
@@ -37,7 +37,7 @@
37
37
  "test:consumer": "node --experimental-strip-types ./scripts/consumer-proof.ts"
38
38
  },
39
39
  "peerDependencies": {
40
- "@openlup/core": "0.23.0"
40
+ "@openlup/core": "0.25.0"
41
41
  },
42
42
  "exports": {
43
43
  ".": {
@@ -50,8 +50,8 @@
50
50
  "maxUnpackedBytes": 266240,
51
51
  "maxFiles": 90,
52
52
  "baseline": {
53
- "version": "0.22.0",
54
- "packedBytes": 39018
53
+ "version": "0.24.0",
54
+ "packedBytes": 39334
55
55
  },
56
56
  "browserEntries": {}
57
57
  }