@forgezero/runtime 0.1.21 → 0.1.22

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.
Files changed (2) hide show
  1. package/README.md +13 -0
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -972,6 +972,19 @@ scheduler.pause(); // stop scheduling, let in-flight finish
972
972
  await scheduler.runNow('rotate-provider-credentials');
973
973
  ```
974
974
 
975
+ ## Deployment handoff is typed state, not copied RAM
976
+
977
+ The portable lifecycle for native and containerd services is deliberately smaller than a process snapshot. First report not-ready and close new HTTP and job intake. Existing requests, streams and queue handlers drain within one deadline. Durable jobs stay in the application store with an idempotency key, expiring lease and monotonic fence, so the candidate may reclaim unfinished work without allowing the old generation to commit. An optional handoff value may carry a bounded, versioned cursor or connection coordinate after schema validation. Closures, arbitrary heap objects, sockets and Vault plaintext never cross generations; the candidate resolves the same named Vault references through its own authorized runtime boundary. This is the lifecycle ForgeZero itself must use before it is offered to tenants.
978
+
979
+ ```text
980
+ old: ready=false -> close intake -> drain HTTP/streams -> drain or release fenced jobs
981
+ new: private health -> validate handoff -> resolve named Vault refs -> accept claims
982
+ switch: route new HTTP -> observe old deadline -> stop old or roll back
983
+
984
+ durable job = payload + idempotencyKey + leaseUntil + fence
985
+ handoff value = versioned + schema-validated + size-bounded + non-secret
986
+ ```
987
+
975
988
  ## Status somebody can read during an incident
976
989
 
977
990
  Last run, duration, result, error and consecutive failures per job. Without it a job that has been failing for a week looks exactly like a job that has been succeeding.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgezero/runtime",
3
- "version": "0.1.21",
3
+ "version": "0.1.22",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public",