@andresmassello/uscha 1.53.0 → 1.54.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 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.53.0** <!-- uscha:version --> · [uscha.dev](https://uscha.dev) ·
44
- [changelog](https://github.com/andresmassello/uscha/blob/main/uscha-kit/CHANGELOG-1.53.0.md)
43
+ **Kit v1.54.0** <!-- uscha:version --> · [uscha.dev](https://uscha.dev) ·
44
+ [changelog](https://github.com/andresmassello/uscha/blob/main/uscha-kit/CHANGELOG-1.54.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.53.0",
3
+ "version": "1.54.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.
@@ -18,6 +18,34 @@ The human brings the idea, the constraints and the reference material. **You bri
18
18
  shape.** Your job is to interrogate until there is a shared system shape, and to write
19
19
  the documents as you go — not to ask the human to design the system for you.
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 · discovery · 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 grill you ONE question at a time, each with my recommended answer. You decide.
33
+ Output: CONTEXT.md · SPEC.md · docs/adr/*.md · ACCEPTANCE.md · RISKS.md
34
+ Next: `/uscha-devloop` builds against the package. No code until the package exists.
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,36 @@ disable-model-invocation: false
18
18
  opposite. The system already runs; its observable behavior is the ground truth. **You do
19
19
  not invent anything — you characterize what is already there, as facts.**
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 · reverse-discovery · 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 EXTRACT facts from the system that already exists. I never invent its spec -- you write that reading my facts.
33
+ Output: SYSTEM-MAP.md · DISCOVERY-SUMMARY.md -- endpoints, contracts, dependency graph,
34
+ module candidates. Facts only: the SPEC and the ADRs are yours to write.
35
+ Next: `/uscha-characterize` freezes current behavior and a HUMAN approves the golden;
36
+ only then do you write the migration SPEC, reading these facts + that golden.
37
+ Stop: say so at any point -- whatever is already written stays.
38
+ ```
39
+
40
+ **Bilingual by construction.** The labels (`START`, `Method`, `Here`, `Output`, `Next`,
41
+ `Stop`) stay VERBATIM in English -- they are the method's vocabulary and the smoke suite checks
42
+ for them mechanically, which is only possible if they never move. The wording after each label
43
+ is the canonical English; **render it in the operator's language**. If they are writing to you
44
+ in Spanish, the whole block reads in Spanish under English labels. Do not translate the labels,
45
+ do not leave the content in English when they are not writing in English.
46
+
47
+ Unlike the close block, `Next` here MAY name the nominal route: on a first run there is no
48
+ measured state to derive from yet, so the nominal path is the honest answer. From the close
49
+ block onward, derived state wins.
50
+
21
51
  ## Orientation markers (non-negotiable)
22
52
 
23
53
  The operator must never have to ask "where am I?" or "what happens now?". Two markers, always.
@@ -21,6 +21,34 @@ contract + `qa_ledger.py rubric-ingest` (stdlib, runs anywhere). ANY runner can
21
21
  the grader — this skill just wraps the neutral prompt so Claude Code users get it
22
22
  in one command. Never add Claude-specific behavior to the contract.
23
23
 
24
+ ## First contact (show ONCE, then never again)
25
+
26
+ **Only when this project has no uscha artifacts yet** -- no `QA-LEDGER.json`, no `SPEC.md` or
27
+ `ACCEPTANCE.md`, no `docs/adr/` -- open with this block, then start working. If any of those
28
+ exist, the operator already knows the method: skip it entirely and go straight to the
29
+ breadcrumb. Repeating it every run would be exactly the ceremony the method forbids.
30
+
31
+ ```
32
+ [uscha · rubric · START]
33
+ Method: you bring the idea, the method builds the rest. Facts block, guesses advise;
34
+ nothing closes on a checkbox, and the human approves the merge.
35
+ Here: I grade what tests cannot: conventions, error handling, API ergonomics, doc quality -- against your versioned RUBRIC.md.
36
+ Output: a graded verdict ingested into the ledger (advisory unless you declared it a gate)
37
+ Next: back to `/uscha-devloop`, or the human gate if the loop already converged.
38
+ Stop: say so at any point -- whatever is already written stays.
39
+ ```
40
+
41
+ **Bilingual by construction.** The labels (`START`, `Method`, `Here`, `Output`, `Next`,
42
+ `Stop`) stay VERBATIM in English -- they are the method's vocabulary and the smoke suite checks
43
+ for them mechanically, which is only possible if they never move. The wording after each label
44
+ is the canonical English; **render it in the operator's language**. If they are writing to you
45
+ in Spanish, the whole block reads in Spanish under English labels. Do not translate the labels,
46
+ do not leave the content in English when they are not writing in English.
47
+
48
+ Unlike the close block, `Next` here MAY name the nominal route: on a first run there is no
49
+ measured state to derive from yet, so the nominal path is the honest answer. From the close
50
+ block onward, derived state wins.
51
+
24
52
  ## Orientation markers (non-negotiable)
25
53
 
26
54
  The operator must never have to ask "where am I?" or "what happens now?". Two markers, always.
@@ -21,6 +21,34 @@ switch between at any time:
21
21
  - **Technical track** — architecture, modules, data flow, contracts, QA results,
22
22
  coverage, known deferred issues.
23
23
 
24
+ ## First contact (show ONCE, then never again)
25
+
26
+ **Only when this project has no uscha artifacts yet** -- no `QA-LEDGER.json`, no `SPEC.md` or
27
+ `ACCEPTANCE.md`, no `docs/adr/` -- open with this block, then start working. If any of those
28
+ exist, the operator already knows the method: skip it entirely and go straight to the
29
+ breadcrumb. Repeating it every run would be exactly the ceremony the method forbids.
30
+
31
+ ```
32
+ [uscha · sysdoc · START]
33
+ Method: you bring the idea, the method builds the rest. Facts block, guesses advise;
34
+ nothing closes on a checkbox, and the human approves the merge.
35
+ Here: I build a two-track deck (commercial + technical) from what the ledger already measured.
36
+ Output: a single self-contained HTML deck
37
+ Next: nothing -- this is a read-only artifact you share.
38
+ Stop: say so at any point -- whatever is already written stays.
39
+ ```
40
+
41
+ **Bilingual by construction.** The labels (`START`, `Method`, `Here`, `Output`, `Next`,
42
+ `Stop`) stay VERBATIM in English -- they are the method's vocabulary and the smoke suite checks
43
+ for them mechanically, which is only possible if they never move. The wording after each label
44
+ is the canonical English; **render it in the operator's language**. If they are writing to you
45
+ in Spanish, the whole block reads in Spanish under English labels. Do not translate the labels,
46
+ do not leave the content in English when they are not writing in English.
47
+
48
+ Unlike the close block, `Next` here MAY name the nominal route: on a first run there is no
49
+ measured state to derive from yet, so the nominal path is the honest answer. From the close
50
+ block onward, derived state wins.
51
+
24
52
  ## Orientation markers (non-negotiable)
25
53
 
26
54
  The operator must never have to ask "where am I?" or "what happens now?". Two markers, always.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "uscha",
4
- "version": "1.53.0",
4
+ "version": "1.54.0",
5
5
  "displayName": "Uscha",
6
6
  "description": "Spec-driven development for LLM coding agents: 9 skills (discovery, adr-refine, reverse-discovery, characterize, devloop, sysdoc, rubric, mirador, status) + a stdlib measurement engine (qa_ledger.py, 29 subcommands + universal installer + npm/npx router). Facts block, guesses advise; the human approves.",
7
7
  "author": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uscha",
3
- "version": "1.53.0",
3
+ "version": "1.54.0",
4
4
  "description": "Uscha spec-driven development methodology for coding agents. Includes npm/npx router.",
5
5
  "author": {
6
6
  "name": "Andres Massello",
@@ -1,6 +1,6 @@
1
1
  # uscha-kit
2
2
 
3
- **Kit version:** v1.53.0 <!-- uscha:version --> · **[uscha.dev](https://uscha.dev)**
3
+ **Kit version:** v1.54.0 <!-- uscha:version --> · **[uscha.dev](https://uscha.dev)**
4
4
 
5
5
  Spec-driven orchestrator + multi-repo QA for Claude Code, with a deterministic ledger.
6
6
  **Nine skills** (`uscha-discovery`, `uscha-adr-refine`, `uscha-devloop`, `uscha-sysdoc`, `uscha-reverse-discovery`,
package/uscha-kit/VERSION CHANGED
@@ -1 +1 @@
1
- uscha-kit 1.53.0
1
+ uscha-kit 1.54.0
@@ -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.
@@ -18,6 +18,34 @@ The human brings the idea, the constraints and the reference material. **You bri
18
18
  shape.** Your job is to interrogate until there is a shared system shape, and to write
19
19
  the documents as you go — not to ask the human to design the system for you.
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 · discovery · 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 grill you ONE question at a time, each with my recommended answer. You decide.
33
+ Output: CONTEXT.md · SPEC.md · docs/adr/*.md · ACCEPTANCE.md · RISKS.md
34
+ Next: `/uscha-devloop` builds against the package. No code until the package exists.
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,36 @@ disable-model-invocation: false
18
18
  opposite. The system already runs; its observable behavior is the ground truth. **You do
19
19
  not invent anything — you characterize what is already there, as facts.**
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 · reverse-discovery · 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 EXTRACT facts from the system that already exists. I never invent its spec -- you write that reading my facts.
33
+ Output: SYSTEM-MAP.md · DISCOVERY-SUMMARY.md -- endpoints, contracts, dependency graph,
34
+ module candidates. Facts only: the SPEC and the ADRs are yours to write.
35
+ Next: `/uscha-characterize` freezes current behavior and a HUMAN approves the golden;
36
+ only then do you write the migration SPEC, reading these facts + that golden.
37
+ Stop: say so at any point -- whatever is already written stays.
38
+ ```
39
+
40
+ **Bilingual by construction.** The labels (`START`, `Method`, `Here`, `Output`, `Next`,
41
+ `Stop`) stay VERBATIM in English -- they are the method's vocabulary and the smoke suite checks
42
+ for them mechanically, which is only possible if they never move. The wording after each label
43
+ is the canonical English; **render it in the operator's language**. If they are writing to you
44
+ in Spanish, the whole block reads in Spanish under English labels. Do not translate the labels,
45
+ do not leave the content in English when they are not writing in English.
46
+
47
+ Unlike the close block, `Next` here MAY name the nominal route: on a first run there is no
48
+ measured state to derive from yet, so the nominal path is the honest answer. From the close
49
+ block onward, derived state wins.
50
+
21
51
  ## Orientation markers (non-negotiable)
22
52
 
23
53
  The operator must never have to ask "where am I?" or "what happens now?". Two markers, always.
@@ -21,6 +21,34 @@ contract + `qa_ledger.py rubric-ingest` (stdlib, runs anywhere). ANY runner can
21
21
  the grader — this skill just wraps the neutral prompt so Claude Code users get it
22
22
  in one command. Never add Claude-specific behavior to the contract.
23
23
 
24
+ ## First contact (show ONCE, then never again)
25
+
26
+ **Only when this project has no uscha artifacts yet** -- no `QA-LEDGER.json`, no `SPEC.md` or
27
+ `ACCEPTANCE.md`, no `docs/adr/` -- open with this block, then start working. If any of those
28
+ exist, the operator already knows the method: skip it entirely and go straight to the
29
+ breadcrumb. Repeating it every run would be exactly the ceremony the method forbids.
30
+
31
+ ```
32
+ [uscha · rubric · START]
33
+ Method: you bring the idea, the method builds the rest. Facts block, guesses advise;
34
+ nothing closes on a checkbox, and the human approves the merge.
35
+ Here: I grade what tests cannot: conventions, error handling, API ergonomics, doc quality -- against your versioned RUBRIC.md.
36
+ Output: a graded verdict ingested into the ledger (advisory unless you declared it a gate)
37
+ Next: back to `/uscha-devloop`, or the human gate if the loop already converged.
38
+ Stop: say so at any point -- whatever is already written stays.
39
+ ```
40
+
41
+ **Bilingual by construction.** The labels (`START`, `Method`, `Here`, `Output`, `Next`,
42
+ `Stop`) stay VERBATIM in English -- they are the method's vocabulary and the smoke suite checks
43
+ for them mechanically, which is only possible if they never move. The wording after each label
44
+ is the canonical English; **render it in the operator's language**. If they are writing to you
45
+ in Spanish, the whole block reads in Spanish under English labels. Do not translate the labels,
46
+ do not leave the content in English when they are not writing in English.
47
+
48
+ Unlike the close block, `Next` here MAY name the nominal route: on a first run there is no
49
+ measured state to derive from yet, so the nominal path is the honest answer. From the close
50
+ block onward, derived state wins.
51
+
24
52
  ## Orientation markers (non-negotiable)
25
53
 
26
54
  The operator must never have to ask "where am I?" or "what happens now?". Two markers, always.
@@ -21,6 +21,34 @@ switch between at any time:
21
21
  - **Technical track** — architecture, modules, data flow, contracts, QA results,
22
22
  coverage, known deferred issues.
23
23
 
24
+ ## First contact (show ONCE, then never again)
25
+
26
+ **Only when this project has no uscha artifacts yet** -- no `QA-LEDGER.json`, no `SPEC.md` or
27
+ `ACCEPTANCE.md`, no `docs/adr/` -- open with this block, then start working. If any of those
28
+ exist, the operator already knows the method: skip it entirely and go straight to the
29
+ breadcrumb. Repeating it every run would be exactly the ceremony the method forbids.
30
+
31
+ ```
32
+ [uscha · sysdoc · START]
33
+ Method: you bring the idea, the method builds the rest. Facts block, guesses advise;
34
+ nothing closes on a checkbox, and the human approves the merge.
35
+ Here: I build a two-track deck (commercial + technical) from what the ledger already measured.
36
+ Output: a single self-contained HTML deck
37
+ Next: nothing -- this is a read-only artifact you share.
38
+ Stop: say so at any point -- whatever is already written stays.
39
+ ```
40
+
41
+ **Bilingual by construction.** The labels (`START`, `Method`, `Here`, `Output`, `Next`,
42
+ `Stop`) stay VERBATIM in English -- they are the method's vocabulary and the smoke suite checks
43
+ for them mechanically, which is only possible if they never move. The wording after each label
44
+ is the canonical English; **render it in the operator's language**. If they are writing to you
45
+ in Spanish, the whole block reads in Spanish under English labels. Do not translate the labels,
46
+ do not leave the content in English when they are not writing in English.
47
+
48
+ Unlike the close block, `Next` here MAY name the nominal route: on a first run there is no
49
+ measured state to derive from yet, so the nominal path is the honest answer. From the close
50
+ block onward, derived state wins.
51
+
24
52
  ## Orientation markers (non-negotiable)
25
53
 
26
54
  The operator must never have to ask "where am I?" or "what happens now?". Two markers, always.
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.53.0",
2
+ "version": "1.54.0",
3
3
  "project": null,
4
4
  "defaults": {
5
5
  "coverage_threshold": 60,