@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.
- package/README.md +3 -3
- package/package.json +1 -1
- package/uscha-kit/.claude/skills/uscha-adr-refine/SKILL.md +1 -1
- package/uscha-kit/.claude/skills/uscha-characterize/SKILL.md +1 -1
- package/uscha-kit/.claude/skills/uscha-devloop/SKILL.md +35 -1
- package/uscha-kit/.claude/skills/uscha-devloop/qa_ledger.py +452 -22
- package/uscha-kit/.claude/skills/uscha-discovery/SKILL.md +1 -1
- package/uscha-kit/.claude/skills/uscha-mirador/SKILL.md +1 -1
- package/uscha-kit/.claude/skills/uscha-reverse-discovery/SKILL.md +1 -1
- package/uscha-kit/.claude/skills/uscha-rubric/SKILL.md +1 -1
- package/uscha-kit/.claude/skills/uscha-status/SKILL.md +1 -1
- package/uscha-kit/.claude/skills/uscha-sysdoc/SKILL.md +1 -1
- package/uscha-kit/.claude-plugin/plugin.json +2 -2
- package/uscha-kit/.codex-plugin/plugin.json +1 -1
- package/uscha-kit/README.md +34 -3
- package/uscha-kit/VERSION +1 -1
- package/uscha-kit/WORKBENCH.md +1 -1
- package/uscha-kit/skills/uscha-adr-refine/SKILL.md +1 -1
- package/uscha-kit/skills/uscha-characterize/SKILL.md +1 -1
- package/uscha-kit/skills/uscha-devloop/SKILL.md +35 -1
- package/uscha-kit/skills/uscha-devloop/qa_ledger.py +452 -22
- package/uscha-kit/skills/uscha-discovery/SKILL.md +1 -1
- package/uscha-kit/skills/uscha-mirador/SKILL.md +1 -1
- package/uscha-kit/skills/uscha-reverse-discovery/SKILL.md +1 -1
- package/uscha-kit/skills/uscha-rubric/SKILL.md +1 -1
- package/uscha-kit/skills/uscha-status/SKILL.md +1 -1
- package/uscha-kit/skills/uscha-sysdoc/SKILL.md +1 -1
- package/uscha-kit/templates/CONSTITUTION.md +14 -0
- 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.
|
|
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",
|