@shundoo-ai/dsh-cosmic 1.0.19 → 1.0.21

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 (245) hide show
  1. package/cordis.patch.yml +5 -5
  2. package/package.json +1 -1
  3. package/skills/cosmic-build/CHANGELOG.md +4 -0
  4. package/skills/cosmic-build/LOCAL-PATCHES.md +91 -40
  5. package/skills/cosmic-build/SKILL.md +46 -13
  6. package/skills/cosmic-build/assets/platform-report-filters/TypedReportFilterFields.java +169 -0
  7. package/skills/cosmic-build/assets/platform-report-filters/platform.patch +98 -0
  8. package/skills/cosmic-build/assets/report-algo-benchmark/ReportAlgoBenchmark.java +48 -0
  9. package/skills/cosmic-build/assets/report-algo-benchmark/ReportBenchmarkLogFactory.java +7 -0
  10. package/skills/cosmic-build/examples/java-rules/CosmicEntryQuery.java +26 -0
  11. package/skills/cosmic-build/examples/java-rules/CosmicReportAggregation.java +35 -0
  12. package/skills/cosmic-build/examples/java-rules/CosmicReportFilters.java +77 -0
  13. package/skills/cosmic-build/examples/java-rules/CosmicTimeAdapter.java +25 -0
  14. package/skills/cosmic-build/examples/java-rules/CosmicTimeAdapterCheck.java +26 -0
  15. package/skills/cosmic-build/knowledge/cosmic/platform/api/algo/GroupbyDataSet.md +47 -0
  16. package/skills/cosmic-build/knowledge/cosmic/platform/api/entity/report/FilterInfo.md +12 -12
  17. package/skills/cosmic-build/knowledge/cosmic/platform/api/entity/report/FilterItemInfo.md +2 -0
  18. package/skills/cosmic-build/knowledge/cosmic/platform/form-plugin.md +2 -4
  19. package/skills/cosmic-build/knowledge/cosmic/platform/java-type-contracts.md +11 -2
  20. package/skills/cosmic-build/knowledge/cosmic/platform/list-plugin.md +18 -14
  21. package/skills/cosmic-build/knowledge/cosmic/platform/operation-plugin.md +4 -4
  22. package/skills/cosmic-build/knowledge/cosmic/platform/reportlistdata-plugin.md +17 -9
  23. package/skills/cosmic-build/knowledge/cosmic/platform/scenes/operation/cross-entity-aggregate-writeback.md +2 -0
  24. package/skills/cosmic-build/knowledge/cosmic/platform/scenes/operation/pre-post-operation.md +15 -7
  25. package/skills/cosmic-build/knowledge/cosmic/platform/sdk/sdk-algo.md +24 -68
  26. package/skills/cosmic-build/knowledge/cosmic/platform/workflow-plugin.md +2 -7
  27. package/skills/cosmic-build/references/application-context.md +35 -1
  28. package/skills/cosmic-build/references/common-reference.md +1 -1
  29. package/skills/cosmic-build/references/compile-guide.md +55 -68
  30. package/skills/cosmic-build/references/delivery.md +59 -7
  31. package/skills/cosmic-build/references/execution-contract.md +38 -0
  32. package/skills/cosmic-build/references/form-discovery.md +7 -1
  33. package/skills/cosmic-build/references/java-plugin-delivery.md +32 -162
  34. package/skills/cosmic-build/references/operation-dispatch.md +17 -0
  35. package/skills/cosmic-build/references/plugin-handoff-input.md +131 -0
  36. package/skills/cosmic-build/references/plugin-runtime-routing.md +1 -1
  37. package/skills/cosmic-build/references/report-filter-contract.md +78 -0
  38. package/skills/cosmic-build/references/sdk-inspection.md +23 -0
  39. package/skills/cosmic-build/schemas/data-model-authoring.schema.json +2 -3
  40. package/skills/cosmic-build/scripts/_http_client.py +55 -55
  41. package/skills/cosmic-build/scripts/appconfig_load.py +2 -2
  42. package/skills/cosmic-build/scripts/apply_report_filter_extension.py +39 -0
  43. package/skills/cosmic-build/scripts/bootstrap_cosmic_context.py +37 -2
  44. package/skills/cosmic-build/scripts/compile_plugin_source.py +279 -156
  45. package/skills/cosmic-build/scripts/execution_binding.py +40 -0
  46. package/skills/cosmic-build/scripts/inspect_platform_sdk.py +169 -0
  47. package/skills/cosmic-build/scripts/kd_api.py +23 -22
  48. package/skills/cosmic-build/scripts/kd_auth.py +1 -1
  49. package/skills/cosmic-build/scripts/kd_env_loader.py +19 -10
  50. package/skills/cosmic-build/scripts/kd_token_cache.py +2 -2
  51. package/skills/cosmic-build/scripts/kingscript_sdk_sync.py +350 -0
  52. package/skills/cosmic-build/scripts/kingscript_source_gate.py +11 -8
  53. package/skills/cosmic-build/scripts/platform_api_contract.py +246 -11
  54. package/skills/cosmic-build/scripts/plugin_corpus/build_index.py +403 -0
  55. package/skills/cosmic-build/scripts/plugin_corpus/jvm_classfile.py +281 -0
  56. package/skills/cosmic-build/scripts/plugin_corpus/measure_api_usage.py +446 -0
  57. package/skills/cosmic-build/scripts/plugin_source_gate.py +48 -7
  58. package/skills/cosmic-build/scripts/plugin_target_sdk.py +45 -0
  59. package/skills/cosmic-build/scripts/prepare_plugin_handoff.py +493 -47
  60. package/skills/cosmic-build/scripts/preview_url.py +35 -6
  61. package/skills/cosmic-build/scripts/query_plugin_handoff.py +250 -0
  62. package/skills/cosmic-build/scripts/register_plugins.py +28 -2
  63. package/skills/cosmic-build/scripts/render_output_cards.py +42 -9
  64. package/skills/cosmic-build/scripts/report_algo_benchmark.py +46 -0
  65. package/skills/cosmic-build/scripts/run.py +2 -2
  66. package/skills/cosmic-build/scripts/sync_generated_locale_assets.py +43 -0
  67. package/skills/cosmic-build/scripts/test/fixtures/ReportSdkCheck.java +64 -0
  68. package/skills/cosmic-build/scripts/test/fixtures/java_context_booking_native.json +541 -0
  69. package/skills/cosmic-build/scripts/test/test_add_rule_business_contract.py +85 -14
  70. package/skills/cosmic-build/scripts/test/test_batch5_drift_governance.py +12 -3
  71. package/skills/cosmic-build/scripts/test/test_build_meta_order.py +0 -16
  72. package/skills/cosmic-build/scripts/test/test_cli_continuation.py +87 -0
  73. package/skills/cosmic-build/scripts/test/test_compile_plugin_source.py +224 -3
  74. package/skills/cosmic-build/scripts/test/test_control_authoring.py +123 -4
  75. package/skills/cosmic-build/scripts/test/test_cosmic_sdk_examples.py +141 -0
  76. package/skills/cosmic-build/scripts/test/test_data_model_contract.py +30 -5
  77. package/skills/cosmic-build/scripts/test/test_delivery_stage_boundary.py +2 -10
  78. package/skills/cosmic-build/scripts/test/test_dym_sync_background.py +11 -0
  79. package/skills/cosmic-build/scripts/test/test_dynamic_form_metadata_only_contract.py +59 -1
  80. package/skills/cosmic-build/scripts/test/test_guide_skeleton_contract.py +87 -43
  81. package/skills/cosmic-build/scripts/test/test_inspect_platform_sdk.py +71 -0
  82. package/skills/cosmic-build/scripts/test/test_kd_api.py +67 -19
  83. package/skills/cosmic-build/scripts/test/test_kingscript_sdk_sync.py +221 -0
  84. package/skills/cosmic-build/scripts/test/test_kingscript_source_gate.py +10 -0
  85. package/skills/cosmic-build/scripts/test/test_list_configuration_closure.py +18 -0
  86. package/skills/cosmic-build/scripts/test/test_long_session_regressions.py +116 -0
  87. package/skills/cosmic-build/scripts/test/test_mcp_cli.py +524 -0
  88. package/skills/cosmic-build/scripts/test/test_modeling_input_recovery.py +141 -0
  89. package/skills/cosmic-build/scripts/test/test_open_world_cli_catalog.py +36 -2
  90. package/skills/cosmic-build/scripts/test/test_platform_api_contract.py +161 -1
  91. package/skills/cosmic-build/scripts/test/test_plugin_business_contract.py +91 -0
  92. package/skills/cosmic-build/scripts/test/test_plugin_corpus.py +195 -0
  93. package/skills/cosmic-build/scripts/test/test_plugin_handoff.py +346 -1
  94. package/skills/cosmic-build/scripts/test/test_plugin_target_sdk.py +70 -0
  95. package/skills/cosmic-build/scripts/test/test_preview_url.py +44 -1
  96. package/skills/cosmic-build/scripts/test/test_property_batch.py +22 -0
  97. package/skills/cosmic-build/scripts/test/test_property_input_discovery.py +13 -11
  98. package/skills/cosmic-build/scripts/test/test_query_plugin_handoff.py +160 -0
  99. package/skills/cosmic-build/scripts/test/test_register_plugins.py +31 -1
  100. package/skills/cosmic-build/scripts/test/test_render_output_cards.py +50 -4
  101. package/skills/cosmic-build/scripts/test/test_report_business_contract.py +27 -0
  102. package/skills/cosmic-build/scripts/test/test_report_doc_contract_sync.py +5 -4
  103. package/skills/cosmic-build/scripts/test/test_report_sdk_optimization.py +36 -0
  104. package/skills/cosmic-build/scripts/test/test_rule_batch_evidence.py +1 -1
  105. package/skills/cosmic-build/scripts/test/test_rule_domain_contract.py +20 -0
  106. package/skills/cosmic-build/scripts/test/test_rule_function_formula.py +16 -6
  107. package/skills/cosmic-build/scripts/test/test_skill_entry_contract.py +1 -0
  108. package/skills/cosmic-build/scripts/test/test_test_environment.py +45 -0
  109. package/skills/cosmic-build/scripts/test/test_verify_plugin_loading.py +79 -0
  110. package/skills/cosmic-build/scripts/test_environment.py +49 -0
  111. package/skills/cosmic-build/scripts/verify_plugin_loading.py +71 -0
  112. package/skills/cosmic-build/skills/cosmic-coding-impl/SKILL.md +86 -162
  113. package/skills/cosmic-build/skills/cosmic-coding-script/ATTRIBUTION.md +1 -1
  114. package/skills/cosmic-build/skills/cosmic-coding-script/SKILL.md +45 -14
  115. package/skills/cosmic-build/skills/cosmic-coding-script/references/kwc-controller-authoring.md +6 -0
  116. package/skills/cosmic-build/skills/cosmic-coding-script/references/sdk/README.md +29 -19
  117. package/skills/cosmic-build/skills/cosmic-coding-script/references/sdk/docs//350/204/232/346/234/254SDK.md +3 -4
  118. package/skills/cosmic-build/skills/cosmic-coding-script/references/sdk/indexes/package-index.md +1 -1
  119. package/skills/cosmic-build/skills/cosmic-coding-script/references/sdk/strategy.md +27 -18
  120. package/skills/cosmic-build/skills/cosmic-meta-api/SKILL.md +11 -17
  121. package/skills/cosmic-build/skills/cosmic-meta-api/apis/ai_meta.md +1 -1
  122. package/skills/cosmic-build/skills/cosmic-meta-api/apis/app_menu.md +1 -1
  123. package/skills/cosmic-build/skills/cosmic-meta-api/apis/meta_log.md +1 -1
  124. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/control-authoring.json +45 -4
  125. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/form-control-traits.json +1 -1
  126. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/layout-ui.json +18 -0
  127. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/menu-publish.json +8 -2
  128. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/property-batch.json +7 -0
  129. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/property-input-index.json +3 -3
  130. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/report-write-contracts.json +1 -0
  131. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/rule-domain.json +37 -5
  132. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/rule-event-contract.json +24 -3
  133. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/run-build-meta.json +61 -12
  134. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/schema/dropdown-menu.schema.json +69 -0
  135. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/schema/report-write.schema.json +2 -1
  136. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/schema/rule-set.schema.json +1 -0
  137. package/skills/cosmic-build/skills/cosmic-meta-api/contracts/schema/rule-write.schema.json +14 -7
  138. package/skills/cosmic-build/skills/cosmic-meta-api/docs/api-summary.md +2 -2
  139. package/skills/cosmic-build/skills/cosmic-meta-api/modules/app-action/SKILL.md +6 -3
  140. package/skills/cosmic-build/skills/cosmic-meta-api/modules/develop/SKILL.md +1 -2
  141. package/skills/cosmic-build/skills/cosmic-meta-api/modules/export/SKILL.md +5 -6
  142. package/skills/cosmic-build/skills/cosmic-meta-api/modules/init/SKILL.md +13 -36
  143. package/skills/cosmic-build/skills/cosmic-meta-api/modules/pdm/SKILL.md +8 -9
  144. package/skills/cosmic-build/skills/cosmic-meta-api/modules/pdm/scripts/config.json.example +5 -15
  145. package/skills/cosmic-build/skills/cosmic-meta-api/modules/reset/SKILL.md +6 -6
  146. package/skills/cosmic-build/skills/cosmic-meta-api/modules/usage/SKILL.md +20 -148
  147. package/skills/cosmic-build/skills/cosmic-meta-api/modules/verify/SKILL.md +1 -1
  148. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/build_receipts.py +171 -0
  149. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_apps.py +25 -6
  150. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_controls.py +55 -21
  151. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_fields.py +10 -3
  152. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_formactions.py +63 -6
  153. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_forms.py +59 -2
  154. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_listui.py +8 -0
  155. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_metaops.py +36 -1
  156. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_plugins.py +115 -90
  157. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_properties.py +666 -4
  158. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_rules.py +1415 -87
  159. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/commands.py +6 -1
  160. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/config.py +28 -15
  161. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/execution_errors.py +40 -0
  162. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/formatters.py +32 -5
  163. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/property_policy_contract.py +6 -0
  164. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/report_ops.py +113 -17
  165. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/reset.py +3 -3
  166. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/rule_contract.py +107 -26
  167. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/build_meta_order.py +50 -49
  168. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/cosmic_api.py +856 -150
  169. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/field_decorator.py +47 -14
  170. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_build_receipt_resume.py +374 -0
  171. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_cli_failure_contract.py +24 -0
  172. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_creation_identity_boundary.py +4 -2
  173. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_dropdown_menu_contract.py +382 -0
  174. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_existing_form_ui.py +0 -25
  175. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_field_decorator.py +50 -6
  176. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_functional_group_resolution.py +83 -16
  177. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_identity_template_resolution.py +103 -0
  178. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_plugin_contract.py +28 -2
  179. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_readback_derivation.py +22 -0
  180. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_typed_filters.py +65 -0
  181. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_rule_write_closure.py +1041 -15
  182. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_run_batch_post_build_recovery.py +65 -0
  183. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_run_batch_verification_evidence.py +17 -0
  184. package/skills/cosmic-build/skills/cosmic-meta-knowledge/generation/api-param-checklist.md +1 -1
  185. package/skills/cosmic-build/skills/cosmic-meta-knowledge/generation/rule-modeling-guide.md +7 -4
  186. package/skills/cosmic-build/skills/cosmic-meta-modeling/SKILL.md +61 -13
  187. package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/app-menu/SKILL.md +8 -0
  188. package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/formtemplate/SKILL.md +5 -0
  189. package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/formtemplate/dynamic-form-artifact-schema.md +5 -0
  190. package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/report/SKILL.md +21 -9
  191. package/skills/cosmic-build/skills/cosmic-meta-modeling/references/authoring-entity-graphs.md +1 -1
  192. package/skills/cosmic-build/skills/cosmic-meta-modeling/references/authoring-storage-constraints.md +5 -3
  193. package/skills/cosmic-build/skills/cosmic-meta-modeling/references/authoring-ui-composition.md +6 -3
  194. package/skills/cosmic-build/skills/cosmic-meta-modeling/references/creation-recovery.md +13 -0
  195. package/skills/cosmic-build/skills/cosmic-meta-modeling/references/parse-core.md +3 -0
  196. package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/data_model_contract.py +6 -1
  197. package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/data_model_emit.py +135 -87
  198. package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/field_type_registry.py +11 -1
  199. package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/isv_resolver.py +1 -3
  200. package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/report_validator.py +29 -0
  201. package/skills/cosmic-build/skills/cosmic-meta-modifier/SKILL.md +4 -2
  202. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/context/SKILL.md +2 -2
  203. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/execute/SKILL.md +1 -1
  204. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/operation/SKILL.md +5 -4
  205. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/operation/operation-write.md +6 -2
  206. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/operation/validation.md +2 -0
  207. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/property/SKILL.md +20 -5
  208. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/property/complex-apis.md +1 -1
  209. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/property/policy-grammar.md +4 -1
  210. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/report-op/SKILL.md +9 -0
  211. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/SKILL.md +61 -4
  212. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/raw-rule-authoring.md +3 -1
  213. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/rule-actions.md +2 -2
  214. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/rule-reference.md +6 -6
  215. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/state.md +1 -1
  216. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/unit/SKILL.md +6 -3
  217. package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/verify/usage-guide.md +4 -4
  218. package/skills/cosmic-build/skills/cosmic-meta-modifier/references/list-filter-modification.md +4 -1
  219. package/skills/cosmic-build/skills/cosmic-meta-ui/SKILL.md +9 -1
  220. package/skills/cosmic-build/skills/cosmic-meta-ui/modules/button/SKILL.md +3 -0
  221. package/skills/cosmic-build/skills/mcp-server/SKILL.md +210 -0
  222. package/skills/cosmic-build/skills/mcp-server/scripts/mcp_cli.py +431 -0
  223. package/skills/cosmic-build/skills/openapi-gen/SKILL.md +3 -3
  224. package/skills/cosmic-build/skills/openapi-gen/scripts/api/gen_runner.py +2 -2
  225. package/skills/cosmic-dev-best-practices/references/bill-dev-convention.md +19 -9
  226. package/skills/cosmic-dev-best-practices/references/cosmic-meta-api.md +14 -11
  227. package/skills/cosmic-dev-best-practices/references/design-examples/basedata-design-example.md +1 -1
  228. package/skills/cosmic-dev-best-practices/references/design-examples/bill-design-example.md +1 -1
  229. package/skills/cosmic-dev-best-practices/references/elements/AssistantField.md +1 -1
  230. package/skills/cosmic-dev-best-practices/references/elements/BasedataField.md +2 -2
  231. package/skills/cosmic-dev-best-practices/references/elements/BasedataPropField.md +3 -3
  232. package/skills/cosmic-dev-best-practices/references/elements/CreaterField.md +2 -2
  233. package/skills/cosmic-dev-best-practices/references/elements/CurrencyField.md +2 -2
  234. package/skills/cosmic-dev-best-practices/references/elements/CustomerField.md +2 -2
  235. package/skills/cosmic-dev-best-practices/references/elements/FlexField.md +1 -1
  236. package/skills/cosmic-dev-best-practices/references/elements/MaterielField.md +2 -2
  237. package/skills/cosmic-dev-best-practices/references/elements/OrgField.md +2 -2
  238. package/skills/cosmic-dev-best-practices/references/elements/SupplierField.md +2 -2
  239. package/skills/cosmic-dev-best-practices/references/elements/UnitField.md +1 -1
  240. package/skills/cosmic-dev-best-practices/references/elements/UserField.md +3 -3
  241. package/skills/cosmic-dev-best-practices/references/elements/common-field-property-conventions.md +16 -11
  242. package/skills/cosmic-dev-best-practices/references/layout-control-convention.md +5 -4
  243. package/skills/erp-analysis/references/delivery-contract.md +4 -2
  244. package/skills/erp-analysis/templates/AGENTS.template.md +1 -1
  245. package/skills/cosmic-build/skills/cosmic-meta-api/scripts/.dsh/cosmic/.kd/config.json +0 -21
@@ -1,168 +1,38 @@
1
1
  # Java 插件交付
2
2
 
3
- 仅在元数据边界已验证、运行时行为仍需要 Java 时使用。稳定契约是:
3
+ 实现所选元数据入口无法表达的行为,`cosmic-coding-impl` 提供 Java 实现指导。
4
+ `{ROOT_DIR}` 是根技能提供的技能包目录。
5
+
6
+ 1. 通过[运行类型路由](plugin-runtime-routing.md)按业务触发点选择类型。
7
+ 2. 按[交接输入](plugin-handoff-input.md)从准确表单编码准备每个类,独立读取当前原生元数据。
8
+ 准备实施时加上 `--prepare-source`。
9
+ 3. 写源码前读取一次 [cosmic-coding-impl](../skills/cosmic-coding-impl/SKILL.md),
10
+ 准确路径使用准备结果中的 `codingEvidence.codingEntry`,完成源码和
11
+ [原生编译](compile-guide.md)。同模块中已准备好的多个源码可以共用一次批量构建。
12
+ 编译前对照 `codingEvidence.signatureTypes` 核对导入,对照保存的原生结构核对查询根实体、
13
+ 集合属性和字段路径。本轮源码问题一起处理,不把已知问题留到业务验收再修。
14
+ 4. 达到 `source_ready` 后注册已归档类,并验证注册结果:
4
15
 
5
16
  ```text
6
- 已验证元数据 → 已验证编码上下文 → AI 编码 → 窄编译 → 批量注册并读回
17
+ {python} "{ROOT_DIR}/scripts/register_plugins.py" --app-root "{appRoot}" --class-name "{fqcn1}" [--class-name "{fqcn2}"] --verify
7
18
  ```
8
19
 
9
- `ROOT_DIR` 是根技能提供的技能包目录。下文必须逐字使用它;本地化参考文件自身
10
- 所在目录不是技能包根目录。
11
-
12
- 技能负责保护苍穹特有的身份和生命周期契约,不规定类如何拆分、编码顺序、调试方式或是否使用
13
- 子 agent。
14
-
15
- ## 1. 准备已验证编码上下文
16
-
17
- 按 `references/plugin-runtime-routing.md` 一次确定 `type`。操作插件先创建必需的自定义操作,
18
- 并对受影响表单取得一次已验证的 `listOperations` 结果。
19
-
20
- 使用 CLI 自带输出文件参数保存纯 JSON,禁止用 shell 重定向:
21
-
22
- ```text
23
- {python} "{cosmic_api}" --output "{operations.json}" listOperations \
24
- --app-root "{appRoot}" --formNumber "{formNumber}"
25
- ```
26
-
27
- 把精简的业务意图直接传给上下文编译器:
28
-
29
- ```text
30
- {python} "{ROOT_DIR}/scripts/prepare_plugin_handoff.py" \
31
- --app-root "{appRoot}" --type "{type}" \
32
- --artifact "{artifact1}" [--artifact "{artifact2}"] \
33
- --run-result "{writeResultPath}" \
34
- [--operations-file "{listOperations.json}"] \
35
- [--external-schema "{entity.schema.json}"] --intent-json '<JSON>'
36
- ```
37
-
38
- `--run-result` 接受两种写入结果信封:`runBatch` 的逐制品 `results[]`,或报表流水线在其 `resultPath`
39
- (`{appRoot}/_runtime/output/last_result.run.json`)返回的单制品 `run` 汇总。没有捕获到写入结果时
40
- 整项省略,此时编译器只从制品中取身份。
41
-
42
- 报表直接把报表 Artifact 传进来即可。编译器把 `entities[0].formNumber` 读作表单身份,从
43
- `reportColumns[].{fieldKey, caption}` 取字段目录,并采用已注册的 `reportPlugins[].className` 的包名,
44
- 使编码出的类不会偏离平台将要加载的 FQCN。
45
-
46
- 意图只包含业务行为、触发点、相关表单,以及代码实际读写的实体和字段。优先使用准确的业务
47
- 显示名或 authoring ID;禁止自行拼接 ISV 前缀或猜测截断后的持久化 key。编译器负责从 emit
48
- 产物映射为已验证的真实 key;重名字段用 `form + entity + field` 限定。
49
-
50
- 每个映射到的字段都会在 `handoff.fieldContracts` 中返回制品所声明的 `fieldType`,引用字段还
51
- 额外带 `valueAccessor`、`idAccessor`、`filterValue`。这补上了 `fields` 只是一个
52
- `{label: key}` 裸映射所留下的缺口:引用字段的 `get()` 返回的是被引用的 DynamicObject,把这
53
- 个值写进 `QFilter` 能顺利编译,然后在数据库层以 `type=DynamicObject` 失败。这些契约原样传给
54
- 编码阶段。
55
-
56
- ```json
57
- {
58
- "form": "收款记录单",
59
- "relatedForm": "合同签订单",
60
- "trigger": "保存或提交成功后",
61
- "operationKeys": ["save", "submit"],
62
- "fields": {
63
- "receivedAmount": {"form": "收款记录单", "entity": "收款明细", "field": "收款金额"}
64
- },
65
- "coreLogic": ["汇总有效收款金额", "回写合同累计金额和收款状态"],
66
- "specialized": {
67
- "externalContracts": [],
68
- "unresolvedDependencies": []
69
- },
70
- "ownershipMode": "create-new"
71
- }
72
- ```
73
-
74
- `specialized.unresolvedDependencies` 必须显式声明。代码需要读取或影响 emit 产物之外的对象时,
75
- 要么在 `specialized.externalContracts` 中提供精确的数据/服务契约,要么把未决业务依赖写入
76
- `unresolvedDependencies`;非空时编译器直接阻断。来源实体、字段集合、服务身份或方法签名
77
- 仍未知时,禁止为了通过校验而填写空数组。`externalContracts` 的每一项从头到尾都是对象,所以要给出
78
- 真实形状(`{"entity": ..., "fields": [...]}`),不要写成一句散文。
79
-
80
- `externalContracts` 中带 `entity` 的条目是被校验的,不是被采信的。这里可使用准确的
81
- 表单/实体名称或编码及字段显示名;编译器会把它们解析成唯一实体和持久字段 key,歧义仍会
82
- 拒绝。把该表单读一次并传进来,与操作插件传 `listOperations` 完全同理:
83
-
84
- ```text
85
- {python} "{cosmic_api}" --output "{entity.schema.json}" getFormSchema --formNumber "{formNumber}"
86
- ```
87
-
88
- 缺少对应的 `--external-schema` 时,handoff 以 `PLUGIN_EXTERNAL_CONTRACT_UNVERIFIED` 阻断;声明的字段
89
- 在 read-back 中不存在时同样阻断,并点名最接近的候选。凭记忆写的 key 就是在这里被拦住的:`bos_user`
90
- 的手机字段是 `phone`,而按 `mobilephone` 编码此前会一路走到运行期。每个通过校验的条目都会带回
91
- `verifiedFields`,其中含每个字段真实的 `fieldKey`、`fieldName`、`fieldType`、`refEntity`,以及那些
92
- 值为记录 id 的引用类型的 `javaType` —— 它是 `Long`,把它的文本形式传进 `QFilter` 会在数据库层失败,
93
- 而不是在 Java 层失败。
94
-
95
- 修改已经存在的类使用 `ownershipMode: "modify"` 加真实的 `sourcePath`(`patch-existing` 视为
96
- 同一模式)。编译器会读取那个文件并回传 `handoff.existingMethods`,即其最外层类体已声明的方法
97
- 签名,使编码阶段把逻辑加进已经承载该触发时机的方法内,而不是在原有 `afterCreateNewData`
98
- 旁边再声明一个。`sourcePath` 不存在、或文件名不是 `{className}.java` 时以
99
- `PLUGIN_SOURCE_NOT_FOUND` 失败 —— 去定位那个类,不要降级为 `create-new`。
100
-
101
- 目标文件已经存在于该 Java 模块时(包括按类型约定推导出的类名),`create-new` 会以
102
- `PLUGIN_OWNERSHIP_CONFLICT` 被拒绝。这个冲突本身就是答案,不是障碍:把报出的路径作为
103
- `sourcePath` 回传,并改用 `ownershipMode: "modify"`。
104
-
105
- 优先使用 `--intent-json`。内联 JSON 是多行或含有 shell 敏感字符时改用 `--intent-file` —— 某些 shell
106
- 会把它拆开,命令在脚本运行前就失败。禁止预先为预计的每个插件各写一份文件。按内聚业务逐个准备并
107
- 编码,单个插件未解析时不得为全部插件重新建立计划图。
108
- 禁止并行准备多个插件交接:一个插件必须先达到 `source_ready`,再开始下一个;全部完成后只批量
109
- 注册一次。
110
-
111
- Java 模块根目录按此顺序解析:显式 `--java-project-root`、
112
- `context.javaProjectRoot/pluginProjectRoot`、当前绑定的工程根(当它含 `src/main/java`)、
113
- `appconfig.pluginProjects[appCode]`,最后是 appRoot 自身(当它含 `src/main/java`)。
114
- 以上全部落空且 `compile=false` 时,解析器会在 appRoot 下预置应用本地 `src/main/java`
115
- 并使用它:纯元数据工作区上的首次交付由此落进这个按应用固定的目录,而不是去问
116
- 类放哪。预置的是源码树,不是臆造的 Gradle 模块:交付以
117
- `source_ready (compile skipped by config)` 收口,且一旦配置了编译,真实 Gradle 模块
118
- 仍以更高优先级压过它。appconfig 是机器级配置且只以 appCode 为键,因此它只在
119
- 绑定的工程根不存在或不是 Java 模块时生效。工程根跟随绑定工程,因此
120
- `GRADLE_ROOT` 必须指向同一个 checkout:指向别处会以 `PLUGIN_MODULE_UNRESOLVED`
121
- 失败,因为它下面没有任何 Gradle 模块的 `projectDir` 等于该工程根。
122
- 出现 `PLUGIN_WORKSPACE_UNRESOLVED` 时——现在只在编译开启或未决、预置不生效时
123
- 才会到达——只询问一次现有
124
- Java 模块根目录并保存:
125
-
126
- ```text
127
- {python} "{ROOT_DIR}/scripts/appconfig_load.py" --save-plugin-project "{appCode}" \
128
- --plugin-project-root "{javaModuleRoot}"
129
- ```
130
-
131
- 禁止臆造 Gradle 模块或平台身份。未知外部数据或服务契约保持 `L3-BLOCK`,不得用 TODO 或
132
- 默认值掩盖。
133
-
134
- ## 2. 让 AI 正常编码
135
-
136
- 读取 `skills/cosmic-coding-impl/SKILL.md`,依据已验证上下文实现。当前 agent 可以直接编码;
137
- 只有子 agent 确实有助于并行或上下文隔离时才使用,不再强制派发,也不存在“一类一个 agent”规则。
138
-
139
- AI 自主决定类拆分、辅助方法复用、实现顺序和编译错误修复。必要时可以查看目标 Java 模块、
140
- 附近已有插件和准确的平台参考,但不得重新发现或替换已经验证的应用、表单、字段和操作身份。
141
-
142
- 每个需要注册的类必须达到 `source_ready`:窄编译通过且归档项已写入。这仍不代表已注册或
143
- 运行态业务已通过。
144
-
145
- 本环节不配置菜单,也不输出产物卡片;插件完成后由 app-build 输出卡片,并仅在用户明确要求时
146
- 处理菜单事项。
147
-
148
- ## 3. 确定性收口
149
-
150
- 所有必需类达到 `source_ready` 后批量注册:
151
-
152
- ```text
153
- {python} "{ROOT_DIR}/scripts/register_plugins.py" --app-root "{appRoot}" \
154
- --class-name "{fqcn1}" [--class-name "{fqcn2}"] --verify
155
- ```
156
-
157
- `register_plugins.py` 只读取 `write_archive_json.py` 写入的类归档,注册选中类,并对每个受影响
158
- 表单只读回一次,验证 `fqcn + targetType + operationKey`。禁止手改归档或退回猜测的注册载荷。
159
-
160
- 只报告最窄真实状态:`source_ready`、`source_ready(按配置跳过编译)`、`已编译并注册` 或
161
- `运行态已验证`。`compile_plugin_source.py` 返回 `compileSkipped=true` 时,该类是在没有编译证明的
162
- 情况下归档并注册的 —— 要如实说明,不得报告为 `已编译并注册`。把验证后的类和受影响表单身份交回
163
- app-build;产物卡片和用户明确要求的菜单事项仍由 app-build 最后完成。
164
-
165
- ## 4. 运行态验收独立
166
-
167
- 编译、注册和插件读回只证明可部署且注册存在。只有用户明确要求运行态验收并点名可用工具或
168
- 集成时,才执行真实业务操作;没有对应证据时只报告“已编译并注册”。
20
+ 注册会核对归档的 `sourceHash`、`compileStatus` 与当前源码。缺少证明或源码已变化时返回
21
+ 原生编译入口。失败时诊断同一类和目标,不通过更换运行类型获得注册成功。
22
+
23
+ 报告准确的类、受影响表单,并分别说明编译、注册和回读结果;注册后跳过的编译仍为跳过。
24
+ `activation.runtimeVerified=false` 表示尚未验证运行态生效与行为;`requiresServiceRestart=null`
25
+ 表示工具无法确定目标环境是否需要重启。注册回读本身不能证明插件已生效或业务正确。
26
+ 生效方式依据所选环境的部署契约和已有授权确定;后续源码变化后刷新原生检查,
27
+ 在运行态检查前核实目标实际运行的是更新后的版本。
28
+
29
+ 业务验收依据原始需求,验证真实状态流转和关联对象持久化,并核对校验没有增加未要求的副作用。
30
+ 插件检查失败时保留输入,并回读插件实际使用的日期、状态、引用 ID 等字段。改源码前,
31
+ 把候选原因与事件是否进入、查询命中数、运行插件版本及返回的校验错误等实测证据分开。
32
+ 证据无法取得时如实报告诊断缺口,不凭编译通过反复更换查询写法和重启。
33
+ 有证据支持的修复完成后,重跑同一失败断言及受影响的相邻检查;新单据保存成功
34
+ 不证明后续查询用到的字段值,仍需回读。
35
+ 交付结果按同一目标身份保留未解决的生效与验收项。
36
+
37
+ 本环节不配置菜单,也不输出产物卡片。app-build 按 [delivery.md](delivery.md) 统一交付领域
38
+ 产物;菜单需要用户明确要求。
@@ -0,0 +1,17 @@
1
+ # 操作分派证据
2
+
3
+ 同一操作插件注册到多个操作时按需读取。本轮核对的 8.0 SDK 中,不同接收者使用不同接口:
4
+
5
+ | 位置 | 已核实访问器 |
6
+ |---|---|
7
+ | 校验器的 `validate()` | `AbstractValidator` 的 `this.getOperateKey()` |
8
+ | 事务回调的事件参数 | 从 `OperationArgs` 继承的 `event.getOperationKey()` |
9
+
10
+ `onAddValidators` 添加所需校验器,各校验器用自身访问器选择对应操作;事务回调在实施操作专属
11
+ 副作用前,用事件参数选择对应操作。多个操作共享行为需要来自实际需求。
12
+
13
+ `operateMeta` 是 Map。Map 存在或编译成功均不能证明其中有 `operationKey`、`operateKey` 或 `key`。
14
+ 在正确接收者上使用上述类型化接口;不同 SDK 版本或上下文需要准确契约证据。
15
+
16
+ 接口签名已通过 8.0 SDK 的 `javap` 核对;隔离 SDK 检查构造事务参数与校验器实例并核对访问器值。
17
+ 这没有模拟平台事件执行、候选查询或持久化,不能替代这些验证。
@@ -0,0 +1,131 @@
1
+ # 已验证的 Java 编码上下文
2
+
3
+ 使用根技能提供的 `{ROOT_DIR}`。准备源码前,先通过
4
+ [plugin-runtime-routing.md](plugin-runtime-routing.md)确定业务触发点对应的类型。
5
+
6
+ ## 从已有表单独立准备
7
+
8
+ ```text
9
+ {python} "{ROOT_DIR}/scripts/prepare_plugin_handoff.py" \
10
+ --app-root "{appRoot}" --form-number "{formNumber}" --type "{type}" \
11
+ --intent-json '<JSON>' --prepare-source
12
+ ```
13
+
14
+ 使用创建或已有表单发现返回的准确表单编码,不要求建模 artifact、manifest 或写入回执。操作插件即使传入回执,也只将它作为身份提示,
15
+ 仍读取原生结构。
16
+ 命令读取当前原生实体元数据(`getEntityType`)与操作,保存原始响应及完整的表头/分录/
17
+ 子分录结构。关联表按声明解析;中文目标名称的候选限于主表引用目标。
18
+ 本地文件存在不代表元数据完整或仍为当前版本。
19
+
20
+ 启用编译时,`--prepare-source` 先确认已有 Java 工程准确映射一个真实 Gradle 模块,
21
+ 并从该模块的目标 SDK 核验类,再开放源码门禁。额外选用的接口通过
22
+ `sdkUsage: [{"class": "<准确全限定类名>", "members": ["<声明的方法>"]}]` 指定。
23
+ 继承方法需核验实际声明类;类缺失、版本不唯一或方法未声明均停止准备。
24
+ 查询 `/handoff/targetSdk` 获取库与类哈希及声明证据。明确配置 `compile=false` 时仍可
25
+ 仅准备源码,但 SDK、编译和运行均标记未验证。准备与编译不持久化推导出的运行配置。
26
+ 编译、注册、重启和真实事件验证分别记录结果。
27
+
28
+ `formGraph` 是编码依据,包含真实实体类型、集合属性名、父子关系、限定字段路径、类型、
29
+ 引用目标和枚举值;`relatedForms` 包含关联数据的对应结构。`getDynamicObjectCollection`
30
+ 使用集合属性名,不能假设它与集合元素的实体类型名相同。继承和系统字段一并保留。
31
+ 不要从 authoring 名称推导这些信息、搜索旧源码,或手工重建 DYM/Schema 响应。
32
+
33
+ 编码前优先读取调用方提供的启动文件,或从原生 handoff 查询 `coding-start`。
34
+ 启动上下文包含字段/类型、状态值、可用操作、SDK 接收者接口和缺失细节的准确路径。
35
+ 大字段清单使用 `fieldsPath` 与 `fieldCount`,按需查询,不把省略的清单当作元数据不存在。
36
+
37
+ 这些事实描述结构和集合访问方式,不保证每个实体类型都是数据服务的查询根。
38
+ 不能仅因 `EntryType` 或 `SubEntryType` 出现在结构图中,就把它作为
39
+ `QueryServiceHelper.query` 的独立根。以表单编码作为已知表单身份;
40
+ 要依赖具体查询结果时,先用 SDK 证据或限定范围的运行验证确认查询方式。
41
+
42
+ `fields`、`entities` 选择器只是可选别名/校验,不是完整结构的前提。
43
+ `header`、`entries`、`subentries` 按结构角色限定;多个分录/字段匹配时返回带归属的候选。
44
+ 删除选择器不得导致返回结构中的字段消失。同一类的完整业务行为与操作键一次传入,
45
+ 不拆成多个片段反复准备同名类。
46
+ 不同快照覆盖同一交接文件时,在修改源码门禁前返回 `PLUGIN_HANDOFF_CONFLICT`。
47
+ 先核对原快照并协调类身份和业务范围,再使用 `--replace-handoff` 明确替换。
48
+
49
+ 旧调用和报表仍支持 `--run-result`、`--emit-manifest`、`--artifact`;有运行实体的 Java 编码
50
+ 以原生结构为准。报表或仅元数据页面没有运行实体时,按其领域读取契约获取上下文。
51
+
52
+ intent 描述业务行为和稳定选择器。从类型指南中选择适用 `scenes`,路径相对于
53
+ `knowledge/cosmic/platform/scenes/`;准备入口会展开场景声明的 SDK 参考,提供准确导入和签名。
54
+ 例如校验及跨实体回写使用下面两个场景,只传实际适用项。
55
+
56
+ ```json
57
+ {
58
+ "form": "<表单显示名>",
59
+ "trigger": "<业务触发点>",
60
+ "operationKeys": ["<已验证的操作键>"],
61
+ "scenes": ["operation/custom-validator", "operation/cross-entity-aggregate-writeback"],
62
+ "coreLogic": ["<所需行为>"],
63
+ "specialized": {"externalContracts": [], "unresolvedDependencies": []},
64
+ "ownershipMode": "create-new"
65
+ }
66
+ ```
67
+
68
+ 非操作类型省略 `operationKeys`。原生元数据使用准确显示名或真实落库键。
69
+ authoring ID 仅适用于旧 artifact 输入,不能去掉 ISV 前缀来构造运行键。
70
+ 编译器拒绝歧义;重名字段用表单/实体/字段限定。每项外部数据或服务依赖都在
71
+ `specialized.externalContracts` 中声明为结构化对象,数据契约使用 `entity` 和 `fields`。
72
+ 失败回执里的相似字段只供核对,不能按前缀或后缀自动改写目标身份。
73
+ 需求已给出外部字段显示名时,直接在 `specialized.externalContracts` 使用该显示名;
74
+ 只有 authoring 标识时,先读取关联表单的当前元数据取得真实落库键,再准备 handoff,
75
+ 不自行拼接 ISV 前缀。
76
+ 未知依赖填写在必需的 `specialized.unresolvedDependencies` 中,非空列表会阻止编码;
77
+ 不得提交空列表掩盖缺失契约。复杂或含 shell 敏感字符的 JSON 使用 `--intent-file`,
78
+ 它只是命令输入,不增加规划阶段。
79
+
80
+ ## 消费交接结果
81
+
82
+ 准备入口默认返回 `contextMode="reference-only"` 的紧凑摘要和准确 `handoffPath`。
83
+ 完整文件继续保留本次线上读取的元数据和 SDK 证据,直接交给原生编译器。Java 编码先一次读取
84
+ 本类的字段、关联表、操作、状态警告和已注册 SDK 签名,其中包含 `QueryServiceHelper.query`
85
+ 的准确返回类型;不要直接 `read` 整份 JSON:
86
+ 准备后若平台元数据发生变化,先重新准备 handoff 再查询或编译;查询命令只读取已保存快照,不会刷新线上数据。
87
+
88
+ ```text
89
+ {python} "{ROOT_DIR}/scripts/query_plugin_handoff.py" coding-context --handoff "{handoffPath}"
90
+ ```
91
+
92
+ 只有一次读取明确缺少契约或超过大小上限时,才在本插件的实施上下文中继续定向查询:
93
+
94
+ ```text
95
+ {python} "{ROOT_DIR}/scripts/query_plugin_handoff.py" index --handoff "{handoffPath}"
96
+ {python} "{ROOT_DIR}/scripts/query_plugin_handoff.py" index --handoff "{handoffPath}" --path /handoff/formGraph/entities
97
+ {python} "{ROOT_DIR}/scripts/query_plugin_handoff.py" find --handoff "{handoffPath}" --path /handoff/operationContracts --field operationKey --equals "{verifiedOperationKey}"
98
+ {python} "{ROOT_DIR}/scripts/query_plugin_handoff.py" get --handoff "{handoffPath}" --path "{matchedPointer}"
99
+ ```
100
+
101
+ 沿返回的 JSON 路径,读取准确实体与字段契约、关联表、外部契约、操作值、状态警告和所需 SDK 签名。
102
+ 大列表通过 `index --offset --limit` 分页;过大的 `get` 会返回缩小路径的提示,不截断证据。
103
+ stdout 摘要和目录不代替编码上下文;写源码前必须读取实际所需的叶节点。需要旧版完整 stdout
104
+ 形状的非模型调用方可显式加 `--full-output`。原生编译直接传 `--handoff`,不重新搜索该文件。
105
+ `operationContracts` 保留真实操作参数;`stateFields` 和 `fieldContracts.comboOptions` 保留
106
+ 真实枚举值。写源码前按业务意图解决 `stateWarnings`,不能猜测 submit/audit 对应确认/完成、
107
+ 编码中更换操作键,或将值冲突归为显示问题。外部 Schema 只有业务名称时,补准确 `formNumber`。
108
+
109
+ 直接使用返回的 `className`、`sourcePath`、`fqcn`、`type` 和目标身份。
110
+ 编译器根据 `references/type-registry.json` 和已绑定项目决定类名、包及模块,不在文档中
111
+ 重复实现这些规则。报表 Artifact 提供报表列、`reportContract` 和已有注册类身份。
112
+ 将 `fields`、`entities`、`fieldContracts`、已验证外部字段及 `specialized` 原样传给编码。
113
+ `codingEvidence` 提供所选参考路径、API 签名及参数/返回类型的准确 `signatureTypes` 导入。
114
+ 使用这些真实导入;未解析类型沿其 `apiLookup` 查询,不凭记忆拼包名。查询字段路径结合
115
+ 实际查询根实体及原生结构确定,包含关联表与嵌套集合。`--prepare-source` 在验证后将已解析门禁标记
116
+ 为 `coding`,不写 Java;实施时复用返回的 `sourceGate`,并在已验证模块中创建目标包目录;
117
+ 新包无需通过构建文件或兄弟项目重新查找。
118
+
119
+ 已有类使用 `ownershipMode="modify"` 和真实 `sourcePath`,编译器保留其包并返回
120
+ `existingMethods`。创建冲突会返回已有路径,应改为 modify,不能覆盖。modify 源码缺失时
121
+ 应定位文件,不能降级为 create。每个类写入前先准备上下文,已准备的同模块类可合并编译。
122
+
123
+ 若 `PLUGIN_WORKSPACE_UNRESOLVED` 无法通过已有项目上下文解决,询问一次现有 Java 模块根目录,
124
+ 随后保存:
125
+
126
+ ```text
127
+ {python} "{ROOT_DIR}/scripts/appconfig_load.py" --save-plugin-project "{appCode}" --plugin-project-root "{javaModuleRoot}"
128
+ ```
129
+
130
+ 显式 `compile=false` 时,解析器可使用应用内源码目录;这不创建 Gradle 模块,也不证明编译。
131
+ 其他配置问题按 CLI 的准确诊断处理。未知外部契约保持 `L3-BLOCK`,不写 TODO 或默认结果。
@@ -29,7 +29,7 @@
29
29
  `event.setTreeReportList(true)` 与 `event.setTreeExpandColId(<列>)`,或在 `beforeQuery` 里调
30
30
  `ReportQueryParam.setTreeReportList(true)`。`reportlist` 照常返回普通行。
31
31
 
32
- `type` 必须取 `cosmic-coding-impl` 插件映射表中的值;仅仅是描述性的取值(例如 `report`)解析不出
32
+ `type` 必须取 `references/type-registry.json` 中的值;仅仅是描述性的取值(例如 `report`)解析不出
33
33
  类名后缀,也解析不出对应 guide。
34
34
 
35
35
  页面事件只保证当前交互会话,不能承担“所有保存/提交入口都生效”的承诺。`operation` 必须提供
@@ -0,0 +1,78 @@
1
+ # 报表过滤与运行交付
2
+
3
+ 报表取数插件的过滤开发或过滤故障使用本参考。优先使用已发布的元数据 CLI 获取源字段、配置控件并独立回读,再使用原生交接、编译及加载验证 CLI。浏览器负责真实控件提交和用户要求的页面验收。不支持的类型化控件明确报告平台边界,不反复重建报表或添加不支持的 schema 属性。
4
+
5
+ ## 绑定每个条件
6
+
7
+ 结合 `reportContract.filterValueContracts`、`filterEnforcement` 和已核实的源 schema,确定源实体、字段与类型、引用或枚举配置、运行 key、比较方式、查询实体与字段、值类型及组织范围。过滤控件应与源字段一致:BasedataField 保留引用和 F7 选择语义,ComboField 保留真实枚举值,日期范围保留 date/datetime 时间语义。
8
+
9
+ `candidateValueKeys`、`sourceBinding` 是声明的候选,不是运行实测证据。dataSourceId 不一定是实体编码。缺失事实通过已绑定的 CLI 或一次关联到具体请求的观察解决,不按业务名称猜字段。
10
+
11
+ 实测项目使用 `flt_x` / `shfz_x`,但来源地区实际 key 是源字段 `shfz_admindivision`。优先明确映射,兼容别名只在适用时尝试;多个别名有冲突值时拒绝执行。必填值缺失明确报错,不能静默丢弃已输入条件。枚举值 `0` 和编码前导零均须保留。
12
+
13
+ ## 按目标 SDK 读取 FilterInfo
14
+
15
+ | 值形态 | 读取和比较 |
16
+ | --- | --- |
17
+ | Combo 或 F7 选择 | `getValue(实际key)`;Combo 使用存储值,F7 为 DynamicObject 或 DynamicObjectCollection |
18
+ | 拆分日期范围 | `getFilterItems()`,匹配准确的 `<key>_startdate` / `<key>_enddate`,读取 Date |
19
+ | 权限过滤 | 在对应实体查询中保留 `getQFilters()`,不能代替用户条件取值 |
20
+
21
+ 这些是面板实测形态,不是 SDK 内部三个互不交叉的存储。在已检查的 8.0 SDK 中,`getValue(key)` 会调用 `getFilterItem(key).getValue()`;FilterItemInfo 有公开的 `getPropName()`、`getValue()`、`getDate()`,应直接使用强类型访问器。
22
+
23
+ [CosmicReportFilters.java](../examples/java-rules/CosmicReportFilters.java) 覆盖别名冲突、拆分日期、F7 单选多选和编码保留。全部分支编译校验;FilterInfo 测试无需服务即可运行,构造 F7 元数据需要已授权的目标配置和日志服务,缺失时明确跳过。其他 SDK 先通过现有 SDK CLI 核验访问器,仅在目标确实需要时使用有界反射兼容。FilterItemInfo 不是 DynamicObject;toString 只用于诊断,不能作为生产日期解析。
24
+
25
+ 按业务口径支持单边范围、开始与结束边界。同日范围覆盖全部数据时区分力不足,还需区间外记录及边界时刻。关联实体的权限条件需核对映射,不能照搬主实体字段 key。
26
+
27
+ ## F7 身份与 Algo
28
+
29
+ 跨组织业务身份按已确认的编码范围,使用 String 值和 `field.number` QFilter。ORM 解析相应分配记录,但不能因此扩大权限。pkValue 和 masterId 均不保证等于业务单据引用的 ID。只查特定分配记录时,对 `field` / `field.id` 使用确认后的 Long ID。核对编码在租户、实体和组织范围内的唯一性,不能始终合并同编码记录。
30
+
31
+ 确认范围后,`CosmicReportFilters.numberFilter(源字段, 选择值)` 生成 `源字段.number` 的 String 数组 QFilter。仍需同时保留权限与业务范围;空的可选选择值不增加 QFilter。
32
+
33
+ 使用 Algo/DataSet 查询,把用户及业务条件下推到所属数据源。各一对多分录分别聚合后关联,再按报表维度汇总。避免逐行服务或数据库调用、无界 Java Map 和 IN 列表。Row 立即读取,不能缓存;selectFields 需要引用编码时使用 `field.number`。框架接管的返回 DataSet 不由插件关闭,自有 copy 用完关闭。分页或任意 top 限制不能截断合计和导出所需数据。
34
+
35
+ ## 使用 CLI 编译部署并验证加载
36
+
37
+ 使用交接中的工程、包和 sourcePath。用户指定的报表目录是项目绑定,不是通用默认路径。由原生编译器解析 Gradle 模块,项目名不一定等于目录名。已有报表使用已发布的注册修改命令,不走创建管线。按 className upsert 不证明另一个旧 className 已被删除;独立回读注册或明确该边界。
38
+
39
+ 按 [compile-guide.md](compile-guide.md) 编译并保存 JSON 回执。回执包含 sourceHash、默认 Gradle 输出可绑定时的 compiledArtifact,以及 loadingVerification。compileSkipped 不证明编译。复制到 outputdir、重启 JVM 均不能单独证明本次请求使用了新版本。
40
+
41
+ ```text
42
+ {python} "{ROOT_DIR}/scripts/verify_plugin_loading.py" \
43
+ --compile-result "<原生编译回执.json>" \
44
+ --compiled-class "<绑定的编译产物.class>" --deployed-class "<配置的加载路径.class>" \
45
+ [--runtime-trace "<本次请求的plugin-trace结果.json>"]
46
+ ```
47
+
48
+ 该 CLI 只读,核对当前源码与回执哈希、class FQCN 和产物哈希。仅 artifactMatch=true 时 runtimeVerified 仍为 false。运行证明需要准确 FQCN 和目标类加载工具捕获、关联到被测请求的 loadedClassSha256;plugin-trace 可从实际已授权日志提取。替换文件后读取资源或磁盘哈希不能代表 JVM 已加载的字节码。旧哈希失败,证据缺失 blocked,不能 passed。此工具不重启、复制、注册或伪造日志。
49
+
50
+ 自定义 sourceSets 或输出目录需使用其原生构建部署契约的真实产物回执,本工具不猜路径,也不把默认产物缺失解释为激活成功。已有可信的构建或版本加载证据可以直接复用,并准确说明证明范围;不为满足这个可选本地检查器而给生产服务增加诊断工具。
51
+
52
+ 确认当前加载后再验证业务。在授权修复范围内删除临时反推或诊断代码,重新编译、加载并复测受影响断言。编译、注册回读、激活和业务结果分别报告,SQL 执行或编译成功均不证明报表正确。
53
+
54
+ ## P1 同源控件与 Algo
55
+
56
+ 在 reportFilters.source 声明已核实的 formNumber/fieldKey。CLI 每个来源表单读取一次 fieldSchemas,
57
+ 使用 ReportFilters.typed 写入,再将报表实际配置与重新读取的来源比较。当前支持 TextField、DateField、
58
+ DateTimeField、DateRangeField、ComboField/MulComboField、BasedataField/MulBasedataField、DecimalField。
59
+ 日期 between 转为 DateRangeField;专用类型以及未解决的组织或条件引用依赖明确拒绝。来源表单只读,
60
+ 不复制源单据必录默认值、继承标志或变更监听器。
61
+
62
+ 来源配置和类型化回读需要 assets/platform-report-filters 中的平台补丁和 TypedReportFilterFields 类,
63
+ 按平台原生构建部署流程安装。旧平台保持阻塞,不用 dry-run 或未知属性写入成功冒充支持。使用 CLI
64
+ 脚本 apply_report_filter_extension.py --project-root <准确平台模块> --dry-run 预检,确认版本后在授权范围应用;
65
+ 脚本不编译、发布或重启。控件提交及真实数据仍按 P0 验收。
66
+
67
+ examples/java-rules/CosmicReportAggregation.java 用三次同范围的表单根 ORM 查询,先聚合两个分录,再关联。
68
+ 使用已核验的 min/max/countDistinct,避免按组拆分、排序和合并。表头别名为 id/supplier/bill_date/base_amount,
69
+ 分录为 main_id/amount;主表查询不能选分录字段造成展开。禁止逐 Row 查询。返回流水线由框架管理;测试驱动
70
+ 关闭自有 DataSet,并使用 SDK 托管线程。
71
+
72
+ ```text
73
+ {python} "{ROOT_DIR}/scripts/report_algo_benchmark.py" --sdk-classpath "<目标SDK类路径>" \
74
+ --java-home "<目标Java8目录>" --rows 100000 --groups 1000 --iterations 5 --output "<结果.json>"
75
+ ```
76
+
77
+ 基准执行真实 SDK 并校验结果一致,仅测本地计算。SQL、权限、页面及完整导出需在授权服务上按 traceId、
78
+ 查询次数、输入行数、冷暖 p50/p95 与内存峰值分别测量,不能把本地加速比例当作应用 SLA。
@@ -0,0 +1,23 @@
1
+ # 查证绑定的 SDK
2
+
3
+ 文档 API 查询不能确认必需类、重载或实现细节时使用。传入目标工程实际使用的 SDK JAR 或目录,
4
+ 不从主目录或其他项目猜路径。工具不安装反编译器、不访问服务。
5
+
6
+ ```text
7
+ {python} "{ROOT_DIR}/scripts/inspect_platform_sdk.py" --class "<准确类名或简名>" --sdk-dir "<目标 SDK 目录>" --member "<方法>"
8
+ ```
9
+
10
+ 可多次传 `--jar` 选择准确库,或用 `--mode locate` 先定位类。同名类/多版本 JAR 返回候选,
11
+ 不自动选取。`javap` 优先来自已配置目标 JDK,再查 PATH;不可用时用 `--javap` 指定准确 JDK 工具。
12
+
13
+ 先看签名;行为仍不明确时,添加 `--mode bytecode` 和准确 `--member`。这是字节码查证,
14
+ 不会重建 Java 源码。确有必要时再使用已有源码/文档 JAR 或已安装反编译器,不假定它们可用。
15
+
16
+ 已有源码或文档 JAR 时,用 `--list-resources "<类名>"` 查条目,再用
17
+ `--resource "<准确条目>" --first-line <n> --limit <n>` 分段读文本,不提取文件到磁盘。
18
+ 类查证与参考文本的证据范围不同。
19
+
20
+ 结果记录类、JAR 路径/哈希/版本、选中声明和证据范围。声明中缺少方法可能是继承方法,
21
+ JAR manifest 没有实现版本时,`version` 为 null,哈希仍可核对准确文件。
22
+ 必要时查所列父类。签名证明调用形式,字节码证明选中方法的实现;二者均不证明目标服务已加载
23
+ 该版本或实际执行业务行为。
@@ -442,7 +442,7 @@
442
442
  "TreeSubEntryEntity"
443
443
  ]
444
444
  },
445
- "templateKey": {"type": "string"},
445
+ "templateKey": {"type": "string", "description": "Optional for BillEntity/BaseEntity; the emitter supplies the standard template when omitted. Explicit values must resolve to a real template."},
446
446
  "parentEntityRef": {"$ref": "#/definitions/entityIdentifier"},
447
447
  "entryDisplayType": {
448
448
  "type": "string",
@@ -451,7 +451,7 @@
451
451
  "listConfiguration": {"$ref": "#/definitions/listConfiguration"},
452
452
  "uiComposition": {
453
453
  "type": "object",
454
- "description": "Optional screenshot/business PC layout intent. Each sections/tabs block uses caption and rows; each row uses fields with display names or null slots. Emitted as one post-build applyFormComposition closure."
454
+ "description": "Optional screenshot/business PC layout intent. Each sections/tabs block uses caption and rows. Every row contains only a non-empty fields array; a full-line field is {\"fields\":[{\"field\":\"Description\",\"fullLine\":true}]}, never row-level fullLine. Emitted as one post-build applyFormComposition closure."
455
455
  },
456
456
  "logicalName": {
457
457
  "type": "string",
@@ -496,7 +496,6 @@
496
496
  "required": ["type"]
497
497
  },
498
498
  "then": {
499
- "required": ["templateKey"],
500
499
  "properties": {
501
500
  "templateKey": {"type": "string", "minLength": 1}
502
501
  }