pi-apexlang 0.2.2 → 0.4.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 (239) hide show
  1. package/README.md +22 -5
  2. package/THIRD_PARTY_NOTICES.md +2 -2
  3. package/UPSTREAM.json +2 -2
  4. package/docs/assets/overview.en.png +0 -0
  5. package/docs/assets/overview.en.svg +89 -0
  6. package/docs/assets/overview.uk.png +0 -0
  7. package/docs/assets/overview.uk.svg +89 -0
  8. package/docs/en/README.md +41 -0
  9. package/docs/en/architecture.md +73 -0
  10. package/docs/en/getting-started.md +77 -0
  11. package/docs/en/maintenance.md +83 -0
  12. package/docs/en/tool-reference.md +85 -0
  13. package/docs/uk/README.md +41 -0
  14. package/docs/uk/architecture.md +73 -0
  15. package/docs/uk/getting-started.md +77 -0
  16. package/docs/uk/maintenance.md +83 -0
  17. package/docs/uk/tool-reference.md +85 -0
  18. package/extensions/apexlang/index.ts +19 -10
  19. package/extensions/lib/apexlang-cli.d.mts +1 -2
  20. package/extensions/lib/apexlang-cli.mjs +18 -13
  21. package/extensions/lib/apexlang-local-validate.mjs +83 -0
  22. package/extensions/lib/apexlang-local-validator.py +116 -0
  23. package/extensions/lib/apexlang-runtime-validate.mjs +76 -0
  24. package/package.json +2 -1
  25. package/skills/apexlang/APEXlang Skills and Workflows.md +325 -0
  26. package/skills/apexlang/README.md +6 -6
  27. package/skills/apexlang/RELEASE-NOTES.md +2 -2
  28. package/skills/apexlang/SKILL.md +24 -19
  29. package/skills/apexlang/agents/openai.yaml +4 -3
  30. package/skills/apexlang/assets/apex-generation/components.registry.json +1001 -16
  31. package/skills/apexlang/assets/apexlang/domains-catalog.json +6 -1
  32. package/skills/apexlang/assets/component-attributes.json +1924 -180
  33. package/skills/apexlang/assets/component-policies.json +19 -10
  34. package/skills/apexlang/assets/contracts/grammar-semantic-rules.json +134 -0
  35. package/skills/apexlang/assets/contracts/package-layers.json +56 -0
  36. package/skills/apexlang/assets/contracts/page-construction-packs.json +154 -0
  37. package/skills/apexlang/assets/contracts/page-patterns.json +119 -0
  38. package/skills/apexlang/assets/grammar/apexlang.ebnf +11743 -0
  39. package/skills/apexlang/assets/indexes/font-apex-icon-index.json +1699 -0
  40. package/skills/apexlang/assets/routing-catalog-main.json +11 -10
  41. package/skills/apexlang/assets/routing-load-policy.json +35 -9
  42. package/skills/apexlang/assets/rules-mapping.json +110 -2
  43. package/skills/apexlang/assets/rules.catalog.json +1298 -0
  44. package/skills/apexlang/assets/validator-fix-recipes.json +372 -17
  45. package/skills/apexlang/assets/workspace-intelligence.json +7 -10
  46. package/skills/apexlang/manifest.json +268 -12
  47. package/skills/apexlang/references/domains/README.md +1 -1
  48. package/skills/apexlang/references/domains/page-components/buttons.md +2 -2
  49. package/skills/apexlang/references/domains/page-components/page-items.md +3 -3
  50. package/skills/apexlang/references/domains/page-components/regions/region-display-selector/workflow-region-display-selector.md +69 -0
  51. package/skills/apexlang/references/domains/page-components/regions.md +1 -0
  52. package/skills/apexlang/references/domains/template-components/comments.md +61 -0
  53. package/skills/apexlang/references/domains/template-components/registry.md +2 -0
  54. package/skills/apexlang/references/domains/template-components/templates.md +47 -0
  55. package/skills/apexlang/references/domains/template-components/timeline.md +51 -0
  56. package/skills/apexlang/references/ops/one-message-router-contract.md +2 -2
  57. package/skills/apexlang/references/ops/runtime-gates/01-direct-sqlcl-import.md +1 -1
  58. package/skills/apexlang/references/ops/runtime-gates/02-direct-sqlcl-validate-gate.md +1 -1
  59. package/skills/apexlang/references/ops/runtime-gates.md +17 -16
  60. package/skills/apexlang/references/ops/sqlcl-agents/00-connection-gate.md +7 -7
  61. package/skills/apexlang/references/ops/sqlcl.md +7 -8
  62. package/skills/apexlang/references/policies/compiler-prop-map.md +6 -4
  63. package/skills/apexlang/references/policies/governance/00-governance.md +2 -2
  64. package/skills/apexlang/references/policies/memory-bank/00-guard/ai.guard.md +126 -922
  65. package/skills/apexlang/references/policies/memory-bank/20-data/apex.logic.md +3 -3
  66. package/skills/apexlang/references/policies/memory-bank/20-data/db.connection.md +9 -11
  67. package/skills/apexlang/references/policies/memory-bank/30-pages/apex.cards-page.md +95 -0
  68. package/skills/apexlang/references/policies/memory-bank/30-pages/apex.page.md +2 -2
  69. package/skills/apexlang/references/policies/memory-bank/30-pages/apex.smart-filter-search.md +145 -74
  70. package/skills/apexlang/references/policies/memory-bank/40-components/apex.region-interactions.md +9 -2
  71. package/skills/apexlang/references/policies/memory-bank/40-components/apex.region-media.md +6 -5
  72. package/skills/apexlang/references/policies/memory-bank/systemPatterns.md +9 -1
  73. package/skills/apexlang/references/workflows/apex-generation/agents/20-agent-draft.md +51 -232
  74. package/skills/apexlang/references/workflows/apex-generation/agents/30-agent-critique.md +49 -449
  75. package/skills/apexlang/references/workflows/apex-generation/agents/40-agent-revision.md +38 -238
  76. package/skills/apexlang/references/workflows/apex-generation/nlu/nlu-routing-test-matrix.md +8 -2
  77. package/skills/apexlang/references/workflows/apex-generation/nlu/nlu-routing-validation-notes.md +19 -3
  78. package/skills/apexlang/references/workflows/apex-generation/registry.md +15 -1
  79. package/skills/apexlang/references/workflows/apex-generation/templates.md +1 -1
  80. package/skills/apexlang/references/workflows/apex-generation.md +1 -1
  81. package/skills/apexlang/references/workflows/apexlang/apexlang-execution-model.md +5 -5
  82. package/skills/apexlang/references/workflows/apexlang/prompt-contracts.md +81 -10
  83. package/skills/apexlang/references/workflows/apexlang/workflow-create-app-from-fr-and-model.md +18 -7
  84. package/skills/apexlang/release-notes.json +156 -0
  85. package/skills/apexlang/runtime/grammar_contract.mjs +1166 -0
  86. package/skills/apexlang/runtime/internal/python/format_apexlang.py +210 -0
  87. package/skills/apexlang/runtime/internal/python/validate_apexlang.py +14142 -5843
  88. package/skills/apexlang/runtime/internal/python/validator_common.py +2 -0
  89. package/skills/apexlang/runtime/lib/catalogs.mjs +1026 -0
  90. package/skills/apexlang/runtime/lib/common.mjs +35 -0
  91. package/skills/apexlang/runtime/runtime.bundle.mjs +457 -57
  92. package/skills/apexlang/templates/items/combobox/combobox.explicit-defaults.md +1 -1
  93. package/skills/apexlang/templates/items/date-picker/date-picker._common.md +1 -1
  94. package/skills/apexlang/templates/items/date-picker/date-picker.explicit-defaults.md +1 -1
  95. package/skills/apexlang/templates/items/file-upload/file-upload._common.md +30 -24
  96. package/skills/apexlang/templates/items/file-upload/file-upload.compact-template.md +6 -0
  97. package/skills/apexlang/templates/items/file-upload/file-upload.explicit-defaults.md +23 -8
  98. package/skills/apexlang/templates/items/file-upload/file-upload.minimal.md +6 -0
  99. package/skills/apexlang/templates/items/hidden-item/hidden-item._common.md +1 -1
  100. package/skills/apexlang/templates/items/hidden-item/hidden-item.explicit-defaults.md +1 -1
  101. package/skills/apexlang/templates/items/items._common.md +3 -2
  102. package/skills/apexlang/templates/items/list-manager/list-manager.explicit-defaults.md +1 -1
  103. package/skills/apexlang/templates/items/markdown-editor/markdown-editor._common.md +1 -1
  104. package/skills/apexlang/templates/items/markdown-editor/markdown-editor.explicit-defaults.md +1 -1
  105. package/skills/apexlang/templates/items/number-field/number-field._common.md +8 -6
  106. package/skills/apexlang/templates/items/number-field/number-field.explicit-defaults.md +12 -2
  107. package/skills/apexlang/templates/items/popup-lov/popup-lov.explicit-defaults.md +1 -1
  108. package/skills/apexlang/templates/items/rich-text-editor/rich-text-editor._common.md +1 -1
  109. package/skills/apexlang/templates/items/rich-text-editor/rich-text-editor.explicit-defaults.md +1 -1
  110. package/skills/apexlang/templates/items/select-many/standard.md +1 -1
  111. package/skills/apexlang/templates/items/shuttle/shuttle.explicit-defaults.md +1 -1
  112. package/skills/apexlang/templates/items/switch/switch._common.md +8 -8
  113. package/skills/apexlang/templates/items/switch/switch.explicit-defaults.md +1 -1
  114. package/skills/apexlang/templates/items/text-area/text-area._common.md +2 -3
  115. package/skills/apexlang/templates/items/text-area/text-area.explicit-defaults.md +1 -1
  116. package/skills/apexlang/templates/items/text-area/text-area.required-length.md +1 -3
  117. package/skills/apexlang/templates/items/text-autocomplete/text-autocomplete.explicit-defaults.md +1 -1
  118. package/skills/apexlang/templates/items/text-autocomplete/text-autocomplete.required-length.md +1 -3
  119. package/skills/apexlang/templates/items/text-field/text-field._common.md +2 -3
  120. package/skills/apexlang/templates/items/text-field/text-field.explicit-defaults.md +1 -1
  121. package/skills/apexlang/templates/items/text-field/text-field.required-length.md +1 -3
  122. package/skills/apexlang/templates/page-examples/faceted-search/faceted-search.example.md +0 -5
  123. package/skills/apexlang/templates/page-examples/form-page/form-page.example.md +0 -9
  124. package/skills/apexlang/templates/page-examples/interactive-report-page/interactive-report-page.example.md +2 -2
  125. package/skills/apexlang/templates/page-examples/login-page/login-page.example.md +0 -8
  126. package/skills/apexlang/templates/page-examples/task-definition-initiated-tasks-page/task-definition-initiated-tasks-page.example.md +7 -17
  127. package/skills/apexlang/templates/page-examples/task-definition-my-tasks-page/task-definition-my-tasks-page.example.md +7 -65
  128. package/skills/apexlang/templates/page-examples/task-definition-task-details/task-definition-task-details.example.md +38 -201
  129. package/skills/apexlang/templates/region-components/calendar/calendar.custom-styling.md +3 -1
  130. package/skills/apexlang/templates/region-components/calendar/calendar.faceted-search.md +3 -2
  131. package/skills/apexlang/templates/region-components/cards/README.md +12 -4
  132. package/skills/apexlang/templates/region-components/cards/cards._common.md +176 -37
  133. package/skills/apexlang/templates/region-components/cards/cards._index.md +2 -1
  134. package/skills/apexlang/templates/region-components/cards/cards.refresh-after-dialog.md +46 -0
  135. package/skills/apexlang/templates/region-components/cards/cards.refresh-on-change.md +58 -0
  136. package/skills/apexlang/templates/region-components/cards/cards.rest-source.md +54 -18
  137. package/skills/apexlang/templates/region-components/cards/cards.standard.md +37 -21
  138. package/skills/apexlang/templates/region-components/chart/chart._series._common.md +1 -4
  139. package/skills/apexlang/templates/region-components/chart/chart.pie.md +6 -2
  140. package/skills/apexlang/templates/region-components/chart/chart.status-meter-gauge.md +1 -1
  141. package/skills/apexlang/templates/region-components/chart/chart.stock.md +2 -0
  142. package/skills/apexlang/templates/region-components/chart/features/chart.feature-chart-links.md +9 -7
  143. package/skills/apexlang/templates/region-components/faceted-search/faceted-search._common.md +1 -14
  144. package/skills/apexlang/templates/region-components/form/form._items._common.md +1 -5
  145. package/skills/apexlang/templates/region-components/interactive-report/interactive-report._columns._common.md +2 -6
  146. package/skills/apexlang/templates/region-components/interactive-report/interactive-report.page-header-actions.md +1 -7
  147. package/skills/apexlang/templates/region-components/list/README.md +1 -1
  148. package/skills/apexlang/templates/region-components/list/list._common.md +1 -1
  149. package/skills/apexlang/templates/region-components/map/map.backgrounds.md +12 -10
  150. package/skills/apexlang/templates/region-components/map/map.layer.extruded-polygons.md +16 -12
  151. package/skills/apexlang/templates/region-components/map/map.layer.heat-map.md +10 -7
  152. package/skills/apexlang/templates/region-components/map/map.layer.lines.md +10 -8
  153. package/skills/apexlang/templates/region-components/map/map.layer.polygons.md +21 -18
  154. package/skills/apexlang/templates/region-components/map/map.region.background-custom.md +25 -19
  155. package/skills/apexlang/templates/region-components/map/map.region.background-shared.md +19 -13
  156. package/skills/apexlang/templates/region-components/map/map.region.bbox-sql.md +13 -13
  157. package/skills/apexlang/templates/region-components/map/map.region.bbox-static.md +2 -2
  158. package/skills/apexlang/templates/region-components/map/map.region.browser-location.md +3 -7
  159. package/skills/apexlang/templates/region-components/map/map.region.init-position-sql.md +7 -7
  160. package/skills/apexlang/templates/region-components/region-display-selector/README.md +5 -2
  161. package/skills/apexlang/templates/region-components/region-display-selector/region-display-selector._common.md +60 -7
  162. package/skills/apexlang/templates/region-components/region-display-selector/region-display-selector._index.md +4 -1
  163. package/skills/apexlang/templates/region-components/region-display-selector/region-display-selector.permutations.md +55 -0
  164. package/skills/apexlang/templates/region-components/region-display-selector/region-display-selector.standard.md +91 -5
  165. package/skills/apexlang/templates/region-components/smart-filter-search/README.md +6 -2
  166. package/skills/apexlang/templates/region-components/smart-filter-search/smart-filter-search._common.md +107 -46
  167. package/skills/apexlang/templates/region-components/smart-filter-search/smart-filter-search._index.md +4 -3
  168. package/skills/apexlang/templates/region-components/smart-filter-search/smart-filter-search.standard.md +33 -17
  169. package/skills/apexlang/templates/shared-components/component-settings/component-settings._common.md +1 -0
  170. package/skills/apexlang/templates/shared-components/component-settings.example.md +1 -0
  171. package/skills/apexlang/templates/shared-components/email-templates.example.md +1 -1
  172. package/skills/apexlang/templates/shared-components/rest-data-sources/example_rest_data_source.example.md +40 -46
  173. package/skills/apexlang/templates/shared-components/task-definitions/action-task.example.md +2 -30
  174. package/skills/apexlang/templates/shared-components/task-definitions/approve-request.example.md +3 -31
  175. package/skills/apexlang/templates/template-components/README.md +27 -15
  176. package/skills/apexlang/templates/template-components/avatar/README.md +56 -0
  177. package/skills/apexlang/templates/template-components/avatar/avatar._common.md +149 -0
  178. package/skills/apexlang/templates/template-components/avatar/avatar._index.md +42 -0
  179. package/skills/apexlang/templates/template-components/{avatar._template_options.md → avatar/avatar._template_options.md} +1 -1
  180. package/skills/apexlang/templates/template-components/avatar/avatar.report-icon.md +48 -0
  181. package/skills/apexlang/templates/template-components/avatar/avatar.report-image-url-column.md +62 -0
  182. package/skills/apexlang/templates/template-components/avatar/avatar.report-initials.md +54 -0
  183. package/skills/apexlang/templates/template-components/badge/README.md +38 -0
  184. package/skills/apexlang/templates/template-components/badge/badge._common.md +183 -0
  185. package/skills/apexlang/templates/template-components/badge/badge._index.md +20 -0
  186. package/skills/apexlang/templates/template-components/badge/badge.report-link.md +66 -0
  187. package/skills/apexlang/templates/template-components/badge/badge.report-minimal.md +76 -0
  188. package/skills/apexlang/templates/template-components/comments/README.md +20 -0
  189. package/skills/apexlang/templates/template-components/comments/comments._common.md +43 -0
  190. package/skills/apexlang/templates/template-components/comments/comments._index.md +25 -0
  191. package/skills/apexlang/templates/template-components/{comments._template_options.md → comments/comments._template_options.md} +2 -1
  192. package/skills/apexlang/templates/template-components/comments/comments.apex-task-comments.md +77 -0
  193. package/skills/apexlang/templates/template-components/comments/comments.partial-column.md +120 -0
  194. package/skills/apexlang/templates/template-components/comments/comments.permutations.md +425 -0
  195. package/skills/apexlang/templates/template-components/content-row/README.md +1 -1
  196. package/skills/apexlang/templates/template-components/content-row/content-row._common.md +1 -1
  197. package/skills/apexlang/templates/template-components/content-row/content-row._index.md +1 -1
  198. package/skills/apexlang/templates/template-components/content-row/content-row._template_options.md +1 -1
  199. package/skills/apexlang/templates/template-components/flexbox-container/README.md +9 -0
  200. package/skills/apexlang/templates/template-components/flexbox-container/flexbox-container._index.md +13 -0
  201. package/skills/apexlang/templates/template-components/media-list/README.md +100 -0
  202. package/skills/apexlang/templates/template-components/media-list/media-list._common.md +174 -0
  203. package/skills/apexlang/templates/template-components/media-list/media-list._index.md +50 -0
  204. package/skills/apexlang/templates/template-components/{media-list._template_options.md → media-list/media-list._template_options.md} +8 -2
  205. package/skills/apexlang/templates/template-components/media-list/media-list.partial.md +50 -0
  206. package/skills/apexlang/templates/template-components/media-list/media-list.report-avatar-badge.md +76 -0
  207. package/skills/apexlang/templates/template-components/media-list/media-list.report-base.md +71 -0
  208. package/skills/apexlang/templates/template-components/media-list/media-list.report-grouped.md +40 -0
  209. package/skills/apexlang/templates/template-components/media-list/media-list.report-layouts.md +50 -0
  210. package/skills/apexlang/templates/template-components/media-list/media-list.report-link.md +53 -0
  211. package/skills/apexlang/templates/template-components/metric-card/README.md +19 -4
  212. package/skills/apexlang/templates/template-components/metric-card/metric-card._common.md +122 -29
  213. package/skills/apexlang/templates/template-components/metric-card/metric-card._index.md +6 -0
  214. package/skills/apexlang/templates/template-components/metric-card/metric-card._template_options.md +47 -2
  215. package/skills/apexlang/templates/template-components/metric-card/metric-card.partial-minimal.md +51 -0
  216. package/skills/apexlang/templates/template-components/metric-card/metric-card.permutations.md +56 -0
  217. package/skills/apexlang/templates/template-components/metric-card/metric-card.report-avatar-badge.md +98 -0
  218. package/skills/apexlang/templates/template-components/metric-card/metric-card.report-grouping-selection.md +131 -0
  219. package/skills/apexlang/templates/template-components/metric-card/metric-card.report-link.md +66 -0
  220. package/skills/apexlang/templates/template-components/metric-card/metric-card.report-minimal.md +97 -0
  221. package/skills/apexlang/templates/template-components/template-components.registry.json +90 -1
  222. package/skills/apexlang/templates/template-components/timeline/README.md +19 -0
  223. package/skills/apexlang/templates/template-components/timeline/timeline._common.md +43 -0
  224. package/skills/apexlang/templates/template-components/timeline/timeline._index.md +24 -0
  225. package/skills/apexlang/templates/template-components/{timeline._template_options.md → timeline/timeline._template_options.md} +2 -1
  226. package/skills/apexlang/templates/template-components/timeline/timeline.permutations.md +399 -0
  227. package/skills/apexlang/templates/template-components/timeline/timeline.report-sample-data.md +168 -0
  228. package/skills/apexlang/templates/workspace-components/credentials/credentials-for-open-ai.example.md +1 -1
  229. package/skills/apexlang/templates/workspace-components/generative-ai-services/open-ai.example.md +8 -6
  230. package/skills/apexlang/tools/apexctl.mjs +167 -4
  231. package/skills/apexlang/tools/compiler-truth-audit.mjs +95 -63
  232. package/skills/apexlang/tools/query-valid-props-context.mjs +30 -0
  233. package/skills/apexlang/tools/query-valid-props-normalize.mjs +1 -0
  234. package/skills/apexlang/tools/query-valid-props-runtime.mjs +13 -8
  235. package/skills/apexlang/tools/query-valid-props-semantics.mjs +391 -0
  236. package/skills/apexlang/tools/query-valid-props-template-components.mjs +15 -1
  237. package/skills/apexlang/tools/query-valid-props.mjs +198 -216
  238. /package/skills/apexlang/templates/template-components/{badge._template_options.md → badge/badge._template_options.md} +0 -0
  239. /package/skills/apexlang/templates/template-components/{flexbox-container._template_options.md → flexbox-container/flexbox-container._template_options.md} +0 -0
@@ -1,74 +1,135 @@
1
1
  ---
2
2
  templateId: region.smart-filters.common
3
3
  componentType: region
4
- version: 1.1
5
- description: Shared contract for smart-filters regions and target result region binding.
4
+ version: 1.3
5
+ description: Shared contract for a Smart Filters region, its search child, and one secured base results region.
6
6
  ---
7
7
 
8
8
  # Purpose
9
9
 
10
- Document the native smart-filters region shell and its filter child metadata boundary.
10
+ Define the generation boundary for a Smart Filter Search experience without treating ticket fields as unproven APEXlang properties.
11
11
 
12
- # Generation Rules (MANDATORY)
12
+ # Required Input Contract
13
+
14
+ Freeze these decisions in the Generation Plan before emitting a Smart Filters region:
13
15
 
14
- 1. Use the dedicated `region-smart-filters` template.
15
- 2. Treat the filtered-region reference as mandatory.
16
- 3. Do not emit region `settings` for Smart Filters unless active compiler metadata proves a valid settings group.
17
- 4. Use the canonical search-filter source contract with `source.dbColumns` for free-text search; do not invent single-column shortcut shapes.
18
- 5. Do not target map regions directly. For map pages, target a companion report/cards results region and refresh the sibling map explicitly.
16
+ | Name | Type | Contract |
17
+ |------|------|----------|
18
+ | `smartFiltersRegionStaticId` | string | Unique static id for the Smart Filters region. |
19
+ | `baseRegionStaticId` | string | Static id of the one authoritative filtered results region. |
20
+ | `baseSource` | object | Secured view or canonical SQL plus `object_evidence_source`; never inferred from examples. |
21
+ | `searchableAttributes` | non-empty ordered list | Explicit allowlist of base-source columns rendered to `source.dbColumns`. |
22
+ | `matchSemantics` | enum | One of `contains`, `starts`, or `exact`. |
23
+ | `minChars` | positive integer | Minimum input length that can run search or suggestions. |
24
+ | `maxLen` | positive integer | Maximum accepted input length; must be greater than or equal to `minChars`. |
25
+ | `tokenizationPolicy` | object | Stable whitespace, punctuation, case, accent, and token-order behavior. |
26
+ | `securityScope` | object | Effective authorization scheme and server-side condition for both regions and all suggestion/refinement sources. |
27
+ | `performanceReadiness` | object | Index strategy, statistics status, and expected cardinality evidence. |
28
+ | `settingsContract` | object | Ticket settings plus property-level compiler evidence for the target build. |
19
29
 
20
- # Variable Contract
30
+ Validation boundary: artifact lint checks emitted topology, source/projection, allowlist order, scope, refinement shape, and supported settings; the plan gate checks object evidence, `no_rewrite`, search/compiler evidence, performance, and runtime acceptance. Use `apexlang validate --generation-plan <path>`; require it with `--require-smart-filter-generation-plan`.
31
+
32
+ # Generation Rules (MANDATORY)
21
33
 
22
- | Name | Required | Type | Notes |
23
- |------|----------|------|-------|
24
- | regionStaticId | yes | string | Region identifier. |
25
- | name | yes | string | Display name. |
26
- | smartFiltersRegionStaticId | yes | string | Smart filters region static id. |
27
- | source.filteredRegion | yes | ref | Results region static id. |
28
- | filters | optional | array | Filter definitions (radio/search/etc). |
29
- | filter.itemName | conditional | string | Canonical page item name for child search filters, e.g. `P14_F_SEARCH`. |
34
+ 1. Emit exactly one `smartFilters` region and bind it through `source.filteredRegion` to exactly one base results region.
35
+ 2. Use `baseRegionStaticId` as the single binding value and declare the Smart Filters region before that target region.
36
+ 3. Preserve the supplied secured-view or canonical-SQL base source. Do not rewrite, widen, or inject predicates into its SQL automatically.
37
+ 4. Emit at least one `type: search` child whose `source.dbColumns` is the ordered `searchableAttributes` allowlist. Every entry must be projected by base source.
38
+ 5. Keep filter children separate from the region shell and use page-scoped item names such as `P14_F_SEARCH`.
39
+ 6. For APEX 24.2, target Classic Report, Cards, Map, or Calendar. Target a Map region rather than its layer, and prove exactly one layer source for the single-dataset contract. Never target Smart Filters, Faceted Search, or another non-results component.
30
40
 
31
- # Output Template – Full
41
+ # Output Template – Region Shell
32
42
 
33
43
  ```apexlang
34
- region {{regionStaticId}} (
35
- name: {{name}}
36
- type: smartFilters
37
- source {
38
- filteredRegion: @{{source.filteredRegion}}
39
- }
40
- {{filters}}
44
+ region {{smartFiltersRegionStaticId}} (
45
+ name: {{name}}
46
+ type: smartFilters
47
+ source {
48
+ filteredRegion: @{{baseRegionStaticId}}
49
+ }
50
+ {{filters}}
41
51
  )
42
52
  ```
43
53
 
44
54
  # Output Template – Search Filter Child
45
55
 
46
56
  ```apexlang
47
- filter {{filter.itemName}} (
48
- type: search
49
- label {
50
- label: {{filter.label}}
51
- }
52
- layout {
53
- sequence: {{filter.layout.sequence}}
54
- }
55
- source {
56
- dbColumns: {{filter.source.dbColumns}}
57
- }
57
+ filter {{searchFilterItemName}} (
58
+ type: search
59
+ label {
60
+ label: {{searchFilterLabel}}
61
+ }
62
+ layout {
63
+ sequence: {{searchFilterSequence}}
64
+ }
65
+ source {
66
+ dbColumns: {{searchableAttributes}}
67
+ }
58
68
  )
59
69
  ```
60
70
 
71
+ # Search Behavior Contract
72
+
73
+ - Record exactly one default match semantic: `contains`, `starts`, or `exact`; record per-attribute overrides only when the selected compiler-supported shape can represent them.
74
+ - Do not execute search or suggestions below `minChars`. Reject input above `maxLen` predictably rather than silently changing the server-side value.
75
+ - Apply one frozen tokenization policy to search, suggestions, and refinements. It must define trimming, repeated whitespace, punctuation boundaries, case normalization, accent normalization, duplicate tokens, and token order.
76
+ - Use bind values for user input. Do not concatenate search text into the base SQL.
77
+ - `SMART_FILTER_SEARCH_BEHAVIOR_CONTRACT_REQUIRED_001` blocks generation unless exactly one semantic, positive integer bounds with `maxLen >= minChars`, every tokenization decision, and property-level compiler evidence are frozen in the Generation Plan.
78
+ - When the compiler has no property for a required behavior, keep it as a documented unresolved requirement and stop with Missing Inputs instead of inventing DSL or modifying the base SQL.
79
+ - Reject contradictory overrides, incomplete tokenization scope, unresolved compiler evidence, or `base_sql_rewrite: true` with `SMART_FILTER_SEARCH_BEHAVIOR_CONTRACT_REQUIRED_001`.
80
+
81
+ # Compiler-Gated Settings Contract
82
+
83
+ The requested UI contract is:
84
+
85
+ - `maxSuggestionChips: 100`
86
+ - `moreFiltersSuggestionChip: true`
87
+ - `compactNosThreshold: 10000`
88
+ - `showTotalRowCount`: an explicit boolean
89
+ - `totalRowCountLabel: Results` only when `showTotalRowCount` is `true`
90
+
91
+ Query active compiler metadata for every requested property. Emit a `settings` block only for properties exposed by the target build. `SMART_FILTER_SETTINGS_VALUE_REQUIRED_001` enforces each supported value and the conditional `Results` label. Missing compiler metadata stops with `SMART_FILTER_SETTINGS_COMPILER_EVIDENCE_REQUIRED_001`; unsupported properties stop with `SMART_FILTER_SETTINGS_UNSUPPORTED_001` until the target build or an approved alternative resolves the requirement. Never silently drop a requested setting or copy syntax from ticket prose.
92
+
93
+ # Security and Suggestion Contract
94
+
95
+ - The Smart Filters region and base region must have the same effective authorization scheme and server-side condition; both may be absent only when the page contract explicitly permits public access.
96
+ - Suggestions and refinements must derive from the same security-trimmed base dataset. Do not query a broader table, bypass a secured view, or omit tenant/row-level predicates.
97
+ - Prove every referenced object and searchable column through schema documentation, live metadata, or an exact user assertion.
98
+
99
+ # Performance Readiness Contract
100
+
101
+ - Record expected cardinality, current statistics status, and an index/search strategy aligned to each selected match semantic.
102
+ - Do not claim that a normal B-tree index solves substring `contains` searches. Record the proven text/function-based strategy or the accepted scan cost.
103
+ - Avoid wrapping searchable columns in functions unless matching function-based index evidence exists.
104
+ - Performance readiness remains unresolved while any required evidence is missing.
105
+ - `SMART_FILTER_PERFORMANCE_READINESS_REQUIRED_001` blocks generation while index strategy, statistics status, or expected-cardinality evidence is incomplete.
106
+ - For `contains`, reject a plain B-tree claim without text/function support or explicit accepted scan cost.
107
+
61
108
  # Conditional Rendering Rules
62
109
 
63
- - Keep filter children separate from the shell.
64
- - Use the advanced HTML DOM ID only when the owning scenario requires it.
65
- - Omit `settings` blocks for APEX 26.1 Smart Filters; the live compiler metadata for `NATIVE_SMART_FILTERS` has no settings group.
110
+ - Use advanced DOM ids only when the selected scenario requires them.
111
+ - Emit categorical/range filter children only when their columns are in the base projection and their suggestion source satisfies the security contract.
112
+ - Set `totalRowCountLabel` only when `showTotalRowCount` is compiler-supported and true.
66
113
 
67
114
  # Guardrails
68
115
 
69
- - `filteredRegion` must reference an existing results region with compatible source columns.
70
- - The Smart Filters region must be declared before the referenced `filteredRegion` in the page file.
71
- - `filteredRegion` must reference a report/cards-style results region. Do not target map regions, map layers, Smart Filters regions, Faceted Search regions, or other non-results aliases.
72
- - Filter LOV/value definitions must match result columns.
73
- - Search filters must use `source.dbColumns`; do not collapse free-text search into `source.databaseColumn`.
74
- - Metadata export lookup: search for `Smart Filters`, the filtered-region reference, and child filter metadata.
116
+ - `baseRegionStaticId` is mandatory, unique on the page, and resolves to one APEX 24.2 Classic Report, Cards, Map, or Calendar base region.
117
+ - `searchableAttributes` is an explicit allowlist; never infer it from all projected columns or `select *`.
118
+ - Search filters use `source.dbColumns`; do not collapse free-text search into `source.databaseColumn`.
119
+ - Do not rewrite base SQL for match, tokenization, suggestions, or security. Store the original in `base_source.canonical_sql` and require an exact emitted match (ignoring outer whitespace).
120
+ - Match named object evidence to actual SQL objects or `tableName`; secured-view evidence must record `object_type: view` and `secured: true`.
121
+ - Traverse `filterGroup` and nested `checkbox` refinements for inherited authorization, conditions, base columns, and suggestion sources.
122
+ - `SMART_FILTER_BASE_SOURCE_CONTRACT_REQUIRED_001` blocks until source mode, object evidence, projection, and no-rewrite are recorded.
123
+ - Filter LOV/value definitions must be subsets of the base region's security-trimmed data.
124
+ - Metadata export lookup: search for `Smart Filters`, `filteredRegion`, the base static id, and child filter metadata.
125
+
126
+ # Validation Checklist
127
+
128
+ - Exactly one base region is resolved and its static id matches `source.filteredRegion`.
129
+ - Every searchable attribute is projected by the proven base source and no unlisted attribute is searchable.
130
+ - Match semantics, `minChars`, `maxLen`, and tokenization are explicit and consistent.
131
+ - Settings evidence is property-specific for the target compiler build.
132
+ - Authorization, conditions, suggestions, and refinements share the base security scope.
133
+ - Index strategy, statistics status, and expected cardinality evidence are recorded.
134
+ - Refinement/suggestion `source.type` is `static` or `distinctValues`/`base`; reject shared, SQL, function, and unknown shapes.
135
+ - Each search/refinement child has label/help; plan runtime acceptance sets `result_refresh_without_reload` and `filtered_exports` to `true`.
@@ -13,6 +13,7 @@ Primary routing entrypoint for `smart-filter-search` templates.
13
13
 
14
14
  # Load Order
15
15
 
16
- 1. Load this file.
17
- 2. Load `smart-filter-search._common.md`.
18
- 3. Load one scenario template in this folder.
16
+ 1. Resolve the `smart-filter-search` pattern and construction pack.
17
+ 2. Load this file.
18
+ 3. Load `smart-filter-search._common.md` and freeze every required input.
19
+ 4. Load `smart-filter-search.standard.md` only when its exact component shape matches.
@@ -1,29 +1,45 @@
1
1
  ---
2
2
  templateId: region.smart-filters.standard
3
3
  componentType: region
4
- version: 1.0
4
+ version: 1.1
5
5
  imports:
6
6
  - smart-filter-search._common
7
- description: Standard smart filters region for search/filter experiences.
7
+ description: Standard Smart Filters region with one search child bound to a secured base results region.
8
8
  ---
9
9
 
10
+ # Usage
11
+
12
+ Use only after the common contract has resolved `baseRegionStaticId`, the searchable allowlist, search behavior, security parity, performance evidence, and compiler-gated settings. Pair this component with the exact selected template for the base results region; this scenario does not invent a generic base-region shell.
13
+
10
14
  # Output Template
11
15
 
12
- ```
16
+ ```apexlang
13
17
  region {{smartFiltersRegionStaticId}} (
14
- name: {{name}}
15
- type: smartFilters
16
- source {
17
- filteredRegion: @{{source.filteredRegion}}
18
- }
19
- layout {
20
- sequence: {{layout.sequence}}
21
- slot: {{layout.slot}}
22
- }
23
- appearance {
24
- template: {{appearance.template}}
25
- templateOptions: #DEFAULT#
26
- }
27
- {{filters}}
18
+ name: {{name}}
19
+ type: smartFilters
20
+ source {
21
+ filteredRegion: @{{baseRegionStaticId}}
22
+ }
23
+ layout {
24
+ sequence: {{layout.sequence}}
25
+ slot: {{layout.slot}}
26
+ }
27
+ appearance {
28
+ template: {{appearance.template}}
29
+ templateOptions: #DEFAULT#
30
+ }
31
+ filter {{searchFilterItemName}} (
32
+ type: search
33
+ label {
34
+ label: {{searchFilterLabel}}
35
+ }
36
+ layout {
37
+ sequence: {{searchFilterSequence}}
38
+ }
39
+ source {
40
+ dbColumns: {{searchableAttributes}}
41
+ }
42
+ )
43
+ {{additionalFilters}}
28
44
  )
29
45
  ```
@@ -15,6 +15,7 @@ Define deterministic defaults for APEX component settings. Use this markdown fam
15
15
 
16
16
  # Guardrails
17
17
  - For current compiler compatibility, use `settings { attributes: {...} }` for component settings.
18
+ - Application-scoped plug-in attributes belong in a `componentSetting` declaration; do not add them to a page component's instance-level `settings` block.
18
19
  - Do not emit direct keys inside `settings {}` (for example `display_as`, `mode`, `match_mode`).
19
20
  - Do not invent unsupported component categories.
20
21
  - Keep environment-specific values out of templates.
@@ -90,6 +90,7 @@ componentSetting NATIVE_DISPLAY_SELECTOR (
90
90
  type: region
91
91
  settings {
92
92
  attributes: {
93
+ includeSlider: false
93
94
  }
94
95
  }
95
96
  )
@@ -87,7 +87,7 @@ emailTemplate order-confirmation (
87
87
  ```
88
88
  }
89
89
  advanced {
90
- versionNo: 2
90
+ versionNumber: 2
91
91
  }
92
92
  )
93
93
  ```
@@ -27,7 +27,7 @@ Markdown-preserved APEXlang example. Use this file for syntax and structure only
27
27
  urlPathPrefix: /data/Pagination
28
28
  }
29
29
  /*STRICTLY - Use this ONLY when asked to do Synchronization to local table with Synchronization type as 'append' */
30
- restSynchronization {
30
+ synchronization {
31
31
  jobIsActive: true
32
32
  localTableOwner: SAN
33
33
  localTableName: {{source.table}}
@@ -35,7 +35,7 @@ Markdown-preserved APEXlang example. Use this file for syntax and structure only
35
35
  httpRequestLimit: 1000
36
36
  }
37
37
  /*STRICTLY - Use this ONLY when asked to do Synchronization to local table with Synchronization type as 'merge' */
38
- restSynchronization {
38
+ synchronization {
39
39
  jobIsActive: true
40
40
  localTableOwner: SAN
41
41
  localTableName: {{source.table}}
@@ -44,7 +44,7 @@ Markdown-preserved APEXlang example. Use this file for syntax and structure only
44
44
  httpRequestLimit: 1000
45
45
  }
46
46
  /*STRICTLY - Use this ONLY when asked to do Synchronization to local table with Synchronization type as 'replace' or 'fullRefreshDelete' */
47
- restSynchronization {
47
+ synchronization {
48
48
  jobIsActive: true
49
49
  localTableOwner: SAN
50
50
  localTableName: {{source.table}}
@@ -60,11 +60,8 @@ Markdown-preserved APEXlang example. Use this file for syntax and structure only
60
60
  authentication {
61
61
  credentials: @moviedb_api_key
62
62
  }
63
- settings {
64
- paginationType: pageSizeAndFetchOffset
65
- pageSizeUrlParam: limit
66
- rowOffsetUrlParam: offset
67
- hasMoreRowsSelector: hasMore
63
+ comments {
64
+ comments: Confirm pagination settings with compiler-backed REST Data Source attributes before emission.
68
65
  }
69
66
 
70
67
  parameter search_query (
@@ -86,8 +83,8 @@ Markdown-preserved APEXlang example. Use this file for syntax and structure only
86
83
  rowSelector: items
87
84
  }
88
85
 
89
- dataProfileCol data (
90
- colName: DATA
86
+ dataProfileColumn data (
87
+ columnName: DATA
91
88
  source {
92
89
  sequence: 1
93
90
  dataType: varchar2
@@ -100,8 +97,8 @@ Markdown-preserved APEXlang example. Use this file for syntax and structure only
100
97
  }
101
98
  )
102
99
 
103
- dataProfileCol data-capacity (
104
- colName: DATA_CAPACITY
100
+ dataProfileColumn data-capacity (
101
+ columnName: DATA_CAPACITY
105
102
  source {
106
103
  sequence: 2
107
104
  dataType: varchar2
@@ -114,8 +111,8 @@ Markdown-preserved APEXlang example. Use this file for syntax and structure only
114
111
  }
115
112
  )
116
113
 
117
- dataProfileCol data-hard-disk-size (
118
- colName: DATA_HARD_DISK_SIZE
114
+ dataProfileColumn data-hard-disk-size (
115
+ columnName: DATA_HARD_DISK_SIZE
119
116
  source {
120
117
  sequence: 3
121
118
  dataType: varchar2
@@ -128,8 +125,8 @@ Markdown-preserved APEXlang example. Use this file for syntax and structure only
128
125
  }
129
126
  )
130
127
 
131
- dataProfileCol data-capacity-gb (
132
- colName: DATA_CAPACITY_GB
128
+ dataProfileColumn data-capacity-gb (
129
+ columnName: DATA_CAPACITY_GB
133
130
  source {
134
131
  sequence: 4
135
132
  dataType: number
@@ -142,8 +139,8 @@ Markdown-preserved APEXlang example. Use this file for syntax and structure only
142
139
  }
143
140
  )
144
141
 
145
- dataProfileCol ID (
146
- colName: ID
142
+ dataProfileColumn ID (
143
+ columnName: ID
147
144
  source {
148
145
  sequence: 5
149
146
  dataType: number
@@ -158,8 +155,8 @@ Markdown-preserved APEXlang example. Use this file for syntax and structure only
158
155
  }
159
156
  )
160
157
 
161
- dataProfileCol NAME (
162
- colName: NAME
158
+ dataProfileColumn NAME (
159
+ columnName: NAME
163
160
  source {
164
161
  sequence: 6
165
162
  dataType: varchar2
@@ -173,8 +170,8 @@ Markdown-preserved APEXlang example. Use this file for syntax and structure only
173
170
  }
174
171
  )
175
172
 
176
- dataProfileCol {{source.dateColumn}} (
177
- colName: {{source.dateColumn}}
173
+ dataProfileColumn {{source.dateColumn}} (
174
+ columnName: {{source.dateColumn}}
178
175
  source {
179
176
  sequence: 7
180
177
  dataType: timestampWithTimeZone
@@ -189,8 +186,8 @@ Markdown-preserved APEXlang example. Use this file for syntax and structure only
189
186
  }
190
187
  )
191
188
 
192
- dataProfileCol {{source.amountColumn}} (
193
- colName: {{source.amountColumn}}
189
+ dataProfileColumn {{source.amountColumn}} (
190
+ columnName: {{source.amountColumn}}
194
191
  source {
195
192
  sequence: 8
196
193
  dataType: number
@@ -205,9 +202,7 @@ Markdown-preserved APEXlang example. Use this file for syntax and structure only
205
202
  )
206
203
 
207
204
  operation get_rows (
208
- label {
209
- label: GET
210
- }
205
+ label: GET
211
206
  operation {
212
207
  urlPattern: .
213
208
  httpMethod: get
@@ -283,8 +278,8 @@ restDataSource icm-claims-data (
283
278
  rowSelector: items
284
279
  }
285
280
 
286
- dataProfileCol claim-id (
287
- colName: CLAIM_ID
281
+ dataProfileColumn claim-id (
282
+ columnName: CLAIM_ID
288
283
  source {
289
284
  sequence: 1
290
285
  dataType: number
@@ -294,8 +289,8 @@ restDataSource icm-claims-data (
294
289
  }
295
290
  )
296
291
 
297
- dataProfileCol claim-number (
298
- colName: CLAIM_NUMBER
292
+ dataProfileColumn claim-number (
293
+ columnName: CLAIM_NUMBER
299
294
  source {
300
295
  sequence: 3
301
296
  dataType: varchar2
@@ -305,8 +300,8 @@ restDataSource icm-claims-data (
305
300
  }
306
301
  )
307
302
 
308
- dataProfileCol currency-code (
309
- colName: CURRENCY_CODE
303
+ dataProfileColumn currency-code (
304
+ columnName: CURRENCY_CODE
310
305
  source {
311
306
  sequence: 6
312
307
  dataType: varchar2
@@ -316,8 +311,8 @@ restDataSource icm-claims-data (
316
311
  }
317
312
  )
318
313
 
319
- dataProfileCol policy-id (
320
- colName: POLICY_ID
314
+ dataProfileColumn policy-id (
315
+ columnName: POLICY_ID
321
316
  source {
322
317
  sequence: 2
323
318
  dataType: number
@@ -327,8 +322,8 @@ restDataSource icm-claims-data (
327
322
  }
328
323
  )
329
324
 
330
- dataProfileCol reported-date (
331
- colName: REPORTED_DATE
325
+ dataProfileColumn reported-date (
326
+ columnName: REPORTED_DATE
332
327
  source {
333
328
  sequence: 4
334
329
  dataType: date
@@ -338,8 +333,8 @@ restDataSource icm-claims-data (
338
333
  }
339
334
  )
340
335
 
341
- dataProfileCol total-claimed-amount (
342
- colName: TOTAL_CLAIMED_AMOUNT
336
+ dataProfileColumn total-claimed-amount (
337
+ columnName: TOTAL_CLAIMED_AMOUNT
343
338
  source {
344
339
  sequence: 5
345
340
  dataType: number
@@ -350,9 +345,7 @@ restDataSource icm-claims-data (
350
345
  )
351
346
 
352
347
  operation get (
353
- label {
354
- label: GET
355
- }
348
+ label: GET
356
349
  operation {
357
350
  urlPattern: .
358
351
  httpMethod: get
@@ -361,14 +354,14 @@ restDataSource icm-claims-data (
361
354
  )
362
355
 
363
356
  operation post (
364
- label {
365
- label: POST
366
- }
357
+ label: POST
367
358
  operation {
368
359
  urlPattern: .
369
360
  httpMethod: post
370
361
  databaseOperation: insert
371
- requestBodyTemplate:
362
+ }
363
+ requestBody {
364
+ template:
372
365
  ```
373
366
  {
374
367
  "claim_id":"#CLAIM_ID#"
@@ -379,6 +372,7 @@ restDataSource icm-claims-data (
379
372
  ,"currency_code":"#CURRENCY_CODE#"
380
373
  }
381
374
  ```
375
+ versionNumber: 1
382
376
  }
383
377
  )
384
378
 
@@ -116,36 +116,8 @@ taskDefinition LOAN_ACTION (
116
116
  action send-email (
117
117
  name: Send Email
118
118
  type: sendEMail
119
- emailHeader {
120
- to: &P12_CUSTOMER_EMAIL.
121
- }
122
- emailTemplate {
123
- emailTemplate: @order-confirmation
124
- placeholderValues:
125
- ```
126
- {
127
- "ORDER_NUMBER":"&P12_ORDER_ID.",
128
- "CUSTOMER_NAME":"&P12_CUSTOMER_NAME.",
129
- "ORDER_DATE":"&P12_ORDER_DATE.",
130
- "SHIP_TO":"",
131
- "SHIPPING_ADDRESS_LINE_1":"",
132
- "SHIPPING_ADDRESS_LINE_2":"",
133
- "ITEMS_ORDERED":"",
134
- "ORDER_TOTAL":"&P12_TOTAL_AMT.",
135
- "ORDER_URL":"","MY_APPLICATION_LINK":""
136
- }
137
- ```
138
- }
139
- emailAttachments {
140
- attachmentSql:
141
- ```sql
142
- select file_blob blob_column,
143
- file_name,
144
- mime_type,
145
- null content_id
146
- from order_files
147
- where order_id = :APEX$TASK_PK
148
- ```
119
+ comments {
120
+ comments: Email header, template placeholder, and attachment attributes require compiler-backed sendEMail task-action syntax before emission.
149
121
  }
150
122
  execution {
151
123
  onEvent: complete
@@ -79,7 +79,7 @@ taskDefinition CHECKER_APPROVAL (
79
79
  label {
80
80
  label: Disbursed Amount
81
81
  }
82
- value {
82
+ validation {
83
83
  required: false
84
84
  }
85
85
  )
@@ -148,36 +148,8 @@ taskDefinition CHECKER_APPROVAL (
148
148
  action send-email (
149
149
  name: Send Email
150
150
  type: sendEMail
151
- emailHeader {
152
- to: &P12_CUSTOMER_EMAIL.
153
- }
154
- emailTemplate {
155
- emailTemplate: @order-confirmation
156
- placeholderValues:
157
- ```
158
- {
159
- "ORDER_NUMBER":"&P12_ORDER_ID.",
160
- "CUSTOMER_NAME":"&P12_CUSTOMER_NAME.",
161
- "ORDER_DATE":"&P12_ORDER_DATE.",
162
- "SHIP_TO":"",
163
- "SHIPPING_ADDRESS_LINE_1":"",
164
- "SHIPPING_ADDRESS_LINE_2":"",
165
- "ITEMS_ORDERED":"",
166
- "ORDER_TOTAL":"&P12_TOTAL_AMT.",
167
- "ORDER_URL":"","MY_APPLICATION_LINK":""
168
- }
169
- ```
170
- }
171
- emailAttachments {
172
- attachmentSql:
173
- ```sql
174
- select file_blob blob_column,
175
- file_name,
176
- mime_type,
177
- null content_id
178
- from order_files
179
- where order_id = :APEX$TASK_PK
180
- ```
151
+ comments {
152
+ comments: Email header, template placeholder, and attachment attributes require compiler-backed sendEMail task-action syntax before emission.
181
153
  }
182
154
  execution {
183
155
  onEvent: complete