asecli 0.6.2__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.
- asecli-0.6.2/.github/workflows/ci.yml +95 -0
- asecli-0.6.2/.github/workflows/publish.yml +110 -0
- asecli-0.6.2/.gitignore +7 -0
- asecli-0.6.2/.project-architect.json +27 -0
- asecli-0.6.2/AGENTS.md +23 -0
- asecli-0.6.2/LICENSE +21 -0
- asecli-0.6.2/PKG-INFO +594 -0
- asecli-0.6.2/README.md +570 -0
- asecli-0.6.2/SECURITY.md +18 -0
- asecli-0.6.2/docs/00-governance/audit-supplement.json +90 -0
- asecli-0.6.2/docs/00-governance/change-register.md +42 -0
- asecli-0.6.2/docs/00-governance/delivery-protocol.md +27 -0
- asecli-0.6.2/docs/00-governance/project-charter.md +28 -0
- asecli-0.6.2/docs/00-governance/supply-chain-policy.md +45 -0
- asecli-0.6.2/docs/00-governance/timeline.md +84 -0
- asecli-0.6.2/docs/00-governance/traceability.csv +58 -0
- asecli-0.6.2/docs/01-architecture/assumption-experiments.md +28 -0
- asecli-0.6.2/docs/01-architecture/module-map.md +30 -0
- asecli-0.6.2/docs/01-architecture/project-architecture-and-requirements.md +137 -0
- asecli-0.6.2/docs/01-architecture/technical-route.md +185 -0
- asecli-0.6.2/docs/03-quality/bug-register.md +38 -0
- asecli-0.6.2/docs/03-quality/regression-catalog.md +61 -0
- asecli-0.6.2/docs/03-quality/test-strategy.md +56 -0
- asecli-0.6.2/docs/04-delivery/project-plan-task-charter.md +115 -0
- asecli-0.6.2/docs/04-delivery/roadmap.md +11 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-01-014104-audit-report.md +121 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-01-014104-optimization-plan.md +50 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-01-145343-audit-report.md +146 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-01-145343-optimization-plan.md +98 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-01-193521-audit-report.md +96 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-01-193521-optimization-plan.md +61 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-01-203438-audit-report.md +108 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-01-203438-optimization-plan.md +65 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-02-121155-audit-report.md +105 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-02-121155-optimization-plan.md +65 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-02-175509-audit-report.md +83 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-02-175509-optimization-plan.md +58 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-05-142617-audit-report.md +82 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-05-142617-optimization-plan.md +47 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-05-160945-audit-report.md +101 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-05-160945-optimization-plan.md +58 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-05-213523-audit-report.md +101 -0
- asecli-0.6.2/docs/adversarial-audits/2026-09-05-213523-optimization-plan.md +62 -0
- asecli-0.6.2/docs/first-principles/2026-08-31-231401-optimization-plan.md +120 -0
- asecli-0.6.2/docs/first-principles/2026-09-01-190656-optimization-plan.md +143 -0
- asecli-0.6.2/pyproject.toml +60 -0
- asecli-0.6.2/scripts/install.ps1 +36 -0
- asecli-0.6.2/scripts/install.sh +44 -0
- asecli-0.6.2/skills/asecli/SKILL.md +275 -0
- asecli-0.6.2/skills/asecli/references/layout-standard.md +99 -0
- asecli-0.6.2/skills/asecli/references/master-output-settings-standard.md +51 -0
- asecli-0.6.2/skills/asecli/references/material-property-standard.md +108 -0
- asecli-0.6.2/src/asecli/__init__.py +3 -0
- asecli-0.6.2/src/asecli/bridge/__init__.py +40 -0
- asecli-0.6.2/src/asecli/bridge/_editor_port_contract.py +131 -0
- asecli-0.6.2/src/asecli/bridge/_editor_primitives.py +205 -0
- asecli-0.6.2/src/asecli/bridge/_editor_spec_grammar.py +245 -0
- asecli-0.6.2/src/asecli/bridge/_editor_spec_io.py +26 -0
- asecli-0.6.2/src/asecli/bridge/_editor_spec_validation.py +218 -0
- asecli-0.6.2/src/asecli/bridge/_gui_handoff_store.py +78 -0
- asecli-0.6.2/src/asecli/bridge/_gui_project.py +35 -0
- asecli-0.6.2/src/asecli/bridge/_gui_resource_store.py +159 -0
- asecli-0.6.2/src/asecli/bridge/_gui_resource_upgrade.py +122 -0
- asecli-0.6.2/src/asecli/bridge/editor_create.py +173 -0
- asecli-0.6.2/src/asecli/bridge/editor_spec.py +250 -0
- asecli-0.6.2/src/asecli/bridge/graph_geometry.py +249 -0
- asecli-0.6.2/src/asecli/bridge/graph_geometry_parser.py +57 -0
- asecli-0.6.2/src/asecli/bridge/graph_inspect.py +136 -0
- asecli-0.6.2/src/asecli/bridge/gui_handoff.py +100 -0
- asecli-0.6.2/src/asecli/bridge/gui_presentation.py +70 -0
- asecli-0.6.2/src/asecli/bridge/gui_provider_detection.py +197 -0
- asecli-0.6.2/src/asecli/bridge/gui_runtime_probe.py +25 -0
- asecli-0.6.2/src/asecli/bridge/gui_support.py +240 -0
- asecli-0.6.2/src/asecli/bridge/gui_support_resource.py +58 -0
- asecli-0.6.2/src/asecli/bridge/mcp_client.py +231 -0
- asecli-0.6.2/src/asecli/bridge/recompile.py +107 -0
- asecli-0.6.2/src/asecli/bridge/resource_text.py +12 -0
- asecli-0.6.2/src/asecli/bridge/resources/asecli_material_gui.authoring.part00.cs.txt +238 -0
- asecli-0.6.2/src/asecli/bridge/resources/asecli_material_gui.authoring.part01.cs.txt +235 -0
- asecli-0.6.2/src/asecli/bridge/resources/asecli_material_gui.authoring.store.cs.txt +125 -0
- asecli-0.6.2/src/asecli/bridge/resources/asecli_material_gui.condition.cs.txt +99 -0
- asecli-0.6.2/src/asecli/bridge/resources/asecli_material_gui.hydration.cs.txt +105 -0
- asecli-0.6.2/src/asecli/bridge/resources/asecli_material_gui.part00.cs.txt +300 -0
- asecli-0.6.2/src/asecli/bridge/resources/asecli_material_gui.part01.cs.txt +290 -0
- asecli-0.6.2/src/asecli/bridge/resources/asecli_material_gui.reconciliation.cs.txt +174 -0
- asecli-0.6.2/src/asecli/bridge/resources/asecli_material_gui.transaction.cs.txt +108 -0
- asecli-0.6.2/src/asecli/bridge/resources/editor_create.part00.cs.txt +176 -0
- asecli-0.6.2/src/asecli/bridge/resources/editor_create.part01.cs.txt +145 -0
- asecli-0.6.2/src/asecli/bridge/resources/editor_create.part02.cs.txt +139 -0
- asecli-0.6.2/src/asecli/bridge/resources/editor_create.part03.cs.txt +161 -0
- asecli-0.6.2/src/asecli/bridge/resources/editor_create.part04.cs.txt +114 -0
- asecli-0.6.2/src/asecli/bridge/resources/wire_route.transaction.cs.txt +140 -0
- asecli-0.6.2/src/asecli/bridge/wire_route.py +127 -0
- asecli-0.6.2/src/asecli/checks/__init__.py +10 -0
- asecli-0.6.2/src/asecli/checks/checksum.py +53 -0
- asecli-0.6.2/src/asecli/checks/local_vars.py +135 -0
- asecli-0.6.2/src/asecli/checks/usage.py +141 -0
- asecli-0.6.2/src/asecli/checks/validate.py +129 -0
- asecli-0.6.2/src/asecli/cli/__init__.py +1 -0
- asecli-0.6.2/src/asecli/cli/commands.py +237 -0
- asecli-0.6.2/src/asecli/cli/commentary_command.py +158 -0
- asecli-0.6.2/src/asecli/cli/create_command.py +250 -0
- asecli-0.6.2/src/asecli/cli/custom_gui_command.py +170 -0
- asecli-0.6.2/src/asecli/cli/gui_provider.py +30 -0
- asecli-0.6.2/src/asecli/cli/gui_support_command.py +35 -0
- asecli-0.6.2/src/asecli/cli/io.py +214 -0
- asecli-0.6.2/src/asecli/cli/layout_command.py +213 -0
- asecli-0.6.2/src/asecli/cli/main.py +245 -0
- asecli-0.6.2/src/asecli/cli/recompile_metadata.py +53 -0
- asecli-0.6.2/src/asecli/cli/skill_command.py +121 -0
- asecli-0.6.2/src/asecli/cli/usage_command.py +42 -0
- asecli-0.6.2/src/asecli/core/__init__.py +84 -0
- asecli-0.6.2/src/asecli/core/comment_bounds.py +166 -0
- asecli-0.6.2/src/asecli/core/comment_layout.py +167 -0
- asecli-0.6.2/src/asecli/core/comment_metrics.py +132 -0
- asecli-0.6.2/src/asecli/core/comment_purpose.py +140 -0
- asecli-0.6.2/src/asecli/core/commentary.py +225 -0
- asecli-0.6.2/src/asecli/core/compiled_metadata.py +135 -0
- asecli-0.6.2/src/asecli/core/compiled_properties.py +190 -0
- asecli-0.6.2/src/asecli/core/custom_gui.py +250 -0
- asecli-0.6.2/src/asecli/core/custom_gui_versions.py +35 -0
- asecli-0.6.2/src/asecli/core/fishbone_placement.py +159 -0
- asecli-0.6.2/src/asecli/core/fishbone_topology.py +186 -0
- asecli-0.6.2/src/asecli/core/graph_ops.py +122 -0
- asecli-0.6.2/src/asecli/core/layout.py +174 -0
- asecli-0.6.2/src/asecli/core/layout_audit.py +237 -0
- asecli-0.6.2/src/asecli/core/layout_audit_geometry.py +247 -0
- asecli-0.6.2/src/asecli/core/layout_audit_repeated.py +44 -0
- asecli-0.6.2/src/asecli/core/layout_graph.py +113 -0
- asecli-0.6.2/src/asecli/core/local_vars.py +54 -0
- asecli-0.6.2/src/asecli/core/material_gui_condition.py +68 -0
- asecli-0.6.2/src/asecli/core/material_gui_protocol.py +35 -0
- asecli-0.6.2/src/asecli/core/material_gui_spec.py +191 -0
- asecli-0.6.2/src/asecli/core/meticulous_layout.py +114 -0
- asecli-0.6.2/src/asecli/core/model.py +237 -0
- asecli-0.6.2/src/asecli/core/property_presentation.py +233 -0
- asecli-0.6.2/src/asecli/core/wire_geometry.py +83 -0
- asecli-0.6.2/src/asecli/core/wire_router.py +248 -0
- asecli-0.6.2/src/asecli/schema/__init__.py +49 -0
- asecli-0.6.2/src/asecli/schema/data/observed.json +16 -0
- asecli-0.6.2/src/asecli/schema/data/schemas.json +14106 -0
- asecli-0.6.2/tests/TEST.md +61 -0
- asecli-0.6.2/tests/__init__.py +1 -0
- asecli-0.6.2/tests/conftest.py +31 -0
- asecli-0.6.2/tests/editor_create_v3_fixture.py +109 -0
- asecli-0.6.2/tests/fixtures/HLIT.shader +3450 -0
- asecli-0.6.2/tests/fixtures/asecli_material_gui_v0_2_0.cs.txt +536 -0
- asecli-0.6.2/tests/fixtures/step-antialiasing.function.txt +21 -0
- asecli-0.6.2/tests/test_adversarial_hardening.py +181 -0
- asecli-0.6.2/tests/test_audit_fixes.py +89 -0
- asecli-0.6.2/tests/test_bridge_contract.py +246 -0
- asecli-0.6.2/tests/test_bridge_recompile.py +16 -0
- asecli-0.6.2/tests/test_build_reproducibility.py +123 -0
- asecli-0.6.2/tests/test_cli_contract.py +138 -0
- asecli-0.6.2/tests/test_commentary.py +227 -0
- asecli-0.6.2/tests/test_core_contract.py +30 -0
- asecli-0.6.2/tests/test_create.py +62 -0
- asecli-0.6.2/tests/test_custom_gui.py +388 -0
- asecli-0.6.2/tests/test_custom_gui_cli.py +347 -0
- asecli-0.6.2/tests/test_editor_create_bridge.py +280 -0
- asecli-0.6.2/tests/test_editor_create_cli.py +228 -0
- asecli-0.6.2/tests/test_editor_create_e2e.py +374 -0
- asecli-0.6.2/tests/test_editor_create_spec.py +397 -0
- asecli-0.6.2/tests/test_editor_create_spec_v3.py +204 -0
- asecli-0.6.2/tests/test_governance.py +242 -0
- asecli-0.6.2/tests/test_graph_safety.py +85 -0
- asecli-0.6.2/tests/test_gui_handoff.py +97 -0
- asecli-0.6.2/tests/test_gui_native_extension.py +39 -0
- asecli-0.6.2/tests/test_gui_support.py +391 -0
- asecli-0.6.2/tests/test_gui_support_cli_contract.py +40 -0
- asecli-0.6.2/tests/test_gui_upgrade.py +223 -0
- asecli-0.6.2/tests/test_install_scripts.py +25 -0
- asecli-0.6.2/tests/test_layout.py +350 -0
- asecli-0.6.2/tests/test_layout_governance.py +387 -0
- asecli-0.6.2/tests/test_layout_local_var_policy.py +86 -0
- asecli-0.6.2/tests/test_material_gui_e2e.py +210 -0
- asecli-0.6.2/tests/test_mcp_security.py +313 -0
- asecli-0.6.2/tests/test_mutate.py +37 -0
- asecli-0.6.2/tests/test_perf.py +72 -0
- asecli-0.6.2/tests/test_property_presentation.py +297 -0
- asecli-0.6.2/tests/test_roundtrip.py +42 -0
- asecli-0.6.2/tests/test_schema_add.py +74 -0
- asecli-0.6.2/tests/test_schema_samples.py +63 -0
- asecli-0.6.2/tests/test_skill_install.py +69 -0
- asecli-0.6.2/tests/test_smoke.py +4 -0
- asecli-0.6.2/tests/test_supply_chain.py +44 -0
- asecli-0.6.2/tests/test_usage_audit.py +54 -0
- asecli-0.6.2/tests/test_wire_route_bridge.py +114 -0
- asecli-0.6.2/tools/build_schema.py +130 -0
- asecli-0.6.2/tools/check_ci_governance.py +199 -0
- asecli-0.6.2/tools/check_document_governance.py +102 -0
- asecli-0.6.2/tools/check_packed_executor_loc.py +84 -0
- asecli-0.6.2/tools/check_regression_catalog.py +114 -0
- asecli-0.6.2/tools/check_release_candidate.py +51 -0
- asecli-0.6.2/tools/compare_build_artifacts.py +152 -0
- asecli-0.6.2/tools/generate_sbom.py +96 -0
- asecli-0.6.2/tools/supply_chain_check.py +69 -0
- asecli-0.6.2/uv.lock +204 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
verify:
|
|
14
|
+
strategy:
|
|
15
|
+
fail-fast: false
|
|
16
|
+
matrix:
|
|
17
|
+
python-version: ["3.10", "3.12"]
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 (Node 24)
|
|
21
|
+
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 (Node 24)
|
|
22
|
+
with:
|
|
23
|
+
version: "0.11.14"
|
|
24
|
+
python-version: ${{ matrix.python-version }}
|
|
25
|
+
enable-cache: true
|
|
26
|
+
cache-dependency-glob: uv.lock
|
|
27
|
+
- run: uv lock --check
|
|
28
|
+
- run: uv sync --frozen --python ${{ matrix.python-version }}
|
|
29
|
+
- run: uv run --frozen --python ${{ matrix.python-version }} pytest -q
|
|
30
|
+
- name: Validate regression catalog coverage
|
|
31
|
+
run: uv run --frozen --python ${{ matrix.python-version }} python tools/check_regression_catalog.py
|
|
32
|
+
- run: uv run --frozen --python ${{ matrix.python-version }} python tools/check_ci_governance.py
|
|
33
|
+
|
|
34
|
+
package:
|
|
35
|
+
needs: verify
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
env:
|
|
38
|
+
SOURCE_DATE_EPOCH: "1788220800"
|
|
39
|
+
steps:
|
|
40
|
+
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 (Node 24)
|
|
41
|
+
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 (Node 24)
|
|
42
|
+
with:
|
|
43
|
+
version: "0.11.14"
|
|
44
|
+
python-version: "3.12"
|
|
45
|
+
enable-cache: true
|
|
46
|
+
cache-dependency-glob: uv.lock
|
|
47
|
+
- name: Configure build paths outside the checkout
|
|
48
|
+
run: |
|
|
49
|
+
echo "ASECLI_VERSION=$(uv version --short)" >> "$GITHUB_ENV"
|
|
50
|
+
echo "ASECLI_BUILD_A=$RUNNER_TEMP/asecli-build-a" >> "$GITHUB_ENV"
|
|
51
|
+
echo "ASECLI_BUILD_B=$RUNNER_TEMP/asecli-build-b" >> "$GITHUB_ENV"
|
|
52
|
+
echo "ASECLI_REPRO_REPORT=$RUNNER_TEMP/asecli-reproducibility.json" >> "$GITHUB_ENV"
|
|
53
|
+
- run: uv sync --frozen --python 3.12
|
|
54
|
+
- name: Report build toolchain
|
|
55
|
+
run: |
|
|
56
|
+
uv --version
|
|
57
|
+
uv run --frozen python --version
|
|
58
|
+
uv run --frozen python -c "from importlib.metadata import version; print('hatchling', version('hatchling'))"
|
|
59
|
+
- run: uv build --no-build-isolation --out-dir "$ASECLI_BUILD_A"
|
|
60
|
+
- run: uv build --no-build-isolation --out-dir "$ASECLI_BUILD_B"
|
|
61
|
+
- name: Compare reproducible artifacts
|
|
62
|
+
id: reproducibility
|
|
63
|
+
run: >-
|
|
64
|
+
uv run --frozen python tools/compare_build_artifacts.py
|
|
65
|
+
--left "$ASECLI_BUILD_A"
|
|
66
|
+
--right "$ASECLI_BUILD_B"
|
|
67
|
+
--output "$ASECLI_REPRO_REPORT"
|
|
68
|
+
- name: Upload reproducibility diagnostics on failure
|
|
69
|
+
if: ${{ always() && steps.reproducibility.outcome == 'failure' }}
|
|
70
|
+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 (Node 24)
|
|
71
|
+
with:
|
|
72
|
+
name: asecli-reproducibility-diagnostics-${{ runner.arch }}
|
|
73
|
+
path: |
|
|
74
|
+
${{ env.ASECLI_BUILD_A }}/
|
|
75
|
+
${{ env.ASECLI_BUILD_B }}/
|
|
76
|
+
${{ env.ASECLI_REPRO_REPORT }}
|
|
77
|
+
if-no-files-found: error
|
|
78
|
+
- run: mkdir dist && cp "$ASECLI_BUILD_A"/* dist/
|
|
79
|
+
- run: cd dist && shasum -a 256 *.whl *.tar.gz > SHA256SUMS
|
|
80
|
+
- run: uv run --frozen python tools/generate_sbom.py --dist dist --output "dist/asecli-$ASECLI_VERSION.spdx.json"
|
|
81
|
+
- run: uv run --frozen python tools/supply_chain_check.py --output dist/supply-chain-check.json
|
|
82
|
+
- run: uv venv .artifact-venv --python 3.12
|
|
83
|
+
- run: uv pip install --python .artifact-venv/bin/python "dist/asecli-$ASECLI_VERSION-py3-none-any.whl"
|
|
84
|
+
- run: .artifact-venv/bin/asecli parse tests/fixtures/step-antialiasing.function.txt
|
|
85
|
+
- name: Smoke test packaged GUI installer
|
|
86
|
+
run: |
|
|
87
|
+
test_project="$RUNNER_TEMP/asecli-gui-smoke"
|
|
88
|
+
mkdir -p "$test_project/Assets" "$test_project/ProjectSettings"
|
|
89
|
+
.artifact-venv/bin/asecli gui-support "$test_project" --write
|
|
90
|
+
test -f "$test_project/Assets/Editor/ASECLI/ASECLIMaterialGUI.cs"
|
|
91
|
+
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 (Node 24)
|
|
92
|
+
with:
|
|
93
|
+
name: asecli-${{ env.ASECLI_VERSION }}-python-${{ runner.arch }}
|
|
94
|
+
path: dist/
|
|
95
|
+
if-no-files-found: error
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
name: publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v[0-9]+.[0-9]+.[0-9]+"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
env:
|
|
12
|
+
SOURCE_DATE_EPOCH: "1788220800"
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
verify:
|
|
16
|
+
strategy:
|
|
17
|
+
fail-fast: false
|
|
18
|
+
matrix:
|
|
19
|
+
python-version: ["3.10", "3.12"]
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 (Node 24)
|
|
23
|
+
with:
|
|
24
|
+
persist-credentials: false
|
|
25
|
+
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 (Node 24)
|
|
26
|
+
with:
|
|
27
|
+
version: "0.11.14"
|
|
28
|
+
python-version: ${{ matrix.python-version }}
|
|
29
|
+
enable-cache: false
|
|
30
|
+
- run: uv lock --check
|
|
31
|
+
- run: uv sync --frozen --python ${{ matrix.python-version }}
|
|
32
|
+
- run: >-
|
|
33
|
+
uv run --frozen --python ${{ matrix.python-version }}
|
|
34
|
+
python tools/check_release_candidate.py --tag "$GITHUB_REF_NAME"
|
|
35
|
+
- run: uv run --frozen --python ${{ matrix.python-version }} pytest -q
|
|
36
|
+
- run: >-
|
|
37
|
+
uv run --frozen --python ${{ matrix.python-version }}
|
|
38
|
+
python tools/check_regression_catalog.py
|
|
39
|
+
- run: >-
|
|
40
|
+
uv run --frozen --python ${{ matrix.python-version }}
|
|
41
|
+
python tools/check_ci_governance.py
|
|
42
|
+
|
|
43
|
+
package:
|
|
44
|
+
needs: verify
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
steps:
|
|
47
|
+
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 (Node 24)
|
|
48
|
+
with:
|
|
49
|
+
persist-credentials: false
|
|
50
|
+
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 (Node 24)
|
|
51
|
+
with:
|
|
52
|
+
version: "0.11.14"
|
|
53
|
+
python-version: "3.12"
|
|
54
|
+
enable-cache: false
|
|
55
|
+
- run: uv sync --frozen --python 3.12
|
|
56
|
+
- run: uv run --frozen python tools/check_release_candidate.py --tag "$GITHUB_REF_NAME"
|
|
57
|
+
- name: Configure immutable candidate paths
|
|
58
|
+
run: |
|
|
59
|
+
echo "ASECLI_VERSION=$(uv version --short)" >> "$GITHUB_ENV"
|
|
60
|
+
echo "ASECLI_BUILD_A=$RUNNER_TEMP/asecli-build-a" >> "$GITHUB_ENV"
|
|
61
|
+
echo "ASECLI_BUILD_B=$RUNNER_TEMP/asecli-build-b" >> "$GITHUB_ENV"
|
|
62
|
+
echo "ASECLI_REPRO_REPORT=$RUNNER_TEMP/asecli-reproducibility.json" >> "$GITHUB_ENV"
|
|
63
|
+
- run: uv build --no-build-isolation --out-dir "$ASECLI_BUILD_A"
|
|
64
|
+
- run: uv build --no-build-isolation --out-dir "$ASECLI_BUILD_B"
|
|
65
|
+
- run: >-
|
|
66
|
+
uv run --frozen python tools/compare_build_artifacts.py
|
|
67
|
+
--left "$ASECLI_BUILD_A"
|
|
68
|
+
--right "$ASECLI_BUILD_B"
|
|
69
|
+
--output "$ASECLI_REPRO_REPORT"
|
|
70
|
+
- run: mkdir dist && cp "$ASECLI_BUILD_A"/* dist/
|
|
71
|
+
- run: cd dist && shasum -a 256 *.whl *.tar.gz > SHA256SUMS
|
|
72
|
+
- run: >-
|
|
73
|
+
uv run --frozen python tools/generate_sbom.py
|
|
74
|
+
--dist dist --output "dist/asecli-$ASECLI_VERSION.spdx.json"
|
|
75
|
+
- run: uv run --frozen python tools/supply_chain_check.py --output dist/supply-chain-check.json
|
|
76
|
+
- run: uv venv .artifact-venv --python 3.12
|
|
77
|
+
- run: uv pip install --python .artifact-venv/bin/python "dist/asecli-${ASECLI_VERSION}-py3-none-any.whl"
|
|
78
|
+
- run: .artifact-venv/bin/asecli parse tests/fixtures/step-antialiasing.function.txt
|
|
79
|
+
- run: .artifact-venv/bin/asecli install-skill --skill-root "$RUNNER_TEMP/codex-skills"
|
|
80
|
+
- name: Smoke test packaged GUI installer
|
|
81
|
+
run: |
|
|
82
|
+
test_project="$RUNNER_TEMP/asecli-gui-smoke"
|
|
83
|
+
mkdir -p "$test_project/Assets" "$test_project/ProjectSettings"
|
|
84
|
+
.artifact-venv/bin/asecli gui-support "$test_project" --write
|
|
85
|
+
test -f "$test_project/Assets/Editor/ASECLI/ASECLIMaterialGUI.cs"
|
|
86
|
+
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 (Node 24)
|
|
87
|
+
with:
|
|
88
|
+
name: dist-${{ github.sha }}
|
|
89
|
+
path: dist/
|
|
90
|
+
if-no-files-found: error
|
|
91
|
+
|
|
92
|
+
publish:
|
|
93
|
+
needs: package
|
|
94
|
+
runs-on: ubuntu-latest
|
|
95
|
+
environment:
|
|
96
|
+
name: pypi
|
|
97
|
+
url: https://pypi.org/project/asecli/
|
|
98
|
+
permissions:
|
|
99
|
+
id-token: write
|
|
100
|
+
steps:
|
|
101
|
+
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 (Node 24)
|
|
102
|
+
with:
|
|
103
|
+
version: "0.11.14"
|
|
104
|
+
enable-cache: false
|
|
105
|
+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 (Node 24)
|
|
106
|
+
with:
|
|
107
|
+
name: dist-${{ github.sha }}
|
|
108
|
+
path: dist/
|
|
109
|
+
- run: cd dist && shasum -a 256 -c SHA256SUMS
|
|
110
|
+
- run: uv publish dist/*.whl dist/*.tar.gz
|
asecli-0.6.2/.gitignore
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"project_id": "PRJ-ASECLI",
|
|
3
|
+
"profiles": ["core", "ai-agent"],
|
|
4
|
+
"source_roots": ["src", "tests", "tools"],
|
|
5
|
+
"thresholds": {
|
|
6
|
+
"source": {"warning": 250, "limit": 400},
|
|
7
|
+
"test": {"warning": 400, "limit": 600},
|
|
8
|
+
"config": {"warning": 160, "limit": 200}
|
|
9
|
+
},
|
|
10
|
+
"loc_exemptions": [],
|
|
11
|
+
"packed_executor_warning_baselines": {
|
|
12
|
+
"src/asecli/bridge/resources/asecli_material_gui.part00.cs.txt": 300,
|
|
13
|
+
"src/asecli/bridge/resources/asecli_material_gui.part01.cs.txt": 290
|
|
14
|
+
},
|
|
15
|
+
"module_roots": ["src/asecli"],
|
|
16
|
+
"module_public_patterns": [
|
|
17
|
+
"__init__.py",
|
|
18
|
+
"contracts/**"
|
|
19
|
+
],
|
|
20
|
+
"module_import_aliases": {},
|
|
21
|
+
"fitness": {"module_dependency_warning": 5, "module_dependency_limit": 8},
|
|
22
|
+
"audit": {
|
|
23
|
+
"output_dir": "docs/05-audits",
|
|
24
|
+
"reuse_legacy_history": false,
|
|
25
|
+
"supplement": "docs/00-governance/audit-supplement.json"
|
|
26
|
+
}
|
|
27
|
+
}
|
asecli-0.6.2/AGENTS.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# ASECLI 工程执行规则
|
|
2
|
+
|
|
3
|
+
## 默认采用快速路径
|
|
4
|
+
|
|
5
|
+
- 文档、注释、文案和不改变行为的配置修改,只检查相关 diff、格式与直接引用;不得启动 Unity/Tuanjie、截图、运行全量 pytest、发布治理或构建发布包。
|
|
6
|
+
- 局部 Python 修改只运行直接相关测试和必要的 CLI smoke。只有跨核心模块、公共契约、发布或定向测试无法覆盖时,才运行全量 pytest。
|
|
7
|
+
- 不因修改文件数量、搜索次数或内部步骤数量自动升级验证等级。
|
|
8
|
+
|
|
9
|
+
## Editor 与截图按需执行
|
|
10
|
+
|
|
11
|
+
- 只有改动实际触及 C# Editor 资源、ASE Editor API、Inspector 视觉/交互、真实节点边界或最终渲染时,才允许启动 Unity/Tuanjie。
|
|
12
|
+
- 必须先完成静态检查、自动测试和全部候选修改,再使用一个 Editor 会话集中验证;不得按“改一点、启动一次、截图一次”的方式迭代。
|
|
13
|
+
- 同一验证阶段最多进行一次正常 Editor 启动。没有新的代码变化或新的失败证据时,不得重复关闭、重开或重复截图。
|
|
14
|
+
- 截图只证明最终视觉,不用于调试代码逻辑。视觉代码未变化时复用已有有效证据,不重跑主题、宽度、缩放或交互矩阵。
|
|
15
|
+
- Editor/MCP 不可用或超时时,不自动反复重试;保留自动验证结果,并明确报告对应实机项未验证。
|
|
16
|
+
|
|
17
|
+
## 验证等级
|
|
18
|
+
|
|
19
|
+
1. 快速:相关定向测试或 CLI smoke,加 `git diff --check`。适用于普通局部修改,目标数分钟内完成。
|
|
20
|
+
2. 标准:相关模块测试;确有跨模块风险时追加一次全量 pytest。Editor 验证仍按改动范围决定。
|
|
21
|
+
3. 发布:仅在用户明确要求推送或发布时,执行完整治理、可复现构建、远端 CI、资产校验和回滚。
|
|
22
|
+
|
|
23
|
+
不得把发布级验证用于普通修改,也不得为了补充报告而重复已经通过且对应代码未变化的实机或截图验证。
|
asecli-0.6.2/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 AseCLI contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|