tangle-cli 0.1.12__tar.gz → 0.1.14__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 (101) hide show
  1. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/PKG-INFO +5 -1
  2. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/README.md +4 -0
  3. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/__init__.py +1 -1
  4. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/pipeline_compiler.py +451 -125
  5. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/pipeline_validation.py +166 -11
  6. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/pyproject.toml +1 -1
  7. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/pyproject.toml.orig +1 -1
  8. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/api_cli.py +0 -0
  9. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/api_schema.py +0 -0
  10. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/api_transport.py +0 -0
  11. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/args_container.py +0 -0
  12. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/artifacts.py +0 -0
  13. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/artifacts_cli.py +0 -0
  14. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/cli.py +0 -0
  15. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/cli_helpers.py +0 -0
  16. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/cli_options.py +0 -0
  17. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/client.py +0 -0
  18. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/component_from_func.py +0 -0
  19. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/component_generator.py +0 -0
  20. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/component_inspector.py +0 -0
  21. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/component_publisher.py +0 -0
  22. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/components_cli.py +0 -0
  23. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/dynamic_discovery_client.py +0 -0
  24. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/generated_model_extensions.py +0 -0
  25. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/handler.py +0 -0
  26. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/hydration_trust.py +0 -0
  27. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/logger.py +0 -0
  28. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/models.py +0 -0
  29. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/module_bundler.py +0 -0
  30. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/openapi/__init__.py +0 -0
  31. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/openapi/codegen.py +0 -0
  32. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/openapi/parser.py +0 -0
  33. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/pipeline_dehydrator.py +0 -0
  34. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/pipeline_hydrator.py +0 -0
  35. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/pipeline_run_annotations.py +0 -0
  36. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/pipeline_run_details.py +0 -0
  37. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/pipeline_run_manager.py +0 -0
  38. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/pipeline_run_search.py +0 -0
  39. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/pipeline_runner.py +0 -0
  40. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/pipeline_runs_cli.py +0 -0
  41. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/pipeline_spec_utils.py +0 -0
  42. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/pipelines.py +0 -0
  43. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/pipelines_cli.py +0 -0
  44. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/published_components_cli.py +0 -0
  45. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/py.typed +0 -0
  46. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/__init__.py +0 -0
  47. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/cfg.py +0 -0
  48. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/compiler_context.py +0 -0
  49. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/dynamic_data.py +0 -0
  50. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/emit.py +0 -0
  51. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/errors.py +0 -0
  52. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/graph.py +0 -0
  53. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/ids.py +0 -0
  54. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/pipeline.py +0 -0
  55. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/placeholders.py +0 -0
  56. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/raw.py +0 -0
  57. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/ref.py +0 -0
  58. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/registered.py +0 -0
  59. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/subpipeline.py +0 -0
  60. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/task.py +0 -0
  61. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/task_env.py +0 -0
  62. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/trace.py +0 -0
  63. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/python_pipeline/types.py +0 -0
  64. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/quickstart.py +0 -0
  65. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/schema_validation.py +0 -0
  66. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/schemas/__init__.py +0 -0
  67. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/schemas/dehydrated_pipeline_schema.json +0 -0
  68. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/schemas/pipeline_schema.json +0 -0
  69. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/secrets.py +0 -0
  70. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/secrets_cli.py +0 -0
  71. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/utils.py +0 -0
  72. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/packages/tangle-cli/src/tangle_cli/version_manager.py +0 -0
  73. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/OSS-CONVENTIONS.md +0 -0
  74. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/PORT-README.md +0 -0
  75. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/SKILL.md +0 -0
  76. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/agents/auth-wizard.md +0 -0
  77. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/agents/builder.md +0 -0
  78. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/agents/debugger.md +0 -0
  79. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/agents/reporter.md +0 -0
  80. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/agents/researcher.md +0 -0
  81. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/agents/reviewer.md +0 -0
  82. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/agents/scenario-builder.md +0 -0
  83. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/data-sources.md +0 -0
  84. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/event-log.md +0 -0
  85. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/example-scenarios/01-mslr-ranking.md +0 -0
  86. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/example-scenarios/02-text-classification.md +0 -0
  87. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/example-scenarios/INDEX.md +0 -0
  88. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/iterating-on-runs.md +0 -0
  89. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/knowledge-corpus.md +0 -0
  90. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/secrets.md +0 -0
  91. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/setup.md +0 -0
  92. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/step-0-initialize.md +0 -0
  93. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/step-1-analyze.md +0 -0
  94. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/step-2-hypothesize.md +0 -0
  95. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/step-3-submit.md +0 -0
  96. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/step-4-monitor.md +0 -0
  97. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/step-5-evaluate.md +0 -0
  98. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/step-6-synthesize.md +0 -0
  99. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/step-7-decide.md +0 -0
  100. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/tangle-tools.md +0 -0
  101. {tangle_cli-0.1.12 → tangle_cli-0.1.14}/skills/tangent/references/uploading-artifacts.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: tangle-cli
3
- Version: 0.1.12
3
+ Version: 0.1.14
4
4
  Summary: CLI for Tangle, the open-source ML pipeline orchestration platform
5
5
  Author: Alexey Volkov, Tangle authors, Volv Grebennikov
6
6
  Author-email: Alexey Volkov <alexey.volkov@ark-kun.com>, Volv Grebennikov <volv.grebennikov@shopify.com>
@@ -483,6 +483,10 @@ Notes:
483
483
 
484
484
  A minimal graph uses `@pipeline` for the graph and `@task` for local Python components. `@task` functions are not executed at compile time; the compiler records call sites, emits a sibling `<output>.components.yaml` with `local_from_python` entries, and rewrites task component refs to that sidecar. Hydrate later regenerates the same component YAML from the Python source.
485
485
 
486
+ Sidecar entries are deduplicated by the **generated component**, not by function name. The dedup key is the module-qualified function identity — a logical module namespace derived from the project-relative source layout (`package_a/tasks.py` -> `package_a.tasks`, `pkg/__init__.py` -> `pkg`), plus `__qualname__` and the function name — together with every generation-affecting option: image (explicit or resolved `image_id`), `mode`, `resolve_root`, `dependencies_from`, the `unwrap` schema, and the source file. Runtime `__module__` is deliberately not used, because pipeline scripts are imported under throwaway UUID module names.
487
+
488
+ Call sites sharing that whole identity collapse to one entry keyed by the readable hyphenated function name (`run_dbt` -> `run-dbt`). Otherwise every colliding variant — a shared helper re-decorated with different task-level options, or `package_a.tasks.run` alongside `package_b.tasks.run` — is emitted as `run-dbt--<hash>`, where `<hash>` is a content digest of the canonical identity; no variant keeps the unsuffixed name, and each task ref points at its own. Digests are anchored at the project source directory, so fragment names are unchanged by relocating the project, compiling into a different output directory, or reordering the pipeline's calls, and they never embed image, path, or credential-bearing values.
489
+
486
490
  ```python
487
491
  from cloud_pipelines import components
488
492
  from tangle_cli.python_pipeline import In, Out, pipeline, task
@@ -457,6 +457,10 @@ Notes:
457
457
 
458
458
  A minimal graph uses `@pipeline` for the graph and `@task` for local Python components. `@task` functions are not executed at compile time; the compiler records call sites, emits a sibling `<output>.components.yaml` with `local_from_python` entries, and rewrites task component refs to that sidecar. Hydrate later regenerates the same component YAML from the Python source.
459
459
 
460
+ Sidecar entries are deduplicated by the **generated component**, not by function name. The dedup key is the module-qualified function identity — a logical module namespace derived from the project-relative source layout (`package_a/tasks.py` -> `package_a.tasks`, `pkg/__init__.py` -> `pkg`), plus `__qualname__` and the function name — together with every generation-affecting option: image (explicit or resolved `image_id`), `mode`, `resolve_root`, `dependencies_from`, the `unwrap` schema, and the source file. Runtime `__module__` is deliberately not used, because pipeline scripts are imported under throwaway UUID module names.
461
+
462
+ Call sites sharing that whole identity collapse to one entry keyed by the readable hyphenated function name (`run_dbt` -> `run-dbt`). Otherwise every colliding variant — a shared helper re-decorated with different task-level options, or `package_a.tasks.run` alongside `package_b.tasks.run` — is emitted as `run-dbt--<hash>`, where `<hash>` is a content digest of the canonical identity; no variant keeps the unsuffixed name, and each task ref points at its own. Digests are anchored at the project source directory, so fragment names are unchanged by relocating the project, compiling into a different output directory, or reordering the pipeline's calls, and they never embed image, path, or credential-bearing values.
463
+
460
464
  ```python
461
465
  from cloud_pipelines import components
462
466
  from tangle_cli.python_pipeline import In, Out, pipeline, task
@@ -14,6 +14,6 @@ from tangle_cli.dynamic_discovery_client import TangleDynamicDiscoveryClient
14
14
  try:
15
15
  __version__ = metadata_version("tangle-cli")
16
16
  except PackageNotFoundError:
17
- __version__ = "0.1.12"
17
+ __version__ = "0.1.14"
18
18
 
19
19
  __all__ = ["TangleDynamicDiscoveryClient", "__version__"]