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
@@ -20,10 +20,55 @@
20
20
  "owningGuidance": ["references/policies/memory-bank/00-guard/ai.guard.md", "references/workflows/apex-generation/agents/40-agent-revision.md"]
21
21
  },
22
22
  "APEXLANG_LF_LINE_ENDINGS_REQUIRED_001": {
23
- "cause": ".apx artifact contains CRLF line endings.",
23
+ "cause": ".apx artifact contains CRLF or CR line endings.",
24
24
  "deterministicFix": "Rewrite only the affected .apx files with LF line endings; keep content unchanged.",
25
25
  "owningGuidance": ["references/policies/memory-bank/00-guard/ai.guard.md", ".gitattributes"]
26
26
  },
27
+ "AVATAR_AUTHORIZATION_SCHEME_EVIDENCE_REQUIRED_001": {
28
+ "cause": "Restricted standalone Avatar visibility lacks a proven shared authorization scheme or references an invented scheme name.",
29
+ "deterministicFix": "Use mustNotBePublicUser or resolve the exact shared authorization declaration from the validation set and emit its @alias as region security.authorizationScheme; stop with Missing Inputs if it cannot be resolved.",
30
+ "owningGuidance": ["templates/template-components/avatar/avatar._common.md", "references/policies/memory-bank/10-global/apex.global.md"]
31
+ },
32
+ "AVATAR_COLUMN_IDENTIFIER_INVALID_001": {
33
+ "cause": "A standalone Avatar child column uses a lowercase or hyphenated external identifier rejected by the live compiler.",
34
+ "deterministicFix": "Rename the Avatar child declaration to uppercase snake_case, for example column AVATAR_INITIALS (...), while preserving its source.databaseColumn mapping.",
35
+ "owningGuidance": ["templates/template-components/avatar/avatar._common.md"]
36
+ },
37
+ "AVATAR_IMAGE_URL_COLUMN_REQUIRED_001": {
38
+ "cause": "A standalone, Timeline-nested, or Comments-nested Avatar image uses a missing or unproven image source shape.",
39
+ "deterministicFix": "Emit the active Avatar image property—settings.image for standalone Avatar or plugin-avatar.image for Timeline and Comments—as { type: urlColumn, urlColumn: <projected varchar2 database column> }; declare that projection through a named child column and remove BLOB or alternate image properties.",
40
+ "owningGuidance": ["templates/template-components/avatar/avatar.report-image-url-column.md", "references/domains/template-components/timeline.md", "references/domains/template-components/comments.md"]
41
+ },
42
+ "AVATAR_IMAGE_URL_SAFETY_REQUIRED_001": {
43
+ "cause": "An Avatar URL or URL-column image is not application-managed or can render a traversal, arbitrary, external, protocol-relative, javascript:, or data: URL.",
44
+ "deterministicFix": "For URL columns, project :APP_FILES || 'relative/path' or :APEX_FILES || 'relative/path'. For a static Metric Card URL, use #APP_FILES#relative/path or #APEX_FILES#relative/path. Reject template/substitution tokens inside SQL literals, AUTHENTICATED_URL_PREFIX, BLOB endpoints, traversal, raw database URL columns, and absolute external URLs.",
45
+ "owningGuidance": ["templates/template-components/avatar/avatar.report-image-url-column.md", "templates/template-components/metric-card/metric-card.report-avatar-badge.md", "references/policies/memory-bank/10-global/apex.global.md"]
46
+ },
47
+ "AVATAR_ICON_ALLOWLIST_REQUIRED_001": {
48
+ "cause": "An Avatar icon has an unknown icon or modifier, contains multiple icons or arbitrary classes, or comes from an unverified dynamic column.",
49
+ "deterministicFix": "Use exactly one icon from the canonical pinned Font APEX index plus only optional listed modifiers. For column-backed icons, project approved literal values directly or map source states with an explicit SQL CASE expression whose every output satisfies that same canonical contract.",
50
+ "owningGuidance": ["assets/indexes/font-apex-icon-index.json", "templates/template-components/avatar/avatar.report-icon.md", "references/policies/memory-bank/40-components/apex.region-media.md"]
51
+ },
52
+ "AVATAR_ACCESSIBLE_DESCRIPTION_REQUIRED_001": {
53
+ "cause": "A meaningful Avatar lacks a verified human-readable description, the description mapping is invalid, or decorative intent is contradictory.",
54
+ "deterministicFix": "Set settings.description to nonempty human-readable text or an &UPPERCASE_COLUMN. substitution backed by a declared varchar2 child column. For a dynamic source, verify its meaning and persist AVATAR_DESCRIPTION_EVIDENCE_SOURCE=schema_doc, =live_db, or =user_asserted in region comments. For a decorative Avatar, omit both the description property and its child column and add AVATAR_PURPOSE_DECORATIVE.",
55
+ "owningGuidance": ["templates/template-components/avatar/avatar._common.md", "references/policies/memory-bank/10-global/apex.global.md"]
56
+ },
57
+ "AVATAR_CSS_CLASSES_SAFE_REQUIRED_001": {
58
+ "cause": "Avatar cssClasses are dynamic, unscoped, visibility-changing, undocumented, or use framework utilities without explicit-request evidence.",
59
+ "deterministicFix": "Prefer native Avatar shape, size, and spacing attributes. If custom CSS is required, use static avatar-* class names and add AVATAR_CSS_RATIONALE=<reason> to region comments. Framework utilities also require AVATAR_FRAMEWORK_UTILITIES_EXPLICIT_REQUEST; visibility-changing classes remain forbidden.",
60
+ "owningGuidance": ["templates/template-components/avatar/avatar._common.md", "references/policies/memory-bank/40-components/apex.templates.md"]
61
+ },
62
+ "AVATAR_INITIALS_COLUMN_REFERENCE_REQUIRED_001": {
63
+ "cause": "Standalone Avatar settings.initials uses substitution syntax or does not reference a declared varchar2 Avatar source column.",
64
+ "deterministicFix": "Set settings.initials to the direct uppercase source-column identifier, for example AVATAR_INITIALS, without an ampersand or trailing period; keep &COLUMN_NAME. syntax only for free-text settings such as description.",
65
+ "owningGuidance": ["templates/template-components/avatar/avatar.report-initials.md"]
66
+ },
67
+ "AVATAR_TYPE_PAYLOAD_REQUIRED_001": {
68
+ "cause": "Standalone Avatar settings omit the selected type payload or mix payloads from multiple Avatar types.",
69
+ "deterministicFix": "Choose exactly one type—initials, icon, or image—emit its matching payload, and remove the other payload properties.",
70
+ "owningGuidance": ["templates/template-components/avatar/avatar._common.md"]
71
+ },
27
72
  "APP_TEMPLATE_ARTIFACT_LEAK_001": {
28
73
  "cause": "Generated app root contains template-only files or unexpected top-level entries.",
29
74
  "deterministicFix": "Remove leaked scaffold/template docs and keep only .apex, application.apx, deployments, page-groups.apx, pages, shared-components, and supporting-objects.",
@@ -94,6 +139,46 @@
94
139
  "deterministicFix": "Populate sourceEvidence and link every page/action/layout/LOV decision to evidence; stop with Missing Inputs for unsupported decisions.",
95
140
  "owningGuidance": ["references/workflows/apexlang/workflow-create-app-from-fr-and-model.md", "references/workflows/apexlang/application-spec.template.md"]
96
141
  },
142
+ "BADGE_ACTION_LAYOUT_SEQUENCE_REQUIRED_001": {
143
+ "cause": "A Badge link action omits the component layout sequence required by the live compiler.",
144
+ "deterministicFix": "Add layout { sequence: <number> } to every Badge action, preserving position: link and the existing behavior target.",
145
+ "owningGuidance": ["templates/template-components/badge/badge._common.md", "templates/template-components/badge/badge.report-link.md"]
146
+ },
147
+ "BADGE_ACTION_CARDINALITY_REQUIRED_001": {
148
+ "cause": "A Badge region defines more than one action even though the component supports a single link action.",
149
+ "deterministicFix": "Keep at most one Badge action, preserve position: link and numeric layout.sequence, and remove duplicate actions.",
150
+ "owningGuidance": ["templates/template-components/badge/badge._common.md", "templates/template-components/badge/badge.report-link.md"]
151
+ },
152
+ "BADGE_LABEL_STATIC_REQUIRED_001": {
153
+ "cause": "A raw-rendered Badge label is mapped from a column, substitution token, or unresolved template value.",
154
+ "deterministicFix": "Replace settings.label with concise trusted static text; keep row-varying content in the escaped Badge value.",
155
+ "owningGuidance": ["templates/template-components/badge/badge._common.md"]
156
+ },
157
+ "BADGE_LINK_ATTRIBUTES_FORBIDDEN_001": {
158
+ "cause": "A Badge action contains custom linkAttributes that may carry arbitrary classes, attributes, or inline event handlers.",
159
+ "deterministicFix": "Remove behavior.linkAttributes and express navigation through the reviewed structured behavior.target.",
160
+ "owningGuidance": ["templates/template-components/badge/badge._common.md", "templates/template-components/badge/badge.report-link.md"]
161
+ },
162
+ "BADGE_STATE_ALLOWLIST_REQUIRED_001": {
163
+ "cause": "An explicitly mapped Badge state projection is dynamic, nullable, mixed-case, or can return values outside danger, warning, success, and info.",
164
+ "deterministicFix": "If state was not requested, remove settings.state or plugin-badge.state, the state projection, and its child column. If state was requested, keep a projected varchar2 state column and preserve authoritative source evidence; for sqlQuery sources, use an exact lowercase literal or a CASE expression whose every branch, including an explicit ELSE, returns danger, warning, success, or info.",
165
+ "owningGuidance": ["templates/template-components/badge/badge._common.md", "templates/template-components/metric-card/metric-card.report-avatar-badge.md"]
166
+ },
167
+ "BADGE_STATE_DATATYPE_REQUIRED_001": {
168
+ "cause": "The source column mapped by Badge settings.state does not declare source.dataType: varchar2.",
169
+ "deterministicFix": "Declare the mapped state child column as source.dataType: varchar2 and keep its SQL results restricted to the exact lowercase semantic states.",
170
+ "owningGuidance": ["templates/template-components/badge/badge._common.md"]
171
+ },
172
+ "BADGE_TARGET_URL_ALLOWLIST_REQUIRED_001": {
173
+ "cause": "A Badge action uses redirectUrl behavior or targetUrl while no application-specific destination allowlist is modeled in the repository.",
174
+ "deterministicFix": "Remove redirectUrl behavior and behavior.targetUrl, then use a reviewed structured behavior.target. Keep external URL navigation blocked until an application-specific allowlist contract exists.",
175
+ "owningGuidance": ["templates/template-components/badge/badge._common.md", "templates/template-components/badge/badge.report-link.md"]
176
+ },
177
+ "BADGE_VALUE_DATATYPE_REQUIRED_001": {
178
+ "cause": "The source column mapped by Badge settings.value uses a datatype that the APEX 26.1 Badge value attribute does not support.",
179
+ "deterministicFix": "Change the mapped value projection and child column to varchar2, number, date, intervalYearToMonth, or intervalDayToSecond; do not restrict unrelated auxiliary columns.",
180
+ "owningGuidance": ["templates/template-components/badge/badge._common.md"]
181
+ },
97
182
  "BREADCRUMB_COVERAGE_ENTRY_REQUIRED_001": {
98
183
  "cause": "A non-modal page is missing a shared breadcrumb entry.",
99
184
  "deterministicFix": "Add a shared-components/breadcrumbs.apx entry for the page with correct pageNumber and parent/root relationship.",
@@ -154,6 +239,66 @@
154
239
  "deterministicFix": "Rewrite column-backed overline/title/description/miscellaneous settings as &COLUMN_NAME. substitutions; leave true literals unchanged.",
155
240
  "owningGuidance": ["templates/template-components/content-row/content-row._common.md"]
156
241
  },
242
+ "MEDIA_LIST_ACTION_BEHAVIOR_REQUIRED_001": {
243
+ "cause": "A Media List link action has a behavior/target combination that cannot execute declaratively.",
244
+ "deterministicFix": "Use redirectThisApp with one structured target and remove contradictory behavior properties.",
245
+ "owningGuidance": ["templates/template-components/media-list/media-list.report-link.md"]
246
+ },
247
+ "MEDIA_LIST_TRIGGER_ACTION_OWNER_REQUIRED_001": {
248
+ "cause": "A Media List link action uses triggerAction without validator-visible ownership by a dynamic action.",
249
+ "deterministicFix": "Replace triggerAction with redirectThisApp and a reviewed structured target, or omit the action until dynamic-action ownership can be proven.",
250
+ "owningGuidance": ["templates/template-components/media-list/media-list.report-link.md"]
251
+ },
252
+ "MEDIA_LIST_ACTION_CARDINALITY_REQUIRED_001": {
253
+ "cause": "A Media List region defines more than its single native link action.",
254
+ "deterministicFix": "Keep at most one action at position link, or select another component family when multiple interactions are required.",
255
+ "owningGuidance": ["templates/template-components/media-list/media-list.report-link.md"]
256
+ },
257
+ "MEDIA_LIST_ACTION_LAYOUT_SEQUENCE_REQUIRED_001": {
258
+ "cause": "A Media List action omits the compiler-required layout sequence.",
259
+ "deterministicFix": "Add a multiline layout block with a numeric sequence to the single link action.",
260
+ "owningGuidance": ["templates/template-components/media-list/media-list.report-link.md"]
261
+ },
262
+ "MEDIA_LIST_AVATAR_BADGE_CONTRACT_REQUIRED_001": {
263
+ "cause": "A Media List Avatar or Badge display toggle is inconsistent with its native plugin block.",
264
+ "deterministicFix": "Emit settings.displayAvatar: true with plugin-avatar, and settings.displayBadge: true with plugin-badge; otherwise omit both members of the corresponding pair.",
265
+ "owningGuidance": ["templates/template-components/media-list/media-list.report-avatar-badge.md"]
266
+ },
267
+ "MEDIA_LIST_COLUMN_SHAPE_REQUIRED_001": {
268
+ "cause": "A Media List report column does not use the single column variant selected by the active target-build contracts.",
269
+ "deterministicFix": "Resolve region.column under themeTemplateComponent/mediaList, then emit exactly its named or unnamed declaration, required properties, layout, source mapping, datatype, and supported identity or visibility property for every projection.",
270
+ "owningGuidance": ["templates/template-components/media-list/media-list._common.md"]
271
+ },
272
+ "MEDIA_LIST_DISPLAY_MODE_REQUIRED_001": {
273
+ "cause": "A Media List mixes partial and report-only structures or omits report source metadata.",
274
+ "deterministicFix": "For report mode add a verified source, deterministic orderBy, and complete columns; for partial mode remove source, orderBy, columns, grouping, layout, size, and theme-color settings.",
275
+ "owningGuidance": ["templates/template-components/media-list/media-list._common.md", "templates/template-components/media-list/media-list.partial.md"]
276
+ },
277
+ "MEDIA_LIST_CAPABILITY_CONTRACT_REQUIRED_001": {
278
+ "cause": "The active target-build contracts do not resolve exactly one Media List report-column shape.",
279
+ "deterministicFix": "Load or regenerate the target-build component contract and run the parent-aware region.column grammar contract for themeTemplateComponent/mediaList; stop with Missing Inputs if it remains ambiguous.",
280
+ "owningGuidance": ["templates/template-components/media-list/media-list._common.md"]
281
+ },
282
+ "MEDIA_LIST_CAPABILITY_UNSUPPORTED_001": {
283
+ "cause": "A Media List emits grouping or a nested optional property that is not exposed by the active target-build component contract.",
284
+ "deterministicFix": "Remove the unsupported feature for this target or select a target whose live component contract exposes the exact block, property, and accepted value; do not convert a target-specific absence into a universal prohibition.",
285
+ "owningGuidance": ["templates/template-components/media-list/media-list.report-grouped.md", "templates/template-components/media-list/media-list.report-avatar-badge.md"]
286
+ },
287
+ "MEDIA_LIST_MAPPING_REQUIRED_001": {
288
+ "cause": "A Media List setting, action, or nested feature references a missing or incompatible report projection.",
289
+ "deterministicFix": "Project the required source alias, declare it once with the active compiler-selected Media List column shape and correct datatype, and use bare aliases for session-state selectors or &COLUMN. only for supported free-text substitutions.",
290
+ "owningGuidance": ["templates/template-components/media-list/media-list._common.md"]
291
+ },
292
+ "MEDIA_LIST_PARTIAL_BINDING_REQUIRED_001": {
293
+ "cause": "A partial Media List references a page-item-shaped session-state selector that is not declared in the validation set.",
294
+ "deterministicFix": "Declare the referenced page item in the application artifact, correct the selector to an existing item, or use a true literal value.",
295
+ "owningGuidance": ["templates/template-components/media-list/media-list.partial.md"]
296
+ },
297
+ "MEDIA_LIST_TARGET_URL_ALLOWLIST_REQUIRED_001": {
298
+ "cause": "A Media List action uses targetUrl or custom linkAttributes without an application URL allowlist.",
299
+ "deterministicFix": "Remove targetUrl and linkAttributes, then use a reviewed structured redirectThisApp target.",
300
+ "owningGuidance": ["templates/template-components/media-list/media-list.report-link.md"]
301
+ },
157
302
  "DASHBOARD_LAYOUT_ROW_PLAN_REQUIRED_001": {
158
303
  "cause": "Dashboard regions were emitted without a row plan or the emitted rows do not match the plan.",
159
304
  "deterministicFix": "Create one layout_row_plan entry per physical row, split stacked full-width detail/context/cards sections into separate one-region entries, replace generic dashboard-chart-flow with explicit two-up-equal/three-up-equal chart rows, then set startNewRow false only for second-and-later regions in each planned row.",
@@ -219,10 +364,15 @@
219
364
  "deterministicFix": "Add listEntries.displayFilterInitially: true for Product, Customer, Store, Employee, Supplier, Email, SKU, name/title, and similar high-cardinality facets.",
220
365
  "owningGuidance": ["references/policies/memory-bank/30-pages/apex.faceted-search.md"]
221
366
  },
367
+ "FILE_UPLOAD_DISPLAY_MODE_REQUIRED_001": {
368
+ "cause": "A File Upload item omits its explicit display mode and would inherit the compiler's simple inline file-browse UI.",
369
+ "deterministicFix": "Add display.displayAs. Use blockDropzone by default with dropzoneTitle 'Drop files here' and dropzoneDesc 'or click to browse'; preserve an explicitly requested inlineDropzone or nativeFileBrowse mode.",
370
+ "owningGuidance": ["templates/items/file-upload/file-upload._common.md"]
371
+ },
222
372
  "FA_ICON_REQUIRED_001": {
223
- "cause": "An icon-bearing property uses a non-Font APEX icon token, custom CSS icon alias, image icon, or framework-specific icon class.",
224
- "deterministicFix": "Replace the value with a conservative Font APEX fa-* class such as fa-table, fa-users, fa-map-marker, fa-package, fa-image, fa-filter, fa-edit, or fa-plus.",
225
- "owningGuidance": ["references/policies/memory-bank/40-components/apex.region-media.md", "references/policies/memory-bank/40-components/apex.buttons.md"]
373
+ "cause": "An icon-bearing property is empty, dynamic where a literal is required, or uses a non-catalog icon, duplicate base/modifier token, custom CSS alias, image icon, or framework-specific class.",
374
+ "deterministicFix": "Read the pinned Font APEX index and replace the value with exactly one listed icon, at most one optional fa base class, and unique optional listed modifiers; do not infer or invent fa-* tokens.",
375
+ "owningGuidance": ["assets/indexes/font-apex-icon-index.json"]
226
376
  },
227
377
  "FACETED_SEARCH_DEFAULT_SETTINGS_REQUIRED_001": {
228
378
  "cause": "A faceted-search region is missing the standard default settings block or has a non-default value for a required default setting.",
@@ -349,6 +499,46 @@
349
499
  "deterministicFix": "Use one Metric Card region with a normalized multi-row source, usually UNION ALL with one row per metric.",
350
500
  "owningGuidance": ["templates/template-components/metric-card/metric-card._common.md", "references/policies/memory-bank/30-pages/apex.dashboard.md"]
351
501
  },
502
+ "METRIC_CARD_REPORT_CONTRACT_REQUIRED_001": {
503
+ "cause": "A Metric Card is missing its required metric binding, complete source-column coverage, or a compiler-backed attribute value.",
504
+ "deterministicFix": "Start from metric-card.report-minimal.md, emit settings.metric, map query-backed text with &COLUMN. syntax, and add one typed child column for every source projection.",
505
+ "owningGuidance": ["templates/template-components/metric-card/metric-card._common.md", "templates/template-components/metric-card/metric-card.report-minimal.md"]
506
+ },
507
+ "METRIC_CARD_PARTIAL_SCOPE_REQUIRED_001": {
508
+ "cause": "A partial-mode Metric Card contains report-only settings or blocks.",
509
+ "deterministicFix": "Start from metric-card.partial-minimal.md and remove settings.layout, settings.itemCssClasses, plugin-grouping, rowSelection, messages, and pagination; keep only complete component-scope Avatar, Badge, text, CSS-class, and link-action branches.",
510
+ "owningGuidance": ["templates/template-components/metric-card/metric-card._common.md", "templates/template-components/metric-card/metric-card.partial-minimal.md"]
511
+ },
512
+ "METRIC_CARD_AVATAR_BADGE_REQUIRED_001": {
513
+ "cause": "A Metric Card nested Avatar or Badge block has an incomplete type/payload, unsafe media or label content, invalid selector syntax, incompatible child-column datatype, or unsupported conditional property.",
514
+ "deterministicFix": "Start from metric-card.report-avatar-badge.md; keep displayAvatar/displayBadge true, match exactly one Avatar payload to its type, omit Avatar style for image type, use typed projected columns for Avatar media, require Badge label/value, use bare projected aliases for selector fields, use static Font APEX icons, and apply only Metric Card-specific enum values.",
515
+ "owningGuidance": ["templates/template-components/metric-card/metric-card._common.md", "templates/template-components/metric-card/metric-card.report-avatar-badge.md"]
516
+ },
517
+ "METRIC_CARD_SELECTION_ITEMS_REQUIRED_001": {
518
+ "cause": "A Metric Card native row-selection mode has incompatible or missing same-page selection items.",
519
+ "deterministicFix": "Use focusOnly with no items, singleSelection with a same-page hidden currentSelectionPageItem, or multipleSelection with that hidden item plus a same-page checkbox/switch selectAllPageItem; keep a primary-key child column and classify the hidden client-owned selection item with documented sessionStateProtection: unrestricted.",
520
+ "owningGuidance": ["templates/template-components/metric-card/metric-card._common.md", "templates/template-components/metric-card/metric-card.report-grouping-selection.md"]
521
+ },
522
+ "METRIC_CARD_SETTINGS_SUBSTITUTION_REQUIRED_001": {
523
+ "cause": "A Metric Card title, metric, or meta setting references a projected SQL alias without APEX report substitution syntax.",
524
+ "deterministicFix": "Change the query-backed text mapping from COLUMN_NAME to &COLUMN_NAME.; keep literal text unchanged and keep sessionStateValue selectors as bare aliases.",
525
+ "owningGuidance": ["templates/template-components/metric-card/metric-card._common.md", "templates/template-components/metric-card/metric-card.report-minimal.md"]
526
+ },
527
+ "METRIC_CARD_LINK_ACTION_REQUIRED_001": {
528
+ "cause": "A Metric Card action uses an unsupported position, action template, unsafe URL/attribute input, or non-declarative navigation shape.",
529
+ "deterministicFix": "Use action.position: link with deterministic layout.sequence; use a structured target for application navigation, or keep redirectUrl only with a reviewed safe targetUrl. Remove unsafe schemes, inline handlers, URL-bearing link attributes, scriptable CSS, unsafe dynamic attributes, and unsafe new-window attributes.",
530
+ "owningGuidance": ["templates/template-components/metric-card/metric-card._common.md", "templates/template-components/metric-card/metric-card.report-link.md"]
531
+ },
532
+ "METRIC_CARD_TARGET_URL_SAFETY_REQUIRED_001": {
533
+ "cause": "A Metric Card redirectUrl action has an empty, dangerous, protocol-relative, same-app scalar, control-character-bearing, wholly dynamic, or dynamically substituted scheme, host, path, or fragment.",
534
+ "deterministicFix": "Use a structured target for APEX application navigation. For redirectUrl, use a reviewed relative URL or an http, https, mailto, or tel URL; keep substitutions inside query parameters so the scheme, host, path, and fragment remain static.",
535
+ "owningGuidance": ["templates/template-components/metric-card/metric-card._common.md", "templates/template-components/metric-card/metric-card.report-link.md"]
536
+ },
537
+ "METRIC_CARD_LINK_ATTRIBUTES_SAFETY_REQUIRED_001": {
538
+ "cause": "Metric Card linkAttributes contain dynamic input, an inline event handler, a URL-bearing attribute, scriptable CSS, an unsafe URL scheme, or an unsafe new-window target.",
539
+ "deterministicFix": "Keep linkAttributes static; remove event handlers, URL-bearing attributes, scriptable CSS, and dynamic substitutions. Put navigation in targetUrl, and pair target=\"_blank\" with rel=\"noopener\" or rel=\"noreferrer\".",
540
+ "owningGuidance": ["templates/template-components/metric-card/metric-card._common.md", "templates/template-components/metric-card/metric-card.report-link.md"]
541
+ },
352
542
  "METRIC_CARD_STANDARD_TEMPLATE_FORBIDDEN_001": {
353
543
  "cause": "Dashboard KPI Metric Card uses standard chrome where blank/attribute chrome is expected.",
354
544
  "deterministicFix": "Use the documented blank-with-attributes/region appearance for KPI strips unless requirements explicitly need a titled wrapper.",
@@ -424,20 +614,65 @@
424
614
  "deterministicFix": "Update the page alias to the uppercase filename slug, for example p00001-home.apx must declare alias: HOME, or rename the file to match the intended alias.",
425
615
  "owningGuidance": ["references/policies/memory-bank/30-pages/apex.page.md"]
426
616
  },
617
+ "PAGE_DIRECT_PROPERTY_INVALID_001": {
618
+ "cause": "A page declaration redundantly emits an unsupported direct page property such as page: 1.",
619
+ "deterministicFix": "Remove the direct page property. Keep the page number only in the top-level declaration, for example page 1 (.",
620
+ "owningGuidance": ["references/policies/memory-bank/30-pages/apex.page.md"]
621
+ },
427
622
  "PAGE_FILENAME_NUMBER_MISMATCH_001": {
428
623
  "cause": "The canonical page filename number does not match the page declaration.",
429
624
  "deterministicFix": "Update the page declaration number or rename the file so pNNNNN-*.apx and page N agree.",
430
625
  "owningGuidance": ["references/policies/memory-bank/30-pages/apex.page.md"]
431
626
  },
432
- "SMART_FILTER_MAP_TARGET_COLUMNS_REQUIRED_001": {
433
- "cause": "Smart Filters target a map region whose layer source does not project/filter the required columns.",
434
- "deterministicFix": "Retarget Smart Filters to a companion report/cards results region and refresh the sibling map explicitly.",
435
- "owningGuidance": ["references/policies/memory-bank/30-pages/apex.smart-filter-search.md", "references/policies/memory-bank/30-pages/apex.map-page.md"]
436
- },
437
- "SMART_FILTER_MAP_TARGET_UNSUPPORTED_001": {
438
- "cause": "Smart Filters target a map region directly, which is not valid for the current generation contract.",
439
- "deterministicFix": "Create or use a companion report/cards results region as filteredRegion, keep the map as a sibling visualization, and refresh the map explicitly after Smart Filter changes.",
440
- "owningGuidance": ["references/policies/memory-bank/30-pages/apex.smart-filter-search.md", "references/policies/memory-bank/30-pages/apex.map-page.md"]
627
+ "RDS_CONTROLLER_REQUIRED_001": {
628
+ "cause": "One or more page regions opt into a Region Display Selector, but the page has no RDS controller.",
629
+ "deterministicFix": "Add one page-level type: regionDisplaySelector controller or remove advanced.regionDisplaySelector from the orphaned targets.",
630
+ "owningGuidance": ["references/domains/page-components/regions/region-display-selector/workflow-region-display-selector.md"]
631
+ },
632
+ "RDS_CONTROLLER_SELF_TARGET_FORBIDDEN_001": {
633
+ "cause": "The Region Display Selector controller opts itself into its controlled-region set.",
634
+ "deterministicFix": "Remove advanced.regionDisplaySelector from the controller. Keep the flag only on explicitly selected sibling content regions.",
635
+ "owningGuidance": ["references/domains/page-components/regions/region-display-selector/workflow-region-display-selector.md"]
636
+ },
637
+ "RDS_MINIMUM_TARGETS_REQUIRED_001": {
638
+ "cause": "The Region Display Selector has fewer than two eligible sibling targets.",
639
+ "deterministicFix": "Resolve at least two page-level sibling content regions and set advanced.regionDisplaySelector: true on those exact regions.",
640
+ "owningGuidance": ["references/domains/page-components/regions/region-display-selector/workflow-region-display-selector.md"]
641
+ },
642
+ "RDS_SHOW_ALL_MODE_REQUIRED_001": {
643
+ "cause": "settings.includeShowAll is missing from View Single Region mode or is emitted for Scroll Window mode where the property is inactive.",
644
+ "deterministicFix": "For mode: viewSingleRegion, emit includeShowAll explicitly. For mode: scrollWindow, remove includeShowAll.",
645
+ "owningGuidance": ["references/domains/page-components/regions/region-display-selector/workflow-region-display-selector.md"]
646
+ },
647
+ "RDS_SIBLING_TARGET_REQUIRED_001": {
648
+ "cause": "An RDS controller or selected target is nested instead of being a page-level sibling region.",
649
+ "deterministicFix": "Move the controller or target to page level, or remove advanced.regionDisplaySelector from the nested region.",
650
+ "owningGuidance": ["references/domains/page-components/regions/region-display-selector/workflow-region-display-selector.md"]
651
+ },
652
+ "RDS_SINGLE_CONTROLLER_REQUIRED_001": {
653
+ "cause": "A page defines multiple Region Display Selector controllers even though target regions have no controller-specific membership key.",
654
+ "deterministicFix": "Keep one RDS controller on the page and one unambiguous controlled-region set.",
655
+ "owningGuidance": ["references/domains/page-components/regions/region-display-selector/workflow-region-display-selector.md"]
656
+ },
657
+ "RDS_TARGET_ICON_REQUIRED_001": {
658
+ "cause": "The RDS displays region icons but a selected region has no appearance.icon.",
659
+ "deterministicFix": "Add one Font APEX catalogue-valid appearance.icon to every selected region, or set displayRegionIcons: false.",
660
+ "owningGuidance": ["references/domains/page-components/regions/region-display-selector/workflow-region-display-selector.md", "assets/indexes/font-apex-icon-index.json"]
661
+ },
662
+ "RDS_TARGET_LOCATION_FORBIDDEN_001": {
663
+ "cause": "A breadcrumb or header-region target is opted into the Region Display Selector.",
664
+ "deterministicFix": "Remove advanced.regionDisplaySelector from breadcrumb/header regions and select only eligible page content regions.",
665
+ "owningGuidance": ["references/domains/page-components/regions/region-display-selector/workflow-region-display-selector.md"]
666
+ },
667
+ "RDS_TARGET_DOM_ID_REQUIRED_001": {
668
+ "cause": "Selection persistence is enabled but a selected region has no stable static ID.",
669
+ "deterministicFix": "Add a stable lowercase advanced.htmlDomId to every selected region, or set rememberSelection: false.",
670
+ "owningGuidance": ["references/domains/page-components/regions/region-display-selector/workflow-region-display-selector.md"]
671
+ },
672
+ "RDS_REGION_STATIC_ID_FORBIDDEN_001": {
673
+ "cause": "A Region Display Selector controller or selected region uses advanced.staticId, which the target APEXlang validator rejects for regions.",
674
+ "deterministicFix": "Replace advanced.staticId with advanced.htmlDomId on the affected RDS controller or selected region.",
675
+ "owningGuidance": "references/domains/page-components/regions/region-display-selector/workflow-region-display-selector.md"
441
676
  },
442
677
  "SMART_FILTER_RESULTS_REGION_ORDER_REQUIRED_001": {
443
678
  "cause": "Smart Filters are not ordered before their result region.",
@@ -446,19 +681,74 @@
446
681
  },
447
682
  "SMART_FILTER_RESULTS_REGION_REQUIRED_001": {
448
683
  "cause": "Smart Filters do not have a valid results region target.",
449
- "deterministicFix": "Add or reference a supported report/cards-style results region such as Classic Report, Interactive Report/Grid, Cards, or Content Row; do not target maps or filter components.",
684
+ "deterministicFix": "For APEX 24.2, reference one Classic Report, Cards, Map, or Calendar region. For Map, target its region static id and prove the single layer source. Do not target Interactive Report/Grid, Content Row, layers, or filter components.",
450
685
  "owningGuidance": ["references/policies/memory-bank/30-pages/apex.smart-filter-search.md"]
451
686
  },
687
+ "SMART_FILTER_TOPOLOGY_REQUIRED_001": {
688
+ "cause": "A Smart Filter Search page has multiple Smart Filters regions, an invalid filteredRegion shape, or an ambiguous base-region static id.",
689
+ "deterministicFix": "Keep exactly one Smart Filters region, set source.filteredRegion to one explicit @<base-region-static-id> reference, and make that target static id unique on the page.",
690
+ "owningGuidance": ["references/policies/memory-bank/30-pages/apex.smart-filter-search.md", "references/policies/memory-bank/40-components/apex.region-interactions.md"]
691
+ },
692
+ "SMART_FILTER_BASE_SOURCE_CONTRACT_REQUIRED_001": {
693
+ "cause": "The Smart Filter Generation Plan does not prove a secured-view or canonical-SQL base source, its objects and explicit projection, or the decision to preserve the supplied SQL unchanged.",
694
+ "deterministicFix": "Select secured_view or canonical_sql, record named schema_doc, live_db, or user_asserted evidence matching every actual source object and projected column, prove object_type view plus secured true for a secured view, and preserve the supplied base_source.canonical_sql exactly. Keep the projection explicit and no_rewrite true. Stop with Missing Inputs while any evidence is unresolved.",
695
+ "owningGuidance": ["references/policies/memory-bank/00-guard/ai.guard.md", "references/policies/memory-bank/30-pages/apex.smart-filter-search.md"]
696
+ },
452
697
  "SMART_FILTER_SETTINGS_UNSUPPORTED_001": {
453
- "cause": "A Smart Filters region emits settings unsupported by APEX 26.1 compiler metadata.",
454
- "deterministicFix": "Remove the Smart Filters settings block and express counts, exports, and UX affordances through the filtered results region unless compiler truth for the active build proves a valid settings group.",
698
+ "cause": "The active compiler does not support a required Smart Filters setting, whether emitted or omitted, or an emitted setting is unsupported or inactive.",
699
+ "deterministicFix": "Stop with Missing Inputs and record each unresolved required setting. Resolve support against the target build or obtain explicit approval for an alternative that satisfies the requirement, then revalidate. Do not treat deleting a required setting or moving its behavior to the results region as a completed repair. Never emit unsupported DSL.",
700
+ "owningGuidance": ["references/policies/memory-bank/30-pages/apex.smart-filter-search.md", "templates/region-components/smart-filter-search/smart-filter-search._common.md"]
701
+ },
702
+ "SMART_FILTER_SETTINGS_COMPILER_EVIDENCE_REQUIRED_001": {
703
+ "cause": "Active compiler metadata is unavailable, cannot resolve the Smart Filters region contract, or exposes a generic plug-in attribute sink without the native settings inventory, even when its settings block is omitted.",
704
+ "deterministicFix": "Resolve native plug-in metadata or direct compiler evidence for the target APEX build and rerun validation. Missing native attribute inventory does not prove settings are unsupported. Do not delete required settings or copy settings from ticket prose or templates without compiler evidence.",
705
+ "owningGuidance": ["references/policies/memory-bank/00-guard/ai.guard.md", "templates/region-components/smart-filter-search/smart-filter-search._common.md"]
706
+ },
707
+ "SMART_FILTER_SETTINGS_VALUE_REQUIRED_001": {
708
+ "cause": "One or more compiler-supported Smart Filters settings are missing, use the wrong AUX-2682 value, or violate the total-row-count label condition.",
709
+ "deterministicFix": "For properties exposed by the target compiler, set maxSuggestionChips to 100, moreFiltersSuggestionChip to true, compactNosThreshold to 10000, and showTotalRowCount explicitly. Set totalRowCountLabel to Results only when showTotalRowCount is true; omit it when false.",
710
+ "owningGuidance": ["references/policies/memory-bank/30-pages/apex.smart-filter-search.md", "templates/region-components/smart-filter-search/smart-filter-search._common.md"]
711
+ },
712
+ "SMART_FILTER_SEARCH_BEHAVIOR_CONTRACT_REQUIRED_001": {
713
+ "cause": "The Smart Filter Generation Plan does not fully freeze matching semantics, length bounds, tokenization behavior, or compiler representation evidence.",
714
+ "deterministicFix": "Select exactly one of contains, starts, or exact; set positive min_chars and max_len with max_len greater than or equal to min_chars; define trimming, repeated whitespace, punctuation boundaries, case normalization, accent normalization, duplicate tokens, and token order; then record property-level compiler evidence. Stop with Missing Inputs when the target compiler cannot represent the selected behavior.",
455
715
  "owningGuidance": ["references/policies/memory-bank/30-pages/apex.smart-filter-search.md", "templates/region-components/smart-filter-search/smart-filter-search._common.md"]
456
716
  },
457
717
  "SMART_FILTER_SEARCH_SOURCE_REQUIRED_001": {
458
718
  "cause": "Smart Filters search source or filtered columns are missing.",
459
- "deterministicFix": "Define the source database columns/search configuration and align them with the target results region source.",
719
+ "deterministicFix": "Add at least one type: search filter with a non-empty explicit source.dbColumns allowlist; do not use source.databaseColumn for free-text Smart Filter Search.",
720
+ "owningGuidance": ["references/policies/memory-bank/30-pages/apex.smart-filter-search.md"]
721
+ },
722
+ "SMART_FILTER_SEARCHABLE_COLUMNS_BASE_PROJECTION_REQUIRED_001": {
723
+ "cause": "Smart Filters searchable columns cannot be proven in the targeted base-region projection.",
724
+ "deterministicFix": "Use an explicit, provable base projection and remove every source.dbColumns entry not projected by that exact base source; do not widen or rewrite canonical SQL automatically.",
460
725
  "owningGuidance": ["references/policies/memory-bank/30-pages/apex.smart-filter-search.md"]
461
726
  },
727
+ "SMART_FILTER_SECURITY_SCOPE_MATCH_REQUIRED_001": {
728
+ "cause": "The Smart Filters region, its filtered base region, or a refinement child has a different effective authorization scheme or server-side condition.",
729
+ "deterministicFix": "Make the Smart Filters region and filtered base region inherit or declare the same authorizationScheme and exact serverSideCondition. Remove a refinement-specific override or make it exactly match that shared scope.",
730
+ "owningGuidance": ["references/policies/memory-bank/30-pages/apex.smart-filter-search.md", "references/policies/memory-bank/40-components/apex.region-interactions.md"]
731
+ },
732
+ "SMART_FILTER_REFINEMENT_SOURCE_SCOPE_REQUIRED_001": {
733
+ "cause": "A Smart Filter refinement column is outside the filtered base projection or its LOV/suggestion source can query an independent dataset.",
734
+ "deterministicFix": "Use one explicit source.databaseColumn projected by the filtered base region. Use lov.type distinctValues or static authored values and dynamic base-derived or static authored suggestions; remove shared, SQL-query, and function-body data sources.",
735
+ "owningGuidance": ["references/policies/memory-bank/30-pages/apex.smart-filter-search.md", "templates/region-components/smart-filter-search/smart-filter-search._common.md"]
736
+ },
737
+ "SMART_FILTER_PERFORMANCE_READINESS_REQUIRED_001": {
738
+ "cause": "Smart Filter performance readiness is claimed without complete index strategy, optimizer-statistics status, and expected-cardinality evidence.",
739
+ "deterministicFix": "Record expected cardinality and current statistics status, then document a compatible index/search strategy for every searchable attribute and selected match semantic. For contains matching, prove a text/function-based strategy or explicitly accept and review the scan cost.",
740
+ "owningGuidance": ["references/policies/memory-bank/30-pages/apex.smart-filter-search.md", "templates/region-components/smart-filter-search/smart-filter-search._common.md"]
741
+ },
742
+ "SMART_FILTER_ACCESSIBILITY_GUIDANCE_REQUIRED_001": {
743
+ "cause": "A Smart Filter child lacks a concise visible label or useful help/comments guidance, or its Generation Plan omits the accessibility acceptance boundary.",
744
+ "deterministicFix": "Add a concise label and behavior-specific help or comments to every search/refinement child, then record the supported search landmark/focus-order decision in the Smart Filter Generation Plan.",
745
+ "owningGuidance": ["references/policies/memory-bank/30-pages/apex.smart-filter-search.md", "templates/region-components/smart-filter-search/smart-filter-search._common.md"]
746
+ },
747
+ "SMART_FILTER_RUNTIME_ACCEPTANCE_REQUIRED_001": {
748
+ "cause": "The Smart Filter Generation Plan does not prove refresh without a page reload and filtered export behavior.",
749
+ "deterministicFix": "Record runtime acceptance evidence that native Smart Filter changes refresh the authoritative results region without a full page reload and that CSV/PDF/download exports honor the active security scope and filters.",
750
+ "owningGuidance": ["references/policies/memory-bank/30-pages/apex.smart-filter-search.md", "references/policies/memory-bank/40-components/apex.region-interactions.md"]
751
+ },
462
752
  "SQL_INLINE_BLOCK_001": {
463
753
  "cause": "Inline SQL body exceeds the APEX artifact size gate.",
464
754
  "deterministicFix": "Extract the query to a secure view or shorter API-backed source, then point the APEX artifact at that view/source.",
@@ -494,6 +784,71 @@
494
784
  "deterministicFix": "Replace the stale value with the live-valid emitted value, such as js-dialog-class-t-Drawer--pullOutEnd for drawer end/right, or standalone #DEFAULT# for title-bar breadcrumbs.",
495
785
  "owningGuidance": ["references/policies/memory-bank/40-components/apex.templates.md"]
496
786
  },
787
+ "TIMELINE_AVATAR_BLOCK_REQUIRED_001": {
788
+ "cause": "Timeline settings.displayAvatar and the nested plugin-avatar block are inconsistent.",
789
+ "deterministicFix": "When displayAvatar is true, add plugin-avatar with type, shape, and exactly one matching payload. When Avatar display is omitted or false, remove plugin-avatar.",
790
+ "owningGuidance": ["references/domains/template-components/timeline.md"]
791
+ },
792
+ "TIMELINE_AVATAR_PAYLOAD_REQUIRED_001": {
793
+ "cause": "A Timeline plugin-avatar omits the payload selected by type or mixes icon, image, and initials payloads.",
794
+ "deterministicFix": "Choose exactly one Timeline Avatar type—icon, image, or initials—emit only its matching payload, and remove the other payload properties.",
795
+ "owningGuidance": ["references/domains/template-components/timeline.md"]
796
+ },
797
+ "TIMELINE_BADGE_BLOCK_REQUIRED_001": {
798
+ "cause": "Timeline settings.displayBadge and the nested plugin-badge block are inconsistent.",
799
+ "deterministicFix": "When displayBadge is true, add plugin-badge with label and value. When Badge display is omitted or false, remove plugin-badge.",
800
+ "owningGuidance": ["references/domains/template-components/timeline.md"]
801
+ },
802
+ "COMMENTS_AVATAR_BLOCK_REQUIRED_001": {
803
+ "cause": "Comments settings.displayAvatar and the nested plugin-avatar block are inconsistent.",
804
+ "deterministicFix": "When displayAvatar is true, add plugin-avatar with type, shape, and exactly one matching payload. When Avatar display is omitted or false, remove plugin-avatar.",
805
+ "owningGuidance": ["references/domains/template-components/comments.md"]
806
+ },
807
+ "COMMENTS_AVATAR_PAYLOAD_REQUIRED_001": {
808
+ "cause": "A Comments plugin-avatar omits the payload selected by type or mixes icon, image, and initials payloads.",
809
+ "deterministicFix": "Choose exactly one Comments Avatar type—icon, image, or initials—emit only its matching payload, and remove the other payload properties.",
810
+ "owningGuidance": ["references/domains/template-components/comments.md"]
811
+ },
812
+ "COMMENTS_AVATAR_INITIALS_COLUMN_REQUIRED_001": {
813
+ "cause": "A Comments initials Avatar does not reference a declared uppercase varchar2 child column.",
814
+ "deterministicFix": "Project a dedicated initials value, declare its uppercase child column with dataType: varchar2, and map plugin-avatar.initials directly to that column identifier.",
815
+ "owningGuidance": ["references/domains/template-components/comments.md"]
816
+ },
817
+ "COMMENTS_TASKS_INITIALS_UNAVAILABLE_001": {
818
+ "cause": "A Comments initials Avatar maps INITIALS from sampleData: tasks, but the target runtime does not expose that column.",
819
+ "deterministicFix": "Replace the Tasks sample source for this initials permutation with a verified SQL source that projects a dedicated varchar2 AVATAR_INITIALS column, or omit the initials permutation.",
820
+ "owningGuidance": ["references/domains/template-components/comments.md"]
821
+ },
822
+ "COMMENTS_PARTIAL_SINGLE_ROW_REQUIRED_001": {
823
+ "cause": "A partial Comments component uses a source whose one-row cardinality is not locally proven.",
824
+ "deterministicFix": "Use a verified SQL source with an explicit fetch first 1 row only or rownum one-row bound, or change componentAppearance.display to report.",
825
+ "owningGuidance": ["references/domains/template-components/comments.md"]
826
+ },
827
+ "COMMENTS_PARTIAL_REPORT_BLOCK_FORBIDDEN_001": {
828
+ "cause": "A partial Comments component defines one or more report-only behavior blocks.",
829
+ "deterministicFix": "Remove rowSelection, performance, pagination, entityTitle, messages, and advanced from partial Comments, or change componentAppearance.display to report when report behavior is required.",
830
+ "owningGuidance": ["references/domains/template-components/comments.md"]
831
+ },
832
+ "COMMENTS_DISPLAY_STYLE_CONTRACT_001": {
833
+ "cause": "The Comments style setting does not match the compiler-backed display mode.",
834
+ "deterministicFix": "Remove settings.style from partial Comments, or add style: basic or style: chatSpeechBubbles to report Comments.",
835
+ "owningGuidance": ["references/domains/template-components/comments.md"]
836
+ },
837
+ "COMMENTS_RENDERING_VALUE_SAFE_REQUIRED_001": {
838
+ "cause": "Comments attributes or commentClass contains scriptable markup, handlers, URL schemes, substitutions, or an unproven dynamic CSS mapping.",
839
+ "deterministicFix": "Remove scriptable content. Use safe static attributes text and static CSS tokens, or map commentClass directly to a declared varchar2 child column.",
840
+ "owningGuidance": ["references/domains/template-components/comments.md"]
841
+ },
842
+ "COMMENTS_MAPPING_REQUIRED_001": {
843
+ "cause": "A Comments userName, commentText, or date mapping does not resolve to a declared child column.",
844
+ "deterministicFix": "Project the source value, declare its uppercase Comments child column, and map settings.userName, settings.commentText, or settings.date directly to that column identifier.",
845
+ "owningGuidance": ["references/domains/template-components/comments.md"]
846
+ },
847
+ "COMMENTS_REPORT_OPTION_REQUIRED_001": {
848
+ "cause": "A Comments report option contains a value outside the compiler-supported contract.",
849
+ "deterministicFix": "Omit rowSelection for no selection, or use focusOnly, singleSelection, or multipleSelection when selection is requested; use pagination.type: page and a positive integer for pagination.entitiesPerPage.",
850
+ "owningGuidance": ["references/domains/template-components/comments.md"]
851
+ },
497
852
  "THEME_BASE_THEME_REQUIRED_001": {
498
853
  "cause": "Universal Theme definition omits baseTheme.",
499
854
  "deterministicFix": "Add the required baseTheme value from the scaffold/theme template and keep theme vocabulary canonical for the supported APEXlang build.",
@@ -131,7 +131,7 @@
131
131
  "stop when verified db-backed output lacks authoritative object and column evidence"
132
132
  ],
133
133
  "db_prompt_flow": {
134
- "prompt_mode": "explicit_db_connection_and_workspace_flow",
134
+ "prompt_mode": "discovery_first_connection_flow",
135
135
  "interactive_only": true,
136
136
  "discovery_steps": [
137
137
  "inspect_offline_schema_registry",
@@ -139,25 +139,22 @@
139
139
  ],
140
140
  "metadata_preference": "prefer_authoritative_offline_context",
141
141
  "required_live_inputs": [
142
- "db_connection_name",
143
- "db_context.workspace.name"
142
+ "db_connection_name"
144
143
  ],
145
- "auto_bind_single_saved_connection": false,
144
+ "auto_bind_single_saved_connection": true,
146
145
  "manual_entry": {
147
146
  "input_name": "db_connection_name",
148
- "companion_input_name": "apex_workspace_name",
149
- "workspace_context_field": "db_context.workspace.name",
150
- "prompt": "Provide db_connection_name and the corresponding APEX workspace name for this workflow."
147
+ "prompt": "Provide db_connection_name because no usable saved SQLcl connection could be resolved."
151
148
  },
152
149
  "workspace_prompt": {
153
150
  "input_name": "apex_workspace_name",
154
151
  "context_field": "db_context.workspace.name",
155
- "prompt": "Provide the APEX workspace name that corresponds to db_connection_name."
152
+ "prompt": "Choose the workspace reported by the active runtime when it cannot resolve a unique workspace."
156
153
  },
157
154
  "multiple_connection_prompt": {
158
155
  "source": "saved_sqlcl_connections",
159
156
  "prompt_mode": "select_from_list",
160
- "empty_list_prompt": "No saved SQLcl connections were found. Provide db_connection_name and the corresponding APEX workspace name if live DB context is still required, or continue only with authoritative offline metadata."
157
+ "empty_list_prompt": "No saved SQLcl connections were found. Provide db_connection_name if live DB context is still required, or continue only with authoritative offline metadata."
161
158
  },
162
159
  "offline_override": {
163
160
  "prompt_mode": "explicit_opt_in",
@@ -169,7 +166,7 @@
169
166
  "disables_apex_import": true
170
167
  },
171
168
  "workspace_selection": {
172
- "prompt_mode": "explicit_workspace_name_required",
169
+ "prompt_mode": "runtime_ambiguity_or_new_app_only",
173
170
  "persistence": "session_context_only",
174
171
  "context_path": "APEXLANG_OUTPUT_ROOT/context-resolution.json",
175
172
  "context_field": "db_context.workspace",