deployproof 1.0.0__tar.gz → 1.0.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.
- {deployproof-1.0.0 → deployproof-1.0.1}/PKG-INFO +50 -4
- deployproof-1.0.0/src/deployproof.egg-info/PKG-INFO → deployproof-1.0.1/README.md +375 -360
- {deployproof-1.0.0 → deployproof-1.0.1}/pyproject.toml +2 -1
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof/__init__.py +1 -1
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof/mutator.py +38 -20
- deployproof-1.0.0/README.md → deployproof-1.0.1/src/deployproof.egg-info/PKG-INFO +406 -330
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof.egg-info/requires.txt +1 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/LICENSE +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/setup.cfg +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof/cli.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof/control_flow.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof/coverage_plugin.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof/dependencies.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof/diff.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof/mocks.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof/reporter.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof/secrets.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof/symlinks.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof/wsl.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof.egg-info/SOURCES.txt +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof.egg-info/dependency_links.txt +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof.egg-info/entry_points.txt +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/src/deployproof.egg-info/top_level.txt +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/tests/test_baseline_collection_error.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/tests/test_cli.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/tests/test_cli_dependency_scan.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/tests/test_control_flow.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/tests/test_dependencies_extractor.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/tests/test_dependencies_pypi.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/tests/test_diff.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/tests/test_edge_cases_validation.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/tests/test_import_graph_discovery.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/tests/test_mocks.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/tests/test_mutation_suites.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/tests/test_mutator.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/tests/test_secrets.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/tests/test_stress_regressions.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/tests/test_symlinks.py +0 -0
- {deployproof-1.0.0 → deployproof-1.0.1}/tests/test_wsl.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deployproof
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.1
|
|
4
4
|
Summary: A deterministic AI-code deployability checker that catches what coverage misses.
|
|
5
5
|
Author-email: SVS Praveen <svspraveens@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -26,6 +26,7 @@ Provides-Extra: dev
|
|
|
26
26
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
27
27
|
Requires-Dist: build>=1.0.0; extra == "dev"
|
|
28
28
|
Requires-Dist: twine>=4.0.0; extra == "dev"
|
|
29
|
+
Requires-Dist: coverage>=7.0.0; extra == "dev"
|
|
29
30
|
Dynamic: license-file
|
|
30
31
|
|
|
31
32
|
# DeployProof
|
|
@@ -89,9 +90,12 @@ deployproof check --full-repo --workers 8
|
|
|
89
90
|
| :--- | :--- | :--- | :--- |
|
|
90
91
|
| **`deployproof check`** | Git Diff (1–3 modified files) | **2 – 5 seconds** | Local pre-commit, active AI IDE coding loops, pre-push sanity checks. |
|
|
91
92
|
| **`deployproof check --workers 8`** | Large Multi-File Diff (100+ mutants) | **1 – 3 minutes** | Large feature branch reviews, refactors. |
|
|
92
|
-
| **`deployproof check --full-repo`** | Small Repo (< 100 mutants) | **30s – 2 minutes** |
|
|
93
|
-
| **`deployproof check --full-repo`** |
|
|
94
|
-
| **`deployproof check --full-repo`** |
|
|
93
|
+
| **`deployproof check --full-repo`** | Small Repo (< 100 mutants, sequential) | **30s – 2 minutes** | Single-core / lightweight auditing. |
|
|
94
|
+
| **`deployproof check --full-repo --workers 8`** | Small Repo (< 100 mutants, 8 workers) | **15 – 30 seconds** | Rapid full baseline verification. |
|
|
95
|
+
| **`deployproof check --full-repo`** | Medium Repo (200–500 mutants, sequential) | **15 – 35 minutes** | Unconstrained single-thread verification. |
|
|
96
|
+
| **`deployproof check --full-repo --workers 8`** | Medium Repo (200–500 mutants, 8 workers) | **3 – 7 minutes** | Release validation, pre-tag quality gates. |
|
|
97
|
+
| **`deployproof check --full-repo`** | Heavy / Network Lib (`requests`, 800 mutants) | **60 – 85 minutes** | Deep overnight / weekly sweep. |
|
|
98
|
+
| **`deployproof check --full-repo --workers 8`** | Heavy / Network Lib (`requests`, 800 mutants) | **12 – 18 minutes** | High-throughput multi-core CI release builds. |
|
|
95
99
|
|
|
96
100
|
### Parallel Multi-Worker Sandboxing (`--workers N`)
|
|
97
101
|
|
|
@@ -119,6 +123,48 @@ deployproof check --full-repo --workers 8
|
|
|
119
123
|
* **Disk Space & I/O Overhead**: Running $N$ workers copies the repository snapshot $N$ times into temporary storage ($N \times \text{repo size}$ in `tempfile.gettempdir()`). On disk-constrained environments, use fewer workers (e.g. `--workers 2` or `--workers 4`).
|
|
120
124
|
* **Subprocess / Port Collisions**: If your test suite binds to fixed network ports (e.g. localhost:8080) without dynamic port selection, parallel workers running tests concurrently may trigger port conflicts. Use isolated ports or run sequentially in such environments.
|
|
121
125
|
|
|
126
|
+
#### Hardware & Memory Sizing Architecture (RAM & CPU Optimization):
|
|
127
|
+
|
|
128
|
+
DeployProof's parallel sandboxing engine scales throughput directly with **available physical RAM** and **logical CPU cores**. Because test execution is CPU-bound and sandbox file I/O is memory-bound, hardware capacity dictates performance:
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
Total Memory Required ≈ Base OS Overhead (~2 GB) + [ N_workers × (Worker Process RSS + OS Page Cache Footprint) ]
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
##### 1. Why More RAM Directly Maximizes Verification Speed:
|
|
135
|
+
* **Zero-Latency In-Memory OS Page Cache**: When physical RAM comfortably exceeds the aggregate working set of all $N$ workers, the operating system holds all sandbox file trees, compiled `.pyc` modules, and pytest test fixtures directly in the **RAM page cache**. File mutations and test imports achieve sub-millisecond execution with zero physical NVMe/SSD read/write contention.
|
|
136
|
+
* **Elimination of Page-Fault Swapping**: If total RAM is insufficient for the requested `--workers N`, the OS kernel is forced to page memory to disk (`pagefile.sys` on Windows or swap partitions on Linux). Page thrashing introduces severe disk queue latency that can degrade multi-process test throughput by 5× to 10×. Higher RAM guarantees that all workers remain 100% compute-active in physical memory.
|
|
137
|
+
|
|
138
|
+
##### 2. Per-Worker Memory Consumption Profile:
|
|
139
|
+
* **Python Runtime & AST Engine**: ~35 MB RSS per worker.
|
|
140
|
+
* **Pytest Test Suite & Dependencies**: ~50 MB to 150 MB RSS per worker (depending on framework imports like FastAPI, Django, SQLAlchemy, or Requests).
|
|
141
|
+
* **Sandbox Working Directory Snapshot**: ~15 MB to 50 MB in OS file cache per worker.
|
|
142
|
+
* **Total Allocation per Worker Process**: **~100 MB to 250 MB RAM per worker**.
|
|
143
|
+
|
|
144
|
+
##### 3. Hardware Sizing & Safe Allocation Matrix:
|
|
145
|
+
|
|
146
|
+
| Installed System RAM | Recommended Worker Flag | Memory Consumed by DeployProof | System Headroom Remaining | Intended Verification Profile |
|
|
147
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
148
|
+
| **2 GB – 4 GB** | `deployproof check` *(Sequential)* | ~120 MB total | High (~2.5 GB free) | Ultra-lightweight diff checks; single-core laptops. |
|
|
149
|
+
| **8 GB** | `--workers 4` | ~0.8 GB – 1.0 GB | Safe (~5.5 GB free) | Standard local feature branches and medium diffs. |
|
|
150
|
+
| **16 GB** | **`--workers 8` to `--workers 16`** | **~1.6 GB – 3.2 GB** | **Abundant (~12.8 GB free)** | **Full CPU core saturation; rapid multi-file diffs & full-repo sweeps.** |
|
|
151
|
+
| **32 GB+** | `--workers 16` to `--workers 32` | ~3.5 GB – 6.5 GB | Enterprise headroom | Heavy monorepos, multi-thousand mutant CI sweeps. |
|
|
152
|
+
|
|
153
|
+
##### 4. Diff Scoped vs Full Repo Memory Comparison:
|
|
154
|
+
|
|
155
|
+
| Metric | Git Diff (`deployproof check --workers 8`) | Full Repo (`deployproof check --full-repo --workers 8`) | Technical Rationale |
|
|
156
|
+
| :--- | :--- | :--- | :--- |
|
|
157
|
+
| **Concurrent OS Processes** | 8 worker processes | 8 worker processes | **Identical** — `ProcessPoolExecutor` only executes $N$ workers concurrently. |
|
|
158
|
+
| **Worker Process RSS** | ~80 MB – 120 MB per process | ~120 MB – 180 MB per process | **Slightly higher** — Full repo sweeps import broader test suites and transitive frameworks into Python's `sys.modules`. |
|
|
159
|
+
| **Sandbox Snapshot Cache** | ~15 MB per sandbox | ~30 MB – 60 MB per sandbox | **Higher** — Full repo snapshots clone all tracked repo files into temporary directories. |
|
|
160
|
+
| **Total Memory with 8 Workers** | **~1.0 GB – 1.4 GB** | **~1.6 GB – 2.2 GB** | Modest increase; easily accommodated by standard 8 GB/16 GB machines. |
|
|
161
|
+
| **Total Memory with 16 Workers** | **~1.8 GB – 2.5 GB** | **~3.0 GB – 3.8 GB** | Complete 16-core saturation while leaving 12+ GB RAM free on 16 GB systems. |
|
|
162
|
+
|
|
163
|
+
##### 5. Minimum vs Recommended System Requirements:
|
|
164
|
+
* **Absolute Minimum System RAM**: **2 GB** (for default sequential diff-scoped `deployproof check`).
|
|
165
|
+
* **Minimum System RAM for Multi-Worker Mode (`--workers 4`)**: **4 GB**.
|
|
166
|
+
* **Recommended System RAM for Max-Throughput Parallel Mode (`--workers 8` or `16`)**: **16 GB** (provides sufficient headroom to keep 8 to 16 Python subprocesses and their entire sandboxes resident in physical memory).
|
|
167
|
+
|
|
122
168
|
Output includes a section for each check — symlink scan, secrets scan, dependency scan, mock detection, control flow analysis, and mutation score — with a pass/fail line at the bottom.
|
|
123
169
|
|
|
124
170
|
### Exit Codes:
|