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