datex-studio-cli 0.4.22__tar.gz → 0.4.24__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.
- datex_studio_cli-0.4.24/.dockerignore +25 -0
- datex_studio_cli-0.4.24/.github/actionlint.yaml +4 -0
- datex_studio_cli-0.4.24/.github/workflows/build-image.yml +71 -0
- datex_studio_cli-0.4.24/.github/workflows/ci.yml +55 -0
- datex_studio_cli-0.4.24/.github/workflows/promote-prod.yml +104 -0
- datex_studio_cli-0.4.24/.github/workflows/release.yml +54 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/PKG-INFO +5 -5
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/README.md +4 -4
- datex_studio_cli-0.4.24/inspections.md +147 -0
- datex_studio_cli-0.4.24/outbound.md +928 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/pyproject.toml +7 -1
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/__init__.py +1 -1
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/cli.py +19 -5
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/auth.py +1 -1
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/branch.py +6 -7
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/cascade.py +1 -1
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/config.py +18 -17
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/configuration.py +1 -1
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/crm.py +1 -1
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/servicepack.py +5 -5
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/source.py +36 -12
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/telemetry.py +2 -2
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/api/__init__.py +3 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/api/client.py +4 -4
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/api/endpoints.py +27 -2
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/api/models.py +16 -0
- datex_studio_cli-0.4.24/src/dxs/core/api/replacements.py +72 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/auth/msal_client.py +1 -1
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/dynamics/client.py +2 -2
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/release_notes.py +71 -20
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/telemetry/config.py +22 -6
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/utils/config.py +11 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/utils/errors.py +1 -1
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/utils/update_check.py +57 -8
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/404/index.html +1 -1
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/404.html +1 -1
- datex_studio_cli-0.4.24/src/dxs/web/static/_next/static/chunks/538-b06224e65f71c9a1.js +1 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/design/capture/index.html +1 -1
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/design/capture/index.txt +2 -2
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/design/index.html +1 -1
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/design/index.txt +2 -2
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/index.html +1 -1
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/index.txt +1 -1
- datex_studio_cli-0.4.22/src/dxs/web/static/_next/static/chunks/538-84e2e111415f1fda.js +0 -1
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/.gitignore +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/CONTEXT.md +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/otel/.env.example +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/otel/Dockerfile +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/otel/README.md +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/otel/apply-local-cache.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/otel/collector-config.yaml +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/otel/docker-compose.yml +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/otel/local-test-settings.json +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/otel/remote-settings.json +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/report-creator.skill +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/scripts/analyze_corpus.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/scripts/generate_rdlx_schema.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/__main__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/api.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/branch_commit_guard.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/crm_delivery.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/crm_time.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/datasource.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/devops.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/document.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/endpoint.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/env.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/explore.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/function.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/init.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/marketplace.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/ng/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/ng/_common.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/ng/api.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/ng/create.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/ng/data.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/ng/pack.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/ng/preview.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/odata.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/organization.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/proxy.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/reference.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/release_notes.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/repo.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/report/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/report/add_cmds.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/report/api.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/report/batch.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/report/create.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/report/data.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/report/dataset.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/report/edit.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/report/folder.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/report/preview.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/report/schema_cmds.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/reset.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/schema.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/studio.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/user.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/commands/validation_report.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/context.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/agent_browser.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/api/app_config.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/api/metadata_models.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/api/reference_graph.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/auth/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/auth/datex_tenant.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/auth/decorators.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/auth/tenants.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/auth/token_cache.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/cache.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/datasource/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/datasource/flow_generator.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/datasource/flow_models.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/datasource/flow_shape.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/datasource/generator.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/datasource/models.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/datasource/parsers.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/datasource/resolver.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/datasource/type_def_parser.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/datasource/validator.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/designer/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/designer/flow_models.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/designer/models.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/designer/parsers.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/devops/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/devops/client.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/devops/helpers.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/devops/models.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/dynamics/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/dynamics/html.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/dynamics/metadata_cache.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/dynamics/pagination.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/dynamics/resolvers.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/dynamics/time_entry.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/footprint/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/footprint/client.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/footprint/edmx_parser.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/footprint/metadata.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/function/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/function/generator.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/function/models.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/function/validator.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/graph.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/onboarding.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/output/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/output/csv_fmt.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/output/formatter.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/output/json_fmt.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/output/redaction.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/output/yaml_fmt.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/responses.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/telemetry/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/telemetry/identity.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/telemetry/recorder.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/telemetry/scrubber.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/core/telemetry/sender.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/models/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/ng/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/ng/folder.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/ng/manifest.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/ng/mocks.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/ng/preview.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/ng/scaffold.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/ng/serve_lock.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/py.typed +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/datasource_binding.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/engine.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/field_parser.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/folder.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/manifest.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/models.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/preview.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/preview_arjs.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/schema.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/svg_renderer.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/templates/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/templates/bill_of_lading.rdlx-json +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/templates/shipping_label.rdlx-json +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/validate_arjs.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/validator.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/report/wrapper.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/utils/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/utils/click_options.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/utils/clipboard.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/utils/filtering.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/utils/image.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/utils/paths.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/utils/resolvers.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/utils/responses.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/utils/restricted.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/utils/sorting.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/utils/versioning.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/__init__.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/app.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/design.py +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/proxy_app.py +0 -0
- {datex_studio_cli-0.4.22/src/dxs/web/static/_next/static/UgyAMtPjH-Pt0RYWOHzIT → datex_studio_cli-0.4.24/src/dxs/web/static/_next/static/66KX2RhbxI0ARIXVny2EP}/_buildManifest.js +0 -0
- {datex_studio_cli-0.4.22/src/dxs/web/static/_next/static/UgyAMtPjH-Pt0RYWOHzIT → datex_studio_cli-0.4.24/src/dxs/web/static/_next/static/66KX2RhbxI0ARIXVny2EP}/_ssgManifest.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/0b24cca5-c1e1c8810348f107.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/255-102f2e5b2e3dc2ef.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/4bd1b696-c023c6e3521b1417.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/697-0e000ab410d9f470.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/871-1acacdb7b4022abf.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/8b8f67fc-6295949a4b5485a4.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/909-c88abba3cf0caec3.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/app/_not-found/page-ea1be7001c230704.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/app/design/capture/page-a5e129c2d223432c.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/app/design/page-21ba66a3dd3b03f0.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/app/layout-2cc6eac09e476c91.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/app/page-20c358395882cdac.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/framework-de98b93a850cfc71.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/main-0f18f91200dac003.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/main-app-b69998d8941231d8.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/pages/_app-7d307437aca18ad4.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/pages/_error-cb2a52f75f2162e2.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/chunks/webpack-2b297ada5306c17f.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/_next/static/css/360c657de5e04df8.css +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/render-cli.js +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/report-preview.html +0 -0
- {datex_studio_cli-0.4.22 → datex_studio_cli-0.4.24}/src/dxs/web/static/report-validate.html +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Context for quartermaster/Dockerfile (built from the repo root).
|
|
2
|
+
.git
|
|
3
|
+
.venv
|
|
4
|
+
**/__pycache__
|
|
5
|
+
.pytest_cache
|
|
6
|
+
.mypy_cache
|
|
7
|
+
.ruff_cache
|
|
8
|
+
.claude
|
|
9
|
+
.serena
|
|
10
|
+
node_modules
|
|
11
|
+
**/node_modules
|
|
12
|
+
src/dxs/web/frontend
|
|
13
|
+
tests
|
|
14
|
+
quartermaster/tests
|
|
15
|
+
quartermaster/.env
|
|
16
|
+
docs
|
|
17
|
+
documentation
|
|
18
|
+
exploration
|
|
19
|
+
examples
|
|
20
|
+
example-reports
|
|
21
|
+
exclude
|
|
22
|
+
skills
|
|
23
|
+
otel
|
|
24
|
+
dist
|
|
25
|
+
*.analysis.md
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Image build + staging digest bump (spec §5, §6). CI runs in-workflow: red
|
|
2
|
+
# tests produce no image. The final step commits the pushed digest to
|
|
3
|
+
# quartermaster/deploy/staging/values.yaml with GITHUB_TOKEN — which natively
|
|
4
|
+
# triggers no further workflow runs, so the rebuild loop is impossible.
|
|
5
|
+
name: Build image
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
push:
|
|
9
|
+
branches: [main]
|
|
10
|
+
paths-ignore:
|
|
11
|
+
- "docs/**"
|
|
12
|
+
- "**.md"
|
|
13
|
+
workflow_dispatch:
|
|
14
|
+
|
|
15
|
+
concurrency:
|
|
16
|
+
group: build-image-main
|
|
17
|
+
cancel-in-progress: false
|
|
18
|
+
|
|
19
|
+
permissions:
|
|
20
|
+
contents: write
|
|
21
|
+
packages: write
|
|
22
|
+
|
|
23
|
+
jobs:
|
|
24
|
+
ci:
|
|
25
|
+
uses: ./.github/workflows/ci.yml
|
|
26
|
+
|
|
27
|
+
build:
|
|
28
|
+
needs: ci
|
|
29
|
+
runs-on: arc-dxs
|
|
30
|
+
timeout-minutes: 30
|
|
31
|
+
steps:
|
|
32
|
+
- uses: actions/checkout@v4
|
|
33
|
+
- uses: docker/setup-buildx-action@v3
|
|
34
|
+
- uses: docker/login-action@v3
|
|
35
|
+
with:
|
|
36
|
+
registry: ghcr.io
|
|
37
|
+
username: ${{ github.actor }}
|
|
38
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
39
|
+
- id: meta
|
|
40
|
+
run: echo "datetag=$(date -u +%Y%m%d).${{ github.run_number }}" >> "$GITHUB_OUTPUT"
|
|
41
|
+
- id: build
|
|
42
|
+
uses: docker/build-push-action@v6
|
|
43
|
+
with:
|
|
44
|
+
context: .
|
|
45
|
+
file: quartermaster/Dockerfile
|
|
46
|
+
platforms: linux/amd64
|
|
47
|
+
push: true
|
|
48
|
+
tags: |
|
|
49
|
+
ghcr.io/datex/quartermaster:${{ github.sha }}
|
|
50
|
+
ghcr.io/datex/quartermaster:latest
|
|
51
|
+
ghcr.io/datex/quartermaster:${{ steps.meta.outputs.datetag }}
|
|
52
|
+
- name: Commit the staging digest bump
|
|
53
|
+
run: |
|
|
54
|
+
digest='${{ steps.build.outputs.digest }}'
|
|
55
|
+
sed -i -E "s|^ digest:.*| digest: \"${digest}\"|" quartermaster/deploy/staging/values.yaml
|
|
56
|
+
if git diff --quiet; then
|
|
57
|
+
echo "staging already runs ${digest}; nothing to commit"
|
|
58
|
+
exit 0
|
|
59
|
+
fi
|
|
60
|
+
git config user.name "github-actions[bot]"
|
|
61
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
62
|
+
git add quartermaster/deploy/staging/values.yaml
|
|
63
|
+
git commit -m "chore(deploy): staging → ${digest}"
|
|
64
|
+
for attempt in 1 2 3; do
|
|
65
|
+
if git push origin HEAD:main; then
|
|
66
|
+
exit 0
|
|
67
|
+
fi
|
|
68
|
+
git pull --rebase origin main
|
|
69
|
+
done
|
|
70
|
+
echo "digest bump push failed after 3 attempts" >&2
|
|
71
|
+
exit 1
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# CI (spec §5): two jobs, both always run — the uv workspace couples the CLI
|
|
2
|
+
# and the service. Callable from build-image.yml and release.yml so a red
|
|
3
|
+
# suite produces no image and no release (the pipeline is the gate, not the
|
|
4
|
+
# merge — GitHub Free has no required checks).
|
|
5
|
+
name: CI
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
pull_request:
|
|
9
|
+
paths-ignore:
|
|
10
|
+
- "docs/**"
|
|
11
|
+
- "**.md"
|
|
12
|
+
workflow_call:
|
|
13
|
+
|
|
14
|
+
concurrency:
|
|
15
|
+
group: ci-${{ github.head_ref || github.run_id }}
|
|
16
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
cli:
|
|
20
|
+
runs-on: arc-dxs
|
|
21
|
+
timeout-minutes: 30
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v4
|
|
24
|
+
- uses: astral-sh/setup-uv@v5
|
|
25
|
+
with:
|
|
26
|
+
enable-cache: true
|
|
27
|
+
- run: uv python install 3.13
|
|
28
|
+
- uses: actions/setup-node@v4
|
|
29
|
+
with:
|
|
30
|
+
node-version: 22
|
|
31
|
+
- name: Build the report renderer bundle (snapshot tests shell out to it)
|
|
32
|
+
working-directory: src/dxs/web/frontend
|
|
33
|
+
run: |
|
|
34
|
+
npm ci
|
|
35
|
+
npm run build:render-cli
|
|
36
|
+
- run: uv sync --all-packages --extra dev
|
|
37
|
+
- run: uv run ruff check .
|
|
38
|
+
- name: mypy (non-blocking — 21 pre-existing errors, see #171)
|
|
39
|
+
run: uv run mypy src/dxs
|
|
40
|
+
continue-on-error: true
|
|
41
|
+
- run: uv run pytest -q
|
|
42
|
+
|
|
43
|
+
service:
|
|
44
|
+
runs-on: arc-dxs
|
|
45
|
+
timeout-minutes: 20
|
|
46
|
+
steps:
|
|
47
|
+
- uses: actions/checkout@v4
|
|
48
|
+
- uses: astral-sh/setup-uv@v5
|
|
49
|
+
with:
|
|
50
|
+
enable-cache: true
|
|
51
|
+
- run: uv python install 3.13
|
|
52
|
+
- run: uv sync --all-packages --extra dev
|
|
53
|
+
- run: uv run ruff check quartermaster
|
|
54
|
+
- run: uv run --package quartermaster mypy quartermaster/src/quartermaster
|
|
55
|
+
- run: uv run --package quartermaster pytest quartermaster/tests -q
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Prod promotion by git commit (spec §6): dispatch-only, typed confirmation,
|
|
2
|
+
# moving-ref rejection, GHCR existence preflight, staging-parity assert
|
|
3
|
+
# (promote-what-you-tested). Rollback = re-dispatch the previous digest with
|
|
4
|
+
# the parity override. Actor and inputs are recorded in the run and commit.
|
|
5
|
+
# NOTE: no `environment:` on jobs — the pre-existing `production` environment
|
|
6
|
+
# carries a protected_branches policy no branch can satisfy on this plan.
|
|
7
|
+
name: Promote prod
|
|
8
|
+
|
|
9
|
+
on:
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
inputs:
|
|
12
|
+
ref:
|
|
13
|
+
description: "Immutable image digest (sha256:…) or the git SHA of a staging bump commit"
|
|
14
|
+
required: true
|
|
15
|
+
confirm:
|
|
16
|
+
description: 'Type "promote-to-prod" to confirm'
|
|
17
|
+
required: true
|
|
18
|
+
override_parity:
|
|
19
|
+
description: "Promote even though staging is not currently running this digest (rollbacks)"
|
|
20
|
+
type: boolean
|
|
21
|
+
default: false
|
|
22
|
+
|
|
23
|
+
concurrency:
|
|
24
|
+
group: promote-prod
|
|
25
|
+
cancel-in-progress: false
|
|
26
|
+
|
|
27
|
+
permissions:
|
|
28
|
+
contents: write
|
|
29
|
+
packages: read
|
|
30
|
+
|
|
31
|
+
jobs:
|
|
32
|
+
promote:
|
|
33
|
+
runs-on: arc-dxs
|
|
34
|
+
timeout-minutes: 15
|
|
35
|
+
steps:
|
|
36
|
+
- name: Typed confirmation
|
|
37
|
+
run: |
|
|
38
|
+
if [ "${{ inputs.confirm }}" != "promote-to-prod" ]; then
|
|
39
|
+
echo "confirmation mismatch: expected the literal string promote-to-prod" >&2
|
|
40
|
+
exit 1
|
|
41
|
+
fi
|
|
42
|
+
- uses: actions/checkout@v4
|
|
43
|
+
with:
|
|
44
|
+
fetch-depth: 0
|
|
45
|
+
- id: resolve
|
|
46
|
+
name: Resolve digest (moving refs rejected)
|
|
47
|
+
run: |
|
|
48
|
+
ref='${{ inputs.ref }}'
|
|
49
|
+
if echo "$ref" | grep -qE '^sha256:[0-9a-f]{64}$'; then
|
|
50
|
+
digest="$ref"
|
|
51
|
+
elif echo "$ref" | grep -qE '^[0-9a-f]{7,40}$'; then
|
|
52
|
+
digest=$(git show "${ref}:quartermaster/deploy/staging/values.yaml" | awk -F'"' '/^ digest:/ {print $2}')
|
|
53
|
+
if ! echo "$digest" | grep -qE '^sha256:[0-9a-f]{64}$'; then
|
|
54
|
+
echo "commit ${ref} carries no staging digest" >&2
|
|
55
|
+
exit 1
|
|
56
|
+
fi
|
|
57
|
+
else
|
|
58
|
+
echo "ref must be an immutable digest or a git SHA — tags like 'latest' are rejected" >&2
|
|
59
|
+
exit 1
|
|
60
|
+
fi
|
|
61
|
+
echo "digest=${digest}" >> "$GITHUB_OUTPUT"
|
|
62
|
+
- name: GHCR existence preflight
|
|
63
|
+
run: |
|
|
64
|
+
token=$(curl -sf -u "x:${{ secrets.GITHUB_TOKEN }}" \
|
|
65
|
+
"https://ghcr.io/token?scope=repository:datex/quartermaster:pull" | \
|
|
66
|
+
sed -E 's/.*"token":"([^"]+)".*/\1/')
|
|
67
|
+
curl -sf -o /dev/null \
|
|
68
|
+
-H "Authorization: Bearer ${token}" \
|
|
69
|
+
-H "Accept: application/vnd.oci.image.index.v1+json, application/vnd.docker.distribution.manifest.v2+json, application/vnd.oci.image.manifest.v1+json" \
|
|
70
|
+
"https://ghcr.io/v2/datex/quartermaster/manifests/${{ steps.resolve.outputs.digest }}" \
|
|
71
|
+
|| { echo "digest not found in GHCR — nothing to promote" >&2; exit 1; }
|
|
72
|
+
- name: Staging-parity assert (promote-what-you-tested)
|
|
73
|
+
run: |
|
|
74
|
+
staging=$(awk -F'"' '/^ digest:/ {print $2}' quartermaster/deploy/staging/values.yaml)
|
|
75
|
+
if [ "$staging" != "${{ steps.resolve.outputs.digest }}" ]; then
|
|
76
|
+
if [ "${{ inputs.override_parity }}" = "true" ]; then
|
|
77
|
+
echo "parity override: staging runs ${staging}, promoting ${{ steps.resolve.outputs.digest }} anyway"
|
|
78
|
+
else
|
|
79
|
+
echo "staging currently runs ${staging}, not the requested digest — pass override_parity for rollbacks" >&2
|
|
80
|
+
exit 1
|
|
81
|
+
fi
|
|
82
|
+
fi
|
|
83
|
+
- name: Commit the prod digest bump
|
|
84
|
+
run: |
|
|
85
|
+
digest='${{ steps.resolve.outputs.digest }}'
|
|
86
|
+
sed -i -E "s|^ digest:.*| digest: \"${digest}\"|" quartermaster/deploy/prod/values.yaml
|
|
87
|
+
if git diff --quiet; then
|
|
88
|
+
echo "prod already runs ${digest}; nothing to commit"
|
|
89
|
+
exit 0
|
|
90
|
+
fi
|
|
91
|
+
git config user.name "github-actions[bot]"
|
|
92
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
93
|
+
git add quartermaster/deploy/prod/values.yaml
|
|
94
|
+
git commit \
|
|
95
|
+
-m "chore(deploy): prod → ${digest}" \
|
|
96
|
+
-m "Promoted by @${{ github.actor }} via promote-prod (ref input: ${{ inputs.ref }})"
|
|
97
|
+
for attempt in 1 2 3; do
|
|
98
|
+
if git push origin HEAD:main; then
|
|
99
|
+
exit 0
|
|
100
|
+
fi
|
|
101
|
+
git pull --rebase origin main
|
|
102
|
+
done
|
|
103
|
+
echo "prod bump push failed after 3 attempts" >&2
|
|
104
|
+
exit 1
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# The CLI's PyPI release lane (spec §5), retiring publish.sh and ~/.pypirc.
|
|
2
|
+
# Tag vX.Y.Z → full CI → version-agreement assert (the uv.lock entry is the
|
|
3
|
+
# one nothing else updates) → frontend build with a hard existence check (the
|
|
4
|
+
# gitignored web/static/ ships via hatch `artifacts`, which silently includes
|
|
5
|
+
# nothing when absent) → uv build + publish via PyPI trusted publishing.
|
|
6
|
+
# Prerequisite: a trusted publisher for this repo/workflow configured on PyPI.
|
|
7
|
+
name: Release to PyPI
|
|
8
|
+
|
|
9
|
+
on:
|
|
10
|
+
push:
|
|
11
|
+
tags: ["v*"]
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
id-token: write
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
ci:
|
|
19
|
+
uses: ./.github/workflows/ci.yml
|
|
20
|
+
|
|
21
|
+
publish:
|
|
22
|
+
needs: ci
|
|
23
|
+
runs-on: arc-dxs
|
|
24
|
+
timeout-minutes: 30
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
- name: Assert tag == pyproject == __init__ == uv.lock
|
|
28
|
+
run: |
|
|
29
|
+
tag="${GITHUB_REF#refs/tags/v}"
|
|
30
|
+
pyproject=$(grep -m1 '^version = ' pyproject.toml | cut -d'"' -f2)
|
|
31
|
+
init=$(grep -m1 '__version__' src/dxs/__init__.py | cut -d'"' -f2)
|
|
32
|
+
lock=$(awk '/^name = "datex-studio-cli"$/ {found=1} found && /^version = / {print; exit}' uv.lock | cut -d'"' -f2)
|
|
33
|
+
echo "tag=${tag} pyproject=${pyproject} __init__=${init} uv.lock=${lock}"
|
|
34
|
+
if [ "$tag" != "$pyproject" ] || [ "$pyproject" != "$init" ] || [ "$pyproject" != "$lock" ]; then
|
|
35
|
+
echo "version sources disagree — run 'uv lock' and align all three before tagging" >&2
|
|
36
|
+
exit 1
|
|
37
|
+
fi
|
|
38
|
+
- uses: astral-sh/setup-uv@v5
|
|
39
|
+
with:
|
|
40
|
+
enable-cache: true
|
|
41
|
+
- run: uv python install 3.13
|
|
42
|
+
- uses: actions/setup-node@v4
|
|
43
|
+
with:
|
|
44
|
+
node-version: 22
|
|
45
|
+
- name: Build the web UI (shipped via hatch artifacts)
|
|
46
|
+
working-directory: src/dxs/web/frontend
|
|
47
|
+
run: |
|
|
48
|
+
npm ci
|
|
49
|
+
npm run build
|
|
50
|
+
- name: Assert the frontend build actually produced the static export
|
|
51
|
+
run: test -f src/dxs/web/static/index.html
|
|
52
|
+
- run: uv build
|
|
53
|
+
- name: Publish via trusted publishing
|
|
54
|
+
run: uv publish
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: datex-studio-cli
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.24
|
|
4
4
|
Summary: CLI for Datex Studio low-code platform, designed for LLM-based AI agents
|
|
5
5
|
Project-URL: Homepage, https://github.com/datex/datex-studio-cli
|
|
6
6
|
Project-URL: Documentation, https://github.com/datex/datex-studio-cli
|
|
@@ -179,13 +179,13 @@ Configuration values are resolved in order:
|
|
|
179
179
|
|
|
180
180
|
```bash
|
|
181
181
|
# View current configuration
|
|
182
|
-
dxs
|
|
182
|
+
dxs settings list
|
|
183
183
|
|
|
184
184
|
# Set a default
|
|
185
|
-
dxs
|
|
185
|
+
dxs settings set default_repo 10
|
|
186
186
|
|
|
187
187
|
# Get a specific value
|
|
188
|
-
dxs
|
|
188
|
+
dxs settings get default_repo
|
|
189
189
|
```
|
|
190
190
|
|
|
191
191
|
Configuration stored in `~/.datex/config.yaml`. Credentials stored separately in `~/.datex/credentials.yaml`.
|
|
@@ -225,7 +225,7 @@ dxs auth list
|
|
|
225
225
|
dxs auth switch other-org
|
|
226
226
|
```
|
|
227
227
|
|
|
228
|
-
###
|
|
228
|
+
### CLI Settings (`dxs settings`)
|
|
229
229
|
|
|
230
230
|
| Command | Description |
|
|
231
231
|
|---------|-------------|
|
|
@@ -126,13 +126,13 @@ Configuration values are resolved in order:
|
|
|
126
126
|
|
|
127
127
|
```bash
|
|
128
128
|
# View current configuration
|
|
129
|
-
dxs
|
|
129
|
+
dxs settings list
|
|
130
130
|
|
|
131
131
|
# Set a default
|
|
132
|
-
dxs
|
|
132
|
+
dxs settings set default_repo 10
|
|
133
133
|
|
|
134
134
|
# Get a specific value
|
|
135
|
-
dxs
|
|
135
|
+
dxs settings get default_repo
|
|
136
136
|
```
|
|
137
137
|
|
|
138
138
|
Configuration stored in `~/.datex/config.yaml`. Credentials stored separately in `~/.datex/credentials.yaml`.
|
|
@@ -172,7 +172,7 @@ dxs auth list
|
|
|
172
172
|
dxs auth switch other-org
|
|
173
173
|
```
|
|
174
174
|
|
|
175
|
-
###
|
|
175
|
+
### CLI Settings (`dxs settings`)
|
|
176
176
|
|
|
177
177
|
| Command | Description |
|
|
178
178
|
|---------|-------------|
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Marketing Brief: Footprint Inspections Module
|
|
2
|
+
|
|
3
|
+
## Executive Summary
|
|
4
|
+
|
|
5
|
+
**Product**: Footprint Inspections Module
|
|
6
|
+
**Platform**: Footprint Warehouse Management System (Datex Studio)
|
|
7
|
+
**Category**: Quality Control & Compliance Management
|
|
8
|
+
**Target Market**: 3PL providers, distribution centers, manufacturing warehouses, regulated industries
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Product Overview
|
|
13
|
+
|
|
14
|
+
The Footprint Inspections module delivers enterprise-grade quality control and compliance verification capabilities embedded directly within warehouse operations. It transforms ad-hoc quality checks into systematic, auditable workflows that drive accountability and regulatory compliance.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Target Audience
|
|
19
|
+
|
|
20
|
+
### Primary Users
|
|
21
|
+
- **Quality Control Personnel** — Execute daily inspection tasks and complete quality surveys
|
|
22
|
+
- **Warehouse Supervisors** — Create and assign inspection work, monitor completion rates
|
|
23
|
+
- **Compliance Officers** — Configure inspection protocols, audit survey results, ensure regulatory adherence
|
|
24
|
+
|
|
25
|
+
### Decision Makers
|
|
26
|
+
- VP of Operations / Chief Operations Officer
|
|
27
|
+
- Quality Assurance Directors
|
|
28
|
+
- Warehouse General Managers
|
|
29
|
+
- Compliance & Regulatory Affairs Leaders
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Key Value Propositions
|
|
34
|
+
|
|
35
|
+
### 1. Unified Quality Workflow
|
|
36
|
+
Inspections are first-class warehouse tasks—not separate systems. They share the same task lifecycle (Created → Released → Started → Completed) as picking, putaway, and other operations. This means one training model, one labor pool, and one visibility dashboard.
|
|
37
|
+
|
|
38
|
+
### 2. Granular Targeting
|
|
39
|
+
Create inspection tasks at any level of specificity:
|
|
40
|
+
- **Location-level** — Inspect a rack, zone, or staging area
|
|
41
|
+
- **License plate-level** — Target specific pallets or containers
|
|
42
|
+
- **Material & lot-level** — Focus on SKUs, batches, or vendor lots
|
|
43
|
+
|
|
44
|
+
### 3. Built-In Survey Integration
|
|
45
|
+
Link structured quality surveys to inspection tasks. Surveys capture standardized data points—temperature readings, damage assessments, packaging integrity—providing auditable evidence trails for regulators and customers.
|
|
46
|
+
|
|
47
|
+
### 4. Bulk Operations for Scale
|
|
48
|
+
Process inspections at scale with bulk status changes. Supervisors can advance 50, 100, or 500 tasks simultaneously—critical during receiving surges, pre-ship audits, or periodic compliance sweeps.
|
|
49
|
+
|
|
50
|
+
### 5. Configurable Operation Codes
|
|
51
|
+
Define custom inspection types (e.g., "Receiving QC", "Pre-Ship Audit", "Temperature Verification", "Lot Trace Inspection") to match your operational vocabulary and reporting requirements.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Feature Highlights
|
|
56
|
+
|
|
57
|
+
| Capability | Benefit |
|
|
58
|
+
|------------|---------|
|
|
59
|
+
| **Task Creation Wizard** | Guided form ensures all required fields captured—no missing data |
|
|
60
|
+
| **Multi-Status Filtering** | Instantly view open inspections, completed today, or overdue tasks |
|
|
61
|
+
| **Date Range Queries** | Filter by created, released, started, or completed timestamps |
|
|
62
|
+
| **Full-Text Search** | Find tasks by material name, lot number, or notes |
|
|
63
|
+
| **Labor Management Integration** | Inspection tasks flow into workforce assignment for labor-tracked environments |
|
|
64
|
+
| **Role-Based Access Control** | Granular permissions—restrict hub access or default warehouse scope |
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Integration Points
|
|
69
|
+
|
|
70
|
+
### Survey System
|
|
71
|
+
Inspections link directly to the Surveys module. Quality personnel complete standardized checklists, and results attach permanently to inspection records—providing audit-ready documentation.
|
|
72
|
+
|
|
73
|
+
### Labor Management
|
|
74
|
+
Inspection operation codes can be flagged as "Eligible for Labor Management," enabling supervisors to assign QC work alongside picks and puts through a unified workforce planning interface.
|
|
75
|
+
|
|
76
|
+
### Inventory Context
|
|
77
|
+
Every inspection carries full inventory lineage: warehouse, location, license plate, material, lot, and vendor lot. This context powers traceability reports and root-cause analysis.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Compliance & Audit Benefits
|
|
82
|
+
|
|
83
|
+
- **Immutable Timestamps** — Created, released, started, and completed times auto-captured
|
|
84
|
+
- **Operation Code Categorization** — Classify inspections for regulatory reporting (FDA, USDA, customer audits)
|
|
85
|
+
- **Survey Evidence** — Attach photos, temperature readings, and structured responses
|
|
86
|
+
- **Deletion Controls** — Operation codes with linked tasks cannot be deleted, preserving audit integrity
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Competitive Differentiators
|
|
91
|
+
|
|
92
|
+
| Traditional QC Systems | Footprint Inspections |
|
|
93
|
+
|------------------------|----------------------|
|
|
94
|
+
| Separate application requiring integration | Native module within WMS—zero integration cost |
|
|
95
|
+
| Paper-based or standalone mobile app | Web-based hub + mobile-ready for handheld devices |
|
|
96
|
+
| Quality data siloed from inventory | Inspections linked to real-time inventory records |
|
|
97
|
+
| Manual labor tracking | Automatic labor capture when integrated with Labor Management |
|
|
98
|
+
| Limited configurability | Fully customizable operation codes, surveys, and access controls |
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Use Cases
|
|
103
|
+
|
|
104
|
+
### Receiving Quality Control
|
|
105
|
+
Create inspection tasks automatically upon ASN receipt. QC personnel inspect materials before putaway, completing surveys that capture damage photos, quantity counts, and lot verification.
|
|
106
|
+
|
|
107
|
+
### Pre-Ship Audits
|
|
108
|
+
Before orders release to shipping, generate inspection tasks for high-value or regulated products. Confirm packaging integrity, label accuracy, and temperature compliance.
|
|
109
|
+
|
|
110
|
+
### Periodic Compliance Sweeps
|
|
111
|
+
Schedule weekly or monthly inspection batches across storage zones. Track completion rates and escalate overdue tasks to supervisors.
|
|
112
|
+
|
|
113
|
+
### Customer-Mandated QC
|
|
114
|
+
Configure customer-specific operation codes (e.g., "Customer ABC 100% Inspect") with linked surveys matching SLA requirements. Provide customers with survey exports as proof of compliance.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Technical Specifications
|
|
119
|
+
|
|
120
|
+
| Attribute | Value |
|
|
121
|
+
|-----------|-------|
|
|
122
|
+
| Platform | Datex Studio Low-Code |
|
|
123
|
+
| Deployment | Cloud-hosted SaaS |
|
|
124
|
+
| API | REST/OData for inspection task queries |
|
|
125
|
+
| Data Export | Native Excel export from task grids |
|
|
126
|
+
| Permissions Model | Operation-based access control |
|
|
127
|
+
| Audit Trail | Full timestamp capture on all status transitions |
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Pricing Position
|
|
132
|
+
|
|
133
|
+
The Inspections module is included in the Footprint Planning tier. Customers with base Footprint WMS licenses may require a Planning add-on to access Inspections and Labor Management capabilities.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Call to Action
|
|
138
|
+
|
|
139
|
+
**For Sales Teams**: Position Inspections as a compliance accelerator for FDA-regulated, food-grade, and high-value inventory operations. Lead with audit trail capabilities and survey integration.
|
|
140
|
+
|
|
141
|
+
**For Marketing Campaigns**: Highlight the unified task model—"One system for picks, puts, and QC"—to differentiate against point solutions.
|
|
142
|
+
|
|
143
|
+
**For Customer Success**: Offer inspection workflow design sessions as part of onboarding to ensure operation codes and surveys match customer processes from day one.
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
*For detailed technical documentation, refer to the Footprint Planning section documentation.*
|