@andresmassello/uscha 2.5.0 → 2.6.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.
Files changed (29) hide show
  1. package/README.md +3 -3
  2. package/package.json +1 -1
  3. package/uscha-kit/.claude/skills/uscha-adr-refine/SKILL.md +1 -1
  4. package/uscha-kit/.claude/skills/uscha-characterize/SKILL.md +1 -1
  5. package/uscha-kit/.claude/skills/uscha-devloop/SKILL.md +35 -1
  6. package/uscha-kit/.claude/skills/uscha-devloop/qa_ledger.py +452 -22
  7. package/uscha-kit/.claude/skills/uscha-discovery/SKILL.md +1 -1
  8. package/uscha-kit/.claude/skills/uscha-mirador/SKILL.md +1 -1
  9. package/uscha-kit/.claude/skills/uscha-reverse-discovery/SKILL.md +1 -1
  10. package/uscha-kit/.claude/skills/uscha-rubric/SKILL.md +1 -1
  11. package/uscha-kit/.claude/skills/uscha-status/SKILL.md +1 -1
  12. package/uscha-kit/.claude/skills/uscha-sysdoc/SKILL.md +1 -1
  13. package/uscha-kit/.claude-plugin/plugin.json +2 -2
  14. package/uscha-kit/.codex-plugin/plugin.json +1 -1
  15. package/uscha-kit/README.md +34 -3
  16. package/uscha-kit/VERSION +1 -1
  17. package/uscha-kit/WORKBENCH.md +1 -1
  18. package/uscha-kit/skills/uscha-adr-refine/SKILL.md +1 -1
  19. package/uscha-kit/skills/uscha-characterize/SKILL.md +1 -1
  20. package/uscha-kit/skills/uscha-devloop/SKILL.md +35 -1
  21. package/uscha-kit/skills/uscha-devloop/qa_ledger.py +452 -22
  22. package/uscha-kit/skills/uscha-discovery/SKILL.md +1 -1
  23. package/uscha-kit/skills/uscha-mirador/SKILL.md +1 -1
  24. package/uscha-kit/skills/uscha-reverse-discovery/SKILL.md +1 -1
  25. package/uscha-kit/skills/uscha-rubric/SKILL.md +1 -1
  26. package/uscha-kit/skills/uscha-status/SKILL.md +1 -1
  27. package/uscha-kit/skills/uscha-sysdoc/SKILL.md +1 -1
  28. package/uscha-kit/templates/CONSTITUTION.md +14 -0
  29. package/uscha-kit/uscha.config.json +2 -1
@@ -199,6 +199,20 @@ enforcing the record is the engine's job. It is never resolved by "working aroun
199
199
  convergence blocked, and `phase --require pr-ready` refuses naming the missing check. A CI
200
200
  system this engine does not read is reported `unknown`, never green and never red. Release,
201
201
  reset and the RUNBOOK are part of done, not of the last week.
202
+ - The **QA-tool readiness** invariant is measured by `qa_ledger.py qa-tools-check --repo R` (ADR-051):
203
+ every tool in the effective `qa_tools_order` is resolved to a SOURCE — a project skill, a global
204
+ skill (under any agent skills root the installer knows), an installed+enabled plugin, a harness
205
+ built-in (`code-review`, assumed and reported honestly as *not measured*), a tool the human
206
+ declared in `defaults.qa_tools_external` (per key: the LIVE project config wins over the
207
+ ledger's frozen copy when it declares the key, and falls back to it when it omits it), or
208
+ **MISSING**. A MISSING tool is a **BLOCKER** persisted as
209
+ `gate:qa-tools` — readiness cap ≤ 65, convergence blocked, and `phase --require pr-ready`
210
+ refuses naming the tool — under **every** profile: "a declared QA tool is not installed" is a
211
+ fact, not an opinion, so there is no profile knob. `qa-tools` is a FACT kind written only by
212
+ `qa-tools-check`: there is no `log-gate --kind qa-tools` door, because the engine measures this
213
+ fact itself and a typed pass would be a narrated one. With no `qa_tools_order` declared there
214
+ is nothing to resolve: UNMEASURED, never a pass. A loop can no longer converge trusting a QA
215
+ tool that never ran.
202
216
  - The **Golden (INV-GOLDEN-01)** invariant is measured by `qa_ledger.py golden-diff`: any `.received`
203
217
  that does not match its `.approved` (or is unapproved) = **DIVERGE**, cutting the chain before judgment-day.
204
218
  The agent does not touch `.approved` (ideally a `PreToolUse` hook makes it impossible).
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "_comment": "COMPREHENSIVE REFERENCE, not a project config. Every knob the engine and the skills understand, at the kit's own value, so a human can read what can be declared. `uscha init` does NOT copy this file: it GENERATES a minimal project config, because a copied default is an explicit declaration and an explicit declaration outranks the preset named by defaults.risk_profile (ADR-001, as amended). Copy a block from here into your project only when you mean to override the engine default or the preset. NOTE: no version string may be written into this comment -- the release script requires exactly one occurrence of the version in this file (I3), and a second one refuses the next release.",
3
- "version": "2.5.0",
3
+ "version": "2.6.0",
4
4
  "project": null,
5
5
  "defaults": {
6
6
  "coverage_threshold": 60,
@@ -16,6 +16,7 @@
16
16
  "judgment-day",
17
17
  "improve"
18
18
  ],
19
+ "qa_tools_external": [],
19
20
  "test_command_maven": "mvn -q -DskipITs=false test",
20
21
  "test_command_flutter": "flutter test --coverage",
21
22
  "test_command_python": "pytest --cov --cov-report=xml:reports/coverage.xml --junitxml=reports/junit.xml",