@andresmassello/uscha 1.80.0 → 1.82.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.80.0** <!-- uscha:version --> · [uscha.dev](https://uscha.dev) ·
43
+ **Kit v1.82.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.80.0",
3
+ "version": "1.82.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",
@@ -5582,19 +5582,20 @@ def _bench_entry(entry_dir, name, fidelity=False, curation=None):
5582
5582
  node_ids_f = {nd["id"] for nd in ir_graph.get("nodes") or []}
5583
5583
  covered_f = set()
5584
5584
  units_f, traced_f = set(), set()
5585
+ # `c` was already parsed above for this same COMPILATION.json; reaching this
5586
+ # block requires `unit` to be set, which only happens after that parse
5587
+ # succeeded -- so `c` is guaranteed defined here, no need to re-open/re-parse.
5585
5588
  try:
5586
- with open(cj, encoding="utf-8-sig") as fh2:
5587
- c2 = json.load(fh2)
5588
- for e2 in c2.get("trace_manifest") or []:
5589
+ for e2 in c.get("trace_manifest") or []:
5589
5590
  traced_f.add(e2.get("unit"))
5590
5591
  for nid in e2.get("implements") or []:
5591
5592
  if nid in node_ids_f:
5592
5593
  covered_f.add(nid)
5593
5594
  for sec in ("source", "tests"):
5594
- for u2 in c2.get(sec) or []:
5595
+ for u2 in c.get(sec) or []:
5595
5596
  if u2.get("unit"):
5596
5597
  units_f.add(u2["unit"])
5597
- except (OSError, ValueError, AttributeError):
5598
+ except AttributeError:
5598
5599
  pass
5599
5600
  sobs, _uns = _extract_static_py(cd, [unit])
5600
5601
  fn_names, cls_names = [], []
@@ -10217,7 +10218,9 @@ def build_parser():
10217
10218
  pbc.add_argument("--bench", required=True,
10218
10219
  help="the bench directory (the store lives at its root)")
10219
10220
  pbc.add_argument("--entry", required=True, help="the archetype entry")
10220
- pbc.add_argument("--dir", required=True, help="the compilation dir (e.g. c-opus)")
10221
+ pbc.add_argument("--dir", "--compilation", dest="dir", required=True,
10222
+ help="the compilation dir (e.g. c-opus); --compilation is an alias "
10223
+ "(bench --dir means the bench root -- a copy-paste hazard)")
10221
10224
  pbc.add_argument("--obs", default=None, help="a single OBS id from --list")
10222
10225
  pbc.add_argument("--verdict", default=None, choices=_BENCH_CURATION_VERDICTS)
10223
10226
  pbc.add_argument("--note", default=None)
@@ -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.80.0",
4
+ "version": "1.82.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.80.0",
3
+ "version": "1.82.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.80.0 <!-- uscha:version --> · **[uscha.dev](https://uscha.dev)**
3
+ **Kit version:** v1.82.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.80.0
1
+ uscha-kit 1.82.0
@@ -1 +1 @@
1
- {"AC-BC-01": true, "AC-BC-02": true, "AC-BC-03": true}
1
+ {"AC-BC-04": true, "AC-BC-01": true, "AC-BC-02": true, "AC-BC-03": true}
@@ -0,0 +1 @@
1
+ {"AC-CL3-01": true, "AC-CL3-02": true, "AC-CL3-03": true}
@@ -5582,19 +5582,20 @@ def _bench_entry(entry_dir, name, fidelity=False, curation=None):
5582
5582
  node_ids_f = {nd["id"] for nd in ir_graph.get("nodes") or []}
5583
5583
  covered_f = set()
5584
5584
  units_f, traced_f = set(), set()
5585
+ # `c` was already parsed above for this same COMPILATION.json; reaching this
5586
+ # block requires `unit` to be set, which only happens after that parse
5587
+ # succeeded -- so `c` is guaranteed defined here, no need to re-open/re-parse.
5585
5588
  try:
5586
- with open(cj, encoding="utf-8-sig") as fh2:
5587
- c2 = json.load(fh2)
5588
- for e2 in c2.get("trace_manifest") or []:
5589
+ for e2 in c.get("trace_manifest") or []:
5589
5590
  traced_f.add(e2.get("unit"))
5590
5591
  for nid in e2.get("implements") or []:
5591
5592
  if nid in node_ids_f:
5592
5593
  covered_f.add(nid)
5593
5594
  for sec in ("source", "tests"):
5594
- for u2 in c2.get(sec) or []:
5595
+ for u2 in c.get(sec) or []:
5595
5596
  if u2.get("unit"):
5596
5597
  units_f.add(u2["unit"])
5597
- except (OSError, ValueError, AttributeError):
5598
+ except AttributeError:
5598
5599
  pass
5599
5600
  sobs, _uns = _extract_static_py(cd, [unit])
5600
5601
  fn_names, cls_names = [], []
@@ -10217,7 +10218,9 @@ def build_parser():
10217
10218
  pbc.add_argument("--bench", required=True,
10218
10219
  help="the bench directory (the store lives at its root)")
10219
10220
  pbc.add_argument("--entry", required=True, help="the archetype entry")
10220
- pbc.add_argument("--dir", required=True, help="the compilation dir (e.g. c-opus)")
10221
+ pbc.add_argument("--dir", "--compilation", dest="dir", required=True,
10222
+ help="the compilation dir (e.g. c-opus); --compilation is an alias "
10223
+ "(bench --dir means the bench root -- a copy-paste hazard)")
10221
10224
  pbc.add_argument("--obs", default=None, help="a single OBS id from --list")
10222
10225
  pbc.add_argument("--verdict", default=None, choices=_BENCH_CURATION_VERDICTS)
10223
10226
  pbc.add_argument("--note", default=None)
@@ -152,7 +152,8 @@ def main():
152
152
  repo = _statusline_repo(cfg)
153
153
  if not repo:
154
154
  return
155
- state = {"label": repo.get("label") or str(repo.get("name", "uscha")).upper(),
155
+ state = {"schema": "uscha/progress@1",
156
+ "label": repo.get("label") or str(repo.get("name", "uscha")).upper(),
156
157
  "pct": None, "done": None, "total": None, "tests": None, "coverage": None,
157
158
  "next": None, "phase": None, "loops": None, "stalled": None,
158
159
  "acceptance_source": None, "measured_at": None, "score": None, "band": None,
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.80.0",
2
+ "version": "1.82.0",
3
3
  "project": null,
4
4
  "defaults": {
5
5
  "coverage_threshold": 60,