@shundoo-ai/dsh-cosmic 1.0.21 → 1.0.22
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.
- package/package.json +1 -1
- package/skills/cosmic-build/LOCAL-PATCHES.md +43 -14
- package/skills/cosmic-build/SKILL.md +24 -9
- package/skills/cosmic-build/examples/java-rules/CosmicReportAggregation.java +26 -17
- package/skills/cosmic-build/examples/java-rules/CosmicReportFilters.java +96 -2
- package/skills/cosmic-build/knowledge/cosmic/arch/security/security_standard.md +4 -4
- package/skills/cosmic-build/knowledge/cosmic/platform/allimport.md +2 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/core/dynamic-object-collection.md +6 -4
- package/skills/cosmic-build/knowledge/cosmic/platform/core/model.md +9 -9
- package/skills/cosmic-build/knowledge/cosmic/platform/core/view.md +5 -5
- package/skills/cosmic-build/knowledge/cosmic/platform/form-plugin.md +8 -4
- package/skills/cosmic-build/knowledge/cosmic/platform/list-plugin.md +5 -3
- package/skills/cosmic-build/knowledge/cosmic/platform/print-plugin-guide.md +1 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/report-plugin.md +269 -57
- package/skills/cosmic-build/knowledge/cosmic/platform/reportlistdata-plugin.md +130 -23
- package/skills/cosmic-build/knowledge/cosmic/platform/reporttreedata-plugin.md +48 -28
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/_index.md +12 -3
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/common/attachment-name-process.md +17 -13
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/common/dynamic-update-field.md +4 -4
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/control/filter-grid/filter-grid-set-value.md +1 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/control/list/filter-basedatafield.md +2 -3
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/control/list/filter-container-init.md +0 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/control/list/filter-popup.md +0 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/control/list/filter-value-parse.md +5 -6
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/control/list/list-show-form.md +1 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/control/list/query-field-dynamic.md +0 -7
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/data-access/business-data/delete-service.md +24 -29
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/data-access/ksql/db-batch.md +4 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/data-access/ksql/db-direct-access.md +4 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/data-access/qfilter/entity-object-access.md +8 -3
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/data-access/qfilter/qfilter-compose.md +6 -5
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/event/after-bind-data-set-visible.md +5 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/event/click-return-data.md +2 -2
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/event/closed-call-back-set-value.md +2 -2
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/event/register-listener.md +1 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/event/set-filter-tab-org.md +3 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/infra/dispatch-service/microservice-dev.md +18 -11
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/infra/dist-lock/dist-lock-basic.md +3 -6
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/infra/mq/mq-subscribe.md +5 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/infra/thread-pool/async-operation.md +10 -6
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/infra/thread-pool/big-task-async.md +4 -2
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/infra/thread-pool/schedule-task.md +9 -7
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/operation/operation-interactive.md +33 -34
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/operation/operation-plugin-events.md +30 -22
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-async-query.md +133 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-batch-query.md +26 -22
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-chart.md +112 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-dataset-assembly.md +200 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-head-filter.md +177 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-hyperlink-drill.md +216 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-list-data-query.md +12 -12
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-merge-column.md +44 -6
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-print-data.md +163 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-row-data-toolbar.md +188 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-subtotal-total.md +139 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-tree-data-query.md +108 -12
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/report/report-tree-list.md +181 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/system-service/report-plugin-interface.md +3 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/tree/tree-basedata-cascade-confirm.md +14 -11
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/tree/tree-list-before-item-validate.md +1 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/tree/tree-list-build-filter.md +1 -1
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/tree/tree-list-multi-level-filter.md +11 -11
- package/skills/cosmic-build/knowledge/cosmic/platform/scenes/tree/tree-list-refresh-node.md +22 -15
- package/skills/cosmic-build/knowledge/cosmic/platform/sdk/sdk-algo.md +2 -2
- package/skills/cosmic-build/knowledge/cosmic/platform/sdk/sdk-entity-model.md +3 -4
- package/skills/cosmic-build/knowledge/cosmic/platform/sdk/sdk-exception.md +9 -5
- package/skills/cosmic-build/knowledge/cosmic/platform/sdk/sdk-orm-access.md +4 -0
- package/skills/cosmic-build/knowledge/cosmic/platform/sdk/sdk-request-context.md +7 -3
- package/skills/cosmic-build/knowledge/cosmic/platform/standards.md +28 -3
- package/skills/cosmic-build/references/compile-guide.md +36 -1
- package/skills/cosmic-build/references/dcs-code-rules.md +180 -0
- package/skills/cosmic-build/references/delivery.md +16 -2
- package/skills/cosmic-build/references/execution-contract.md +15 -3
- package/skills/cosmic-build/references/java-plugin-delivery.md +21 -11
- package/skills/cosmic-build/references/plugin-handoff-input.md +82 -24
- package/skills/cosmic-build/references/plugin-runtime-routing.md +23 -6
- package/skills/cosmic-build/references/report-filter-contract.md +53 -15
- package/skills/cosmic-build/references/sdk-inspection.md +4 -1
- package/skills/cosmic-build/references/type-registry.json +26 -17
- package/skills/cosmic-build/schemas/data-model-authoring.schema.json +1 -1
- package/skills/cosmic-build/scripts/_http_client.py +3 -0
- package/skills/cosmic-build/scripts/compile_plugin_source.py +251 -42
- package/skills/cosmic-build/scripts/configure_list.py +112 -0
- package/skills/cosmic-build/scripts/dcs-rule-catalog.json +799 -0
- package/skills/cosmic-build/scripts/dcs_code_gate.py +1976 -0
- package/skills/cosmic-build/scripts/execution_binding.py +25 -0
- package/skills/cosmic-build/scripts/platform_api_contract.py +352 -7
- package/skills/cosmic-build/scripts/plugin_source_gate.py +9 -1
- package/skills/cosmic-build/scripts/plugin_target_sdk.py +12 -8
- package/skills/cosmic-build/scripts/prepare_plugin_handoff.py +488 -88
- package/skills/cosmic-build/scripts/query_plugin_handoff.py +207 -20
- package/skills/cosmic-build/scripts/register_plugins.py +27 -10
- package/skills/cosmic-build/scripts/render_output_cards.py +57 -20
- package/skills/cosmic-build/scripts/resolve_output_path.py +60 -26
- package/skills/cosmic-build/scripts/run_java_tests.py +162 -0
- package/skills/cosmic-build/scripts/sync_generated_locale_assets.py +28 -0
- package/skills/cosmic-build/scripts/test/fixtures/ReportSdkCheck.java +1 -22
- package/skills/cosmic-build/scripts/test/fixtures/list_column_property_declarations.json +887 -0
- package/skills/cosmic-build/scripts/test/fixtures/operation-entry-field-prepare.java +78 -0
- package/skills/cosmic-build/scripts/test/test_add_field_required_contract.py +12 -0
- package/skills/cosmic-build/scripts/test/test_batch5_drift_governance.py +23 -2
- package/skills/cosmic-build/scripts/test/test_compile_plugin_source.py +287 -4
- package/skills/cosmic-build/scripts/test/test_configure_list_delivery.py +132 -0
- package/skills/cosmic-build/scripts/test/test_cosmic_sdk_examples.py +58 -1
- package/skills/cosmic-build/scripts/test/test_data_model_contract.py +19 -0
- package/skills/cosmic-build/scripts/test/test_dcs_code_gate.py +901 -0
- package/skills/cosmic-build/scripts/test/test_delivery_stage_boundary.py +1 -1
- package/skills/cosmic-build/scripts/test/test_direct_cli_architecture.py +2 -0
- package/skills/cosmic-build/scripts/test/test_http_client.py +6 -0
- package/skills/cosmic-build/scripts/test/test_java_toolchain_feedback.py +206 -0
- package/skills/cosmic-build/scripts/test/test_kd_api.py +21 -0
- package/skills/cosmic-build/scripts/test/test_list_configuration_closure.py +184 -0
- package/skills/cosmic-build/scripts/test/test_mcp_cli.py +139 -2
- package/skills/cosmic-build/scripts/test/test_menu_creation_closure.py +16 -0
- package/skills/cosmic-build/scripts/test/test_modeling_input_recovery.py +55 -1
- package/skills/cosmic-build/scripts/test/test_open_world_cli_catalog.py +1 -1
- package/skills/cosmic-build/scripts/test/test_operation_field_preparation.py +84 -0
- package/skills/cosmic-build/scripts/test/test_platform_api_contract.py +322 -1
- package/skills/cosmic-build/scripts/test/test_plugin_handoff.py +951 -4
- package/skills/cosmic-build/scripts/test/test_plugin_source_gate.py +30 -2
- package/skills/cosmic-build/scripts/test/test_plugin_target_sdk.py +21 -0
- package/skills/cosmic-build/scripts/test/test_property_reroute.py +165 -0
- package/skills/cosmic-build/scripts/test/test_property_schema_first.py +35 -0
- package/skills/cosmic-build/scripts/test/test_query_plugin_handoff.py +221 -0
- package/skills/cosmic-build/scripts/test/test_register_plugins.py +76 -4
- package/skills/cosmic-build/scripts/test/test_render_output_cards.py +75 -3
- package/skills/cosmic-build/scripts/test/test_report_business_contract.py +27 -5
- package/skills/cosmic-build/scripts/test/test_report_doc_contract_sync.py +103 -11
- package/skills/cosmic-build/scripts/test/test_report_plugin_source_gate.py +46 -16
- package/skills/cosmic-build/scripts/test/test_report_properties.py +74 -15
- package/skills/cosmic-build/scripts/test/test_report_query_data_source.py +3 -1
- package/skills/cosmic-build/scripts/test/test_report_sdk_optimization.py +1 -2
- package/skills/cosmic-build/scripts/test/test_test_environment.py +76 -1
- package/skills/cosmic-build/scripts/test_environment.py +67 -1
- package/skills/cosmic-build/skills/cosmic-coding-impl/SKILL.md +52 -10
- package/skills/cosmic-build/skills/cosmic-meta-api/apis/ai_meta.md +16 -3
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/report-write-contracts.json +59 -26
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/cli/rule-domain.json +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/contracts/schema/report-write.schema.json +75 -18
- package/skills/cosmic-build/skills/cosmic-meta-api/modules/pdm/scripts/pdm_auto.py +39 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/modules/pdm/scripts/pdm_client.py +97 -10
- package/skills/cosmic-build/skills/cosmic-meta-api/modules/verify/SKILL.md +10 -12
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_apps.py +3 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_formactions.py +38 -29
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_listui.py +400 -233
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_metaops.py +87 -45
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_properties.py +42 -15
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/cmd_rules.py +135 -5
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/config.py +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/execution_errors.py +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/formatters.py +17 -11
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/property_reroute.py +15 -5
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/report_ops.py +1429 -238
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/_core/validators.py +56 -28
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/cosmic_api.py +380 -134
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/field_decorator.py +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/meta_export.py +12 -11
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/meta_verifier.py +42 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_add_field_placement_closure.py +8 -8
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_build_configuration_readback.py +94 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_build_receipt_resume.py +47 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_metadata_unchanged_fail_closed.py +87 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_dym_evidence.py +23 -23
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_entity_integrity.py +279 -4
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_field_guard.py +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_plugin_contract.py +509 -32
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_readback_derivation.py +178 -1
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_recreate_plan.py +125 -10
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_serve_contract.py +208 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_report_typed_filters.py +259 -50
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_rule_inventory_perf.py +29 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_rule_write_closure.py +20 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_run_batch_post_build_recovery.py +18 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_run_batch_verification_evidence.py +35 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_run_identity_guard.py +25 -0
- package/skills/cosmic-build/skills/cosmic-meta-api/scripts/test/test_time_range_rule.py +98 -0
- package/skills/cosmic-build/skills/cosmic-meta-knowledge/domain-model/report-model.md +20 -9
- package/skills/cosmic-build/skills/cosmic-meta-knowledge/generation/report-modeling-guide.md +55 -25
- package/skills/cosmic-build/skills/cosmic-meta-knowledge/property-guides/report-column-properties.md +15 -39
- package/skills/cosmic-build/skills/cosmic-meta-modeling/SKILL.md +19 -17
- package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/report/SKILL.md +82 -38
- package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/report/examples/golden-example-report-batch.md +64 -19
- package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/report/examples/golden-example-report-plugin.md +32 -20
- package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/report/examples/golden-example-report-tree.md +78 -31
- package/skills/cosmic-build/skills/cosmic-meta-modeling/modules/report/report-artifact-schema.json +2 -1
- package/skills/cosmic-build/skills/cosmic-meta-modeling/references/authoring-companion-fields.md +3 -0
- package/skills/cosmic-build/skills/cosmic-meta-modeling/references/authoring-list-configuration.md +2 -0
- package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/data_model_contract.py +3 -1
- package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/data_model_emit.py +27 -4
- package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/report_validator.py +99 -44
- package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/test_report_examples.py +31 -4
- package/skills/cosmic-build/skills/cosmic-meta-modeling/scripts/test_report_validator.py +129 -29
- package/skills/cosmic-build/skills/cosmic-meta-modifier/SKILL.md +6 -2
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/operation/validation.md +2 -0
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/property/SKILL.md +1 -1
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/report-op/SKILL.md +104 -25
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/rule/SKILL.md +9 -0
- package/skills/cosmic-build/skills/cosmic-meta-modifier/modules/verify/usage-guide.md +2 -2
- package/skills/cosmic-build/skills/cosmic-meta-modifier/references/list-filter-modification.md +39 -12
- package/skills/cosmic-build/skills/mcp-server/SKILL.md +39 -24
- package/skills/cosmic-build/skills/mcp-server/scripts/mcp_cli.py +20 -6
- package/skills/cosmic-dev-best-practices/SKILL.md +1 -1
- package/skills/cosmic-dev-best-practices/references/README.md +2 -2
- package/skills/cosmic-dev-best-practices/references/basedata-dev-convention.md +2 -2
- package/skills/cosmic-dev-best-practices/references/bill-dev-convention.md +4 -4
- package/skills/cosmic-dev-best-practices/references/design-document-convention.md +2 -2
- package/skills/cosmic-dev-best-practices/references/design-examples/basedata-design-example.md +4 -4
- package/skills/cosmic-dev-best-practices/references/design-examples/bill-design-example.md +13 -13
- package/skills/cosmic-dev-best-practices/references/elements/CustomerField.md +1 -1
- package/skills/cosmic-dev-best-practices/references/elements/README.md +1 -1
- package/skills/cosmic-dev-best-practices/references/elements/SupplierField.md +1 -1
- package/skills/cosmic-dev-best-practices/references/elements/common-field-property-conventions.md +109 -13
- package/skills/cosmic-dev-best-practices/references/layout-control-convention.md +1 -1
- package/skills/erp-analysis/references/delivery-contract.md +2 -1
- package/skills/erp-analysis/templates/AGENTS.template.md +3 -1
- package/skills/cosmic-build/assets/platform-report-filters/TypedReportFilterFields.java +0 -169
- package/skills/cosmic-build/assets/platform-report-filters/platform.patch +0 -98
- package/skills/cosmic-build/scripts/apply_report_filter_extension.py +0 -39
|
@@ -332,7 +332,6 @@ def do_resolve_project_form_read_target(cfg, token, name, project_root,
|
|
|
332
332
|
}}
|
|
333
333
|
|
|
334
334
|
|
|
335
|
-
|
|
336
335
|
def do_resolve_form_action_target(cfg, token, name, app_root, limit=5):
|
|
337
336
|
"""Resolve one form without exposing an unbounded fuzzy result to the model."""
|
|
338
337
|
archive = _read_app_identity_json(
|
|
@@ -545,7 +544,12 @@ def _extension_terminal(error_code, message, phase, *, precheck=None,
|
|
|
545
544
|
|
|
546
545
|
|
|
547
546
|
def _form_selection_required(error_code, message, phase, candidates, *, extra=None):
|
|
548
|
-
"""
|
|
547
|
+
"""Stop one mutation until the user selects an exact form number.
|
|
548
|
+
|
|
549
|
+
Candidate order, archive order, naming style, and a form that looks like an
|
|
550
|
+
"original" are not selection evidence. The result makes that boundary
|
|
551
|
+
explicit for every domain command that uses form preparation.
|
|
552
|
+
"""
|
|
549
553
|
rows = [item for item in candidates or [] if isinstance(item, dict)]
|
|
550
554
|
data = {
|
|
551
555
|
"phase": phase,
|
|
@@ -1454,7 +1458,7 @@ def normalize_add_field_biz_word(value):
|
|
|
1454
1458
|
return raw
|
|
1455
1459
|
|
|
1456
1460
|
|
|
1457
|
-
def validate_add_field_input(field_name, biz_word, field_type=
|
|
1461
|
+
def validate_add_field_input(field_name, biz_word, field_type=None,
|
|
1458
1462
|
combo=None, combo_json=None, basedata=None,
|
|
1459
1463
|
mul_table=None, unit_field=None, flex_type=None,
|
|
1460
1464
|
ref_base_field=None, ref_display_prop=None,
|
|
@@ -1592,7 +1596,7 @@ def _verify_add_field_contract(cfg, token, form_number, field_type,
|
|
|
1592
1596
|
return {
|
|
1593
1597
|
"ok": False,
|
|
1594
1598
|
"scope": ["identity", "fieldType", "tableName"],
|
|
1595
|
-
"message": "MulBasedataField
|
|
1599
|
+
"message": "MulBasedataField association table was not independently verified",
|
|
1596
1600
|
"tableNameReadBack": {
|
|
1597
1601
|
"requested": requested,
|
|
1598
1602
|
"observed": observed,
|
|
@@ -1714,7 +1718,7 @@ def _ensure_add_field_complex_properties(
|
|
|
1714
1718
|
|
|
1715
1719
|
|
|
1716
1720
|
def do_add_field(cfg, token, form_name, field_name, biz_word,
|
|
1717
|
-
field_type=
|
|
1721
|
+
field_type=None, app_root=None,
|
|
1718
1722
|
project_root=None, app_name=None, app_code=None,
|
|
1719
1723
|
selected_ext_app_id=None, required=False,
|
|
1720
1724
|
entry=False, entity_name=None, entity_key=None,
|
|
@@ -1824,7 +1828,8 @@ def do_add_field(cfg, token, form_name, field_name, biz_word,
|
|
|
1824
1828
|
if not hit.get("inLayout"):
|
|
1825
1829
|
return _extension_terminal(
|
|
1826
1830
|
"FIELD_CONTROL_MISSING",
|
|
1827
|
-
"
|
|
1831
|
+
"The entity field exists but has no rendered FieldAp/EntryFieldAp; "
|
|
1832
|
+
"the requested visible field is incomplete",
|
|
1828
1833
|
"verify_field",
|
|
1829
1834
|
extra={"editableTarget": editable, "field": hit,
|
|
1830
1835
|
"writeAttempted": False},
|
|
@@ -1839,7 +1844,7 @@ def do_add_field(cfg, token, form_name, field_name, biz_word,
|
|
|
1839
1844
|
):
|
|
1840
1845
|
return _extension_terminal(
|
|
1841
1846
|
"FIELD_READBACK_MISMATCH",
|
|
1842
|
-
"
|
|
1847
|
+
"Existing MulBasedataField association table could not be repaired",
|
|
1843
1848
|
"verify_field", cause=complex_result,
|
|
1844
1849
|
extra={"editableTarget": editable, "field": hit},
|
|
1845
1850
|
)
|
|
@@ -1903,7 +1908,8 @@ def do_add_field(cfg, token, form_name, field_name, biz_word,
|
|
|
1903
1908
|
if not verification.get("inLayout"):
|
|
1904
1909
|
return _extension_terminal(
|
|
1905
1910
|
"FIELD_CONTROL_MISSING_AFTER_WRITE",
|
|
1906
|
-
"
|
|
1911
|
+
"The field was created in the entity but no FieldAp/EntryFieldAp was "
|
|
1912
|
+
"present on independent read-back; do not report the field as complete",
|
|
1907
1913
|
"verify_field", cause=quick,
|
|
1908
1914
|
extra={"editableTarget": editable, "writeAttempted": True},
|
|
1909
1915
|
)
|
|
@@ -1917,7 +1923,7 @@ def do_add_field(cfg, token, form_name, field_name, biz_word,
|
|
|
1917
1923
|
):
|
|
1918
1924
|
return _extension_terminal(
|
|
1919
1925
|
"UNKNOWN_AFTER_WRITE",
|
|
1920
|
-
"
|
|
1926
|
+
"Field was created but its multi-select association table did not verify",
|
|
1921
1927
|
"verify_field", cause=complex_result,
|
|
1922
1928
|
extra={"editableTarget": editable, "field": verification},
|
|
1923
1929
|
)
|
|
@@ -2017,7 +2023,7 @@ def validate_add_fields_input(fields):
|
|
|
2017
2023
|
f"FIELD_BATCH_INVALID: fields[{index}] non-ASCII selection labels require "
|
|
2018
2024
|
"comboJson/comboOptions with explicit stable values"
|
|
2019
2025
|
)
|
|
2020
|
-
result = validate_add_field_input(field.get("name"), field.get("bizWord"), field.get("fieldType"
|
|
2026
|
+
result = validate_add_field_input(field.get("name"), field.get("bizWord"), field.get("fieldType"),
|
|
2021
2027
|
combo=field.get("combo"), combo_json=field.get("comboJson"),
|
|
2022
2028
|
**_batch_field_options(field))
|
|
2023
2029
|
if not result.get("status"):
|
|
@@ -2030,7 +2036,7 @@ def validate_add_fields_input(fields):
|
|
|
2030
2036
|
def do_add_fields(cfg, token, form_name, fields, *, app_root=None, project_root=None,
|
|
2031
2037
|
app_name=None, app_code=None, entry=False, entity_name=None,
|
|
2032
2038
|
entity_key=None, _prepared=None):
|
|
2033
|
-
"""
|
|
2039
|
+
"""One authenticated domain batch, verified per field, with explicit partial failure."""
|
|
2034
2040
|
validate_add_fields_input(fields)
|
|
2035
2041
|
prepared = _prepared or do_prepare_form_mutation_target(
|
|
2036
2042
|
cfg, token, name=form_name, app_root=app_root,
|
|
@@ -2043,14 +2049,14 @@ def do_add_fields(cfg, token, form_name, fields, *, app_root=None, project_root=
|
|
|
2043
2049
|
results = []
|
|
2044
2050
|
for index, field in enumerate(fields):
|
|
2045
2051
|
result = do_add_field(cfg, token, form_name, field["name"], field["bizWord"],
|
|
2046
|
-
field_type=field.get("fieldType"
|
|
2052
|
+
field_type=field.get("fieldType"), combo=field.get("combo"), combo_json=field.get("comboJson"),
|
|
2047
2053
|
required=field.get("required", False), app_root=app_root, project_root=project_root,
|
|
2048
2054
|
app_name=app_name, app_code=app_code, entry=entry, entity_name=entity_name, entity_key=entity_key,
|
|
2049
2055
|
_prepared=prepared, **_batch_field_options(field))
|
|
2050
2056
|
results.append(result)
|
|
2051
2057
|
if not _is_api_success(result) or not (result.get("data") or {}).get("verified"):
|
|
2052
2058
|
return {"status": False, "errorCode": "FIELD_BATCH_INCOMPLETE",
|
|
2053
|
-
"message": "
|
|
2059
|
+
"message": "Batch stopped at the first unverified field; do not replay completed items",
|
|
2054
2060
|
"data": {"results": results, "failedIndex": index, "pending": fields[index + 1:],
|
|
2055
2061
|
"editableTarget": data.get("editableTarget")}}
|
|
2056
2062
|
return {"status": True, "data": {"verified": True, "results": results,
|
|
@@ -2058,7 +2064,7 @@ def do_add_fields(cfg, token, form_name, fields, *, app_root=None, project_root=
|
|
|
2058
2064
|
|
|
2059
2065
|
|
|
2060
2066
|
def do_add_simple_field(cfg, token, form_name, field_name, biz_word,
|
|
2061
|
-
field_type=
|
|
2067
|
+
field_type=None, app_root=None,
|
|
2062
2068
|
project_root=None, app_name=None, app_code=None,
|
|
2063
2069
|
selected_ext_app_id=None, required=False,
|
|
2064
2070
|
entry=False, entity_name=None, entity_key=None):
|
|
@@ -2073,7 +2079,7 @@ def do_add_simple_field(cfg, token, form_name, field_name, biz_word,
|
|
|
2073
2079
|
|
|
2074
2080
|
|
|
2075
2081
|
def summary_delete_dependencies(metadata, fields):
|
|
2076
|
-
"""
|
|
2082
|
+
"""Find surviving summary sources that point at a requested deletion."""
|
|
2077
2083
|
keys = {str(field.get("fieldKey") or "") for field in fields}
|
|
2078
2084
|
dependencies = []
|
|
2079
2085
|
def visit(value):
|
|
@@ -2121,11 +2127,11 @@ def rule_delete_dependencies(metadata, fields):
|
|
|
2121
2127
|
def do_remove_field(cfg, token, form_name, field_name, *, app_root=None,
|
|
2122
2128
|
project_root=None, app_name=None, app_code=None,
|
|
2123
2129
|
entity_key=None, before_delete=None):
|
|
2124
|
-
"""
|
|
2130
|
+
"""Resolve all requested fields before one deletion and independent read-back."""
|
|
2125
2131
|
form_name = str(form_name or "").strip()
|
|
2126
2132
|
field_names = field_name if isinstance(field_name, list) else [field_name]
|
|
2127
2133
|
if not field_names or any(not isinstance(name, str) or not name.strip() for name in field_names):
|
|
2128
|
-
return _extension_terminal("REMOVE_FIELD_INPUT_INVALID", "
|
|
2134
|
+
return _extension_terminal("REMOVE_FIELD_INPUT_INVALID", "Provide a non-empty array of exact field names/keys", "preflight")
|
|
2129
2135
|
field_names = [name.strip() for name in field_names]
|
|
2130
2136
|
entity_key = str(entity_key or "").strip()
|
|
2131
2137
|
if not form_name or not field_name:
|
|
@@ -2175,7 +2181,7 @@ def do_remove_field(cfg, token, form_name, field_name, *, app_root=None,
|
|
|
2175
2181
|
return {
|
|
2176
2182
|
"status": False,
|
|
2177
2183
|
"errorCode": "FIELD_NOT_FOUND" if not matches else "FIELD_TARGET_AMBIGUOUS",
|
|
2178
|
-
"message": "
|
|
2184
|
+
"message": "Every field must resolve uniquely before any deletion; use an exact key or --entity-key",
|
|
2179
2185
|
"data": {"writeAttempted": False, "requestedField": selector,
|
|
2180
2186
|
"phase": "resolve_field", "success": False,
|
|
2181
2187
|
"candidates": [{"fieldKey": row.get("key"), "fieldName": row.get("name"),
|
|
@@ -2209,7 +2215,7 @@ def do_remove_field(cfg, token, form_name, field_name, *, app_root=None,
|
|
|
2209
2215
|
"FIELD_DEPENDENCY_READ_FAILED", "Legacy entity read did not return field metadata",
|
|
2210
2216
|
"preflight", cause=metadata, extra={"writeAttempted": False})
|
|
2211
2217
|
if not _is_api_success(metadata) or not isinstance(metadata.get("data"), dict):
|
|
2212
|
-
return _extension_terminal("FIELD_DEPENDENCY_READ_FAILED", "
|
|
2218
|
+
return _extension_terminal("FIELD_DEPENDENCY_READ_FAILED", "Cannot verify field dependencies before deletion",
|
|
2213
2219
|
"preflight", cause=metadata, extra={"writeAttempted": False})
|
|
2214
2220
|
dependencies = (summary_delete_dependencies(metadata.get("data"), candidates)
|
|
2215
2221
|
+ rule_delete_dependencies(metadata.get("data"), candidates))
|
|
@@ -2268,7 +2274,7 @@ def do_remove_field(cfg, token, form_name, field_name, *, app_root=None,
|
|
|
2268
2274
|
if remaining or after_ids != before_ids - requested:
|
|
2269
2275
|
return _extension_terminal(
|
|
2270
2276
|
"UNKNOWN_AFTER_WRITE",
|
|
2271
|
-
"
|
|
2277
|
+
"Field deletion read-back differs from the requested final field set",
|
|
2272
2278
|
"verify_field", cause={"remaining": remaining, "unexpectedMissing": sorted(before_ids - requested - after_ids),
|
|
2273
2279
|
"unexpectedAdded": sorted(after_ids - before_ids)},
|
|
2274
2280
|
extra={"editableTarget": editable, "field": field, "fields": candidates, "writeAttempted": True},
|
|
@@ -2941,7 +2947,7 @@ def do_move_form(cfg, token, form_id, biz_app_id, target_biz_unit_id):
|
|
|
2941
2947
|
|
|
2942
2948
|
if _is_api_success(result):
|
|
2943
2949
|
data = result.get("data") or {}
|
|
2944
|
-
#
|
|
2950
|
+
# Write receipt only: the authoritative outcome comes from the caller's read-back.
|
|
2945
2951
|
print(f"[moveForm] 写入回执succeeded (待回读验证): formId={data.get('formId')} → bizUnitId={data.get('targetBizUnitId')}", flush=True)
|
|
2946
2952
|
else:
|
|
2947
2953
|
msg = _extract_error_message(result)
|
|
@@ -3174,11 +3180,13 @@ def _unit_node_in_tree(units, unit_id, *, root=True):
|
|
|
3174
3180
|
|
|
3175
3181
|
|
|
3176
3182
|
def _read_form_unit_state(cfg, token, app_id, form_id, form_number):
|
|
3177
|
-
"""
|
|
3183
|
+
"""Resolve a form's current functional group. Internal routing stays internal.
|
|
3178
3184
|
|
|
3179
|
-
|
|
3180
|
-
|
|
3181
|
-
|
|
3185
|
+
Callers and the model only ever see the getFormUnit contract: which platform
|
|
3186
|
+
endpoints answer the question is an implementation detail, so every internal
|
|
3187
|
+
call's diagnostics are captured instead of printed. Returning the internal
|
|
3188
|
+
error codes would leak the same detail, so failures are mapped onto the
|
|
3189
|
+
published getFormUnit codes.
|
|
3182
3190
|
"""
|
|
3183
3191
|
import contextlib
|
|
3184
3192
|
import io
|
|
@@ -3243,17 +3251,18 @@ def _read_form_unit_state(cfg, token, app_id, form_id, form_number):
|
|
|
3243
3251
|
|
|
3244
3252
|
|
|
3245
3253
|
def do_get_form_unit(cfg, token, biz_app_id, form_id=None, form_number=None):
|
|
3246
|
-
"""
|
|
3254
|
+
"""Read a form's current functional group through registered fallback queries.
|
|
3247
3255
|
|
|
3248
|
-
|
|
3256
|
+
Internal platform routes are deliberately not part of this public CLI contract.
|
|
3257
|
+
formId and formNumber are alternatives; formId wins when both are present.
|
|
3249
3258
|
"""
|
|
3250
3259
|
app_id = str(biz_app_id or "").strip()
|
|
3251
3260
|
if not app_id:
|
|
3252
|
-
raise ValueError("getFormUnit
|
|
3261
|
+
raise ValueError("getFormUnit requires --bizAppId")
|
|
3253
3262
|
resolved_form_id = str(form_id or "").strip()
|
|
3254
3263
|
resolved_form_number = str(form_number or "").strip()
|
|
3255
3264
|
if not resolved_form_id and not resolved_form_number:
|
|
3256
|
-
raise ValueError("getFormUnit
|
|
3265
|
+
raise ValueError("getFormUnit requires --formId or --formNumber")
|
|
3257
3266
|
|
|
3258
3267
|
state, failure = _read_form_unit_state(
|
|
3259
3268
|
cfg, token, app_id, resolved_form_id, resolved_form_number
|