@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
@@ -7,7 +7,7 @@ status: "draft"
7
7
  scene_name: "操作插件前后处理"
8
8
  trigger_event: "beforeExecuteOperationTransaction / afterExecuteOperationTransaction"
9
9
  scene_keywords: ["AbstractOperationServicePlugIn", "操作插件", "beforeExecuteOperationTransaction", "afterExecuteOperationTransaction", "onPreparePropertys"]
10
- related_apis: ["AbstractOperationServicePlugIn", "OperationServicePlugIn"]
10
+ related_apis: ["AbstractOperationServicePlugIn", "BusinessDataServiceHelper.load", "BusinessDataServiceHelper.loadSingle", "QueryServiceHelper.query", "SaveServiceHelper.save", "SaveServiceHelper.update"]
11
11
  ---
12
12
 
13
13
  # 场景:操作插件前后处理
@@ -20,12 +20,15 @@ related_apis: ["AbstractOperationServicePlugIn", "OperationServicePlugIn"]
20
20
  ## 涉及的核心对象(必读)
21
21
  | 对象 | 用途 | 文档路径 |
22
22
  |------|------|---------|
23
- | AbstractOperationServicePlugIn | 操作插件基类,提供操作生命周期钩子 | api/operation/AbstractOperationServicePlugIn.md |
24
- | BeforeOperationArgs | 操作执行前参数,包含 dataEntities | api/operation/BeforeOperationArgs.md |
25
- | AfterOperationArgs | 操作执行后参数,包含 dataEntities | api/operation/AfterOperationArgs.md |
26
- | DynamicObject | 动态数据对象,读写字段值 | core/MODEL.md |
27
- | SaveServiceHelper | 数据保存服务 | api/services/SaveServiceHelper.md |
28
- | BusinessDataServiceHelper | 数据查询服务 | api/services/BusinessDataServiceHelper.md |
23
+ | AbstractOperationServicePlugIn | 操作生命周期 | api/entity/plugin/AbstractOperationServicePlugIn.md |
24
+ | BeforeOperationArgs | 操作前数据 | api/entity/plugin/args/BeforeOperationArgs.md |
25
+ | AfterOperationArgs | 操作后数据 | api/entity/plugin/args/AfterOperationArgs.md |
26
+ | DynamicObject | 字段值 | api/dataentity/entity/DynamicObject.md |
27
+ | SaveServiceHelper | 关联对象持久化 | api/servicehelper/operation/SaveServiceHelper.md |
28
+ | BusinessDataServiceHelper | 加载关联对象 | api/servicehelper/BusinessDataServiceHelper.md |
29
+
30
+ 以上路径相对于 `knowledge/cosmic/platform/`。已提供的 API 契约已证明签名;
31
+ 只有仍有缺口时才读取参考页。
29
32
 
30
33
  ## 典型代码结构
31
34
  `extracted` `needs-verification`
@@ -76,3 +79,8 @@ public class MyOperationPlugin extends AbstractOperationServicePlugIn {
76
79
  - 遍历 `e.getDataEntities()` 时注意可能包含多条数据(批量操作场景)
77
80
  - 读取关联对象字段前务必做 null 检查,避免 NullPointerException
78
81
  - 操作插件需在苍穹开发平台的操作配置中注册才能生效
82
+ - 通过 `onPreparePropertys` 或校验器的属性准备声明操作需要读取的字段。
83
+ 元数据结构说明字段可用,不代表操作已加载这些字段。
84
+ - 区分当前操作数据包的修改和独立加载对象的修改。独立对象的 `set` 只修改内存,
85
+ 需要在合适事务中调用已验证的保存/更新服务完成持久化,关联写入尽量批量执行。
86
+ - 每项业务行为使用真实操作键。标准操作更新单据状态字段时,不会自动更新另一业务状态字段。
@@ -27,80 +27,36 @@ Algo 是苍穹平台的内存计算引擎,遵循 SQL-92 标准,提供类 SQL
27
27
  - `toCollection()`: 转为 `DynamicObjectCollection` (慎用)。
28
28
 
29
29
  ## 示例代码
30
- ### 1. 基础转换与聚合
30
+ ### 转换和关联前聚合
31
+
31
32
  ```java
32
- try (DataSet ds = QueryServiceHelper.queryDataSet("key", "entity", "id, qty, price", null, null)) {
33
- DataSet result = ds.addField("qty * price", "amount")
34
- .where("amount > 1000")
35
- .groupBy(new String[]{"id"})
36
- .sum("amount", "total")
37
- .finish();
38
- while (result.hasNext()) {
39
- Row row = result.next();
40
- // 处理结果...
41
- }
42
- }
33
+ DataSet ds = QueryServiceHelper.queryDataSet("key", "entity", "id,qty,price", filters, null);
34
+ return ds.addField("qty * price", "amount").where("amount > 1000")
35
+ .groupBy(new String[]{"id"}).sum("amount", "total").finish();
43
36
  ```
44
37
 
45
- ### 2. 高性能 HashJoin
38
+ 返回流水线由框架管理,不能在渲染前关闭。两个一对多分录各自按主单 ID 聚合后再关联,避免金额倍增。
39
+ 使用已核验的 leftJoin/on/select/finish,不猜测 hashJoin 或 toHashTable 的签名。
40
+
41
+ ## 目标 SDK 的聚合能力
42
+
43
+ 已检查的 8.0 GroupbyDataSet 支持 sum、min、max、avg 的 expression/alias 重载和
44
+ countDistinct(String[] fields, String alias)。使用直接聚合替代 splitByGroup/topBy/union,避免为每个分组
45
+ 物化、排序和合并数据集。签名见 api/algo/GroupbyDataSet.md,其他版本通过现有 SDK CLI 重查。
46
+
46
47
  ```java
47
- HashTable detailTable = dsDetail.toHashTable("order_id");
48
- DataSet joined = dsHeader.hashJoin(detailTable, "id", new String[]{"qty", "price"}, true);
48
+ DataSet bounds = orders.groupBy(new String[]{"supplier"})
49
+ .min("bill_date", "first_date").max("bill_date", "last_date")
50
+ .countDistinct(new String[]{"id"}, "bill_count").finish();
49
51
  ```
50
52
 
51
- ## 聚合:哪些有文档,哪些没有
52
-
53
- `groupBy(String[] fields)` 返回 `kd.bos.algo.GroupbyDataSet`。在本知识库里,只有上面示例用到的
54
- 两个构造调用有确切签名:
55
-
56
- | 调用 | 状态 |
57
- |---|---|
58
- | `sum(String expr, String alias)` | 有文档(见上方示例) |
59
- | `finish()` | 有文档(见上方示例) |
60
- | `GroupbyDataSet` 上的 `count(...)` / `max(...)` / `min(...)` / `avg(...)` | **本知识库中无任何文档** |
61
-
62
- 不要把 `kd.bos.algox.Grouper` 的签名借过来用。那个类确实有 `count(field, alias)`、
63
- `max(field, alias)`、`min(field, alias)` 的文档,但它属于 **AlgoX**(`DataSetX`,分布式计算),
64
- 是另一个类型——混用就是猜。
65
-
66
- 需求需要分组极值或去重计数时的后果:
67
-
68
- - **去重计数**可以用已有文档的能力表达。先归约到「每个被计数对象一行」,加一个常量列再求和:
69
-
70
- ```java
71
- DataSet bills = orm.queryDataSet(algo, entity, "supplier as sup, billno", filters, null);
72
- DataSet counts = bills.addField("1", "one")
73
- .groupBy(new String[]{"sup"})
74
- .sum("one", "order_count")
75
- .finish();
76
- ```
77
-
78
- - **分组 `min` / `max`** 可以表达,只是不在 `GroupbyDataSet` 上。`DataSet` 自身为
79
- `splitByGroup(String[])`、`topBy(int, String[])` 和 `union(DataSet)` 提供了确切签名,而分组
80
- 极值就是「每组在正确排序下的第一行」:
81
-
82
- ```java
83
- // 按供应商取末单/首单日期,只用有文档签名的方法。
84
- DataSet[] perSupplier = orders.splitByGroup(new String[]{"sup"});
85
- DataSet latest = null;
86
- for (DataSet group : perSupplier) {
87
- DataSet top1 = group.topBy(1, new String[]{"order_date desc"});
88
- latest = latest == null ? top1 : latest.union(top1);
89
- }
90
- // latest 现在每个供应商一行,携带该供应商的 max(order_date)。
91
- // 把 "desc" 换成 "asc" 就是 min;报表列同时需要首单和末单时,按 "sup" 关联两个结果。
92
- ```
93
-
94
- `splitByGroup` 会为每个分组物化一个 DataSet,所以它适合按组织、供应商、物料分组的报表,不适合
95
- 基数极高的分组键(按单、按行)。分组数不可控时,应当先收窄输入 —— 加过滤,或改用更粗的分组键 ——
96
- 而不是去猜一个没有文档的聚合方法。
97
-
98
- `reduceGroup(ReduceGroupFunction)` 同样有确切签名,可以算出任意分组值,但 `ReduceGroupFunction`
99
- 只有 `reduce(Iterator<Row>)` 一处文档:它还需要声明的输出 RowMeta 没有参考页,所以优先用上面的
100
- `splitByGroup` + `topBy` 写法。
101
-
102
- 仍然不可用的是:**作为 `GroupbyDataSet` 构造调用**的 `max` / `min` / `count` / `avg`。不要写
103
- `groupBy(keys).max(field, alias)`。若 `GroupbyDataSet` 后续补上经验证的 API 参考页,请更新此表。
53
+ examples/java-rules/CosmicReportAggregation.java 经过编译和运行核验,演示三次同范围表单根查询、
54
+ 分录预聚合和空分录处理。提供准确字段别名、权限和业务条件,不以 import Algo 作为性能证明。
55
+ Row 立即取值;框架接管的返回 DataSet 不主动关闭。
56
+
57
+ 该引擎未提供 SQL COALESCE,使用示例中经过运行测试的 CASE WHEN 空值表达式。
58
+ 表达式字符串编译通过不能证明 SQL 有效。本地 CLI 基准校验相同数据结果并记录 p50/p95,
59
+ 数据库、权限、导出和页面耗时仍需在目标环境测量。
104
60
 
105
61
  ## 列类型:常量词汇表,以及每种类型怎么读
106
62
 
@@ -179,8 +179,8 @@ package kd.cd.common;
179
179
  import kd.bos.workflow.api.AgentExecution;
180
180
  import kd.bos.workflow.component.approvalrecord.IApprovalRecordItem;
181
181
  import kd.bos.workflow.engine.extitf.IWorkflowPlugin;
182
- import kd.cd.core.util.CollectionUtils;
183
182
 
183
+ import java.util.ArrayList;
184
184
  import java.util.List;
185
185
 
186
186
  /**
@@ -214,8 +214,7 @@ public class IWorkflowPluginTemplate implements IWorkflowPlugin {
214
214
  */
215
215
  @Override
216
216
  public List<Long> calcUserIds(AgentExecution execution) {
217
- super.calcUserIds(execution);
218
- List<Long> userIds = CollectionUtils.newArrayList();
217
+ List<Long> userIds = new ArrayList<>();
219
218
  Object starter = execution.getVariable(VAR_START_USER);
220
219
  if (starter instanceof Number) {
221
220
  userIds.add(((Number) starter).longValue());
@@ -230,7 +229,6 @@ public class IWorkflowPluginTemplate implements IWorkflowPlugin {
230
229
  */
231
230
  @Override
232
231
  public boolean hasTrueCondition(AgentExecution execution) {
233
- super.hasTrueCondition(execution);
234
232
  Object amount = execution.getVariable(VAR_AMOUNT);
235
233
  return amount instanceof Number && ((Number) amount).doubleValue() > 100000D;
236
234
  }
@@ -242,7 +240,6 @@ public class IWorkflowPluginTemplate implements IWorkflowPlugin {
242
240
  */
243
241
  @Override
244
242
  public void notify(AgentExecution execution) {
245
- super.notify(execution);
246
243
  if (execution.getCurrentFlowElement() != null) {
247
244
  execution.setVariable(VAR_LAST_NODE, execution.getCurrentFlowElement().getName());
248
245
  }
@@ -255,7 +252,6 @@ public class IWorkflowPluginTemplate implements IWorkflowPlugin {
255
252
  */
256
253
  @Override
257
254
  public void notifyByWithdraw(AgentExecution execution) {
258
- super.notifyByWithdraw(execution);
259
255
  execution.setVariable(VAR_LAST_NODE, "withdraw");
260
256
  }
261
257
 
@@ -266,7 +262,6 @@ public class IWorkflowPluginTemplate implements IWorkflowPlugin {
266
262
  */
267
263
  @Override
268
264
  public IApprovalRecordItem formatFlowRecord(IApprovalRecordItem item) {
269
- super.formatFlowRecord(item);
270
265
  return item;
271
266
  }
272
267
  }
@@ -1,12 +1,42 @@
1
1
  # 应用上下文
2
2
 
3
+ ## 既有需求基线
4
+
5
+ 基线为 `target.kind=form` 时,将准确 `target.formNumber` 传给原生已有表单写入命令,不能当作 `--app-code`。复用命令的唯一归属解析及 `TEST_ENVIRONMENT_HANDOFF.path`。基线同时明确声明 `application.code` 时,将其作为应用约束传给写入命令,在写入前拒绝错误归属;已唯一定位的所属应用不额外查询或审批。
6
+
7
+ 请求提供 `cosmic-requirements-baseline/v1` 索引时,直接消费已选应用、当前确认要求、用户约束、
8
+ 假设及取消项,复用准确路径和完整 prepare 快照。不扫描其他本地应用、不重复询问已确认选择;
9
+ 平台身份仍由原生命令核实。
10
+
11
+ 计算范围、处理确认变更或交接 QA 时使用共享的[业务基线与交接](../../../../cosmic-requirements-spec/.locales/zh/references/baseline-handoff.md)。
12
+ 脚本位于 `{ROOT_DIR}/../cosmic-requirements-spec/scripts/requirements-baseline.mjs`,只读已知
13
+ 需求/交付路径。未结构化的既有来源继续使用并显式核对,不悄悄重写成新 PRD。
14
+
15
+ 保留明确实现排除约束。已核实的必需路线与约束冲突时,只提出受影响的业务决定;参数或引用
16
+ 解析失败不证明冲突。继续独立明确工作,不删除原要求以迁就实现。
17
+
3
18
  在命令需要应用绑定、出现归属冲突,或前序命令返回不同目标应用时读取。
4
19
 
5
- `ROOT_DIR` 是 Skill 包目录;`appRoot` 是准确业务应用目录。两者不能互换。
20
+ `{ROOT_DIR}` 是 Skill 包目录;`appRoot` 是准确业务应用目录。两者不能互换。
6
21
 
7
22
  用户、宿主上下文或已验证 CLI 回执给出的准确 `appRoot` 可直接使用。项目根及其
8
23
  `app/` 容器不是应用根。不得通过扫描源码、DYM 或 archive 推断在线归属。
9
24
 
25
+ ## 元数据目录
26
+
27
+ 专家团及其他调用方统一使用 app-build 已绑定的 `appRoot` 和 CLI 返回的产物路径。
28
+ 不得另选输出根目录、另建专家团元数据目录或复制原生产物形成第二套交付目录。
29
+
30
+ - `{appRoot}/archive.json`:应用绑定及交付索引。
31
+ - `{appRoot}/_runtime/`:本地运行状态和命令输入、结果。
32
+ - `{appRoot}/metadata/_emit/`:生成的元数据变更产物。
33
+ - `{appRoot}/modify/`:变更批次清单。
34
+ - DYM/DYMX 源文件:交付命令返回的已配置同步目录。
35
+
36
+ 标准工程布局下,`appRoot` 为 `{projectRoot}/app/{appCode}`。应用任务不得在
37
+ `{projectRoot}` 下创建 `_runtime`、`metadata` 或 `modify`;这些名称出现在已绑定
38
+ 应用目录下是正常的,由 CLI 维护,不能只按目录名判断是否错误。
39
+
10
40
  新建时,“身份真实存在”不等于“用户选择了它”。绑定前必须取得用户选择或宿主明确选中的
11
41
  应用;不得把 appMapping.tsv 或本地唯一应用目录当作该选择。
12
42
 
@@ -20,6 +50,8 @@
20
50
 
21
51
  只有当前命令不支持直接绑定且没有可信应用时,才绑定选定应用。已有应用编码直接调用
22
52
  bootstrap;只有应用显示名才需要下面第一条查询。不要把已知编码传给 --app-name。
53
+ 本地应用目录不存在只代表尚未在此绑定。已有准确应用编码时直接执行绑定命令;
54
+ 旧调试页面状态和源码目录清单不能证明所选应用的线上身份。
23
55
 
24
56
  ```text
25
57
  {python} {ROOT_DIR}/scripts/getAllCloudApp.py --project-root "<项目根>" --app-name "<准确应用名>" --verbose
@@ -34,3 +66,5 @@ Shell 返回空输出或非零退出时,Python 运行环境尚未验证,不
34
66
 
35
67
  继承、复制或扩展可能返回新的目标。后续工作使用返回的 `appRoot` 与表单身份;归属漂移时停止,
36
68
  不得猜测替代身份。
69
+
70
+ 复用返回的 executionBinding 与[执行契约](execution-contract.md)中的续跑入口;工作区旧副本不能作为备用 CLI 来源。
@@ -124,7 +124,7 @@
124
124
  2. **插件/路由文档**(插件类与 API 类需要):先读取 `{ROOT_DIR}/references/type-registry.json`,按当前 `type` 取 `guide`;再读取对应文档
125
125
  3. **核心对象**:先读取 `{ROOT_DIR}/references/type-registry.json`,按当前类型的 `family` 判定是否需要 `view.md` / `model.md`;UI 生命周期(form_lifecycle,list_lifecycle,mobile_lifecycle)家族读取全部,其他类型默认跳过
126
126
  4. **场景匹配**:读取 `{ROOT_DIR}/knowledge/cosmic/platform/scenes/_index.md`,按上述「场景匹配规则」先做 `pluginType` 过滤,再做标签与语义筛选,并行读取匹配的场景文档
127
- 5. **补充 API**:场景文档未覆盖时,查 `{ROOT_DIR}/knowledge/cosmic/platform/api/api-index.md` 或 Grep 搜索 `{ROOT_DIR}/knowledge/cosmic/platform/api/` 目录;**禁止反编译 jar 包**
127
+ 5. **补充 API**:场景文档未覆盖时,查 `{ROOT_DIR}/knowledge/cosmic/platform/api/api-index.md` 或相关 API 目录。必需证据仍缺失时,可只读查证已绑定项目的实际 SDK:定位准确类,用 `javap` 核对签名,行为仍不明确时才查看相关方法字节码或已有源码。记录 JAR 版本与证据范围,查证限定在目标配置的库内。
128
128
 
129
129
  ### 元数据文件
130
130
 
@@ -1,78 +1,65 @@
1
- # Java 插件窄范围编译
1
+ # Java 插件编译
2
2
 
3
- 精简编码 agent 只读一次本指南并负责窄范围编译。父会话消费其 `source_ready` 结果,不得
4
- 再次编译同一个类。直接使用 handoff 中的
5
- `sourcePath/className/fqcn/formNumber/operationKeys`,禁止重新读取会话、归档或元数据来
6
- 重建这些值。
3
+ 实施者负责编译,直接使用交接值;`{ROOT_DIR}` 由根技能提供。
4
+ 原生命令负责配置、模块解析、源码检查、编译、归档写入和 `source_ready` 门禁。
7
5
 
8
- ## 1. 调用唯一编译边界
6
+ ## 执行
7
+
8
+ 优先使用已准备的上下文,由准备入口提供身份、操作键和 1–20 字描述:
9
+
10
+ ```text
11
+ {python} "{ROOT_DIR}/scripts/compile_plugin_source.py" --handoff "{handoffPath}"
12
+ ```
13
+
14
+ 没有交接文件时,仍支持手动单源码输入:
9
15
 
10
16
  ```text
11
17
  {python} "{ROOT_DIR}/scripts/compile_plugin_source.py" \
12
18
  --project-root "{projectRoot}" --app-root "{appRoot}" \
13
19
  --source-path "{sourcePath}" --class-name "{className}" \
14
20
  --plugin-type "{type}" --form-number "{formNumber}" \
15
- [--operation-key "{key}"] --description "{coreLogic 20字摘要}"
21
+ [--operation-key "{key}"] --description "{1-20字业务摘要}"
22
+ ```
23
+
24
+ 每个操作键单独传一次 `--operation-key`,为空则省略。同模块中多个已准备、已写入的源码
25
+ 使用一次批量调用:
26
+
27
+ ```text
28
+ {python} "{ROOT_DIR}/scripts/compile_plugin_source.py" --project-root "{projectRoot}" --app-root "{appRoot}" --sources-file "{sources.json}"
16
29
  ```
17
30
 
18
- 脚本统一负责编译配置、Gradle 模块解析、窄范围 `compileJava`、占位实现拦截、结构化诊断、
19
- 归档写入和 `source_ready` gate。每个操作 key 重复传入一次 `--operation-key`,为空时整项省略。
20
- 调用前后都不得检查 `settings.gradle`、`build.gradle`、Gradle 缓存、jar、环境变量或兄弟工程。
21
-
22
- ## 2. 在封闭证据内修复
23
-
24
- - `status=true` 且 `compileSkipped=false`:编译、归档及源码就绪 gate 均通过。直接返回源码就绪结果,
25
- 不再重复编译或归档。
26
- - `status=true` 且 `compileSkipped=true`:`appconfig` 中 `compile=false`,窄范围编译被配置跳过。
27
- 归档项和源码就绪 gate 已写入,注册可以继续,但没有任何东西证明源码能编译。此时报告
28
- `source_ready(按配置跳过编译)`,绝不能声称该类已编译通过。源码闸门仍然执行了,结果里的
29
- `uncheckedWithoutCompile` 列出它们覆盖不到的部分——每道闸门都刻意比 javac 更窄,而在 javac
30
- 缺席时这些缺口就是全部剩余风险。
31
- - `PLUGIN_SOURCE_PLACEHOLDER_BLOCKED`:外部/数据依赖未闭合,按 `L3-BLOCK` 停止;禁止把
32
- 占位符改成猜测的实体、字段、服务或零值兜底。
33
- - `PLUGIN_SOURCE_RETURN_TYPE_MISMATCH`:某个平台调用被赋给了它登记签名并不返回的类型。每条
34
- issue 都给出调用、声明类型和登记返回类型;把声明改成登记的返回类型。该检查在编译之前执行,
35
- `compile=false` 时同样生效——那种配置下它是凭记忆写的签名与注册之间唯一的拦截。禁止用强制
36
- 类型转换绕过,也禁止把声明放宽成 `Object`。
37
- - `PLUGIN_SOURCE_QFILTER_STRING_OPERATOR`:`QFilter` 的比较操作符写成了字符串字面量。issue
38
- 带 `preferred` 时用那个辅助方法(多数 `QCP` 成员是 `@SdkInternal`);没有时替换为 issue 给出的
39
- `QCP` 常量并 import `kd.bos.orm.query.QCP`。替换时不要改动操作符本身。
40
- - `PLUGIN_SOURCE_NONEXISTENT_MEMBER`:某个调用用了并不存在的平台成员。每条 issue 都带上该调用
41
- 及其 `replacement`(已对照平台 API 参考验证);换成该成员,并按它的签名调整实参。禁止通过强制
42
- 类型转换、换一个接收者或反射去够同一个名字——该成员是不存在,而不是不可访问。
43
- - `PLUGIN_SOURCE_LIFECYCLE_MISUSE`:某个调用写在了一个它根本无法生效的生命周期方法里。这里没有一个
44
- 调用本身是错的——每一个在另一个方法里都是写同一件事的正确写法——所以 javac 接受它、注册也会
45
- 成功,缺陷最后以“插件没反应”或“值默默变回去了”的形式到达用户。每条 issue 都点明当前所在方法
46
- 和应归位置;把调用移到那里,而不是删掉它;也不要靠改方法名或套一层辅助方法去绕过这项检查。
47
- - `PLUGIN_SOURCE_BASE_CLASS_MISMATCH`:`extends` 声明的不是登记在册的插件基类——是登记类的大小写或
48
- 包路径拼写错误,例如把 `kd.bos.bill.AbstractBillPlugIn` 写成 `kd.bos.form.plugin.AbstractBillPlugin`。
49
- 拼错的类名并非平台类:最好情况也只是在 javac 处得到一句既不含正确类名、也不含原因的
50
- `cannot find symbol`;`compile=false` 时更会不经校验直接注册,直到平台加载该类才失败。替换成每条
51
- issue 给出的 `registeredBaseImport`;不要只改大小写或只改 import 却留着错误的包路径。
52
- - `PLUGIN_SOURCE_OVERRIDE_SIGNATURE_MISMATCH`:某个 `@Override` 声明的参数不被基类任何登记签名接受——
53
- 例如把 `propertyChanged(PropertyChangedArgs e)` 写成 `propertyChanged(PropertyChangedEventArgs e)`。
54
- 凭记忆写出的参数类并非平台类:最好情况也只是在 javac 处得到一句不含正确签名的 `cannot find symbol`,
55
- `compile=false` 时更会不经校验直接注册;即便该类碰巧存在,方法也只是一个平台永远不会调用的重载。
56
- 照抄每条 issue 给出的 `registeredSignatures` 签名。
57
- - `PLUGIN_SOURCE_UNVERIFIED_API`:某条 import 或成员调用写的是登记 API 凭记忆拼出的拼写——简单名
58
- case-fold 后唯一命中某个登记类(把 `kd.bos.bill.AbstractBillPlugIn` 写成
59
- `kd.bos.form.plugin.AbstractBillPlugin`),或成员与接收者类链登记的某个签名相似(把
60
- `getEntryRowCount` 写成 `getEntryCount`、把 `ftlike` 写成 `ftLike`)。凭记忆的名字并非平台名:
61
- 最好情况也只是在 javac 处得到一句不含替代名的 `cannot find symbol`,`compile=false` 时漂移会
62
- 未经校验直达注册。照抄每条 issue 给出的 `registeredImport` 或 `registeredSignatures`。页面只
63
- 收录 `@SdkPublic` 导出集,与任何登记名都不相似的 import 或成员不构成发现:不要为过检而改宽
64
- 真实名字,也不要把未被报告的名字当作已验证。
65
- - `PLUGIN_COMPILE_FAILED`:只使用返回的 `diagnostics`、已选 type guide、该 guide 点名的
66
- 精确 API 参考及当前 Java 模块附近代码。修复目标源码后重调同一脚本。
67
- - 配置/模块错误:原样报告该边界,禁止手工重建 Gradle 命令。
68
-
69
- 一次修复可同时处理同一轮全部诊断。反复猜 API、搜索 jar 或做编译器试验都不是证据来源。
70
-
71
- ## 3. 编译证明
72
-
73
- 源码文件存在、自检通过、手工 Gradle 成功或单独更新归档都不是本流程的交付证明。只有
74
- `compile_plugin_source.py` 返回 `status=true` 才建立 `source_ready`,而只有 `compileSkipped=false`
75
- 才进一步证明源码可编译。
76
-
77
- 注册及其回读只属于父会话在 `references/java-plugin-delivery.md` 中定义的收口职责;编码 agent
78
- 到 `source_ready` 即停止。
31
+ 优先使用 `{handoffPath}` 数组,每个类保留自己的元数据和类型证据;所有交接必须属于传入的工程与应用。
32
+ 仍兼容 `{sourcePath, className, type, formNumber, operationKeys, description}` 输入;没有交接时,
33
+ 回执明确标记 `fieldAccessorCheck="not-run-no-handoff"`。源码检查逐类执行,同次调用共享模块构建。
34
+
35
+ ## 使用结果
36
+
37
+ | 结果 | 后续动作 |
38
+ |---|---|
39
+ | `status=true`、`compileSkipped=false` | 源码、编译、归档和门禁已成功,继续交付,不重复构建。 |
40
+ | `status=true`、`compileSkipped=true` | 报告 `source_ready (compile skipped by config)`。可以注册,但未证明编译通过;保留 `uncheckedWithoutCompile` 列出的检查缺口。 |
41
+ | 失败 | 根据结构化诊断修复所指出的边界,再重试原生命令。未解决的外部契约保持 `L3-BLOCK`。 |
42
+
43
+ 交付前根据实际接收者和字段核实 `sourceWarnings`。TimeProp 提示不直接阻断编译,因为源码扫描
44
+ 不能证明实体归属或 Java 作用域;确认访问器错误后修正源码,合法无关接收者则在结果中说明。
45
+ 操作 Map 键与适用范围提示同样需要准确分派证据,保留需求规定的操作专属行为。`sourceReview`
46
+ 仅是源码清单,不代表 AC 覆盖已验证。成功构建的 `buildContext` 提供已解析的 Gradle 根、wrapper、
47
+ 模块和候选测试任务,后续复用该绑定环境,避免重新搜索其他工程。
48
+
49
+ 将诊断提供的替换或签名应用到对应接收者和生命周期;缺失 API 证据通过编码入口的查询或准确
50
+ 参考页补齐。已注册文档仍无法确认必需签名时,可对已绑定项目的实际 SDK 做有限的只读检查;
51
+ 不要从其他项目推断接口,也不要搜索无关 jar 或缓存。不使用强转、改插件类型、删除业务行为或
52
+ 伪造值绕过检查。模块/构建问题按准确诊断处理,不手工拼 Gradle 命令;目标模块附近代码可辅助定位源码错误。
53
+
54
+ 集中修复共同诊断。批量结果每个模块最多抽样五条,只有不足以定位时才读 `logPath`。
55
+ 同任务其他源码报错可能是共同原因,不能直接归为无关缺陷。做出相关修复后再重试,不原样重复。
56
+
57
+ 只有成功的原生结果能建立源码就绪状态,不手工写归档或门禁。
58
+ 随后按请求范围返回 [java-plugin-delivery.md](java-plugin-delivery.md) 做注册、源码一致性检查和收尾。
59
+
60
+ 独立源码问题在 `errorCodes` 中一并返回,集中修复后再调用编译。
61
+
62
+ 编译回执的 `loadingVerification.runtimeVerified` 仍为 false。默认 Gradle class 产物可观察时,
63
+ `compiledArtifact` 绑定其 FQCN 和哈希;跳过编译或自定义输出未观察时为 null。报表运行测试
64
+ 按 [report-filter-contract.md](report-filter-contract.md) 使用只读加载 CLI 后再验收业务。
65
+ 复制 class 或重启 JVM 不等于加载证据。
@@ -1,6 +1,15 @@
1
1
  # 本轮交付
2
2
 
3
- 在当前用户请求的修改和必要验证完成后读取。只读查询不进入本流程。
3
+ 当前请求进入完整交付或明确的部分交付时读取。只读查询不进入本流程。
4
+
5
+ 已准备完成适配器时,当前有效范围全部实现可提交 `{environmentFile, completed:"all", evidence:[真实实现引用], summary, notes}`,由程序展开范围。只有真实例外才填写 `remaining:[{itemId,reason,category}]`,类别为 `implementation|verification|decision|environment`。正常等待 QA 属于阶段边界,不逐项登记为 remaining。部分证据仍用 `completed:[{itemId,evidence}]`;不能把单次命令成功当作全部实现,实际缺口必须保留,元数据回读不等于运行验收。
6
+
7
+ 运行收口器前,对照原始需求核对已经验证的实际实现。先完成仍可执行的元数据、Java 行为和
8
+ 明确要求的菜单工作。尚未开始的必要插件属于剩余实现,不能只列为“待验收”。元数据无法表达
9
+ 该行为时使用 [java-plugin-delivery.md](java-plugin-delivery.md)。
10
+ 菜单发布还包括菜单入口要求的应用启用及验证步骤。
11
+ Java 插件已注册但仍等待用户选择或确认服务重启时,继续完成独立交付,将插件运行态保留为
12
+ 未验证;不得把注册回执当成验收证据。
4
13
 
5
14
  `deleteForm` 验证表单已删除后,该表单没有可打开的产物,只报告删除目标和验证,不运行卡片
6
15
  收口。删除字段、规则、操作、控件或其他元数据元素后,表单仍然存在,继续为该表单生成卡片。
@@ -15,12 +24,43 @@
15
24
  {python} {ROOT_DIR}/scripts/render_output_cards.py --app-root "<appRoot>" --forms-only --form-number "<表单A>" --form-number "<表单B>"
16
25
  ```
17
26
 
18
- 每个本轮目标分别传一次 `--form-number`。必需事项仍未解决或写后状态未知时,不执行收口。
27
+ 每个本轮可交付目标分别传一次 `--form-number`。
28
+
29
+ 收口器同时返回 `TEST_ENVIRONMENT_HANDOFF` 并保存脱敏的 `_runtime/test-environment.json`。
30
+ 开发交给 QA 的摘要标题统一使用 `<应用名称> — 开发实现交付摘要`;英文使用
31
+ `<Application name> — Implementation Delivery Summary`,产物路径沿用 `delivery-summary.md`。
32
+ 正式完成适配器已准备时,在输入中传 `environmentFile: TEST_ENVIRONMENT_HANDOFF.path`,由程序原样嵌入环境,模型不转抄。
33
+ 仅手工兼容交接才把 `environment` 作为 `json` 围栏块嵌入摘要,
34
+ 保留 `schemaVersion: "cosmic-test-environment/v1"`、完整 baseUrl(端口及租户路径)、账套和应用/表单身份。
35
+ 同时交接实际 previewUrl/listUrl、已发布菜单名称及导航路径,区分表单显示名、菜单名与元数据 ID。
36
+ QA 默认从准确浏览器入口验收,不依赖 CLI alias。正式用户入口未实施或未验证时明确记录,
37
+ 不能用直达预览可用替代菜单入口通过。
38
+ 只有 `listUrl` 与编辑预览地址不同时才交接列表入口。平台对 `viewType=list` 返回编辑地址时,交付器先核对 `getFormSchema` 的列表元数据,再使用已验证的标准 `bos_list` 入口;两条路线均无法确认列表地址时才记录入口缺失。
39
+ 环境块必须随摘要传递,不能只链接被忽略的 runtime 文件,否则跨工作树不可用。
40
+ 只补充本次已确认的运行态 context、ERP loginUser 和 authMode;不把元数据 API 身份猜成 ERP 账号,
41
+ 不复制密码、cookie、token、appSecret。Java 部署/加载与未运行检查单独记录。
42
+ 元数据回读和模板默认操作只证明实现配置;运行态 AC 保留 not-run,直到 QA 在同一环境中取得实际行为及持久化证据。
43
+
44
+ 正式专家团阶段已经提供 `nextOperation` 时,只在指定输入文件中填写 `environmentFile`、实际实现证据
45
+ (`completed` 与必要的 `remaining`),可补简短 `summary` 和实际部署/未验证 `notes`,再调用
46
+ `nextOperation` 一次。程序生成 `delivery-summary.md`,模型不重新排字段表、转抄环境 JSON 或写摘要文件。它统一完成需求/AC 引用归一化、冻结基线绑定、产物校验和阶段结算。
47
+ 不要再调用 `bind-delivery`、查校验器源码、创建单独的 StageResult 文件或重复读取成功回执。
48
+ `.expert-team` 状态归运行时管理,不是手工输入目录;运行态验收仍交质量阶段。
19
49
 
20
- 后续轮次修改属性后仍需本轮交付,即使之前已经展示过同一表单的卡片。成功属性回执提供
50
+ 只有没有完成适配器的独立交接才使用[应用上下文](application-context.md)中的底层
51
+ `bind-delivery`。用户确认范围变更后,只调整受影响实现,再沿同一完成入口绑定;已撤回项
52
+ 不算未完成工作。保持一个环境块。
53
+
54
+ - 仍可执行的明确需求继续完成,部分交付不是提前停止工作的理由。
55
+ - 某事项因能力不支持或缺少业务决定而确认未执行时,完成独立事项,交付已验证修改,
56
+ 并明确说明待处理内容。
57
+ - 写入状态未知时,先查明该表单的状态,再交付该表单;其他独立验证通过的表单可以交付。
58
+ 卡片不代表待处理事项已完成。
59
+
60
+ 后续轮次修改属性后仍需本轮交付,即使之前已经展示过同一表单的卡片。成功修改回执提供
21
61
  待执行的 `delivery.command`;汇总这些目标,在本轮写入结束后收口一次。
22
62
 
23
- 收口器不等待 DYM 同步。本轮仍存在的目标表单会通过 stderr 返回
63
+ 收口器不等待 DYM 同步。本轮仍存在的目标表单会在卡片块之后通过 stdout 返回
24
64
  `DYM_BACKGROUND_REQUEST`,并保存持久化队列请求。使用宿主 Bash 工具执行返回的 command,
25
65
  设置 `run_in_background=true`、`preview=false`,保留 job ID;不等待任务结束,继续交付卡片。
26
66
  禁止启动无法追踪的脱离子进程。请求文件记录 queued/running/succeeded/failed/skipped;
@@ -28,11 +68,23 @@ queued/running 不代表源码已同步。宿主不能启动后台任务时说
28
68
  只有用户明确要求“源码同步完成后交付”时才加 `--wait-dym`。两种模式均导出 DYM/DYMX 到配置的同步目录,
29
69
  文件不存在则创建,已存在则更新;报表运行时证据导出与源码同步无关。后台完成通知只更新源码同步状态,不再生成或重复产物卡片。
30
70
 
31
- 收口器返回三行协议块:协议头、一行 JSON、结束符。协议块只出现在工具结果中不代表已经
32
- 交付;必须保留每个返回块,并原样放进最终答复。不在进度说明里展示卡片,也不另列预览或
33
- 设计器链接。宿主提供 `output_check` 时,取得协议块后调用一次,先说明变更结果和必要的未完成
71
+ 专家团共享交付中,保留协议块与目标/检查引用供负责人最终答复使用,继续团队已约定的流程。
72
+ 子任务将结果交回负责人;内联执行在同一会话继续。生成卡片不代表团队适用的验收已经完成。
73
+ 负责人选择验收入口,完成对应检查或明确报告具体阻塞原因及未测范围后收尾。用户仅要求
74
+ 实施时沿用其约定终点;独立 app-build 在要求的实现完成后收尾。
75
+
76
+ 以下卡片格式同时适用于独立 app-build 和专家团共享交付。收口器返回三行协议块:
77
+ 协议头、一行 JSON、结束符。协议块只出现在工具结果中不代表已经交付;必须保留每个返回块,
78
+ 并原样放进最终答复。不在进度说明里展示卡片,也不另列预览或设计器链接。在约定终点,
79
+ 独立 app-build 呈现最终交付时,在宿主提供 `output_check` 时调用一次;正式团队阶段沿完成入口直接交付,不重复调用。
80
+ 先说明变更结果和必要的未完成
34
81
  事项,再在最终答复末尾集中展示本轮卡片,完成答复。必须使用渲染器返回的准确协议块;仅说明
35
82
  “渲染成功”不能替代协议块。
83
+ 解释面向业务用户:用表单名称说明可用功能、实际测试结果和未完成行为,不复述应用/表单编码、原始路径、状态字母、回执标记、后台任务编号或命令名称。
84
+ 自行撰写摘要卡片或报告链接时,标题与描述使用业务名称和有含义的说明,路径只用于内部引用;渲染器已返回的协议块仍原样保留。
85
+ 不能用“配置回读成功”等技术检查代替尚未验证的业务结果。
36
86
  不要因空白或换行差异重发已交付的卡片。
37
87
 
38
88
  DYM 失败不否定已验证的业务修改,也不阻止卡片交付。单独说明源码同步边界,不重放平台写入。
89
+
90
+ 正式阶段的完成命令返回 verified=true 且执行范围完成后,直接交付结果。不要再调用 output_check、查询源码同步后台任务或追加退出检查;源码同步状态按已知事实报告。用户明确要求等待同步时,应在完成阶段前满足该要求。文中的通用 output_check 约定只用于独立 app-build。
@@ -21,10 +21,18 @@ ImportError 或内置符号缺失属于技能安装缺陷,不是业务参数
21
21
 
22
22
  保留结构化 stdout 和退出状态。不得使用 `head`、`tail` 或 Shell 管道掩盖失败。
23
23
  大输入使用命令支持的 UTF-8 JSON 文件。认证由 CLI 处理,不读取凭据、Cookie 或令牌缓存。
24
+ 解析 JSON 时只消费 stdout;`2>&1` 会混入 stderr 的鉴权提示,使有效 JSON 解析失败。
24
25
 
25
26
  只有结果包含该命令的正向验证时,修改才算完成。Shell 成功、保存响应或后台句柄都不单独构成证明。
26
27
  已有独立回读时复用它,不重复读取同一事实。
27
28
 
29
+ 执行需求或 Spec 时,逐项比较要求的业务行为与实际配置行为。回读通过只证明该配置,
30
+ 不证明需求已覆盖:非空检查不能代替唯一性、日期范围或长度校验;空白页面和未实现操作
31
+ 仍属部分交付。Goal 续跑继续保留未决业务定义,非目标只约束其明确点名的范围,
32
+ 某个集成不在范围内不等于全部 Java 工作被排除。
33
+ 能力不明确时使用 `catalog --search <能力>` 与匹配的领域契约;猜测的命令名不存在,
34
+ 不能作为整个能力缺失的依据。
35
+
28
36
  写后未知或只部分验证时,保留回执并先确认真实状态再决定重试;后续修复不能倒推之前未知写入成功。
29
37
  结果要求披露时,在完成说明中保留该边界。
30
38
 
@@ -34,3 +42,33 @@ ImportError 或内置符号缺失属于技能安装缺陷,不是业务参数
34
42
 
35
43
  保留 CLI 运行状态,便于后续回合继续。`_runtime`、`metadata/_emit`、`modify`、`archive.json`
36
44
  及锁文件是运行状态,不是源码交付物。
45
+
46
+ ## 绑定来源与批量续跑
47
+
48
+ 初始化返回 `executionBinding`,包含实际技能根目录、命令修订、Python 可执行文件和
49
+ 准确 CLI 入口。同一应用持续复用这些值;来源、修订或环境不一致时,重新绑定所选的
50
+ 已安装技能,不执行工作区旧副本,也不自行编辑其实现。
51
+ `describeCommand` 提供 `execution.argvPrefix` 与解析器生成的参数契约。各参数作为
52
+ 独立值传入,复杂输入使用命令支持的 JSON 文件。
53
+ `--stdout --output <path>` 同时返回相同完整 JSON 并写入 UTF-8 文件;诊断只进入 stderr,
54
+ 参数失败也保持机器输出可解析。
55
+
56
+ `runBatch` 在发出写入前、每个对象及根保存回执返回后,持续保存原有结果文件。
57
+ 输入修订、准确身份、验证、阶段与剩余步骤在中断后仍保留。仅当 `resume.ready=true`
58
+ 时执行返回的续跑参数;原 artifact 列表包含已成功依赖,它们直接复用验证回执,不重新
59
+ 创建或再次查身份。只有已确认未写入的输入可原地修正;成功输入保持原样。
60
+ 已保存对象的修订或名称变化由既有表单修改命令处理,同时修改受影响引用。
61
+
62
+ 写入未知时先执行返回的核对读取。原执行进程结束或退出后,才可使用
63
+ `runBatch --resume-result <resultPath> --reconcile-only --verify`;实际执行时使用返回的
64
+ `reconcile.arguments` 和 Python/入口路径,完整保留应用、输入与模板参数。该模式只读取平台。
65
+ 确认目标不存在后释放该目标,下一次显式续跑才执行创建。同名线上对象不能自动认作
66
+ 本请求的成功回执。已保留准确身份的对象继续使用原修复计划,窄范围修复,不重建。
67
+ 保留结果文件与目标占用回执,不通过删除或编辑它们绕过未知状态。
68
+ 新建前再次核对冲突;有引用依赖的写入按波次执行,`--flat-parallel` 拒绝本批依赖。
69
+
70
+ 失败返回 `errorCategory` 与 `capabilityLimitConfirmed`,区分输入、身份解析、环境、
71
+ 业务校验、有证据的能力限制和未知写入;未归类错误保留 `unknown`。
72
+ 引用未解析、缺参数或 CLI 命令不可用均不能证明平台不支持,也不能直接转为插件实现。
73
+
74
+ 业务 POST 请求丢失响应后不自动重放;GET 读取仍保留有界瞬时重试,已确认的鉴权拒绝仍走既有刷新路径。创建前的模板/冲突读取异常明确标记未写入;批次汇总保留各对象的真实写入边界,不能把未知状态折成零写入。
@@ -1,7 +1,11 @@
1
1
  # 查找表单与所属应用
2
2
 
3
3
  使用下列已有只读 CLI。准确应用编码已经是完整查询范围,无须初始化应用或准备修改绑定。
4
- `ROOT_DIR` 是根入口定义的包目录,不是其 `scripts/` 目录。
4
+ `{ROOT_DIR}` 是根入口定义的包目录,不是其 `scripts/` 目录。
5
+
6
+ 需要程序解析 JSON 时,使用 CLI 的 `--output "<本次查询专属.json>"` 并读取该文件。
7
+ 认证和诊断日志写在 stderr;`2>&1` 会把它们混入 JSON。`head`/`grep` 截断的输出
8
+ 不能用于证明查询完整性。
5
9
 
6
10
  已知准确应用编码,列出该应用下全部表单时不传 `--keyword`:
7
11
 
@@ -20,6 +24,8 @@
20
24
  修改请求已给出应用显示名与准确表单时,由所选写命令使用 `--project-root`、`--app-name`、
21
25
  `--form-name` 直接绑定。应用名称不是 `--appNumber` 所需的编码。
22
26
  业务云过滤必须使用准确编码而非显示名。回执 `queryScope` 说明实际范围;空结果只代表该范围无匹配。
27
+ 关键词未命中不证明外部业务对象在环境中不存在。继续确认准确名称/编码,或保留未解析依赖;
28
+ 澄清目标时保留用户要求的引用字段类型。
23
29
 
24
30
  全局查找,或尚不清楚表单名称对应哪个应用:
25
31