hypergumbo 9.0.0__tar.gz → 9.2.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.
@@ -15,6 +15,7 @@ build/
15
15
 
16
16
  # hypergumbo
17
17
  .hypergumbo/
18
+ .hypergumbo-examples/
18
19
  hypergumbo_capsule/
19
20
  hypergumbo.results.json
20
21
  hypergumbo.results.*.json
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: hypergumbo
3
- Version: 9.0.0
3
+ Version: 9.2.0
4
4
  Summary: Local-first repo behavior map generator
5
5
  Author: Hypergumbo contributors
6
6
  License: AGPL-3.0-or-later
@@ -10,10 +10,10 @@ Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or l
10
10
  Classifier: Programming Language :: Python :: 3
11
11
  Classifier: Programming Language :: Python :: 3 :: Only
12
12
  Requires-Python: >=3.10
13
- Requires-Dist: hypergumbo-core==9.0.0
14
- Requires-Dist: hypergumbo-lang-common==9.0.0
15
- Requires-Dist: hypergumbo-lang-extended1==9.0.0
16
- Requires-Dist: hypergumbo-lang-mainstream==9.0.0
13
+ Requires-Dist: hypergumbo-core==9.2.0
14
+ Requires-Dist: hypergumbo-lang-common==9.2.0
15
+ Requires-Dist: hypergumbo-lang-extended1==9.2.0
16
+ Requires-Dist: hypergumbo-lang-mainstream==9.2.0
17
17
  Provides-Extra: dev
18
18
  Requires-Dist: bandit~=1.9.3; extra == 'dev'
19
19
  Requires-Dist: check-jsonschema~=0.36.1; extra == 'dev'
@@ -27,9 +27,9 @@ Requires-Dist: yamllint~=1.38.0; extra == 'dev'
27
27
  Provides-Extra: embeddings
28
28
  Requires-Dist: sentence-transformers~=5.7; extra == 'embeddings'
29
29
  Provides-Extra: rust-analyzer
30
- Requires-Dist: hypergumbo-lang-rust-analyzer==9.0.0; extra == 'rust-analyzer'
30
+ Requires-Dist: hypergumbo-lang-rust-analyzer==9.2.0; extra == 'rust-analyzer'
31
31
  Provides-Extra: scip-python
32
- Requires-Dist: hypergumbo-lang-scip-python==9.0.0; extra == 'scip-python'
32
+ Requires-Dist: hypergumbo-lang-scip-python==9.2.0; extra == 'scip-python'
33
33
  Description-Content-Type: text/markdown
34
34
 
35
35
  <!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
@@ -153,7 +153,7 @@ Read this before installing hypergumbo on a machine you care about. Each stateme
153
153
  **What a default run does** (`hypergumbo .`, the same as `hypergumbo sketch .`):
154
154
 
155
155
  - Reads the files of the repository you point it at.
156
- - Writes its results under `~/.cache/hypergumbo/` (`$XDG_CACHE_HOME/hypergumbo/` if set), plus short-lived files in the system temp directory. It does not write into the repository it analyses ([ADR-0047](https://github.com/iterabloom/hypergumbo/blob/dev/docs/adr/0047-catalogue-scope-and-user-visible-homes.md) ruling 9). The exceptions are an `-o` path you choose inside it, and the case in the last bullet of this list.
156
+ - Writes its results under `~/.cache/hypergumbo/` (`$XDG_CACHE_HOME/hypergumbo/` if set), plus short-lived files in the system temp directory. It does not write into the repository it analyses ([ADR-0047](https://github.com/iterabloom/hypergumbo/blob/dev/docs/adr/0047-catalogue-scope-and-user-visible-homes.md) ruling 9). The exceptions are an `-o` path you choose inside it, and the case in the last bullet of this list. One command writes more than the file you name: `survey --out X.json` also writes `X.4k.json`, `X.16k.json` and `X.64k.json` (the same map compacted to those token budgets) and a directory `X.slices/` holding one slice per detected route handler, all beside `X.json`. `--no-sketch-fan-out --no-handler-slices` suppresses them, so exactly one file is written.
157
157
  - Runs `git` read-only (`rev-parse HEAD`, `rev-list --max-parents=0 HEAD`, `config --get remote.origin.url`). If they are installed, it also runs `gitleaks` to scan for secrets and `rust-analyzer --version`; the version check does not index anything.
158
158
  - Makes no network connection, unless you installed embeddings support (`install-embeddings`, `add-extras`, or `pip install 'hypergumbo[embeddings]'`). In that case the first sketch downloads two models (`microsoft/unixcoder-base` and `nomic-ai/modernbert-embed-base`) from huggingface.co into `~/.cache/huggingface/` (or `$HF_HOME`). Once both models are cached, later runs work offline. To stop the download, set `HF_HUB_OFFLINE=1`; the sketch then runs without embeddings. SECURITY.md's network claim still says downloads happen only through `install-embeddings`. That claim is wrong, and INV-gujus tracks it.
159
159
  - If a directory `~/hypergumbo` exists (for example, a clone of this repository), an interactive run asks once whether to write example config files into `~/hypergumbo/.hypergumbo-examples/`. It records your answer in `~/.local/state/hypergumbo/offers.json`. If you answer yes while analysing `~/hypergumbo` itself, that is a write into the analysed repository (INV-kuroj).
@@ -182,6 +182,7 @@ Read this before installing hypergumbo on a machine you care about. Each stateme
182
182
 
183
183
  1. **Self-claims.** [SECURITY.md](https://github.com/iterabloom/hypergumbo/blob/dev/SECURITY.md) lists 18 claims about what each group of commands may touch, and hypergumbo checks them by analysing its own source (`scripts/check-self-claims`). All 18 currently read `confirmed_with_caveats`. That means the analysis found no contradiction where it could see, and it names what it could not see: programs it launches, statements the repository made about itself, and the 70.6% of method calls whose receiver type it could not work out. In auditing terms this is a qualified opinion, not proof ([ADR-0016](https://github.com/iterabloom/hypergumbo/blob/dev/docs/adr/0016-io-boundary-analysis.md)). It covers the `hypergumbo` command only.
184
184
  2. **I/O allowlist.** `scripts/check-io-allowlist` is a separate scan that uses only the standard library. It finds every place in `packages/*/src`, tracker included, that writes or deletes a file, starts a process, opens a connection or a server, or loads a model. Each one must be listed with its purpose in [`docs/hypergumbo.io-allowlist.yaml`](https://github.com/iterabloom/hypergumbo/blob/dev/docs/hypergumbo.io-allowlist.yaml), and an unlisted one fails CI. The gate proves that every such place was reviewed. It does not prove that any of them is safe.
185
+ 3. **Observed I/O manifest.** At every release, `scripts/io-manifest` runs the installed `hypergumbo` over six pinned open-source repositories under `strace` and records every file write, delete and rename, every program started and every connection attempted, reduced to fifteen lines ([`docs/io-manifest/expected.txt`](https://github.com/iterabloom/hypergumbo/blob/dev/docs/io-manifest/expected.txt)). A line not seen at the previous release fails the build, and a write into the analysed repository or a network connection fails it regardless. This is the only one of the three checks that sees what dependencies and compiled extensions do, because it watches the process rather than reading the Python. It covers a default run with no extras installed, on those six repositories: the "every scenario we exercised" statement, not "every scenario".
185
186
 
186
187
  The allowlist gate currently records these open findings:
187
188
 
@@ -239,6 +240,7 @@ Useful flags:
239
240
  hypergumbo . -x # exclude test files (cleaner output)
240
241
  hypergumbo . --no-source # omit source code (included by default)
241
242
  hypergumbo . --no-progress # hide progress indicator (sketch/run only; on by default)
243
+ HG_HEARTBEAT=10 hypergumbo . # stack heartbeat every 10s (default 30; 0 disables)
242
244
  hypergumbo io-boundaries --show-external-potential # opt into the (large) external-potential bucket (text output)
243
245
  hypergumbo --help --all # comprehensive help for all commands
244
246
  ```
@@ -119,7 +119,7 @@ Read this before installing hypergumbo on a machine you care about. Each stateme
119
119
  **What a default run does** (`hypergumbo .`, the same as `hypergumbo sketch .`):
120
120
 
121
121
  - Reads the files of the repository you point it at.
122
- - Writes its results under `~/.cache/hypergumbo/` (`$XDG_CACHE_HOME/hypergumbo/` if set), plus short-lived files in the system temp directory. It does not write into the repository it analyses ([ADR-0047](https://github.com/iterabloom/hypergumbo/blob/dev/docs/adr/0047-catalogue-scope-and-user-visible-homes.md) ruling 9). The exceptions are an `-o` path you choose inside it, and the case in the last bullet of this list.
122
+ - Writes its results under `~/.cache/hypergumbo/` (`$XDG_CACHE_HOME/hypergumbo/` if set), plus short-lived files in the system temp directory. It does not write into the repository it analyses ([ADR-0047](https://github.com/iterabloom/hypergumbo/blob/dev/docs/adr/0047-catalogue-scope-and-user-visible-homes.md) ruling 9). The exceptions are an `-o` path you choose inside it, and the case in the last bullet of this list. One command writes more than the file you name: `survey --out X.json` also writes `X.4k.json`, `X.16k.json` and `X.64k.json` (the same map compacted to those token budgets) and a directory `X.slices/` holding one slice per detected route handler, all beside `X.json`. `--no-sketch-fan-out --no-handler-slices` suppresses them, so exactly one file is written.
123
123
  - Runs `git` read-only (`rev-parse HEAD`, `rev-list --max-parents=0 HEAD`, `config --get remote.origin.url`). If they are installed, it also runs `gitleaks` to scan for secrets and `rust-analyzer --version`; the version check does not index anything.
124
124
  - Makes no network connection, unless you installed embeddings support (`install-embeddings`, `add-extras`, or `pip install 'hypergumbo[embeddings]'`). In that case the first sketch downloads two models (`microsoft/unixcoder-base` and `nomic-ai/modernbert-embed-base`) from huggingface.co into `~/.cache/huggingface/` (or `$HF_HOME`). Once both models are cached, later runs work offline. To stop the download, set `HF_HUB_OFFLINE=1`; the sketch then runs without embeddings. SECURITY.md's network claim still says downloads happen only through `install-embeddings`. That claim is wrong, and INV-gujus tracks it.
125
125
  - If a directory `~/hypergumbo` exists (for example, a clone of this repository), an interactive run asks once whether to write example config files into `~/hypergumbo/.hypergumbo-examples/`. It records your answer in `~/.local/state/hypergumbo/offers.json`. If you answer yes while analysing `~/hypergumbo` itself, that is a write into the analysed repository (INV-kuroj).
@@ -148,6 +148,7 @@ Read this before installing hypergumbo on a machine you care about. Each stateme
148
148
 
149
149
  1. **Self-claims.** [SECURITY.md](https://github.com/iterabloom/hypergumbo/blob/dev/SECURITY.md) lists 18 claims about what each group of commands may touch, and hypergumbo checks them by analysing its own source (`scripts/check-self-claims`). All 18 currently read `confirmed_with_caveats`. That means the analysis found no contradiction where it could see, and it names what it could not see: programs it launches, statements the repository made about itself, and the 70.6% of method calls whose receiver type it could not work out. In auditing terms this is a qualified opinion, not proof ([ADR-0016](https://github.com/iterabloom/hypergumbo/blob/dev/docs/adr/0016-io-boundary-analysis.md)). It covers the `hypergumbo` command only.
150
150
  2. **I/O allowlist.** `scripts/check-io-allowlist` is a separate scan that uses only the standard library. It finds every place in `packages/*/src`, tracker included, that writes or deletes a file, starts a process, opens a connection or a server, or loads a model. Each one must be listed with its purpose in [`docs/hypergumbo.io-allowlist.yaml`](https://github.com/iterabloom/hypergumbo/blob/dev/docs/hypergumbo.io-allowlist.yaml), and an unlisted one fails CI. The gate proves that every such place was reviewed. It does not prove that any of them is safe.
151
+ 3. **Observed I/O manifest.** At every release, `scripts/io-manifest` runs the installed `hypergumbo` over six pinned open-source repositories under `strace` and records every file write, delete and rename, every program started and every connection attempted, reduced to fifteen lines ([`docs/io-manifest/expected.txt`](https://github.com/iterabloom/hypergumbo/blob/dev/docs/io-manifest/expected.txt)). A line not seen at the previous release fails the build, and a write into the analysed repository or a network connection fails it regardless. This is the only one of the three checks that sees what dependencies and compiled extensions do, because it watches the process rather than reading the Python. It covers a default run with no extras installed, on those six repositories: the "every scenario we exercised" statement, not "every scenario".
151
152
 
152
153
  The allowlist gate currently records these open findings:
153
154
 
@@ -205,6 +206,7 @@ Useful flags:
205
206
  hypergumbo . -x # exclude test files (cleaner output)
206
207
  hypergumbo . --no-source # omit source code (included by default)
207
208
  hypergumbo . --no-progress # hide progress indicator (sketch/run only; on by default)
209
+ HG_HEARTBEAT=10 hypergumbo . # stack heartbeat every 10s (default 30; 0 disables)
208
210
  hypergumbo io-boundaries --show-external-potential # opt into the (large) external-potential bucket (text output)
209
211
  hypergumbo --help --all # comprehensive help for all commands
210
212
  ```
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "hypergumbo"
7
- version = "9.0.0"
7
+ version = "9.2.0"
8
8
  description = "Local-first repo behavior map generator"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -19,10 +19,10 @@ classifiers = [
19
19
  ]
20
20
  dependencies = [
21
21
  # Meta-package that pulls in all hypergumbo components
22
- "hypergumbo-core==9.0.0",
23
- "hypergumbo-lang-mainstream==9.0.0",
24
- "hypergumbo-lang-common==9.0.0",
25
- "hypergumbo-lang-extended1==9.0.0",
22
+ "hypergumbo-core==9.2.0",
23
+ "hypergumbo-lang-mainstream==9.2.0",
24
+ "hypergumbo-lang-common==9.2.0",
25
+ "hypergumbo-lang-extended1==9.2.0",
26
26
  ]
27
27
 
28
28
  [project.optional-dependencies]
@@ -47,13 +47,13 @@ embeddings = [
47
47
  # Without this extra, --backend rust-analyzer hits the BUG-06 runtime gate.
48
48
  # Install with: pipx install 'hypergumbo[rust-analyzer]'
49
49
  rust-analyzer = [
50
- "hypergumbo-lang-rust-analyzer==9.0.0",
50
+ "hypergumbo-lang-rust-analyzer==9.2.0",
51
51
  ]
52
52
  # SCIP-backed Python analysis via scip-python / pyright (WI-nanom). Executes
53
53
  # nothing from the analysed repository; the producer itself is an npm package:
54
54
  # npm install -g @sourcegraph/scip-python@0.6.6
55
55
  scip-python = [
56
- "hypergumbo-lang-scip-python==9.0.0",
56
+ "hypergumbo-lang-scip-python==9.2.0",
57
57
  ]
58
58
 
59
59
  [project.scripts]