tribunal-kit 5.8.4 → 6.0.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 (322) hide show
  1. package/.agent/ARCHITECTURE.md +219 -215
  2. package/.agent/agents/accessibility-reviewer.md +66 -151
  3. package/.agent/agents/ai-code-reviewer.md +22 -2
  4. package/.agent/agents/anti-pattern-reviewer.md +99 -0
  5. package/.agent/agents/api-architect.md +19 -2
  6. package/.agent/agents/backend-specialist.md +25 -3
  7. package/.agent/agents/cloud-engineer.md +21 -0
  8. package/.agent/agents/code-archaeologist.md +20 -3
  9. package/.agent/agents/complexity-reviewer.md +22 -2
  10. package/.agent/agents/database-architect.md +24 -3
  11. package/.agent/agents/db-latency-auditor.md +22 -2
  12. package/.agent/agents/debugger.md +19 -3
  13. package/.agent/agents/dependency-reviewer.md +19 -2
  14. package/.agent/agents/devops-engineer.md +24 -3
  15. package/.agent/agents/documentation-writer.md +21 -3
  16. package/.agent/agents/explorer-agent.md +21 -3
  17. package/.agent/agents/frontend-reviewer.md +19 -3
  18. package/.agent/agents/frontend-specialist.md +72 -224
  19. package/.agent/agents/game-developer.md +22 -3
  20. package/.agent/agents/interaction-reviewer.md +118 -0
  21. package/.agent/agents/logic-reviewer.md +18 -3
  22. package/.agent/agents/minimalist-reviewer.md +98 -0
  23. package/.agent/agents/mobile-developer.md +21 -3
  24. package/.agent/agents/mobile-reviewer.md +22 -2
  25. package/.agent/agents/orchestrator.md +19 -3
  26. package/.agent/agents/penetration-tester.md +22 -3
  27. package/.agent/agents/performance-optimizer.md +21 -3
  28. package/.agent/agents/performance-reviewer.md +2 -0
  29. package/.agent/agents/precedence-reviewer.md +19 -5
  30. package/.agent/agents/product-manager.md +20 -3
  31. package/.agent/agents/product-owner.md +22 -1
  32. package/.agent/agents/product-reviewer.md +98 -0
  33. package/.agent/agents/project-planner.md +19 -3
  34. package/.agent/agents/qa-automation-engineer.md +24 -3
  35. package/.agent/agents/resilience-reviewer.md +21 -2
  36. package/.agent/agents/schema-reviewer.md +21 -2
  37. package/.agent/agents/security-auditor.md +7 -1
  38. package/.agent/agents/seo-specialist.md +18 -3
  39. package/.agent/agents/sql-reviewer.md +22 -2
  40. package/.agent/agents/supervisor-agent.md +22 -3
  41. package/.agent/agents/swarm-worker-registry.md +7 -0
  42. package/.agent/agents/system-architect.md +19 -0
  43. package/.agent/agents/test-coverage-reviewer.md +22 -2
  44. package/.agent/agents/test-engineer.md +21 -2
  45. package/.agent/agents/throughput-optimizer.md +22 -2
  46. package/.agent/agents/type-safety-reviewer.md +21 -2
  47. package/.agent/agents/ui-ux-auditor.md +44 -242
  48. package/.agent/agents/ui-visual-auditor.md +99 -0
  49. package/.agent/agents/ux-reviewer.md +104 -0
  50. package/.agent/agents/visual-reviewer.md +98 -0
  51. package/.agent/agents/vitals-reviewer.md +23 -2
  52. package/.agent/history/README.md +53 -0
  53. package/.agent/history/case-law/cases/template-case.json +19 -0
  54. package/.agent/history/integrity_manifest.json +131 -33
  55. package/.agent/history/memory/.memory.idx +1581 -1
  56. package/.agent/history/memory/MEMORY.md +105 -1
  57. package/.agent/routing_index.json +272 -690
  58. package/.agent/rules/GEMINI.md +10 -12
  59. package/.agent/rules/GEMINI_PLANNER.md +84 -0
  60. package/.agent/scripts/_utils.js +28 -7
  61. package/.agent/scripts/case_law_manager.js +2 -0
  62. package/.agent/scripts/context_broker.js +152 -19
  63. package/.agent/scripts/guardrail_engine.js +60 -5
  64. package/.agent/scripts/impact_classifier.js +167 -0
  65. package/.agent/scripts/integrity_manifest.js +10 -4
  66. package/.agent/scripts/marathon_harness.js +10 -1
  67. package/.agent/scripts/minimal_change_engine.js +437 -0
  68. package/.agent/scripts/pipeline_engine.js +856 -0
  69. package/.agent/scripts/skill_evolution.js +36 -21
  70. package/.agent/scripts/socratic_gate_policy.js +60 -0
  71. package/.agent/scripts/swarm_dispatcher.js +65 -6
  72. package/.agent/scripts/token_budget_broker.js +52 -0
  73. package/.agent/scripts/verify_all.js +13 -0
  74. package/.agent/scripts/visual_audit.js +92 -0
  75. package/.agent/skills/12-principles-of-animation/SKILL.md +19 -10
  76. package/.agent/skills/60fps-animation/SKILL.md +19 -10
  77. package/.agent/skills/accessible-animation/SKILL.md +19 -10
  78. package/.agent/skills/adapt/SKILL.md +19 -10
  79. package/.agent/skills/advanced-rag-pipelines/SKILL.md +21 -3
  80. package/.agent/skills/agent-organizer/SKILL.md +21 -7
  81. package/.agent/skills/agentic-patterns/SKILL.md +19 -7
  82. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +21 -7
  83. package/.agent/skills/animation-on-scroll/SKILL.md +19 -10
  84. package/.agent/skills/animation-systems/SKILL.md +19 -10
  85. package/.agent/skills/antfu-conventions/SKILL.md +21 -10
  86. package/.agent/skills/api-patterns/SKILL.md +21 -7
  87. package/.agent/skills/api-patterns/scripts/__pycache__/api_validator.cpython-311.pyc +0 -0
  88. package/.agent/skills/api-security-auditor/SKILL.md +21 -7
  89. package/.agent/skills/app-builder/SKILL.md +21 -7
  90. package/.agent/skills/apple-design/SKILL.md +19 -10
  91. package/.agent/skills/architecture/SKILL.md +21 -7
  92. package/.agent/skills/audit-and-fix/SKILL.md +19 -10
  93. package/.agent/skills/authentication-best-practices/SKILL.md +21 -7
  94. package/.agent/skills/backend-security-expert/SKILL.md +21 -7
  95. package/.agent/skills/baseline-ui/SKILL.md +19 -10
  96. package/.agent/skills/bash-linux/SKILL.md +21 -7
  97. package/.agent/skills/behavioral-modes/SKILL.md +19 -7
  98. package/.agent/skills/better-colors/SKILL.md +31 -14
  99. package/.agent/skills/better-ui/SKILL.md +19 -10
  100. package/.agent/skills/bolder/SKILL.md +19 -10
  101. package/.agent/skills/brainstorming/SKILL.md +17 -7
  102. package/.agent/skills/browser-native-ai/SKILL.md +19 -3
  103. package/.agent/skills/build-primitive/SKILL.md +19 -10
  104. package/.agent/skills/building-native-ui/SKILL.md +21 -7
  105. package/.agent/skills/cicd-pro/SKILL.md +21 -10
  106. package/.agent/skills/clarify/SKILL.md +19 -10
  107. package/.agent/skills/clean-code/SKILL.md +21 -7
  108. package/.agent/skills/cloud-architect/SKILL.md +21 -10
  109. package/.agent/skills/cobejs/SKILL.md +19 -10
  110. package/.agent/skills/code-review-checklist/SKILL.md +21 -7
  111. package/.agent/skills/codebase-design/SKILL.md +21 -10
  112. package/.agent/skills/colorize/SKILL.md +19 -10
  113. package/.agent/skills/compact-landing/SKILL.md +19 -10
  114. package/.agent/skills/company-logos/SKILL.md +19 -10
  115. package/.agent/skills/config-validator/SKILL.md +21 -7
  116. package/.agent/skills/containerization-pro/SKILL.md +21 -10
  117. package/.agent/skills/create-design-md/SKILL.md +19 -10
  118. package/.agent/skills/critique/SKILL.md +19 -10
  119. package/.agent/skills/csharp-developer/SKILL.md +21 -7
  120. package/.agent/skills/data-validation-schemas/SKILL.md +21 -7
  121. package/.agent/skills/database-design/SKILL.md +21 -7
  122. package/.agent/skills/database-design/scripts/__pycache__/schema_validator.cpython-311.pyc +0 -0
  123. package/.agent/skills/delight/SKILL.md +19 -10
  124. package/.agent/skills/deployment-procedures/SKILL.md +21 -7
  125. package/.agent/skills/design-lab/SKILL.md +21 -10
  126. package/.agent/skills/devops-engineer/SKILL.md +21 -7
  127. package/.agent/skills/devops-incident-responder/SKILL.md +21 -7
  128. package/.agent/skills/diagnosing-bugs/SKILL.md +21 -10
  129. package/.agent/skills/distill/SKILL.md +19 -10
  130. package/.agent/skills/documentation-templates/SKILL.md +21 -7
  131. package/.agent/skills/domain-modeling/SKILL.md +21 -10
  132. package/.agent/skills/edge-computing/SKILL.md +21 -7
  133. package/.agent/skills/emil-design-eng/SKILL.md +19 -10
  134. package/.agent/skills/error-resilience/SKILL.md +21 -7
  135. package/.agent/skills/extract-design-system/SKILL.md +21 -7
  136. package/.agent/skills/fabel-protocol/SKILL.md +19 -2
  137. package/.agent/skills/fixing-accessibility/SKILL.md +25 -14
  138. package/.agent/skills/fixing-metadata/SKILL.md +19 -10
  139. package/.agent/skills/fixing-motion-performance/SKILL.md +19 -10
  140. package/.agent/skills/framer-motion-expert/SKILL.md +19 -6
  141. package/.agent/skills/frontend-design/SKILL.md +66 -204
  142. package/.agent/skills/frontend-design/scripts/__pycache__/accessibility_checker.cpython-311.pyc +0 -0
  143. package/.agent/skills/frontend-design/scripts/__pycache__/ux_audit.cpython-311.pyc +0 -0
  144. package/.agent/skills/frontend-security-expert/SKILL.md +21 -7
  145. package/.agent/skills/game-design-expert/SKILL.md +21 -7
  146. package/.agent/skills/game-engineering-expert/SKILL.md +21 -7
  147. package/.agent/skills/generative-ui-expert/SKILL.md +19 -3
  148. package/.agent/skills/geo-fundamentals/SKILL.md +21 -7
  149. package/.agent/skills/geo-fundamentals/scripts/__pycache__/geo_checker.cpython-311.pyc +0 -0
  150. package/.agent/skills/git-pro/SKILL.md +21 -10
  151. package/.agent/skills/github-operations/SKILL.md +21 -7
  152. package/.agent/skills/gpt-taste/SKILL.md +19 -10
  153. package/.agent/skills/gsap-core/SKILL.md +21 -4
  154. package/.agent/skills/gsap-frameworks/SKILL.md +21 -4
  155. package/.agent/skills/gsap-performance/SKILL.md +20 -5
  156. package/.agent/skills/gsap-plugins/SKILL.md +20 -5
  157. package/.agent/skills/gsap-react/SKILL.md +20 -5
  158. package/.agent/skills/gsap-scrolltrigger/SKILL.md +21 -4
  159. package/.agent/skills/gsap-timeline/SKILL.md +20 -5
  160. package/.agent/skills/gsap-utils/SKILL.md +20 -5
  161. package/.agent/skills/harden/SKILL.md +19 -10
  162. package/.agent/skills/harness-protocol/SKILL.md +20 -4
  163. package/.agent/skills/i18n-localization/SKILL.md +21 -7
  164. package/.agent/skills/i18n-localization/scripts/__pycache__/i18n_checker.cpython-311.pyc +0 -0
  165. package/.agent/skills/impeccable/SKILL.md +21 -10
  166. package/.agent/skills/improve-codebase-architecture/SKILL.md +21 -10
  167. package/.agent/skills/improve-ui/SKILL.md +19 -10
  168. package/.agent/skills/intelligent-routing/SKILL.md +19 -7
  169. package/.agent/skills/knowledge-graph/SKILL.md +20 -4
  170. package/.agent/skills/landing-page/SKILL.md +20 -10
  171. package/.agent/skills/lint-and-validate/SKILL.md +21 -7
  172. package/.agent/skills/lint-and-validate/scripts/__pycache__/lint_runner.cpython-311.pyc +0 -0
  173. package/.agent/skills/lint-and-validate/scripts/__pycache__/type_coverage.cpython-311.pyc +0 -0
  174. package/.agent/skills/llm-engineering/SKILL.md +21 -7
  175. package/.agent/skills/local-first/SKILL.md +21 -7
  176. package/.agent/skills/local-first-architecture/SKILL.md +19 -10
  177. package/.agent/skills/lottie-animation/SKILL.md +19 -10
  178. package/.agent/skills/marquee-loop/SKILL.md +19 -10
  179. package/.agent/skills/masked-reveal/SKILL.md +19 -10
  180. package/.agent/skills/mcp-builder/SKILL.md +21 -7
  181. package/.agent/skills/micro-interaction/SKILL.md +19 -10
  182. package/.agent/skills/mobile-design/SKILL.md +21 -6
  183. package/.agent/skills/mobile-design/scripts/__pycache__/mobile_audit.cpython-311.pyc +0 -0
  184. package/.agent/skills/monorepo-management/SKILL.md +21 -7
  185. package/.agent/skills/morphing-icons/SKILL.md +19 -10
  186. package/.agent/skills/motion-engineering/SKILL.md +86 -171
  187. package/.agent/skills/nextjs-react-expert/SKILL.md +19 -7
  188. package/.agent/skills/nextjs-react-expert/scripts/__pycache__/convert_rules.cpython-311.pyc +0 -0
  189. package/.agent/skills/nextjs-react-expert/scripts/__pycache__/react_performance_checker.cpython-311.pyc +0 -0
  190. package/.agent/skills/nodejs-best-practices/SKILL.md +21 -7
  191. package/.agent/skills/observability/SKILL.md +21 -7
  192. package/.agent/skills/page-transition-animation/SKILL.md +19 -10
  193. package/.agent/skills/parallel-agents/SKILL.md +23 -7
  194. package/.agent/skills/performance-profiling/SKILL.md +21 -7
  195. package/.agent/skills/performance-profiling/scripts/__pycache__/lighthouse_audit.cpython-311.pyc +0 -0
  196. package/.agent/skills/plan-writing/SKILL.md +21 -7
  197. package/.agent/skills/platform-engineer/SKILL.md +21 -7
  198. package/.agent/skills/playwright-best-practices/SKILL.md +21 -7
  199. package/.agent/skills/polish/SKILL.md +19 -10
  200. package/.agent/skills/powershell-windows/SKILL.md +21 -7
  201. package/.agent/skills/pricing-page/SKILL.md +19 -10
  202. package/.agent/skills/product-aware-heuristics/SKILL.md +358 -0
  203. package/.agent/skills/progressive-blur/SKILL.md +19 -10
  204. package/.agent/skills/project-idioms/SKILL.md +20 -8
  205. package/.agent/skills/python-patterns/SKILL.md +21 -7
  206. package/.agent/skills/python-pro/SKILL.md +21 -6
  207. package/.agent/skills/quieter/SKILL.md +19 -10
  208. package/.agent/skills/react-doctor/SKILL.md +19 -10
  209. package/.agent/skills/react-specialist/SKILL.md +19 -6
  210. package/.agent/skills/readme-builder/SKILL.md +21 -7
  211. package/.agent/skills/realtime-patterns/SKILL.md +21 -7
  212. package/.agent/skills/red-team-tactics/SKILL.md +21 -7
  213. package/.agent/skills/redesign-skill/SKILL.md +19 -10
  214. package/.agent/skills/review-animations/SKILL.md +21 -10
  215. package/.agent/skills/rust-pro/SKILL.md +21 -7
  216. package/.agent/skills/seo-fundamentals/SKILL.md +21 -7
  217. package/.agent/skills/seo-fundamentals/scripts/__pycache__/seo_checker.cpython-311.pyc +0 -0
  218. package/.agent/skills/server-management/SKILL.md +21 -7
  219. package/.agent/skills/shadcn-ui-expert/SKILL.md +21 -7
  220. package/.agent/skills/shape/SKILL.md +19 -10
  221. package/.agent/skills/skill-creator/SKILL.md +21 -7
  222. package/.agent/skills/soft-skill/SKILL.md +19 -10
  223. package/.agent/skills/sounds-on-the-web/SKILL.md +19 -10
  224. package/.agent/skills/sql-pro/SKILL.md +21 -7
  225. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +21 -7
  226. package/.agent/skills/svg-animation/SKILL.md +19 -10
  227. package/.agent/skills/swiftui-expert/SKILL.md +21 -7
  228. package/.agent/skills/swiss-design/SKILL.md +19 -10
  229. package/.agent/skills/system-design-pro/SKILL.md +21 -9
  230. package/.agent/skills/systematic-debugging/SKILL.md +21 -7
  231. package/.agent/skills/tailwind-patterns/SKILL.md +21 -7
  232. package/.agent/skills/taste-skill/SKILL.md +19 -10
  233. package/.agent/skills/tdd-workflow/SKILL.md +21 -10
  234. package/.agent/skills/test-result-analyzer/SKILL.md +18 -6
  235. package/.agent/skills/testing-patterns/SKILL.md +21 -7
  236. package/.agent/skills/testing-patterns/scripts/__pycache__/test_runner.cpython-311.pyc +0 -0
  237. package/.agent/skills/thermo-nuclear-code-quality-review/SKILL.md +21 -10
  238. package/.agent/skills/thinking-protocol/SKILL.md +20 -8
  239. package/.agent/skills/to-spring-or-not-to-spring/SKILL.md +19 -10
  240. package/.agent/skills/transitions-dev/SKILL.md +19 -10
  241. package/.agent/skills/trend-researcher/SKILL.md +17 -6
  242. package/.agent/skills/typescript-advanced/SKILL.md +21 -7
  243. package/.agent/skills/typeset/SKILL.md +19 -10
  244. package/.agent/skills/ui-reasoning-engine/SKILL.md +154 -0
  245. package/.agent/skills/ui-skill-packs/SKILL.md +77 -0
  246. package/.agent/skills/ui-skills-root/SKILL.md +21 -9
  247. package/.agent/skills/ui-ux-pro-max/SKILL.md +62 -583
  248. package/.agent/skills/ui-ux-researcher/SKILL.md +17 -6
  249. package/.agent/skills/vue-expert/SKILL.md +19 -6
  250. package/.agent/skills/vulnerability-scanner/SKILL.md +21 -7
  251. package/.agent/skills/vulnerability-scanner/scripts/__pycache__/security_scan.cpython-311.pyc +0 -0
  252. package/.agent/skills/web-accessibility-auditor/SKILL.md +21 -7
  253. package/.agent/skills/web-design-guidelines/SKILL.md +32 -206
  254. package/.agent/skills/web-quality-audit/SKILL.md +19 -10
  255. package/.agent/skills/webapp-testing/SKILL.md +21 -7
  256. package/.agent/skills/webapp-testing/scripts/__pycache__/playwright_runner.cpython-311.pyc +0 -0
  257. package/.agent/skills/webgpu-performance/SKILL.md +19 -3
  258. package/.agent/skills/whimsy-injector/SKILL.md +20 -10
  259. package/.agent/skills/workflow-optimizer/SKILL.md +16 -6
  260. package/.agent/templates/DESIGN.md +292 -0
  261. package/.agent/templates/design-tokens.json +137 -0
  262. package/.agent/workflows/acf.md +13 -6
  263. package/.agent/workflows/api-tester.md +15 -8
  264. package/.agent/workflows/audit.md +19 -8
  265. package/.agent/workflows/brainstorm.md +14 -9
  266. package/.agent/workflows/changelog.md +14 -8
  267. package/.agent/workflows/create.md +16 -8
  268. package/.agent/workflows/debug.md +15 -10
  269. package/.agent/workflows/deploy.md +16 -8
  270. package/.agent/workflows/enhance.md +15 -10
  271. package/.agent/workflows/fix.md +15 -8
  272. package/.agent/workflows/generate.md +17 -11
  273. package/.agent/workflows/marathon.md +15 -8
  274. package/.agent/workflows/migrate.md +16 -8
  275. package/.agent/workflows/minimal.md +94 -0
  276. package/.agent/workflows/orchestrate.md +15 -8
  277. package/.agent/workflows/performance-benchmarker.md +15 -8
  278. package/.agent/workflows/pipeline.md +155 -0
  279. package/.agent/workflows/plan.md +14 -10
  280. package/.agent/workflows/preview.md +14 -7
  281. package/.agent/workflows/refactor.md +16 -8
  282. package/.agent/workflows/review-ai.md +15 -7
  283. package/.agent/workflows/review.md +15 -7
  284. package/.agent/workflows/session.md +14 -7
  285. package/.agent/workflows/status.md +13 -7
  286. package/.agent/workflows/strengthen-skills.md +15 -6
  287. package/.agent/workflows/super-prompt.md +19 -10
  288. package/.agent/workflows/swarm.md +15 -7
  289. package/.agent/workflows/test.md +15 -8
  290. package/.agent/workflows/tribunal-backend.md +16 -9
  291. package/.agent/workflows/tribunal-database.md +15 -8
  292. package/.agent/workflows/tribunal-frontend.md +26 -11
  293. package/.agent/workflows/tribunal-full.md +29 -14
  294. package/.agent/workflows/tribunal-mobile.md +15 -8
  295. package/.agent/workflows/tribunal-performance.md +15 -8
  296. package/.agent/workflows/tribunal-speed.md +16 -9
  297. package/.agent/workflows/tribunal-ui.md +82 -0
  298. package/.agent/workflows/ui-ux-pro-max.md +51 -107
  299. package/CONTRIBUTING.md +2 -2
  300. package/README.md +5 -5
  301. package/bin/mcp-server.js +126 -76
  302. package/bin/wrapper.js +67 -31
  303. package/dist/cli.js +39 -1
  304. package/dist/commands/compile.js +7 -0
  305. package/dist/commands/context.js +8 -3
  306. package/dist/commands/graph.js +8 -2
  307. package/dist/commands/init.js +37 -2
  308. package/dist/commands/memory.js +119 -68
  309. package/dist/commands/minimal.js +71 -0
  310. package/dist/commands/native.js +228 -0
  311. package/dist/commands/optimize.js +15 -5
  312. package/dist/commands/validate.js +67 -0
  313. package/dist/esm/index.mjs +26 -32
  314. package/dist/mcp/server.js +4 -138
  315. package/dist/utils/fs.js +10 -4
  316. package/dist/utils/helpers.js +10 -1
  317. package/dist/utils/version.js +9 -2
  318. package/mcp_config.json +10 -1
  319. package/package.json +19 -15
  320. package/scripts/benchmark.js +58 -0
  321. package/scripts/sync-version.js +129 -76
  322. package/scripts/visual_audit.js +126 -0
@@ -135,25 +135,23 @@ Did I load the agent's required skills? → If no: check frontmatter skills: fi
135
135
 
136
136
  ---
137
137
 
138
- ## Step 3 — Socratic Gate (Before Complex Work)
138
+ ## Step 3 — Socratic Gate (Adaptive Governance Policy)
139
139
 
140
- For any complex build, new feature, or unclear request stop and ask before writing code.
140
+ The Socratic Gate is **adaptive** based on the task's **Impact Tier** evaluated by `impact_classifier.js`:
141
141
 
142
- **Required questions by type:**
143
-
144
- | Request | Questions |
145
- | -------------------- | ------------------------------------------------------------ |
146
- | New feature or build | 1-2 targeted questions about the highest-ambiguity decisions |
147
- | Code edit or bug fix | Confirm understanding of the root cause before fixing |
148
- | Vague request | 1 question about the core goal, then infer the rest |
149
- | Full orchestration | Block all subagents until plan is confirmed |
142
+ | Impact Tier | Scope | Socratic Gate Policy |
143
+ | ----------- | ----- | --------------------- |
144
+ | **Tier 0 (Fast-Pass)** | Typo, CSS, markdown, formatting | **BYPASS** — 0 questions, 0 LLM calls |
145
+ | **Tier 1 (Express Pass)** | Single-file component or function logic edit | **BYPASS** — 0 questions, single specialist pass |
146
+ | **Tier 2 (Targeted Audit)** | Multi-file feature edit | **CONDITIONAL** — Ask 1 question ONLY if ambiguity score > 0.5 |
147
+ | **Tier 3 (Full Gauntlet)** | Auth, schema, migration, breaking architectural changes | **REQUIRED** 1-2 targeted questions before execution (bypassable via `--no-gate` / `--express`) |
150
148
 
151
149
  **Rules:**
152
150
 
153
151
  - Ask only what you cannot infer from context. Check the conversation first.
154
152
  - Max 2 questions per response. If you need more, prioritize the most blocking one.
155
153
  - Never ask what the user already told you. Never ask generic "what stack?" if the repo shows it.
156
- - Do not write a single line of code until the gate is cleared
154
+ - Bypass gate automatically on Tier 0 and Tier 1 tasks to preserve rapid developer flow.
157
155
 
158
156
  ---
159
157
 
@@ -222,7 +220,7 @@ The Human Gate is never skipped. No code is written to a file without explicit u
222
220
  | Database/SQL | logic + security + sql + schema + complexity-reviewer |
223
221
  | Mobile/Cross-platform | logic + security + mobile-reviewer + type-safety + complexity-reviewer |
224
222
  | Any domain | + performance (if optimization) |
225
- | Before merge | /tribunal-full (all 20) |
223
+ | Before merge | /tribunal-full (all 27 reviewers) |
226
224
 
227
225
  ---
228
226
 
@@ -0,0 +1,84 @@
1
+ ---
2
+ trigger: pipeline_only
3
+ ---
4
+
5
+ # Tribunal Planner Rules — Condensed
6
+
7
+ Minimal rules for Pass 1 (Planning) of the Hybrid Pipeline.
8
+ These are the ONLY rules active during the planning phase.
9
+ Full rules (GEMINI.md) are NOT loaded — this saves ~4,800 tokens.
10
+
11
+ ---
12
+
13
+ ## Task Classification
14
+
15
+ | Type | Signals | Output |
16
+ | -------------- | -------------------------------------------------- | ------------------- |
17
+ | Question | "what is", "how does", "explain" | Text only — no code |
18
+ | Simple edit | "fix", "change", "update" (single file) | Direct edit |
19
+ | Complex build | "build", "create", "implement", "design" | Structured spec |
20
+ | Refactor | "refactor", "clean", "extract", "split" | Structured spec |
21
+ | Test | "test", "spec", "e2e" | Test spec |
22
+
23
+ ---
24
+
25
+ ## Stack Detection
26
+
27
+ | Keywords | Stack |
28
+ | ------------------------------------------- | -------------- |
29
+ | react, jsx, tsx, component, hook | react |
30
+ | next, nextjs, server component | nextjs |
31
+ | vue, nuxt, composition api | vue |
32
+ | typescript, interface, generic | typescript |
33
+ | python, fastapi, django, flask | python |
34
+ | express, hono, koa, node | node |
35
+ | sql, postgres, prisma, drizzle | sql |
36
+ | rust, cargo, tokio, axum | rust |
37
+ | css, tailwind, responsive | css |
38
+
39
+ ---
40
+
41
+ ## Skill Selection Rules
42
+
43
+ 1. Match task keywords against skill descriptions
44
+ 2. Match file extensions against stack affinities
45
+ 3. Select TOP 3 skills by relevance score
46
+ 4. Never load more than 3 skills for a single pass
47
+
48
+ ---
49
+
50
+ ## Output: Structured Spec Schema
51
+
52
+ The planner MUST output a JSON object matching this schema:
53
+
54
+ ```json
55
+ {
56
+ "task_type": "frontend_component | api_endpoint | database_query | auth_flow | test_suite | refactor | animation | general",
57
+ "stack": ["react", "typescript", "css"],
58
+ "target_file": "path/to/file.tsx",
59
+ "essential_skills": [
60
+ { "name": "skill-name", "score": 5.0 }
61
+ ],
62
+ "constraints": {
63
+ "accessibility": true,
64
+ "responsive": true,
65
+ "dark_mode": false,
66
+ "animation": false,
67
+ "tests_required": false,
68
+ "type_safe": true
69
+ },
70
+ "spec": "Original user task description"
71
+ }
72
+ ```
73
+
74
+ ---
75
+
76
+ ## Planner Anti-Patterns
77
+
78
+ ```
79
+ ❌ Do not load full GEMINI.md — use this condensed file only
80
+ ❌ Do not load agent persona .md files — those are for generation, not planning
81
+ ❌ Do not generate code in the planning phase — output spec JSON only
82
+ ❌ Do not select more than 3 essential skills
83
+ ❌ Do not include tribunal review rules — those run in Pass 3 (validator)
84
+ ```
@@ -226,9 +226,34 @@ function parseArgs(argv, schema = {}) {
226
226
 
227
227
  // ── Command Runner ──────────────────────────────────────────────────────────
228
228
 
229
+ const WINDOWS_CMD_SHIMS = new Set(["npm", "npx", "pnpm", "yarn", "bun", "bunx"]);
230
+
231
+ /**
232
+ * Select the executable that should be passed to spawnSync.
233
+ * Only package-manager shims need a .cmd suffix on Windows; native executables
234
+ * such as node, cargo, and git must retain their original names.
235
+ *
236
+ * @param {string} cmd - Command to run
237
+ * @param {string} [platform] - Platform override for deterministic testing
238
+ * @returns {string}
239
+ */
240
+ function normalizeCommand(cmd, platform = process.platform) {
241
+ const lowerCaseCommand = cmd.toLowerCase();
242
+ const hasPath = cmd.includes("/") || cmd.includes("\\\\");
243
+ if (
244
+ platform === "win32" &&
245
+ !hasPath &&
246
+ !lowerCaseCommand.endsWith(".cmd") &&
247
+ WINDOWS_CMD_SHIMS.has(lowerCaseCommand)
248
+ ) {
249
+ return `${cmd}.cmd`;
250
+ }
251
+ return cmd;
252
+ }
253
+
229
254
  /**
230
255
  * Run a command synchronously and return a structured result.
231
- * Handles Windows .cmd shims automatically.
256
+ * Handles known Windows package-manager shims without rewriting native tools.
232
257
  *
233
258
  * @param {string} cmd - Command to run
234
259
  * @param {string[]} args - Arguments
@@ -237,12 +262,7 @@ function parseArgs(argv, schema = {}) {
237
262
  */
238
263
  function runCommand(cmd, args = [], opts = {}) {
239
264
  const { spawnSync } = require("child_process");
240
- const executable =
241
- process.platform === "win32" &&
242
- !cmd.endsWith(".cmd") &&
243
- !cmd.includes(path.sep)
244
- ? `${cmd}.cmd`
245
- : cmd;
265
+ const executable = normalizeCommand(cmd);
246
266
 
247
267
  const result = spawnSync(executable, args, {
248
268
  encoding: "utf8",
@@ -275,5 +295,6 @@ module.exports = {
275
295
  // CLI
276
296
  parseArgs,
277
297
  // Commands
298
+ normalizeCommand,
278
299
  runCommand,
279
300
  };
@@ -58,6 +58,7 @@ const VALID_DOMAINS = new Set([
58
58
  "mobile",
59
59
  "testing",
60
60
  "devops",
61
+ "minimal_change",
61
62
  "general",
62
63
  ]);
63
64
  const VALID_VERDICTS = new Set([
@@ -65,6 +66,7 @@ const VALID_VERDICTS = new Set([
65
66
  "APPROVED_WITH_CONDITIONS",
66
67
  "PRECEDENT_SET",
67
68
  "OVERRULED",
69
+ "MINIMALITY_REJECTED",
68
70
  ]);
69
71
 
70
72
  // ── Noise filter ────────────────────────────────────────────────────────────
@@ -49,11 +49,43 @@
49
49
 
50
50
  const fs = require("fs");
51
51
  const path = require("path");
52
+ const { execFileSync } = require("child_process");
52
53
 
53
54
  // ── Colours & Shared Utilities ────────────────────────────────────────────────
54
55
  const { GREEN, YELLOW, CYAN, RED, BOLD, DIM, RESET } = require("./_colors");
55
56
  const { findAgentDir } = require("./_utils");
56
57
 
58
+ /**
59
+ * Attempt native Rust context resolution for sub-15ms execution
60
+ */
61
+ function tryNativeContextBroker(repoPath, targetFile) {
62
+ if (process.env.TK_DISABLE_RUST === "1") return null;
63
+
64
+ const candidates = [
65
+ path.join(__dirname, "../../target/release/tribunal-core.exe"),
66
+ path.join(__dirname, "../../target/release/tribunal-core"),
67
+ path.join(__dirname, "../../target/debug/tribunal-core.exe"),
68
+ path.join(__dirname, "../../target/debug/tribunal-core"),
69
+ "tribunal-core"
70
+ ];
71
+
72
+ for (const bin of candidates) {
73
+ try {
74
+ if (bin.includes(path.sep) && !fs.existsSync(bin)) continue;
75
+ const args = ["context-broker", "--repo-path", repoPath];
76
+ if (targetFile) args.push("--target-file", targetFile);
77
+ const out = execFileSync(bin, args, { encoding: "utf8", timeout: 2000, stdio: ["ignore", "pipe", "ignore"] });
78
+ if (out && out.trim().startsWith("{")) {
79
+ return JSON.parse(out);
80
+ }
81
+ } catch (_) {
82
+ // Continue to next candidate or fallback
83
+ }
84
+ }
85
+ return null;
86
+ }
87
+
88
+
57
89
 
58
90
  // ── Domain → Skill affinity map ───────────────────────────────────────────────
59
91
  // Keywords in the user's task that strongly indicate specific skills.
@@ -355,25 +387,6 @@ const BASELINE_SKILLS = [
355
387
 
356
388
  // ── Skill catalogue (loaded from disk) ───────────────────────────────────────
357
389
 
358
- /**
359
- * Find the .agent directory by walking up from cwd.
360
- * @returns {string} path to .agent/
361
- */
362
- function findAgentDir() {
363
- let current = path.resolve(process.cwd());
364
- const root = path.parse(current).root;
365
- while (current !== root) {
366
- const candidate = path.join(current, ".agent");
367
- if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory())
368
- return candidate;
369
- current = path.dirname(current);
370
- }
371
- console.error(
372
- `${RED}✖ .agent/ not found. Run: npx tribunal-kit init${RESET}`,
373
- );
374
- process.exit(1);
375
- }
376
-
377
390
  /**
378
391
  * Parse the YAML frontmatter from a SKILL.md file.
379
392
  * Returns { name, description, ... } or null on parse failure.
@@ -831,13 +844,119 @@ function broker(task, files = [], model = "large", agentDir = null) {
831
844
  return { ...selection, promptText };
832
845
  }
833
846
 
847
+ /**
848
+ * Pipeline-specific broker for the 3-pass hybrid architecture.
849
+ * Returns context tailored to each pipeline phase:
850
+ * - "plan": Skill names + descriptions only (for task classification)
851
+ * - "build": Top 2-3 essential skills' keyRules only (for code generation)
852
+ * - "validate": Validator configuration (which patterns to check)
853
+ *
854
+ * @param {string} task - User task description
855
+ * @param {string[]} files - Files being touched
856
+ * @param {string} phase - 'plan' | 'build' | 'validate'
857
+ * @param {string} agentDir - Path to .agent/ directory
858
+ * @returns {object} Phase-specific context
859
+ */
860
+ function brokerForPipeline(task, files = [], phase = "build", agentDir = null) {
861
+ const resolvedAgentDir = agentDir || findAgentDir();
862
+ const skills = loadSkills(resolvedAgentDir);
863
+ // Always use "small" model tier for aggressive pruning in pipeline mode
864
+ const selection = selectSkills(task, files, "small", skills);
865
+
866
+ if (phase === "plan") {
867
+ // Plan phase: skill names and descriptions only — no content, no keyRules
868
+ return {
869
+ phase: "plan",
870
+ skills: selection.essential.slice(0, 6).map(s => ({
871
+ name: s.name,
872
+ description: s.description,
873
+ score: selection.scores.get(s.name) || 0,
874
+ })),
875
+ total_matched: selection.essential.length + selection.available.length,
876
+ };
877
+ }
878
+
879
+ if (phase === "build") {
880
+ // Build phase: top 3 essential keyRules — maximum density, minimum tokens
881
+ return {
882
+ phase: "build",
883
+ skills: selection.essential.slice(0, 3).map(s => ({
884
+ name: s.name,
885
+ keyRules: s.keyRules || "",
886
+ score: selection.scores.get(s.name) || 0,
887
+ })),
888
+ };
889
+ }
890
+
891
+ if (phase === "validate") {
892
+ // Validate phase: return detected stack for targeted pattern matching
893
+ const fileExts = files.map(f => path.extname(f).toLowerCase()).filter(Boolean);
894
+ return {
895
+ phase: "validate",
896
+ detectedExtensions: fileExts,
897
+ essentialSkillNames: selection.essential.slice(0, 3).map(s => s.name),
898
+ };
899
+ }
900
+
901
+ // Fallback: return full selection
902
+ return { phase, ...selection };
903
+ }
904
+
905
+ /**
906
+ * Format pipeline-plan output: compact skill list for planner context.
907
+ * @param {string} task
908
+ * @param {object} pipelineResult - Output of brokerForPipeline(task, files, "plan")
909
+ * @returns {string}
910
+ */
911
+ function formatPipelinePlan(task, pipelineResult) {
912
+ const lines = [
913
+ "# Pipeline Planner Context",
914
+ `# Task: ${task}`,
915
+ "",
916
+ "## Matched Skills (by relevance)",
917
+ "",
918
+ ];
919
+ for (const s of pipelineResult.skills) {
920
+ lines.push(`- **${s.name}** (score: ${s.score.toFixed(1)}): ${(s.description || "").slice(0, 120)}`);
921
+ }
922
+ lines.push("");
923
+ lines.push(`Total matched: ${pipelineResult.total_matched}`);
924
+ return lines.join("\n");
925
+ }
926
+
927
+ /**
928
+ * Format pipeline-build output: condensed keyRules for builder prompt injection.
929
+ * @param {string} task
930
+ * @param {object} pipelineResult - Output of brokerForPipeline(task, files, "build")
931
+ * @returns {string}
932
+ */
933
+ function formatPipelineBuild(task, pipelineResult) {
934
+ const lines = [
935
+ "# Builder Context — Essential Rules Only",
936
+ `# Task: ${task}`,
937
+ "",
938
+ ];
939
+ for (const s of pipelineResult.skills) {
940
+ lines.push(`## ${s.name}`);
941
+ lines.push("");
942
+ lines.push(s.keyRules || "(no key rules extracted)");
943
+ lines.push("");
944
+ lines.push("---");
945
+ lines.push("");
946
+ }
947
+ return lines.join("\n");
948
+ }
949
+
834
950
  module.exports = {
835
951
  broker,
952
+ brokerForPipeline,
836
953
  selectSkills,
837
954
  loadSkills,
838
955
  scoreSkill,
839
956
  tokenize,
840
957
  findAgentDir,
958
+ extractKeyRules,
959
+ tryNativeContextBroker,
841
960
  };
842
961
 
843
962
  // ── CLI Entry ─────────────────────────────────────────────────────────────────
@@ -925,8 +1044,22 @@ ${BOLD}Examples:${RESET}
925
1044
  case "prompt":
926
1045
  console.log(formatPrompt(task, effectiveModel, selection));
927
1046
  break;
1047
+ case "pipeline-plan": {
1048
+ const pipelinePlan = brokerForPipeline(task, files, "plan", agentDir);
1049
+ console.log(formatPipelinePlan(task, pipelinePlan));
1050
+ break;
1051
+ }
1052
+ case "pipeline-build": {
1053
+ const pipelineBuild = brokerForPipeline(task, files, "build", agentDir);
1054
+ console.log(formatPipelineBuild(task, pipelineBuild));
1055
+ break;
1056
+ }
928
1057
  default: // 'report'
929
1058
  formatReport(task, effectiveModel, selection, elapsed);
930
1059
  break;
931
1060
  }
932
1061
  }
1062
+
1063
+
1064
+
1065
+
@@ -35,6 +35,9 @@ const path = require("path");
35
35
  */
36
36
  function ruleFileExists(content, manifest, _ctx) {
37
37
  const violations = [];
38
+ if (_ctx && _ctx.filePath && (_ctx.filePath.endsWith(".js") || _ctx.filePath.endsWith(".py") || _ctx.filePath.endsWith(".json"))) {
39
+ return violations;
40
+ }
38
41
  const refs = manifest.cross_references || [];
39
42
 
40
43
  const agentDir = path.join(_ctx.projectRoot, ".agent");
@@ -104,7 +107,7 @@ function ruleReviewerCount(content, manifest, _ctx) {
104
107
  const actualCount = manifest.agents ? manifest.agents.reviewer_count : null;
105
108
  if (actualCount === null) return violations;
106
109
 
107
- const countRegex = /(\d+)[-\s]+(?:parallel\s+)?(?:reviewers?|agents?)/gi;
110
+ const countRegex = /(\d+)\s*(?:-\s*)?(?:(?:parallel|domain(?:-specific)?|tribunal|code)\s+)*reviewers?\b/gi;
108
111
  let match;
109
112
  while ((match = countRegex.exec(content)) !== null) {
110
113
  const claimed = parseInt(match[1], 10);
@@ -132,6 +135,9 @@ function ruleReviewerCount(content, manifest, _ctx) {
132
135
  */
133
136
  function ruleSkillExists(content, manifest, _ctx) {
134
137
  const violations = [];
138
+ if (_ctx && _ctx.filePath && (_ctx.filePath.endsWith(".js") || _ctx.filePath.endsWith(".py") || _ctx.filePath.endsWith(".json"))) {
139
+ return violations;
140
+ }
135
141
  const skillNames = new Set(manifest.skills ? manifest.skills.names : []);
136
142
  if (skillNames.size === 0) return violations;
137
143
 
@@ -195,6 +201,9 @@ function ruleSkillExists(content, manifest, _ctx) {
195
201
  */
196
202
  function ruleAgentExists(content, manifest, _ctx) {
197
203
  const violations = [];
204
+ if (_ctx && _ctx.filePath && (_ctx.filePath.endsWith(".js") || _ctx.filePath.endsWith(".py") || _ctx.filePath.endsWith(".json"))) {
205
+ return violations;
206
+ }
198
207
  const agentNames = new Set(manifest.agents ? manifest.agents.all : []);
199
208
  if (agentNames.size === 0) return violations;
200
209
 
@@ -225,9 +234,9 @@ function ruleAgentExists(content, manifest, _ctx) {
225
234
  function ruleUnresolvedVerify(content, _manifest, ctx) {
226
235
  const violations = [];
227
236
 
228
- // Skip this check for the internal .agent documentation files themselves
229
- // because they contain instructions ABOUT the VERIFY tag.
230
- if (ctx && ctx.filePath && ctx.filePath.includes(".agent") && ctx.filePath.endsWith(".md")) {
237
+ // Skip this check for the internal .agent files themselves
238
+ // because they contain instructions/comments ABOUT the VERIFY tag.
239
+ if (ctx && ctx.filePath && ctx.filePath.includes(".agent")) {
231
240
  return violations;
232
241
  }
233
242
 
@@ -360,6 +369,51 @@ function ruleImportPhantom(content, _manifest, ctx) {
360
369
  return violations;
361
370
  }
362
371
 
372
+ /**
373
+ * Rule 9: rust-module-registration
374
+ * Validates that Rust modules in crates/core/src/commands are declared in mod.rs
375
+ * and registered in wrapper.js RUST_COMMANDS set.
376
+ */
377
+ function ruleRustModuleRegistration(content, manifest, _ctx) {
378
+ const violations = [];
379
+ const root = _ctx.projectRoot || process.cwd();
380
+
381
+ const modRs = path.join(root, "crates", "core", "src", "commands", "mod.rs");
382
+ if (fs.existsSync(modRs)) {
383
+ const modContent = fs.readFileSync(modRs, "utf8");
384
+ const requiredMods = ["context_broker", "dag_scheduler", "context_compress"];
385
+ for (const m of requiredMods) {
386
+ if (!modContent.includes(`pub mod ${m};`)) {
387
+ violations.push({
388
+ rule: "rust-module-registration",
389
+ severity: "warning",
390
+ location: "crates/core/src/commands/mod.rs",
391
+ message: `Rust command module "${m}" not declared in mod.rs`,
392
+ suggestion: `Add "pub mod ${m};" to crates/core/src/commands/mod.rs`,
393
+ autoFixable: false,
394
+ });
395
+ }
396
+ }
397
+ }
398
+
399
+ const wrapperJs = path.join(root, "bin", "wrapper.js");
400
+ if (fs.existsSync(wrapperJs)) {
401
+ const wrapperContent = fs.readFileSync(wrapperJs, "utf8");
402
+ if (!wrapperContent.includes('"context-broker"')) {
403
+ violations.push({
404
+ rule: "rust-module-registration",
405
+ severity: "warning",
406
+ location: "bin/wrapper.js",
407
+ message: 'Command "context-broker" not registered in RUST_COMMANDS in bin/wrapper.js',
408
+ suggestion: 'Add "context-broker" to RUST_COMMANDS set in bin/wrapper.js',
409
+ autoFixable: false,
410
+ });
411
+ }
412
+ }
413
+
414
+ return violations;
415
+ }
416
+
363
417
  // ── Rule Registry ─────────────────────────────────────────────────────────────
364
418
 
365
419
  const RULES = {
@@ -371,6 +425,7 @@ const RULES = {
371
425
  "unresolved-verify": ruleUnresolvedVerify,
372
426
  "numeric-consistency": ruleNumericConsistency,
373
427
  "import-phantom": ruleImportPhantom,
428
+ "rust-module-registration": ruleRustModuleRegistration,
374
429
  };
375
430
 
376
431
  // ── Main Validate Function ────────────────────────────────────────────────────
@@ -527,7 +582,7 @@ function main() {
527
582
  const content = fs.readFileSync(file, "utf8");
528
583
  const result = validate(content, manifest, {
529
584
  autoFix: fixMode,
530
- context: { projectRoot },
585
+ context: { projectRoot, filePath: file },
531
586
  });
532
587
 
533
588
  totalViolations += result.violations.length;