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

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.128",
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",
@@ -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