headron-software 3.61.0__tar.gz → 3.63.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.
@@ -0,0 +1,199 @@
1
+ Metadata-Version: 2.4
2
+ Name: headron-software
3
+ Version: 3.63.0
4
+ Summary: Command line tool and rule contract for AI coding agents: each changed file maps to the checks it owes, and a commit whose file fails is refused.
5
+ License-Expression: MIT
6
+ Project-URL: Homepage, https://headron.tech
7
+ Project-URL: Documentation, https://github.com/HLIntel/Headron/blob/main/llms.txt
8
+ Project-URL: Issues, https://github.com/HLIntel/Headron/issues
9
+ Project-URL: Source, https://github.com/HLIntel/Headron
10
+ Project-URL: Agent entry, https://raw.githubusercontent.com/HLIntel/Headron/main/.agent/bootstrap.json
11
+ Project-URL: LLM instructions, https://raw.githubusercontent.com/HLIntel/Headron/main/llms.txt
12
+ Project-URL: Changelog, https://github.com/HLIntel/Headron/blob/main/docs/VERSIONING.md
13
+ Keywords: headron,headron-software,headron-layer-intelligence,hlintel,engineering-atlas,polyglot,contract-verification,policy-as-code,ai-agents,ai-coding-agents,mcp,llm,agent-harness,code-verification,developer-tools,static-analysis,supply-chain-security,claude-code,codex,github-copilot,agents-md
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Topic :: Software Development :: Quality Assurance
18
+ Classifier: Topic :: Software Development :: Testing
19
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Requires-Dist: pyyaml<7,>=6.0.3
24
+ Requires-Dist: defusedxml<0.8,>=0.7.1
25
+ Provides-Extra: quality
26
+ Requires-Dist: ruff>=0.6; extra == "quality"
27
+ Provides-Extra: crosscheck
28
+ Requires-Dist: jsonschema>=4; extra == "crosscheck"
29
+ Dynamic: license-file
30
+
31
+ <!-- AGENTS: do not read this page breadth-first. Run `headron port <file>` (in a clone,
32
+ `python scripts/atlas.py port <file>`), or parse .agent/bootstrap.json. -->
33
+ <!-- mcp-name: io.github.HLIntel/headron -->
34
+ <div align="center">
35
+ <img src="https://raw.githubusercontent.com/HLIntel/Headron/main/docs/media/headron-banner.jpg"
36
+ alt="Headron Software: AI governance and verification"
37
+ width="992">
38
+ <h1>Headron Software</h1>
39
+ </div>
40
+
41
+ <!-- BEGIN generated: badges (python scripts/atlas.py index --write) -->
42
+
43
+ **Contract 3.63.0** · MIT · verdicts carry receipts: `headron verify --receipt <file>`
44
+
45
+ <!-- END generated: badges -->
46
+
47
+ <!-- BEGIN generated: headline (python scripts/atlas.py index --write) -->
48
+
49
+ - **Is:** a rule contract and CLI mapping changed files to checks. Hooks are optional; `headron verify` runs done gates.
50
+ - **Is not:** a coding agent, model, test framework, or proof code is correct. A check that cannot run reports SKIP or NOT RUN, never a pass; the hook lets that commit through.
51
+ - **`headron init` writes:** AGENTS.md, CLAUDE.md, .mcp.json, .codex/config.toml, .git/hooks/pre-commit. Use `--no-wiring` to skip hooks and configuration; `headron enforce uninstall` restores a displaced hook.
52
+ - **Mind API:** hosted, paid, needs a key; plans a declared change. The command line works without it.
53
+
54
+ Agents: [llms.txt](llms.txt). Chats: [CHAT.md](CHAT.md). [Evidence](#recorded-results).
55
+
56
+ <!-- END generated: headline -->
57
+
58
+ ## Why this exists
59
+
60
+ Headron connects changed files to declared checks and reports whether those checks ran. A skipped
61
+ check is not a pass. An optional Git hook can run checks before a commit, whether the change came
62
+ from a developer or an agent.
63
+
64
+ ## How it works
65
+
66
+ `headron port <file>` tells an agent what a file owes before it edits. [`atlas.yaml`](atlas.yaml)
67
+ holds those checks; the commit hook and CI report `PASS`, `FAIL`, `SKIP` or `NOT RUN`. The hosted
68
+ [Mind API](https://headron.tech/mind-api.html) plans a declared change through `headron mind`.
69
+
70
+ <!-- BEGIN generated: proof-flow (python scripts/atlas.py index --write) -->
71
+
72
+ <p align="center">
73
+ <img src="docs/media/headron-proof-flow.svg" width="900"
74
+ alt="Headron Architecture: contract, targeted evidence, integrity audit, unified verdict.">
75
+ </p>
76
+
77
+ <!-- END generated: proof-flow -->
78
+
79
+ <!-- BEGIN generated: gate-example (python scripts/atlas.py index --write) -->
80
+
81
+ ```console
82
+ $ headron gate scripts/doctor.py
83
+ 1. formatter: ruff format --check scripts/doctor.py
84
+ 2. compiler_or_typechecker: python3 -c 'import ast,sys; [ast.parse(open(f, encoding="utf-8").read(), f) for f in sys.argv[1:]]' scripts/doctor.py
85
+ 3. unit_tests: pytest
86
+ ```
87
+
88
+ <!-- END generated: gate-example -->
89
+
90
+ ## Quickstart
91
+
92
+ <!-- BEGIN generated: install (python scripts/atlas.py index --write) -->
93
+
94
+ ```bash
95
+ # install
96
+ uv tool install headron-software && headron doctor
97
+ # editable, to change Headron itself
98
+ git clone --depth 1 --branch v3.63.0 https://github.com/HLIntel/Headron ~/headron && uv tool install --editable ~/headron && headron doctor
99
+ ```
100
+
101
+ <!-- END generated: install -->
102
+
103
+ In your repository:
104
+
105
+ ```bash
106
+ cd path/to/your-repo && headron init # finds your checks, wires your agents, installs the commit hook, runs once
107
+ headron verify && headron proof <file> --verify # after a change: verdicts, then a file's proof
108
+ ```
109
+
110
+ With an impact map, `headron verify --changed` evaluates checks for modified files.
111
+ Target a specific profile with `headron verify --changed --change <class>` (e.g. `source_change`, `api_change`, `security_sensitive`); `headron verify` remains the final full verdict.
112
+
113
+ **Machines:** [bootstrap](.agent/bootstrap.json), [facts](.agent/facts.json), and [JSON schema](tools/atlas-output.schema.json).
114
+ **Agents:** [adapters](models/README.md); the MCP interface is read-only.
115
+ **Another repository:** [CONSUMING](docs/CONSUMING.md).
116
+
117
+ ## Recorded results
118
+
119
+ See the [instrument limits](docs/CERTIFICATION.md#what-the-numbers-do-not-prove) for their scope.
120
+
121
+ <!-- BEGIN generated: measured-benefits (python scripts/atlas.py index --write) -->
122
+
123
+ <!-- prettier-ignore -->
124
+ | Instrument | Recorded result |
125
+ | :--- | :--- |
126
+ | Enforcement | 31/31 breaks refused across 20 toolchains; **816** declared planted cases |
127
+ | Failure ledger | 128 shapes, 220 sightings; 104 in-tree guarded, 24 host-only |
128
+ | Field ledger | 940 verifications (136 clean); 1133 refusals; 394 landings; 711 lessons; 394 sessions |
129
+ | Verification outcomes | 17,397 checks: 7,357 PASS, 1,097 REUSED, 1,278 FAIL, 7,665 NOT RUN. 533 runs failed; 271 stopped with an unrun check; 0 reported clean despite a failed or unrun check |
130
+ | Routing experiment | 89% fewer prompt tokens than whole-tree; 50% fewer than unassisted, across identified models |
131
+ | Language roles | 360 pairs: 110 runnable, 0 undeclared |
132
+
133
+ Entry context: ~1,593 tokens. The 211 documents (708 KiB) load on demand; install: 10 KiB; hash lock with test tools: 8 packages.
134
+ [Field records](benchmarks/field-latest.json). [Routing data](benchmarks/ab-latest.json). Measures can overlap.
135
+
136
+ <!-- END generated: measured-benefits -->
137
+
138
+ ## Where it fits
139
+
140
+ - **Agents and runtimes:** [adapters](models/README.md) describe supported integrations.
141
+ - **Headron-Harness:** a separate desktop dashboard and runtime; see [product boundaries](docs/PRODUCT-STRATEGY.md).
142
+ - **Other repositories:** `headron init` sets up a repository; [CONSUMING](docs/CONSUMING.md) covers CI, the [GitHub Action](docs/CONSUMING.md#as-a-github-action) and the [hosted MCP](docs/CONSUMING.md#hosted-mind-api--mcp).
143
+ - **Languages:** routes declare available checks and identify checks without a tool.
144
+
145
+ ## Agent contract
146
+
147
+ <!-- BEGIN generated: port-example (python scripts/atlas.py index --write) -->
148
+
149
+ ```console
150
+ $ headron port scripts/doctor.py --line
151
+ ◉ scripts/doctor.py │ ⠟backend │ python │ ⌂scripts │ ✓5 │ ⚠2 │ → headron gate scripts/doctor.py
152
+ $ headron port scripts --line
153
+ ◎ scripts │ ⠟186 │ ⌂scripts │ → headron brainstorm
154
+ $ headron port . --line
155
+ ○ . │ ⠟214 ⠿4 ⠁1 │ → headron check
156
+ ```
157
+
158
+ <!-- END generated: port-example -->
159
+
160
+ - **Discover:** `headron find <query>` searches paths, symbols and vocabulary; `headron sweep` maps topology. Search does not guarantee semantic recall.
161
+ - **Route:** `headron port <file>`, or parse [.agent/bootstrap.json](.agent/bootstrap.json); load only its names.
162
+ - **Processes:** `headron process [<id>] --json` lists workflows; with an id, its steps and gates.
163
+ - **Mind:** `headron mind --route <file>` routes; `headron mind --receipts` summarizes the latest local verification record.
164
+ - **Beliefs:** `headron revise` names what rests on a refuted claim; `headron propose` drafts each fix outside the tree.
165
+ - **Automate:** add `--json`; records follow [the output schema](tools/atlas-output.schema.json).
166
+ - **Before shell:** `headron shell --json "<cmd>"`; exit 3 means its verdict would be misread.
167
+ - **Land:** `python scripts/branchstate.py --land`; check `headron landed <branch>` before deletion.
168
+ - **Judge and report:** use the [judgment rungs](docs/systems/AGENT-HARNESS.md#judgment-rungs); file breaks with the [`headron` skill](skills/headron/SKILL.md).
169
+
170
+ ## Find your way
171
+
172
+ - **Every document:** [docs index](docs/INDEX.md) · [wiki](docs/wiki/README.md)
173
+ - **Languages:** [atlas](languages/ATLAS.md) · [routing](docs/wiki/CODE-ROUTING.md) · [verification](docs/VERIFY.md)
174
+ - **Agents:** [harness](docs/systems/AGENT-HARNESS.md) · [`.headron`](docs/HEADRON-LANGUAGE.md) · [runtimes](models/README.md)
175
+ - **Why a rule:** `headron why` · `headron failures` · [instruments](docs/INSTRUMENTS.md)
176
+ - **Companion products:** [desktop, web, enterprise](docs/CONSUMING.md#optional-hlintel-services)
177
+ - **Security:** [policy](SECURITY.md) · [OpenSSF](docs/OPENSSF.md) · [contributing](CONTRIBUTING.md)
178
+
179
+ ## Counts, computed
180
+
181
+ Generated on every build; `check` refuses drift.
182
+
183
+ <!-- BEGIN generated: repository-facts (python scripts/atlas.py index --write) -->
184
+
185
+ - **52** hard invariants — enforced on every change, zero unowned
186
+ - **368** agreement edges — each a file tied to the declaration it answers for
187
+ - **95** instruments — each stating what it proves, what it does not, and what closes the gap
188
+ - **385** tool entries — across 40 manifests and 5 kinds, validated against `tools/tools.schema.json`
189
+ - **184** harness Python files — every one held by `lint` · `format` · `typecheck`
190
+ - **3.63.0** contract version — `VERSION`, asserted in 10 other files
191
+
192
+ <!-- END generated: repository-facts -->
193
+
194
+ ## Project
195
+
196
+ Version tracks the **contract**, not content ([versioning](docs/VERSIONING.md)).
197
+ Built by **HLIntel LLC**, public on purpose ([about](ABOUT.md)). Contributions pass `headron verify`. [MIT License](LICENSE).
198
+
199
+ Updated: contract v3.63.0
@@ -0,0 +1,169 @@
1
+ <!-- AGENTS: do not read this page breadth-first. Run `headron port <file>` (in a clone,
2
+ `python scripts/atlas.py port <file>`), or parse .agent/bootstrap.json. -->
3
+ <!-- mcp-name: io.github.HLIntel/headron -->
4
+ <div align="center">
5
+ <img src="https://raw.githubusercontent.com/HLIntel/Headron/main/docs/media/headron-banner.jpg"
6
+ alt="Headron Software: AI governance and verification"
7
+ width="992">
8
+ <h1>Headron Software</h1>
9
+ </div>
10
+
11
+ <!-- BEGIN generated: badges (python scripts/atlas.py index --write) -->
12
+
13
+ **Contract 3.63.0** · MIT · verdicts carry receipts: `headron verify --receipt <file>`
14
+
15
+ <!-- END generated: badges -->
16
+
17
+ <!-- BEGIN generated: headline (python scripts/atlas.py index --write) -->
18
+
19
+ - **Is:** a rule contract and CLI mapping changed files to checks. Hooks are optional; `headron verify` runs done gates.
20
+ - **Is not:** a coding agent, model, test framework, or proof code is correct. A check that cannot run reports SKIP or NOT RUN, never a pass; the hook lets that commit through.
21
+ - **`headron init` writes:** AGENTS.md, CLAUDE.md, .mcp.json, .codex/config.toml, .git/hooks/pre-commit. Use `--no-wiring` to skip hooks and configuration; `headron enforce uninstall` restores a displaced hook.
22
+ - **Mind API:** hosted, paid, needs a key; plans a declared change. The command line works without it.
23
+
24
+ Agents: [llms.txt](llms.txt). Chats: [CHAT.md](CHAT.md). [Evidence](#recorded-results).
25
+
26
+ <!-- END generated: headline -->
27
+
28
+ ## Why this exists
29
+
30
+ Headron connects changed files to declared checks and reports whether those checks ran. A skipped
31
+ check is not a pass. An optional Git hook can run checks before a commit, whether the change came
32
+ from a developer or an agent.
33
+
34
+ ## How it works
35
+
36
+ `headron port <file>` tells an agent what a file owes before it edits. [`atlas.yaml`](atlas.yaml)
37
+ holds those checks; the commit hook and CI report `PASS`, `FAIL`, `SKIP` or `NOT RUN`. The hosted
38
+ [Mind API](https://headron.tech/mind-api.html) plans a declared change through `headron mind`.
39
+
40
+ <!-- BEGIN generated: proof-flow (python scripts/atlas.py index --write) -->
41
+
42
+ <p align="center">
43
+ <img src="docs/media/headron-proof-flow.svg" width="900"
44
+ alt="Headron Architecture: contract, targeted evidence, integrity audit, unified verdict.">
45
+ </p>
46
+
47
+ <!-- END generated: proof-flow -->
48
+
49
+ <!-- BEGIN generated: gate-example (python scripts/atlas.py index --write) -->
50
+
51
+ ```console
52
+ $ headron gate scripts/doctor.py
53
+ 1. formatter: ruff format --check scripts/doctor.py
54
+ 2. compiler_or_typechecker: python3 -c 'import ast,sys; [ast.parse(open(f, encoding="utf-8").read(), f) for f in sys.argv[1:]]' scripts/doctor.py
55
+ 3. unit_tests: pytest
56
+ ```
57
+
58
+ <!-- END generated: gate-example -->
59
+
60
+ ## Quickstart
61
+
62
+ <!-- BEGIN generated: install (python scripts/atlas.py index --write) -->
63
+
64
+ ```bash
65
+ # install
66
+ uv tool install headron-software && headron doctor
67
+ # editable, to change Headron itself
68
+ git clone --depth 1 --branch v3.63.0 https://github.com/HLIntel/Headron ~/headron && uv tool install --editable ~/headron && headron doctor
69
+ ```
70
+
71
+ <!-- END generated: install -->
72
+
73
+ In your repository:
74
+
75
+ ```bash
76
+ cd path/to/your-repo && headron init # finds your checks, wires your agents, installs the commit hook, runs once
77
+ headron verify && headron proof <file> --verify # after a change: verdicts, then a file's proof
78
+ ```
79
+
80
+ With an impact map, `headron verify --changed` evaluates checks for modified files.
81
+ Target a specific profile with `headron verify --changed --change <class>` (e.g. `source_change`, `api_change`, `security_sensitive`); `headron verify` remains the final full verdict.
82
+
83
+ **Machines:** [bootstrap](.agent/bootstrap.json), [facts](.agent/facts.json), and [JSON schema](tools/atlas-output.schema.json).
84
+ **Agents:** [adapters](models/README.md); the MCP interface is read-only.
85
+ **Another repository:** [CONSUMING](docs/CONSUMING.md).
86
+
87
+ ## Recorded results
88
+
89
+ See the [instrument limits](docs/CERTIFICATION.md#what-the-numbers-do-not-prove) for their scope.
90
+
91
+ <!-- BEGIN generated: measured-benefits (python scripts/atlas.py index --write) -->
92
+
93
+ <!-- prettier-ignore -->
94
+ | Instrument | Recorded result |
95
+ | :--- | :--- |
96
+ | Enforcement | 31/31 breaks refused across 20 toolchains; **816** declared planted cases |
97
+ | Failure ledger | 128 shapes, 220 sightings; 104 in-tree guarded, 24 host-only |
98
+ | Field ledger | 940 verifications (136 clean); 1133 refusals; 394 landings; 711 lessons; 394 sessions |
99
+ | Verification outcomes | 17,397 checks: 7,357 PASS, 1,097 REUSED, 1,278 FAIL, 7,665 NOT RUN. 533 runs failed; 271 stopped with an unrun check; 0 reported clean despite a failed or unrun check |
100
+ | Routing experiment | 89% fewer prompt tokens than whole-tree; 50% fewer than unassisted, across identified models |
101
+ | Language roles | 360 pairs: 110 runnable, 0 undeclared |
102
+
103
+ Entry context: ~1,593 tokens. The 211 documents (708 KiB) load on demand; install: 10 KiB; hash lock with test tools: 8 packages.
104
+ [Field records](benchmarks/field-latest.json). [Routing data](benchmarks/ab-latest.json). Measures can overlap.
105
+
106
+ <!-- END generated: measured-benefits -->
107
+
108
+ ## Where it fits
109
+
110
+ - **Agents and runtimes:** [adapters](models/README.md) describe supported integrations.
111
+ - **Headron-Harness:** a separate desktop dashboard and runtime; see [product boundaries](docs/PRODUCT-STRATEGY.md).
112
+ - **Other repositories:** `headron init` sets up a repository; [CONSUMING](docs/CONSUMING.md) covers CI, the [GitHub Action](docs/CONSUMING.md#as-a-github-action) and the [hosted MCP](docs/CONSUMING.md#hosted-mind-api--mcp).
113
+ - **Languages:** routes declare available checks and identify checks without a tool.
114
+
115
+ ## Agent contract
116
+
117
+ <!-- BEGIN generated: port-example (python scripts/atlas.py index --write) -->
118
+
119
+ ```console
120
+ $ headron port scripts/doctor.py --line
121
+ ◉ scripts/doctor.py │ ⠟backend │ python │ ⌂scripts │ ✓5 │ ⚠2 │ → headron gate scripts/doctor.py
122
+ $ headron port scripts --line
123
+ ◎ scripts │ ⠟186 │ ⌂scripts │ → headron brainstorm
124
+ $ headron port . --line
125
+ ○ . │ ⠟214 ⠿4 ⠁1 │ → headron check
126
+ ```
127
+
128
+ <!-- END generated: port-example -->
129
+
130
+ - **Discover:** `headron find <query>` searches paths, symbols and vocabulary; `headron sweep` maps topology. Search does not guarantee semantic recall.
131
+ - **Route:** `headron port <file>`, or parse [.agent/bootstrap.json](.agent/bootstrap.json); load only its names.
132
+ - **Processes:** `headron process [<id>] --json` lists workflows; with an id, its steps and gates.
133
+ - **Mind:** `headron mind --route <file>` routes; `headron mind --receipts` summarizes the latest local verification record.
134
+ - **Beliefs:** `headron revise` names what rests on a refuted claim; `headron propose` drafts each fix outside the tree.
135
+ - **Automate:** add `--json`; records follow [the output schema](tools/atlas-output.schema.json).
136
+ - **Before shell:** `headron shell --json "<cmd>"`; exit 3 means its verdict would be misread.
137
+ - **Land:** `python scripts/branchstate.py --land`; check `headron landed <branch>` before deletion.
138
+ - **Judge and report:** use the [judgment rungs](docs/systems/AGENT-HARNESS.md#judgment-rungs); file breaks with the [`headron` skill](skills/headron/SKILL.md).
139
+
140
+ ## Find your way
141
+
142
+ - **Every document:** [docs index](docs/INDEX.md) · [wiki](docs/wiki/README.md)
143
+ - **Languages:** [atlas](languages/ATLAS.md) · [routing](docs/wiki/CODE-ROUTING.md) · [verification](docs/VERIFY.md)
144
+ - **Agents:** [harness](docs/systems/AGENT-HARNESS.md) · [`.headron`](docs/HEADRON-LANGUAGE.md) · [runtimes](models/README.md)
145
+ - **Why a rule:** `headron why` · `headron failures` · [instruments](docs/INSTRUMENTS.md)
146
+ - **Companion products:** [desktop, web, enterprise](docs/CONSUMING.md#optional-hlintel-services)
147
+ - **Security:** [policy](SECURITY.md) · [OpenSSF](docs/OPENSSF.md) · [contributing](CONTRIBUTING.md)
148
+
149
+ ## Counts, computed
150
+
151
+ Generated on every build; `check` refuses drift.
152
+
153
+ <!-- BEGIN generated: repository-facts (python scripts/atlas.py index --write) -->
154
+
155
+ - **52** hard invariants — enforced on every change, zero unowned
156
+ - **368** agreement edges — each a file tied to the declaration it answers for
157
+ - **95** instruments — each stating what it proves, what it does not, and what closes the gap
158
+ - **385** tool entries — across 40 manifests and 5 kinds, validated against `tools/tools.schema.json`
159
+ - **184** harness Python files — every one held by `lint` · `format` · `typecheck`
160
+ - **3.63.0** contract version — `VERSION`, asserted in 10 other files
161
+
162
+ <!-- END generated: repository-facts -->
163
+
164
+ ## Project
165
+
166
+ Version tracks the **contract**, not content ([versioning](docs/VERSIONING.md)).
167
+ Built by **HLIntel LLC**, public on purpose ([about](ABOUT.md)). Contributions pass `headron verify`. [MIT License](LICENSE).
168
+
169
+ Updated: contract v3.63.0
@@ -0,0 +1 @@
1
+ 3.63.0
@@ -1,20 +1,6 @@
1
1
  # Headron — Python project declaration.
2
2
  #
3
- # WHY THIS FILE EXISTS (added at contract v1.2.0). `.ruff_cache/` and `.pytest_cache/` were already at the repo
4
- # root: ruff and pytest have been RUN here for some time while nothing declared them, nothing
5
- # configured them, and no gate enforced them. That is an undeclared habit, and an undeclared habit
6
- # is the thing that silently changes. This file declares exactly what is true and REFUSES to
7
- # declare what is not — because a config that names a gate nobody runs is the same skeleton this
8
- # repo exists to prevent.
9
- #
10
- # MEASURED BEFORE WRITING ANY OF IT (instrument: `ruff check . --show-files`, `ruff format --check`,
11
- # `python3 -m pytest -q`, all run at v1.2.0):
12
- # - ruff saw exactly SIX Python files then; re-measured at v1.3.0 after the harness was
13
- # split into modules, it sees 8. The count is not typed into a document: README's
14
- # generated facts block computes it from scripts/*.py on every run.
15
- # - `ruff check .` -> All checks passed, exit 0. Safe to enforce at that version, and enforced since.
16
- # - `ruff format --check` -> enforced at 3.50.0, after one reviewed reformat; see [tool.ruff.format].
17
- # - `python3 -m pytest -q` -> "no tests ran". Not adopted; see [tool.pytest] below.
3
+ # Package metadata and the Python harness's checked configuration live here.
18
4
 
19
5
  # THIS FILE DESCRIBES THE HARNESS, NOT THE REPOSITORY.
20
6
  # The atlas is polyglot and is not a Python project; Python is simply what the contract
@@ -28,7 +14,7 @@ name = "headron-software" # 3.53.0: the index name a stranger typ
28
14
  dynamic = ["version"] # READ FROM VERSION, never typed here: a second declaration goes
29
15
  # stale first. The installed version is the release tag the CLI
30
16
  # fetches its atlas from when no root is declared.
31
- description = "AI coding-agent verification: tells agents which commands prove a change and fails the build when one was skipped. Polyglot; CLI, MCP server, git hooks, CI."
17
+ description = "Command line tool and rule contract for AI coding agents: each changed file maps to the checks it owes, and a commit whose file fails is refused."
32
18
  readme = "README.md" # the PyPI page; carries the registry ownership marker (server.json)
33
19
  license = "MIT"
34
20
  requires-python = ">=3.11"
@@ -44,7 +30,7 @@ classifiers = ["Development Status :: 4 - Beta", "Intended Audience :: Developer
44
30
  # FOUND FROM AN INSTALL. Before 2.28.0 an installed package named no link at all, so an agent
45
31
  # handed only `pip show` had no route back to the atlas, its entry or its instructions.
46
32
  [project.urls]
47
- Homepage = "https://github.com/HLIntel/Headron"
33
+ Homepage = "https://headron.tech"
48
34
  Documentation = "https://github.com/HLIntel/Headron/blob/main/llms.txt"
49
35
  Issues = "https://github.com/HLIntel/Headron/issues"
50
36
  Source = "https://github.com/HLIntel/Headron"
@@ -106,7 +92,10 @@ select = ["E", "F", "I", # pycodestyle errors, pyflakes, import sor
106
92
  # if, a returned condition, an any/all loop, a ternary over an if-block, and no else
107
93
  # after return/raise/continue — guard clauses. PERF401 was measured too and REJECTED:
108
94
  # 31 error-collecting loops with no safe fix, whose messages would hide in generators.
109
- "C4", "SIM102", "SIM103", "SIM108", "SIM110", "RET505", "RET506", "RET508"]
95
+ "C4", "SIM102", "SIM103", "SIM108", "SIM110", "RET505", "RET506", "RET508",
96
+ # S110, an `except Exception: pass` that hides a programming error. Four hits
97
+ # (mind.py x3, mind_diagnostics.py x1) were narrowed to the errors each expects, so zero.
98
+ "S110"]
110
99
  ignore = ["E501"] # line length is governed by line-length above, not by a lint error
111
100
 
112
101
  [tool.ruff.lint.isort]
@@ -144,16 +133,9 @@ quote-style = "double"
144
133
  skip-magic-trailing-comma = true
145
134
 
146
135
  # [tool.pytest.ini_options] IS DELIBERATELY ABSENT.
147
- # A bare `python3 -m pytest -q` here would collect only the planted failing tests under
148
- # benchmarks/agent/ and read as broken code; the root conftest.py refuses it (exit 4) and names the
149
- # real commands. A path on the command line still runs that fixture. The contract's mutation tests
150
- # are a custom harness run directly:
151
- #
152
- # python3 scripts/atlas_test.py -> "atlas tests: N/N pass" with N asserted, exit 0
153
- #
154
- # declared in that file's own docblock and wired into .github/workflows/atlas-ci.yml. Declaring a
155
- # pytest section now would add a second, empty test surface whose green exit means nothing. When a
156
- # real pytest suite exists, configure it here and give it a failing case first.
136
+ # A bare invocation could collect planted failures under benchmarks/agent/, so conftest.py refuses
137
+ # it. Explicit paths still work. The artifacts_tests gate selects the artifact and data kit cases;
138
+ # the mutation suite is a separate harness run by verify.
157
139
 
158
140
  [tool.basedpyright]
159
141
  # THE PACK'S DECLARED TYPE CHECKER, RUN ON ITS OWN TREE (3.54.0): gate `typecheck`. Standard mode, the
@@ -162,6 +144,7 @@ include = ["scripts", "examples", "fuzz", "benchmarks"]
162
144
  pythonVersion = "3.12"
163
145
  typeCheckingMode = "standard"
164
146
  reportMissingModuleSource = false
147
+ reportMissingParameterType = "error"
165
148
  executionEnvironments = [
166
149
  { root = "examples/python", extraPaths = ["examples/python", "scripts"] },
167
150
  { root = "examples/webhooks", extraPaths = ["examples/webhooks", "scripts"] },
@@ -11,8 +11,10 @@ THAT TREE IS LOCKED (3.54.0): read-only, re-hashed on every run; an edit refuses
11
11
 
12
12
  from __future__ import annotations
13
13
 
14
+ import contextlib
14
15
  import hashlib
15
16
  import io
17
+ import json
16
18
  import os
17
19
  import re
18
20
  import shutil
@@ -36,7 +38,7 @@ class ConfigError(ValueError):
36
38
  """A root flag or consumer config this entry point refuses to guess about."""
37
39
 
38
40
 
39
- def _keys(path: Path, node, what: str, allowed=()) -> dict:
41
+ def _keys(path: Path, node: yaml.Node, what: str, allowed: tuple[str, ...] = ()) -> dict:
40
42
  if not isinstance(node, yaml.MappingNode):
41
43
  raise ConfigError(f"{path}:{node.start_mark.line + 1}: {what} must be a mapping")
42
44
  out = {}
@@ -91,7 +93,7 @@ def resolve_root(argv: list[str], cwd: Path) -> tuple[Path, str]:
91
93
  value = root_flag(argv)[0]
92
94
  if value is not None:
93
95
  return Path(value).expanduser().resolve(), f"explicit {FLAG}"
94
- for var in ("HEADRON_ROOT", "CODE_DEVELOPMENT_ROOT"): # the second is the pre-3.0 name
96
+ for var in ("HEADRON_ROOT", "CODE_DEVELOPMENT_ROOT"): # second: pre-3.0
95
97
  if os.environ.get(var):
96
98
  return Path(os.environ[var]).resolve(), f"{var} in the environment"
97
99
  config, where = _config(cwd)
@@ -163,7 +165,7 @@ def fetch_atlas(version: str) -> Path:
163
165
  (tree / MARKER).write_text("".join(f"{line}\n" for line in [f"{want[0]} {name}", *_manifest(tree)]))
164
166
  for path in tree.rglob("*"):
165
167
  if path.is_file():
166
- path.chmod(path.stat().st_mode & ~0o222) # read-only, marker too: an edit fails where it is made
168
+ path.chmod(path.stat().st_mode & ~0o222) # read-only, marker too: an edit fails on the spot
167
169
  shutil.rmtree(dest, ignore_errors=True) # an unmarked, interrupted unpack
168
170
  os.replace(tree, dest)
169
171
  _prune_releases(dest.parent)
@@ -184,7 +186,7 @@ def _resolved(argv: list[str]) -> tuple:
184
186
  from importlib.metadata import version # noqa: PLC0415
185
187
 
186
188
  root = fetch_atlas(version("headron-software"))
187
- # Bytecode goes beside the locked tree, never into it, here and in every child process.
189
+ # Bytecode goes beside the locked tree, never into it, here and in every child.
188
190
  os.environ["PYTHONPYCACHEPREFIX"] = sys.pycache_prefix = str(root.parent / "pycache")
189
191
  return root, "its own release, sha256-checked and locked"
190
192
  except (ConfigError, FetchError, ImportError) as exc:
@@ -229,7 +231,19 @@ def mcp_main() -> int:
229
231
  argv = sys.argv[1:]
230
232
  if "--where" in argv:
231
233
  return main(argv)
232
- if _enter(argv, "headron_mcp.py")[0] is None:
234
+ said = io.StringIO()
235
+ with contextlib.redirect_stderr(said):
236
+ root = _enter(argv, "headron_mcp.py")[0]
237
+ sys.stderr.write(said.getvalue())
238
+ if root is None:
239
+ # REFUSE IN THE HANDSHAKE (3.63.0): exiting before `initialize` showed the client only "Connection closed".
240
+ try:
241
+ ask = {} if sys.stdin.isatty() else json.loads(sys.stdin.readline() or "{}")
242
+ except ValueError:
243
+ ask = {}
244
+ if isinstance(ask, dict) and "id" in ask:
245
+ why = {"code": -32000, "message": "headron-mcp refused: " + " ".join(said.getvalue().split())}
246
+ print(json.dumps({"jsonrpc": "2.0", "id": ask["id"], "error": why}), flush=True)
233
247
  return 2
234
248
  import headron_mcp # noqa: PLC0415 — as in main
235
249