@andresmassello/uscha 1.82.0 → 1.83.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,7 +40,7 @@ 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.82.0** <!-- uscha:version --> · [uscha.dev](https://uscha.dev) ·
43
+ **Kit v1.83.0** <!-- uscha:version --> · [uscha.dev](https://uscha.dev) ·
44
44
  [changelog](https://github.com/andresmassello/uscha/blob/main/uscha-kit/CHANGELOG.md)
45
45
  (the per-release changelogs live in the repo, not in the npm tarball)
46
46
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andresmassello/uscha",
3
- "version": "1.82.0",
3
+ "version": "1.83.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
  "author": {
6
6
  "name": "Andres Massello",
@@ -5976,7 +5976,7 @@ def cmd_lang_compare(args):
5976
5976
  """Compare a FREE-prose arm and a CONTROLLED (EARS+STE) arm of the same canonical package
5977
5977
  (ADR-019). The two arms MUST share one withheld oracle -- a differing oracle is a mechanical
5978
5978
  refusal, because the whole comparison rests on the arms targeting the same behaviour. Emits
5979
- the per-arm metrics, the delta, and a COMPUTED verdict (REDUCED / NO EFFECT / WORSE); a null
5979
+ the per-arm metrics, the delta, and a COMPUTED verdict (REDUCED / IMPROVED / MIXED / NO EFFECT / WORSE); a null
5980
5980
  is a first-class result. Consults no model."""
5981
5981
  hf, hc = _oracle_hash(args.free), _oracle_hash(args.controlled)
5982
5982
  if hf is None or hc is None:
@@ -5999,15 +5999,22 @@ def cmd_lang_compare(args):
5999
5999
  d_green = ctrl["greens"] - free["greens"]
6000
6000
  pf, pc = free["mean_passrate"], ctrl["mean_passrate"]
6001
6001
  d_pass = (pc - pf) if (pf is not None and pc is not None) else None
6002
- # Verdict is BEHAVIOUR-FIRST (the M4 lesson: lower variance toward a WORSE answer is not a
6003
- # win). A regression is a lost all-green OR a mean pass-rate drop beyond the pass-rate margin.
6002
+ # Verdict is BEHAVIOUR-FIRST in BOTH directions. The M4 lesson: lower variance toward a
6003
+ # WORSE answer is not a win (MIXED). Its mirror, the ADR-025 scheduler lesson: higher
6004
+ # variance toward a BETTER answer is not a loss (IMPROVED) -- two compilers converging on
6005
+ # the SAME bug reads as low variance, and a rewrite that separates them raises variance
6006
+ # while fixing behaviour. A regression is a lost all-green OR a mean pass-rate drop beyond
6007
+ # the pass-rate margin; an improvement is the exact mirror. ADR-019 + ADR-026.
6004
6008
  variance_reduced = d_var is not None and d_var <= -_LANG_MARGIN
6005
6009
  variance_worse = d_var is not None and d_var >= _LANG_MARGIN
6006
6010
  regressed = (d_green < 0) or (d_pass is not None and d_pass <= -_LANG_PR_MARGIN)
6011
+ improved = (d_green > 0) or (d_pass is not None and d_pass >= _LANG_PR_MARGIN)
6007
6012
  if variance_reduced and regressed:
6008
6013
  verdict = "MIXED" # variance down but behaviour regressed
6009
6014
  elif variance_reduced:
6010
- verdict = "REDUCED" # variance down, behaviour held
6015
+ verdict = "REDUCED" # variance down, behaviour held or better
6016
+ elif improved and not regressed:
6017
+ verdict = "IMPROVED" # behaviour up, variance not down
6011
6018
  elif variance_worse or regressed:
6012
6019
  verdict = "WORSE"
6013
6020
  else:
@@ -6016,6 +6023,7 @@ def cmd_lang_compare(args):
6016
6023
  "unresolved_intent_count": round(d_ui, 3), "oracle_green": d_green,
6017
6024
  "mean_passrate": round(d_pass, 4) if d_pass is not None else None}
6018
6025
  report = {"free": free, "controlled": ctrl, "delta": delta, "verdict": verdict,
6026
+ "regressed": regressed, "improved": improved,
6019
6027
  "margin": _LANG_MARGIN, "passrate_margin": _LANG_PR_MARGIN, "oracle_shared": True}
6020
6028
  if args.out:
6021
6029
  with open(args.out, "w", encoding="utf-8", newline="\n") as fh:
@@ -6078,7 +6086,15 @@ def _render_lang_md(r):
6078
6086
  "the delta here. A null result, reported as a null — not a failure.",
6079
6087
  "WORSE": "Controlled authoring increased variance, or regressed behaviour (lost an "
6080
6088
  "all-green or dropped mean pass-rate) beyond the margins — reported "
6081
- "honestly."}[r["verdict"]],
6089
+ "honestly.",
6090
+ "IMPROVED": "Controlled authoring IMPROVED behaviour (gained an all-green or raised "
6091
+ "mean pass-rate beyond the %.2f margin) while inter-compiler variance "
6092
+ "did not fall. Behaviour won; variance did not — check whether the free "
6093
+ "arm's low variance was convergence on a shared reading (right or "
6094
+ "wrong): two compilers resolving the same ambiguity the same way read "
6095
+ "as agreement, and a rewrite that separates them raises variance "
6096
+ "while moving behaviour."
6097
+ % r.get("passrate_margin", 0.02)}[r["verdict"]],
6082
6098
  "", "*The oracle is byte-identical across both arms, so behaviour is held fixed; "
6083
6099
  "the only variable is the authoring discipline. The judgement of \"same semantic "
6084
6100
  "content\" between the two canonical packages is human — a stated limitation.*", ""]
@@ -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.82.0",
4
+ "version": "1.83.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, 49 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.82.0",
3
+ "version": "1.83.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.82.0 <!-- uscha:version --> · **[uscha.dev](https://uscha.dev)**
3
+ **Kit version:** v1.83.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.82.0
1
+ uscha-kit 1.83.0
@@ -0,0 +1 @@
1
+ {"AC-SH-01": true, "AC-SH-02": true, "AC-SH-03": true, "AC-LI-01": true, "AC-LI-02": true, "AC-LI-03": true}
@@ -5976,7 +5976,7 @@ def cmd_lang_compare(args):
5976
5976
  """Compare a FREE-prose arm and a CONTROLLED (EARS+STE) arm of the same canonical package
5977
5977
  (ADR-019). The two arms MUST share one withheld oracle -- a differing oracle is a mechanical
5978
5978
  refusal, because the whole comparison rests on the arms targeting the same behaviour. Emits
5979
- the per-arm metrics, the delta, and a COMPUTED verdict (REDUCED / NO EFFECT / WORSE); a null
5979
+ the per-arm metrics, the delta, and a COMPUTED verdict (REDUCED / IMPROVED / MIXED / NO EFFECT / WORSE); a null
5980
5980
  is a first-class result. Consults no model."""
5981
5981
  hf, hc = _oracle_hash(args.free), _oracle_hash(args.controlled)
5982
5982
  if hf is None or hc is None:
@@ -5999,15 +5999,22 @@ def cmd_lang_compare(args):
5999
5999
  d_green = ctrl["greens"] - free["greens"]
6000
6000
  pf, pc = free["mean_passrate"], ctrl["mean_passrate"]
6001
6001
  d_pass = (pc - pf) if (pf is not None and pc is not None) else None
6002
- # Verdict is BEHAVIOUR-FIRST (the M4 lesson: lower variance toward a WORSE answer is not a
6003
- # win). A regression is a lost all-green OR a mean pass-rate drop beyond the pass-rate margin.
6002
+ # Verdict is BEHAVIOUR-FIRST in BOTH directions. The M4 lesson: lower variance toward a
6003
+ # WORSE answer is not a win (MIXED). Its mirror, the ADR-025 scheduler lesson: higher
6004
+ # variance toward a BETTER answer is not a loss (IMPROVED) -- two compilers converging on
6005
+ # the SAME bug reads as low variance, and a rewrite that separates them raises variance
6006
+ # while fixing behaviour. A regression is a lost all-green OR a mean pass-rate drop beyond
6007
+ # the pass-rate margin; an improvement is the exact mirror. ADR-019 + ADR-026.
6004
6008
  variance_reduced = d_var is not None and d_var <= -_LANG_MARGIN
6005
6009
  variance_worse = d_var is not None and d_var >= _LANG_MARGIN
6006
6010
  regressed = (d_green < 0) or (d_pass is not None and d_pass <= -_LANG_PR_MARGIN)
6011
+ improved = (d_green > 0) or (d_pass is not None and d_pass >= _LANG_PR_MARGIN)
6007
6012
  if variance_reduced and regressed:
6008
6013
  verdict = "MIXED" # variance down but behaviour regressed
6009
6014
  elif variance_reduced:
6010
- verdict = "REDUCED" # variance down, behaviour held
6015
+ verdict = "REDUCED" # variance down, behaviour held or better
6016
+ elif improved and not regressed:
6017
+ verdict = "IMPROVED" # behaviour up, variance not down
6011
6018
  elif variance_worse or regressed:
6012
6019
  verdict = "WORSE"
6013
6020
  else:
@@ -6016,6 +6023,7 @@ def cmd_lang_compare(args):
6016
6023
  "unresolved_intent_count": round(d_ui, 3), "oracle_green": d_green,
6017
6024
  "mean_passrate": round(d_pass, 4) if d_pass is not None else None}
6018
6025
  report = {"free": free, "controlled": ctrl, "delta": delta, "verdict": verdict,
6026
+ "regressed": regressed, "improved": improved,
6019
6027
  "margin": _LANG_MARGIN, "passrate_margin": _LANG_PR_MARGIN, "oracle_shared": True}
6020
6028
  if args.out:
6021
6029
  with open(args.out, "w", encoding="utf-8", newline="\n") as fh:
@@ -6078,7 +6086,15 @@ def _render_lang_md(r):
6078
6086
  "the delta here. A null result, reported as a null — not a failure.",
6079
6087
  "WORSE": "Controlled authoring increased variance, or regressed behaviour (lost an "
6080
6088
  "all-green or dropped mean pass-rate) beyond the margins — reported "
6081
- "honestly."}[r["verdict"]],
6089
+ "honestly.",
6090
+ "IMPROVED": "Controlled authoring IMPROVED behaviour (gained an all-green or raised "
6091
+ "mean pass-rate beyond the %.2f margin) while inter-compiler variance "
6092
+ "did not fall. Behaviour won; variance did not — check whether the free "
6093
+ "arm's low variance was convergence on a shared reading (right or "
6094
+ "wrong): two compilers resolving the same ambiguity the same way read "
6095
+ "as agreement, and a rewrite that separates them raises variance "
6096
+ "while moving behaviour."
6097
+ % r.get("passrate_margin", 0.02)}[r["verdict"]],
6082
6098
  "", "*The oracle is byte-identical across both arms, so behaviour is held fixed; "
6083
6099
  "the only variable is the authoring discipline. The judgement of \"same semantic "
6084
6100
  "content\" between the two canonical packages is human — a stated limitation.*", ""]
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.82.0",
2
+ "version": "1.83.0",
3
3
  "project": null,
4
4
  "defaults": {
5
5
  "coverage_threshold": 60,