@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.
Files changed (98) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +104 -0
  3. package/bin/README.md +6 -0
  4. package/bin/uscha.js +28 -0
  5. package/package.json +38 -0
  6. package/uscha-kit/.claude/skills/uscha-adr-refine/SKILL.md +161 -0
  7. package/uscha-kit/.claude/skills/uscha-characterize/SKILL.md +124 -0
  8. package/uscha-kit/.claude/skills/uscha-devloop/SKILL.md +490 -0
  9. package/uscha-kit/.claude/skills/uscha-devloop/qa_ledger.py +5602 -0
  10. package/uscha-kit/.claude/skills/uscha-discovery/SKILL.md +161 -0
  11. package/uscha-kit/.claude/skills/uscha-mirador/SKILL.md +145 -0
  12. package/uscha-kit/.claude/skills/uscha-mirador/mirador-render.py +112 -0
  13. package/uscha-kit/.claude/skills/uscha-mirador/mirador-watch.ps1 +22 -0
  14. package/uscha-kit/.claude/skills/uscha-mirador/mirador-watch.sh +26 -0
  15. package/uscha-kit/.claude/skills/uscha-mirador/mirador.template.html +586 -0
  16. package/uscha-kit/.claude/skills/uscha-mirador/telemetry-extract.py +130 -0
  17. package/uscha-kit/.claude/skills/uscha-reverse-discovery/SKILL.md +116 -0
  18. package/uscha-kit/.claude/skills/uscha-rubric/SKILL.md +79 -0
  19. package/uscha-kit/.claude/skills/uscha-sysdoc/SKILL.md +88 -0
  20. package/uscha-kit/.claude-plugin/plugin.json +24 -0
  21. package/uscha-kit/.codex-plugin/plugin.json +37 -0
  22. package/uscha-kit/CHANGELOG-1.10.0.md +84 -0
  23. package/uscha-kit/CHANGELOG-1.11.0.md +67 -0
  24. package/uscha-kit/CHANGELOG-1.12.0.md +46 -0
  25. package/uscha-kit/CHANGELOG-1.13.0.md +33 -0
  26. package/uscha-kit/CHANGELOG-1.14.0.md +42 -0
  27. package/uscha-kit/CHANGELOG-1.15.0.md +58 -0
  28. package/uscha-kit/CHANGELOG-1.16.0.md +55 -0
  29. package/uscha-kit/CHANGELOG-1.17.0.md +44 -0
  30. package/uscha-kit/CHANGELOG-1.18.0.md +42 -0
  31. package/uscha-kit/CHANGELOG-1.19.0.md +41 -0
  32. package/uscha-kit/CHANGELOG-1.2.2.md +16 -0
  33. package/uscha-kit/CHANGELOG-1.2.3.md +20 -0
  34. package/uscha-kit/CHANGELOG-1.2.4.md +10 -0
  35. package/uscha-kit/CHANGELOG-1.2.5.md +23 -0
  36. package/uscha-kit/CHANGELOG-1.2.6.md +11 -0
  37. package/uscha-kit/CHANGELOG-1.2.7.md +15 -0
  38. package/uscha-kit/CHANGELOG-1.2.8.md +24 -0
  39. package/uscha-kit/CHANGELOG-1.2.9.md +4 -0
  40. package/uscha-kit/CHANGELOG-1.20.0.md +29 -0
  41. package/uscha-kit/CHANGELOG-1.21.0.md +33 -0
  42. package/uscha-kit/CHANGELOG-1.22.0.md +60 -0
  43. package/uscha-kit/CHANGELOG-1.23.0.md +75 -0
  44. package/uscha-kit/CHANGELOG-1.24.0.md +50 -0
  45. package/uscha-kit/CHANGELOG-1.25.0.md +55 -0
  46. package/uscha-kit/CHANGELOG-1.26.0.md +70 -0
  47. package/uscha-kit/CHANGELOG-1.27.0.md +45 -0
  48. package/uscha-kit/CHANGELOG-1.28.0.md +35 -0
  49. package/uscha-kit/CHANGELOG-1.29.0.md +20 -0
  50. package/uscha-kit/CHANGELOG-1.3.0.md +74 -0
  51. package/uscha-kit/CHANGELOG-1.30.0.md +46 -0
  52. package/uscha-kit/CHANGELOG-1.31.0.md +59 -0
  53. package/uscha-kit/CHANGELOG-1.32.0.md +50 -0
  54. package/uscha-kit/CHANGELOG-1.33.0.md +46 -0
  55. package/uscha-kit/CHANGELOG-1.34.0.md +55 -0
  56. package/uscha-kit/CHANGELOG-1.35.0.md +30 -0
  57. package/uscha-kit/CHANGELOG-1.36.0.md +33 -0
  58. package/uscha-kit/CHANGELOG-1.37.0.md +41 -0
  59. package/uscha-kit/CHANGELOG-1.38.0.md +11 -0
  60. package/uscha-kit/CHANGELOG-1.39.0.md +14 -0
  61. package/uscha-kit/CHANGELOG-1.4.0.md +68 -0
  62. package/uscha-kit/CHANGELOG-1.40.0.md +16 -0
  63. package/uscha-kit/CHANGELOG-1.40.1.md +11 -0
  64. package/uscha-kit/CHANGELOG-1.5.0.md +64 -0
  65. package/uscha-kit/CHANGELOG-1.6.0.md +57 -0
  66. package/uscha-kit/CHANGELOG-1.7.0.md +74 -0
  67. package/uscha-kit/CHANGELOG-1.8.0.md +46 -0
  68. package/uscha-kit/CHANGELOG-1.9.0.md +112 -0
  69. package/uscha-kit/LICENSE +21 -0
  70. package/uscha-kit/README.md +497 -0
  71. package/uscha-kit/VERSION +1 -0
  72. package/uscha-kit/WORKBENCH.md +178 -0
  73. package/uscha-kit/hooks/block-approved-writes.ps1 +46 -0
  74. package/uscha-kit/hooks/hooks.json +15 -0
  75. package/uscha-kit/install-uscha.py +344 -0
  76. package/uscha-kit/skills/uscha-adr-refine/SKILL.md +161 -0
  77. package/uscha-kit/skills/uscha-characterize/SKILL.md +124 -0
  78. package/uscha-kit/skills/uscha-devloop/SKILL.md +490 -0
  79. package/uscha-kit/skills/uscha-devloop/qa_ledger.py +5602 -0
  80. package/uscha-kit/skills/uscha-discovery/SKILL.md +161 -0
  81. package/uscha-kit/skills/uscha-mirador/SKILL.md +145 -0
  82. package/uscha-kit/skills/uscha-mirador/mirador-render.py +112 -0
  83. package/uscha-kit/skills/uscha-mirador/mirador-watch.ps1 +22 -0
  84. package/uscha-kit/skills/uscha-mirador/mirador-watch.sh +26 -0
  85. package/uscha-kit/skills/uscha-mirador/mirador.template.html +586 -0
  86. package/uscha-kit/skills/uscha-mirador/telemetry-extract.py +130 -0
  87. package/uscha-kit/skills/uscha-reverse-discovery/SKILL.md +116 -0
  88. package/uscha-kit/skills/uscha-rubric/SKILL.md +79 -0
  89. package/uscha-kit/skills/uscha-sysdoc/SKILL.md +88 -0
  90. package/uscha-kit/templates/.gitattributes +6 -0
  91. package/uscha-kit/templates/CLAUDE.md +56 -0
  92. package/uscha-kit/templates/CONSTITUTION.md +149 -0
  93. package/uscha-kit/templates/RUBRIC.md +38 -0
  94. package/uscha-kit/templates/docs/adr/README.md +19 -0
  95. package/uscha-kit/templates/rubric-grader-prompt.md +63 -0
  96. package/uscha-kit/tests/smoke-engine.sh +1739 -0
  97. package/uscha-kit/uscha.config.json +181 -0
  98. 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 ==="