openxiangda-skill-kit 2.0.0-alpha.126 → 2.0.0-alpha.129

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openxiangda-skill-kit",
3
- "version": "2.0.0-alpha.126",
3
+ "version": "2.0.0-alpha.129",
4
4
  "description": "Validation and deterministic packaging for OpenXiangda 2.0 AI skills.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -17,7 +17,7 @@
17
17
  "README.md"
18
18
  ],
19
19
  "dependencies": {
20
- "openxiangda-devkit-core": "2.0.0-alpha.104"
20
+ "openxiangda-devkit-core": "2.0.0-alpha.105"
21
21
  },
22
22
  "devDependencies": {
23
23
  "tsx": "4.23.12",
@@ -248,6 +248,17 @@ caller creates it once together with the idempotency key and reuses both on
248
248
  every retry. Platform-created record timestamps remain the source of truth
249
249
  when no separate business time is required.
250
250
 
251
+ The Nest SDK automatically carries the platform Gateway `x-request-id` from a
252
+ verified Named Action into its nested Data API, directory, workflow, and
253
+ notification calls. Do not generate or replace that header in application
254
+ code. If a strict authorization projection is temporarily unavailable, keep
255
+ the complete command and `idempotencyKey` unchanged when retrying after the
256
+ platform reports recovery: the Native transaction receipt returns the already
257
+ committed items with `replayed: true` and does not repeat mutations or events.
258
+ `OPENXIANGDA_AUTHORIZATION_PROJECTION_NOT_READY` is a fail-closed, retryable
259
+ platform readiness response; it is not evidence that an earlier idempotent
260
+ business transaction was rolled back. Diagnose it with the returned request id.
261
+
251
262
  When declaring a lower-level transaction directly, use only the current
252
263
  contract:
253
264
 
@@ -113,15 +113,20 @@ normal authorized role union with that Perspective before capability, field,
113
113
  row-policy and RLS evaluation. Omit the header for the complete union. Never
114
114
  use Perspective to guard writes, workflows or custom actions.
115
115
 
116
- `required: true` owns both storage nullability and form validation. A field
117
- without `access` inherits the resource read/create/update capability. Each
118
- access array is all-of; `false` is explicit deny. The same arrays drive the
119
- generated UI and platform field policies.
116
+ `required: true` is a logical application rule: generated forms show it as
117
+ required, and the Native Data API rejects omission on create or explicit null
118
+ on create/update. It does not create PostgreSQL `NOT NULL`; every authored
119
+ business column remains physically nullable so fields can be added or made
120
+ required without a historical-data backfill. Older rows may therefore contain
121
+ null when they predate the rule. A field without `access` inherits the resource
122
+ read/create/update capability. Each access array is all-of; `false` is explicit
123
+ deny. The same arrays drive the generated UI and platform field policies.
120
124
 
121
125
  For `uuid` fields, omission never generates a value. Only the resource system
122
126
  field `id` is platform-generated. An omitted optional UUID remains `null`; a
123
- required UUID must be supplied explicitly and cannot rely on an implicit
124
- database default.
127
+ required UUID must be supplied by a current create request and cannot rely on
128
+ an implicit database default. This is Data API validation, not a physical
129
+ `NOT NULL` constraint.
125
130
 
126
131
  Field types are semantic, not PostgreSQL storage aliases. Use the catalog in the generated `AGENTS.md`: for example `text.short`, `number.integer`, `user.single`, `department.multiple`, `resource-ref.single`, `file`, `address` and `subtable`. The compiler alone chooses storage columns and constraints. Reference fields store JSON display values. For `resource-ref.*`, `resourceCode`, `value`, `label`, optional `description` and optional `snapshot` are convenient historical display data only: the target resource remains authoritative, the platform does not create a foreign key or refresh/check the stored JSON, and business actions that need current target state must query it by `resourceCode` plus `value`. A resource source `labelField` must point to `text.short` or `text.long`; a `serial-number` field can be listed in `searchFields`, `descriptionFields` or `snapshotFields`, but it is not a display label. File limits exist only under `file`; `maxCount` owns the single/multiple bound and `maxSizeMb` owns the per-file size bound. There is no `file.multiple` key.
127
132