crapkit 0.5.1__tar.gz → 0.6.0__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.
- {crapkit-0.5.1/src/crapkit.egg-info → crapkit-0.6.0}/PKG-INFO +6 -6
- {crapkit-0.5.1 → crapkit-0.6.0}/README.md +5 -5
- {crapkit-0.5.1 → crapkit-0.6.0}/pyproject.toml +1 -1
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/__init__.py +1 -1
- crapkit-0.6.0/src/crapkit/mcp_server.py +1951 -0
- {crapkit-0.5.1 → crapkit-0.6.0/src/crapkit.egg-info}/PKG-INFO +6 -6
- crapkit-0.5.1/src/crapkit/mcp_server.py +0 -417
- {crapkit-0.5.1 → crapkit-0.6.0}/LICENSE +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/setup.cfg +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/__main__.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/_pygdefer.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/analyze.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cache.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/churn.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/churn_cache.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/churn_log.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/__init__.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/_shared.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/admin.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/analyses.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/claude_hook.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/parser.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/queue.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/ratchet_cmds.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/reports.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/scoring.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/verifying.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/config.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/coupling.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/coupling_cache.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/coverage_istanbul.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/coverage_py.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/covstream.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/diffparse.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/digest.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/discover.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/doctor.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/dup.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/errors.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/gitio.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/hook.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/invocation.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/junitparse.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/keys.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/lanes.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/lizardcognitive.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/lizardpowershell.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/lizardrust.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/lizardshell.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/merge.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/mutate.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/mutate_pool.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/override.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/packet.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/procs.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/ratchet.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/ratchet_report.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/report.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/repotext.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/rootfind.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/sarif.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/sarifio.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/scaffold.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/score.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/snapshot.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/store.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/uncovered.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/universe.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/verify.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/watch.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/worklist.py +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit.egg-info/SOURCES.txt +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit.egg-info/dependency_links.txt +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit.egg-info/entry_points.txt +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit.egg-info/requires.txt +0 -0
- {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crapkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
4
4
|
Summary: Scores every function on complexity times uncovered risk, ranks the worst, and blocks commits that add more.
|
|
5
5
|
Author: Jean-Francois Gagne
|
|
6
6
|
License: MIT
|
|
@@ -181,7 +181,7 @@ leaves the box
|
|
|
181
181
|
|
|
182
182
|
```
|
|
183
183
|
$ crapkit --version
|
|
184
|
-
crapkit 0.
|
|
184
|
+
crapkit 0.6.0
|
|
185
185
|
```
|
|
186
186
|
|
|
187
187
|
`python -m crapkit` works identically to the console script and is what to use from a
|
|
@@ -425,7 +425,7 @@ crapkit ships a `.pre-commit-hooks.yaml` declaring `id: crapkit-gate`. In your
|
|
|
425
425
|
repos:
|
|
426
426
|
- repo: https://github.com/JeanFrancoisGagne/crapkit
|
|
427
427
|
# crapkit's release step rewrites this line to the tag it just cut
|
|
428
|
-
rev: v0.
|
|
428
|
+
rev: v0.6.0
|
|
429
429
|
hooks:
|
|
430
430
|
- id: crapkit-gate
|
|
431
431
|
```
|
|
@@ -533,7 +533,7 @@ to a workflow, and every input has a default:
|
|
|
533
533
|
- uses: actions/checkout@v4
|
|
534
534
|
with:
|
|
535
535
|
fetch-depth: 0
|
|
536
|
-
- uses: JeanFrancoisGagne/crapkit@v0.
|
|
536
|
+
- uses: JeanFrancoisGagne/crapkit@v0.6.0
|
|
537
537
|
```
|
|
538
538
|
|
|
539
539
|
The whole job those four lines sit in:
|
|
@@ -553,7 +553,7 @@ jobs:
|
|
|
553
553
|
with:
|
|
554
554
|
python-version: "3.12" # the interpreter the install below lands in
|
|
555
555
|
- run: pip install -e ".[dev]" # whatever your lanes need to run
|
|
556
|
-
- uses: JeanFrancoisGagne/crapkit@v0.
|
|
556
|
+
- uses: JeanFrancoisGagne/crapkit@v0.6.0
|
|
557
557
|
with:
|
|
558
558
|
gate: "false"
|
|
559
559
|
```
|
|
@@ -775,7 +775,7 @@ crapkit: error: argument command: invalid choice: '/path/to/repo' (choose from '
|
|
|
775
775
|
| `claude-hook [--protocol N]` | Reads one Claude Code PostToolUse payload from stdin and judges the file it edited: ccn against the scope ceiling, on functions the edit changed, minus functions a ratchet mark already covers. Advisory only: the edit has landed, and `hook-precommit` stays the enforcement point. Exit 2 and an advisory on stderr is the only thing it ever says, one block per judged file (a head line, one line per breaching function, a closing line): no `crapkit.toml` above the edited file, an unscoped file, mid-rebase or mid-merge, a `--protocol` other than 1, source that parses to no functions, or any internal failure all exit 0 in silence. The root is the first `crapkit.toml` above the edited file; the walk stops at a `.git` entry, so a worktree never borrows its parent's config. A `Bash` event names no file, so it judges the working tree instead: the dirty or untracked `*.py` files touched in the last 12 seconds, 25 at most, each through the same ladder, and silence for a clean tree or a cwd outside any repo. That half fires only where you register a `Bash` matcher ([The Claude Code plugin](#the-claude-code-plugin)). It opens no snapshot and writes nothing. |
|
|
776
776
|
| `watch [--interval SECONDS] [--cycles N]` | Rescores tracked files as they change (mtime polling, default 2s, subprocess-isolated so a half-saved syntax error never kills the watcher). `--cycles N` polls exactly N times and exits 0; without it the loop runs until ctrl-c. |
|
|
777
777
|
| `help [TOPIC]` | The help git, npm and docker answer to. With no TOPIC it prints the command list; with one it prints that subcommand's own help, the same page as `crapkit TOPIC --help`. A TOPIC that names no subcommand exits 3. |
|
|
778
|
-
| `mcp` | A dependency-free stdio MCP server (newline JSON-RPC 2.0) exposing
|
|
778
|
+
| `mcp` | A dependency-free stdio MCP server (newline JSON-RPC 2.0) exposing twelve read-only tools named `verb_noun`, each with a title and a documented output schema. Every tool shells to the CLI's own `--json` surface, so the MCP view cannot drift from what the CLI reports. Answering from a kept in-process store was benchmarked and rejected: a packet's `source` would go stale behind the edit it describes. See [docs/agent-json.md](https://github.com/JeanFrancoisGagne/crapkit/blob/main/docs/agent-json.md#mcp-server). |
|
|
779
779
|
|
|
780
780
|
## Reading the output
|
|
781
781
|
|
|
@@ -142,7 +142,7 @@ leaves the box
|
|
|
142
142
|
|
|
143
143
|
```
|
|
144
144
|
$ crapkit --version
|
|
145
|
-
crapkit 0.
|
|
145
|
+
crapkit 0.6.0
|
|
146
146
|
```
|
|
147
147
|
|
|
148
148
|
`python -m crapkit` works identically to the console script and is what to use from a
|
|
@@ -386,7 +386,7 @@ crapkit ships a `.pre-commit-hooks.yaml` declaring `id: crapkit-gate`. In your
|
|
|
386
386
|
repos:
|
|
387
387
|
- repo: https://github.com/JeanFrancoisGagne/crapkit
|
|
388
388
|
# crapkit's release step rewrites this line to the tag it just cut
|
|
389
|
-
rev: v0.
|
|
389
|
+
rev: v0.6.0
|
|
390
390
|
hooks:
|
|
391
391
|
- id: crapkit-gate
|
|
392
392
|
```
|
|
@@ -494,7 +494,7 @@ to a workflow, and every input has a default:
|
|
|
494
494
|
- uses: actions/checkout@v4
|
|
495
495
|
with:
|
|
496
496
|
fetch-depth: 0
|
|
497
|
-
- uses: JeanFrancoisGagne/crapkit@v0.
|
|
497
|
+
- uses: JeanFrancoisGagne/crapkit@v0.6.0
|
|
498
498
|
```
|
|
499
499
|
|
|
500
500
|
The whole job those four lines sit in:
|
|
@@ -514,7 +514,7 @@ jobs:
|
|
|
514
514
|
with:
|
|
515
515
|
python-version: "3.12" # the interpreter the install below lands in
|
|
516
516
|
- run: pip install -e ".[dev]" # whatever your lanes need to run
|
|
517
|
-
- uses: JeanFrancoisGagne/crapkit@v0.
|
|
517
|
+
- uses: JeanFrancoisGagne/crapkit@v0.6.0
|
|
518
518
|
with:
|
|
519
519
|
gate: "false"
|
|
520
520
|
```
|
|
@@ -736,7 +736,7 @@ crapkit: error: argument command: invalid choice: '/path/to/repo' (choose from '
|
|
|
736
736
|
| `claude-hook [--protocol N]` | Reads one Claude Code PostToolUse payload from stdin and judges the file it edited: ccn against the scope ceiling, on functions the edit changed, minus functions a ratchet mark already covers. Advisory only: the edit has landed, and `hook-precommit` stays the enforcement point. Exit 2 and an advisory on stderr is the only thing it ever says, one block per judged file (a head line, one line per breaching function, a closing line): no `crapkit.toml` above the edited file, an unscoped file, mid-rebase or mid-merge, a `--protocol` other than 1, source that parses to no functions, or any internal failure all exit 0 in silence. The root is the first `crapkit.toml` above the edited file; the walk stops at a `.git` entry, so a worktree never borrows its parent's config. A `Bash` event names no file, so it judges the working tree instead: the dirty or untracked `*.py` files touched in the last 12 seconds, 25 at most, each through the same ladder, and silence for a clean tree or a cwd outside any repo. That half fires only where you register a `Bash` matcher ([The Claude Code plugin](#the-claude-code-plugin)). It opens no snapshot and writes nothing. |
|
|
737
737
|
| `watch [--interval SECONDS] [--cycles N]` | Rescores tracked files as they change (mtime polling, default 2s, subprocess-isolated so a half-saved syntax error never kills the watcher). `--cycles N` polls exactly N times and exits 0; without it the loop runs until ctrl-c. |
|
|
738
738
|
| `help [TOPIC]` | The help git, npm and docker answer to. With no TOPIC it prints the command list; with one it prints that subcommand's own help, the same page as `crapkit TOPIC --help`. A TOPIC that names no subcommand exits 3. |
|
|
739
|
-
| `mcp` | A dependency-free stdio MCP server (newline JSON-RPC 2.0) exposing
|
|
739
|
+
| `mcp` | A dependency-free stdio MCP server (newline JSON-RPC 2.0) exposing twelve read-only tools named `verb_noun`, each with a title and a documented output schema. Every tool shells to the CLI's own `--json` surface, so the MCP view cannot drift from what the CLI reports. Answering from a kept in-process store was benchmarked and rejected: a packet's `source` would go stale behind the edit it describes. See [docs/agent-json.md](https://github.com/JeanFrancoisGagne/crapkit/blob/main/docs/agent-json.md#mcp-server). |
|
|
740
740
|
|
|
741
741
|
## Reading the output
|
|
742
742
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "crapkit"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.6.0"
|
|
8
8
|
description = "Scores every function on complexity times uncovered risk, ranks the worst, and blocks commits that add more."
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""crapkit: deterministic CRAP-score framework."""
|
|
2
|
-
__version__ = "0.
|
|
2
|
+
__version__ = "0.6.0"
|