@objectstack/platform-objects 13.0.0 → 14.5.0

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 (41) hide show
  1. package/dist/apps/index.d.mts +1 -1
  2. package/dist/apps/index.d.ts +1 -1
  3. package/dist/apps/index.js +525 -1200
  4. package/dist/apps/index.js.map +1 -1
  5. package/dist/apps/index.mjs +525 -1200
  6. package/dist/apps/index.mjs.map +1 -1
  7. package/dist/audit/index.d.mts +262 -10
  8. package/dist/audit/index.d.ts +262 -10
  9. package/dist/audit/index.js +14 -0
  10. package/dist/audit/index.js.map +1 -1
  11. package/dist/audit/index.mjs +14 -0
  12. package/dist/audit/index.mjs.map +1 -1
  13. package/dist/identity/index.d.mts +1403 -236
  14. package/dist/identity/index.d.ts +1403 -236
  15. package/dist/identity/index.js +177 -17
  16. package/dist/identity/index.js.map +1 -1
  17. package/dist/identity/index.mjs +177 -17
  18. package/dist/identity/index.mjs.map +1 -1
  19. package/dist/index.d.mts +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.js +1878 -1736
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +1878 -1737
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/metadata-translations/index.js +1020 -488
  26. package/dist/metadata-translations/index.js.map +1 -1
  27. package/dist/metadata-translations/index.mjs +1020 -488
  28. package/dist/metadata-translations/index.mjs.map +1 -1
  29. package/dist/pages/index.d.mts +34 -3
  30. package/dist/pages/index.d.ts +34 -3
  31. package/dist/pages/index.js +111 -0
  32. package/dist/pages/index.js.map +1 -1
  33. package/dist/pages/index.mjs +111 -1
  34. package/dist/pages/index.mjs.map +1 -1
  35. package/dist/plugin.js +1564 -1707
  36. package/dist/plugin.js.map +1 -1
  37. package/dist/plugin.mjs +1564 -1707
  38. package/dist/plugin.mjs.map +1 -1
  39. package/dist/system/index.d.mts +75 -3
  40. package/dist/system/index.d.ts +75 -3
  41. package/package.json +3 -3
@@ -263,6 +263,70 @@ var enMetadataForms = {
263
263
  datasource: {
264
264
  label: "Datasource",
265
265
  helpText: 'Target datasource ID (default: "default")'
266
+ },
267
+ lifecycle: {
268
+ label: "Lifecycle",
269
+ helpText: "Data lifecycle contract (ADR-0057): how long rows live and how space is reclaimed. Leave empty for permanent record semantics. Non-record classes require at least one bounding policy (retention, TTL, or rotation)."
270
+ },
271
+ "lifecycle.class": {
272
+ label: "Class",
273
+ helpText: "Persistence contract for the rows of this object"
274
+ },
275
+ "lifecycle.retention": {
276
+ label: "Retention",
277
+ helpText: "Age-based retention window"
278
+ },
279
+ "lifecycle.retention.maxAge": {
280
+ label: "Max Age",
281
+ helpText: 'Rows older than this (by created_at) are reaped. Duration literal: h/d/w/y, e.g. "30d"'
282
+ },
283
+ "lifecycle.ttl": {
284
+ label: "Ttl",
285
+ helpText: "Per-row TTL expiry"
286
+ },
287
+ "lifecycle.ttl.field": {
288
+ label: "Field",
289
+ helpText: "Timestamp field the TTL is measured from (e.g. expires_at)"
290
+ },
291
+ "lifecycle.ttl.expireAfter": {
292
+ label: "Expire After",
293
+ helpText: 'Rows expire this long after the field, e.g. "1d"'
294
+ },
295
+ "lifecycle.storage": {
296
+ label: "Storage",
297
+ helpText: "Physical rotation for high-frequency telemetry (SQLite: O(1) shard DROP)"
298
+ },
299
+ "lifecycle.storage.strategy": {
300
+ label: "Strategy",
301
+ helpText: "Storage strategy"
302
+ },
303
+ "lifecycle.storage.shards": {
304
+ label: "Shards",
305
+ helpText: "Shards retained; total window = shards \xD7 unit"
306
+ },
307
+ "lifecycle.storage.unit": {
308
+ label: "Unit",
309
+ helpText: "Time width of one shard"
310
+ },
311
+ "lifecycle.archive": {
312
+ label: "Archive",
313
+ helpText: "Cold-store hand-off (audit class). Rows are never hot-deleted before the archive copy succeeded."
314
+ },
315
+ "lifecycle.archive.after": {
316
+ label: "After",
317
+ helpText: "Archive rows older than this \u2014 must equal retention.maxAge"
318
+ },
319
+ "lifecycle.archive.to": {
320
+ label: "To",
321
+ helpText: "Target datasource name for cold storage"
322
+ },
323
+ "lifecycle.archive.keep": {
324
+ label: "Keep",
325
+ helpText: 'How long the archive keeps rows (empty = forever), e.g. "7y"'
326
+ },
327
+ "lifecycle.reclaim": {
328
+ label: "Reclaim",
329
+ helpText: "Reclaim driver space after sweeps (default on for non-record classes)"
266
330
  }
267
331
  }
268
332
  },
@@ -371,10 +435,6 @@ var enMetadataForms = {
371
435
  label: "Summary Operations",
372
436
  helpText: "Roll-up summary configuration (for parent-child relationships)"
373
437
  },
374
- cached: {
375
- label: "Cached",
376
- helpText: "Caching configuration for computed fields"
377
- },
378
438
  columnName: {
379
439
  label: "Column Name",
380
440
  helpText: "Physical column name in database (defaults to field name)"
@@ -402,28 +462,9 @@ var enMetadataForms = {
402
462
  sortable: {
403
463
  label: "Sortable",
404
464
  helpText: "Allow sorting lists by this field"
405
- },
406
- auditTrail: {
407
- label: "Audit Trail",
408
- helpText: "Track detailed changes with user and timestamp"
409
- },
410
- trackFeedHistory: {
411
- label: "Track Feed History",
412
- helpText: "Show changes in activity feed"
413
- },
414
- encryptionConfig: {
415
- label: "Encryption Config",
416
- helpText: "Field-level encryption (GDPR/HIPAA/PCI-DSS)"
417
- },
418
- maskingRule: {
419
- label: "Masking Rule",
420
- helpText: "Data masking rules for PII protection"
421
465
  }
422
466
  }
423
467
  },
424
- trigger: {
425
- label: "Trigger"
426
- },
427
468
  validation: {
428
469
  label: "Validation Rule"
429
470
  },
@@ -500,12 +541,36 @@ var enMetadataForms = {
500
541
  onError: {
501
542
  label: "On Error"
502
543
  },
544
+ timeout: {
545
+ label: "Timeout",
546
+ helpText: "Abort the hook after N milliseconds"
547
+ },
503
548
  condition: {
504
549
  label: "Condition",
505
550
  helpText: "Optional formula \u2014 skip the hook when this evaluates to false"
551
+ },
552
+ retryPolicy: {
553
+ label: "Retry Policy",
554
+ helpText: "Retry on failure \u2014 most useful for async hooks"
555
+ },
556
+ "retryPolicy.maxRetries": {
557
+ label: "Max Retries",
558
+ helpText: "Maximum retry attempts"
559
+ },
560
+ "retryPolicy.backoffMs": {
561
+ label: "Backoff Ms",
562
+ helpText: "Delay between retries (ms)"
506
563
  }
507
564
  }
508
565
  },
566
+ seed: {
567
+ label: "Seed Data",
568
+ description: "Fixture / initialization data applied on publish"
569
+ },
570
+ mapping: {
571
+ label: "Import Mapping",
572
+ description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
573
+ },
509
574
  view: {
510
575
  label: "View",
511
576
  sections: {
@@ -677,6 +742,10 @@ var enMetadataForms = {
677
742
  label: "Layout",
678
743
  description: "Page regions and components placed within them."
679
744
  },
745
+ interface: {
746
+ label: "Interface (list pages)",
747
+ description: "Interface mode (Airtable parity): the page defines its own data surface directly \u2014 columns, filters, visualizations and toolbar \u2014 no inheriting from a separate view."
748
+ },
680
749
  advanced: {
681
750
  label: "Advanced",
682
751
  description: "Activation, audience, and accessibility."
@@ -719,6 +788,58 @@ var enMetadataForms = {
719
788
  label: "Regions",
720
789
  helpText: "Layout regions (header, main, sidebar, footer) with components"
721
790
  },
791
+ interfaceConfig: {
792
+ label: "Interface Config",
793
+ helpText: "The page IS the view: source picks the object, columns/filterBy are defined directly here; appearance.allowedVisualizations whitelists renderers (one entry = locked); userActions toggles the toolbar."
794
+ },
795
+ "interfaceConfig.source": {
796
+ label: "Source",
797
+ helpText: "Object this page reads from"
798
+ },
799
+ "interfaceConfig.columns": {
800
+ label: "Columns",
801
+ helpText: "Columns to show \u2014 defined directly on the page (blank = all object fields)"
802
+ },
803
+ "interfaceConfig.filterBy": {
804
+ label: "Filter By",
805
+ helpText: "Always-on base filter for the page \u2014 same visual builder as the list toolbar."
806
+ },
807
+ "interfaceConfig.levels": {
808
+ label: "Levels",
809
+ helpText: "Hierarchy levels to display (tree-like sources)"
810
+ },
811
+ "interfaceConfig.appearance": {
812
+ label: "Appearance",
813
+ helpText: "Allowed visualizations (Grid / Kanban / Calendar / \u2026) and description visibility"
814
+ },
815
+ "interfaceConfig.userFilters": {
816
+ label: "User Filters",
817
+ helpText: "End-user filter bar: None (no bar) / Tabs (named presets) / Dropdown (per-field). None removes the config."
818
+ },
819
+ "interfaceConfig.userActions": {
820
+ label: "User Actions",
821
+ helpText: "Toolbar toggles (search, sort, filter, row height)"
822
+ },
823
+ "interfaceConfig.addRecord": {
824
+ label: "Add Record",
825
+ helpText: "Add-record entry point"
826
+ },
827
+ "interfaceConfig.buttons": {
828
+ label: "Buttons",
829
+ helpText: "Toolbar buttons \u2014 pick from this object's actions"
830
+ },
831
+ "interfaceConfig.recordAction": {
832
+ label: "Record Action",
833
+ helpText: "How clicking a record opens its detail"
834
+ },
835
+ "interfaceConfig.showRecordCount": {
836
+ label: "Show Record Count",
837
+ helpText: "Show the record count bar"
838
+ },
839
+ "interfaceConfig.allowPrinting": {
840
+ label: "Allow Printing",
841
+ helpText: "Allow users to print this page"
842
+ },
722
843
  isDefault: {
723
844
  label: "Is Default",
724
845
  helpText: "Set as default page for this page type"
@@ -967,6 +1088,22 @@ var enMetadataForms = {
967
1088
  label: "Body",
968
1089
  helpText: "JavaScript code to execute"
969
1090
  },
1091
+ "body.language": {
1092
+ label: "Language",
1093
+ helpText: "expression = pure formula; js = sandboxed JavaScript"
1094
+ },
1095
+ "body.source": {
1096
+ label: "Source",
1097
+ helpText: "Function body source \u2014 no top-level imports"
1098
+ },
1099
+ "body.capabilities": {
1100
+ label: "Capabilities",
1101
+ helpText: "Allowed ctx APIs (api.read, api.write, crypto.uuid, log, \u2026)"
1102
+ },
1103
+ "body.timeoutMs": {
1104
+ label: "Timeout Ms",
1105
+ helpText: "Per-invocation timeout (ms)"
1106
+ },
970
1107
  params: {
971
1108
  label: "Params",
972
1109
  helpText: "User input parameters (show form before executing)"
@@ -1007,9 +1144,9 @@ var enMetadataForms = {
1007
1144
  label: "Bulk Enabled",
1008
1145
  helpText: "Allow applying to multiple selected records"
1009
1146
  },
1010
- aiExposed: {
1011
- label: "Ai Exposed",
1012
- helpText: "Allow AI agents to call this action"
1147
+ ai: {
1148
+ label: "Ai",
1149
+ helpText: "AI exposure (opt-in): set ai.exposed=true and write ai.description (\u226540 chars) to make this callable by agents."
1013
1150
  },
1014
1151
  recordIdParam: {
1015
1152
  label: "Record Id Param",
@@ -1032,13 +1169,9 @@ var enMetadataForms = {
1032
1169
  label: "Basics",
1033
1170
  description: "Identity and data source."
1034
1171
  },
1035
- columns: {
1036
- label: "Columns",
1037
- description: "Columns shown in the report output."
1038
- },
1039
- groupings: {
1040
- label: "Groupings",
1041
- description: "How rows (and columns, for matrix reports) are grouped."
1172
+ dataset_binding: {
1173
+ label: "Dataset binding",
1174
+ description: "The semantic-layer dataset this report renders. Values are the dataset\u2019s measures; rows are its dimensions."
1042
1175
  },
1043
1176
  joined_blocks: {
1044
1177
  label: "Joined blocks",
@@ -1064,33 +1197,37 @@ var enMetadataForms = {
1064
1197
  description: {
1065
1198
  label: "Description"
1066
1199
  },
1067
- objectName: {
1068
- label: "Object Name",
1069
- helpText: "Data source object"
1070
- },
1071
1200
  type: {
1072
1201
  label: "Type",
1073
1202
  helpText: "Report type: tabular/summary/matrix/joined"
1074
1203
  },
1204
+ dataset: {
1205
+ label: "Dataset",
1206
+ helpText: "Dataset to bind (measures/dimensions come from its semantic layer)"
1207
+ },
1208
+ values: {
1209
+ label: "Values",
1210
+ helpText: "Measure names (from the dataset) to display"
1211
+ },
1212
+ rows: {
1213
+ label: "Rows",
1214
+ helpText: "Dimension names (from the dataset) to group rows by"
1215
+ },
1075
1216
  columns: {
1076
1217
  label: "Columns",
1077
1218
  helpText: "Columns to display in the report"
1078
1219
  },
1079
- groupingsDown: {
1080
- label: "Groupings Down",
1081
- helpText: "Row grouping levels"
1082
- },
1083
- groupingsAcross: {
1084
- label: "Groupings Across",
1085
- helpText: "Column grouping levels (matrix only)"
1220
+ drilldown: {
1221
+ label: "Drilldown",
1222
+ helpText: "Click an aggregated row/cell to open the underlying records"
1086
1223
  },
1087
1224
  blocks: {
1088
1225
  label: "Blocks",
1089
1226
  helpText: "Join multiple objects (joined report only)"
1090
1227
  },
1091
- filter: {
1092
- label: "Filter",
1093
- helpText: "Report-level filters"
1228
+ runtimeFilter: {
1229
+ label: "Runtime Filter",
1230
+ helpText: "Render-time scope filter, ANDed at query time"
1094
1231
  },
1095
1232
  chart: {
1096
1233
  label: "Chart",
@@ -1106,6 +1243,62 @@ var enMetadataForms = {
1106
1243
  }
1107
1244
  }
1108
1245
  },
1246
+ dataset: {
1247
+ label: "Dataset",
1248
+ description: "Analytics semantic layer \u2014 dimensions & measures",
1249
+ sections: {
1250
+ basics: {
1251
+ label: "Basics",
1252
+ description: "Dataset identity."
1253
+ },
1254
+ source: {
1255
+ label: "Source",
1256
+ description: "The base object, the relationships to join, and the dataset\u2019s intrinsic scope. Joins are derived from the object graph \u2014 pick relationship (lookup / master_detail) names, never write an ON clause."
1257
+ },
1258
+ dimensions: {
1259
+ label: "Dimensions",
1260
+ description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
1261
+ },
1262
+ measures: {
1263
+ label: "Measures",
1264
+ description: "Aggregatable values defined once and referenced by name. A measure is sum/avg/count/\u2026 of a field; a derived measure combines other measures (ratio/sum/difference/product). Measure-scoped filters and derived ops are edited per-row in the dataset designer."
1265
+ }
1266
+ },
1267
+ fields: {
1268
+ name: {
1269
+ label: "Name",
1270
+ helpText: "snake_case unique identifier"
1271
+ },
1272
+ label: {
1273
+ label: "Label",
1274
+ helpText: "Display name"
1275
+ },
1276
+ description: {
1277
+ label: "Description",
1278
+ helpText: "What this dataset measures"
1279
+ },
1280
+ object: {
1281
+ label: "Object",
1282
+ helpText: "Base object \u2014 the FROM"
1283
+ },
1284
+ include: {
1285
+ label: "Include",
1286
+ helpText: 'Relationship (lookup / master_detail) field names to join \u2014 enables `relationship.field` dimensions/measures (e.g. include "account" \u2192 group by account.region)'
1287
+ },
1288
+ filter: {
1289
+ label: "Filter",
1290
+ helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
1291
+ },
1292
+ dimensions: {
1293
+ label: "Dimensions",
1294
+ helpText: "Each: name (referenced by presentations), field, type, and \u2014 for dates \u2014 a default bucketing granularity"
1295
+ },
1296
+ measures: {
1297
+ label: "Measures",
1298
+ helpText: "Each: name, aggregate, field (optional for count), display format/currency, and a \u201Ccertified\u201D governance flag"
1299
+ }
1300
+ }
1301
+ },
1109
1302
  flow: {
1110
1303
  label: "Flow",
1111
1304
  sections: {
@@ -1185,15 +1378,6 @@ var enMetadataForms = {
1185
1378
  translation: {
1186
1379
  label: "Translation"
1187
1380
  },
1188
- router: {
1189
- label: "Router"
1190
- },
1191
- function: {
1192
- label: "Function"
1193
- },
1194
- service: {
1195
- label: "Service"
1196
- },
1197
1381
  email_template: {
1198
1382
  label: "Email Template",
1199
1383
  sections: {
@@ -1274,6 +1458,14 @@ var enMetadataForms = {
1274
1458
  }
1275
1459
  }
1276
1460
  },
1461
+ doc: {
1462
+ label: "Documentation",
1463
+ description: "Package documentation \u2014 flat Markdown items (ADR-0046)"
1464
+ },
1465
+ book: {
1466
+ label: "Documentation Book",
1467
+ description: "Documentation navigation spine \u2014 ordered groups with derived membership (ADR-0046 \xA76)"
1468
+ },
1277
1469
  permission: {
1278
1470
  label: "Permission Set",
1279
1471
  sections: {
@@ -1329,67 +1521,12 @@ var enMetadataForms = {
1329
1521
  }
1330
1522
  }
1331
1523
  },
1332
- profile: {
1333
- label: "Profile",
1334
- sections: {
1335
- identity: {
1336
- label: "Identity",
1337
- description: "Permission Sets stack on top of a Profile to grant additional access. Profiles are the base set assigned 1:1 to each user."
1338
- },
1339
- system_permissions: {
1340
- label: "System Permissions",
1341
- description: "High-level capabilities not tied to a specific object \u2014 e.g. manage_users, view_audit_logs."
1342
- },
1343
- object_and_field_permissions: {
1344
- label: "Object & Field Permissions",
1345
- description: "Per-object CRUD + per-field FLS. Edit via the matrix editor or paste JSON here."
1346
- },
1347
- tab_and_row_level_security: {
1348
- label: "Tab & Row-Level Security",
1349
- description: "Tab visibility, RLS policies, and custom context variables for predicate evaluation."
1350
- }
1351
- },
1352
- fields: {
1353
- name: {
1354
- label: "Name",
1355
- helpText: "Machine name (snake_case)"
1356
- },
1357
- label: {
1358
- label: "Label",
1359
- helpText: "Display label for admins"
1360
- },
1361
- systemPermissions: {
1362
- label: "System Permissions",
1363
- helpText: "List of system capability keys"
1364
- },
1365
- objects: {
1366
- label: "Objects",
1367
- helpText: '{ "account": { allowRead: true, allowEdit: true, ... } }'
1368
- },
1369
- fields: {
1370
- label: "Fields",
1371
- helpText: '{ "account.amount": { readable: true, editable: false } }'
1372
- },
1373
- tabPermissions: {
1374
- label: "Tab Permissions",
1375
- helpText: '{ "app_crm": "visible", "app_admin": "hidden" }'
1376
- },
1377
- rowLevelSecurity: {
1378
- label: "Row Level Security",
1379
- helpText: "Array of RLS policies (see rls.zod.ts)"
1380
- },
1381
- contextVariables: {
1382
- label: "Context Variables",
1383
- helpText: "Custom variables referenced in RLS predicates"
1384
- }
1385
- }
1386
- },
1387
- role: {
1388
- label: "Role",
1524
+ position: {
1525
+ label: "Position",
1389
1526
  sections: {
1390
- role: {
1391
- label: "Role",
1392
- description: "Roles compose a hierarchy used for record sharing (sales VP \u2192 sales mgr \u2192 sales rep). Permissions themselves live on Permission Sets and Profiles."
1527
+ position: {
1528
+ label: "Position",
1529
+ description: "A position is a flat, assignable bundle of permission sets (e.g. sales_rep, sales_manager). Capability lives on permission sets; visibility depth lives on the business-unit tree."
1393
1530
  }
1394
1531
  },
1395
1532
  fields: {
@@ -1400,10 +1537,6 @@ var enMetadataForms = {
1400
1537
  label: {
1401
1538
  label: "Label"
1402
1539
  },
1403
- parent: {
1404
- label: "Parent",
1405
- helpText: "Parent role machine name (Reports To)"
1406
- },
1407
1540
  description: {
1408
1541
  label: "Description"
1409
1542
  }
@@ -1893,6 +2026,70 @@ var zhCNMetadataForms = {
1893
2026
  datasource: {
1894
2027
  label: "\u6570\u636E\u6E90",
1895
2028
  helpText: '\u76EE\u6807\u6570\u636E\u6E90 ID\uFF08\u9ED8\u8BA4\uFF1A"default"\uFF09'
2029
+ },
2030
+ lifecycle: {
2031
+ label: "\u6570\u636E\u751F\u547D\u5468\u671F",
2032
+ helpText: "\u6570\u636E\u751F\u547D\u5468\u671F\u5951\u7EA6\uFF08ADR-0057\uFF09\uFF1A\u6570\u636E\u4FDD\u7559\u591A\u4E45\u3001\u7A7A\u95F4\u5982\u4F55\u56DE\u6536\u3002\u7559\u7A7A\u5373\u6C38\u4E45\u4FDD\u7559\uFF08record \u8BED\u4E49\uFF09\u3002\u975E record \u7C7B\u5FC5\u987B\u58F0\u660E\u81F3\u5C11\u4E00\u4E2A\u754C\u5B9A\u7B56\u7565\uFF08\u4FDD\u7559\u671F\u3001TTL \u6216\u8F6E\u8F6C\uFF09\u3002"
2033
+ },
2034
+ "lifecycle.class": {
2035
+ label: "\u751F\u547D\u5468\u671F\u7C7B\u522B",
2036
+ helpText: "\u672C\u5BF9\u8C61\u6570\u636E\u7684\u6301\u4E45\u5316\u5951\u7EA6"
2037
+ },
2038
+ "lifecycle.retention": {
2039
+ label: "\u4FDD\u7559\u671F",
2040
+ helpText: "\u6309\u6570\u636E\u5E74\u9F84\u754C\u5B9A\u7684\u4FDD\u7559\u7A97\u53E3"
2041
+ },
2042
+ "lifecycle.retention.maxAge": {
2043
+ label: "\u6700\u957F\u4FDD\u7559",
2044
+ helpText: '\u65E9\u4E8E\u8BE5\u7A97\u53E3\uFF08\u6309 created_at\uFF09\u7684\u884C\u5C06\u88AB\u6E05\u7406\u3002\u65F6\u957F\u5B57\u9762\u91CF\uFF1Ah/d/w/y\uFF0C\u5982 "30d"'
2045
+ },
2046
+ "lifecycle.ttl": {
2047
+ label: "TTL \u8FC7\u671F",
2048
+ helpText: "\u6309\u884C\u7684 TTL \u81EA\u52A8\u8FC7\u671F"
2049
+ },
2050
+ "lifecycle.ttl.field": {
2051
+ label: "\u65F6\u95F4\u5B57\u6BB5",
2052
+ helpText: "TTL \u8BA1\u65F6\u8D77\u70B9\u7684\u65F6\u95F4\u6233\u5B57\u6BB5\uFF08\u5982 expires_at\uFF09"
2053
+ },
2054
+ "lifecycle.ttl.expireAfter": {
2055
+ label: "\u8FC7\u671F\u65F6\u957F",
2056
+ helpText: '\u884C\u5728\u8BE5\u5B57\u6BB5\u4E4B\u540E\u8FD9\u4E48\u4E45\u8FC7\u671F\uFF0C\u5982 "1d"'
2057
+ },
2058
+ "lifecycle.storage": {
2059
+ label: "\u5B58\u50A8\u7B56\u7565",
2060
+ helpText: "\u9AD8\u9891\u9065\u6D4B\u7684\u7269\u7406\u8F6E\u8F6C\uFF08SQLite\uFF1AO(1) \u5206\u7247 DROP\uFF09"
2061
+ },
2062
+ "lifecycle.storage.strategy": {
2063
+ label: "\u7B56\u7565",
2064
+ helpText: "\u5B58\u50A8\u7B56\u7565"
2065
+ },
2066
+ "lifecycle.storage.shards": {
2067
+ label: "\u5206\u7247\u6570",
2068
+ helpText: "\u4FDD\u7559\u7684\u5206\u7247\u6570\u91CF\uFF1B\u603B\u7A97\u53E3 = \u5206\u7247\u6570 \xD7 \u5355\u4F4D"
2069
+ },
2070
+ "lifecycle.storage.unit": {
2071
+ label: "\u5206\u7247\u5355\u4F4D",
2072
+ helpText: "\u5355\u4E2A\u5206\u7247\u7684\u65F6\u95F4\u5BBD\u5EA6"
2073
+ },
2074
+ "lifecycle.archive": {
2075
+ label: "\u5F52\u6863",
2076
+ helpText: "\u51B7\u5B58\u4EA4\u63A5\uFF08audit \u7C7B\uFF09\u3002\u5F52\u6863\u62F7\u8D1D\u6210\u529F\u524D\uFF0C\u884C\u7EDD\u4E0D\u4F1A\u88AB\u70ED\u5220\u9664\u3002"
2077
+ },
2078
+ "lifecycle.archive.after": {
2079
+ label: "\u5F52\u6863\u65F6\u70B9",
2080
+ helpText: "\u65E9\u4E8E\u8BE5\u7A97\u53E3\u7684\u884C\u8FDB\u5165\u5F52\u6863 \u2014 \u5FC5\u987B\u7B49\u4E8E retention.maxAge"
2081
+ },
2082
+ "lifecycle.archive.to": {
2083
+ label: "\u5F52\u6863\u6570\u636E\u6E90",
2084
+ helpText: "\u51B7\u5B58\u50A8\u7684\u76EE\u6807\u6570\u636E\u6E90\u540D\u79F0"
2085
+ },
2086
+ "lifecycle.archive.keep": {
2087
+ label: "\u5F52\u6863\u4FDD\u7559",
2088
+ helpText: '\u5F52\u6863\u4E2D\u4FDD\u7559\u591A\u4E45\uFF08\u7559\u7A7A = \u6C38\u4E45\uFF09\uFF0C\u5982 "7y"'
2089
+ },
2090
+ "lifecycle.reclaim": {
2091
+ label: "\u7A7A\u95F4\u56DE\u6536",
2092
+ helpText: "\u6E05\u7406\u540E\u56DE\u6536\u9A71\u52A8\u5C42\u7A7A\u95F4\uFF08\u975E record \u7C7B\u9ED8\u8BA4\u5F00\u542F\uFF09"
1896
2093
  }
1897
2094
  }
1898
2095
  },
@@ -2001,10 +2198,6 @@ var zhCNMetadataForms = {
2001
2198
  label: "\u6C47\u603B\u64CD\u4F5C",
2002
2199
  helpText: "\u7236\u5B50\u5173\u7CFB\u4E0B\u7684\u6C47\u603B\u805A\u5408\u914D\u7F6E"
2003
2200
  },
2004
- cached: {
2005
- label: "\u7F13\u5B58",
2006
- helpText: "\u8BA1\u7B97\u5B57\u6BB5\u7684\u7F13\u5B58\u914D\u7F6E"
2007
- },
2008
2201
  columnName: {
2009
2202
  label: "\u5217\u540D",
2010
2203
  helpText: "\u6570\u636E\u5E93\u4E2D\u7684\u7269\u7406\u5217\u540D\uFF08\u9ED8\u8BA4\u4E0E\u5B57\u6BB5\u540D\u76F8\u540C\uFF09"
@@ -2032,28 +2225,9 @@ var zhCNMetadataForms = {
2032
2225
  sortable: {
2033
2226
  label: "\u53EF\u6392\u5E8F",
2034
2227
  helpText: "\u5141\u8BB8\u6309\u6B64\u5B57\u6BB5\u6392\u5E8F"
2035
- },
2036
- auditTrail: {
2037
- label: "\u5BA1\u8BA1\u8DDF\u8E2A",
2038
- helpText: "\u8BB0\u5F55\u8BE6\u7EC6\u53D8\u66F4\u4E0E\u64CD\u4F5C\u4EBA\u3001\u65F6\u95F4\u6233"
2039
- },
2040
- trackFeedHistory: {
2041
- label: "\u52A8\u6001\u5386\u53F2\u8DDF\u8E2A",
2042
- helpText: "\u5728\u6D3B\u52A8\u52A8\u6001\u4E2D\u5C55\u793A\u53D8\u66F4"
2043
- },
2044
- encryptionConfig: {
2045
- label: "\u52A0\u5BC6\u914D\u7F6E",
2046
- helpText: "\u5B57\u6BB5\u7EA7\u52A0\u5BC6\uFF08GDPR / HIPAA / PCI-DSS\uFF09"
2047
- },
2048
- maskingRule: {
2049
- label: "\u63A9\u7801\u89C4\u5219",
2050
- helpText: "PII \u6570\u636E\u8131\u654F\u89C4\u5219"
2051
2228
  }
2052
2229
  }
2053
2230
  },
2054
- trigger: {
2055
- label: "\u89E6\u53D1\u5668"
2056
- },
2057
2231
  validation: {
2058
2232
  label: "\u9A8C\u8BC1\u89C4\u5219"
2059
2233
  },
@@ -2130,12 +2304,36 @@ var zhCNMetadataForms = {
2130
2304
  onError: {
2131
2305
  label: "\u9519\u8BEF\u5904\u7406"
2132
2306
  },
2307
+ timeout: {
2308
+ label: "Timeout",
2309
+ helpText: "Abort the hook after N milliseconds"
2310
+ },
2133
2311
  condition: {
2134
2312
  label: "\u6761\u4EF6",
2135
2313
  helpText: "\u53EF\u9009\u516C\u5F0F\u2014\u2014\u6C42\u503C\u4E3A false \u65F6\u8DF3\u8FC7\u8BE5\u94A9\u5B50"
2314
+ },
2315
+ retryPolicy: {
2316
+ label: "Retry Policy",
2317
+ helpText: "Retry on failure \u2014 most useful for async hooks"
2318
+ },
2319
+ "retryPolicy.maxRetries": {
2320
+ label: "Max Retries",
2321
+ helpText: "Maximum retry attempts"
2322
+ },
2323
+ "retryPolicy.backoffMs": {
2324
+ label: "Backoff Ms",
2325
+ helpText: "Delay between retries (ms)"
2136
2326
  }
2137
2327
  }
2138
2328
  },
2329
+ seed: {
2330
+ label: "Seed Data",
2331
+ description: "Fixture / initialization data applied on publish"
2332
+ },
2333
+ mapping: {
2334
+ label: "Import Mapping",
2335
+ description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
2336
+ },
2139
2337
  view: {
2140
2338
  label: "\u89C6\u56FE",
2141
2339
  sections: {
@@ -2307,6 +2505,10 @@ var zhCNMetadataForms = {
2307
2505
  label: "\u5E03\u5C40",
2308
2506
  description: "\u9875\u9762\u533A\u5757\u4E0E\u7EC4\u4EF6"
2309
2507
  },
2508
+ interface: {
2509
+ label: "Interface (list pages)",
2510
+ description: "Interface mode (Airtable parity): the page defines its own data surface directly \u2014 columns, filters, visualizations and toolbar \u2014 no inheriting from a separate view."
2511
+ },
2310
2512
  advanced: {
2311
2513
  label: "\u9AD8\u7EA7\u8BBE\u7F6E",
2312
2514
  description: "\u9ED8\u8BA4\u9875\u3001\u7C7B\u578B\u4E0E\u5206\u914D"
@@ -2349,6 +2551,58 @@ var zhCNMetadataForms = {
2349
2551
  label: "\u533A\u57DF",
2350
2552
  helpText: "\u5E03\u5C40\u533A\u57DF\uFF08header\u3001main\u3001sidebar\u3001footer\uFF09\u53CA\u5176\u7EC4\u4EF6"
2351
2553
  },
2554
+ interfaceConfig: {
2555
+ label: "Interface Config",
2556
+ helpText: "The page IS the view: source picks the object, columns/filterBy are defined directly here; appearance.allowedVisualizations whitelists renderers (one entry = locked); userActions toggles the toolbar."
2557
+ },
2558
+ "interfaceConfig.source": {
2559
+ label: "Source",
2560
+ helpText: "Object this page reads from"
2561
+ },
2562
+ "interfaceConfig.columns": {
2563
+ label: "Columns",
2564
+ helpText: "Columns to show \u2014 defined directly on the page (blank = all object fields)"
2565
+ },
2566
+ "interfaceConfig.filterBy": {
2567
+ label: "Filter By",
2568
+ helpText: "Always-on base filter for the page \u2014 same visual builder as the list toolbar."
2569
+ },
2570
+ "interfaceConfig.levels": {
2571
+ label: "Levels",
2572
+ helpText: "Hierarchy levels to display (tree-like sources)"
2573
+ },
2574
+ "interfaceConfig.appearance": {
2575
+ label: "Appearance",
2576
+ helpText: "Allowed visualizations (Grid / Kanban / Calendar / \u2026) and description visibility"
2577
+ },
2578
+ "interfaceConfig.userFilters": {
2579
+ label: "User Filters",
2580
+ helpText: "End-user filter bar: None (no bar) / Tabs (named presets) / Dropdown (per-field). None removes the config."
2581
+ },
2582
+ "interfaceConfig.userActions": {
2583
+ label: "User Actions",
2584
+ helpText: "Toolbar toggles (search, sort, filter, row height)"
2585
+ },
2586
+ "interfaceConfig.addRecord": {
2587
+ label: "Add Record",
2588
+ helpText: "Add-record entry point"
2589
+ },
2590
+ "interfaceConfig.buttons": {
2591
+ label: "Buttons",
2592
+ helpText: "Toolbar buttons \u2014 pick from this object's actions"
2593
+ },
2594
+ "interfaceConfig.recordAction": {
2595
+ label: "Record Action",
2596
+ helpText: "How clicking a record opens its detail"
2597
+ },
2598
+ "interfaceConfig.showRecordCount": {
2599
+ label: "Show Record Count",
2600
+ helpText: "Show the record count bar"
2601
+ },
2602
+ "interfaceConfig.allowPrinting": {
2603
+ label: "Allow Printing",
2604
+ helpText: "Allow users to print this page"
2605
+ },
2352
2606
  isDefault: {
2353
2607
  label: "\u9ED8\u8BA4",
2354
2608
  helpText: "\u8BBE\u4E3A\u8BE5\u9875\u9762\u7C7B\u578B\u7684\u9ED8\u8BA4\u9875"
@@ -2597,6 +2851,22 @@ var zhCNMetadataForms = {
2597
2851
  label: "\u6B63\u6587",
2598
2852
  helpText: "\u8981\u6267\u884C\u7684 JavaScript \u4EE3\u7801"
2599
2853
  },
2854
+ "body.language": {
2855
+ label: "Language",
2856
+ helpText: "expression = pure formula; js = sandboxed JavaScript"
2857
+ },
2858
+ "body.source": {
2859
+ label: "Source",
2860
+ helpText: "Function body source \u2014 no top-level imports"
2861
+ },
2862
+ "body.capabilities": {
2863
+ label: "Capabilities",
2864
+ helpText: "Allowed ctx APIs (api.read, api.write, crypto.uuid, log, \u2026)"
2865
+ },
2866
+ "body.timeoutMs": {
2867
+ label: "Timeout Ms",
2868
+ helpText: "Per-invocation timeout (ms)"
2869
+ },
2600
2870
  params: {
2601
2871
  label: "\u53C2\u6570",
2602
2872
  helpText: "\u6267\u884C\u524D\u5411\u7528\u6237\u6536\u96C6\u7684\u8F93\u5165\u53C2\u6570"
@@ -2637,9 +2907,9 @@ var zhCNMetadataForms = {
2637
2907
  label: "\u6279\u91CF\u542F\u7528",
2638
2908
  helpText: "\u5141\u8BB8\u5BF9\u591A\u6761\u9009\u4E2D\u8BB0\u5F55\u6267\u884C"
2639
2909
  },
2640
- aiExposed: {
2641
- label: "\u66B4\u9732\u7ED9 AI",
2642
- helpText: "\u5141\u8BB8 AI \u667A\u80FD\u4F53\u8C03\u7528\u6B64\u64CD\u4F5C"
2910
+ ai: {
2911
+ label: "Ai",
2912
+ helpText: "AI exposure (opt-in): set ai.exposed=true and write ai.description (\u226540 chars) to make this callable by agents."
2643
2913
  },
2644
2914
  recordIdParam: {
2645
2915
  label: "\u8BB0\u5F55 ID \u53C2\u6570",
@@ -2662,13 +2932,9 @@ var zhCNMetadataForms = {
2662
2932
  label: "\u57FA\u7840\u4FE1\u606F",
2663
2933
  description: "\u540D\u79F0\u4E0E\u6570\u636E\u6E90"
2664
2934
  },
2665
- columns: {
2666
- label: "\u5217",
2667
- description: "\u9009\u62E9\u8981\u5C55\u793A\u7684\u5217"
2668
- },
2669
- groupings: {
2670
- label: "\u5206\u7EC4\u4E0E\u6C47\u603B",
2671
- description: "\u884C\u5217\u5206\u7EC4\u7EF4\u5EA6"
2935
+ dataset_binding: {
2936
+ label: "Dataset binding",
2937
+ description: "The semantic-layer dataset this report renders. Values are the dataset\u2019s measures; rows are its dimensions."
2672
2938
  },
2673
2939
  joined_blocks: {
2674
2940
  label: "\u5173\u8054\u5BF9\u8C61",
@@ -2694,33 +2960,37 @@ var zhCNMetadataForms = {
2694
2960
  description: {
2695
2961
  label: "\u63CF\u8FF0"
2696
2962
  },
2697
- objectName: {
2698
- label: "\u5BF9\u8C61\u540D\u79F0",
2699
- helpText: "\u62A5\u8868\u6570\u636E\u6E90\u5BF9\u8C61"
2700
- },
2701
2963
  type: {
2702
2964
  label: "\u7C7B\u578B",
2703
2965
  helpText: "\u62A5\u8868\u7C7B\u578B\uFF1Atabular / summary / matrix / joined"
2704
2966
  },
2967
+ dataset: {
2968
+ label: "Dataset",
2969
+ helpText: "Dataset to bind (measures/dimensions come from its semantic layer)"
2970
+ },
2971
+ values: {
2972
+ label: "Values",
2973
+ helpText: "Measure names (from the dataset) to display"
2974
+ },
2975
+ rows: {
2976
+ label: "Rows",
2977
+ helpText: "Dimension names (from the dataset) to group rows by"
2978
+ },
2705
2979
  columns: {
2706
2980
  label: "\u5217",
2707
2981
  helpText: "\u62A5\u8868\u4E2D\u663E\u793A\u7684\u5217"
2708
2982
  },
2709
- groupingsDown: {
2710
- label: "\u884C\u5206\u7EC4",
2711
- helpText: "\u884C\u65B9\u5411\u5206\u7EC4\u5C42\u7EA7"
2712
- },
2713
- groupingsAcross: {
2714
- label: "\u5217\u5206\u7EC4",
2715
- helpText: "\u5217\u65B9\u5411\u5206\u7EC4\u5C42\u7EA7\uFF08matrix \u62A5\u8868\uFF09"
2983
+ drilldown: {
2984
+ label: "Drilldown",
2985
+ helpText: "Click an aggregated row/cell to open the underlying records"
2716
2986
  },
2717
2987
  blocks: {
2718
2988
  label: "\u5206\u5757",
2719
2989
  helpText: "joined \u62A5\u8868\u7684\u8054\u5408\u67E5\u8BE2\u5757"
2720
2990
  },
2721
- filter: {
2722
- label: "\u7B5B\u9009",
2723
- helpText: "\u62A5\u8868\u7EA7\u522B\u7684\u7B5B\u9009\u89C4\u5219"
2991
+ runtimeFilter: {
2992
+ label: "Runtime Filter",
2993
+ helpText: "Render-time scope filter, ANDed at query time"
2724
2994
  },
2725
2995
  chart: {
2726
2996
  label: "\u56FE\u8868",
@@ -2736,18 +3006,74 @@ var zhCNMetadataForms = {
2736
3006
  }
2737
3007
  }
2738
3008
  },
2739
- flow: {
2740
- label: "\u6D41\u7A0B",
3009
+ dataset: {
3010
+ label: "Dataset",
3011
+ description: "Analytics semantic layer \u2014 dimensions & measures",
2741
3012
  sections: {
2742
3013
  basics: {
2743
- label: "\u57FA\u7840\u4FE1\u606F",
2744
- description: "\u6D41\u7A0B\u6807\u8BC6\u4E0E\u542F\u52A8\u65B9\u5F0F"
3014
+ label: "Basics",
3015
+ description: "Dataset identity."
2745
3016
  },
2746
- canvas: {
2747
- label: "\u753B\u5E03",
2748
- description: "\u8282\u70B9\u3001\u8FDE\u7EBF\u4E0E\u6D41\u7A0B\u53D8\u91CF\u2014\u2014\u590D\u6742\u6D41\u7A0B\u5EFA\u8BAE\u7528\u53EF\u89C6\u5316\u8BBE\u8BA1\u5668"
3017
+ source: {
3018
+ label: "Source",
3019
+ description: "The base object, the relationships to join, and the dataset\u2019s intrinsic scope. Joins are derived from the object graph \u2014 pick relationship (lookup / master_detail) names, never write an ON clause."
2749
3020
  },
2750
- execution: {
3021
+ dimensions: {
3022
+ label: "Dimensions",
3023
+ description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
3024
+ },
3025
+ measures: {
3026
+ label: "Measures",
3027
+ description: "Aggregatable values defined once and referenced by name. A measure is sum/avg/count/\u2026 of a field; a derived measure combines other measures (ratio/sum/difference/product). Measure-scoped filters and derived ops are edited per-row in the dataset designer."
3028
+ }
3029
+ },
3030
+ fields: {
3031
+ name: {
3032
+ label: "Name",
3033
+ helpText: "snake_case unique identifier"
3034
+ },
3035
+ label: {
3036
+ label: "Label",
3037
+ helpText: "Display name"
3038
+ },
3039
+ description: {
3040
+ label: "Description",
3041
+ helpText: "What this dataset measures"
3042
+ },
3043
+ object: {
3044
+ label: "Object",
3045
+ helpText: "Base object \u2014 the FROM"
3046
+ },
3047
+ include: {
3048
+ label: "Include",
3049
+ helpText: 'Relationship (lookup / master_detail) field names to join \u2014 enables `relationship.field` dimensions/measures (e.g. include "account" \u2192 group by account.region)'
3050
+ },
3051
+ filter: {
3052
+ label: "Filter",
3053
+ helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
3054
+ },
3055
+ dimensions: {
3056
+ label: "Dimensions",
3057
+ helpText: "Each: name (referenced by presentations), field, type, and \u2014 for dates \u2014 a default bucketing granularity"
3058
+ },
3059
+ measures: {
3060
+ label: "Measures",
3061
+ helpText: "Each: name, aggregate, field (optional for count), display format/currency, and a \u201Ccertified\u201D governance flag"
3062
+ }
3063
+ }
3064
+ },
3065
+ flow: {
3066
+ label: "\u6D41\u7A0B",
3067
+ sections: {
3068
+ basics: {
3069
+ label: "\u57FA\u7840\u4FE1\u606F",
3070
+ description: "\u6D41\u7A0B\u6807\u8BC6\u4E0E\u542F\u52A8\u65B9\u5F0F"
3071
+ },
3072
+ canvas: {
3073
+ label: "\u753B\u5E03",
3074
+ description: "\u8282\u70B9\u3001\u8FDE\u7EBF\u4E0E\u6D41\u7A0B\u53D8\u91CF\u2014\u2014\u590D\u6742\u6D41\u7A0B\u5EFA\u8BAE\u7528\u53EF\u89C6\u5316\u8BBE\u8BA1\u5668"
3075
+ },
3076
+ execution: {
2751
3077
  label: "\u6267\u884C\u914D\u7F6E",
2752
3078
  description: "\u90E8\u7F72\u72B6\u6001\u3001\u8EAB\u4EFD\u4E0E\u5F02\u5E38\u5904\u7406"
2753
3079
  }
@@ -2815,15 +3141,6 @@ var zhCNMetadataForms = {
2815
3141
  translation: {
2816
3142
  label: "\u7FFB\u8BD1"
2817
3143
  },
2818
- router: {
2819
- label: "\u8DEF\u7531\u5668"
2820
- },
2821
- function: {
2822
- label: "\u51FD\u6570"
2823
- },
2824
- service: {
2825
- label: "\u670D\u52A1"
2826
- },
2827
3144
  email_template: {
2828
3145
  label: "\u90AE\u4EF6\u6A21\u677F",
2829
3146
  sections: {
@@ -2904,6 +3221,14 @@ var zhCNMetadataForms = {
2904
3221
  }
2905
3222
  }
2906
3223
  },
3224
+ doc: {
3225
+ label: "Documentation",
3226
+ description: "Package documentation \u2014 flat Markdown items (ADR-0046)"
3227
+ },
3228
+ book: {
3229
+ label: "Documentation Book",
3230
+ description: "Documentation navigation spine \u2014 ordered groups with derived membership (ADR-0046 \xA76)"
3231
+ },
2907
3232
  permission: {
2908
3233
  label: "\u6743\u9650\u96C6 / \u914D\u7F6E\u6587\u4EF6",
2909
3234
  sections: {
@@ -2959,67 +3284,12 @@ var zhCNMetadataForms = {
2959
3284
  }
2960
3285
  }
2961
3286
  },
2962
- profile: {
2963
- label: "\u914D\u7F6E\u6587\u4EF6",
2964
- sections: {
2965
- identity: {
2966
- label: "\u6807\u8BC6",
2967
- description: "\u6743\u9650\u96C6\u53E0\u52A0\u5728\u914D\u7F6E\u6587\u4EF6\u4E4B\u4E0A\u4EE5\u6388\u4E88\u989D\u5916\u7684\u8BBF\u95EE\u6743\u9650\u3002\u914D\u7F6E\u6587\u4EF6\u662F\u6309 1:1 \u5206\u914D\u7ED9\u6BCF\u4E2A\u7528\u6237\u7684\u57FA\u7840\u96C6\u5408\u3002"
2968
- },
2969
- system_permissions: {
2970
- label: "\u7CFB\u7EDF\u6743\u9650",
2971
- description: "\u4E0E\u7279\u5B9A\u5BF9\u8C61\u65E0\u5173\u7684\u9AD8\u7EA7\u80FD\u529B\u2014\u2014\u4F8B\u5982 manage_users\u3001view_audit_logs\u3002"
2972
- },
2973
- object_and_field_permissions: {
2974
- label: "\u5BF9\u8C61\u4E0E\u5B57\u6BB5\u6743\u9650",
2975
- description: "\u6309\u5BF9\u8C61\u7684\u589E\u5220\u6539\u67E5 + \u6309\u5B57\u6BB5\u7684\u5B57\u6BB5\u7EA7\u5B89\u5168\uFF08FLS\uFF09\u3002\u53EF\u901A\u8FC7\u77E9\u9635\u7F16\u8F91\u5668\u7F16\u8F91\uFF0C\u6216\u5728\u6B64\u5904\u7C98\u8D34 JSON\u3002"
2976
- },
2977
- tab_and_row_level_security: {
2978
- label: "\u6807\u7B7E\u9875\u4E0E\u884C\u7EA7\u5B89\u5168",
2979
- description: "\u6807\u7B7E\u9875\u53EF\u89C1\u6027\u3001RLS \u7B56\u7565\uFF0C\u4EE5\u53CA\u7528\u4E8E\u8C13\u8BCD\u6C42\u503C\u7684\u81EA\u5B9A\u4E49\u4E0A\u4E0B\u6587\u53D8\u91CF\u3002"
2980
- }
2981
- },
2982
- fields: {
2983
- name: {
2984
- label: "\u540D\u79F0",
2985
- helpText: "\u673A\u5668\u540D\uFF08snake_case\uFF09"
2986
- },
2987
- label: {
2988
- label: "\u663E\u793A\u540D\u79F0",
2989
- helpText: "\u9762\u5411\u7BA1\u7406\u5458\u663E\u793A\u7684\u6807\u7B7E"
2990
- },
2991
- systemPermissions: {
2992
- label: "\u7CFB\u7EDF\u6743\u9650",
2993
- helpText: "\u7CFB\u7EDF\u80FD\u529B\u952E\u5217\u8868"
2994
- },
2995
- objects: {
2996
- label: "\u5BF9\u8C61\u6743\u9650",
2997
- helpText: '\u793A\u4F8B\uFF1A{ "account": { allowRead: true, allowEdit: true, ... } }'
2998
- },
2999
- fields: {
3000
- label: "\u5B57\u6BB5",
3001
- helpText: '\u793A\u4F8B\uFF1A{ "account.amount": { readable: true, editable: false } }'
3002
- },
3003
- tabPermissions: {
3004
- label: "\u6807\u7B7E\u9875\u6743\u9650",
3005
- helpText: '\u793A\u4F8B\uFF1A{ "app_crm": "visible", "app_admin": "hidden" }'
3006
- },
3007
- rowLevelSecurity: {
3008
- label: "\u884C\u7EA7\u5B89\u5168",
3009
- helpText: "RLS \u7B56\u7565\u6570\u7EC4\uFF08\u53C2\u89C1 rls.zod.ts\uFF09"
3010
- },
3011
- contextVariables: {
3012
- label: "\u4E0A\u4E0B\u6587\u53D8\u91CF",
3013
- helpText: "RLS \u8C13\u8BCD\u4E2D\u5F15\u7528\u7684\u81EA\u5B9A\u4E49\u53D8\u91CF"
3014
- }
3015
- }
3016
- },
3017
- role: {
3018
- label: "\u89D2\u8272",
3287
+ position: {
3288
+ label: "\u5C97\u4F4D",
3019
3289
  sections: {
3020
- role: {
3021
- label: "\u89D2\u8272\u5B9A\u4E49",
3022
- description: "\u89D2\u8272\u540D\u79F0\u4E0E\u7EE7\u627F\u5173\u7CFB"
3290
+ position: {
3291
+ label: "\u5C97\u4F4D",
3292
+ description: "\u5C97\u4F4D\u662F\u6241\u5E73\u7684\u3001\u53EF\u5206\u914D\u7684\u6743\u9650\u96C6\u7EC4\u5408(\u5982 sales_rep\u3001sales_manager)\u3002\u80FD\u529B\u5728\u6743\u9650\u96C6\u4E0A;\u53EF\u89C1\u8303\u56F4\u6DF1\u5EA6\u5728\u4E1A\u52A1\u5355\u5143\u6811\u4E0A\u3002"
3023
3293
  }
3024
3294
  },
3025
3295
  fields: {
@@ -3030,10 +3300,6 @@ var zhCNMetadataForms = {
3030
3300
  label: {
3031
3301
  label: "\u663E\u793A\u540D\u79F0"
3032
3302
  },
3033
- parent: {
3034
- label: "\u7236\u7EA7",
3035
- helpText: "\u7EE7\u627F\u7236\u89D2\u8272\u7684\u6743\u9650"
3036
- },
3037
3303
  description: {
3038
3304
  label: "\u63CF\u8FF0"
3039
3305
  }
@@ -3523,6 +3789,70 @@ var jaJPMetadataForms = {
3523
3789
  datasource: {
3524
3790
  label: "\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9",
3525
3791
  helpText: '\u5BFE\u8C61\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9 ID\uFF08\u65E2\u5B9A: "default"\uFF09'
3792
+ },
3793
+ lifecycle: {
3794
+ label: "Lifecycle",
3795
+ helpText: "Data lifecycle contract (ADR-0057): how long rows live and how space is reclaimed. Leave empty for permanent record semantics. Non-record classes require at least one bounding policy (retention, TTL, or rotation)."
3796
+ },
3797
+ "lifecycle.class": {
3798
+ label: "Class",
3799
+ helpText: "Persistence contract for the rows of this object"
3800
+ },
3801
+ "lifecycle.retention": {
3802
+ label: "Retention",
3803
+ helpText: "Age-based retention window"
3804
+ },
3805
+ "lifecycle.retention.maxAge": {
3806
+ label: "Max Age",
3807
+ helpText: 'Rows older than this (by created_at) are reaped. Duration literal: h/d/w/y, e.g. "30d"'
3808
+ },
3809
+ "lifecycle.ttl": {
3810
+ label: "Ttl",
3811
+ helpText: "Per-row TTL expiry"
3812
+ },
3813
+ "lifecycle.ttl.field": {
3814
+ label: "Field",
3815
+ helpText: "Timestamp field the TTL is measured from (e.g. expires_at)"
3816
+ },
3817
+ "lifecycle.ttl.expireAfter": {
3818
+ label: "Expire After",
3819
+ helpText: 'Rows expire this long after the field, e.g. "1d"'
3820
+ },
3821
+ "lifecycle.storage": {
3822
+ label: "Storage",
3823
+ helpText: "Physical rotation for high-frequency telemetry (SQLite: O(1) shard DROP)"
3824
+ },
3825
+ "lifecycle.storage.strategy": {
3826
+ label: "Strategy",
3827
+ helpText: "Storage strategy"
3828
+ },
3829
+ "lifecycle.storage.shards": {
3830
+ label: "Shards",
3831
+ helpText: "Shards retained; total window = shards \xD7 unit"
3832
+ },
3833
+ "lifecycle.storage.unit": {
3834
+ label: "Unit",
3835
+ helpText: "Time width of one shard"
3836
+ },
3837
+ "lifecycle.archive": {
3838
+ label: "Archive",
3839
+ helpText: "Cold-store hand-off (audit class). Rows are never hot-deleted before the archive copy succeeded."
3840
+ },
3841
+ "lifecycle.archive.after": {
3842
+ label: "After",
3843
+ helpText: "Archive rows older than this \u2014 must equal retention.maxAge"
3844
+ },
3845
+ "lifecycle.archive.to": {
3846
+ label: "To",
3847
+ helpText: "Target datasource name for cold storage"
3848
+ },
3849
+ "lifecycle.archive.keep": {
3850
+ label: "Keep",
3851
+ helpText: 'How long the archive keeps rows (empty = forever), e.g. "7y"'
3852
+ },
3853
+ "lifecycle.reclaim": {
3854
+ label: "Reclaim",
3855
+ helpText: "Reclaim driver space after sweeps (default on for non-record classes)"
3526
3856
  }
3527
3857
  }
3528
3858
  },
@@ -3631,10 +3961,6 @@ var jaJPMetadataForms = {
3631
3961
  label: "\u96C6\u8A08\u64CD\u4F5C",
3632
3962
  helpText: "\u30ED\u30FC\u30EB\u30A2\u30C3\u30D7\u96C6\u8A08\u8A2D\u5B9A\uFF08\u89AA\u5B50\u95A2\u4FC2\u7528\uFF09"
3633
3963
  },
3634
- cached: {
3635
- label: "\u30AD\u30E3\u30C3\u30B7\u30E5",
3636
- helpText: "\u8A08\u7B97\u30D5\u30A3\u30FC\u30EB\u30C9\u306E\u30AD\u30E3\u30C3\u30B7\u30E5\u8A2D\u5B9A"
3637
- },
3638
3964
  columnName: {
3639
3965
  label: "\u5217\u540D",
3640
3966
  helpText: "\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u4E0A\u306E\u7269\u7406\u5217\u540D\uFF08\u65E2\u5B9A\u306F\u30D5\u30A3\u30FC\u30EB\u30C9\u540D\uFF09"
@@ -3662,28 +3988,9 @@ var jaJPMetadataForms = {
3662
3988
  sortable: {
3663
3989
  label: "\u4E26\u3073\u66FF\u3048\u53EF\u80FD",
3664
3990
  helpText: "\u3053\u306E\u30D5\u30A3\u30FC\u30EB\u30C9\u3067\u30EA\u30B9\u30C8\u306E\u4E26\u3079\u66FF\u3048\u3092\u8A31\u53EF"
3665
- },
3666
- auditTrail: {
3667
- label: "\u76E3\u67FB\u8A3C\u8DE1",
3668
- helpText: "\u30E6\u30FC\u30B6\u30FC\u3068\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u4ED8\u304D\u3067\u8A73\u7D30\u5909\u66F4\u3092\u8FFD\u8DE1"
3669
- },
3670
- trackFeedHistory: {
3671
- label: "\u30D5\u30A3\u30FC\u30C9\u5C65\u6B74\u8FFD\u8DE1",
3672
- helpText: "\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u30D5\u30A3\u30FC\u30C9\u306B\u5909\u66F4\u3092\u8868\u793A"
3673
- },
3674
- encryptionConfig: {
3675
- label: "\u6697\u53F7\u5316\u8A2D\u5B9A",
3676
- helpText: "\u30D5\u30A3\u30FC\u30EB\u30C9\u30EC\u30D9\u30EB\u6697\u53F7\u5316\uFF08GDPR/HIPAA/PCI-DSS\uFF09"
3677
- },
3678
- maskingRule: {
3679
- label: "\u30DE\u30B9\u30AD\u30F3\u30B0\u30EB\u30FC\u30EB",
3680
- helpText: "PII \u4FDD\u8B77\u7528\u30C7\u30FC\u30BF\u30DE\u30B9\u30AD\u30F3\u30B0\u30EB\u30FC\u30EB"
3681
3991
  }
3682
3992
  }
3683
3993
  },
3684
- trigger: {
3685
- label: "\u30C8\u30EA\u30AC\u30FC"
3686
- },
3687
3994
  validation: {
3688
3995
  label: "\u691C\u8A3C\u30EB\u30FC\u30EB"
3689
3996
  },
@@ -3760,12 +4067,36 @@ var jaJPMetadataForms = {
3760
4067
  onError: {
3761
4068
  label: "\u30A8\u30E9\u30FC\u6642"
3762
4069
  },
4070
+ timeout: {
4071
+ label: "Timeout",
4072
+ helpText: "Abort the hook after N milliseconds"
4073
+ },
3763
4074
  condition: {
3764
4075
  label: "\u6761\u4EF6",
3765
4076
  helpText: "\u4EFB\u610F\u306E\u6570\u5F0F \u2014 false \u8A55\u4FA1\u6642\u306F\u30D5\u30C3\u30AF\u3092\u30B9\u30AD\u30C3\u30D7"
4077
+ },
4078
+ retryPolicy: {
4079
+ label: "Retry Policy",
4080
+ helpText: "Retry on failure \u2014 most useful for async hooks"
4081
+ },
4082
+ "retryPolicy.maxRetries": {
4083
+ label: "Max Retries",
4084
+ helpText: "Maximum retry attempts"
4085
+ },
4086
+ "retryPolicy.backoffMs": {
4087
+ label: "Backoff Ms",
4088
+ helpText: "Delay between retries (ms)"
3766
4089
  }
3767
4090
  }
3768
4091
  },
4092
+ seed: {
4093
+ label: "Seed Data",
4094
+ description: "Fixture / initialization data applied on publish"
4095
+ },
4096
+ mapping: {
4097
+ label: "Import Mapping",
4098
+ description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
4099
+ },
3769
4100
  view: {
3770
4101
  label: "\u30D3\u30E5\u30FC",
3771
4102
  sections: {
@@ -3937,6 +4268,10 @@ var jaJPMetadataForms = {
3937
4268
  label: "\u30EC\u30A4\u30A2\u30A6\u30C8",
3938
4269
  description: "\u30DA\u30FC\u30B8\u9818\u57DF\u3068\u305D\u3053\u306B\u914D\u7F6E\u3059\u308B\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3002"
3939
4270
  },
4271
+ interface: {
4272
+ label: "Interface (list pages)",
4273
+ description: "Interface mode (Airtable parity): the page defines its own data surface directly \u2014 columns, filters, visualizations and toolbar \u2014 no inheriting from a separate view."
4274
+ },
3940
4275
  advanced: {
3941
4276
  label: "\u8A73\u7D30",
3942
4277
  description: "\u6709\u52B9\u5316\u3001\u5BFE\u8C61\u30E6\u30FC\u30B6\u30FC\u3001\u30A2\u30AF\u30BB\u30B7\u30D3\u30EA\u30C6\u30A3\u3002"
@@ -3979,6 +4314,58 @@ var jaJPMetadataForms = {
3979
4314
  label: "\u30EA\u30FC\u30B8\u30E7\u30F3",
3980
4315
  helpText: "\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u542B\u3080\u30EC\u30A4\u30A2\u30A6\u30C8\u9818\u57DF\uFF08header, main, sidebar, footer\uFF09"
3981
4316
  },
4317
+ interfaceConfig: {
4318
+ label: "Interface Config",
4319
+ helpText: "The page IS the view: source picks the object, columns/filterBy are defined directly here; appearance.allowedVisualizations whitelists renderers (one entry = locked); userActions toggles the toolbar."
4320
+ },
4321
+ "interfaceConfig.source": {
4322
+ label: "Source",
4323
+ helpText: "Object this page reads from"
4324
+ },
4325
+ "interfaceConfig.columns": {
4326
+ label: "Columns",
4327
+ helpText: "Columns to show \u2014 defined directly on the page (blank = all object fields)"
4328
+ },
4329
+ "interfaceConfig.filterBy": {
4330
+ label: "Filter By",
4331
+ helpText: "Always-on base filter for the page \u2014 same visual builder as the list toolbar."
4332
+ },
4333
+ "interfaceConfig.levels": {
4334
+ label: "Levels",
4335
+ helpText: "Hierarchy levels to display (tree-like sources)"
4336
+ },
4337
+ "interfaceConfig.appearance": {
4338
+ label: "Appearance",
4339
+ helpText: "Allowed visualizations (Grid / Kanban / Calendar / \u2026) and description visibility"
4340
+ },
4341
+ "interfaceConfig.userFilters": {
4342
+ label: "User Filters",
4343
+ helpText: "End-user filter bar: None (no bar) / Tabs (named presets) / Dropdown (per-field). None removes the config."
4344
+ },
4345
+ "interfaceConfig.userActions": {
4346
+ label: "User Actions",
4347
+ helpText: "Toolbar toggles (search, sort, filter, row height)"
4348
+ },
4349
+ "interfaceConfig.addRecord": {
4350
+ label: "Add Record",
4351
+ helpText: "Add-record entry point"
4352
+ },
4353
+ "interfaceConfig.buttons": {
4354
+ label: "Buttons",
4355
+ helpText: "Toolbar buttons \u2014 pick from this object's actions"
4356
+ },
4357
+ "interfaceConfig.recordAction": {
4358
+ label: "Record Action",
4359
+ helpText: "How clicking a record opens its detail"
4360
+ },
4361
+ "interfaceConfig.showRecordCount": {
4362
+ label: "Show Record Count",
4363
+ helpText: "Show the record count bar"
4364
+ },
4365
+ "interfaceConfig.allowPrinting": {
4366
+ label: "Allow Printing",
4367
+ helpText: "Allow users to print this page"
4368
+ },
3982
4369
  isDefault: {
3983
4370
  label: "\u65E2\u5B9A",
3984
4371
  helpText: "\u3053\u306E\u30DA\u30FC\u30B8\u7A2E\u5225\u306E\u65E2\u5B9A\u30DA\u30FC\u30B8\u306B\u8A2D\u5B9A"
@@ -4227,6 +4614,22 @@ var jaJPMetadataForms = {
4227
4614
  label: "\u672C\u6587",
4228
4615
  helpText: "\u5B9F\u884C\u3059\u308B JavaScript \u30B3\u30FC\u30C9"
4229
4616
  },
4617
+ "body.language": {
4618
+ label: "Language",
4619
+ helpText: "expression = pure formula; js = sandboxed JavaScript"
4620
+ },
4621
+ "body.source": {
4622
+ label: "Source",
4623
+ helpText: "Function body source \u2014 no top-level imports"
4624
+ },
4625
+ "body.capabilities": {
4626
+ label: "Capabilities",
4627
+ helpText: "Allowed ctx APIs (api.read, api.write, crypto.uuid, log, \u2026)"
4628
+ },
4629
+ "body.timeoutMs": {
4630
+ label: "Timeout Ms",
4631
+ helpText: "Per-invocation timeout (ms)"
4632
+ },
4230
4633
  params: {
4231
4634
  label: "\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC",
4232
4635
  helpText: "\u30E6\u30FC\u30B6\u30FC\u5165\u529B\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC\uFF08\u5B9F\u884C\u524D\u306B\u30D5\u30A9\u30FC\u30E0\u3092\u8868\u793A\uFF09"
@@ -4267,9 +4670,9 @@ var jaJPMetadataForms = {
4267
4670
  label: "\u4E00\u62EC\u64CD\u4F5C\u6709\u52B9",
4268
4671
  helpText: "\u9078\u629E\u3057\u305F\u8907\u6570\u30EC\u30B3\u30FC\u30C9\u3078\u306E\u9069\u7528\u3092\u8A31\u53EF"
4269
4672
  },
4270
- aiExposed: {
4271
- label: "AI \u306B\u516C\u958B",
4272
- helpText: "AI \u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306B\u3088\u308B\u3053\u306E\u30A2\u30AF\u30B7\u30E7\u30F3\u306E\u547C\u3073\u51FA\u3057\u3092\u8A31\u53EF"
4673
+ ai: {
4674
+ label: "Ai",
4675
+ helpText: "AI exposure (opt-in): set ai.exposed=true and write ai.description (\u226540 chars) to make this callable by agents."
4273
4676
  },
4274
4677
  recordIdParam: {
4275
4678
  label: "\u30EC\u30B3\u30FC\u30C9 ID \u30D1\u30E9\u30E1\u30FC\u30BF\u30FC",
@@ -4292,13 +4695,9 @@ var jaJPMetadataForms = {
4292
4695
  label: "\u57FA\u672C",
4293
4696
  description: "ID \u3068\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9\u3002"
4294
4697
  },
4295
- columns: {
4296
- label: "\u5217",
4297
- description: "\u30EC\u30DD\u30FC\u30C8\u51FA\u529B\u306B\u8868\u793A\u3059\u308B\u5217\u3002"
4298
- },
4299
- groupings: {
4300
- label: "\u30B0\u30EB\u30FC\u30D7\u5316",
4301
- description: "\u884C\uFF08matrix \u30EC\u30DD\u30FC\u30C8\u3067\u306F\u5217\u3082\uFF09\u306E\u30B0\u30EB\u30FC\u30D7\u5316\u65B9\u6CD5\u3002"
4698
+ dataset_binding: {
4699
+ label: "Dataset binding",
4700
+ description: "The semantic-layer dataset this report renders. Values are the dataset\u2019s measures; rows are its dimensions."
4302
4701
  },
4303
4702
  joined_blocks: {
4304
4703
  label: "\u7D50\u5408\u30D6\u30ED\u30C3\u30AF",
@@ -4324,33 +4723,37 @@ var jaJPMetadataForms = {
4324
4723
  description: {
4325
4724
  label: "\u8AAC\u660E"
4326
4725
  },
4327
- objectName: {
4328
- label: "\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u540D",
4329
- helpText: "\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8"
4330
- },
4331
4726
  type: {
4332
4727
  label: "\u578B",
4333
4728
  helpText: "\u30EC\u30DD\u30FC\u30C8\u7A2E\u5225: tabular/summary/matrix/joined"
4334
4729
  },
4730
+ dataset: {
4731
+ label: "Dataset",
4732
+ helpText: "Dataset to bind (measures/dimensions come from its semantic layer)"
4733
+ },
4734
+ values: {
4735
+ label: "Values",
4736
+ helpText: "Measure names (from the dataset) to display"
4737
+ },
4738
+ rows: {
4739
+ label: "Rows",
4740
+ helpText: "Dimension names (from the dataset) to group rows by"
4741
+ },
4335
4742
  columns: {
4336
4743
  label: "\u5217",
4337
4744
  helpText: "\u30EC\u30DD\u30FC\u30C8\u306B\u8868\u793A\u3059\u308B\u5217"
4338
4745
  },
4339
- groupingsDown: {
4340
- label: "\u7E26\u30B0\u30EB\u30FC\u30D7",
4341
- helpText: "\u884C\u30B0\u30EB\u30FC\u30D7\u5316\u30EC\u30D9\u30EB"
4342
- },
4343
- groupingsAcross: {
4344
- label: "\u6A2A\u30B0\u30EB\u30FC\u30D7",
4345
- helpText: "\u5217\u30B0\u30EB\u30FC\u30D7\u5316\u30EC\u30D9\u30EB\uFF08matrix \u306E\u307F\uFF09"
4746
+ drilldown: {
4747
+ label: "Drilldown",
4748
+ helpText: "Click an aggregated row/cell to open the underlying records"
4346
4749
  },
4347
4750
  blocks: {
4348
4751
  label: "\u30D6\u30ED\u30C3\u30AF",
4349
4752
  helpText: "\u8907\u6570\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u7D50\u5408\uFF08joined \u30EC\u30DD\u30FC\u30C8\u306E\u307F\uFF09"
4350
4753
  },
4351
- filter: {
4352
- label: "\u30D5\u30A3\u30EB\u30BF\u30FC",
4353
- helpText: "\u30EC\u30DD\u30FC\u30C8\u30EC\u30D9\u30EB\u306E\u30D5\u30A3\u30EB\u30BF\u30FC"
4754
+ runtimeFilter: {
4755
+ label: "Runtime Filter",
4756
+ helpText: "Render-time scope filter, ANDed at query time"
4354
4757
  },
4355
4758
  chart: {
4356
4759
  label: "\u30C1\u30E3\u30FC\u30C8",
@@ -4366,6 +4769,62 @@ var jaJPMetadataForms = {
4366
4769
  }
4367
4770
  }
4368
4771
  },
4772
+ dataset: {
4773
+ label: "Dataset",
4774
+ description: "Analytics semantic layer \u2014 dimensions & measures",
4775
+ sections: {
4776
+ basics: {
4777
+ label: "Basics",
4778
+ description: "Dataset identity."
4779
+ },
4780
+ source: {
4781
+ label: "Source",
4782
+ description: "The base object, the relationships to join, and the dataset\u2019s intrinsic scope. Joins are derived from the object graph \u2014 pick relationship (lookup / master_detail) names, never write an ON clause."
4783
+ },
4784
+ dimensions: {
4785
+ label: "Dimensions",
4786
+ description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
4787
+ },
4788
+ measures: {
4789
+ label: "Measures",
4790
+ description: "Aggregatable values defined once and referenced by name. A measure is sum/avg/count/\u2026 of a field; a derived measure combines other measures (ratio/sum/difference/product). Measure-scoped filters and derived ops are edited per-row in the dataset designer."
4791
+ }
4792
+ },
4793
+ fields: {
4794
+ name: {
4795
+ label: "Name",
4796
+ helpText: "snake_case unique identifier"
4797
+ },
4798
+ label: {
4799
+ label: "Label",
4800
+ helpText: "Display name"
4801
+ },
4802
+ description: {
4803
+ label: "Description",
4804
+ helpText: "What this dataset measures"
4805
+ },
4806
+ object: {
4807
+ label: "Object",
4808
+ helpText: "Base object \u2014 the FROM"
4809
+ },
4810
+ include: {
4811
+ label: "Include",
4812
+ helpText: 'Relationship (lookup / master_detail) field names to join \u2014 enables `relationship.field` dimensions/measures (e.g. include "account" \u2192 group by account.region)'
4813
+ },
4814
+ filter: {
4815
+ label: "Filter",
4816
+ helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
4817
+ },
4818
+ dimensions: {
4819
+ label: "Dimensions",
4820
+ helpText: "Each: name (referenced by presentations), field, type, and \u2014 for dates \u2014 a default bucketing granularity"
4821
+ },
4822
+ measures: {
4823
+ label: "Measures",
4824
+ helpText: "Each: name, aggregate, field (optional for count), display format/currency, and a \u201Ccertified\u201D governance flag"
4825
+ }
4826
+ }
4827
+ },
4369
4828
  flow: {
4370
4829
  label: "\u30D5\u30ED\u30FC",
4371
4830
  sections: {
@@ -4445,15 +4904,6 @@ var jaJPMetadataForms = {
4445
4904
  translation: {
4446
4905
  label: "\u7FFB\u8A33"
4447
4906
  },
4448
- router: {
4449
- label: "\u30EB\u30FC\u30BF\u30FC"
4450
- },
4451
- function: {
4452
- label: "\u95A2\u6570"
4453
- },
4454
- service: {
4455
- label: "\u30B5\u30FC\u30D3\u30B9"
4456
- },
4457
4907
  email_template: {
4458
4908
  label: "\u30E1\u30FC\u30EB\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8",
4459
4909
  sections: {
@@ -4534,6 +4984,14 @@ var jaJPMetadataForms = {
4534
4984
  }
4535
4985
  }
4536
4986
  },
4987
+ doc: {
4988
+ label: "Documentation",
4989
+ description: "Package documentation \u2014 flat Markdown items (ADR-0046)"
4990
+ },
4991
+ book: {
4992
+ label: "Documentation Book",
4993
+ description: "Documentation navigation spine \u2014 ordered groups with derived membership (ADR-0046 \xA76)"
4994
+ },
4537
4995
  permission: {
4538
4996
  label: "\u6A29\u9650\u30BB\u30C3\u30C8",
4539
4997
  sections: {
@@ -4589,67 +5047,12 @@ var jaJPMetadataForms = {
4589
5047
  }
4590
5048
  }
4591
5049
  },
4592
- profile: {
4593
- label: "\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB",
5050
+ position: {
5051
+ label: "\u30DD\u30B8\u30B7\u30E7\u30F3",
4594
5052
  sections: {
4595
- identity: {
4596
- label: "ID",
4597
- description: "\u6A29\u9650\u30BB\u30C3\u30C8\u306F\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u306B\u8FFD\u52A0\u30A2\u30AF\u30BB\u30B9\u6A29\u3092\u91CD\u306D\u308B\u3002\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u306F\u5404\u30E6\u30FC\u30B6\u30FC\u306B 1:1 \u3067\u5272\u308A\u5F53\u3066\u308B\u57FA\u672C\u30BB\u30C3\u30C8\u3002"
4598
- },
4599
- system_permissions: {
4600
- label: "\u30B7\u30B9\u30C6\u30E0\u6A29\u9650",
4601
- description: "\u7279\u5B9A\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306B\u7D10\u3065\u304B\u306A\u3044\u9AD8\u30EC\u30D9\u30EB\u6A5F\u80FD \u2014 \u4F8B: manage_users, view_audit_logs\u3002"
4602
- },
4603
- object_and_field_permissions: {
4604
- label: "\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3068\u30D5\u30A3\u30FC\u30EB\u30C9\u6A29\u9650",
4605
- description: "\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u5358\u4F4D\u306E CRUD + \u30D5\u30A3\u30FC\u30EB\u30C9\u5358\u4F4D\u306E FLS\u3002\u30DE\u30C8\u30EA\u30C3\u30AF\u30B9\u30A8\u30C7\u30A3\u30BF\u30FC\u3067\u7DE8\u96C6\u3001\u307E\u305F\u306F\u3053\u3053\u306B JSON \u3092\u8CBC\u308A\u4ED8\u3051\u3002"
4606
- },
4607
- tab_and_row_level_security: {
4608
- label: "\u30BF\u30D6\u3068\u884C\u30EC\u30D9\u30EB\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3",
4609
- description: "\u30BF\u30D6\u8868\u793A\u3001RLS \u30DD\u30EA\u30B7\u30FC\u3001\u8FF0\u8A9E\u8A55\u4FA1\u7528\u30AB\u30B9\u30BF\u30E0\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u5909\u6570\u3002"
4610
- }
4611
- },
4612
- fields: {
4613
- name: {
4614
- label: "\u540D\u524D",
4615
- helpText: "\u30DE\u30B7\u30F3\u540D\uFF08snake_case\uFF09"
4616
- },
4617
- label: {
4618
- label: "\u8868\u793A\u540D",
4619
- helpText: "\u7BA1\u7406\u8005\u5411\u3051\u8868\u793A\u30E9\u30D9\u30EB"
4620
- },
4621
- systemPermissions: {
4622
- label: "\u30B7\u30B9\u30C6\u30E0\u6A29\u9650",
4623
- helpText: "\u30B7\u30B9\u30C6\u30E0\u6A5F\u80FD\u30AD\u30FC\u306E\u30EA\u30B9\u30C8"
4624
- },
4625
- objects: {
4626
- label: "\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u6A29\u9650",
4627
- helpText: '\u4F8B: { "account": { allowRead: true, allowEdit: true, ... } }'
4628
- },
4629
- fields: {
4630
- label: "\u30D5\u30A3\u30FC\u30EB\u30C9",
4631
- helpText: '\u4F8B: { "account.amount": { readable: true, editable: false } }'
4632
- },
4633
- tabPermissions: {
4634
- label: "\u30BF\u30D6\u6A29\u9650",
4635
- helpText: '\u4F8B: { "app_crm": "visible", "app_admin": "hidden" }'
4636
- },
4637
- rowLevelSecurity: {
4638
- label: "\u884C\u30EC\u30D9\u30EB\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3",
4639
- helpText: "RLS \u30DD\u30EA\u30B7\u30FC\u306E\u914D\u5217\uFF08rls.zod.ts \u53C2\u7167\uFF09"
4640
- },
4641
- contextVariables: {
4642
- label: "\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u5909\u6570",
4643
- helpText: "RLS \u8FF0\u8A9E\u3067\u53C2\u7167\u3059\u308B\u30AB\u30B9\u30BF\u30E0\u5909\u6570"
4644
- }
4645
- }
4646
- },
4647
- role: {
4648
- label: "\u30ED\u30FC\u30EB",
4649
- sections: {
4650
- role: {
4651
- label: "\u30ED\u30FC\u30EB",
4652
- description: "\u30ED\u30FC\u30EB\u306F\u30EC\u30B3\u30FC\u30C9\u5171\u6709\u306B\u4F7F\u3046\u968E\u5C64\u3092\u69CB\u6210\uFF08sales VP \u2192 sales mgr \u2192 sales rep\uFF09\u3002\u6A29\u9650\u81EA\u4F53\u306F Permission Sets \u3068 Profiles \u306B\u5B58\u5728\u3002"
5053
+ position: {
5054
+ label: "\u30DD\u30B8\u30B7\u30E7\u30F3",
5055
+ description: "\u30DD\u30B8\u30B7\u30E7\u30F3\u306F\u6A29\u9650\u30BB\u30C3\u30C8\u3092\u307E\u3068\u3081\u3066\u5272\u308A\u5F53\u3066\u308B\u30D5\u30E9\u30C3\u30C8\u306A\u5358\u4F4D(\u4F8B: sales_rep\u3001sales_manager)\u3002\u80FD\u529B\u306F\u6A29\u9650\u30BB\u30C3\u30C8\u306B\u3001\u53EF\u8996\u7BC4\u56F2\u306E\u6DF1\u3055\u306F\u30D3\u30B8\u30CD\u30B9\u30E6\u30CB\u30C3\u30C8\u30C4\u30EA\u30FC\u306B\u3042\u308A\u307E\u3059\u3002"
4653
5056
  }
4654
5057
  },
4655
5058
  fields: {
@@ -4660,10 +5063,6 @@ var jaJPMetadataForms = {
4660
5063
  label: {
4661
5064
  label: "\u8868\u793A\u540D"
4662
5065
  },
4663
- parent: {
4664
- label: "\u89AA",
4665
- helpText: "\u89AA\u30ED\u30FC\u30EB\u306E\u30DE\u30B7\u30F3\u540D\uFF08Reports To\uFF09"
4666
- },
4667
5066
  description: {
4668
5067
  label: "\u8AAC\u660E"
4669
5068
  }
@@ -5153,6 +5552,70 @@ var esESMetadataForms = {
5153
5552
  datasource: {
5154
5553
  label: "Fuente de datos",
5155
5554
  helpText: 'ID de fuente de datos de destino (valor predeterminado: "default")'
5555
+ },
5556
+ lifecycle: {
5557
+ label: "Lifecycle",
5558
+ helpText: "Data lifecycle contract (ADR-0057): how long rows live and how space is reclaimed. Leave empty for permanent record semantics. Non-record classes require at least one bounding policy (retention, TTL, or rotation)."
5559
+ },
5560
+ "lifecycle.class": {
5561
+ label: "Class",
5562
+ helpText: "Persistence contract for the rows of this object"
5563
+ },
5564
+ "lifecycle.retention": {
5565
+ label: "Retention",
5566
+ helpText: "Age-based retention window"
5567
+ },
5568
+ "lifecycle.retention.maxAge": {
5569
+ label: "Max Age",
5570
+ helpText: 'Rows older than this (by created_at) are reaped. Duration literal: h/d/w/y, e.g. "30d"'
5571
+ },
5572
+ "lifecycle.ttl": {
5573
+ label: "Ttl",
5574
+ helpText: "Per-row TTL expiry"
5575
+ },
5576
+ "lifecycle.ttl.field": {
5577
+ label: "Field",
5578
+ helpText: "Timestamp field the TTL is measured from (e.g. expires_at)"
5579
+ },
5580
+ "lifecycle.ttl.expireAfter": {
5581
+ label: "Expire After",
5582
+ helpText: 'Rows expire this long after the field, e.g. "1d"'
5583
+ },
5584
+ "lifecycle.storage": {
5585
+ label: "Storage",
5586
+ helpText: "Physical rotation for high-frequency telemetry (SQLite: O(1) shard DROP)"
5587
+ },
5588
+ "lifecycle.storage.strategy": {
5589
+ label: "Strategy",
5590
+ helpText: "Storage strategy"
5591
+ },
5592
+ "lifecycle.storage.shards": {
5593
+ label: "Shards",
5594
+ helpText: "Shards retained; total window = shards \xD7 unit"
5595
+ },
5596
+ "lifecycle.storage.unit": {
5597
+ label: "Unit",
5598
+ helpText: "Time width of one shard"
5599
+ },
5600
+ "lifecycle.archive": {
5601
+ label: "Archive",
5602
+ helpText: "Cold-store hand-off (audit class). Rows are never hot-deleted before the archive copy succeeded."
5603
+ },
5604
+ "lifecycle.archive.after": {
5605
+ label: "After",
5606
+ helpText: "Archive rows older than this \u2014 must equal retention.maxAge"
5607
+ },
5608
+ "lifecycle.archive.to": {
5609
+ label: "To",
5610
+ helpText: "Target datasource name for cold storage"
5611
+ },
5612
+ "lifecycle.archive.keep": {
5613
+ label: "Keep",
5614
+ helpText: 'How long the archive keeps rows (empty = forever), e.g. "7y"'
5615
+ },
5616
+ "lifecycle.reclaim": {
5617
+ label: "Reclaim",
5618
+ helpText: "Reclaim driver space after sweeps (default on for non-record classes)"
5156
5619
  }
5157
5620
  }
5158
5621
  },
@@ -5261,10 +5724,6 @@ var esESMetadataForms = {
5261
5724
  label: "Operaciones de resumen",
5262
5725
  helpText: "Configuraci\xF3n de resumen roll-up (para relaciones padre-hijo)"
5263
5726
  },
5264
- cached: {
5265
- label: "En cach\xE9",
5266
- helpText: "Configuraci\xF3n de cach\xE9 para campos calculados"
5267
- },
5268
5727
  columnName: {
5269
5728
  label: "Nombre de columna",
5270
5729
  helpText: "Nombre de columna f\xEDsica en la base de datos (por defecto, el nombre del campo)"
@@ -5292,28 +5751,9 @@ var esESMetadataForms = {
5292
5751
  sortable: {
5293
5752
  label: "Ordenable",
5294
5753
  helpText: "Permite ordenar listas por este campo"
5295
- },
5296
- auditTrail: {
5297
- label: "Rastro de auditor\xEDa",
5298
- helpText: "Registra cambios detallados con usuario y marca temporal"
5299
- },
5300
- trackFeedHistory: {
5301
- label: "Historial de feed",
5302
- helpText: "Muestra cambios en el feed de actividad"
5303
- },
5304
- encryptionConfig: {
5305
- label: "Configuraci\xF3n de cifrado",
5306
- helpText: "Cifrado a nivel de campo (GDPR/HIPAA/PCI-DSS)"
5307
- },
5308
- maskingRule: {
5309
- label: "Regla de enmascaramiento",
5310
- helpText: "Reglas de enmascaramiento de datos para protecci\xF3n de PII"
5311
5754
  }
5312
5755
  }
5313
5756
  },
5314
- trigger: {
5315
- label: "Disparador"
5316
- },
5317
5757
  validation: {
5318
5758
  label: "Regla de validaci\xF3n"
5319
5759
  },
@@ -5390,12 +5830,36 @@ var esESMetadataForms = {
5390
5830
  onError: {
5391
5831
  label: "Al error"
5392
5832
  },
5833
+ timeout: {
5834
+ label: "Timeout",
5835
+ helpText: "Abort the hook after N milliseconds"
5836
+ },
5393
5837
  condition: {
5394
5838
  label: "Condici\xF3n",
5395
5839
  helpText: "F\xF3rmula opcional \u2014 omite el hook cuando eval\xFAa a false"
5840
+ },
5841
+ retryPolicy: {
5842
+ label: "Retry Policy",
5843
+ helpText: "Retry on failure \u2014 most useful for async hooks"
5844
+ },
5845
+ "retryPolicy.maxRetries": {
5846
+ label: "Max Retries",
5847
+ helpText: "Maximum retry attempts"
5848
+ },
5849
+ "retryPolicy.backoffMs": {
5850
+ label: "Backoff Ms",
5851
+ helpText: "Delay between retries (ms)"
5396
5852
  }
5397
5853
  }
5398
5854
  },
5855
+ seed: {
5856
+ label: "Seed Data",
5857
+ description: "Fixture / initialization data applied on publish"
5858
+ },
5859
+ mapping: {
5860
+ label: "Import Mapping",
5861
+ description: "Reusable import/export field mapping (rename + transforms), referenced by name at import"
5862
+ },
5399
5863
  view: {
5400
5864
  label: "Vista",
5401
5865
  sections: {
@@ -5567,6 +6031,10 @@ var esESMetadataForms = {
5567
6031
  label: "Dise\xF1o",
5568
6032
  description: "Regiones de p\xE1gina y componentes colocados en ellas."
5569
6033
  },
6034
+ interface: {
6035
+ label: "Interface (list pages)",
6036
+ description: "Interface mode (Airtable parity): the page defines its own data surface directly \u2014 columns, filters, visualizations and toolbar \u2014 no inheriting from a separate view."
6037
+ },
5570
6038
  advanced: {
5571
6039
  label: "Avanzado",
5572
6040
  description: "Activaci\xF3n, audiencia y accesibilidad."
@@ -5609,6 +6077,58 @@ var esESMetadataForms = {
5609
6077
  label: "Regiones",
5610
6078
  helpText: "Regiones de dise\xF1o (header, main, sidebar, footer) con componentes"
5611
6079
  },
6080
+ interfaceConfig: {
6081
+ label: "Interface Config",
6082
+ helpText: "The page IS the view: source picks the object, columns/filterBy are defined directly here; appearance.allowedVisualizations whitelists renderers (one entry = locked); userActions toggles the toolbar."
6083
+ },
6084
+ "interfaceConfig.source": {
6085
+ label: "Source",
6086
+ helpText: "Object this page reads from"
6087
+ },
6088
+ "interfaceConfig.columns": {
6089
+ label: "Columns",
6090
+ helpText: "Columns to show \u2014 defined directly on the page (blank = all object fields)"
6091
+ },
6092
+ "interfaceConfig.filterBy": {
6093
+ label: "Filter By",
6094
+ helpText: "Always-on base filter for the page \u2014 same visual builder as the list toolbar."
6095
+ },
6096
+ "interfaceConfig.levels": {
6097
+ label: "Levels",
6098
+ helpText: "Hierarchy levels to display (tree-like sources)"
6099
+ },
6100
+ "interfaceConfig.appearance": {
6101
+ label: "Appearance",
6102
+ helpText: "Allowed visualizations (Grid / Kanban / Calendar / \u2026) and description visibility"
6103
+ },
6104
+ "interfaceConfig.userFilters": {
6105
+ label: "User Filters",
6106
+ helpText: "End-user filter bar: None (no bar) / Tabs (named presets) / Dropdown (per-field). None removes the config."
6107
+ },
6108
+ "interfaceConfig.userActions": {
6109
+ label: "User Actions",
6110
+ helpText: "Toolbar toggles (search, sort, filter, row height)"
6111
+ },
6112
+ "interfaceConfig.addRecord": {
6113
+ label: "Add Record",
6114
+ helpText: "Add-record entry point"
6115
+ },
6116
+ "interfaceConfig.buttons": {
6117
+ label: "Buttons",
6118
+ helpText: "Toolbar buttons \u2014 pick from this object's actions"
6119
+ },
6120
+ "interfaceConfig.recordAction": {
6121
+ label: "Record Action",
6122
+ helpText: "How clicking a record opens its detail"
6123
+ },
6124
+ "interfaceConfig.showRecordCount": {
6125
+ label: "Show Record Count",
6126
+ helpText: "Show the record count bar"
6127
+ },
6128
+ "interfaceConfig.allowPrinting": {
6129
+ label: "Allow Printing",
6130
+ helpText: "Allow users to print this page"
6131
+ },
5612
6132
  isDefault: {
5613
6133
  label: "Predeterminado",
5614
6134
  helpText: "Establece como p\xE1gina predeterminada para este tipo de p\xE1gina"
@@ -5857,6 +6377,22 @@ var esESMetadataForms = {
5857
6377
  label: "Cuerpo",
5858
6378
  helpText: "C\xF3digo JavaScript que ejecutar"
5859
6379
  },
6380
+ "body.language": {
6381
+ label: "Language",
6382
+ helpText: "expression = pure formula; js = sandboxed JavaScript"
6383
+ },
6384
+ "body.source": {
6385
+ label: "Source",
6386
+ helpText: "Function body source \u2014 no top-level imports"
6387
+ },
6388
+ "body.capabilities": {
6389
+ label: "Capabilities",
6390
+ helpText: "Allowed ctx APIs (api.read, api.write, crypto.uuid, log, \u2026)"
6391
+ },
6392
+ "body.timeoutMs": {
6393
+ label: "Timeout Ms",
6394
+ helpText: "Per-invocation timeout (ms)"
6395
+ },
5860
6396
  params: {
5861
6397
  label: "Par\xE1metros",
5862
6398
  helpText: "Par\xE1metros de entrada de usuario (muestra el formulario antes de ejecutar)"
@@ -5897,9 +6433,9 @@ var esESMetadataForms = {
5897
6433
  label: "Acci\xF3n masiva",
5898
6434
  helpText: "Permite aplicar a varios registros seleccionados"
5899
6435
  },
5900
- aiExposed: {
5901
- label: "Expuesto a IA",
5902
- helpText: "Permite que agentes de IA llamen a esta acci\xF3n"
6436
+ ai: {
6437
+ label: "Ai",
6438
+ helpText: "AI exposure (opt-in): set ai.exposed=true and write ai.description (\u226540 chars) to make this callable by agents."
5903
6439
  },
5904
6440
  recordIdParam: {
5905
6441
  label: "Par\xE1metro de ID de registro",
@@ -5922,13 +6458,9 @@ var esESMetadataForms = {
5922
6458
  label: "Aspectos b\xE1sicos",
5923
6459
  description: "Identidad y fuente de datos."
5924
6460
  },
5925
- columns: {
5926
- label: "Columnas",
5927
- description: "Columnas mostradas en la salida del informe."
5928
- },
5929
- groupings: {
5930
- label: "Agrupaciones",
5931
- description: "C\xF3mo se agrupan las filas (y columnas, para informes matrix)."
6461
+ dataset_binding: {
6462
+ label: "Dataset binding",
6463
+ description: "The semantic-layer dataset this report renders. Values are the dataset\u2019s measures; rows are its dimensions."
5932
6464
  },
5933
6465
  joined_blocks: {
5934
6466
  label: "Bloques unidos",
@@ -5954,33 +6486,37 @@ var esESMetadataForms = {
5954
6486
  description: {
5955
6487
  label: "Descripci\xF3n"
5956
6488
  },
5957
- objectName: {
5958
- label: "Nombre de objeto",
5959
- helpText: "Objeto de fuente de datos"
5960
- },
5961
6489
  type: {
5962
6490
  label: "Tipo",
5963
6491
  helpText: "Tipo de informe: tabular/summary/matrix/joined"
5964
6492
  },
6493
+ dataset: {
6494
+ label: "Dataset",
6495
+ helpText: "Dataset to bind (measures/dimensions come from its semantic layer)"
6496
+ },
6497
+ values: {
6498
+ label: "Values",
6499
+ helpText: "Measure names (from the dataset) to display"
6500
+ },
6501
+ rows: {
6502
+ label: "Rows",
6503
+ helpText: "Dimension names (from the dataset) to group rows by"
6504
+ },
5965
6505
  columns: {
5966
6506
  label: "Columnas",
5967
6507
  helpText: "Columnas que mostrar en el informe"
5968
6508
  },
5969
- groupingsDown: {
5970
- label: "Agrupaciones verticales",
5971
- helpText: "Niveles de agrupaci\xF3n de filas"
5972
- },
5973
- groupingsAcross: {
5974
- label: "Agrupaciones horizontales",
5975
- helpText: "Niveles de agrupaci\xF3n de columnas (solo matrix)"
6509
+ drilldown: {
6510
+ label: "Drilldown",
6511
+ helpText: "Click an aggregated row/cell to open the underlying records"
5976
6512
  },
5977
6513
  blocks: {
5978
6514
  label: "Bloques",
5979
6515
  helpText: "Une varios objetos (solo informe joined)"
5980
6516
  },
5981
- filter: {
5982
- label: "Filtro",
5983
- helpText: "Filtros a nivel de informe"
6517
+ runtimeFilter: {
6518
+ label: "Runtime Filter",
6519
+ helpText: "Render-time scope filter, ANDed at query time"
5984
6520
  },
5985
6521
  chart: {
5986
6522
  label: "Gr\xE1fico",
@@ -5996,6 +6532,62 @@ var esESMetadataForms = {
5996
6532
  }
5997
6533
  }
5998
6534
  },
6535
+ dataset: {
6536
+ label: "Dataset",
6537
+ description: "Analytics semantic layer \u2014 dimensions & measures",
6538
+ sections: {
6539
+ basics: {
6540
+ label: "Basics",
6541
+ description: "Dataset identity."
6542
+ },
6543
+ source: {
6544
+ label: "Source",
6545
+ description: "The base object, the relationships to join, and the dataset\u2019s intrinsic scope. Joins are derived from the object graph \u2014 pick relationship (lookup / master_detail) names, never write an ON clause."
6546
+ },
6547
+ dimensions: {
6548
+ label: "Dimensions",
6549
+ description: "Groupable axes. Use a base field, or `relationship.field` (e.g. account.region) for a relationship included above."
6550
+ },
6551
+ measures: {
6552
+ label: "Measures",
6553
+ description: "Aggregatable values defined once and referenced by name. A measure is sum/avg/count/\u2026 of a field; a derived measure combines other measures (ratio/sum/difference/product). Measure-scoped filters and derived ops are edited per-row in the dataset designer."
6554
+ }
6555
+ },
6556
+ fields: {
6557
+ name: {
6558
+ label: "Name",
6559
+ helpText: "snake_case unique identifier"
6560
+ },
6561
+ label: {
6562
+ label: "Label",
6563
+ helpText: "Display name"
6564
+ },
6565
+ description: {
6566
+ label: "Description",
6567
+ helpText: "What this dataset measures"
6568
+ },
6569
+ object: {
6570
+ label: "Object",
6571
+ helpText: "Base object \u2014 the FROM"
6572
+ },
6573
+ include: {
6574
+ label: "Include",
6575
+ helpText: 'Relationship (lookup / master_detail) field names to join \u2014 enables `relationship.field` dimensions/measures (e.g. include "account" \u2192 group by account.region)'
6576
+ },
6577
+ filter: {
6578
+ label: "Filter",
6579
+ helpText: "Intrinsic scope filter (e.g. exclude soft-deleted records), ANDed into every query"
6580
+ },
6581
+ dimensions: {
6582
+ label: "Dimensions",
6583
+ helpText: "Each: name (referenced by presentations), field, type, and \u2014 for dates \u2014 a default bucketing granularity"
6584
+ },
6585
+ measures: {
6586
+ label: "Measures",
6587
+ helpText: "Each: name, aggregate, field (optional for count), display format/currency, and a \u201Ccertified\u201D governance flag"
6588
+ }
6589
+ }
6590
+ },
5999
6591
  flow: {
6000
6592
  label: "Flujo",
6001
6593
  sections: {
@@ -6075,15 +6667,6 @@ var esESMetadataForms = {
6075
6667
  translation: {
6076
6668
  label: "Traducci\xF3n"
6077
6669
  },
6078
- router: {
6079
- label: "Enrutador"
6080
- },
6081
- function: {
6082
- label: "Funci\xF3n"
6083
- },
6084
- service: {
6085
- label: "Servicio"
6086
- },
6087
6670
  email_template: {
6088
6671
  label: "Plantilla de email",
6089
6672
  sections: {
@@ -6164,6 +6747,14 @@ var esESMetadataForms = {
6164
6747
  }
6165
6748
  }
6166
6749
  },
6750
+ doc: {
6751
+ label: "Documentation",
6752
+ description: "Package documentation \u2014 flat Markdown items (ADR-0046)"
6753
+ },
6754
+ book: {
6755
+ label: "Documentation Book",
6756
+ description: "Documentation navigation spine \u2014 ordered groups with derived membership (ADR-0046 \xA76)"
6757
+ },
6167
6758
  permission: {
6168
6759
  label: "Conjunto de permisos",
6169
6760
  sections: {
@@ -6219,67 +6810,12 @@ var esESMetadataForms = {
6219
6810
  }
6220
6811
  }
6221
6812
  },
6222
- profile: {
6223
- label: "Perfil",
6813
+ position: {
6814
+ label: "Posici\xF3n",
6224
6815
  sections: {
6225
- identity: {
6226
- label: "Identidad",
6227
- description: "Los conjuntos de permisos se apilan sobre un perfil para conceder acceso adicional. Los perfiles son el conjunto base asignado 1:1 a cada usuario."
6228
- },
6229
- system_permissions: {
6230
- label: "Permisos del sistema",
6231
- description: "Capacidades de alto nivel no vinculadas a un objeto espec\xEDfico \u2014 p. ej. manage_users, view_audit_logs."
6232
- },
6233
- object_and_field_permissions: {
6234
- label: "Permisos de objeto y campo",
6235
- description: "CRUD por objeto + FLS por campo. Edita mediante el editor matricial o pega JSON aqu\xED."
6236
- },
6237
- tab_and_row_level_security: {
6238
- label: "Pesta\xF1a y seguridad a nivel de fila",
6239
- description: "Visibilidad de pesta\xF1as, pol\xEDticas RLS y variables de contexto personalizadas para evaluar predicados."
6240
- }
6241
- },
6242
- fields: {
6243
- name: {
6244
- label: "Nombre",
6245
- helpText: "Nombre de m\xE1quina (snake_case)"
6246
- },
6247
- label: {
6248
- label: "Etiqueta",
6249
- helpText: "Etiqueta mostrada para administradores"
6250
- },
6251
- systemPermissions: {
6252
- label: "Permisos del sistema",
6253
- helpText: "Lista de claves de capacidades del sistema"
6254
- },
6255
- objects: {
6256
- label: "Permisos de objeto",
6257
- helpText: 'Ejemplo: { "account": { allowRead: true, allowEdit: true, ... } }'
6258
- },
6259
- fields: {
6260
- label: "Campos",
6261
- helpText: 'Ejemplo: { "account.amount": { readable: true, editable: false } }'
6262
- },
6263
- tabPermissions: {
6264
- label: "Permisos de pesta\xF1a",
6265
- helpText: 'Ejemplo: { "app_crm": "visible", "app_admin": "hidden" }'
6266
- },
6267
- rowLevelSecurity: {
6268
- label: "Seguridad a nivel de fila",
6269
- helpText: "Array de pol\xEDticas RLS (ver rls.zod.ts)"
6270
- },
6271
- contextVariables: {
6272
- label: "Variables de contexto",
6273
- helpText: "Variables personalizadas referenciadas en predicados RLS"
6274
- }
6275
- }
6276
- },
6277
- role: {
6278
- label: "Rol",
6279
- sections: {
6280
- role: {
6281
- label: "Rol",
6282
- description: "Los roles componen una jerarqu\xEDa usada para compartir registros (sales VP \u2192 sales mgr \u2192 sales rep). Los permisos en s\xED residen en Permission Sets y Profiles."
6816
+ position: {
6817
+ label: "Posici\xF3n",
6818
+ description: "Una posici\xF3n es un conjunto plano y asignable de permission sets (p. ej. sales_rep, sales_manager). La capacidad reside en los permission sets; la profundidad de visibilidad en el \xE1rbol de unidades de negocio."
6283
6819
  }
6284
6820
  },
6285
6821
  fields: {
@@ -6290,10 +6826,6 @@ var esESMetadataForms = {
6290
6826
  label: {
6291
6827
  label: "Etiqueta"
6292
6828
  },
6293
- parent: {
6294
- label: "Padre",
6295
- helpText: "Nombre de m\xE1quina del rol padre (Reports To)"
6296
- },
6297
6829
  description: {
6298
6830
  label: "Descripci\xF3n"
6299
6831
  }