asecli 0.8.5__tar.gz → 0.8.6__tar.gz

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 (261) hide show
  1. {asecli-0.8.5 → asecli-0.8.6}/PKG-INFO +27 -10
  2. {asecli-0.8.5 → asecli-0.8.6}/README.md +26 -9
  3. {asecli-0.8.5 → asecli-0.8.6}/docs/00-governance/timeline.md +2 -0
  4. {asecli-0.8.5 → asecli-0.8.6}/docs/00-governance/traceability.csv +1 -1
  5. {asecli-0.8.5 → asecli-0.8.6}/docs/04-delivery/project-plan-task-charter.md +2 -1
  6. {asecli-0.8.5 → asecli-0.8.6}/pyproject.toml +1 -1
  7. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/__init__.py +1 -1
  8. asecli-0.8.6/tests/test_smoke.py +4 -0
  9. {asecli-0.8.5 → asecli-0.8.6}/uv.lock +1 -1
  10. asecli-0.8.5/tests/test_smoke.py +0 -4
  11. {asecli-0.8.5 → asecli-0.8.6}/.github/workflows/ci.yml +0 -0
  12. {asecli-0.8.5 → asecli-0.8.6}/.github/workflows/publish.yml +0 -0
  13. {asecli-0.8.5 → asecli-0.8.6}/.gitignore +0 -0
  14. {asecli-0.8.5 → asecli-0.8.6}/.project-architect.json +0 -0
  15. {asecli-0.8.5 → asecli-0.8.6}/AGENTS.md +0 -0
  16. {asecli-0.8.5 → asecli-0.8.6}/LICENSE +0 -0
  17. {asecli-0.8.5 → asecli-0.8.6}/SECURITY.md +0 -0
  18. {asecli-0.8.5 → asecli-0.8.6}/docs/00-governance/audit-supplement.json +0 -0
  19. {asecli-0.8.5 → asecli-0.8.6}/docs/00-governance/change-register.md +0 -0
  20. {asecli-0.8.5 → asecli-0.8.6}/docs/00-governance/delivery-protocol.md +0 -0
  21. {asecli-0.8.5 → asecli-0.8.6}/docs/00-governance/project-charter.md +0 -0
  22. {asecli-0.8.5 → asecli-0.8.6}/docs/00-governance/supply-chain-policy.md +0 -0
  23. {asecli-0.8.5 → asecli-0.8.6}/docs/01-architecture/assumption-experiments.md +0 -0
  24. {asecli-0.8.5 → asecli-0.8.6}/docs/01-architecture/module-map.md +0 -0
  25. {asecli-0.8.5 → asecli-0.8.6}/docs/01-architecture/project-architecture-and-requirements.md +0 -0
  26. {asecli-0.8.5 → asecli-0.8.6}/docs/01-architecture/technical-route.md +0 -0
  27. {asecli-0.8.5 → asecli-0.8.6}/docs/03-quality/bug-register.md +0 -0
  28. {asecli-0.8.5 → asecli-0.8.6}/docs/03-quality/regression-catalog.md +0 -0
  29. {asecli-0.8.5 → asecli-0.8.6}/docs/03-quality/test-strategy.md +0 -0
  30. {asecli-0.8.5 → asecli-0.8.6}/docs/04-delivery/roadmap.md +0 -0
  31. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-01-014104-audit-report.md +0 -0
  32. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-01-014104-optimization-plan.md +0 -0
  33. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-01-145343-audit-report.md +0 -0
  34. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-01-145343-optimization-plan.md +0 -0
  35. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-01-193521-audit-report.md +0 -0
  36. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-01-193521-optimization-plan.md +0 -0
  37. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-01-203438-audit-report.md +0 -0
  38. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-01-203438-optimization-plan.md +0 -0
  39. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-02-121155-audit-report.md +0 -0
  40. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-02-121155-optimization-plan.md +0 -0
  41. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-02-175509-audit-report.md +0 -0
  42. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-02-175509-optimization-plan.md +0 -0
  43. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-04-122304-audit-report.md +0 -0
  44. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-04-122304-optimization-plan.md +0 -0
  45. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-05-142617-audit-report.md +0 -0
  46. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-05-142617-optimization-plan.md +0 -0
  47. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-05-160945-audit-report.md +0 -0
  48. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-05-160945-optimization-plan.md +0 -0
  49. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-05-213523-audit-report.md +0 -0
  50. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-05-213523-optimization-plan.md +0 -0
  51. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-10-193631-audit-report.md +0 -0
  52. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-10-193631-optimization-plan.md +0 -0
  53. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-14-123640-audit-report.md +0 -0
  54. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-14-123640-optimization-plan.md +0 -0
  55. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-14-124947-audit-report.md +0 -0
  56. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-14-124947-optimization-plan.md +0 -0
  57. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-14-132814-audit-report.md +0 -0
  58. {asecli-0.8.5 → asecli-0.8.6}/docs/adversarial-audits/2026-09-14-132814-optimization-plan.md +0 -0
  59. {asecli-0.8.5 → asecli-0.8.6}/docs/first-principles/2026-08-31-231401-optimization-plan.md +0 -0
  60. {asecli-0.8.5 → asecli-0.8.6}/docs/first-principles/2026-09-01-190656-optimization-plan.md +0 -0
  61. {asecli-0.8.5 → asecli-0.8.6}/docs/proposals/2026-09-07-shadergraph-to-ase-requirements.md +0 -0
  62. {asecli-0.8.5 → asecli-0.8.6}/scripts/install.ps1 +0 -0
  63. {asecli-0.8.5 → asecli-0.8.6}/scripts/install.sh +0 -0
  64. {asecli-0.8.5 → asecli-0.8.6}/skills/asecli/SKILL.md +0 -0
  65. {asecli-0.8.5 → asecli-0.8.6}/skills/asecli/references/conversion-publication-receipt.v1.schema.json +0 -0
  66. {asecli-0.8.5 → asecli-0.8.6}/skills/asecli/references/conversion-workflow.md +0 -0
  67. {asecli-0.8.5 → asecli-0.8.6}/skills/asecli/references/layout-standard.md +0 -0
  68. {asecli-0.8.5 → asecli-0.8.6}/skills/asecli/references/master-output-settings-standard.md +0 -0
  69. {asecli-0.8.5 → asecli-0.8.6}/skills/asecli/references/material-property-standard.md +0 -0
  70. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/__init__.py +0 -0
  71. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/_editor_port_contract.py +0 -0
  72. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/_editor_primitives.py +0 -0
  73. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/_editor_spec_grammar.py +0 -0
  74. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/_editor_spec_io.py +0 -0
  75. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/_editor_spec_validation.py +0 -0
  76. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/_gui_handoff_store.py +0 -0
  77. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/_gui_project.py +0 -0
  78. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/_gui_resource_store.py +0 -0
  79. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/_gui_resource_upgrade.py +0 -0
  80. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/editor_create.py +0 -0
  81. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/editor_spec.py +0 -0
  82. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/graph_geometry.py +0 -0
  83. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/graph_geometry_parser.py +0 -0
  84. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/graph_inspect.py +0 -0
  85. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/gui_handoff.py +0 -0
  86. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/gui_presentation.py +0 -0
  87. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/gui_provider_detection.py +0 -0
  88. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/gui_runtime_probe.py +0 -0
  89. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/gui_support.py +0 -0
  90. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/gui_support_resource.py +0 -0
  91. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/mcp_client.py +0 -0
  92. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/recompile.py +0 -0
  93. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/render_settings.py +0 -0
  94. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/resource_text.py +0 -0
  95. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/resources/asecli_material_gui.authoring.part00.cs.txt +0 -0
  96. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/resources/asecli_material_gui.authoring.part01.cs.txt +0 -0
  97. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/resources/asecli_material_gui.authoring.store.cs.txt +0 -0
  98. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/resources/asecli_material_gui.condition.cs.txt +0 -0
  99. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/resources/asecli_material_gui.hydration.cs.txt +0 -0
  100. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/resources/asecli_material_gui.part00.cs.txt +0 -0
  101. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/resources/asecli_material_gui.part01.cs.txt +0 -0
  102. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/resources/asecli_material_gui.reconciliation.cs.txt +0 -0
  103. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/resources/asecli_material_gui.transaction.cs.txt +0 -0
  104. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/resources/editor_create.part00.cs.txt +0 -0
  105. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/resources/editor_create.part01.cs.txt +0 -0
  106. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/resources/editor_create.part02.cs.txt +0 -0
  107. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/resources/editor_create.part03.cs.txt +0 -0
  108. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/resources/editor_create.part04.cs.txt +0 -0
  109. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/resources/wire_route.transaction.cs.txt +0 -0
  110. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/bridge/wire_route.py +0 -0
  111. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/checks/__init__.py +0 -0
  112. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/checks/checksum.py +0 -0
  113. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/checks/local_vars.py +0 -0
  114. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/checks/usage.py +0 -0
  115. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/checks/validate.py +0 -0
  116. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/__init__.py +0 -0
  117. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/commands.py +0 -0
  118. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/commentary_command.py +0 -0
  119. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/contract.py +0 -0
  120. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/contract_command.py +0 -0
  121. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/conversion_output.py +0 -0
  122. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/create_command.py +0 -0
  123. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/custom_gui_command.py +0 -0
  124. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/export_sg_command.py +0 -0
  125. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/graph_review_command.py +0 -0
  126. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/gui_provider.py +0 -0
  127. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/gui_support_command.py +0 -0
  128. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/io.py +0 -0
  129. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/layout_command.py +0 -0
  130. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/main.py +0 -0
  131. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/migrate_package_command.py +0 -0
  132. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/recompile_metadata.py +0 -0
  133. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/skill_command.py +0 -0
  134. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/cli/usage_command.py +0 -0
  135. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/contracts/editor-graph-spec.v3.schema.json +0 -0
  136. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/contracts/sgcli.native.v3.schema.json +0 -0
  137. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/contracts.py +0 -0
  138. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/__init__.py +0 -0
  139. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/comment_bounds.py +0 -0
  140. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/comment_layout.py +0 -0
  141. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/comment_metrics.py +0 -0
  142. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/comment_purpose.py +0 -0
  143. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/commentary.py +0 -0
  144. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/compiled_metadata.py +0 -0
  145. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/compiled_properties.py +0 -0
  146. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/custom_gui.py +0 -0
  147. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/custom_gui_versions.py +0 -0
  148. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/fishbone_placement.py +0 -0
  149. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/fishbone_topology.py +0 -0
  150. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/graph_ops.py +0 -0
  151. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/graph_review.py +0 -0
  152. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/island_layout.py +0 -0
  153. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/layout.py +0 -0
  154. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/layout_audit.py +0 -0
  155. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/layout_audit_geometry.py +0 -0
  156. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/layout_audit_repeated.py +0 -0
  157. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/layout_graph.py +0 -0
  158. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/local_vars.py +0 -0
  159. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/material_gui_condition.py +0 -0
  160. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/material_gui_protocol.py +0 -0
  161. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/material_gui_spec.py +0 -0
  162. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/meticulous_layout.py +0 -0
  163. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/model.py +0 -0
  164. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/property_presentation.py +0 -0
  165. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/reuse_plan.py +0 -0
  166. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/wire_geometry.py +0 -0
  167. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/core/wire_router.py +0 -0
  168. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/export_sg.py +0 -0
  169. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/schema/__init__.py +0 -0
  170. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/schema/data/observed.json +0 -0
  171. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/schema/data/schemas.json +0 -0
  172. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/schema_validation.py +0 -0
  173. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/__init__.py +0 -0
  174. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/alpha_modulate.py +0 -0
  175. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/binding.py +0 -0
  176. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/conversion_report.py +0 -0
  177. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/custom_expression.py +0 -0
  178. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/decoder.py +0 -0
  179. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/evidence.py +0 -0
  180. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/model.py +0 -0
  181. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/nodes.py +0 -0
  182. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/pass_blend.py +0 -0
  183. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/reconciliation.py +0 -0
  184. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/report_presentation.py +0 -0
  185. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/report_semantics.py +0 -0
  186. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/sources.py +0 -0
  187. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/surface_matching.py +0 -0
  188. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/surface_precision.py +0 -0
  189. {asecli-0.8.5 → asecli-0.8.6}/src/asecli/sg_export/surface_semantics.py +0 -0
  190. {asecli-0.8.5 → asecli-0.8.6}/tests/TEST.md +0 -0
  191. {asecli-0.8.5 → asecli-0.8.6}/tests/__init__.py +0 -0
  192. {asecli-0.8.5 → asecli-0.8.6}/tests/conftest.py +0 -0
  193. {asecli-0.8.5 → asecli-0.8.6}/tests/editor_create_v3_fixture.py +0 -0
  194. {asecli-0.8.5 → asecli-0.8.6}/tests/fixtures/HLIT.shader +0 -0
  195. {asecli-0.8.5 → asecli-0.8.6}/tests/fixtures/asecli_material_gui_v0_2_0.cs.txt +0 -0
  196. {asecli-0.8.5 → asecli-0.8.6}/tests/fixtures/step-antialiasing.function.txt +0 -0
  197. {asecli-0.8.5 → asecli-0.8.6}/tests/test_adversarial_hardening.py +0 -0
  198. {asecli-0.8.5 → asecli-0.8.6}/tests/test_audit_fixes.py +0 -0
  199. {asecli-0.8.5 → asecli-0.8.6}/tests/test_bridge_contract.py +0 -0
  200. {asecli-0.8.5 → asecli-0.8.6}/tests/test_bridge_recompile.py +0 -0
  201. {asecli-0.8.5 → asecli-0.8.6}/tests/test_build_reproducibility.py +0 -0
  202. {asecli-0.8.5 → asecli-0.8.6}/tests/test_cli_contract.py +0 -0
  203. {asecli-0.8.5 → asecli-0.8.6}/tests/test_commentary.py +0 -0
  204. {asecli-0.8.5 → asecli-0.8.6}/tests/test_contract_schema.py +0 -0
  205. {asecli-0.8.5 → asecli-0.8.6}/tests/test_conversion_report_semantics.py +0 -0
  206. {asecli-0.8.5 → asecli-0.8.6}/tests/test_core_contract.py +0 -0
  207. {asecli-0.8.5 → asecli-0.8.6}/tests/test_create.py +0 -0
  208. {asecli-0.8.5 → asecli-0.8.6}/tests/test_create_constant_presentation.py +0 -0
  209. {asecli-0.8.5 → asecli-0.8.6}/tests/test_cross_cli_workflow.py +0 -0
  210. {asecli-0.8.5 → asecli-0.8.6}/tests/test_custom_gui.py +0 -0
  211. {asecli-0.8.5 → asecli-0.8.6}/tests/test_custom_gui_cli.py +0 -0
  212. {asecli-0.8.5 → asecli-0.8.6}/tests/test_editor_create_bridge.py +0 -0
  213. {asecli-0.8.5 → asecli-0.8.6}/tests/test_editor_create_cli.py +0 -0
  214. {asecli-0.8.5 → asecli-0.8.6}/tests/test_editor_create_e2e.py +0 -0
  215. {asecli-0.8.5 → asecli-0.8.6}/tests/test_editor_create_spec.py +0 -0
  216. {asecli-0.8.5 → asecli-0.8.6}/tests/test_editor_create_spec_v3.py +0 -0
  217. {asecli-0.8.5 → asecli-0.8.6}/tests/test_editor_render_settings.py +0 -0
  218. {asecli-0.8.5 → asecli-0.8.6}/tests/test_export_fidelity.py +0 -0
  219. {asecli-0.8.5 → asecli-0.8.6}/tests/test_export_precision_diagnostics.py +0 -0
  220. {asecli-0.8.5 → asecli-0.8.6}/tests/test_export_property_visibility.py +0 -0
  221. {asecli-0.8.5 → asecli-0.8.6}/tests/test_export_sg.py +0 -0
  222. {asecli-0.8.5 → asecli-0.8.6}/tests/test_governance.py +0 -0
  223. {asecli-0.8.5 → asecli-0.8.6}/tests/test_graph_review.py +0 -0
  224. {asecli-0.8.5 → asecli-0.8.6}/tests/test_graph_safety.py +0 -0
  225. {asecli-0.8.5 → asecli-0.8.6}/tests/test_gui_handoff.py +0 -0
  226. {asecli-0.8.5 → asecli-0.8.6}/tests/test_gui_native_extension.py +0 -0
  227. {asecli-0.8.5 → asecli-0.8.6}/tests/test_gui_support.py +0 -0
  228. {asecli-0.8.5 → asecli-0.8.6}/tests/test_gui_support_cli_contract.py +0 -0
  229. {asecli-0.8.5 → asecli-0.8.6}/tests/test_gui_upgrade.py +0 -0
  230. {asecli-0.8.5 → asecli-0.8.6}/tests/test_install_scripts.py +0 -0
  231. {asecli-0.8.5 → asecli-0.8.6}/tests/test_island_layout.py +0 -0
  232. {asecli-0.8.5 → asecli-0.8.6}/tests/test_layout.py +0 -0
  233. {asecli-0.8.5 → asecli-0.8.6}/tests/test_layout_governance.py +0 -0
  234. {asecli-0.8.5 → asecli-0.8.6}/tests/test_layout_local_var_policy.py +0 -0
  235. {asecli-0.8.5 → asecli-0.8.6}/tests/test_material_gui_e2e.py +0 -0
  236. {asecli-0.8.5 → asecli-0.8.6}/tests/test_mcp_security.py +0 -0
  237. {asecli-0.8.5 → asecli-0.8.6}/tests/test_migrate_package.py +0 -0
  238. {asecli-0.8.5 → asecli-0.8.6}/tests/test_mutate.py +0 -0
  239. {asecli-0.8.5 → asecli-0.8.6}/tests/test_pass_blend.py +0 -0
  240. {asecli-0.8.5 → asecli-0.8.6}/tests/test_perf.py +0 -0
  241. {asecli-0.8.5 → asecli-0.8.6}/tests/test_property_presentation.py +0 -0
  242. {asecli-0.8.5 → asecli-0.8.6}/tests/test_roundtrip.py +0 -0
  243. {asecli-0.8.5 → asecli-0.8.6}/tests/test_schema_add.py +0 -0
  244. {asecli-0.8.5 → asecli-0.8.6}/tests/test_schema_samples.py +0 -0
  245. {asecli-0.8.5 → asecli-0.8.6}/tests/test_sg_export_sources.py +0 -0
  246. {asecli-0.8.5 → asecli-0.8.6}/tests/test_skill_install.py +0 -0
  247. {asecli-0.8.5 → asecli-0.8.6}/tests/test_supply_chain.py +0 -0
  248. {asecli-0.8.5 → asecli-0.8.6}/tests/test_surface_semantics.py +0 -0
  249. {asecli-0.8.5 → asecli-0.8.6}/tests/test_surface_semantics_integration.py +0 -0
  250. {asecli-0.8.5 → asecli-0.8.6}/tests/test_usage_audit.py +0 -0
  251. {asecli-0.8.5 → asecli-0.8.6}/tests/test_wire_route_bridge.py +0 -0
  252. {asecli-0.8.5 → asecli-0.8.6}/tools/build_schema.py +0 -0
  253. {asecli-0.8.5 → asecli-0.8.6}/tools/check_ci_governance.py +0 -0
  254. {asecli-0.8.5 → asecli-0.8.6}/tools/check_document_governance.py +0 -0
  255. {asecli-0.8.5 → asecli-0.8.6}/tools/check_packed_executor_loc.py +0 -0
  256. {asecli-0.8.5 → asecli-0.8.6}/tools/check_regression_catalog.py +0 -0
  257. {asecli-0.8.5 → asecli-0.8.6}/tools/check_release_candidate.py +0 -0
  258. {asecli-0.8.5 → asecli-0.8.6}/tools/compare_build_artifacts.py +0 -0
  259. {asecli-0.8.5 → asecli-0.8.6}/tools/generate_sbom.py +0 -0
  260. {asecli-0.8.5 → asecli-0.8.6}/tools/independent_wheel_smoke.py +0 -0
  261. {asecli-0.8.5 → asecli-0.8.6}/tools/supply_chain_check.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: asecli
3
- Version: 0.8.5
3
+ Version: 0.8.6
4
4
  Summary: Agent-native CLI for reading, modifying, validating and compiling Amplify Shader Editor assets
5
5
  Project-URL: Homepage, https://github.com/seeseeczl/ASECLI
6
6
  Project-URL: Repository, https://github.com/seeseeczl/ASECLI
@@ -28,9 +28,9 @@ Description-Content-Type: text/markdown
28
28
 
29
29
  AseCLI 是面向 AI Agent 的本地 CLI:离线读取、编辑和校验 ASE 节点图;通过运行中的 Unity/团结引擎与 MCP,让真实 ASE 创建节点、提供精排几何并重新生成 HLSL。Skill 提供跨 Agent 的操作规则,CLI 提供可验证的执行结果。
30
30
 
31
- 当前正式版:**[0.8.5](https://github.com/seeseeczl/ASECLI/releases/tag/v0.8.5)** · [PyPI](https://pypi.org/project/asecli/0.8.5/) · [Agent 操作手册](skills/asecli/SKILL.md) · [SG 转换后整理流程](skills/asecli/references/conversion-workflow.md)
31
+ 当前正式版:**[0.8.6](https://github.com/seeseeczl/ASECLI/releases/tag/v0.8.6)** · [PyPI](https://pypi.org/project/asecli/0.8.6/) · [Agent 操作手册](skills/asecli/SKILL.md) · [SG 转换后整理流程](skills/asecli/references/conversion-workflow.md)
32
32
 
33
- ASECLI 接收 SGCLI 生成的裸 `EditorGraphSpec v3`,并可把受支持的 ASE Shader 直接导出为 SGCLI 的裸 `sgcli.native.v3`。两个方向都只有“生产者 spec 原文件→消费者 `--spec`”;独立 report 与发布 receipt 都不进入创建输入,创建成功也不代表转换效果等价。
33
+ ASECLI 接收 SGCLI 生成的裸 `EditorGraphSpec v3`,并可把受支持的 ASE Shader 直接导出为 SGCLI 的裸 `sgcli.native.v3`。两个方向都只有“生产者 spec 原文件→消费者 `--spec`”;spec 是唯一图规格;独立 report 与发布 receipt 通过各自参数提供转换认证证据,创建成功也不代表转换效果等价。
34
34
 
35
35
  ```
36
36
  你:提需求("给这个 shader 加个可调描边")
@@ -132,7 +132,7 @@ curl -fsSL https://raw.githubusercontent.com/seeseeczl/ASECLI/main/scripts/insta
132
132
  uv tool uninstall asecli
133
133
  ```
134
134
 
135
- 当前正式版本为 `0.8.5`(ASE→SG 算法与精度分层、属性保真对账与输出时间后缀),可从 [PyPI](https://pypi.org/project/asecli/0.8.5/) 或 [GitHub Release](https://github.com/seeseeczl/ASECLI/releases/tag/v0.8.5) 安装。历史版本见 [GitHub Releases](https://github.com/seeseeczl/ASECLI/releases),`v0.8.4` 保留为回滚点。
135
+ 当前正式版本为 `0.8.6`(补齐 ASE→SG 三文件交接、时间后缀与验收边界说明;运行行为沿用 0.8.5),可从 [PyPI](https://pypi.org/project/asecli/0.8.6/) 或 [GitHub Release](https://github.com/seeseeczl/ASECLI/releases/tag/v0.8.6) 安装。历史版本见 [GitHub Releases](https://github.com/seeseeczl/ASECLI/releases),`v0.8.5` 保留为回滚点。
136
136
 
137
137
  已知限制:真实 MCP 下,属性+纹理 v2 和 Reciprocal 降级 v2 的 create、manifest、validate、独立 recompile 已通过;SGCLI SphereMask v3 spec 在重载时仍可能返回 `node missing after reload: Radius` 并回滚。本次不承诺该 recipe 端到端可用,也不改变 SGCLI v2 默认值契约。
138
138
 
@@ -162,7 +162,7 @@ asecli --help
162
162
 
163
163
  ```bash
164
164
  shasum -a 256 -c SHA256SUMS
165
- uv tool install /path/to/asecli-0.8.5-py3-none-any.whl
165
+ uv tool install /path/to/asecli-0.8.6-py3-none-any.whl
166
166
  asecli --help
167
167
  ```
168
168
 
@@ -202,11 +202,28 @@ asecli recompile Assets/ConvertedNew.shader --mcp-url http://127.0.0.1:9080/mcp
202
202
  ```bash
203
203
  asecli export-sg Assets/ConvertedNew.shader --out-dir ./out
204
204
  sgcli sg create Assets/ConvertedNew.shadergraph \
205
- --spec ./out/ConvertedNew.asecli-to-sgcli.spec.json
205
+ --spec ./out/ConvertedNew.asecli-to-sgcli.spec.json \
206
+ --conversion-report ./out/ConvertedNew.asecli-to-sgcli.report.json \
207
+ --publication-receipt ./out/ConvertedNew.asecli-to-sgcli.receipt.json \
208
+ --write
206
209
  ```
207
210
 
208
211
  `export-sg` 自动从源 Shader 向上识别 Unity/Tuanjie 工程;跨工程资源解析时显式传 `--target-project`。它强制生成 `<stem>.asecli-to-sgcli.spec.json`、`.report.json` 与 `.receipt.json`,同名即失败;receipt 只证明 spec/report 两份文件的提交状态与 SHA,不是中间交接包。命令不调用 SGCLI,也不生成 ASE 自有中间 JSON。未知节点、Master/Pass、外部属性或纹理 Importer 语义时只写规范报告,不写半成品 spec。反方向 `.asecli-to-sgcli.spec.json` 不能交给 ASECLI `create --spec`。
209
212
 
213
+ 需要保存在源文件同目录并添加时间后缀时:
214
+
215
+ ```bash
216
+ asecli export-sg /path/to/Shader.shader \
217
+ --out-dir /path/to \
218
+ --output-suffix "_$(date +%Y%m%d_%H%M%S)"
219
+ ```
220
+
221
+ 三份文件共用同一后缀,例如 `Shader_20260914_163000.asecli-to-sgcli.spec.json`。`--name` 只修改图名称,不能用于文件命名。将实际生成的三份路径原样传给 SGCLI;不要合并、解包或改写 JSON。
222
+
223
+ 导出检查算法连接或已识别的数学等价映射、变量名、属性类型、默认值、范围、资源和 Shader 设置。已匹配的 AlphaModulate 可折叠到目标管线,输出路径保持一次调制;局部精度差异在 CLI 的 `precision_warnings` 和报告的检查证据中说明,不把整个图改成 Half,也不因缺少浮点逐位证明而阻断。错误连接、混合变化及无法映射的运行时属性仍会阻断。
224
+
225
+ 验收分三层:ASECLI 导出通过;SGCLI 契约/转换认证及真实创建通过;最终编译、画布与效果验收。前一层不代表后一层。最终视觉不是生成 JSON 的前置条件,未运行证据保持 `not_run`。消费者若返回 `SEM-BLEND-002` 等认证错误,应在 SGCLI 侧核对具体规则,不修改 JSON 或省略证据绕过认证。
226
+
210
227
  ASECLI 随 wheel 发布自己的 EditorGraphSpec v3 Schema,以及源自 SGCLI `0.3.5` 的固定 `sgcli.native.v3` JSON 快照。快照 SHA-256 标识本包完整性与精确协议修订,不依赖对方当前分支或安装版本。构建、测试、发布与安装只使用 ASECLI,不拉取或执行 SGCLI 源码,不要求同步发布。`MultiplySourceAlpha` 等扩展仍要求实际消费者和目标 URP 支持,导出成功不代表旧消费者兼容。跨产品端到端验收是独立黑盒流程,不是本仓发布前置;本仓任务不自动跨仓修改。
211
228
 
212
229
  可用 `asecli contract editor-graph --version 3 --spec FILE` 在不连接 Editor 时执行权威 Schema/loader 并返回原文件 SHA。报告分开记录来源快照、发布前复核、生产者 Schema 与真实消费者读取状态。旧 `{graph,report}` wrapper 只允许按已登记形状显式迁移,且内层必须已经是 `sgcli.native.v3`;无版本 discriminator 的旧输入只报告 `legacy_format`,不得伪称已识别版本化 Schema:
@@ -268,7 +285,7 @@ asecli recompile Assets/Example.shader
268
285
  | `validate <file>` | 检查悬空连线、重复 ID、输入多来源、Local Var 一致性和 CHKSM。 | 只读;有 error 时返回退出码 2。 |
269
286
  | `graph-review <file> [--baseline FILE] [--reuse-policy consumer-groups\\|fanout]` | 保守核对计算基线并列出复用计划。 | 只读;基线不一致返回 `SEMANTIC_MISMATCH` / 2,不自动创建 Local Var。 |
270
287
  | `graph-audit <file>` | 从 Master 反向分析未参与输出的节点,区分 `unused_candidates` 与外部消费者。 | 只读;Property 的源码/HLSL/GUI 引用不会被误报为可删。 |
271
- | `export-sg <file> --out-dir DIR [--target-project PROJECT]` | 直接输出裸 `sgcli.native.v3`、独立转换报告和发布回执。 | spec 是唯一交接输入;receipt 只证明 spec/report 提交状态;不调用 SGCLI;同名失败;转换失败只写 report。 |
288
+ | `export-sg <file> --out-dir DIR [--target-project PROJECT] [--output-suffix SUFFIX]` | 直接输出裸 `sgcli.native.v3`、独立转换报告和发布回执。 | spec 是唯一图规格;report/receipt 分别作为转换认证证据;receipt 证明 spec/report 提交状态;不调用 SGCLI;同名失败;转换失败只写 report。 |
272
289
  | `contract editor-graph --version 3 [--spec FILE]` | 输出 wheel 内权威 EditorGraphSpec v3 JSON Schema;可离线校验并回执输入 SHA。 | 只读;loader 仍执行端口、中文属性和模板等更强语义校验。 |
273
290
  | `migrate-package <file> --out-dir DIR --extract-sg-spec` | 显式提取登记的旧 `{graph,report}` wrapper。 | 只接受内层 `sgcli.native.v3`;未知/v2 wrapper 只留失败报告,不进入正常消费者。 |
274
291
  | `set-field <file> --node N --field I --value V [--write]` | 修改一个已知节点的绝对序列化字段。 | 默认预演;`--write` 后写入。不要用它猜写 Master 或未知版本尾部。 |
@@ -340,9 +357,9 @@ asecli recompile Assets/Example.shader
340
357
  除显式 `--help` 保留人类可读文本外,stdout 恒为单行严格 JSON,agent 可直接解析。`--version` 也返回 JSON:
341
358
 
342
359
  ```json
343
- {"contract_version":1,"cli_version":"0.8.5","command":"parse","ok":true,"data":{"node_count":7}}
344
- {"contract_version":1,"cli_version":"0.8.5","command":"parse","ok":false,"error":{"code":"NOT_FOUND","message":"..."}}
345
- {"contract_version":1,"cli_version":"0.8.5","command":"version","ok":true,"data":{"version":"0.8.5"}}
360
+ {"contract_version":1,"cli_version":"0.8.6","command":"parse","ok":true,"data":{"node_count":7}}
361
+ {"contract_version":1,"cli_version":"0.8.6","command":"parse","ok":false,"error":{"code":"NOT_FOUND","message":"..."}}
362
+ {"contract_version":1,"cli_version":"0.8.6","command":"version","ok":true,"data":{"version":"0.8.6"}}
346
363
  ```
347
364
 
348
365
  常见错误码:`PARSE_ERROR`、`NOT_FOUND`、`USAGE_ERROR`、`SCHEMA_UNAVAILABLE`、`SCHEMA_VERSION_MISMATCH`、`VALIDATION_ERROR`、`PROPERTY_PRESENTATION_ERROR`、`LAYOUT_ERROR`、`CHECKSUM_FORMAT_ERROR`、`GUI_SUPPORT_ERROR`、`CUSTOM_GUI_ERROR`、`COMMENT_GROUP_ERROR`、`GRAPH_REVIEW_ERROR`、`SEMANTIC_MISMATCH`、`SG_EXPORT_BLOCKED`、`EXTERNAL_REFERENCE`、`SKILL_INSTALL_CONFLICT`、`SKILL_INSTALL_ERROR`、`WRITE_CONFLICT`、`WRITE_PARTIAL`、`UNSAFE_PATH`、`WRITE_ERROR`、`BRIDGE_ERROR`、`INTERNAL`。
@@ -4,9 +4,9 @@
4
4
 
5
5
  AseCLI 是面向 AI Agent 的本地 CLI:离线读取、编辑和校验 ASE 节点图;通过运行中的 Unity/团结引擎与 MCP,让真实 ASE 创建节点、提供精排几何并重新生成 HLSL。Skill 提供跨 Agent 的操作规则,CLI 提供可验证的执行结果。
6
6
 
7
- 当前正式版:**[0.8.5](https://github.com/seeseeczl/ASECLI/releases/tag/v0.8.5)** · [PyPI](https://pypi.org/project/asecli/0.8.5/) · [Agent 操作手册](skills/asecli/SKILL.md) · [SG 转换后整理流程](skills/asecli/references/conversion-workflow.md)
7
+ 当前正式版:**[0.8.6](https://github.com/seeseeczl/ASECLI/releases/tag/v0.8.6)** · [PyPI](https://pypi.org/project/asecli/0.8.6/) · [Agent 操作手册](skills/asecli/SKILL.md) · [SG 转换后整理流程](skills/asecli/references/conversion-workflow.md)
8
8
 
9
- ASECLI 接收 SGCLI 生成的裸 `EditorGraphSpec v3`,并可把受支持的 ASE Shader 直接导出为 SGCLI 的裸 `sgcli.native.v3`。两个方向都只有“生产者 spec 原文件→消费者 `--spec`”;独立 report 与发布 receipt 都不进入创建输入,创建成功也不代表转换效果等价。
9
+ ASECLI 接收 SGCLI 生成的裸 `EditorGraphSpec v3`,并可把受支持的 ASE Shader 直接导出为 SGCLI 的裸 `sgcli.native.v3`。两个方向都只有“生产者 spec 原文件→消费者 `--spec`”;spec 是唯一图规格;独立 report 与发布 receipt 通过各自参数提供转换认证证据,创建成功也不代表转换效果等价。
10
10
 
11
11
  ```
12
12
  你:提需求("给这个 shader 加个可调描边")
@@ -108,7 +108,7 @@ curl -fsSL https://raw.githubusercontent.com/seeseeczl/ASECLI/main/scripts/insta
108
108
  uv tool uninstall asecli
109
109
  ```
110
110
 
111
- 当前正式版本为 `0.8.5`(ASE→SG 算法与精度分层、属性保真对账与输出时间后缀),可从 [PyPI](https://pypi.org/project/asecli/0.8.5/) 或 [GitHub Release](https://github.com/seeseeczl/ASECLI/releases/tag/v0.8.5) 安装。历史版本见 [GitHub Releases](https://github.com/seeseeczl/ASECLI/releases),`v0.8.4` 保留为回滚点。
111
+ 当前正式版本为 `0.8.6`(补齐 ASE→SG 三文件交接、时间后缀与验收边界说明;运行行为沿用 0.8.5),可从 [PyPI](https://pypi.org/project/asecli/0.8.6/) 或 [GitHub Release](https://github.com/seeseeczl/ASECLI/releases/tag/v0.8.6) 安装。历史版本见 [GitHub Releases](https://github.com/seeseeczl/ASECLI/releases),`v0.8.5` 保留为回滚点。
112
112
 
113
113
  已知限制:真实 MCP 下,属性+纹理 v2 和 Reciprocal 降级 v2 的 create、manifest、validate、独立 recompile 已通过;SGCLI SphereMask v3 spec 在重载时仍可能返回 `node missing after reload: Radius` 并回滚。本次不承诺该 recipe 端到端可用,也不改变 SGCLI v2 默认值契约。
114
114
 
@@ -138,7 +138,7 @@ asecli --help
138
138
 
139
139
  ```bash
140
140
  shasum -a 256 -c SHA256SUMS
141
- uv tool install /path/to/asecli-0.8.5-py3-none-any.whl
141
+ uv tool install /path/to/asecli-0.8.6-py3-none-any.whl
142
142
  asecli --help
143
143
  ```
144
144
 
@@ -178,11 +178,28 @@ asecli recompile Assets/ConvertedNew.shader --mcp-url http://127.0.0.1:9080/mcp
178
178
  ```bash
179
179
  asecli export-sg Assets/ConvertedNew.shader --out-dir ./out
180
180
  sgcli sg create Assets/ConvertedNew.shadergraph \
181
- --spec ./out/ConvertedNew.asecli-to-sgcli.spec.json
181
+ --spec ./out/ConvertedNew.asecli-to-sgcli.spec.json \
182
+ --conversion-report ./out/ConvertedNew.asecli-to-sgcli.report.json \
183
+ --publication-receipt ./out/ConvertedNew.asecli-to-sgcli.receipt.json \
184
+ --write
182
185
  ```
183
186
 
184
187
  `export-sg` 自动从源 Shader 向上识别 Unity/Tuanjie 工程;跨工程资源解析时显式传 `--target-project`。它强制生成 `<stem>.asecli-to-sgcli.spec.json`、`.report.json` 与 `.receipt.json`,同名即失败;receipt 只证明 spec/report 两份文件的提交状态与 SHA,不是中间交接包。命令不调用 SGCLI,也不生成 ASE 自有中间 JSON。未知节点、Master/Pass、外部属性或纹理 Importer 语义时只写规范报告,不写半成品 spec。反方向 `.asecli-to-sgcli.spec.json` 不能交给 ASECLI `create --spec`。
185
188
 
189
+ 需要保存在源文件同目录并添加时间后缀时:
190
+
191
+ ```bash
192
+ asecli export-sg /path/to/Shader.shader \
193
+ --out-dir /path/to \
194
+ --output-suffix "_$(date +%Y%m%d_%H%M%S)"
195
+ ```
196
+
197
+ 三份文件共用同一后缀,例如 `Shader_20260914_163000.asecli-to-sgcli.spec.json`。`--name` 只修改图名称,不能用于文件命名。将实际生成的三份路径原样传给 SGCLI;不要合并、解包或改写 JSON。
198
+
199
+ 导出检查算法连接或已识别的数学等价映射、变量名、属性类型、默认值、范围、资源和 Shader 设置。已匹配的 AlphaModulate 可折叠到目标管线,输出路径保持一次调制;局部精度差异在 CLI 的 `precision_warnings` 和报告的检查证据中说明,不把整个图改成 Half,也不因缺少浮点逐位证明而阻断。错误连接、混合变化及无法映射的运行时属性仍会阻断。
200
+
201
+ 验收分三层:ASECLI 导出通过;SGCLI 契约/转换认证及真实创建通过;最终编译、画布与效果验收。前一层不代表后一层。最终视觉不是生成 JSON 的前置条件,未运行证据保持 `not_run`。消费者若返回 `SEM-BLEND-002` 等认证错误,应在 SGCLI 侧核对具体规则,不修改 JSON 或省略证据绕过认证。
202
+
186
203
  ASECLI 随 wheel 发布自己的 EditorGraphSpec v3 Schema,以及源自 SGCLI `0.3.5` 的固定 `sgcli.native.v3` JSON 快照。快照 SHA-256 标识本包完整性与精确协议修订,不依赖对方当前分支或安装版本。构建、测试、发布与安装只使用 ASECLI,不拉取或执行 SGCLI 源码,不要求同步发布。`MultiplySourceAlpha` 等扩展仍要求实际消费者和目标 URP 支持,导出成功不代表旧消费者兼容。跨产品端到端验收是独立黑盒流程,不是本仓发布前置;本仓任务不自动跨仓修改。
187
204
 
188
205
  可用 `asecli contract editor-graph --version 3 --spec FILE` 在不连接 Editor 时执行权威 Schema/loader 并返回原文件 SHA。报告分开记录来源快照、发布前复核、生产者 Schema 与真实消费者读取状态。旧 `{graph,report}` wrapper 只允许按已登记形状显式迁移,且内层必须已经是 `sgcli.native.v3`;无版本 discriminator 的旧输入只报告 `legacy_format`,不得伪称已识别版本化 Schema:
@@ -244,7 +261,7 @@ asecli recompile Assets/Example.shader
244
261
  | `validate <file>` | 检查悬空连线、重复 ID、输入多来源、Local Var 一致性和 CHKSM。 | 只读;有 error 时返回退出码 2。 |
245
262
  | `graph-review <file> [--baseline FILE] [--reuse-policy consumer-groups\\|fanout]` | 保守核对计算基线并列出复用计划。 | 只读;基线不一致返回 `SEMANTIC_MISMATCH` / 2,不自动创建 Local Var。 |
246
263
  | `graph-audit <file>` | 从 Master 反向分析未参与输出的节点,区分 `unused_candidates` 与外部消费者。 | 只读;Property 的源码/HLSL/GUI 引用不会被误报为可删。 |
247
- | `export-sg <file> --out-dir DIR [--target-project PROJECT]` | 直接输出裸 `sgcli.native.v3`、独立转换报告和发布回执。 | spec 是唯一交接输入;receipt 只证明 spec/report 提交状态;不调用 SGCLI;同名失败;转换失败只写 report。 |
264
+ | `export-sg <file> --out-dir DIR [--target-project PROJECT] [--output-suffix SUFFIX]` | 直接输出裸 `sgcli.native.v3`、独立转换报告和发布回执。 | spec 是唯一图规格;report/receipt 分别作为转换认证证据;receipt 证明 spec/report 提交状态;不调用 SGCLI;同名失败;转换失败只写 report。 |
248
265
  | `contract editor-graph --version 3 [--spec FILE]` | 输出 wheel 内权威 EditorGraphSpec v3 JSON Schema;可离线校验并回执输入 SHA。 | 只读;loader 仍执行端口、中文属性和模板等更强语义校验。 |
249
266
  | `migrate-package <file> --out-dir DIR --extract-sg-spec` | 显式提取登记的旧 `{graph,report}` wrapper。 | 只接受内层 `sgcli.native.v3`;未知/v2 wrapper 只留失败报告,不进入正常消费者。 |
250
267
  | `set-field <file> --node N --field I --value V [--write]` | 修改一个已知节点的绝对序列化字段。 | 默认预演;`--write` 后写入。不要用它猜写 Master 或未知版本尾部。 |
@@ -316,9 +333,9 @@ asecli recompile Assets/Example.shader
316
333
  除显式 `--help` 保留人类可读文本外,stdout 恒为单行严格 JSON,agent 可直接解析。`--version` 也返回 JSON:
317
334
 
318
335
  ```json
319
- {"contract_version":1,"cli_version":"0.8.5","command":"parse","ok":true,"data":{"node_count":7}}
320
- {"contract_version":1,"cli_version":"0.8.5","command":"parse","ok":false,"error":{"code":"NOT_FOUND","message":"..."}}
321
- {"contract_version":1,"cli_version":"0.8.5","command":"version","ok":true,"data":{"version":"0.8.5"}}
336
+ {"contract_version":1,"cli_version":"0.8.6","command":"parse","ok":true,"data":{"node_count":7}}
337
+ {"contract_version":1,"cli_version":"0.8.6","command":"parse","ok":false,"error":{"code":"NOT_FOUND","message":"..."}}
338
+ {"contract_version":1,"cli_version":"0.8.6","command":"version","ok":true,"data":{"version":"0.8.6"}}
322
339
  ```
323
340
 
324
341
  常见错误码:`PARSE_ERROR`、`NOT_FOUND`、`USAGE_ERROR`、`SCHEMA_UNAVAILABLE`、`SCHEMA_VERSION_MISMATCH`、`VALIDATION_ERROR`、`PROPERTY_PRESENTATION_ERROR`、`LAYOUT_ERROR`、`CHECKSUM_FORMAT_ERROR`、`GUI_SUPPORT_ERROR`、`CUSTOM_GUI_ERROR`、`COMMENT_GROUP_ERROR`、`GRAPH_REVIEW_ERROR`、`SEMANTIC_MISMATCH`、`SG_EXPORT_BLOCKED`、`EXTERNAL_REFERENCE`、`SKILL_INSTALL_CONFLICT`、`SKILL_INSTALL_ERROR`、`WRITE_CONFLICT`、`WRITE_PARTIAL`、`UNSAFE_PATH`、`WRITE_ERROR`、`BRIDGE_ERROR`、`INTERNAL`。
@@ -99,3 +99,5 @@
99
99
  | 2026-09-14 | v0.8.1 发布候选 | matcher-v4 识别并折叠原生 `Lerp(white,color,alpha)`,保留 Wave Noise 不可表示 Alpha Blend 的失败关闭;SGCLI 普通 authoring 与转换认证分离。发布前全量 `461 passed, 3 skipped`,CI governance、供应链与 diff 通过;远端 publish/PyPI、正式资产回读和本机安装待执行,Editor/画布/render 保持开放披露。 | REL-0017 CR-0030 TASK-0066 REG-0063 |
100
100
  | 2026-09-14 | v0.8.1 双渠道发布与本机安装完成 | tag `v0.8.1` 解引用到 `610a7a3`;[publish run 34796442345](https://github.com/seeseeczl/ASECLI/actions/runs/34796442345) 的双 Python、可复现构建、供应链、锁定 SGCLI `b4f8310` 的跨 CLI 门禁与 PyPI OIDC 全绿。[GitHub Release](https://github.com/seeseeczl/ASECLI/releases/tag/v0.8.1) wheel/sdist 与 PyPI 摘要一致,本机 CLI 为 `0.8.1`,用户级 Skill 已同步;Editor/画布/render 保持开放披露。 | REL-0017 CR-0030 TASK-0066 REG-0063 |
101
101
  | 2026-09-14 | v0.8.5 发布准备 | 用户授权推送发布;本地 485 passed/3 skipped,实文件导出成功;算法/属性/设置门禁保留,精度边界提示;远端与双渠道校验待执行 | CR-0031 TASK-0067 REG-0064 REL-0018 |
102
+ | 2026-09-14 | v0.8.5 双渠道发布完成 | tag cb80828;主线 CI 34823345703 与 publish 34823348963 全成功;GitHub 五资产回读与 PyPI SHA 一致,本机 0.8.5 和 Skill 校验通过;隔离回滚通过,Editor/视觉未运行 | CR-0031 TASK-0067 REG-0064 REL-0018 |
103
+ | 2026-09-14 | v0.8.6 文档补丁准备 | 已按用户要求删除仓库内三份未跟踪实机副本;README 补齐三文件认证、--write、时间后缀和分层验收;运行行为不变 | CR-0031 TASK-0068 REG-0064 REL-0019 |
@@ -63,4 +63,4 @@ BUG-0023,缺陷,已修复,ADR-0020,MOD-BRIDGE,TASK-0060,REG-0059,2026-09-08 两
63
63
  CR-0028,变更,已发布(视觉与自动LocalVar仍待验),ADR-0021,MOD-CORE MOD-LAYOUT MOD-CLI MOD-SKILL,TASK-0061 TASK-0062 TASK-0063,REG-0060 REG-0061,端口级基线与复用计划及岛内刚性多列布局;未自动创建LocalVar;未做实机验收,REL-0014,long,保留并行创建器改动;不修改SGCLI
64
64
  CR-0029,变更,已发布,ADR-0001 ADR-0009,MOD-CORE MOD-LAYOUT MOD-BRIDGE MOD-CLI MOD-SKILL,TASK-0064,REG-0062,2026-09-10 v0.7.0@029fea4;run 34475832000 全成功;GitHub/PyPI 摘要一致;本机 CLI/Skill 安装幂等,REL-0015,long,严格原子 JSON;非有限数拒绝;version JSON;22 错误码;17 子命令动态覆盖
65
65
  CR-0030,变更,已发布(视觉门禁开放),ADR-0022,MOD-CLI MOD-BRIDGE MOD-SG-EXPORT MOD-CONTRACT MOD-SKILL,TASK-0065,REG-0063,2026-09-11 v0.8.0 publish run 34592028675 全绿;GitHub/PyPI 资产、本机 CLI/Skill 和 WaveNoise 双向原文件 SHA 通过,REL-0016,long,消费者原生裸规格与方向命名;最终 wheel Editor/画布/渲染仍开放
66
- CR-0031,变更,已验证,,MOD-CLI MOD-SG-EXPORT MOD-SKILL,TASK-0067,REG-0064,485 passed/3 skipped;真实 Shader 导出 SHA 对账,REL-0018,long,数学映射与精度证据分层;视觉不作前置
66
+ CR-0031,变更,已发布,,MOD-CLI MOD-SG-EXPORT MOD-SKILL,TASK-0067,REG-0064,v0.8.5@cb80828;run 34823348963;双渠道 SHA 与安装回滚通过,REL-0018,long,数学映射与精度证据分层;视觉不作前置
@@ -121,4 +121,5 @@ kickoff_completion: complete
121
121
  - [x] 64 张原子任务卡已定义;本次新增 CR/REG 双向链接完整(实机项保持待验)
122
122
  - [x] 里程碑、验收命令、停止条件与回滚已定义
123
123
  - [x] 门禁与审计计划已建立
124
- | TASK-0067 | CR-0031 REL-0018 | 发布 ASE→SG 精度提示与保真修复 v0.8.5 | 用户明确授权推送并发布 | 导出、报告、测试、Skill 与发布元数据 | SGCLI、源 Shader、Editor 与视觉验收 | long/2026-09-14 | REG-0064;pytest、治理、双构建、远端 CI、双渠道 SHA、隔离安装回滚 | 任一发布检查失败则停止 | 本地 485 passed/3 skipped;实际导出 137 节点、150 连接、15 属性;远端待执行 | verified |
124
+ | TASK-0067 | CR-0031 REL-0018 | 发布 ASE→SG 精度提示与保真修复 v0.8.5 | 用户明确授权推送并发布 | 导出、报告、测试、Skill 与发布元数据 | SGCLI、源 Shader、Editor 与视觉验收 | long/2026-09-14 | REG-0064;pytest、治理、双构建、远端 CI、双渠道 SHA、隔离安装回滚 | 任一发布检查失败则停止 | 本地 485 passed/3 skipped;正式候选 484 passed/4 skipped;run 34823348963、GitHub/PyPI SHA、本机安装与回滚通过 | released |
125
+ | TASK-0068 | CR-0031 REL-0019 | 清理本地实机副本并发布 README 说明补丁 0.8.6 | 用户授权丢弃三文件、更新 README、推送发布和本机安装 | 三个未跟踪文件、README 与版本发布记录 | 源 Tuanjie 资产、SGCLI 与运行逻辑 | long/2026-09-14 | REG-0064;文档 diff、发布治理、测试、双构建、双渠道 SHA 与安装回滚 | 发布检查失败则停止,保留 0.8.5 | 清理及 README 更新完成,发布验证中 | verified |
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "asecli"
3
- version = "0.8.5"
3
+ version = "0.8.6"
4
4
  description = "Agent-native CLI for reading, modifying, validating and compiling Amplify Shader Editor assets"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -1,3 +1,3 @@
1
1
  """AseCLI — agent-native toolkit for Amplify Shader Editor assets."""
2
2
 
3
- __version__ = "0.8.5"
3
+ __version__ = "0.8.6"
@@ -0,0 +1,4 @@
1
+ def test_skeleton():
2
+ import asecli
3
+
4
+ assert asecli.__version__ == "0.8.6"
@@ -8,7 +8,7 @@ resolution-markers = [
8
8
 
9
9
  [[package]]
10
10
  name = "asecli"
11
- version = "0.8.5"
11
+ version = "0.8.6"
12
12
  source = { editable = "." }
13
13
 
14
14
  [package.dev-dependencies]
@@ -1,4 +0,0 @@
1
- def test_skeleton():
2
- import asecli
3
-
4
- assert asecli.__version__ == "0.8.5"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes