wup 0.2.76__tar.gz → 0.2.77__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 (87) hide show
  1. {wup-0.2.76/wup.egg-info → wup-0.2.77}/PKG-INFO +6 -6
  2. {wup-0.2.76 → wup-0.2.77}/README.md +5 -5
  3. {wup-0.2.76 → wup-0.2.77}/pyproject.toml +1 -1
  4. {wup-0.2.76 → wup-0.2.77}/tests/test_multi_project.py +9 -0
  5. {wup-0.2.76 → wup-0.2.77}/wup/__init__.py +1 -1
  6. {wup-0.2.76 → wup-0.2.77}/wup/config.py +2 -1
  7. {wup-0.2.76 → wup-0.2.77/wup.egg-info}/PKG-INFO +6 -6
  8. {wup-0.2.76 → wup-0.2.77}/LICENSE +0 -0
  9. {wup-0.2.76 → wup-0.2.77}/setup.cfg +0 -0
  10. {wup-0.2.76 → wup-0.2.77}/tests/test_aql.py +0 -0
  11. {wup-0.2.76 → wup-0.2.77}/tests/test_assistant.py +0 -0
  12. {wup-0.2.76 → wup-0.2.77}/tests/test_auto_detection.py +0 -0
  13. {wup-0.2.76 → wup-0.2.77}/tests/test_cli_bridge.py +0 -0
  14. {wup-0.2.76 → wup-0.2.77}/tests/test_cli_filtering.py +0 -0
  15. {wup-0.2.76 → wup-0.2.77}/tests/test_control.py +0 -0
  16. {wup-0.2.76 → wup-0.2.77}/tests/test_discovery_adapters.py +0 -0
  17. {wup-0.2.76 → wup-0.2.77}/tests/test_e2e.py +0 -0
  18. {wup-0.2.76 → wup-0.2.77}/tests/test_endpoints_init_cli.py +0 -0
  19. {wup-0.2.76 → wup-0.2.77}/tests/test_genericity.py +0 -0
  20. {wup-0.2.76 → wup-0.2.77}/tests/test_health_summary_passed.py +0 -0
  21. {wup-0.2.76 → wup-0.2.77}/tests/test_monitoring_manifest.py +0 -0
  22. {wup-0.2.76 → wup-0.2.77}/tests/test_oql.py +0 -0
  23. {wup-0.2.76 → wup-0.2.77}/tests/test_planfile_reporter_dedupe.py +0 -0
  24. {wup-0.2.76 → wup-0.2.77}/tests/test_probe_mutex.py +0 -0
  25. {wup-0.2.76 → wup-0.2.77}/tests/test_service_inference.py +0 -0
  26. {wup-0.2.76 → wup-0.2.77}/tests/test_status_data.py +0 -0
  27. {wup-0.2.76 → wup-0.2.77}/tests/test_sync.py +0 -0
  28. {wup-0.2.76 → wup-0.2.77}/tests/test_testql_monitor.py +0 -0
  29. {wup-0.2.76 → wup-0.2.77}/tests/test_testql_watcher.py +0 -0
  30. {wup-0.2.76 → wup-0.2.77}/tests/test_visual_diff_periodic_skip.py +0 -0
  31. {wup-0.2.76 → wup-0.2.77}/tests/test_visual_diff_progress.py +0 -0
  32. {wup-0.2.76 → wup-0.2.77}/tests/test_watch_exclude.py +0 -0
  33. {wup-0.2.76 → wup-0.2.77}/tests/test_watch_no_paths_exit.py +0 -0
  34. {wup-0.2.76 → wup-0.2.77}/tests/test_web_client.py +0 -0
  35. {wup-0.2.76 → wup-0.2.77}/tests/test_wup.py +0 -0
  36. {wup-0.2.76 → wup-0.2.77}/tests/test_wup_generate.py +0 -0
  37. {wup-0.2.76 → wup-0.2.77}/wup/_ast_detector.py +0 -0
  38. {wup-0.2.76 → wup-0.2.77}/wup/_base_detector.py +0 -0
  39. {wup-0.2.76 → wup-0.2.77}/wup/_hash_detector.py +0 -0
  40. {wup-0.2.76 → wup-0.2.77}/wup/_yaml_detector.py +0 -0
  41. {wup-0.2.76 → wup-0.2.77}/wup/anomaly_detector.py +0 -0
  42. {wup-0.2.76 → wup-0.2.77}/wup/anomaly_models.py +0 -0
  43. {wup-0.2.76 → wup-0.2.77}/wup/aql.py +0 -0
  44. {wup-0.2.76 → wup-0.2.77}/wup/assistant.py +0 -0
  45. {wup-0.2.76 → wup-0.2.77}/wup/assistant_discovery.py +0 -0
  46. {wup-0.2.76 → wup-0.2.77}/wup/assistant_validator.py +0 -0
  47. {wup-0.2.76 → wup-0.2.77}/wup/bus.py +0 -0
  48. {wup-0.2.76 → wup-0.2.77}/wup/cli.py +0 -0
  49. {wup-0.2.76 → wup-0.2.77}/wup/cli_bridge.py +0 -0
  50. {wup-0.2.76 → wup-0.2.77}/wup/cli_config_generator.py +0 -0
  51. {wup-0.2.76 → wup-0.2.77}/wup/cli_scanner.py +0 -0
  52. {wup-0.2.76 → wup-0.2.77}/wup/control.py +0 -0
  53. {wup-0.2.76 → wup-0.2.77}/wup/core.py +0 -0
  54. {wup-0.2.76 → wup-0.2.77}/wup/dependency_mapper.py +0 -0
  55. {wup-0.2.76 → wup-0.2.77}/wup/discovery.py +0 -0
  56. {wup-0.2.76 → wup-0.2.77}/wup/endpoints.py +0 -0
  57. {wup-0.2.76 → wup-0.2.77}/wup/event_store.py +0 -0
  58. {wup-0.2.76 → wup-0.2.77}/wup/file_watcher/events/file_events.py +0 -0
  59. {wup-0.2.76 → wup-0.2.77}/wup/generate.py +0 -0
  60. {wup-0.2.76 → wup-0.2.77}/wup/init_cli.py +0 -0
  61. {wup-0.2.76 → wup-0.2.77}/wup/models/__init__.py +0 -0
  62. {wup-0.2.76 → wup-0.2.77}/wup/models/config.py +0 -0
  63. {wup-0.2.76 → wup-0.2.77}/wup/models/target.py +0 -0
  64. {wup-0.2.76 → wup-0.2.77}/wup/monitoring_manifest.py +0 -0
  65. {wup-0.2.76 → wup-0.2.77}/wup/multi.py +0 -0
  66. {wup-0.2.76 → wup-0.2.77}/wup/oql.py +0 -0
  67. {wup-0.2.76 → wup-0.2.77}/wup/paths.py +0 -0
  68. {wup-0.2.76 → wup-0.2.77}/wup/planfile_reporter.py +0 -0
  69. {wup-0.2.76 → wup-0.2.77}/wup/status_data.py +0 -0
  70. {wup-0.2.76 → wup-0.2.77}/wup/sync.py +0 -0
  71. {wup-0.2.76 → wup-0.2.77}/wup/testing/events/health_events.py +0 -0
  72. {wup-0.2.76 → wup-0.2.77}/wup/testing/events/test_results.py +0 -0
  73. {wup-0.2.76 → wup-0.2.77}/wup/testing/handlers/event_handlers.py +0 -0
  74. {wup-0.2.76 → wup-0.2.77}/wup/testing/handlers/health_handlers.py +0 -0
  75. {wup-0.2.76 → wup-0.2.77}/wup/testing/queries/health_queries.py +0 -0
  76. {wup-0.2.76 → wup-0.2.77}/wup/testql_cli_generator.py +0 -0
  77. {wup-0.2.76 → wup-0.2.77}/wup/testql_discovery.py +0 -0
  78. {wup-0.2.76 → wup-0.2.77}/wup/testql_monitor.py +0 -0
  79. {wup-0.2.76 → wup-0.2.77}/wup/testql_watcher.py +0 -0
  80. {wup-0.2.76 → wup-0.2.77}/wup/validate.py +0 -0
  81. {wup-0.2.76 → wup-0.2.77}/wup/visual_diff.py +0 -0
  82. {wup-0.2.76 → wup-0.2.77}/wup/web_client.py +0 -0
  83. {wup-0.2.76 → wup-0.2.77}/wup.egg-info/SOURCES.txt +0 -0
  84. {wup-0.2.76 → wup-0.2.77}/wup.egg-info/dependency_links.txt +0 -0
  85. {wup-0.2.76 → wup-0.2.77}/wup.egg-info/entry_points.txt +0 -0
  86. {wup-0.2.76 → wup-0.2.77}/wup.egg-info/requires.txt +0 -0
  87. {wup-0.2.76 → wup-0.2.77}/wup.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wup
3
- Version: 0.2.76
3
+ Version: 0.2.77
4
4
  Summary: WUP (What's Up) - Intelligent file watcher for regression testing in large projects
5
5
  Author-email: Tom Sapletta <tom@sapletta.com>
6
6
  License-Expression: Apache-2.0
@@ -42,17 +42,17 @@ Dynamic: license-file
42
42
 
43
43
  ## AI Cost Tracking
44
44
 
45
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.2.76-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
46
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$6.77-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-53.0h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
45
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.2.77-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
46
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$6.76-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-53.0h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
47
47
 
48
- - 🤖 **LLM usage:** $6.7652 (105 commits)
49
- - 👤 **Human dev:** ~$5295 (53.0h @ $100/h, 30min dedup)
48
+ - 🤖 **LLM usage:** $6.7608 (106 commits)
49
+ - 👤 **Human dev:** ~$5301 (53.0h @ $100/h, 30min dedup)
50
50
 
51
51
  Generated on 2026-07-17 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
52
52
 
53
53
  ---
54
54
 
55
- ![PyPI](https://img.shields.io/badge/pypi-wup-blue) ![Version](https://img.shields.io/badge/version-0.2.76-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
55
+ ![PyPI](https://img.shields.io/badge/pypi-wup-blue) ![Version](https://img.shields.io/badge/version-0.2.77-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
56
56
 
57
57
  **WUP (What's Up)** - Intelligent file watcher for regression testing in large projects.
58
58
 
@@ -3,17 +3,17 @@
3
3
 
4
4
  ## AI Cost Tracking
5
5
 
6
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.2.76-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
7
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$6.77-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-53.0h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
6
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.2.77-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
7
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$6.76-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-53.0h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
8
8
 
9
- - 🤖 **LLM usage:** $6.7652 (105 commits)
10
- - 👤 **Human dev:** ~$5295 (53.0h @ $100/h, 30min dedup)
9
+ - 🤖 **LLM usage:** $6.7608 (106 commits)
10
+ - 👤 **Human dev:** ~$5301 (53.0h @ $100/h, 30min dedup)
11
11
 
12
12
  Generated on 2026-07-17 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
13
13
 
14
14
  ---
15
15
 
16
- ![PyPI](https://img.shields.io/badge/pypi-wup-blue) ![Version](https://img.shields.io/badge/version-0.2.76-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
16
+ ![PyPI](https://img.shields.io/badge/pypi-wup-blue) ![Version](https://img.shields.io/badge/version-0.2.77-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
17
17
 
18
18
  **WUP (What's Up)** - Intelligent file watcher for regression testing in large projects.
19
19
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "wup"
7
- version = "0.2.76"
7
+ version = "0.2.77"
8
8
  description = "WUP (What's Up) - Intelligent file watcher for regression testing in large projects"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -48,6 +48,15 @@ def test_detect_watch_paths_falls_back_when_nothing_matches(tmp_path: Path) -> N
48
48
  assert detect_watch_paths(tmp_path) == ["app/**", "src/**", "routes/**"]
49
49
 
50
50
 
51
+ def test_detect_watch_paths_backend_frontend(tmp_path: Path) -> None:
52
+ # c2004-style module layout (backend/ + frontend/, no app/src).
53
+ (tmp_path / "backend").mkdir()
54
+ (tmp_path / "frontend").mkdir()
55
+ paths = detect_watch_paths(tmp_path)
56
+ assert "backend/**" in paths and "frontend/**" in paths
57
+ assert "app/**" not in paths
58
+
59
+
51
60
  def test_default_config_watches_only_real_dirs(tmp_path: Path) -> None:
52
61
  (tmp_path / "services").mkdir()
53
62
  cfg = get_default_config(tmp_path)
@@ -7,7 +7,7 @@ WUP monitors file changes and runs intelligent regression tests using a 3-layer
7
7
  3. Detail Layer: Full tests with blame reports (only on failure)
8
8
  """
9
9
 
10
- __version__ = "0.2.76"
10
+ __version__ = "0.2.77"
11
11
  __author__ = "Tom Sapletta"
12
12
 
13
13
  from .config import load_config, save_config, get_default_config
@@ -397,7 +397,8 @@ def validate_config(raw: dict) -> WupConfig:
397
397
  # for an auto-generated config. Only directories that actually exist are kept,
398
398
  # so the generated wup.yaml doesn't point at paths that were never there.
399
399
  _DEFAULT_SOURCE_DIRS = [
400
- "app", "src", "routes", "services", "lib", "packages", "pkg", "internal", "cmd",
400
+ "app", "src", "routes", "services", "backend", "frontend",
401
+ "lib", "packages", "pkg", "internal", "cmd",
401
402
  ]
402
403
 
403
404
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wup
3
- Version: 0.2.76
3
+ Version: 0.2.77
4
4
  Summary: WUP (What's Up) - Intelligent file watcher for regression testing in large projects
5
5
  Author-email: Tom Sapletta <tom@sapletta.com>
6
6
  License-Expression: Apache-2.0
@@ -42,17 +42,17 @@ Dynamic: license-file
42
42
 
43
43
  ## AI Cost Tracking
44
44
 
45
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.2.76-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
46
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$6.77-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-53.0h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
45
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.2.77-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
46
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$6.76-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-53.0h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
47
47
 
48
- - 🤖 **LLM usage:** $6.7652 (105 commits)
49
- - 👤 **Human dev:** ~$5295 (53.0h @ $100/h, 30min dedup)
48
+ - 🤖 **LLM usage:** $6.7608 (106 commits)
49
+ - 👤 **Human dev:** ~$5301 (53.0h @ $100/h, 30min dedup)
50
50
 
51
51
  Generated on 2026-07-17 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
52
52
 
53
53
  ---
54
54
 
55
- ![PyPI](https://img.shields.io/badge/pypi-wup-blue) ![Version](https://img.shields.io/badge/version-0.2.76-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
55
+ ![PyPI](https://img.shields.io/badge/pypi-wup-blue) ![Version](https://img.shields.io/badge/version-0.2.77-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
56
56
 
57
57
  **WUP (What's Up)** - Intelligent file watcher for regression testing in large projects.
58
58
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes