@andresmassello/uscha 1.53.0 → 1.55.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 +2 -2
- package/package.json +1 -1
- package/uscha-kit/.claude/skills/uscha-adr-refine/SKILL.md +28 -0
- package/uscha-kit/.claude/skills/uscha-characterize/SKILL.md +28 -0
- package/uscha-kit/.claude/skills/uscha-devloop/SKILL.md +28 -0
- package/uscha-kit/.claude/skills/uscha-devloop/qa_ledger.py +171 -171
- package/uscha-kit/.claude/skills/uscha-discovery/SKILL.md +28 -0
- package/uscha-kit/.claude/skills/uscha-reverse-discovery/SKILL.md +30 -0
- package/uscha-kit/.claude/skills/uscha-rubric/SKILL.md +28 -0
- package/uscha-kit/.claude/skills/uscha-sysdoc/SKILL.md +28 -0
- package/uscha-kit/.claude-plugin/plugin.json +1 -1
- package/uscha-kit/.codex-plugin/plugin.json +1 -1
- package/uscha-kit/README.md +1 -1
- package/uscha-kit/VERSION +1 -1
- package/uscha-kit/skills/uscha-adr-refine/SKILL.md +28 -0
- package/uscha-kit/skills/uscha-characterize/SKILL.md +28 -0
- package/uscha-kit/skills/uscha-devloop/SKILL.md +28 -0
- package/uscha-kit/skills/uscha-devloop/qa_ledger.py +171 -171
- package/uscha-kit/skills/uscha-discovery/SKILL.md +28 -0
- package/uscha-kit/skills/uscha-reverse-discovery/SKILL.md +30 -0
- package/uscha-kit/skills/uscha-rubric/SKILL.md +28 -0
- package/uscha-kit/skills/uscha-sysdoc/SKILL.md +28 -0
- 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.55.0** <!-- uscha:version --> · [uscha.dev](https://uscha.dev) ·
|
|
44
|
+
[changelog](https://github.com/andresmassello/uscha/blob/main/uscha-kit/CHANGELOG-1.55.0.md)
|
|
45
45
|
(the per-release changelogs live in the repo, not in the npm tarball)
|
|
46
46
|
|
|
47
47
|
---
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@andresmassello/uscha",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.55.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
5
|
"bin": {
|
|
6
6
|
"uscha": "bin/uscha.js",
|
|
@@ -18,6 +18,34 @@ You convert a rough idea into a development-ready specification. You do this in
|
|
|
18
18
|
phases. **You are NOT a generator. You are an interrogator that distills.** The value
|
|
19
19
|
is in the questions, not in agreeing.
|
|
20
20
|
|
|
21
|
+
## First contact (show ONCE, then never again)
|
|
22
|
+
|
|
23
|
+
**Only when this project has no uscha artifacts yet** -- no `QA-LEDGER.json`, no `SPEC.md` or
|
|
24
|
+
`ACCEPTANCE.md`, no `docs/adr/` -- open with this block, then start working. If any of those
|
|
25
|
+
exist, the operator already knows the method: skip it entirely and go straight to the
|
|
26
|
+
breadcrumb. Repeating it every run would be exactly the ceremony the method forbids.
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
[uscha · adr-refine · START]
|
|
30
|
+
Method: you bring the idea, the method builds the rest. Facts block, guesses advise;
|
|
31
|
+
nothing closes on a checkbox, and the human approves the merge.
|
|
32
|
+
Here: a precision interview on a feature whose shape you already know. I refuse to emit until the gaps close.
|
|
33
|
+
Output: docs/adr/ADR-NNN.md · ACCEPTANCE.md
|
|
34
|
+
Next: `/uscha-devloop` builds against the ADR + ACCEPTANCE.
|
|
35
|
+
Stop: say so at any point -- whatever is already written stays.
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Bilingual by construction.** The labels (`START`, `Method`, `Here`, `Output`, `Next`,
|
|
39
|
+
`Stop`) stay VERBATIM in English -- they are the method's vocabulary and the smoke suite checks
|
|
40
|
+
for them mechanically, which is only possible if they never move. The wording after each label
|
|
41
|
+
is the canonical English; **render it in the operator's language**. If they are writing to you
|
|
42
|
+
in Spanish, the whole block reads in Spanish under English labels. Do not translate the labels,
|
|
43
|
+
do not leave the content in English when they are not writing in English.
|
|
44
|
+
|
|
45
|
+
Unlike the close block, `Next` here MAY name the nominal route: on a first run there is no
|
|
46
|
+
measured state to derive from yet, so the nominal path is the honest answer. From the close
|
|
47
|
+
block onward, derived state wins.
|
|
48
|
+
|
|
21
49
|
## Orientation markers (non-negotiable)
|
|
22
50
|
|
|
23
51
|
The operator must never have to ask "where am I?" or "what happens now?". Two markers, always.
|
|
@@ -18,6 +18,34 @@ return, you encode the same partial understanding that loses logic silently. **Y
|
|
|
18
18
|
what the code DOES, mechanically, by running it — never what it should do.** You may write
|
|
19
19
|
the capture harness; you may NOT create, rename, or edit any `.approved` file.
|
|
20
20
|
|
|
21
|
+
## First contact (show ONCE, then never again)
|
|
22
|
+
|
|
23
|
+
**Only when this project has no uscha artifacts yet** -- no `QA-LEDGER.json`, no `SPEC.md` or
|
|
24
|
+
`ACCEPTANCE.md`, no `docs/adr/` -- open with this block, then start working. If any of those
|
|
25
|
+
exist, the operator already knows the method: skip it entirely and go straight to the
|
|
26
|
+
breadcrumb. Repeating it every run would be exactly the ceremony the method forbids.
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
[uscha · characterize · START]
|
|
30
|
+
Method: you bring the idea, the method builds the rest. Facts block, guesses advise;
|
|
31
|
+
nothing closes on a checkbox, and the human approves the merge.
|
|
32
|
+
Here: I run the ORIGINAL code against real inputs and freeze what it does today.
|
|
33
|
+
Output: tests/golden/*.received -- and I STOP: a HUMAN approves the .approved, never me
|
|
34
|
+
Next: you approve the goldens, then `/uscha-devloop` migrates against them.
|
|
35
|
+
Stop: say so at any point -- whatever is already written stays.
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Bilingual by construction.** The labels (`START`, `Method`, `Here`, `Output`, `Next`,
|
|
39
|
+
`Stop`) stay VERBATIM in English -- they are the method's vocabulary and the smoke suite checks
|
|
40
|
+
for them mechanically, which is only possible if they never move. The wording after each label
|
|
41
|
+
is the canonical English; **render it in the operator's language**. If they are writing to you
|
|
42
|
+
in Spanish, the whole block reads in Spanish under English labels. Do not translate the labels,
|
|
43
|
+
do not leave the content in English when they are not writing in English.
|
|
44
|
+
|
|
45
|
+
Unlike the close block, `Next` here MAY name the nominal route: on a first run there is no
|
|
46
|
+
measured state to derive from yet, so the nominal path is the honest answer. From the close
|
|
47
|
+
block onward, derived state wins.
|
|
48
|
+
|
|
21
49
|
## Orientation markers (non-negotiable)
|
|
22
50
|
|
|
23
51
|
The operator must never have to ask "where am I?" or "what happens now?". Two markers, always.
|
|
@@ -26,6 +26,34 @@ two tiers: **measured** records (snapshots, ingest-gate, log-gate — parsed fro
|
|
|
26
26
|
artifacts; these can block) and **self-reported** agent counts (log-step — narration
|
|
27
27
|
recorded for the retrospective; a measured red always overrides a narrated green).
|
|
28
28
|
|
|
29
|
+
## First contact (show ONCE, then never again)
|
|
30
|
+
|
|
31
|
+
**Only when this project has no uscha artifacts yet** -- no `QA-LEDGER.json`, no `SPEC.md` or
|
|
32
|
+
`ACCEPTANCE.md`, no `docs/adr/` -- open with this block, then start working. If any of those
|
|
33
|
+
exist, the operator already knows the method: skip it entirely and go straight to the
|
|
34
|
+
breadcrumb. Repeating it every run would be exactly the ceremony the method forbids.
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
[uscha · devloop · START]
|
|
38
|
+
Method: you bring the idea, the method builds the rest. Facts block, guesses advise;
|
|
39
|
+
nothing closes on a checkbox, and the human approves the merge.
|
|
40
|
+
Here: plan → build → a severity-gated QA loop that converges instead of chasing zero → PR.
|
|
41
|
+
Output: code, tests, and QA-LEDGER.json (every gate recorded with its evidence)
|
|
42
|
+
Next: the human gate: review the PR and decide the merge. I stop there.
|
|
43
|
+
Stop: say so at any point -- whatever is already written stays.
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Bilingual by construction.** The labels (`START`, `Method`, `Here`, `Output`, `Next`,
|
|
47
|
+
`Stop`) stay VERBATIM in English -- they are the method's vocabulary and the smoke suite checks
|
|
48
|
+
for them mechanically, which is only possible if they never move. The wording after each label
|
|
49
|
+
is the canonical English; **render it in the operator's language**. If they are writing to you
|
|
50
|
+
in Spanish, the whole block reads in Spanish under English labels. Do not translate the labels,
|
|
51
|
+
do not leave the content in English when they are not writing in English.
|
|
52
|
+
|
|
53
|
+
Unlike the close block, `Next` here MAY name the nominal route: on a first run there is no
|
|
54
|
+
measured state to derive from yet, so the nominal path is the honest answer. From the close
|
|
55
|
+
block onward, derived state wins.
|
|
56
|
+
|
|
29
57
|
## Orientation markers (non-negotiable)
|
|
30
58
|
|
|
31
59
|
The operator must never have to ask "where am I?" or "what happens now?". Two markers, always.
|