@forgezero/runtime 0.1.20 → 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.
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.
@@ -141,6 +141,7 @@ function describeJsonSchema(schema, prefix = "") {
141
141
  required: required.has(name),
142
142
  description: property.description,
143
143
  writeOnly: property.writeOnly === true ? true : undefined,
144
+ readOnly: property.readOnly === true ? true : undefined,
144
145
  default: property.default,
145
146
  format: property.format,
146
147
  minLength: property.minLength,
@@ -181,6 +182,7 @@ function describeProperty(property, path, label, required) {
181
182
  required,
182
183
  description: property.description,
183
184
  writeOnly: property.writeOnly === true ? true : undefined,
185
+ readOnly: property.readOnly === true ? true : undefined,
184
186
  default: property.default,
185
187
  format: property.format,
186
188
  minLength: property.minLength,
package/dist/schema.d.ts CHANGED
@@ -61,6 +61,8 @@ export interface FormField {
61
61
  * is what routes a credential into the vault instead of onto a page.
62
62
  */
63
63
  writeOnly?: boolean;
64
+ /** Stored and validated, but supplied only by a trusted backend resolver. */
65
+ readOnly?: boolean;
64
66
  default?: unknown;
65
67
  /** `enum` only. */
66
68
  options?: readonly string[];
package/dist/schema.js CHANGED
@@ -141,6 +141,7 @@ function describeJsonSchema(schema, prefix = "") {
141
141
  required: required.has(name),
142
142
  description: property.description,
143
143
  writeOnly: property.writeOnly === true ? true : undefined,
144
+ readOnly: property.readOnly === true ? true : undefined,
144
145
  default: property.default,
145
146
  format: property.format,
146
147
  minLength: property.minLength,
@@ -181,6 +182,7 @@ function describeProperty(property, path, label, required) {
181
182
  required,
182
183
  description: property.description,
183
184
  writeOnly: property.writeOnly === true ? true : undefined,
185
+ readOnly: property.readOnly === true ? true : undefined,
184
186
  default: property.default,
185
187
  format: property.format,
186
188
  minLength: property.minLength,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgezero/runtime",
3
- "version": "0.1.20",
3
+ "version": "0.1.22",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public",