@chidchanun/bcp 0.2.17 → 0.2.19

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.
@@ -0,0 +1,179 @@
1
+ # Stability & API Freeze — 0.2.19
2
+
3
+ BCP Framework `0.2.19` is the final stabilization milestone for the `0.2.x` platform before the next `0.3.0` application-platform baseline.
4
+
5
+ This release intentionally does **not** add a new application subsystem. Its purpose is to freeze the supported public package/CLI contract, strengthen release gates and catch accidental compatibility regressions before publication.
6
+
7
+ ## Frozen contract
8
+
9
+ The committed source of truth is:
10
+
11
+ ```text
12
+ docs/api-freeze-snapshot.json
13
+ ```
14
+
15
+ It records:
16
+
17
+ - the supported `bcp/*` public entrypoint set;
18
+ - the supported CLI command set;
19
+ - prepared npm `exports` including `types`, `default` and `browser` targets;
20
+ - API source/environment ownership from `docs/api-manifest.json`;
21
+ - the compatibility baseline (`0.2.18`);
22
+ - the no-intentional-breaking-change policy for `0.2.19`.
23
+
24
+ The frozen public package entrypoints are:
25
+
26
+ ```text
27
+ bcp
28
+ bcp/island
29
+ bcp/cache
30
+ bcp/config
31
+ bcp/validation
32
+ bcp/error
33
+ bcp/database
34
+ bcp/auth
35
+ bcp/jobs
36
+ bcp/workflow
37
+ bcp/events
38
+ bcp/realtime
39
+ bcp/testing
40
+ bcp/plugins
41
+ bcp/observability
42
+ bcp/deployment
43
+ bcp/server
44
+ bcp/server-only
45
+ bcp/middleware
46
+ ```
47
+
48
+ `./package.json` is also frozen as a package export, although it is not an application API entrypoint.
49
+
50
+ ## API compatibility gate
51
+
52
+ Run:
53
+
54
+ ```bash
55
+ npm run api:check
56
+ ```
57
+
58
+ The compatibility checker prepares the exact npm staging package, generates the current contract and compares it to `docs/api-freeze-snapshot.json`.
59
+
60
+ The check fails when, for example:
61
+
62
+ - a public entrypoint is removed or added;
63
+ - a CLI command changes without an explicit new platform baseline;
64
+ - `bcp/server` stops resolving to `server.mjs` in the prepared package;
65
+ - a server-only browser poison target disappears;
66
+ - an entrypoint changes API source/environment ownership;
67
+ - the current version/baseline no longer matches the committed freeze.
68
+
69
+ This prevents source metadata, prepared npm metadata and documentation metadata from drifting independently.
70
+
71
+ ## Snapshot regeneration
72
+
73
+ To intentionally regenerate the contract:
74
+
75
+ ```bash
76
+ npm run api:snapshot
77
+ ```
78
+
79
+ That command rewrites:
80
+
81
+ ```text
82
+ docs/api-freeze-snapshot.json
83
+ ```
84
+
85
+ For `0.2.19`, snapshot changes require explicit review because the milestone promises no intentional breaking changes from `0.2.18`.
86
+
87
+ Large or breaking public-surface changes should normally be deferred to `0.3.0` rather than silently updating the `0.2.19` snapshot.
88
+
89
+ ## Release readiness
90
+
91
+ Run:
92
+
93
+ ```bash
94
+ npm run release:readiness
95
+ ```
96
+
97
+ The readiness report checks:
98
+
99
+ - root/client/create-app version parity;
100
+ - `package-lock.json` version parity;
101
+ - platform/API/docs-web version parity;
102
+ - `unreleased` release state;
103
+ - `0.2.18` previous-baseline metadata;
104
+ - no intentional breaking changes;
105
+ - API freeze snapshot version/baseline;
106
+ - public entrypoint parity;
107
+ - CLI freeze parity;
108
+ - current release notes and docs route;
109
+ - stability capability flags.
110
+
111
+ To also persist a local machine-readable report:
112
+
113
+ ```bash
114
+ npm run release:readiness:report
115
+ ```
116
+
117
+ The report is written to:
118
+
119
+ ```text
120
+ .bcp-framework/release-readiness.json
121
+ ```
122
+
123
+ It is a local build artifact and is not the release source of truth.
124
+
125
+ ## RC integration
126
+
127
+ `0.2.19` strengthens the release pipeline:
128
+
129
+ ```text
130
+ npm run typecheck
131
+ npm test
132
+ -> unit
133
+ -> integration
134
+ -> e2e
135
+ -> prepared-package smoke
136
+ -> Stability & API Freeze smoke
137
+ npm run api:check
138
+ npm run release:readiness
139
+ release metadata check
140
+ npm name/version checks
141
+ npm publish dry-run
142
+ ```
143
+
144
+ `npm run rc:check` must pass on the exact commit that will be tagged.
145
+
146
+ ## Lifecycle stabilization
147
+
148
+ The stability suite adds explicit idempotency coverage for Deployment Platform v2:
149
+
150
+ - concurrent/repeated `start()` calls must start a resource once;
151
+ - concurrent/repeated `shutdown()` calls must stop a resource once;
152
+ - shutdown remains reverse ordered;
153
+ - a stopped runtime cannot be restarted.
154
+
155
+ Existing subsystem-specific suites remain authoritative for jobs, workflows, outbox/events, realtime, cache, plugins and deployment behavior.
156
+
157
+ ## Compatibility policy
158
+
159
+ `0.2.19` declares:
160
+
161
+ ```text
162
+ previous baseline: 0.2.18
163
+ intentional breaking changes: false
164
+ freeze state: frozen
165
+ ```
166
+
167
+ Bug fixes may still change incorrect implementation behavior, but they must not silently remove documented public entrypoints or change their package-resolution contract.
168
+
169
+ ## Moving to 0.3.0
170
+
171
+ `0.3.0` is the next platform baseline. That milestone may intentionally revise the frozen surface, but changes should be accompanied by:
172
+
173
+ 1. a reviewed API snapshot update;
174
+ 2. explicit compatibility/breaking-change metadata;
175
+ 3. migration documentation;
176
+ 4. updated package/docs manifests;
177
+ 5. regression and prepared-package coverage.
178
+
179
+ The `0.2.19` snapshot therefore becomes the comparison point for the next platform-generation work.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chidchanun/bcp",
3
- "version": "0.2.17",
3
+ "version": "0.2.19",
4
4
  "description": "BCP Framework - a React full-stack framework with file-based routing, SSR, APIs, middleware, islands, caching and standalone production builds.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -42,7 +42,7 @@
42
42
  },
43
43
  "./config": {
44
44
  "types": "./packages/client/src/config.ts",
45
- "default": "./packages/client/src/config.ts"
45
+ "default": "./packages/client/src/config.mjs"
46
46
  },
47
47
  "./validation": {
48
48
  "types": "./packages/client/src/validation.ts",
@@ -60,7 +60,7 @@
60
60
  "./auth": {
61
61
  "types": "./packages/client/src/auth.ts",
62
62
  "browser": "./packages/client/src/server-only.browser.mjs",
63
- "default": "./packages/client/src/auth.ts"
63
+ "default": "./packages/client/src/auth.mjs"
64
64
  },
65
65
  "./jobs": {
66
66
  "types": "./packages/client/src/jobs.ts",
@@ -97,10 +97,15 @@
97
97
  "browser": "./packages/client/src/server-only.browser.mjs",
98
98
  "default": "./packages/client/src/observability.mjs"
99
99
  },
100
+ "./deployment": {
101
+ "types": "./packages/client/src/deployment.ts",
102
+ "browser": "./packages/client/src/server-only.browser.mjs",
103
+ "default": "./packages/client/src/deployment.mjs"
104
+ },
100
105
  "./server": {
101
106
  "types": "./packages/client/src/server.ts",
102
107
  "browser": "./packages/client/src/server-only.browser.mjs",
103
- "default": "./packages/client/src/server.ts"
108
+ "default": "./packages/client/src/server.mjs"
104
109
  },
105
110
  "./server-only": {
106
111
  "types": "./packages/client/src/server-only.d.ts",
@@ -109,7 +114,7 @@
109
114
  },
110
115
  "./middleware": {
111
116
  "types": "./packages/server/src/middleware.ts",
112
- "default": "./packages/server/src/middleware.ts"
117
+ "default": "./packages/server/src/middleware.mjs"
113
118
  },
114
119
  "./package.json": "./package.json"
115
120
  },
@@ -35,6 +35,7 @@ const SERVER_ONLY_IMPORTS =
35
35
  "bcp/testing",
36
36
  "bcp/plugins",
37
37
  "bcp/observability",
38
+ "bcp/deployment",
38
39
  ]);
39
40
 
40
41
  export function validateClientBoundaries(