@r1z4x/tezgah 1.9.2 → 1.13.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 (445) hide show
  1. package/CHANGELOG.md +415 -1
  2. package/MANIFEST +404 -144
  3. package/README.de.md +1 -1
  4. package/README.es.md +1 -1
  5. package/README.fr.md +1 -1
  6. package/README.md +5 -4
  7. package/README.tr.md +1 -1
  8. package/bin/codegen +5 -2
  9. package/bin/tezgah-design +288 -1
  10. package/bin/tezgah-docs +1 -1
  11. package/bin/tezgah-doctor +39 -2
  12. package/bin/tezgah-import-ai-research +26 -12
  13. package/bin/tezgah-ocr-review +296 -0
  14. package/bin/tezgah-research +255 -44
  15. package/bin/tezgah-review-quote +185 -0
  16. package/bin/tezgah-setup +1365 -55
  17. package/bin/tezgah-skill +1 -1
  18. package/bin/tezgah-status +201 -3
  19. package/bin/tezgah-task +258 -20
  20. package/commands/adhd.md +2 -2
  21. package/commands/ponytail.md +4 -4
  22. package/docs/architecture.md +2 -2
  23. package/docs/citations-baseline.json +3 -3
  24. package/docs/clarity-baseline.json +11 -5
  25. package/docs/contract.md +91 -43
  26. package/docs/environment.md +5 -2
  27. package/docs/evidence.md +109 -17
  28. package/docs/feature-audit.md +2 -2
  29. package/docs/gate.md +60 -33
  30. package/docs/glossary.md +6 -3
  31. package/docs/hosts.md +313 -17
  32. package/docs/index.json +34 -8
  33. package/docs/judge.md +4 -2
  34. package/docs/layers.md +4 -4
  35. package/docs/models.md +37 -9
  36. package/docs/operations.md +141 -5
  37. package/docs/research.md +815 -8
  38. package/docs/skills.md +137 -13
  39. package/docs/status-line.md +121 -1
  40. package/docs/testing.md +3 -1
  41. package/hooks/hooks.json +2 -2
  42. package/hooks/lang/en.json +21 -0
  43. package/hooks/lang/tr.json +22 -1
  44. package/hooks/projects-stop.py +2 -1
  45. package/hooks/tezgah_agents.py +65 -25
  46. package/hooks/tezgah_apps.py +18 -0
  47. package/hooks/tezgah_attest.py +79 -10
  48. package/hooks/tezgah_components.py +4 -0
  49. package/hooks/tezgah_context.py +207 -55
  50. package/hooks/tezgah_extension.py +337 -0
  51. package/hooks/tezgah_gate.py +267 -79
  52. package/hooks/tezgah_integrity.py +864 -143
  53. package/hooks/tezgah_judge.py +6 -4
  54. package/hooks/tezgah_models.py +59 -19
  55. package/hooks/tezgah_orca.py +1 -1
  56. package/hooks/tezgah_paths.py +145 -8
  57. package/hooks/tezgah_policy.py +128 -57
  58. package/hooks/tezgah_rank.py +9 -6
  59. package/hooks/tezgah_replay.py +12 -6
  60. package/hooks/tezgah_research.py +1414 -76
  61. package/hooks/tezgah_research_capture.py +1544 -0
  62. package/hooks/tezgah_research_evidence.py +842 -0
  63. package/hooks/tezgah_research_stats.py +258 -0
  64. package/hooks/tezgah_skill_pick.py +408 -106
  65. package/hooks/tezgah_stack.py +236 -1
  66. package/hooks/tezgah_stopspec.py +8 -1
  67. package/hooks/tezgah_task.py +14 -5
  68. package/hooks/tezgah_taste_ledger.py +1 -1
  69. package/hosts/amp/hook.py +217 -0
  70. package/hosts/amp/tezgah-plugin.ts.in +386 -0
  71. package/hosts/antigravity/hook.py +255 -0
  72. package/hosts/codex/hook.py +2 -1
  73. package/hosts/commandcode/hook.py +239 -0
  74. package/hosts/copilot/hook.py +284 -0
  75. package/hosts/cursor/hook.py +31 -3
  76. package/hosts/droid/hook.py +259 -0
  77. package/hosts/dsh/hooks.json +1 -1
  78. package/hosts/gemini/hook.py +213 -0
  79. package/hosts/goose/hook.py +145 -0
  80. package/hosts/omp/hook.py +4 -1
  81. package/hosts/omp/tezgah-hook.ts.in +30 -7
  82. package/hosts/opencode/plugins/tezgah.js +309 -48
  83. package/hosts/opencode/tui/cli/tui.tsx +100 -0
  84. package/hosts/opencode/tui/tezgah-tui.tsx +2 -1
  85. package/hosts/qwen/hook.py +206 -0
  86. package/output-styles/tezgah.md +20 -15
  87. package/package.json +1 -1
  88. package/skills/ai-research/SKILL.md +21 -14
  89. package/skills/ai-research/SOURCE +7 -5
  90. package/skills/ai-research/index/1-frame.md +6 -6
  91. package/skills/ai-research/index/2-data.md +9 -9
  92. package/skills/ai-research/index/3-train.md +36 -36
  93. package/skills/ai-research/index/4-measure.md +13 -13
  94. package/skills/ai-research/index/5-run.md +11 -11
  95. package/skills/ai-research/index/6-write.md +23 -23
  96. package/skills/ai-research/library.json +104 -104
  97. package/skills/analyze-app/SKILL.md +17 -12
  98. package/skills/design-contract/SKILL.md +42 -7
  99. package/skills/design-contract/data-views.md +2 -2
  100. package/skills/design-library/EVALS.md +1 -1
  101. package/skills/design-library/INDEX.md +39 -39
  102. package/skills/design-library/SKILL.md +19 -13
  103. package/skills/design-library/SOURCE +45 -43
  104. package/skills/feature-audit/SKILL.md +20 -14
  105. package/skills/hallmark/LICENSE +21 -0
  106. package/skills/hallmark/SKILL.md +154 -0
  107. package/skills/hallmark/SOURCE +207 -0
  108. package/skills/hallmark/agents/openai.yaml +13 -0
  109. package/skills/hallmark/references/anatomy.md +71 -0
  110. package/skills/hallmark/references/brand-truth.md +40 -0
  111. package/skills/hallmark/references/comp.md +104 -0
  112. package/skills/hallmark/references/craft.md +116 -0
  113. package/skills/hallmark/references/dark-mode.md +49 -0
  114. package/skills/hallmark/references/data-viz.md +48 -0
  115. package/skills/hallmark/references/design-md.md +53 -0
  116. package/skills/hallmark/references/direction.md +52 -0
  117. package/skills/hallmark/references/export-formats.md +80 -0
  118. package/skills/hallmark/references/flow.md +131 -0
  119. package/skills/hallmark/references/fonts.md +58 -0
  120. package/skills/hallmark/references/gates.md +243 -0
  121. package/skills/hallmark/references/genres/atmospheric.md +24 -0
  122. package/skills/hallmark/references/genres/editorial.md +24 -0
  123. package/skills/hallmark/references/genres/modern-minimal.md +24 -0
  124. package/skills/hallmark/references/genres/playful.md +24 -0
  125. package/skills/hallmark/references/imagery.md +99 -0
  126. package/skills/hallmark/references/interaction-and-states.md +89 -0
  127. package/skills/hallmark/references/layout.md +104 -0
  128. package/skills/hallmark/references/macrostructures/01-bento-grid.md +21 -0
  129. package/skills/hallmark/references/macrostructures/02-long-document.md +35 -0
  130. package/skills/hallmark/references/macrostructures/03-marquee-hero.md +21 -0
  131. package/skills/hallmark/references/macrostructures/04-stat-led.md +21 -0
  132. package/skills/hallmark/references/macrostructures/05-workbench.md +21 -0
  133. package/skills/hallmark/references/macrostructures/06-conversational-faq.md +28 -0
  134. package/skills/hallmark/references/macrostructures/07-manifesto.md +28 -0
  135. package/skills/hallmark/references/macrostructures/08-photographic.md +21 -0
  136. package/skills/hallmark/references/macrostructures/09-quote-led.md +21 -0
  137. package/skills/hallmark/references/macrostructures/10-specimen.md +21 -0
  138. package/skills/hallmark/references/macrostructures/11-catalogue.md +21 -0
  139. package/skills/hallmark/references/macrostructures/12-letter.md +21 -0
  140. package/skills/hallmark/references/macrostructures/13-index-first.md +21 -0
  141. package/skills/hallmark/references/macrostructures/14-narrative-workflow.md +21 -0
  142. package/skills/hallmark/references/macrostructures/15-split-studio.md +21 -0
  143. package/skills/hallmark/references/macrostructures/16-feature-stack.md +23 -0
  144. package/skills/hallmark/references/macrostructures/17-type-specimen.md +19 -0
  145. package/skills/hallmark/references/macrostructures/18-portfolio-grid.md +21 -0
  146. package/skills/hallmark/references/macrostructures/19-map-diagram.md +21 -0
  147. package/skills/hallmark/references/macrostructures/20-ecosystem-index.md +19 -0
  148. package/skills/hallmark/references/macrostructures/21-component-playground.md +21 -0
  149. package/skills/hallmark/references/macrostructures.md +119 -0
  150. package/skills/hallmark/references/microinteractions.md +80 -0
  151. package/skills/hallmark/references/patterns.md +202 -0
  152. package/skills/hallmark/references/redesign.md +88 -0
  153. package/skills/hallmark/references/responsive.md +46 -0
  154. package/skills/hallmark/references/review-finish.md +19 -0
  155. package/skills/hallmark/references/review-hero.md +20 -0
  156. package/skills/hallmark/references/scroll-choreography.md +110 -0
  157. package/skills/hallmark/references/texture.md +90 -0
  158. package/skills/hallmark/references/themes/README.md +58 -0
  159. package/skills/hallmark/references/themes/almanac.jpg +0 -0
  160. package/skills/hallmark/references/themes/almanac.md +103 -0
  161. package/skills/hallmark/references/themes/arcade.jpg +0 -0
  162. package/skills/hallmark/references/themes/arcade.md +102 -0
  163. package/skills/hallmark/references/themes/atelier.jpg +0 -0
  164. package/skills/hallmark/references/themes/atelier.md +98 -0
  165. package/skills/hallmark/references/themes/bloom.jpg +0 -0
  166. package/skills/hallmark/references/themes/bloom.md +102 -0
  167. package/skills/hallmark/references/themes/blueprint.jpg +0 -0
  168. package/skills/hallmark/references/themes/blueprint.md +103 -0
  169. package/skills/hallmark/references/themes/broadside.jpg +0 -0
  170. package/skills/hallmark/references/themes/broadside.md +108 -0
  171. package/skills/hallmark/references/themes/brutal.jpg +0 -0
  172. package/skills/hallmark/references/themes/brutal.md +95 -0
  173. package/skills/hallmark/references/themes/carnival.jpg +0 -0
  174. package/skills/hallmark/references/themes/carnival.md +104 -0
  175. package/skills/hallmark/references/themes/cobalt.jpg +0 -0
  176. package/skills/hallmark/references/themes/cobalt.md +101 -0
  177. package/skills/hallmark/references/themes/console.jpg +0 -0
  178. package/skills/hallmark/references/themes/console.md +99 -0
  179. package/skills/hallmark/references/themes/coral.jpg +0 -0
  180. package/skills/hallmark/references/themes/coral.md +102 -0
  181. package/skills/hallmark/references/themes/darkroom.jpg +0 -0
  182. package/skills/hallmark/references/themes/darkroom.md +99 -0
  183. package/skills/hallmark/references/themes/dose.jpg +0 -0
  184. package/skills/hallmark/references/themes/dose.md +98 -0
  185. package/skills/hallmark/references/themes/dusk.jpg +0 -0
  186. package/skills/hallmark/references/themes/dusk.md +105 -0
  187. package/skills/hallmark/references/themes/editorial.jpg +0 -0
  188. package/skills/hallmark/references/themes/editorial.md +97 -0
  189. package/skills/hallmark/references/themes/formwork.jpg +0 -0
  190. package/skills/hallmark/references/themes/formwork.md +107 -0
  191. package/skills/hallmark/references/themes/furrow.jpg +0 -0
  192. package/skills/hallmark/references/themes/furrow.md +98 -0
  193. package/skills/hallmark/references/themes/garden.jpg +0 -0
  194. package/skills/hallmark/references/themes/garden.md +97 -0
  195. package/skills/hallmark/references/themes/grid.jpg +0 -0
  196. package/skills/hallmark/references/themes/grid.md +101 -0
  197. package/skills/hallmark/references/themes/halftone.jpg +0 -0
  198. package/skills/hallmark/references/themes/halftone.md +106 -0
  199. package/skills/hallmark/references/themes/hedgerow.jpg +0 -0
  200. package/skills/hallmark/references/themes/hedgerow.md +104 -0
  201. package/skills/hallmark/references/themes/hum.jpg +0 -0
  202. package/skills/hallmark/references/themes/hum.md +99 -0
  203. package/skills/hallmark/references/themes/index.json +2191 -0
  204. package/skills/hallmark/references/themes/ink.jpg +0 -0
  205. package/skills/hallmark/references/themes/ink.md +106 -0
  206. package/skills/hallmark/references/themes/kiln.jpg +0 -0
  207. package/skills/hallmark/references/themes/kiln.md +108 -0
  208. package/skills/hallmark/references/themes/loom.jpg +0 -0
  209. package/skills/hallmark/references/themes/loom.md +106 -0
  210. package/skills/hallmark/references/themes/lumen.jpg +0 -0
  211. package/skills/hallmark/references/themes/lumen.md +103 -0
  212. package/skills/hallmark/references/themes/manifesto.jpg +0 -0
  213. package/skills/hallmark/references/themes/manifesto.md +101 -0
  214. package/skills/hallmark/references/themes/midnight.jpg +0 -0
  215. package/skills/hallmark/references/themes/midnight.md +97 -0
  216. package/skills/hallmark/references/themes/newsprint.jpg +0 -0
  217. package/skills/hallmark/references/themes/newsprint.md +102 -0
  218. package/skills/hallmark/references/themes/overprint.jpg +0 -0
  219. package/skills/hallmark/references/themes/overprint.md +101 -0
  220. package/skills/hallmark/references/themes/pasteup.jpg +0 -0
  221. package/skills/hallmark/references/themes/pasteup.md +100 -0
  222. package/skills/hallmark/references/themes/piste.jpg +0 -0
  223. package/skills/hallmark/references/themes/piste.md +99 -0
  224. package/skills/hallmark/references/themes/ribbon.jpg +0 -0
  225. package/skills/hallmark/references/themes/ribbon.md +106 -0
  226. package/skills/hallmark/references/themes/rim.jpg +0 -0
  227. package/skills/hallmark/references/themes/rim.md +96 -0
  228. package/skills/hallmark/references/themes/riso.jpg +0 -0
  229. package/skills/hallmark/references/themes/riso.md +98 -0
  230. package/skills/hallmark/references/themes/solstice.jpg +0 -0
  231. package/skills/hallmark/references/themes/solstice.md +104 -0
  232. package/skills/hallmark/references/themes/specimen.jpg +0 -0
  233. package/skills/hallmark/references/themes/specimen.md +100 -0
  234. package/skills/hallmark/references/themes/spore.jpg +0 -0
  235. package/skills/hallmark/references/themes/spore.md +104 -0
  236. package/skills/hallmark/references/themes/sport.jpg +0 -0
  237. package/skills/hallmark/references/themes/sport.md +101 -0
  238. package/skills/hallmark/references/themes/squeeze.jpg +0 -0
  239. package/skills/hallmark/references/themes/squeeze.md +99 -0
  240. package/skills/hallmark/references/themes/sticker.jpg +0 -0
  241. package/skills/hallmark/references/themes/sticker.md +106 -0
  242. package/skills/hallmark/references/themes/studio.jpg +0 -0
  243. package/skills/hallmark/references/themes/studio.md +99 -0
  244. package/skills/hallmark/references/themes/terminal.jpg +0 -0
  245. package/skills/hallmark/references/themes/terminal.md +96 -0
  246. package/skills/hallmark/references/themes/terrazzo.jpg +0 -0
  247. package/skills/hallmark/references/themes/terrazzo.md +106 -0
  248. package/skills/hallmark/references/themes/ultraviolet.jpg +0 -0
  249. package/skills/hallmark/references/themes/ultraviolet.md +106 -0
  250. package/skills/hallmark/references/themes/vellum.jpg +0 -0
  251. package/skills/hallmark/references/themes/vellum.md +105 -0
  252. package/skills/hallmark/references/themes/wayfind.jpg +0 -0
  253. package/skills/hallmark/references/themes/wayfind.md +105 -0
  254. package/skills/hallmark/references/themes/werkstatt.jpg +0 -0
  255. package/skills/hallmark/references/themes/werkstatt.md +105 -0
  256. package/skills/hallmark/scripts/capture.mjs +125 -0
  257. package/skills/hallmark/scripts/fixtures/exemplars/atmospheric.html +324 -0
  258. package/skills/hallmark/scripts/fixtures/exemplars/editorial.html +363 -0
  259. package/skills/hallmark/scripts/fixtures/exemplars/modern-minimal.html +527 -0
  260. package/skills/hallmark/scripts/fixtures/exemplars/playful.html +353 -0
  261. package/skills/hallmark/scripts/fixtures/eyebrow-fail/index.html +118 -0
  262. package/skills/hallmark/scripts/fixtures/eyebrow-pass/index.html +137 -0
  263. package/skills/hallmark/scripts/fixtures/kept/after.html +27 -0
  264. package/skills/hallmark/scripts/fixtures/kept/before.html +26 -0
  265. package/skills/hallmark/scripts/fixtures/slopped.html +145 -0
  266. package/skills/hallmark/scripts/fixtures/tailwind-fail/Feature.vue +14 -0
  267. package/skills/hallmark/scripts/fixtures/tailwind-fail/Hero.tsx +33 -0
  268. package/skills/hallmark/scripts/fixtures/tailwind-fail/index.html +74 -0
  269. package/skills/hallmark/scripts/fixtures/tailwind-fail/style.css +6 -0
  270. package/skills/hallmark/scripts/fixtures/tailwind-pass/Hero.tsx +33 -0
  271. package/skills/hallmark/scripts/fixtures/tailwind-pass/index.html +57 -0
  272. package/skills/hallmark/scripts/fixtures/tailwind-pass/style.css +15 -0
  273. package/skills/hallmark/scripts/fixtures/waiver/index.html +54 -0
  274. package/skills/hallmark/scripts/imagegen.mjs +85 -0
  275. package/skills/hallmark/scripts/install-hook.mjs +70 -0
  276. package/skills/hallmark/scripts/install.mjs +141 -0
  277. package/skills/hallmark/scripts/lint-hook.mjs +49 -0
  278. package/skills/hallmark/scripts/photos.json +1 -0
  279. package/skills/hallmark/scripts/picture.mjs +71 -0
  280. package/skills/hallmark/scripts/refcheck.mjs +352 -0
  281. package/skills/hallmark/scripts/sloplint-render.mjs +1252 -0
  282. package/skills/hallmark/scripts/sloplint.mjs +4422 -0
  283. package/skills/hallmark/scripts/theme.mjs +650 -0
  284. package/skills/harness/SKILL.md +17 -8
  285. package/skills/i-have-adhd/SKILL.md +32 -12
  286. package/skills/no-ai-slop/SKILL.md +15 -1
  287. package/skills/plan-add/SKILL.md +38 -27
  288. package/skills/plan-status/SKILL.md +13 -7
  289. package/skills/plan-sync/SKILL.md +18 -12
  290. package/skills/pm-frameworks/SKILL.md +19 -10
  291. package/skills/pm-frameworks/SOURCE +7 -5
  292. package/skills/ponytail/SKILL.md +19 -14
  293. package/skills/product-analysis/SKILL.md +22 -18
  294. package/skills/product-flow/SKILL.md +14 -9
  295. package/skills/research/SKILL.md +97 -48
  296. package/skills/rl-env/SKILL.md +25 -13
  297. package/skills/rl-env/SOURCE +8 -6
  298. package/skills/tezgah-contract/SKILL.md +65 -47
  299. package/statusline.py +20 -9
  300. package/workflows/graph-review.js +14 -2
  301. package/bin/tezgah-skill.py +0 -59
  302. /package/skills/ai-research/0-autoresearch-skill/{SKILL.md → ENTRY.md} +0 -0
  303. /package/skills/ai-research/01-model-architecture/litgpt/{SKILL.md → ENTRY.md} +0 -0
  304. /package/skills/ai-research/01-model-architecture/mamba/{SKILL.md → ENTRY.md} +0 -0
  305. /package/skills/ai-research/01-model-architecture/nanogpt/{SKILL.md → ENTRY.md} +0 -0
  306. /package/skills/ai-research/01-model-architecture/rwkv/{SKILL.md → ENTRY.md} +0 -0
  307. /package/skills/ai-research/01-model-architecture/torchtitan/{SKILL.md → ENTRY.md} +0 -0
  308. /package/skills/ai-research/02-tokenization/huggingface-tokenizers/{SKILL.md → ENTRY.md} +0 -0
  309. /package/skills/ai-research/02-tokenization/sentencepiece/{SKILL.md → ENTRY.md} +0 -0
  310. /package/skills/ai-research/03-fine-tuning/axolotl/{SKILL.md → ENTRY.md} +0 -0
  311. /package/skills/ai-research/03-fine-tuning/llama-factory/{SKILL.md → ENTRY.md} +0 -0
  312. /package/skills/ai-research/03-fine-tuning/peft/{SKILL.md → ENTRY.md} +0 -0
  313. /package/skills/ai-research/03-fine-tuning/unsloth/{SKILL.md → ENTRY.md} +0 -0
  314. /package/skills/ai-research/04-mechanistic-interpretability/nnsight/{SKILL.md → ENTRY.md} +0 -0
  315. /package/skills/ai-research/04-mechanistic-interpretability/pyvene/{SKILL.md → ENTRY.md} +0 -0
  316. /package/skills/ai-research/04-mechanistic-interpretability/saelens/{SKILL.md → ENTRY.md} +0 -0
  317. /package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/{SKILL.md → ENTRY.md} +0 -0
  318. /package/skills/ai-research/05-data-processing/nemo-curator/{SKILL.md → ENTRY.md} +0 -0
  319. /package/skills/ai-research/05-data-processing/ray-data/{SKILL.md → ENTRY.md} +0 -0
  320. /package/skills/ai-research/06-post-training/grpo-rl-training/{SKILL.md → ENTRY.md} +0 -0
  321. /package/skills/ai-research/06-post-training/miles/{SKILL.md → ENTRY.md} +0 -0
  322. /package/skills/ai-research/06-post-training/openrlhf/{SKILL.md → ENTRY.md} +0 -0
  323. /package/skills/ai-research/06-post-training/simpo/{SKILL.md → ENTRY.md} +0 -0
  324. /package/skills/ai-research/06-post-training/slime/{SKILL.md → ENTRY.md} +0 -0
  325. /package/skills/ai-research/06-post-training/torchforge/{SKILL.md → ENTRY.md} +0 -0
  326. /package/skills/ai-research/06-post-training/trl-fine-tuning/{SKILL.md → ENTRY.md} +0 -0
  327. /package/skills/ai-research/06-post-training/verl/{SKILL.md → ENTRY.md} +0 -0
  328. /package/skills/ai-research/07-safety-alignment/constitutional-ai/{SKILL.md → ENTRY.md} +0 -0
  329. /package/skills/ai-research/07-safety-alignment/llamaguard/{SKILL.md → ENTRY.md} +0 -0
  330. /package/skills/ai-research/07-safety-alignment/nemo-guardrails/{SKILL.md → ENTRY.md} +0 -0
  331. /package/skills/ai-research/07-safety-alignment/prompt-guard/{SKILL.md → ENTRY.md} +0 -0
  332. /package/skills/ai-research/08-distributed-training/accelerate/{SKILL.md → ENTRY.md} +0 -0
  333. /package/skills/ai-research/08-distributed-training/deepspeed/{SKILL.md → ENTRY.md} +0 -0
  334. /package/skills/ai-research/08-distributed-training/megatron-core/{SKILL.md → ENTRY.md} +0 -0
  335. /package/skills/ai-research/08-distributed-training/pytorch-fsdp2/{SKILL.md → ENTRY.md} +0 -0
  336. /package/skills/ai-research/08-distributed-training/pytorch-lightning/{SKILL.md → ENTRY.md} +0 -0
  337. /package/skills/ai-research/08-distributed-training/ray-train/{SKILL.md → ENTRY.md} +0 -0
  338. /package/skills/ai-research/09-infrastructure/lambda-labs/{SKILL.md → ENTRY.md} +0 -0
  339. /package/skills/ai-research/09-infrastructure/modal/{SKILL.md → ENTRY.md} +0 -0
  340. /package/skills/ai-research/09-infrastructure/skypilot/{SKILL.md → ENTRY.md} +0 -0
  341. /package/skills/ai-research/10-optimization/awq/{SKILL.md → ENTRY.md} +0 -0
  342. /package/skills/ai-research/10-optimization/bitsandbytes/{SKILL.md → ENTRY.md} +0 -0
  343. /package/skills/ai-research/10-optimization/flash-attention/{SKILL.md → ENTRY.md} +0 -0
  344. /package/skills/ai-research/10-optimization/gguf/{SKILL.md → ENTRY.md} +0 -0
  345. /package/skills/ai-research/10-optimization/gptq/{SKILL.md → ENTRY.md} +0 -0
  346. /package/skills/ai-research/10-optimization/hqq/{SKILL.md → ENTRY.md} +0 -0
  347. /package/skills/ai-research/10-optimization/ml-training-recipes/{SKILL.md → ENTRY.md} +0 -0
  348. /package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/{SKILL.md → ENTRY.md} +0 -0
  349. /package/skills/ai-research/11-evaluation/lm-evaluation-harness/{SKILL.md → ENTRY.md} +0 -0
  350. /package/skills/ai-research/11-evaluation/nemo-evaluator/{SKILL.md → ENTRY.md} +0 -0
  351. /package/skills/ai-research/12-inference-serving/llama-cpp/{SKILL.md → ENTRY.md} +0 -0
  352. /package/skills/ai-research/12-inference-serving/sglang/{SKILL.md → ENTRY.md} +0 -0
  353. /package/skills/ai-research/12-inference-serving/tensorrt-llm/{SKILL.md → ENTRY.md} +0 -0
  354. /package/skills/ai-research/12-inference-serving/vllm/{SKILL.md → ENTRY.md} +0 -0
  355. /package/skills/ai-research/13-mlops/mlflow/{SKILL.md → ENTRY.md} +0 -0
  356. /package/skills/ai-research/13-mlops/swanlab/{SKILL.md → ENTRY.md} +0 -0
  357. /package/skills/ai-research/13-mlops/tensorboard/{SKILL.md → ENTRY.md} +0 -0
  358. /package/skills/ai-research/13-mlops/weights-and-biases/{SKILL.md → ENTRY.md} +0 -0
  359. /package/skills/ai-research/14-agents/a-evolve/{SKILL.md → ENTRY.md} +0 -0
  360. /package/skills/ai-research/14-agents/autogpt/{SKILL.md → ENTRY.md} +0 -0
  361. /package/skills/ai-research/14-agents/crewai/{SKILL.md → ENTRY.md} +0 -0
  362. /package/skills/ai-research/14-agents/langchain/{SKILL.md → ENTRY.md} +0 -0
  363. /package/skills/ai-research/14-agents/llamaindex/{SKILL.md → ENTRY.md} +0 -0
  364. /package/skills/ai-research/15-rag/chroma/{SKILL.md → ENTRY.md} +0 -0
  365. /package/skills/ai-research/15-rag/faiss/{SKILL.md → ENTRY.md} +0 -0
  366. /package/skills/ai-research/15-rag/pinecone/{SKILL.md → ENTRY.md} +0 -0
  367. /package/skills/ai-research/15-rag/qdrant/{SKILL.md → ENTRY.md} +0 -0
  368. /package/skills/ai-research/15-rag/sentence-transformers/{SKILL.md → ENTRY.md} +0 -0
  369. /package/skills/ai-research/16-prompt-engineering/dspy/{SKILL.md → ENTRY.md} +0 -0
  370. /package/skills/ai-research/16-prompt-engineering/guidance/{SKILL.md → ENTRY.md} +0 -0
  371. /package/skills/ai-research/16-prompt-engineering/instructor/{SKILL.md → ENTRY.md} +0 -0
  372. /package/skills/ai-research/16-prompt-engineering/outlines/{SKILL.md → ENTRY.md} +0 -0
  373. /package/skills/ai-research/17-observability/langsmith/{SKILL.md → ENTRY.md} +0 -0
  374. /package/skills/ai-research/17-observability/phoenix/{SKILL.md → ENTRY.md} +0 -0
  375. /package/skills/ai-research/18-multimodal/audiocraft/{SKILL.md → ENTRY.md} +0 -0
  376. /package/skills/ai-research/18-multimodal/blip-2/{SKILL.md → ENTRY.md} +0 -0
  377. /package/skills/ai-research/18-multimodal/clip/{SKILL.md → ENTRY.md} +0 -0
  378. /package/skills/ai-research/18-multimodal/cosmos-policy/{SKILL.md → ENTRY.md} +0 -0
  379. /package/skills/ai-research/18-multimodal/llava/{SKILL.md → ENTRY.md} +0 -0
  380. /package/skills/ai-research/18-multimodal/openpi/{SKILL.md → ENTRY.md} +0 -0
  381. /package/skills/ai-research/18-multimodal/openvla-oft/{SKILL.md → ENTRY.md} +0 -0
  382. /package/skills/ai-research/18-multimodal/segment-anything/{SKILL.md → ENTRY.md} +0 -0
  383. /package/skills/ai-research/18-multimodal/stable-diffusion/{SKILL.md → ENTRY.md} +0 -0
  384. /package/skills/ai-research/18-multimodal/whisper/{SKILL.md → ENTRY.md} +0 -0
  385. /package/skills/ai-research/19-emerging-techniques/knowledge-distillation/{SKILL.md → ENTRY.md} +0 -0
  386. /package/skills/ai-research/19-emerging-techniques/long-context/{SKILL.md → ENTRY.md} +0 -0
  387. /package/skills/ai-research/19-emerging-techniques/model-merging/{SKILL.md → ENTRY.md} +0 -0
  388. /package/skills/ai-research/19-emerging-techniques/model-pruning/{SKILL.md → ENTRY.md} +0 -0
  389. /package/skills/ai-research/19-emerging-techniques/moe-training/{SKILL.md → ENTRY.md} +0 -0
  390. /package/skills/ai-research/19-emerging-techniques/speculative-decoding/{SKILL.md → ENTRY.md} +0 -0
  391. /package/skills/ai-research/20-ml-paper-writing/academic-plotting/{SKILL.md → ENTRY.md} +0 -0
  392. /package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/{SKILL.md → ENTRY.md} +0 -0
  393. /package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/{SKILL.md → ENTRY.md} +0 -0
  394. /package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/{SKILL.md → ENTRY.md} +0 -0
  395. /package/skills/ai-research/21-research-ideation/brainstorming-research-ideas/{SKILL.md → ENTRY.md} +0 -0
  396. /package/skills/ai-research/21-research-ideation/creative-thinking-for-research/{SKILL.md → ENTRY.md} +0 -0
  397. /package/skills/ai-research/22-agent-native-research-artifact/compiler/{SKILL.md → ENTRY.md} +0 -0
  398. /package/skills/ai-research/22-agent-native-research-artifact/research-manager/{SKILL.md → ENTRY.md} +0 -0
  399. /package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/{SKILL.md → ENTRY.md} +0 -0
  400. /package/skills/design-library/adaptive-interfaces/skills/colour-independence/{SKILL.md → ENTRY.md} +0 -0
  401. /package/skills/design-library/adaptive-interfaces/skills/flexible-typography/{SKILL.md → ENTRY.md} +0 -0
  402. /package/skills/design-library/adaptive-interfaces/skills/information-density/{SKILL.md → ENTRY.md} +0 -0
  403. /package/skills/design-library/adaptive-interfaces/skills/preference-audit/{SKILL.md → ENTRY.md} +0 -0
  404. /package/skills/design-library/adaptive-interfaces/skills/responsive-accessibility/{SKILL.md → ENTRY.md} +0 -0
  405. /package/skills/design-library/adaptive-interfaces/skills/responsive-review/{SKILL.md → ENTRY.md} +0 -0
  406. /package/skills/design-library/adaptive-interfaces/skills/simplified-views/{SKILL.md → ENTRY.md} +0 -0
  407. /package/skills/design-library/adaptive-interfaces/skills/specify/{SKILL.md → ENTRY.md} +0 -0
  408. /package/skills/design-library/adaptive-interfaces/skills/user-preference-respect/{SKILL.md → ENTRY.md} +0 -0
  409. /package/skills/design-library/cognitive-accessibility/skills/adaptive-personalisation/{SKILL.md → ENTRY.md} +0 -0
  410. /package/skills/design-library/cognitive-accessibility/skills/assess-load/{SKILL.md → ENTRY.md} +0 -0
  411. /package/skills/design-library/cognitive-accessibility/skills/cognitive-load-assessment/{SKILL.md → ENTRY.md} +0 -0
  412. /package/skills/design-library/cognitive-accessibility/skills/contextual-help-design/{SKILL.md → ENTRY.md} +0 -0
  413. /package/skills/design-library/cognitive-accessibility/skills/error-prevention-recovery/{SKILL.md → ENTRY.md} +0 -0
  414. /package/skills/design-library/cognitive-accessibility/skills/focus-attention-design/{SKILL.md → ENTRY.md} +0 -0
  415. /package/skills/design-library/cognitive-accessibility/skills/memory-load-reduction/{SKILL.md → ENTRY.md} +0 -0
  416. /package/skills/design-library/cognitive-accessibility/skills/plain-language-design/{SKILL.md → ENTRY.md} +0 -0
  417. /package/skills/design-library/cognitive-accessibility/skills/review/{SKILL.md → ENTRY.md} +0 -0
  418. /package/skills/design-library/cognitive-accessibility/skills/simplify/{SKILL.md → ENTRY.md} +0 -0
  419. /package/skills/design-library/cognitive-accessibility/skills/wayfinding-navigation/{SKILL.md → ENTRY.md} +0 -0
  420. /package/skills/design-library/design-research/skills/behavioural-analytics/{SKILL.md → ENTRY.md} +0 -0
  421. /package/skills/design-library/design-research/skills/qual-quant-triangulation/{SKILL.md → ENTRY.md} +0 -0
  422. /package/skills/design-library/inclusive-interaction/skills/audit/{SKILL.md → ENTRY.md} +0 -0
  423. /package/skills/design-library/inclusive-interaction/skills/design-flow/{SKILL.md → ENTRY.md} +0 -0
  424. /package/skills/design-library/inclusive-interaction/skills/feedback-and-status/{SKILL.md → ENTRY.md} +0 -0
  425. /package/skills/design-library/inclusive-interaction/skills/gesture-alternatives/{SKILL.md → ENTRY.md} +0 -0
  426. /package/skills/design-library/inclusive-interaction/skills/keyboard-navigation/{SKILL.md → ENTRY.md} +0 -0
  427. /package/skills/design-library/inclusive-interaction/skills/keyboard-review/{SKILL.md → ENTRY.md} +0 -0
  428. /package/skills/design-library/inclusive-interaction/skills/motion-sensitivity/{SKILL.md → ENTRY.md} +0 -0
  429. /package/skills/design-library/inclusive-interaction/skills/multi-modal-input/{SKILL.md → ENTRY.md} +0 -0
  430. /package/skills/design-library/inclusive-interaction/skills/touch-target-design/{SKILL.md → ENTRY.md} +0 -0
  431. /package/skills/design-library/inclusive-interaction/skills/voice-interaction/{SKILL.md → ENTRY.md} +0 -0
  432. /package/skills/design-library/visual-critique/skills/critique-affordance/{SKILL.md → ENTRY.md} +0 -0
  433. /package/skills/design-library/visual-critique/skills/critique-brand-consistency/{SKILL.md → ENTRY.md} +0 -0
  434. /package/skills/design-library/visual-critique/skills/critique-color/{SKILL.md → ENTRY.md} +0 -0
  435. /package/skills/design-library/visual-critique/skills/critique-composition/{SKILL.md → ENTRY.md} +0 -0
  436. /package/skills/design-library/visual-critique/skills/critique-information-density/{SKILL.md → ENTRY.md} +0 -0
  437. /package/skills/design-library/visual-critique/skills/critique-typography/{SKILL.md → ENTRY.md} +0 -0
  438. /package/skills/design-library/visual-critique/skills/critique-visual-hierarchy/{SKILL.md → ENTRY.md} +0 -0
  439. /package/skills/pm-frameworks/intended-vs-implemented/{SKILL.md → ENTRY.md} +0 -0
  440. /package/skills/pm-frameworks/opportunity-solution-tree/{SKILL.md → ENTRY.md} +0 -0
  441. /package/skills/rl-env/generate-nemo-gym-env/{SKILL.md → ENTRY.md} +0 -0
  442. /package/skills/rl-env/generate-openenv-env/{SKILL.md → ENTRY.md} +0 -0
  443. /package/skills/rl-env/generate-ors-env/{SKILL.md → ENTRY.md} +0 -0
  444. /package/skills/rl-env/generate-verifiers-env/{SKILL.md → ENTRY.md} +0 -0
  445. /package/skills/rl-env/rl-env-from-description/{SKILL.md → ENTRY.md} +0 -0
@@ -3,8 +3,10 @@
3
3
 
4
4
  Placeholders are filled by tezgah_context.render():
5
5
  {ROOT} - the configured tezgah root the session is in
6
- {CONSULT_BIN} - the stable path to bin/consult
7
- {CODEGEN_BIN} - the stable path to bin/codegen; {ROUTE_BIN} to bin/tezgah-route
6
+ {CONSULT_BIN}, {CODEGEN_BIN}, {RESEARCH_BIN}, {ROUTE_BIN}, {SKILL_BIN}... -
7
+ the stable path to the tezgah CLI BIN_TOOLS names: no host but
8
+ Claude puts ~/.config/tezgah/bin on PATH, so a bare name in
9
+ the text is a `command not found`
8
10
  {ORX_BIN} - the stable path to the OpenResearch `orx` CLI, else bare `orx`
9
11
  {OPEN_LINES} - the research lines already open, filled by
10
12
  tezgah_context.context_for: that fact is about the repo the
@@ -25,6 +27,16 @@ sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
25
27
  import tezgah_research as tr # noqa: E402 (the layer's own line resolver)
26
28
  from tezgah_paths import say # noqa: E402 (the language packs' contract words)
27
29
 
30
+ # The tezgah CLIs the injected text names, by placeholder. `render` fills each
31
+ # with `tezgah_paths.tool(<name>)`; the hookless copies (REPLY_LANG_HOOKLESS)
32
+ # with the installed path spelled from `~`.
33
+ BIN_TOOLS = {"{CONSULT_BIN}": "consult", "{CODEGEN_BIN}": "codegen",
34
+ "{RESEARCH_BIN}": "tezgah-research", "{ROUTE_BIN}": "tezgah-route",
35
+ "{SKILL_BIN}": "tezgah-skill", "{DESIGN_BIN}": "tezgah-design",
36
+ "{TASK_BIN}": "tezgah-task", "{PONY_BIN}": "tezgah-pony",
37
+ "{ADHD_BIN}": "tezgah-adhd", "{LESSONS_BIN}": "tezgah-lessons",
38
+ "{STATUS_BIN}": "tezgah-status"}
39
+
28
40
  PONYTAIL = """
29
41
  ## Code style: ponytail (auto-armed, tezgah roots only)
30
42
 
@@ -45,7 +57,7 @@ On the FIRST non-trivial coding task of the session, load the full skill with
45
57
  Skill(tezgah:ponytail) on Claude, or the installed `ponytail` skill on every
46
58
  other host - the plugin name is part of the skill name on Claude, and this
47
59
  summary is not the whole contract.
48
- Level: `tezgah-pony lite|full|ultra` (bare call shows it; stored in
60
+ Level: `{PONY_BIN} lite|full|ultra` (bare call shows it; stored in
49
61
  ~/.config/tezgah/ponytail.level, machine-wide until changed). The default `full`
50
62
  adds nothing to this reminder; a non-default level is named in it every turn.
51
63
  Off: user says "stop ponytail".
@@ -66,7 +78,11 @@ The reader has to act on the answer, and the friction between "got it" and
66
78
  line - never also narrate the plan as prose.
67
79
  4. End with the approval questions the Ask policy leaves (the executive mode's
68
80
  "Ask policy"), or with nothing when none is left. A step you can take
69
- yourself is taken, never handed over.
81
+ yourself is taken, never handed over: "run `pytest -q` and tell me what it
82
+ says" is a step you run. In the host's plan mode nothing can run, and there
83
+ the plan is the deliverable: the approval question is the one question that
84
+ turn asks, every step waits for it, and nothing is reported as done or
85
+ tested, because nothing ran.
70
86
  5. Suppress tangents: finish the issue in hand, then raise the second as its own
71
87
  question. A question the reader raised mid-work is not a tangent - answer it
72
88
  and fold the result in.
@@ -88,7 +104,7 @@ no closer), or when a rule would delete the answer itself (an options question
88
104
  gets 2-4 ranked options with one line of trade-off each, recommendation first).
89
105
  On the FIRST non-trivial answer of the session, read the full `i-have-adhd`
90
106
  skill from the router - this summary is not the whole contract.
91
- Off: `tezgah-adhd off` (the kill switch file), or a repo's `.no-adhd`.
107
+ Off: `{ADHD_BIN} off` (the kill switch file), or a repo's `.no-adhd`.
92
108
  """
93
109
 
94
110
  SPEC = """
@@ -111,7 +127,8 @@ intuitive". Such a request is NEVER built from a guess. Before any code:
111
127
  3. Ask at most three blocking questions, the ones that change the outcome and
112
128
  that no default may take. Every other question goes in the approval batch
113
129
  with a recommended default, and the work proceeds on the defaults in the
114
- same turn (the executive mode's "Ask policy").
130
+ same turn (the executive mode's "Ask policy"); a class-F item waits for the
131
+ answer.
115
132
  4. Verify design, behavior and quality claims against an external source, never
116
133
  from memory alone: `{CONSULT_BIN} --online "<question>"` for a fast second
117
134
  opinion, or the OpenResearch CLI (`{ORX_BIN}`) when it is a real
@@ -179,7 +196,8 @@ REPLY_LANG_HOOKLESS = dict(
179
196
  "{GRANT_EXAMPLES}": "%s, %s" % (_EN["grant_examples"], _TR["grant_examples"]),
180
197
  "{OPENER_SHORT}": _TR["opener_short"]},
181
198
  **{"{%s_GLOSS}" % k.upper(): "tr: %s; " % _TR[k]
182
- for k in ("decision", "access", "irreversible", "env")})
199
+ for k in ("decision", "access", "irreversible", "env")},
200
+ **{ph: "~/.config/tezgah/bin/" + name for ph, name in BIN_TOOLS.items()})
183
201
 
184
202
  EXEC = """
185
203
  ## Reporting contract: executive mode (auto-armed, tezgah roots only)
@@ -260,11 +278,11 @@ rewrite it plainly.
260
278
  **Merge authority: standing, not per-PR.** The user is not the approval step
261
279
  on a merge. Review first with a FRESH reviewer (never my own read of my own
262
280
  code), run the full suite, and if the review is clean and every test passes,
263
- merge and close the plan yourself (`tezgah-task close NNN done`, which also
281
+ merge and close the plan yourself (`{TASK_BIN} close NNN done`, which also
264
282
  deactivates it and removes every merged worktree), then report the outcome. Nothing
265
283
  goes back to the user: a failing test you fix, and a critical or major finding
266
284
  left after round two you fix yourself, prove with a test and close with
267
- `tezgah-task close NNN done --resolved "<fix and test>"`. One review per plan, over its whole diff in the verification
285
+ `{TASK_BIN} close NNN done --resolved "<fix and test>"`. One review per plan, over its whole diff in the verification
268
286
  phase; at most two rounds - only a confirmed critical or major finding opens
269
287
  round two; a minor or suggestion one is fixed in the session without a new
270
288
  round, or recorded fix-later only when it waits on a user decision ({DECISION});
@@ -273,10 +291,15 @@ after round two what is left is fixed by the session and closed with
273
291
  A round spawns its reviewers in ONE message, one per dimension (correctness
274
292
  and contract, security, tests and performance) or file group; a diff under 300
275
293
  changed lines gets one reviewer. Per-task work gets tests, not a reviewer, and
276
- `tezgah-task review` refuses a third round.
294
+ `{TASK_BIN} review` refuses a third round. No fresh subagent, no review verdict:
295
+ on a host or mode that cannot start a fresh reviewer, say so and ask the owner;
296
+ never record a verdict from your own read. The author contests a confirmed
297
+ finding only by citing evidence the reviewer could read (file:line); knowledge
298
+ outside the files goes to the owner as a question, and the author never lowers
299
+ a severity.
277
300
 
278
301
  **The process is yours: never hand a step back.** The orchestrator runs the
279
- plan lifecycle itself - `tezgah-task start`, every `phase` move, `review`,
302
+ plan lifecycle itself - `{TASK_BIN} start`, every `phase` move, `review`,
280
303
  `close`, the merge, and removing a slice's worktree once its branch is merged -
281
304
  and never ends a reply with "run this command" or "shall I close it?" for a
282
305
  step it can take. A process parameter the user did not set (a sample size, a
@@ -301,13 +324,13 @@ whether the user already decided it (named it this session, or granted it).
301
324
  | C. Reversible choice the evidence settles | a fix's scope inside the ask, naming, a palette when tokens exist | decide from evidence; real taste goes in the batch with a default, taken this turn |
302
325
  | D. Intent fork | two readings of the ask with different deliverables | batch with a default; do the shared part first and proceed on the default |
303
326
  | E. Outward on the user's own remote | push, PR, tag, release, publishing the user's own package | act on a grant written in chat ({GRANT_EXAMPLES}); else ask once per session, never again after a grant |
304
- | F. Never on a default | force push or history rewrite on a shared ref; deleting data the session did not make; production deploy, stop or migration; a credential, account or identity change; sending to a third party; a spend over `spend_cap`; building a plan this turn wrote from a research, analysis, review or plan ask | do all other work first, ask, and wait: silence is no consent, and only an answer that names the action and its target clears it |
327
+ | F. Never on a default | force push or history rewrite on a shared ref; deleting data the session did not make; production deploy, stop or migration; a credential, account or identity change; sending to a third party; a spend over `spend_cap`; building a plan this turn wrote from a research, analysis, review or plan ask; choosing a variant or option a research, analysis or review recommends; a way around a tezgah refusal (another folder, a hidden dir, a hatch the owner did not grant); deciding about another session's work (its line, plan or branch) | do all other work first, ask, and wait: silence is no consent, and only an answer that names the action and its target clears it |
305
328
  | G. {ACCESS} | a credential or grant no tool supplies | take every route that needs none first, then ask once, naming what it unlocks |
306
329
 
307
330
  A grant is read from the user's prompt and recorded for the session; "artık
308
331
  bana sor", "ask me again" or a later "don't push" lifts it. The batch is one
309
332
  block in the reply language: one "{APPROVAL_HEADING}" heading, one line saying
310
- the work proceeds on the defaults when no answer comes, then numbered items -
333
+ the work proceeds on the defaults when no answer comes (a class-F item waits for its answer), then numbered items -
311
334
  the question in bold, one line of context, "{RECOMMENDED}:" the default, and
312
335
  the other option. Class-F items come first, marked as waiting; the defaulted
313
336
  items follow, with no count cap, because they do not block. An ask tool (omp
@@ -378,9 +401,9 @@ that slice writes - and declares its checkout on a `Worktree: <abs path>` line;
378
401
  the gate refuses a sibling's write into those globs and a slice's write into
379
402
  the main checkout when its brief declares a worktree. The integrator
380
403
  owns the shared append points (CHANGELOG.md, MANIFEST, the citation baseline)
381
- and merges in the order `tezgah-task slice merge-plan` prints. Siblings message
404
+ and merges in the order `{TASK_BIN} slice merge-plan` prints. Siblings message
382
405
  each other (omp `write agent://<id>`, Claude `SendMessage`) only on an interface
383
- or ownership change; status goes to the parent, and `tezgah-task slice board`
406
+ or ownership change; status goes to the parent, and `{TASK_BIN} slice board`
384
407
  shows every sibling's lease. Only a single item - one file, one
385
408
  bounded change, a strictly serial chain - is done directly; a list of
386
409
  independent items is never worked one by one on the main thread, however small
@@ -388,13 +411,13 @@ each item is, and that holds at every phase: a plan's tasks, its acceptance
388
411
  commands and the sources of a survey fan out the same way.
389
412
  A slice that needs its own checkout: inside Orca (the session-start `Orca:`
390
413
  line) create it with `orca worktree create --name <slug> --parent-worktree
391
- active --json` and track it with `orca worktree ps --json` or `tezgah-status
414
+ active --json` and track it with `orca worktree ps --json` or `{STATUS_BIN}
392
415
  --orca` - a raw `git worktree add` gets no card, terminal tracking or agent
393
416
  status in Orca; outside Orca, `git worktree add`. Either way the brief names
394
417
  absolute paths under that checkout. A writing slice commits `wip: <step>`
395
418
  after each step, so a crash leaves it resumable. A stopped slice (quota, abort,
396
- cut off) is resumed - `tezgah-task slice resume <id>` - or re-dispatched, never
397
- silently absorbed inline; run `tezgah-task slice reconcile --prune` before the
419
+ cut off) is resumed - `{TASK_BIN} slice resume <id>` - or re-dispatched, never
420
+ silently absorbed inline; run `{TASK_BIN} slice reconcile --prune` before the
398
421
  turn that merged slices ends.
399
422
  Routing: `{ROUTE_BIN} "<brief>"` names the worker - tezgah-cheap, -standard or
400
423
  -frontier, or the specialist whose whole job the brief is (tezgah-tester,
@@ -402,7 +425,10 @@ Routing: `{ROUTE_BIN} "<brief>"` names the worker - tezgah-cheap, -standard or
402
425
  never the host's generic task agent (overrides for stored data, credentials,
403
426
  security first; then a Jev judgement; the static phase table with no key). A report missing an output field, or an
404
427
  `ESCALATE:`, gets one narrower re-brief of the same role naming that field or judgement; only a second miss is
405
- restarted on tezgah-frontier with the original brief, never continued; the main thread never switches model (the cache is per model). A
428
+ restarted on tezgah-frontier with the original brief, never continued; the main thread never switches model (the cache is per model).
429
+ A subagent's question only the owner can answer (a class-F item, `ESCALATE: owner`) is relayed to
430
+ the user in the approval batch: the orchestrator never answers it for the user
431
+ and never escalates it to a stronger model. A
406
432
  code-discovery brief names codegraph's tools (`codegraph callers`, `callees`,
407
433
  `impact`, `node`, `files`, `codegraph_explore`) and says "answer from
408
434
  the graph, grep only for literal text"; never a grep-only explorer (observed).
@@ -552,9 +578,9 @@ When the task is research and the OpenResearch CLI (`{ORX_BIN}`) is installed,
552
578
  drive it through that CLI instead of ad-hoc local scripting. Load the operating
553
579
  manual first: the `orx` skill if the host has it, otherwise run
554
580
  `{ORX_BIN} skill` from the shell; then the module the method needs -
555
- `{ORX_BIN} skill lit-review` for sources, `{ORX_BIN} skill experiment-tree` and
556
- `{ORX_BIN} skill evidence` for a measured line. On a measured line its cardinal
557
- rules are not style preferences - they
581
+ `{ORX_BIN} skill lit-review` for sources, `{ORX_BIN} skill experiment-tree`,
582
+ `{ORX_BIN} skill orx-results` and `{ORX_BIN} skill orx-logs` for a measured
583
+ line. On a measured line its cardinal rules are not style preferences - they
558
584
  are what keeps results comparable, and breaking one silently invalidates the run:
559
585
  never edit a node once a run has answered it (branch a child instead); the run
560
586
  command and environment are a fixed contract identical on every node; vary the
@@ -569,6 +595,12 @@ table computed from other rows. The producer declares it - nothing can recover i
569
595
  afterwards - and `{RESEARCH_BIN} check` refuses a claim that claims a wider scope
570
596
  than the rows it rests on.
571
597
 
598
+ Narrowing a claim to what its evidence reaches, ending a hypothesis
599
+ `inconclusive`, and `{RESEARCH_BIN} close <slug> --limit "<what is left>"` are
600
+ normal outcomes of a line, never failures to avoid: a claim's certainty is
601
+ reported as `check` computes it, an exploratory one says so, and `check` warns on
602
+ universal or causal wording its evidence does not carry.
603
+
572
604
  If the CLI is not installed, say the research tooling is unavailable and do not
573
605
  improvise its protocol; fall back to a host subagent and say so, briefed with the
574
606
  question verbatim, its in- and out-of-scope items and its method. Kill switch:
@@ -809,7 +841,7 @@ one small test); a one-liner needs none. A complex ask ships the lazy version
809
841
  and names the fuller one in the same reply instead of stalling. Reply: code
810
842
  first; write what was cut only when you consciously cut something the user asked
811
843
  for, in at most three lines. In force from the first turn; levels
812
- lite|full|ultra are set with `tezgah-pony` and ride the per-turn reminder when
844
+ lite|full|ultra are set with `{PONY_BIN}` and ride the per-turn reminder when
813
845
  not `full`; read the full `ponytail` skill from the router for the level table
814
846
  and examples. Off: "stop ponytail".
815
847
 
@@ -820,7 +852,10 @@ bounded action per step, and while it is in flight its position is restated in
820
852
  one line - the todo list is that source, never re-narrate the plan. End with the
821
853
  approval questions the Ask policy (below) leaves, or with nothing when none is
822
854
  left; a step you can take yourself is taken, never handed
823
- over. Finish the issue in hand before raising a second one; an error states
855
+ over, and in the host's plan mode, where nothing can run, the plan is the
856
+ deliverable: its approval is the question that turn asks and nothing is
857
+ reported as done or tested.
858
+ Finish the issue in hand before raising a second one; an error states
824
859
  location, cause and fix with no drama, naming a cause only when the evidence
825
860
  identifies it (else what is known and what would confirm it); after a change say
826
861
  what now works. A list shows at most five items, ranked, the rest kept in
@@ -835,7 +870,7 @@ assumption and ask one diagnostic question. Before sending, delete an opening
835
870
  sentence that announces, a closing one that recaps or asks "anything else?", any
836
871
  by-the-way sidebar and any hedge that carries no real uncertainty. In force from
837
872
  the first answer; read the full `i-have-adhd` skill from the router for the
838
- examples. Off: `tezgah-adhd off`, or the repo's `.no-adhd`.
873
+ examples. Off: `{ADHD_BIN} off`, or the repo's `.no-adhd`.
839
874
 
840
875
  **Deliver the whole ask; never the shortcut.** The request defines the
841
876
  deliverable: every named item is in scope until the user says otherwise, and the
@@ -885,15 +920,17 @@ lines: item - blocker - evidence - what unblocks it. No blockers: no heading.
885
920
  Work and process - the order, "shall I go on", a check, a plan, a consult
886
921
  member, a spend within `spend_cap`, a local merge of the session's branch,
887
922
  removing its worktree - are taken and stated in one line, never asked; a taste
888
- or intent fork goes in the batch with a default taken this turn, but building a
889
- plan this turn wrote waits for the answer. An outward step
923
+ or intent fork goes in the batch with a default taken this turn, but the
924
+ never-default items below wait for the answer. An outward step
890
925
  on the user's own remote (push, PR, release, their package) runs on a grant
891
926
  ({GRANT_EXAMPLES}), else is asked once. Never on a
892
927
  default - ask and wait for an answer naming action and target: a force push,
893
928
  deleting what the session did not make, production, a credential, a third
894
- party, a spend over the cap. The batch: one "{APPROVAL_HEADING}" heading, waiting
929
+ party, a spend over the cap, building a plan this turn wrote, picking a
930
+ recommended variant, a way around a tezgah refusal, another session's work. The batch: one "{APPROVAL_HEADING}" heading, waiting
895
931
  items first, each numbered item with "{RECOMMENDED}:" its default; an ask tool
896
- sets a recommended option.
932
+ sets a recommended option. No fresh subagent, no review verdict: say so and
933
+ ask. Contest a finding only with a file:line; never lower a severity.
897
934
  **Say what a number was measured on.** A figure produced by a fixture - a temp
898
935
  HOME, a generated repository, a stand-in, a hand-written sample - is evidence
899
936
  about the code path, never a property of the running system, and it is reported
@@ -988,7 +1025,10 @@ If the CLI is not installed, say the research tooling is unavailable and fall
988
1025
  back to a host subagent briefed with the question verbatim, its in/out scope and
989
1026
  its method. Off: `research-off`.
990
1027
 
991
- **Product analysis: five axes, one evidence class per finding.** A product
1028
+ **Product analysis: five axes, one evidence class per finding.** Read the
1029
+ `product-analysis` skill for this ask (artifact shape, scorecard), `pm-frameworks`
1030
+ for an intended-vs-implemented gap or an Opportunity Solution Tree, and
1031
+ `feature-audit` when the ask is one feature. A product
992
1032
  question - "analyse this product", "why is retention falling", "which feature
993
1033
  next" - is analysis, not advice, and it covers every axis the product has, not
994
1034
  only the code. Value: HEART's Goals -> Signals -> Metrics (a metric with no goal
@@ -1017,12 +1057,22 @@ would decide it. Establish first whether the behaviour is observable at all - "w
1017
1057
  cannot see this yet" is the first finding, not a footnote. Every finding names one
1018
1058
  evidence class - `user-verbatim`, `behaviour`, `ui-observed`, `code`, `external` -
1019
1059
  and a finding without one is a question, not a finding. Run it as a research line
1020
- (`{RESEARCH_BIN}`), say what it did not look at, and read the `product-analysis`
1021
- skill for the artifact shape and the scorecard, and `feature-audit` for the
1022
- layer-coherence matrices when the ask is one feature. A new capability built from
1060
+ (`{RESEARCH_BIN}`) and say what it did not look at. A new capability built from
1023
1061
  data or an ask runs the `product-flow` skill: `{RESEARCH_BIN} next --topic <t>` is
1024
1062
  the step source, and its first missing or due step is the next one. Off: `research-off`.
1025
1063
 
1064
+ **Design: UI work reads the design skills.** A UI ask - build, restyle, critique
1065
+ or audit a screen, form, dashboard or design system - reads the `design-contract`
1066
+ skill first: `{DESIGN_BIN} derive` writes `.tezgah/design-contract.md` from the
1067
+ repo's own tokens and `{DESIGN_BIN} check` measures the change against it.
1068
+ `design-library` holds the critique methods (cognitive load, visual hierarchy,
1069
+ accessibility); `analyze-app` reads the running UI, the only evidence for a UI
1070
+ claim; `feature-audit` covers a form, CRUD or admin flow across its layers; the
1071
+ `hallmark` skill builds a new page or restyles one (its own gate list plus
1072
+ `{DESIGN_BIN} slop --render` for the machine-made tells). The contract's
1073
+ `precedence` block decides which floor owns each key, and ours owns the facts.
1074
+ UI build work goes to a worker whose brief loads `design-contract`. Off: `design-off`.
1075
+
1026
1076
  **No AI attribution, ever, on any host.** Nothing persisted or published may
1027
1077
  name the assistant, model, vendor or "AI" as author/co-author/generator/helper:
1028
1078
  commit/merge/tag messages, PR/issue/review comments, `git notes`, release
@@ -1047,14 +1097,14 @@ issue for one of its tools mid-session. Name a missing capability in one line,
1047
1097
  use the documented fallback (grep/find, or the second opinion skipped), and carry
1048
1098
  on with the task in hand. Tezgah maintenance is in scope when the user asks for
1049
1099
  it, or when the repo IS the tezgah checkout. Before working a topic an
1050
- installed skill covers, run `tezgah-skill <words>` and read only the range it
1100
+ installed skill covers, run `{SKILL_BIN} <words>` and read only the range it
1051
1101
  returns.
1052
1102
 
1053
1103
  **Workspace: `.tezgah/` only.** Every per-project tezgah artifact - plans,
1054
- research lines, analysis, lessons - lives under `<repo>/.tezgah/`, which the
1055
- project's `.gitignore` excludes and which keeps its own private git repository
1056
- (`git -C .tezgah ...`). Never create `plans/`, `research/` or `analysis/` at the
1057
- project root and never `git add -f` anything under `.tezgah/`. Off:
1104
+ research lines, analysis, lessons - lives under `<repo>/.tezgah/`, ignored by
1105
+ the project, committed with `git -C .tezgah ...` - or, if the project tracks
1106
+ it, plain `git add`/`git commit`. Never create `plans/`, `research/` or
1107
+ `analysis/` at the project root and never `git add -f` under `.tezgah/`. Off:
1058
1108
  `workspace-off`.
1059
1109
 
1060
1110
  **Parallel by default: fan out independent items.** A request with two or
@@ -1076,7 +1126,7 @@ not grow. Every writing brief names its `Owns:` globs and declares its
1076
1126
  checkout on a `Worktree: <abs path>` line, and siblings message
1077
1127
  each other only on an interface or ownership change. Read-only slices need no
1078
1128
  worktree. Once a slice's branch is merged,
1079
- its worktree goes in the same turn - `tezgah-task close` removes every merged
1129
+ its worktree goes in the same turn - `{TASK_BIN} close` removes every merged
1080
1130
  one, and outside a plan `orca worktree rm --worktree path:<p>` (else `git
1081
1131
  worktree remove <p>`) does it; never leave one for the user to find. Pick each agent by task class from
1082
1132
  the specialists line; `{ROUTE_BIN}` names the tier for code work. Serialize
@@ -1085,11 +1135,13 @@ edit one file - and say which. The todo list is the step queue: dispatch every
1085
1135
  ready step at once and mark each one blocked on its slice, never `wait` while
1086
1136
  a step is ready, and once every open step is blocked on a running slice,
1087
1137
  `wait` or end the turn. A subagent does its own slice and
1088
- never fans out again. Off: `orchestrate-off`.
1138
+ never fans out again; its question only the owner can answer (a never-default
1139
+ item) goes to the user in the approval batch, never answered by the
1140
+ orchestrator or escalated to a stronger model. Off: `orchestrate-off`.
1089
1141
 
1090
1142
  **Kill switches:** each one removes its own rule from this text, not just the
1091
1143
  status mark. `~/.config/tezgah/`: `exec-mode.off`, `orchestrate-off`,
1092
- `consult-off`, `research-off`, `ponytail-auto.off`, `adhd-off`, `spec-off`,
1144
+ `consult-off`, `research-off`, `ponytail-auto.off`, `adhd-off`, `spec-off`, `design-off`,
1093
1145
  `reminder-off`, `verify-off` (the integrity rule: its prompt text, the shortcut
1094
1146
  denials and the Stop gate), `task-off` (the task rule), `judge-off` (the
1095
1147
  judgement seam: the triage, the docs fallback and the skill hint), `triage-off`,
@@ -1097,32 +1149,49 @@ judgement seam: the triage, the docs fallback and the skill hint), `triage-off`,
1097
1149
  rule), `workspace-off` (the root plans/research/analysis refusal),
1098
1150
  `pretooluse-off` (the whole gate);
1099
1151
  per-repo `.no-ponytail`, `.no-adhd`, `.no-graph`, `.no-lessons`.
1100
- The ponytail intensity level is not a switch: `tezgah-pony lite|full|ultra`.
1152
+ The ponytail intensity level is not a switch: `{PONY_BIN} lite|full|ultra`.
1101
1153
  """
1102
1154
 
1103
1155
  # Rules that are NOT paid every session. They are armed by task class at prompt
1104
1156
  # time (hooks/tezgah_context.classify_prompt), because a session that never asks
1105
1157
  # a structural or research question should not carry their text. Keys match the
1106
1158
  # CORE_RULES labels in hooks/tezgah_context.py.
1107
- CONDITIONAL_KEYS = ("spec", "consult", "research", "product", "graph", "fanout")
1108
-
1109
- # The fan-out rule's action, which the one-line repeat of an armed paragraph
1110
- # (hooks/tezgah_context.armed_again) carries: a bare "Armed again" named a rule
1111
- # the session had to recall, and the second list of a session was worked one
1112
- # item at a time. It is the paragraph's own clause, cut to one sentence.
1113
- FANOUT_ACTION = ("count the independent items, spawn one subagent per item in "
1114
- "ONE message, each the agent `tezgah-route` names - a specialist "
1115
- "by name, never the generic task agent - (each writing slice in "
1116
- "its own worktree, absolute paths), and keep the main thread for "
1117
- "integrating and verifying; the todo list is the step queue, so "
1118
- "dispatch every ready step before any `wait`; a subagent does "
1119
- "its own slice and never fans out again.")
1159
+ CONDITIONAL_KEYS = ("spec", "consult", "research", "product", "design", "graph",
1160
+ "fanout")
1161
+
1162
+ # The action the one-line repeat of an armed paragraph
1163
+ # (hooks/tezgah_context.armed_again) carries instead of a bare "Armed again":
1164
+ # that named a rule the session had to recall, so the second list of a session
1165
+ # was worked one item at a time, and the product skills were named on 3 turns of
1166
+ # a 40-turn session against 20 in fresh ones (plan 126). Each is the paragraph's
1167
+ # own clause, cut to one sentence; the product and design lines keep the
1168
+ # paragraph's condition, because the hint that armed them is a word match and a
1169
+ # misfire must not become an order to read a skill the ask has no use for.
1170
+ ARMED_ACTIONS = {
1171
+ "fanout": "count the independent items, spawn one subagent per item in "
1172
+ "ONE message, each the agent `{ROUTE_BIN}` names - a specialist "
1173
+ "by name, never the generic task agent - (each writing slice in "
1174
+ "its own worktree, absolute paths), and keep the main thread for "
1175
+ "integrating and verifying; the todo list is the step queue, so "
1176
+ "dispatch every ready step before any `wait`; a subagent does "
1177
+ "its own slice and never fans out again. The full rule is in the "
1178
+ "`tezgah-contract` skill.",
1179
+ "product": "if this ask is a product question, read the "
1180
+ "`product-analysis` skill now - `pm-frameworks` for an "
1181
+ "intended-vs-implemented gap or an Opportunity Solution Tree, "
1182
+ "`feature-audit` for one feature, `analyze-app` for the running "
1183
+ "app, `product-flow` for a new capability.",
1184
+ "design": "if this ask is UI work, read the `design-contract` skill now - "
1185
+ "`design-library` for critique methods, `analyze-app` for the "
1186
+ "running UI, `feature-audit` for a form or admin flow; UI build "
1187
+ "work goes to a worker whose brief loads `design-contract`.",
1188
+ }
1120
1189
 
1121
1190
  # The always-on replacement for the conditional paragraphs: one line each so a
1122
1191
  # host without a per-turn hook still knows the rule exists and where the full
1123
1192
  # text lives.
1124
1193
  POINTERS = """
1125
- **On-demand rules (armed when the task class matches; full text in the `tezgah-contract` skill).** Spec-first for an underspecified or quality-only ask. A second opinion before a call that is hard to reverse or that one model would answer with unearned confidence. OpenResearch routing for research. Product analysis is a five-axis evidence task - value, usability (the running app, not the source), feasibility (a cited `path:line`), competition, and keep/fix/cut/bet triage - with one named evidence class per finding. The code graph for "who calls X" and "what breaks if Z changes". Two or more independent items fan out to parallel subagents in one message, one git worktree per writing slice. The design floor a UI turn is judged against is `.tezgah/design-contract.md`: `tezgah-design derive` writes it from the repository's own tokens, `tezgah-design check` measures a change against it, and the `design-contract` skill owns its shape.
1194
+ **On-demand rules (armed when the task class matches; full text in the `tezgah-contract` skill).** Spec-first for an underspecified or quality-only ask. A second opinion before a call that is hard to reverse or that one model would answer with unearned confidence. OpenResearch routing for research. Product analysis is a five-axis evidence task - value, usability (the running app, not the source), feasibility (a cited `path:line`), competition, and keep/fix/cut/bet triage - with one named evidence class per finding (`product-analysis`, `pm-frameworks`). The code graph for "who calls X" and "what breaks if Z changes". Two or more independent items fan out to parallel subagents in one message, one git worktree per writing slice. A UI turn reads the `design-contract` skill (`design-library`, `analyze-app`) and is judged against `.tezgah/design-contract.md`: `{DESIGN_BIN} derive` writes it from the repository's own tokens and its `check` measures a change against it.
1126
1195
  """
1127
1196
 
1128
1197
  # The compact per-turn form, inside the <harness-reminder> envelope the hosts
@@ -1138,7 +1207,9 @@ irreversible calls; done/tested claims need observed
1138
1207
  evidence -> the gate denies a neutered check (`--no-verify`, `|| true`, a new
1139
1208
  test skip) and the Stop hook on Claude/Codex/Cursor/omp blocks an unverified
1140
1209
  "done"; never end on a question you can decide - ask only in one batch, each
1141
- with a recommended default; leftover work is done now, not listed - only a {DECISION}/{ACCESS}/{IRREVERSIBLE}/{ENV}
1210
+ with a recommended default; a research/analysis/review recommendation, a way around a
1211
+ tezgah refusal and another session's work wait for the owner's answer;
1212
+ leftover work is done now, not listed - only a {DECISION}/{ACCESS}/{IRREVERSIBLE}/{ENV}
1142
1213
  blocker with its evidence goes under "{BLOCKERS_HEADING}"; no
1143
1214
  AI/model attribution in any persisted or published artifact. Full
1144
1215
  detail: the tezgah-contract skill.{PONY_LEVEL} Kill switches under ~/.config/tezgah/.
@@ -44,12 +44,14 @@ STOPWORDS = frozenset(w for p in packs().values() for w in p["rank_stopwords"])
44
44
  MIN_CAP_TEXTS = 10
45
45
 
46
46
 
47
- def scores(query, texts, max_df=None):
47
+ def scores(query, texts, max_df=None, tokens=None):
48
48
  """Every text's BM25 score for `query`, in input order; 0.0 for a text that
49
49
  shares no term with it. `rank` orders these; the research dedup reads them as
50
- numbers (`tezgah_research.similarity_matrix`)."""
51
- docs = [Counter(words(t)) for t in texts]
52
- terms = set(words(query))
50
+ numbers (`tezgah_research.similarity_matrix`). `tokens` replaces `words` on
51
+ both sides (the skill search folds and stems its terms)."""
52
+ tokens = tokens or words
53
+ docs = [Counter(tokens(t)) for t in texts]
54
+ terms = set(tokens(query))
53
55
  if not docs or not terms:
54
56
  return [0.0] * len(docs)
55
57
  avg = sum(sum(d.values()) for d in docs) / len(docs) or 1.0
@@ -68,12 +70,13 @@ def scores(query, texts, max_df=None):
68
70
  return out
69
71
 
70
72
 
71
- def rank(query, texts, k, max_df=None):
73
+ def rank(query, texts, k, max_df=None, tokens=None):
72
74
  """Indices of the `k` texts that score highest for `query`, best first.
73
75
 
74
76
  Only a text sharing at least one term with the query is returned (score > 0),
75
77
  so an unrelated query gets [] rather than an arbitrary order. `max_df` (a
76
78
  fraction) drops STOPWORDS and, on MIN_CAP_TEXTS or more texts, every query
77
79
  term found in more than that share of them."""
78
- scored = [(-s, i) for i, s in enumerate(scores(query, texts, max_df)) if s > 0]
80
+ scored = [(-s, i) for i, s in enumerate(scores(query, texts, max_df, tokens))
81
+ if s > 0]
79
82
  return [i for _s, i in sorted(scored)[:k]]
@@ -469,6 +469,9 @@ def build_corpus(cutoff, since=None):
469
469
  "live_rule": rule_of(detail) if kind == "deny"
470
470
  else detail.split(":", 1)[1].strip() if kind == "claim"
471
471
  and detail.startswith("blocked:") else None,
472
+ # the host's permission mode, written on the row of a
473
+ # read-only turn only (plan 142): the verdict depended on it
474
+ "mode": row.get("mode"),
472
475
  "tool": row.get("tool"), "join": None}
473
476
  if kind == "claim":
474
477
  replies = [{"ts": ts, "text": text, "cwd": where} for ts, text, where in
@@ -586,8 +589,11 @@ def _replay_one(it, prefix, tg, seen, live_events):
586
589
 
587
590
  ti.events = events
588
591
  try:
589
- cls, _reason = ti._stop_block(it["text"], it["sid"], rows=turn,
590
- cwd=it["cwd"])
592
+ # a plan-mode turn is judged as one (plan 142): the mode rides
593
+ # the claim row this item came from
594
+ cls, _reason = ti._stop_block(
595
+ it["text"], it["sid"], rows=turn, cwd=it["cwd"],
596
+ read_only=ti.read_only_turn(it.get("mode")))
591
597
  finally:
592
598
  ti.events = live_events
593
599
  out.update(replay="block" if cls else "allow", rule=cls,
@@ -598,10 +604,10 @@ def _replay_one(it, prefix, tg, seen, live_events):
598
604
  reason = tg.decision(it["tool"], inp, it["cwd"], it["sid"], record=False)
599
605
  rule = (rule_of("%s: %s" % (seen[-1], reason)) if seen else "unobserved") \
600
606
  if reason else None
601
- writers = sorted({w for p in tg.write_paths(inp)
602
- for w in ti.writers_elsewhere(p, it["sid"],
603
- tg.RACE_WINDOW_MIN,
604
- cwd=it["cwd"])})
607
+ # the writers the live race rule refuses on (`race_writers`), as the
608
+ # ledger ids the page has always shown (plan 117)
609
+ writers = sorted({w[0] for _path, others in tg.race_writers(
610
+ inp, it["sid"], it["cwd"]) for w in others})
605
611
  out.update(replay="deny" if reason else "allow", rule=rule,
606
612
  writers=writers)
607
613
  except Exception as exc: # a crash is a result, never a silent allow