@andresmassello/uscha 1.54.0 → 1.56.0
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.
- package/README.md +33 -3
- package/package.json +5 -1
- package/uscha-kit/.claude/skills/uscha-devloop/qa_ledger.py +171 -171
- package/uscha-kit/.claude-plugin/plugin.json +1 -1
- package/uscha-kit/.codex-plugin/plugin.json +1 -1
- package/uscha-kit/README.md +3 -3
- package/uscha-kit/VERSION +1 -1
- package/uscha-kit/hooks/block-approved-writes.py +119 -13
- package/uscha-kit/install-uscha.py +152 -1
- package/uscha-kit/skills/uscha-devloop/qa_ledger.py +171 -171
- package/uscha-kit/uscha.config.json +1 -1
package/README.md
CHANGED
|
@@ -40,8 +40,8 @@ Requires **Python 3.8+** on the machine (the engine is Python stdlib — no pip
|
|
|
40
40
|
runtime dependencies). The npm package is a thin router; the canonical installer is
|
|
41
41
|
`uscha-kit/install-uscha.py`.
|
|
42
42
|
|
|
43
|
-
**Kit v1.
|
|
44
|
-
[changelog](https://github.com/andresmassello/uscha/blob/main/uscha-kit/CHANGELOG-1.
|
|
43
|
+
**Kit v1.56.0** <!-- uscha:version --> · [uscha.dev](https://uscha.dev) ·
|
|
44
|
+
[changelog](https://github.com/andresmassello/uscha/blob/main/uscha-kit/CHANGELOG-1.56.0.md)
|
|
45
45
|
(the per-release changelogs live in the repo, not in the npm tarball)
|
|
46
46
|
|
|
47
47
|
---
|
|
@@ -80,6 +80,32 @@ and see which file, which test, and when.
|
|
|
80
80
|
evidence from **11 language stacks** — maven, gradle, ant, python, node, go, rust, dotnet,
|
|
81
81
|
cpp, swift, flutter — and computes a readiness score with hard caps and visible provenance.
|
|
82
82
|
|
|
83
|
+
## Compatibility matrix
|
|
84
|
+
|
|
85
|
+
Generated from `TARGETS`/`SKILL_ROOTS` in the installer, so it cannot drift from the code.
|
|
86
|
+
|
|
87
|
+
| target | agent | installs to | INV-GOLDEN-01 | exercised against a real agent |
|
|
88
|
+
|---|---|---|---|---|
|
|
89
|
+
| `codex` | Codex | `~/plugins/uscha` | advisory | **yes** |
|
|
90
|
+
| `claude` | Claude Code | `~/.claude/skills` | **enforced** (PreToolUse hook, best-effort) | **yes** |
|
|
91
|
+
| `pi` | pi (Earendil) | `~/.agents/skills` | advisory | no — placement + read-back only |
|
|
92
|
+
| `cursor` | Cursor | `~/.cursor/skills` | advisory | no — placement + read-back only |
|
|
93
|
+
| `copilot` | VS Code / Copilot | `~/.copilot/skills` | advisory | no — placement + read-back only |
|
|
94
|
+
| `gemini` | Gemini CLI | `~/.gemini/skills` | advisory | no — placement + read-back only |
|
|
95
|
+
| `cline` | Cline | `~/.cline/skills` | advisory | no — placement + read-back only |
|
|
96
|
+
|
|
97
|
+
**"Exercised" is the column that matters.** For every target but Claude Code and Codex, what
|
|
98
|
+
is measured is that the nine skills land where that agent documents reading them and that
|
|
99
|
+
`doctor` reads them back — *that they load is a documented expectation, not a measurement.*
|
|
100
|
+
INV-GOLDEN-01 is mechanically attempted only where a blocking pre-tool hook exists; everywhere
|
|
101
|
+
else `doctor` reports `advisory` rather than implying a guard it cannot see.
|
|
102
|
+
|
|
103
|
+
| OS | how it is verified | status |
|
|
104
|
+
|---|---|---|
|
|
105
|
+
| Linux | CI matrix (py3.8 + py3.13) + local WSL | **measured** |
|
|
106
|
+
| Windows | CI matrix (py3.8 + py3.13) + native local | **measured** |
|
|
107
|
+
| macOS | CI matrix (py3.8 + py3.13), real runners | **measured** |
|
|
108
|
+
|
|
83
109
|
## The loop, in short
|
|
84
110
|
|
|
85
111
|
1. **Model first.** `/uscha-discovery` (new) or `/uscha-adr-refine` (known feature) writes
|
|
@@ -135,7 +161,11 @@ audits/ # adversarial audit outputs
|
|
|
135
161
|
|
|
136
162
|
The rules are in [`CLAUDE.md`](CLAUDE.md). The short version: no doc may claim what the
|
|
137
163
|
engine does not do; the ES and EN twins travel together; every engine change carries a
|
|
138
|
-
smoke test; and the agent
|
|
164
|
+
smoke test; and a PreToolUse hook stops the agent from writing a `.approved` golden.
|
|
165
|
+
**Scoped honestly**: that hook is a *best-effort* guard and it is registered on the Claude
|
|
166
|
+
target only — it inspects a tool call as TEXT, so an indirect write (a script that assembles
|
|
167
|
+
the filename, a symlink) gets through, and every other target reports `golden_guard:
|
|
168
|
+
advisory`. The MEASURED control is `golden-diff`, which compares bytes.
|
|
139
169
|
|
|
140
170
|
## History
|
|
141
171
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@andresmassello/uscha",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.56.0",
|
|
4
4
|
"description": "Spec-driven development for LLM coding agents: 9 skills + a stdlib evidence engine. Facts block, guesses advise; the human approves.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Andres Massello",
|
|
7
|
+
"url": "https://github.com/andresmassello"
|
|
8
|
+
},
|
|
5
9
|
"bin": {
|
|
6
10
|
"uscha": "bin/uscha.js",
|
|
7
11
|
"uscha-kit": "bin/uscha.js"
|