PyTaskWireCheck 0.1.0__tar.gz → 0.1.1__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 (62) hide show
  1. {pytaskwirecheck-0.1.0/src/PyTaskWireCheck.egg-info → pytaskwirecheck-0.1.1}/PKG-INFO +24 -1
  2. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/README.md +23 -0
  3. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/pyproject.toml +1 -1
  4. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1/src/PyTaskWireCheck.egg-info}/PKG-INFO +24 -1
  5. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/__init__.py +1 -1
  6. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/cache/store.py +1 -1
  7. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/config/schema.py +5 -3
  8. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/LICENSE +0 -0
  9. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/setup.cfg +0 -0
  10. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/PyTaskWireCheck.egg-info/SOURCES.txt +0 -0
  11. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/PyTaskWireCheck.egg-info/dependency_links.txt +0 -0
  12. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/PyTaskWireCheck.egg-info/entry_points.txt +0 -0
  13. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/PyTaskWireCheck.egg-info/requires.txt +0 -0
  14. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/PyTaskWireCheck.egg-info/top_level.txt +0 -0
  15. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/api.py +0 -0
  16. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/cache/__init__.py +0 -0
  17. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/cache/fingerprint.py +0 -0
  18. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/cache/policy.py +0 -0
  19. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/cli.py +0 -0
  20. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/config/__init__.py +0 -0
  21. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/config/loader.py +0 -0
  22. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/config/validation.py +0 -0
  23. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/diagnostics/__init__.py +0 -0
  24. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/diagnostics/errors.py +0 -0
  25. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/engine/__init__.py +0 -0
  26. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/engine/cancellation.py +0 -0
  27. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/engine/events.py +0 -0
  28. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/engine/executor.py +0 -0
  29. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/engine/scheduler.py +0 -0
  30. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/engine/state.py +0 -0
  31. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/graph/__init__.py +0 -0
  32. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/graph/builder.py +0 -0
  33. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/graph/model.py +0 -0
  34. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/graph/planner.py +0 -0
  35. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/graph/validator.py +0 -0
  36. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/history/__init__.py +0 -0
  37. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/history/store.py +0 -0
  38. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/logging/__init__.py +0 -0
  39. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/logging/artifacts.py +0 -0
  40. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/logging/structured.py +0 -0
  41. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/notifications/__init__.py +0 -0
  42. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/notifications/base.py +0 -0
  43. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/notifications/webhook.py +0 -0
  44. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/processes/__init__.py +0 -0
  45. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/processes/runner.py +0 -0
  46. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/processes/signals.py +0 -0
  47. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/py.typed +0 -0
  48. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/tui/__init__.py +0 -0
  49. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/tui/app.py +0 -0
  50. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/src/pytaskwirecheck/tui/renderer.py +0 -0
  51. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/tests/test_api.py +0 -0
  52. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/tests/test_cache.py +0 -0
  53. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/tests/test_cli.py +0 -0
  54. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/tests/test_config.py +0 -0
  55. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/tests/test_graph.py +0 -0
  56. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/tests/test_history.py +0 -0
  57. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/tests/test_integration.py +0 -0
  58. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/tests/test_notifications.py +0 -0
  59. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/tests/test_process_runner.py +0 -0
  60. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/tests/test_scheduler.py +0 -0
  61. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/tests/test_state.py +0 -0
  62. {pytaskwirecheck-0.1.0 → pytaskwirecheck-0.1.1}/tests/test_tui.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyTaskWireCheck
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: Local-first, dependency-aware task orchestration engine (DAG scheduler + content-addressed cache + CLI).
5
5
  Author: Georgi Mullassery
6
6
  License-Expression: MIT
@@ -59,6 +59,29 @@ or a single byte leaving your machine.
59
59
 
60
60
  ---
61
61
 
62
+ > **Not to be confused with the security tools in this family ([PyDeepMesh](https://github.com/Mullassery/PyDeepMesh), [PyDependencyCheck](https://github.com/Mullassery/PyDependencyCheck)):** despite the "Check" in its name, PyTaskWireCheck is a local task orchestrator, not a security scanner.
63
+
64
+ ## Which project do I need?
65
+
66
+ Part of the Mullassery open-source family. These tools have similar names — here is the short version of who does what:
67
+
68
+ | If you need to… | Use |
69
+ | --- | --- |
70
+ | Build a repository's dependency graph and match it against vulnerability advisories (Python, Rust, Node, containers) | [PyDeepMesh](https://github.com/Mullassery/PyDeepMesh) |
71
+ | Understand *why* a Python dependency exists, who added it, and whether it is actually used | [PyDependencyCheck](https://github.com/Mullassery/PyDependencyCheck) |
72
+ | Statically analyze a **dbt** project (risky tests, test blast radius, cost) | [PyDBTGuard](https://github.com/Mullassery/PyDBTGuard) |
73
+ | Statically analyze **Apache Beam / Dataflow** pipelines (cost, hot keys, reliability) | [PyBeamGuard](https://github.com/Mullassery/PyBeamGuard) |
74
+ | Validate **Airflow** DAGs and dbt runs | [PyAirflowTester](https://github.com/Mullassery/PyAirflowTester) |
75
+ | Simulate cascading-failure **blast radius** across infrastructure, data pipelines, and AI systems | [PyBlastRadius](https://github.com/Mullassery/PyBlastRadius) |
76
+ | Check the **quality of the data itself** at runtime (schema, drift, anomalies) | [StatGuardian](https://github.com/Mullassery/StatGuardian) |
77
+ | Discover **devices, services, and vulnerabilities on a network** | [PyNetworkIntel](https://github.com/Mullassery/PyNetworkIntel) |
78
+ | Discover and score **API security** risk (real traffic, agent/MCP, Cedar policy) | [PyAPICheck](https://github.com/Mullassery/PyAPICheck) |
79
+ | Trace and root-cause **AI agent** failures | [PyAgentHound](https://github.com/Mullassery/PyAgentHound) |
80
+ | Diagnose **RAG retrieval** failures | [PyVectorHound](https://github.com/Mullassery/PyVectorHound) |
81
+ | Orchestrate **local, dependency-aware tasks** (DAG scheduler + content-addressed cache) | [PyTaskWireCheck](https://github.com/Mullassery/PyTaskWireCheck) |
82
+
83
+ [Browse all projects →](https://github.com/Mullassery?tab=repositories)
84
+
62
85
  ## Why PyTaskWireCheck
63
86
 
64
87
  Most build tools want to own your project. PyTaskWireCheck does one job: it orchestrates
@@ -19,6 +19,29 @@ or a single byte leaving your machine.
19
19
 
20
20
  ---
21
21
 
22
+ > **Not to be confused with the security tools in this family ([PyDeepMesh](https://github.com/Mullassery/PyDeepMesh), [PyDependencyCheck](https://github.com/Mullassery/PyDependencyCheck)):** despite the "Check" in its name, PyTaskWireCheck is a local task orchestrator, not a security scanner.
23
+
24
+ ## Which project do I need?
25
+
26
+ Part of the Mullassery open-source family. These tools have similar names — here is the short version of who does what:
27
+
28
+ | If you need to… | Use |
29
+ | --- | --- |
30
+ | Build a repository's dependency graph and match it against vulnerability advisories (Python, Rust, Node, containers) | [PyDeepMesh](https://github.com/Mullassery/PyDeepMesh) |
31
+ | Understand *why* a Python dependency exists, who added it, and whether it is actually used | [PyDependencyCheck](https://github.com/Mullassery/PyDependencyCheck) |
32
+ | Statically analyze a **dbt** project (risky tests, test blast radius, cost) | [PyDBTGuard](https://github.com/Mullassery/PyDBTGuard) |
33
+ | Statically analyze **Apache Beam / Dataflow** pipelines (cost, hot keys, reliability) | [PyBeamGuard](https://github.com/Mullassery/PyBeamGuard) |
34
+ | Validate **Airflow** DAGs and dbt runs | [PyAirflowTester](https://github.com/Mullassery/PyAirflowTester) |
35
+ | Simulate cascading-failure **blast radius** across infrastructure, data pipelines, and AI systems | [PyBlastRadius](https://github.com/Mullassery/PyBlastRadius) |
36
+ | Check the **quality of the data itself** at runtime (schema, drift, anomalies) | [StatGuardian](https://github.com/Mullassery/StatGuardian) |
37
+ | Discover **devices, services, and vulnerabilities on a network** | [PyNetworkIntel](https://github.com/Mullassery/PyNetworkIntel) |
38
+ | Discover and score **API security** risk (real traffic, agent/MCP, Cedar policy) | [PyAPICheck](https://github.com/Mullassery/PyAPICheck) |
39
+ | Trace and root-cause **AI agent** failures | [PyAgentHound](https://github.com/Mullassery/PyAgentHound) |
40
+ | Diagnose **RAG retrieval** failures | [PyVectorHound](https://github.com/Mullassery/PyVectorHound) |
41
+ | Orchestrate **local, dependency-aware tasks** (DAG scheduler + content-addressed cache) | [PyTaskWireCheck](https://github.com/Mullassery/PyTaskWireCheck) |
42
+
43
+ [Browse all projects →](https://github.com/Mullassery?tab=repositories)
44
+
22
45
  ## Why PyTaskWireCheck
23
46
 
24
47
  Most build tools want to own your project. PyTaskWireCheck does one job: it orchestrates
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "PyTaskWireCheck"
7
- version = "0.1.0"
7
+ version = "0.1.1"
8
8
  description = "Local-first, dependency-aware task orchestration engine (DAG scheduler + content-addressed cache + CLI)."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyTaskWireCheck
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: Local-first, dependency-aware task orchestration engine (DAG scheduler + content-addressed cache + CLI).
5
5
  Author: Georgi Mullassery
6
6
  License-Expression: MIT
@@ -59,6 +59,29 @@ or a single byte leaving your machine.
59
59
 
60
60
  ---
61
61
 
62
+ > **Not to be confused with the security tools in this family ([PyDeepMesh](https://github.com/Mullassery/PyDeepMesh), [PyDependencyCheck](https://github.com/Mullassery/PyDependencyCheck)):** despite the "Check" in its name, PyTaskWireCheck is a local task orchestrator, not a security scanner.
63
+
64
+ ## Which project do I need?
65
+
66
+ Part of the Mullassery open-source family. These tools have similar names — here is the short version of who does what:
67
+
68
+ | If you need to… | Use |
69
+ | --- | --- |
70
+ | Build a repository's dependency graph and match it against vulnerability advisories (Python, Rust, Node, containers) | [PyDeepMesh](https://github.com/Mullassery/PyDeepMesh) |
71
+ | Understand *why* a Python dependency exists, who added it, and whether it is actually used | [PyDependencyCheck](https://github.com/Mullassery/PyDependencyCheck) |
72
+ | Statically analyze a **dbt** project (risky tests, test blast radius, cost) | [PyDBTGuard](https://github.com/Mullassery/PyDBTGuard) |
73
+ | Statically analyze **Apache Beam / Dataflow** pipelines (cost, hot keys, reliability) | [PyBeamGuard](https://github.com/Mullassery/PyBeamGuard) |
74
+ | Validate **Airflow** DAGs and dbt runs | [PyAirflowTester](https://github.com/Mullassery/PyAirflowTester) |
75
+ | Simulate cascading-failure **blast radius** across infrastructure, data pipelines, and AI systems | [PyBlastRadius](https://github.com/Mullassery/PyBlastRadius) |
76
+ | Check the **quality of the data itself** at runtime (schema, drift, anomalies) | [StatGuardian](https://github.com/Mullassery/StatGuardian) |
77
+ | Discover **devices, services, and vulnerabilities on a network** | [PyNetworkIntel](https://github.com/Mullassery/PyNetworkIntel) |
78
+ | Discover and score **API security** risk (real traffic, agent/MCP, Cedar policy) | [PyAPICheck](https://github.com/Mullassery/PyAPICheck) |
79
+ | Trace and root-cause **AI agent** failures | [PyAgentHound](https://github.com/Mullassery/PyAgentHound) |
80
+ | Diagnose **RAG retrieval** failures | [PyVectorHound](https://github.com/Mullassery/PyVectorHound) |
81
+ | Orchestrate **local, dependency-aware tasks** (DAG scheduler + content-addressed cache) | [PyTaskWireCheck](https://github.com/Mullassery/PyTaskWireCheck) |
82
+
83
+ [Browse all projects →](https://github.com/Mullassery?tab=repositories)
84
+
62
85
  ## Why PyTaskWireCheck
63
86
 
64
87
  Most build tools want to own your project. PyTaskWireCheck does one job: it orchestrates
@@ -6,7 +6,7 @@ The public API is intentionally small: load a workflow, inspect its plan, and
6
6
  run it. See :mod:`pytaskwirecheck.api` for details.
7
7
  """
8
8
 
9
- __version__ = "0.1.0"
9
+ __version__ = "0.1.1"
10
10
 
11
11
  from pytaskwirecheck.api import ( # noqa: E402
12
12
  Workflow,
@@ -286,7 +286,7 @@ class CacheStore:
286
286
  if not task.cache_eligible:
287
287
  return {
288
288
  "eligible": False,
289
- "reason": "task declares no inputs or outputs",
289
+ "reason": "task declares no outputs",
290
290
  }
291
291
  fp = self.fingerprint(task, dependency_keys)
292
292
  entry = self._entries / fp.key
@@ -98,12 +98,14 @@ class TaskConfig:
98
98
  def cache_eligible(self) -> bool:
99
99
  """Whether the task may produce/consume cache entries.
100
100
 
101
- A task with no declared inputs and no declared outputs is treated as
102
- non-cacheable by default, because PyTaskWireCheck cannot know what it touches.
101
+ A task must declare at least one output to be cacheable. An
102
+ input-only task has nothing to store, so marking it eligible would
103
+ advertise a cache entry that :meth:`CacheStore.store` never writes
104
+ (PyTaskWireCheck cannot know what result to restore).
103
105
  """
104
106
  if not self.cache:
105
107
  return False
106
- return bool(self.inputs or self.outputs)
108
+ return bool(self.outputs)
107
109
 
108
110
 
109
111
  @dataclass(frozen=True)
File without changes