@andresmassello/uscha 1.40.2 → 1.43.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 +6 -6
- package/bin/uscha.js +19 -7
- package/package.json +1 -1
- package/uscha-kit/.claude/skills/uscha-adr-refine/SKILL.md +2 -2
- package/uscha-kit/.claude/skills/uscha-devloop/SKILL.md +3 -1
- package/uscha-kit/.claude/skills/uscha-devloop/qa_ledger.py +729 -155
- package/uscha-kit/.claude/skills/uscha-mirador/SKILL.md +22 -7
- package/uscha-kit/.claude/skills/uscha-mirador/mirador-render.py +44 -5
- package/uscha-kit/.claude/skills/uscha-mirador/mirador-watch.ps1 +1 -1
- package/uscha-kit/.claude/skills/uscha-mirador/mirador-watch.sh +1 -1
- package/uscha-kit/.claude/skills/uscha-mirador/mirador.template.html +666 -586
- package/uscha-kit/.claude-plugin/plugin.json +1 -1
- package/uscha-kit/.codex-plugin/plugin.json +1 -1
- package/uscha-kit/CHANGELOG-1.41.0.md +18 -0
- package/uscha-kit/CHANGELOG-1.41.1.md +53 -0
- package/uscha-kit/CHANGELOG-1.41.2.md +34 -0
- package/uscha-kit/CHANGELOG-1.41.3.md +30 -0
- package/uscha-kit/CHANGELOG-1.42.0.md +41 -0
- package/uscha-kit/CHANGELOG-1.43.0.md +37 -0
- package/uscha-kit/INSTALL.md +120 -101
- package/uscha-kit/README.md +24 -13
- package/uscha-kit/VERSION +1 -1
- package/uscha-kit/WORKBENCH.md +19 -5
- package/uscha-kit/hooks/block-approved-writes.py +25 -0
- package/uscha-kit/install-uscha.py +534 -267
- package/uscha-kit/skills/uscha-adr-refine/SKILL.md +2 -2
- package/uscha-kit/skills/uscha-devloop/SKILL.md +3 -1
- package/uscha-kit/skills/uscha-devloop/qa_ledger.py +729 -155
- package/uscha-kit/skills/uscha-mirador/SKILL.md +22 -7
- package/uscha-kit/skills/uscha-mirador/mirador-render.py +44 -5
- package/uscha-kit/skills/uscha-mirador/mirador-watch.ps1 +1 -1
- package/uscha-kit/skills/uscha-mirador/mirador-watch.sh +1 -1
- package/uscha-kit/skills/uscha-mirador/mirador.template.html +666 -586
- package/uscha-kit/templates/CONSTITUTION.md +4 -4
- package/uscha-kit/templates/docs/adr/README.md +19 -19
- package/uscha-kit/tests/ledger-integrity-regressions.py +136 -0
- package/uscha-kit/tests/smoke-engine.sh +1312 -29
- package/uscha-kit/uscha.config.json +1 -1
- package/uscha-kit/workbench-doctor.sh +47 -3
package/README.md
CHANGED
|
@@ -14,13 +14,13 @@ instantiation in Claude Code, the **uscha-kit**.
|
|
|
14
14
|
SpecLoop/
|
|
15
15
|
??? package.json # npm package: @andresmassello/uscha
|
|
16
16
|
??? bin/uscha.js # thin npx router to uscha-kit/install-uscha.py
|
|
17
|
-
├── uscha-kit/ # ★ canonical SOURCE of the kit (v1.
|
|
17
|
+
├── uscha-kit/ # ★ canonical SOURCE of the kit (v1.43.0)
|
|
18
18
|
│ ├── .claude/skills/ # 8 skills: uscha-discovery · uscha-adr-refine · uscha-devloop · uscha-sysdoc
|
|
19
19
|
│ │ # uscha-reverse-discovery · uscha-characterize · uscha-rubric · uscha-mirador
|
|
20
20
|
│ ├── .claude/skills/uscha-devloop/qa_ledger.py # evidence engine (29 subcommands, stdlib)
|
|
21
21
|
│ ├── hooks/ # PreToolUse: the agent never writes .approved (INV-GOLDEN-01)
|
|
22
22
|
│ ├── templates/ # CLAUDE.md · CONSTITUTION.md · .gitattributes · docs/adr
|
|
23
|
-
│ └── CHANGELOG-*.md # 1.2.x → 1.3.0 ("facts block, wired") → 1.4.0 (python) → 1.5.0 (node) → 1.6.0 (go) → 1.7.0 (rust+dotnet) → 1.8.0 (cpp) → 1.9.0 (gradle+swift) → 1.10.0 (traceable acceptance) → 1.11.0 (tests outside the budget) → 1.12.0 (secret-scan) → 1.13.0 (atomic ledger) → 1.14.0 (plateau/stop-signal) → 1.15.0 (golden scrub) → 1.16.0 (regression-capture) → 1.17.0 (threshold provenance) → 1.18.0 (derived FSM) → 1.19.0 (spikes — PragProg backlog CLOSED) → 1.20.0 (global install) → 1.21.0 (namespace uscha-*) → 1.22.0 (doctor) → 1.23.0 (rubric layer) → 1.24.0 (Claude Code plugin) → 1.25.0 (anti-ceremony) → 1.26.0 (waste-check REUSE-FIRST) → 1.27.0 (FTY) → 1.28.0 (measured acceptance %) → 1.29.0 (rebrand → Uscha) → 1.30.0 (dependency gate) → 1.31.0 (evidence freshness + doc-version gate) → 1.32.0 (mirador — bird's-eye view + dashboard --json) → 1.33.0 (mirador telemetry — per-model tokens/time/model + transcript extractor) → 1.34.0 (mirador: project name from config + live watch/auto-refresh) -> 1.35.0 (execution-policy routing) -> 1.36.0 (discovery-intake: production findings + spec-doubt) -> 1.37.0 (ADR experiments: visible hypotheses) -> 1.38.0 (contract closure: SCR bridge + golden labels + calibration) -> 1.39.0 (universal Codex/Claude installer) -> 1.40.0 (npm/npx router) -> 1.40.1 (npm package hygiene) -> 1.40.2 (install docs)
|
|
23
|
+
│ └── CHANGELOG-*.md # 1.2.x → 1.3.0 ("facts block, wired") → 1.4.0 (python) → 1.5.0 (node) → 1.6.0 (go) → 1.7.0 (rust+dotnet) → 1.8.0 (cpp) → 1.9.0 (gradle+swift) → 1.10.0 (traceable acceptance) → 1.11.0 (tests outside the budget) → 1.12.0 (secret-scan) → 1.13.0 (atomic ledger) → 1.14.0 (plateau/stop-signal) → 1.15.0 (golden scrub) → 1.16.0 (regression-capture) → 1.17.0 (threshold provenance) → 1.18.0 (derived FSM) → 1.19.0 (spikes — PragProg backlog CLOSED) → 1.20.0 (global install) → 1.21.0 (namespace uscha-*) → 1.22.0 (doctor) → 1.23.0 (rubric layer) → 1.24.0 (Claude Code plugin) → 1.25.0 (anti-ceremony) → 1.26.0 (waste-check REUSE-FIRST) → 1.27.0 (FTY) → 1.28.0 (measured acceptance %) → 1.29.0 (rebrand → Uscha) → 1.30.0 (dependency gate) → 1.31.0 (evidence freshness + doc-version gate) → 1.32.0 (mirador — bird's-eye view + dashboard --json) → 1.33.0 (mirador telemetry — per-model tokens/time/model + transcript extractor) → 1.34.0 (mirador: project name from config + live watch/auto-refresh) -> 1.35.0 (execution-policy routing) -> 1.36.0 (discovery-intake: production findings + spec-doubt) -> 1.37.0 (ADR experiments: visible hypotheses) -> 1.38.0 (contract closure: SCR bridge + golden labels + calibration) -> 1.39.0 (universal Codex/Claude installer) -> 1.40.0 (npm/npx router) -> 1.40.1 (npm package hygiene) -> 1.40.2 (install docs) -> 1.41.0 (safety release) -> 1.41.1 (adversarial-review hardening: JUnit/integration evidence + Codex rollback) -> 1.41.2 (mirador launch UX: self-resolving render + auto-open + honest readiness title) -> 1.41.3 (mirador live view no longer spams browser tabs) -> 1.42.0 (mirador status story: how it's going / what's blocking / what's next) -> 1.43.0 (uscha mirador verb: one command, no python)
|
|
24
24
|
├── docs/ # published artifacts (canonical here; Downloads = snapshots)
|
|
25
25
|
│ ├── uscha-claude-code-doc-FINAL.html # long deck ES (36 slides)
|
|
26
26
|
│ ├── uscha-claude-code-doc-EN.html # long deck EN
|
|
@@ -40,9 +40,9 @@ SpecLoop/
|
|
|
40
40
|
└── verificacion-team-pitch.json # 3 lenses over the pitch
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
## Status (2026-07-
|
|
43
|
+
## Status (2026-07-10)
|
|
44
44
|
|
|
45
|
-
- **Kit v1.
|
|
45
|
+
- **Kit v1.43.0** <!-- uscha:version --> — the fact-gates are WIRED into the engine (1.3.0: `log-gate`,
|
|
46
46
|
`flag-blocker`, `resolve-escalation`; UNMEASURED; per-tool convergence with a veto from
|
|
47
47
|
the measured snapshot) and the engine measures **Python** repos (1.4.0: pytest/Cobertura + ruff +
|
|
48
48
|
mypy) **TypeScript/JS** (1.5.0: lcov + jest-junit + eslint + tsc) **Go** (1.6.0: native cover
|
|
@@ -64,13 +64,13 @@ SpecLoop/
|
|
|
64
64
|
headline — M5). **Derived FSM** (1.18.0: `phase` computes the workflow state
|
|
65
65
|
from the ledger's facts, never declared; the PR is gated with `--require
|
|
66
66
|
pr-ready` — M4). **Formal spikes** (1.19.0: a `spike/*` branch never passes the PR
|
|
67
|
-
gate; the legitimate output is an ADR with lessons — M10). **Execution policy routing** (1.35.0: phase-level methodology/model/effort metadata for the operator and Mirador, not readiness scoring). **Discovery intake** (1.36.0: production findings + spec-doubt/SPEC-WRONG enter the ledger and reopen discovery instead of disappearing into narration). **ADR experiments** (1.37.0: `Status: Experiment` is visible/advisory in dashboard/Mirador with feedback/review metadata, not a readiness score). **Contract closure** (1.38.0: structured `spec-change-request`, golden intended vs observed-accidental labels, and post-merge calibration metrics). **Universal installer** (1.39.0: one machine installer for Codex plugin adoption and Claude global install, with dry-run/doctor/version checks). **npm/npx router** (1.40.0: `@andresmassello/uscha` exposes `uscha`/`uscha-kit` and delegates to the canonical Python installer). **
|
|
67
|
+
gate; the legitimate output is an ADR with lessons — M10). **Execution policy routing** (1.35.0: phase-level methodology/model/effort metadata for the operator and Mirador, not readiness scoring). **Discovery intake** (1.36.0: production findings + spec-doubt/SPEC-WRONG enter the ledger and reopen discovery instead of disappearing into narration). **ADR experiments** (1.37.0: `Status: Experiment` is visible/advisory in dashboard/Mirador with feedback/review metadata, not a readiness score). **Contract closure** (1.38.0: structured `spec-change-request`, golden intended vs observed-accidental labels, and post-merge calibration metrics). **Universal installer** (1.39.0: one machine installer for Codex plugin adoption and Claude global install, with dry-run/doctor/version checks). **npm/npx router** (1.40.0: `@andresmassello/uscha` exposes `uscha`/`uscha-kit` and delegates to the canonical Python installer). **Safety release** (1.41.0: WU1–WU7 plus post-audit P0/P1 hardening for evidence freshness, fail-closed reports, Mirador safety, installer transactions, ledger integrity, and current documentation). Smoke suite 361/361 green.
|
|
68
68
|
**The PragProg backlog is CLOSED: 10 of 10** (see
|
|
69
69
|
`docs/analisis-pragmatic-programmer.md`).
|
|
70
70
|
License: MIT. The principle "facts block, guesses advise" is an enforced property,
|
|
71
71
|
not a slogan.
|
|
72
72
|
- **Docs** — passed through truth-pass against the real engine: every claim describes what
|
|
73
|
-
v1.
|
|
73
|
+
v1.41.0 does; the references appendix has **fetch-verified links** to the 10
|
|
74
74
|
sources. Status convention in the docs: `in the kit` / `new` / `proposal`.
|
|
75
75
|
- **In progress** — dogfooding on a real case (pilot project, Python): the 1.4.0 adapter unblocked it;
|
|
76
76
|
what remains is the read-only dry-run (criterion 2 of the python-adapter HANDOFF) and the on-ramp.
|
package/bin/uscha.js
CHANGED
|
@@ -8,17 +8,29 @@ const candidates = process.platform === 'win32'
|
|
|
8
8
|
? [ ['python', []], ['py', ['-3']] ]
|
|
9
9
|
: [ ['python3', []], ['python', []] ];
|
|
10
10
|
|
|
11
|
+
function supportsPython38(command, prefix) {
|
|
12
|
+
const result = spawnSync(command, [...prefix, '--version'], {
|
|
13
|
+
encoding: 'utf8',
|
|
14
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
15
|
+
});
|
|
16
|
+
if (result.error || result.status !== 0) return false;
|
|
17
|
+
|
|
18
|
+
const output = `${result.stdout || ''}\n${result.stderr || ''}`;
|
|
19
|
+
const match = output.match(/Python\s+(\d+)\.(\d+)/i);
|
|
20
|
+
return match !== null && (Number(match[1]) > 3
|
|
21
|
+
|| (Number(match[1]) === 3 && Number(match[2]) >= 8));
|
|
22
|
+
}
|
|
23
|
+
|
|
11
24
|
let lastError = null;
|
|
12
|
-
for (const [
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
if (result.error.code !== 'ENOENT') {
|
|
25
|
+
for (const [command, prefix] of candidates) {
|
|
26
|
+
if (!supportsPython38(command, prefix)) continue;
|
|
27
|
+
|
|
28
|
+
const result = spawnSync(command, [...prefix, script, ...args], { stdio: 'inherit' });
|
|
29
|
+
if (result.error) {
|
|
18
30
|
lastError = result.error;
|
|
19
31
|
break;
|
|
20
32
|
}
|
|
21
|
-
|
|
33
|
+
process.exit(result.status === null ? 1 : result.status);
|
|
22
34
|
}
|
|
23
35
|
|
|
24
36
|
console.error('[uscha] Python 3.8+ is required but was not found in PATH.');
|
package/package.json
CHANGED
|
@@ -124,8 +124,8 @@ ADR where it could later be "traded away"):
|
|
|
124
124
|
```markdown
|
|
125
125
|
# Acceptance — <feature>
|
|
126
126
|
## Definition of Done
|
|
127
|
-
- [ ] <verifiable criterion>
|
|
128
|
-
- [ ]
|
|
127
|
+
- [ ] AC-01 — <verifiable criterion>
|
|
128
|
+
- [ ] AC-02 — <verifiable criterion>
|
|
129
129
|
## How we measure success
|
|
130
130
|
- <objective metric: p95, cost, zero orphans, …>
|
|
131
131
|
## Out of scope
|
|
@@ -418,7 +418,9 @@ BLOCKER/CRITICAL open → ≤65, unresolved escalation → ≤75 (held until
|
|
|
418
418
|
`resolve-escalation` — a recorded event, not an implication). A `CONSTITUTION.md`
|
|
419
419
|
breach does NOT reach the engine by itself: **you MUST log it** —
|
|
420
420
|
`flag-blocker --repo <REPO> --kind constitution --note "<invariant breached>"` — and
|
|
421
|
-
once logged it caps readiness ≤65 and blocks convergence until
|
|
421
|
+
once logged it caps readiness ≤65 and blocks convergence until resolved with
|
|
422
|
+
`flag-blocker --repo <REPO> --kind constitution --resolve --escape-analysis
|
|
423
|
+
"Added a regression test for the invariant."`. Bands:
|
|
422
424
|
<50 NOT READY, 50–79 IN PROGRESS, 80–94 RELEASE CANDIDATE, 95–100 READY.
|
|
423
425
|
|
|
424
426
|
**Acceptance traceability (the DOMINANT dimension — kit 1.10.0).** Each ACCEPTANCE
|