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.
Files changed (76) hide show
  1. {crapkit-0.5.1/src/crapkit.egg-info → crapkit-0.6.0}/PKG-INFO +6 -6
  2. {crapkit-0.5.1 → crapkit-0.6.0}/README.md +5 -5
  3. {crapkit-0.5.1 → crapkit-0.6.0}/pyproject.toml +1 -1
  4. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/__init__.py +1 -1
  5. crapkit-0.6.0/src/crapkit/mcp_server.py +1951 -0
  6. {crapkit-0.5.1 → crapkit-0.6.0/src/crapkit.egg-info}/PKG-INFO +6 -6
  7. crapkit-0.5.1/src/crapkit/mcp_server.py +0 -417
  8. {crapkit-0.5.1 → crapkit-0.6.0}/LICENSE +0 -0
  9. {crapkit-0.5.1 → crapkit-0.6.0}/setup.cfg +0 -0
  10. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/__main__.py +0 -0
  11. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/_pygdefer.py +0 -0
  12. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/analyze.py +0 -0
  13. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cache.py +0 -0
  14. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/churn.py +0 -0
  15. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/churn_cache.py +0 -0
  16. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/churn_log.py +0 -0
  17. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/__init__.py +0 -0
  18. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/_shared.py +0 -0
  19. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/admin.py +0 -0
  20. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/analyses.py +0 -0
  21. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/claude_hook.py +0 -0
  22. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/parser.py +0 -0
  23. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/queue.py +0 -0
  24. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/ratchet_cmds.py +0 -0
  25. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/reports.py +0 -0
  26. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/scoring.py +0 -0
  27. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/cli/verifying.py +0 -0
  28. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/config.py +0 -0
  29. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/coupling.py +0 -0
  30. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/coupling_cache.py +0 -0
  31. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/coverage_istanbul.py +0 -0
  32. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/coverage_py.py +0 -0
  33. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/covstream.py +0 -0
  34. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/diffparse.py +0 -0
  35. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/digest.py +0 -0
  36. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/discover.py +0 -0
  37. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/doctor.py +0 -0
  38. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/dup.py +0 -0
  39. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/errors.py +0 -0
  40. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/gitio.py +0 -0
  41. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/hook.py +0 -0
  42. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/invocation.py +0 -0
  43. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/junitparse.py +0 -0
  44. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/keys.py +0 -0
  45. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/lanes.py +0 -0
  46. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/lizardcognitive.py +0 -0
  47. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/lizardpowershell.py +0 -0
  48. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/lizardrust.py +0 -0
  49. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/lizardshell.py +0 -0
  50. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/merge.py +0 -0
  51. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/mutate.py +0 -0
  52. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/mutate_pool.py +0 -0
  53. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/override.py +0 -0
  54. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/packet.py +0 -0
  55. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/procs.py +0 -0
  56. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/ratchet.py +0 -0
  57. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/ratchet_report.py +0 -0
  58. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/report.py +0 -0
  59. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/repotext.py +0 -0
  60. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/rootfind.py +0 -0
  61. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/sarif.py +0 -0
  62. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/sarifio.py +0 -0
  63. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/scaffold.py +0 -0
  64. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/score.py +0 -0
  65. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/snapshot.py +0 -0
  66. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/store.py +0 -0
  67. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/uncovered.py +0 -0
  68. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/universe.py +0 -0
  69. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/verify.py +0 -0
  70. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/watch.py +0 -0
  71. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit/worklist.py +0 -0
  72. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit.egg-info/SOURCES.txt +0 -0
  73. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit.egg-info/dependency_links.txt +0 -0
  74. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit.egg-info/entry_points.txt +0 -0
  75. {crapkit-0.5.1 → crapkit-0.6.0}/src/crapkit.egg-info/requires.txt +0 -0
  76. {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.5.1
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.5.1
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.5.1
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.5.1
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.5.1
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 ten read-only tools. 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). |
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.5.1
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.5.1
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.5.1
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.5.1
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 ten read-only tools. 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). |
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.5.1"
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.5.1"
2
+ __version__ = "0.6.0"