@andresmassello/uscha 1.40.1
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/LICENSE +21 -0
- package/README.md +104 -0
- package/bin/README.md +6 -0
- package/bin/uscha.js +28 -0
- package/package.json +38 -0
- package/uscha-kit/.claude/skills/uscha-adr-refine/SKILL.md +161 -0
- package/uscha-kit/.claude/skills/uscha-characterize/SKILL.md +124 -0
- package/uscha-kit/.claude/skills/uscha-devloop/SKILL.md +490 -0
- package/uscha-kit/.claude/skills/uscha-devloop/qa_ledger.py +5602 -0
- package/uscha-kit/.claude/skills/uscha-discovery/SKILL.md +161 -0
- package/uscha-kit/.claude/skills/uscha-mirador/SKILL.md +145 -0
- package/uscha-kit/.claude/skills/uscha-mirador/mirador-render.py +112 -0
- package/uscha-kit/.claude/skills/uscha-mirador/mirador-watch.ps1 +22 -0
- package/uscha-kit/.claude/skills/uscha-mirador/mirador-watch.sh +26 -0
- package/uscha-kit/.claude/skills/uscha-mirador/mirador.template.html +586 -0
- package/uscha-kit/.claude/skills/uscha-mirador/telemetry-extract.py +130 -0
- package/uscha-kit/.claude/skills/uscha-reverse-discovery/SKILL.md +116 -0
- package/uscha-kit/.claude/skills/uscha-rubric/SKILL.md +79 -0
- package/uscha-kit/.claude/skills/uscha-sysdoc/SKILL.md +88 -0
- package/uscha-kit/.claude-plugin/plugin.json +24 -0
- package/uscha-kit/.codex-plugin/plugin.json +37 -0
- package/uscha-kit/CHANGELOG-1.10.0.md +84 -0
- package/uscha-kit/CHANGELOG-1.11.0.md +67 -0
- package/uscha-kit/CHANGELOG-1.12.0.md +46 -0
- package/uscha-kit/CHANGELOG-1.13.0.md +33 -0
- package/uscha-kit/CHANGELOG-1.14.0.md +42 -0
- package/uscha-kit/CHANGELOG-1.15.0.md +58 -0
- package/uscha-kit/CHANGELOG-1.16.0.md +55 -0
- package/uscha-kit/CHANGELOG-1.17.0.md +44 -0
- package/uscha-kit/CHANGELOG-1.18.0.md +42 -0
- package/uscha-kit/CHANGELOG-1.19.0.md +41 -0
- package/uscha-kit/CHANGELOG-1.2.2.md +16 -0
- package/uscha-kit/CHANGELOG-1.2.3.md +20 -0
- package/uscha-kit/CHANGELOG-1.2.4.md +10 -0
- package/uscha-kit/CHANGELOG-1.2.5.md +23 -0
- package/uscha-kit/CHANGELOG-1.2.6.md +11 -0
- package/uscha-kit/CHANGELOG-1.2.7.md +15 -0
- package/uscha-kit/CHANGELOG-1.2.8.md +24 -0
- package/uscha-kit/CHANGELOG-1.2.9.md +4 -0
- package/uscha-kit/CHANGELOG-1.20.0.md +29 -0
- package/uscha-kit/CHANGELOG-1.21.0.md +33 -0
- package/uscha-kit/CHANGELOG-1.22.0.md +60 -0
- package/uscha-kit/CHANGELOG-1.23.0.md +75 -0
- package/uscha-kit/CHANGELOG-1.24.0.md +50 -0
- package/uscha-kit/CHANGELOG-1.25.0.md +55 -0
- package/uscha-kit/CHANGELOG-1.26.0.md +70 -0
- package/uscha-kit/CHANGELOG-1.27.0.md +45 -0
- package/uscha-kit/CHANGELOG-1.28.0.md +35 -0
- package/uscha-kit/CHANGELOG-1.29.0.md +20 -0
- package/uscha-kit/CHANGELOG-1.3.0.md +74 -0
- package/uscha-kit/CHANGELOG-1.30.0.md +46 -0
- package/uscha-kit/CHANGELOG-1.31.0.md +59 -0
- package/uscha-kit/CHANGELOG-1.32.0.md +50 -0
- package/uscha-kit/CHANGELOG-1.33.0.md +46 -0
- package/uscha-kit/CHANGELOG-1.34.0.md +55 -0
- package/uscha-kit/CHANGELOG-1.35.0.md +30 -0
- package/uscha-kit/CHANGELOG-1.36.0.md +33 -0
- package/uscha-kit/CHANGELOG-1.37.0.md +41 -0
- package/uscha-kit/CHANGELOG-1.38.0.md +11 -0
- package/uscha-kit/CHANGELOG-1.39.0.md +14 -0
- package/uscha-kit/CHANGELOG-1.4.0.md +68 -0
- package/uscha-kit/CHANGELOG-1.40.0.md +16 -0
- package/uscha-kit/CHANGELOG-1.40.1.md +11 -0
- package/uscha-kit/CHANGELOG-1.5.0.md +64 -0
- package/uscha-kit/CHANGELOG-1.6.0.md +57 -0
- package/uscha-kit/CHANGELOG-1.7.0.md +74 -0
- package/uscha-kit/CHANGELOG-1.8.0.md +46 -0
- package/uscha-kit/CHANGELOG-1.9.0.md +112 -0
- package/uscha-kit/LICENSE +21 -0
- package/uscha-kit/README.md +497 -0
- package/uscha-kit/VERSION +1 -0
- package/uscha-kit/WORKBENCH.md +178 -0
- package/uscha-kit/hooks/block-approved-writes.ps1 +46 -0
- package/uscha-kit/hooks/hooks.json +15 -0
- package/uscha-kit/install-uscha.py +344 -0
- package/uscha-kit/skills/uscha-adr-refine/SKILL.md +161 -0
- package/uscha-kit/skills/uscha-characterize/SKILL.md +124 -0
- package/uscha-kit/skills/uscha-devloop/SKILL.md +490 -0
- package/uscha-kit/skills/uscha-devloop/qa_ledger.py +5602 -0
- package/uscha-kit/skills/uscha-discovery/SKILL.md +161 -0
- package/uscha-kit/skills/uscha-mirador/SKILL.md +145 -0
- package/uscha-kit/skills/uscha-mirador/mirador-render.py +112 -0
- package/uscha-kit/skills/uscha-mirador/mirador-watch.ps1 +22 -0
- package/uscha-kit/skills/uscha-mirador/mirador-watch.sh +26 -0
- package/uscha-kit/skills/uscha-mirador/mirador.template.html +586 -0
- package/uscha-kit/skills/uscha-mirador/telemetry-extract.py +130 -0
- package/uscha-kit/skills/uscha-reverse-discovery/SKILL.md +116 -0
- package/uscha-kit/skills/uscha-rubric/SKILL.md +79 -0
- package/uscha-kit/skills/uscha-sysdoc/SKILL.md +88 -0
- package/uscha-kit/templates/.gitattributes +6 -0
- package/uscha-kit/templates/CLAUDE.md +56 -0
- package/uscha-kit/templates/CONSTITUTION.md +149 -0
- package/uscha-kit/templates/RUBRIC.md +38 -0
- package/uscha-kit/templates/docs/adr/README.md +19 -0
- package/uscha-kit/templates/rubric-grader-prompt.md +63 -0
- package/uscha-kit/tests/smoke-engine.sh +1739 -0
- package/uscha-kit/uscha.config.json +181 -0
- package/uscha-kit/workbench-doctor.sh +45 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.40.1",
|
|
3
|
+
"project": null,
|
|
4
|
+
"defaults": {
|
|
5
|
+
"coverage_threshold": 60,
|
|
6
|
+
"max_iterations": 5,
|
|
7
|
+
"tools_per_cycle": 3,
|
|
8
|
+
"severity_gate": [
|
|
9
|
+
"BLOCKER",
|
|
10
|
+
"CRITICAL",
|
|
11
|
+
"HIGH"
|
|
12
|
+
],
|
|
13
|
+
"qa_tools_order": [
|
|
14
|
+
"code-review",
|
|
15
|
+
"judgment-day",
|
|
16
|
+
"improve"
|
|
17
|
+
],
|
|
18
|
+
"test_command_maven": "mvn -q -DskipITs=false test",
|
|
19
|
+
"test_command_flutter": "flutter test --coverage",
|
|
20
|
+
"test_command_python": "pytest --cov --cov-report=xml:reports/coverage.xml --junitxml=reports/junit.xml",
|
|
21
|
+
"test_command_node": "npx jest --coverage --reporters=default --reporters=jest-junit",
|
|
22
|
+
"test_command_go": "gotestsum --junitfile reports/junit.xml -- -coverprofile=coverage.out ./...",
|
|
23
|
+
"test_command_rust": "cargo llvm-cov nextest --cobertura --output-path reports/coverage.xml && cp target/nextest/default/junit.xml reports/junit.xml",
|
|
24
|
+
"test_command_dotnet": "dotnet test --logger \"junit;LogFilePath=$PWD/reports/junit.xml\" /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=$PWD/reports/coverage.xml",
|
|
25
|
+
"test_command_cpp": "ctest --test-dir build --output-junit ../reports/junit.xml && gcovr --cobertura reports/coverage.xml",
|
|
26
|
+
"test_command_gradle": "./gradlew test jacocoTestReport",
|
|
27
|
+
"test_command_swift": "swift test --enable-code-coverage --xunit-output reports/junit.xml",
|
|
28
|
+
"id_granularity": "file",
|
|
29
|
+
"acceptance_file": "ACCEPTANCE.md",
|
|
30
|
+
"readiness_weights": {
|
|
31
|
+
"acceptance": 30,
|
|
32
|
+
"adr": 15,
|
|
33
|
+
"coverage": 15,
|
|
34
|
+
"static_gate": 20,
|
|
35
|
+
"convergence": 10,
|
|
36
|
+
"integration": 10
|
|
37
|
+
},
|
|
38
|
+
"readiness_caps": {
|
|
39
|
+
"tests_red": 35,
|
|
40
|
+
"blocker_critical": 65,
|
|
41
|
+
"escalation": 75
|
|
42
|
+
},
|
|
43
|
+
"static_gate_zero_at": 10,
|
|
44
|
+
"constitution_file": "CONSTITUTION.md",
|
|
45
|
+
"rebuild": {
|
|
46
|
+
"coverage_tolerance": 5
|
|
47
|
+
},
|
|
48
|
+
"simplicity": {
|
|
49
|
+
"max_lines_added": 400,
|
|
50
|
+
"max_net_lines": 300,
|
|
51
|
+
"max_files_changed": 20,
|
|
52
|
+
"max_nesting_depth": 4,
|
|
53
|
+
"max_hunk_added": 120,
|
|
54
|
+
"max_new_abstractions": 8,
|
|
55
|
+
"max_abstraction_density": 3.0,
|
|
56
|
+
"indent_width": 4
|
|
57
|
+
},
|
|
58
|
+
"waste": {
|
|
59
|
+
"window_size": 5,
|
|
60
|
+
"max_dup_windows_vs_repo": 0,
|
|
61
|
+
"max_dup_ratio": 0.1,
|
|
62
|
+
"min_line_len": 8,
|
|
63
|
+
"allow_paths": [],
|
|
64
|
+
"gate": false
|
|
65
|
+
},
|
|
66
|
+
"execution_policy": {
|
|
67
|
+
"default": {
|
|
68
|
+
"tier": "standard",
|
|
69
|
+
"model": null,
|
|
70
|
+
"effort": "medium"
|
|
71
|
+
},
|
|
72
|
+
"phases": {
|
|
73
|
+
"idea": {
|
|
74
|
+
"method": "Capture the intent and decide whether Uscha rigor is warranted",
|
|
75
|
+
"tier": "human",
|
|
76
|
+
"model": null,
|
|
77
|
+
"effort": "none"
|
|
78
|
+
},
|
|
79
|
+
"disc": {
|
|
80
|
+
"method": "Shape the idea into discovery facts, scope, risks and invariants",
|
|
81
|
+
"tier": "deep",
|
|
82
|
+
"model": null,
|
|
83
|
+
"effort": "high"
|
|
84
|
+
},
|
|
85
|
+
"spec": {
|
|
86
|
+
"method": "Turn scope into testable SPEC/ACCEPTANCE contracts",
|
|
87
|
+
"tier": "deep",
|
|
88
|
+
"model": null,
|
|
89
|
+
"effort": "high"
|
|
90
|
+
},
|
|
91
|
+
"adr": {
|
|
92
|
+
"method": "Record consequential decisions and non-negotiable invariants",
|
|
93
|
+
"tier": "deep",
|
|
94
|
+
"model": null,
|
|
95
|
+
"effort": "high"
|
|
96
|
+
},
|
|
97
|
+
"build": {
|
|
98
|
+
"method": "Implement the accepted plan with tests as guardrail",
|
|
99
|
+
"tier": "standard",
|
|
100
|
+
"model": null,
|
|
101
|
+
"effort": "medium"
|
|
102
|
+
},
|
|
103
|
+
"qa": {
|
|
104
|
+
"method": "Run maker-not-checker QA passes and persist fact gates",
|
|
105
|
+
"tier": "checker",
|
|
106
|
+
"model": null,
|
|
107
|
+
"effort": "high",
|
|
108
|
+
"uncorrelated": true
|
|
109
|
+
},
|
|
110
|
+
"verify": {
|
|
111
|
+
"method": "Re-run measured readiness, freshness and release gates",
|
|
112
|
+
"tier": "standard",
|
|
113
|
+
"model": null,
|
|
114
|
+
"effort": "medium"
|
|
115
|
+
},
|
|
116
|
+
"prod": {
|
|
117
|
+
"method": "Stop at the human merge/deploy gate",
|
|
118
|
+
"tier": "human",
|
|
119
|
+
"model": null,
|
|
120
|
+
"effort": "none"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"repos": [
|
|
126
|
+
{
|
|
127
|
+
"name": "backend-api",
|
|
128
|
+
"path": "../backend-api",
|
|
129
|
+
"type": "maven"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"name": "mobile-app",
|
|
133
|
+
"path": "../mobile-app",
|
|
134
|
+
"type": "flutter"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"name": "data-lib",
|
|
138
|
+
"path": "../data-lib",
|
|
139
|
+
"type": "python"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"name": "web-app",
|
|
143
|
+
"path": "../web-app",
|
|
144
|
+
"type": "node"
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"name": "api-svc",
|
|
148
|
+
"path": "../api-svc",
|
|
149
|
+
"type": "go"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"name": "core-lib",
|
|
153
|
+
"path": "../core-lib",
|
|
154
|
+
"type": "rust"
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"name": "erp-svc",
|
|
158
|
+
"path": "../erp-svc",
|
|
159
|
+
"type": "dotnet"
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"name": "native-core",
|
|
163
|
+
"path": "../native-core",
|
|
164
|
+
"type": "cpp"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"name": "jvm-service",
|
|
168
|
+
"path": "../jvm-service",
|
|
169
|
+
"type": "gradle"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"name": "mobile-kit",
|
|
173
|
+
"path": "../mobile-kit",
|
|
174
|
+
"type": "swift"
|
|
175
|
+
}
|
|
176
|
+
],
|
|
177
|
+
"integration": {
|
|
178
|
+
"enabled": true,
|
|
179
|
+
"contract_tests_command": "mvn -q -pl integration-tests test"
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# workbench-doctor — qué tengo instalado del workbench (genérico, sin el stack del proyecto)
|
|
3
|
+
# Uso: bash workbench-doctor.sh
|
|
4
|
+
set +e
|
|
5
|
+
|
|
6
|
+
line() { printf ' %-20s %s\n' "$1" "$2"; }
|
|
7
|
+
|
|
8
|
+
probe() { # $1 = etiqueta, $2 = binario, $3.. = comando de versión
|
|
9
|
+
local label="$1"; local bin="$2"; shift 2
|
|
10
|
+
if command -v "$bin" >/dev/null 2>&1; then
|
|
11
|
+
line "$label" "OK $("$@" 2>/dev/null | head -n1)"
|
|
12
|
+
else
|
|
13
|
+
line "$label" "FALTA (no está '$bin' en PATH)"
|
|
14
|
+
fi
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
KITDIR="$(cd "$(dirname "$0")" && pwd)"
|
|
18
|
+
|
|
19
|
+
echo "=== Workbench doctor ==="
|
|
20
|
+
if [ -f "$KITDIR/VERSION" ]; then line "uscha-kit" "$(cat "$KITDIR/VERSION")"; else line "uscha-kit" "VERSION no encontrado"; fi
|
|
21
|
+
|
|
22
|
+
echo "--- herramientas ---"
|
|
23
|
+
probe "Claude Code" claude claude --version
|
|
24
|
+
probe "Python 3" python3 python3 --version
|
|
25
|
+
probe "git" git git --version
|
|
26
|
+
probe "GitHub CLI (opc)" gh gh --version
|
|
27
|
+
probe "Node (solo npm)" node node --version
|
|
28
|
+
|
|
29
|
+
echo "--- skills en ~/.claude/skills ---"
|
|
30
|
+
SK="$HOME/.claude/skills"
|
|
31
|
+
if [ -d "$SK" ]; then
|
|
32
|
+
for s in discovery adr-refine dev-loop sys-doc characterize reverse-discovery code-review judgment-day improve; do
|
|
33
|
+
if [ -e "$SK/$s/SKILL.md" ] || [ -e "$SK/$s.md" ]; then line "$s" "OK"; else line "$s" "—"; fi
|
|
34
|
+
done
|
|
35
|
+
else
|
|
36
|
+
echo " (no existe $SK — todavía no instalaste skills globales)"
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
echo "--- salud nativa de Claude Code ---"
|
|
40
|
+
if command -v claude >/dev/null 2>&1; then
|
|
41
|
+
echo " corré: claude doctor · claude whoami"
|
|
42
|
+
else
|
|
43
|
+
echo " Claude Code no instalado (ver WORKBENCH.md §2)"
|
|
44
|
+
fi
|
|
45
|
+
echo "=== fin ==="
|