@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.
- package/CHANGELOG.md +415 -1
- package/MANIFEST +404 -144
- package/README.de.md +1 -1
- package/README.es.md +1 -1
- package/README.fr.md +1 -1
- package/README.md +5 -4
- package/README.tr.md +1 -1
- package/bin/codegen +5 -2
- package/bin/tezgah-design +288 -1
- package/bin/tezgah-docs +1 -1
- package/bin/tezgah-doctor +39 -2
- package/bin/tezgah-import-ai-research +26 -12
- package/bin/tezgah-ocr-review +296 -0
- package/bin/tezgah-research +255 -44
- package/bin/tezgah-review-quote +185 -0
- package/bin/tezgah-setup +1365 -55
- package/bin/tezgah-skill +1 -1
- package/bin/tezgah-status +201 -3
- package/bin/tezgah-task +258 -20
- package/commands/adhd.md +2 -2
- package/commands/ponytail.md +4 -4
- package/docs/architecture.md +2 -2
- package/docs/citations-baseline.json +3 -3
- package/docs/clarity-baseline.json +11 -5
- package/docs/contract.md +91 -43
- package/docs/environment.md +5 -2
- package/docs/evidence.md +109 -17
- package/docs/feature-audit.md +2 -2
- package/docs/gate.md +60 -33
- package/docs/glossary.md +6 -3
- package/docs/hosts.md +313 -17
- package/docs/index.json +34 -8
- package/docs/judge.md +4 -2
- package/docs/layers.md +4 -4
- package/docs/models.md +37 -9
- package/docs/operations.md +141 -5
- package/docs/research.md +815 -8
- package/docs/skills.md +137 -13
- package/docs/status-line.md +121 -1
- package/docs/testing.md +3 -1
- package/hooks/hooks.json +2 -2
- package/hooks/lang/en.json +21 -0
- package/hooks/lang/tr.json +22 -1
- package/hooks/projects-stop.py +2 -1
- package/hooks/tezgah_agents.py +65 -25
- package/hooks/tezgah_apps.py +18 -0
- package/hooks/tezgah_attest.py +79 -10
- package/hooks/tezgah_components.py +4 -0
- package/hooks/tezgah_context.py +207 -55
- package/hooks/tezgah_extension.py +337 -0
- package/hooks/tezgah_gate.py +267 -79
- package/hooks/tezgah_integrity.py +864 -143
- package/hooks/tezgah_judge.py +6 -4
- package/hooks/tezgah_models.py +59 -19
- package/hooks/tezgah_orca.py +1 -1
- package/hooks/tezgah_paths.py +145 -8
- package/hooks/tezgah_policy.py +128 -57
- package/hooks/tezgah_rank.py +9 -6
- package/hooks/tezgah_replay.py +12 -6
- package/hooks/tezgah_research.py +1414 -76
- package/hooks/tezgah_research_capture.py +1544 -0
- package/hooks/tezgah_research_evidence.py +842 -0
- package/hooks/tezgah_research_stats.py +258 -0
- package/hooks/tezgah_skill_pick.py +408 -106
- package/hooks/tezgah_stack.py +236 -1
- package/hooks/tezgah_stopspec.py +8 -1
- package/hooks/tezgah_task.py +14 -5
- package/hooks/tezgah_taste_ledger.py +1 -1
- package/hosts/amp/hook.py +217 -0
- package/hosts/amp/tezgah-plugin.ts.in +386 -0
- package/hosts/antigravity/hook.py +255 -0
- package/hosts/codex/hook.py +2 -1
- package/hosts/commandcode/hook.py +239 -0
- package/hosts/copilot/hook.py +284 -0
- package/hosts/cursor/hook.py +31 -3
- package/hosts/droid/hook.py +259 -0
- package/hosts/dsh/hooks.json +1 -1
- package/hosts/gemini/hook.py +213 -0
- package/hosts/goose/hook.py +145 -0
- package/hosts/omp/hook.py +4 -1
- package/hosts/omp/tezgah-hook.ts.in +30 -7
- package/hosts/opencode/plugins/tezgah.js +309 -48
- package/hosts/opencode/tui/cli/tui.tsx +100 -0
- package/hosts/opencode/tui/tezgah-tui.tsx +2 -1
- package/hosts/qwen/hook.py +206 -0
- package/output-styles/tezgah.md +20 -15
- package/package.json +1 -1
- package/skills/ai-research/SKILL.md +21 -14
- package/skills/ai-research/SOURCE +7 -5
- package/skills/ai-research/index/1-frame.md +6 -6
- package/skills/ai-research/index/2-data.md +9 -9
- package/skills/ai-research/index/3-train.md +36 -36
- package/skills/ai-research/index/4-measure.md +13 -13
- package/skills/ai-research/index/5-run.md +11 -11
- package/skills/ai-research/index/6-write.md +23 -23
- package/skills/ai-research/library.json +104 -104
- package/skills/analyze-app/SKILL.md +17 -12
- package/skills/design-contract/SKILL.md +42 -7
- package/skills/design-contract/data-views.md +2 -2
- package/skills/design-library/EVALS.md +1 -1
- package/skills/design-library/INDEX.md +39 -39
- package/skills/design-library/SKILL.md +19 -13
- package/skills/design-library/SOURCE +45 -43
- package/skills/feature-audit/SKILL.md +20 -14
- package/skills/hallmark/LICENSE +21 -0
- package/skills/hallmark/SKILL.md +154 -0
- package/skills/hallmark/SOURCE +207 -0
- package/skills/hallmark/agents/openai.yaml +13 -0
- package/skills/hallmark/references/anatomy.md +71 -0
- package/skills/hallmark/references/brand-truth.md +40 -0
- package/skills/hallmark/references/comp.md +104 -0
- package/skills/hallmark/references/craft.md +116 -0
- package/skills/hallmark/references/dark-mode.md +49 -0
- package/skills/hallmark/references/data-viz.md +48 -0
- package/skills/hallmark/references/design-md.md +53 -0
- package/skills/hallmark/references/direction.md +52 -0
- package/skills/hallmark/references/export-formats.md +80 -0
- package/skills/hallmark/references/flow.md +131 -0
- package/skills/hallmark/references/fonts.md +58 -0
- package/skills/hallmark/references/gates.md +243 -0
- package/skills/hallmark/references/genres/atmospheric.md +24 -0
- package/skills/hallmark/references/genres/editorial.md +24 -0
- package/skills/hallmark/references/genres/modern-minimal.md +24 -0
- package/skills/hallmark/references/genres/playful.md +24 -0
- package/skills/hallmark/references/imagery.md +99 -0
- package/skills/hallmark/references/interaction-and-states.md +89 -0
- package/skills/hallmark/references/layout.md +104 -0
- package/skills/hallmark/references/macrostructures/01-bento-grid.md +21 -0
- package/skills/hallmark/references/macrostructures/02-long-document.md +35 -0
- package/skills/hallmark/references/macrostructures/03-marquee-hero.md +21 -0
- package/skills/hallmark/references/macrostructures/04-stat-led.md +21 -0
- package/skills/hallmark/references/macrostructures/05-workbench.md +21 -0
- package/skills/hallmark/references/macrostructures/06-conversational-faq.md +28 -0
- package/skills/hallmark/references/macrostructures/07-manifesto.md +28 -0
- package/skills/hallmark/references/macrostructures/08-photographic.md +21 -0
- package/skills/hallmark/references/macrostructures/09-quote-led.md +21 -0
- package/skills/hallmark/references/macrostructures/10-specimen.md +21 -0
- package/skills/hallmark/references/macrostructures/11-catalogue.md +21 -0
- package/skills/hallmark/references/macrostructures/12-letter.md +21 -0
- package/skills/hallmark/references/macrostructures/13-index-first.md +21 -0
- package/skills/hallmark/references/macrostructures/14-narrative-workflow.md +21 -0
- package/skills/hallmark/references/macrostructures/15-split-studio.md +21 -0
- package/skills/hallmark/references/macrostructures/16-feature-stack.md +23 -0
- package/skills/hallmark/references/macrostructures/17-type-specimen.md +19 -0
- package/skills/hallmark/references/macrostructures/18-portfolio-grid.md +21 -0
- package/skills/hallmark/references/macrostructures/19-map-diagram.md +21 -0
- package/skills/hallmark/references/macrostructures/20-ecosystem-index.md +19 -0
- package/skills/hallmark/references/macrostructures/21-component-playground.md +21 -0
- package/skills/hallmark/references/macrostructures.md +119 -0
- package/skills/hallmark/references/microinteractions.md +80 -0
- package/skills/hallmark/references/patterns.md +202 -0
- package/skills/hallmark/references/redesign.md +88 -0
- package/skills/hallmark/references/responsive.md +46 -0
- package/skills/hallmark/references/review-finish.md +19 -0
- package/skills/hallmark/references/review-hero.md +20 -0
- package/skills/hallmark/references/scroll-choreography.md +110 -0
- package/skills/hallmark/references/texture.md +90 -0
- package/skills/hallmark/references/themes/README.md +58 -0
- package/skills/hallmark/references/themes/almanac.jpg +0 -0
- package/skills/hallmark/references/themes/almanac.md +103 -0
- package/skills/hallmark/references/themes/arcade.jpg +0 -0
- package/skills/hallmark/references/themes/arcade.md +102 -0
- package/skills/hallmark/references/themes/atelier.jpg +0 -0
- package/skills/hallmark/references/themes/atelier.md +98 -0
- package/skills/hallmark/references/themes/bloom.jpg +0 -0
- package/skills/hallmark/references/themes/bloom.md +102 -0
- package/skills/hallmark/references/themes/blueprint.jpg +0 -0
- package/skills/hallmark/references/themes/blueprint.md +103 -0
- package/skills/hallmark/references/themes/broadside.jpg +0 -0
- package/skills/hallmark/references/themes/broadside.md +108 -0
- package/skills/hallmark/references/themes/brutal.jpg +0 -0
- package/skills/hallmark/references/themes/brutal.md +95 -0
- package/skills/hallmark/references/themes/carnival.jpg +0 -0
- package/skills/hallmark/references/themes/carnival.md +104 -0
- package/skills/hallmark/references/themes/cobalt.jpg +0 -0
- package/skills/hallmark/references/themes/cobalt.md +101 -0
- package/skills/hallmark/references/themes/console.jpg +0 -0
- package/skills/hallmark/references/themes/console.md +99 -0
- package/skills/hallmark/references/themes/coral.jpg +0 -0
- package/skills/hallmark/references/themes/coral.md +102 -0
- package/skills/hallmark/references/themes/darkroom.jpg +0 -0
- package/skills/hallmark/references/themes/darkroom.md +99 -0
- package/skills/hallmark/references/themes/dose.jpg +0 -0
- package/skills/hallmark/references/themes/dose.md +98 -0
- package/skills/hallmark/references/themes/dusk.jpg +0 -0
- package/skills/hallmark/references/themes/dusk.md +105 -0
- package/skills/hallmark/references/themes/editorial.jpg +0 -0
- package/skills/hallmark/references/themes/editorial.md +97 -0
- package/skills/hallmark/references/themes/formwork.jpg +0 -0
- package/skills/hallmark/references/themes/formwork.md +107 -0
- package/skills/hallmark/references/themes/furrow.jpg +0 -0
- package/skills/hallmark/references/themes/furrow.md +98 -0
- package/skills/hallmark/references/themes/garden.jpg +0 -0
- package/skills/hallmark/references/themes/garden.md +97 -0
- package/skills/hallmark/references/themes/grid.jpg +0 -0
- package/skills/hallmark/references/themes/grid.md +101 -0
- package/skills/hallmark/references/themes/halftone.jpg +0 -0
- package/skills/hallmark/references/themes/halftone.md +106 -0
- package/skills/hallmark/references/themes/hedgerow.jpg +0 -0
- package/skills/hallmark/references/themes/hedgerow.md +104 -0
- package/skills/hallmark/references/themes/hum.jpg +0 -0
- package/skills/hallmark/references/themes/hum.md +99 -0
- package/skills/hallmark/references/themes/index.json +2191 -0
- package/skills/hallmark/references/themes/ink.jpg +0 -0
- package/skills/hallmark/references/themes/ink.md +106 -0
- package/skills/hallmark/references/themes/kiln.jpg +0 -0
- package/skills/hallmark/references/themes/kiln.md +108 -0
- package/skills/hallmark/references/themes/loom.jpg +0 -0
- package/skills/hallmark/references/themes/loom.md +106 -0
- package/skills/hallmark/references/themes/lumen.jpg +0 -0
- package/skills/hallmark/references/themes/lumen.md +103 -0
- package/skills/hallmark/references/themes/manifesto.jpg +0 -0
- package/skills/hallmark/references/themes/manifesto.md +101 -0
- package/skills/hallmark/references/themes/midnight.jpg +0 -0
- package/skills/hallmark/references/themes/midnight.md +97 -0
- package/skills/hallmark/references/themes/newsprint.jpg +0 -0
- package/skills/hallmark/references/themes/newsprint.md +102 -0
- package/skills/hallmark/references/themes/overprint.jpg +0 -0
- package/skills/hallmark/references/themes/overprint.md +101 -0
- package/skills/hallmark/references/themes/pasteup.jpg +0 -0
- package/skills/hallmark/references/themes/pasteup.md +100 -0
- package/skills/hallmark/references/themes/piste.jpg +0 -0
- package/skills/hallmark/references/themes/piste.md +99 -0
- package/skills/hallmark/references/themes/ribbon.jpg +0 -0
- package/skills/hallmark/references/themes/ribbon.md +106 -0
- package/skills/hallmark/references/themes/rim.jpg +0 -0
- package/skills/hallmark/references/themes/rim.md +96 -0
- package/skills/hallmark/references/themes/riso.jpg +0 -0
- package/skills/hallmark/references/themes/riso.md +98 -0
- package/skills/hallmark/references/themes/solstice.jpg +0 -0
- package/skills/hallmark/references/themes/solstice.md +104 -0
- package/skills/hallmark/references/themes/specimen.jpg +0 -0
- package/skills/hallmark/references/themes/specimen.md +100 -0
- package/skills/hallmark/references/themes/spore.jpg +0 -0
- package/skills/hallmark/references/themes/spore.md +104 -0
- package/skills/hallmark/references/themes/sport.jpg +0 -0
- package/skills/hallmark/references/themes/sport.md +101 -0
- package/skills/hallmark/references/themes/squeeze.jpg +0 -0
- package/skills/hallmark/references/themes/squeeze.md +99 -0
- package/skills/hallmark/references/themes/sticker.jpg +0 -0
- package/skills/hallmark/references/themes/sticker.md +106 -0
- package/skills/hallmark/references/themes/studio.jpg +0 -0
- package/skills/hallmark/references/themes/studio.md +99 -0
- package/skills/hallmark/references/themes/terminal.jpg +0 -0
- package/skills/hallmark/references/themes/terminal.md +96 -0
- package/skills/hallmark/references/themes/terrazzo.jpg +0 -0
- package/skills/hallmark/references/themes/terrazzo.md +106 -0
- package/skills/hallmark/references/themes/ultraviolet.jpg +0 -0
- package/skills/hallmark/references/themes/ultraviolet.md +106 -0
- package/skills/hallmark/references/themes/vellum.jpg +0 -0
- package/skills/hallmark/references/themes/vellum.md +105 -0
- package/skills/hallmark/references/themes/wayfind.jpg +0 -0
- package/skills/hallmark/references/themes/wayfind.md +105 -0
- package/skills/hallmark/references/themes/werkstatt.jpg +0 -0
- package/skills/hallmark/references/themes/werkstatt.md +105 -0
- package/skills/hallmark/scripts/capture.mjs +125 -0
- package/skills/hallmark/scripts/fixtures/exemplars/atmospheric.html +324 -0
- package/skills/hallmark/scripts/fixtures/exemplars/editorial.html +363 -0
- package/skills/hallmark/scripts/fixtures/exemplars/modern-minimal.html +527 -0
- package/skills/hallmark/scripts/fixtures/exemplars/playful.html +353 -0
- package/skills/hallmark/scripts/fixtures/eyebrow-fail/index.html +118 -0
- package/skills/hallmark/scripts/fixtures/eyebrow-pass/index.html +137 -0
- package/skills/hallmark/scripts/fixtures/kept/after.html +27 -0
- package/skills/hallmark/scripts/fixtures/kept/before.html +26 -0
- package/skills/hallmark/scripts/fixtures/slopped.html +145 -0
- package/skills/hallmark/scripts/fixtures/tailwind-fail/Feature.vue +14 -0
- package/skills/hallmark/scripts/fixtures/tailwind-fail/Hero.tsx +33 -0
- package/skills/hallmark/scripts/fixtures/tailwind-fail/index.html +74 -0
- package/skills/hallmark/scripts/fixtures/tailwind-fail/style.css +6 -0
- package/skills/hallmark/scripts/fixtures/tailwind-pass/Hero.tsx +33 -0
- package/skills/hallmark/scripts/fixtures/tailwind-pass/index.html +57 -0
- package/skills/hallmark/scripts/fixtures/tailwind-pass/style.css +15 -0
- package/skills/hallmark/scripts/fixtures/waiver/index.html +54 -0
- package/skills/hallmark/scripts/imagegen.mjs +85 -0
- package/skills/hallmark/scripts/install-hook.mjs +70 -0
- package/skills/hallmark/scripts/install.mjs +141 -0
- package/skills/hallmark/scripts/lint-hook.mjs +49 -0
- package/skills/hallmark/scripts/photos.json +1 -0
- package/skills/hallmark/scripts/picture.mjs +71 -0
- package/skills/hallmark/scripts/refcheck.mjs +352 -0
- package/skills/hallmark/scripts/sloplint-render.mjs +1252 -0
- package/skills/hallmark/scripts/sloplint.mjs +4422 -0
- package/skills/hallmark/scripts/theme.mjs +650 -0
- package/skills/harness/SKILL.md +17 -8
- package/skills/i-have-adhd/SKILL.md +32 -12
- package/skills/no-ai-slop/SKILL.md +15 -1
- package/skills/plan-add/SKILL.md +38 -27
- package/skills/plan-status/SKILL.md +13 -7
- package/skills/plan-sync/SKILL.md +18 -12
- package/skills/pm-frameworks/SKILL.md +19 -10
- package/skills/pm-frameworks/SOURCE +7 -5
- package/skills/ponytail/SKILL.md +19 -14
- package/skills/product-analysis/SKILL.md +22 -18
- package/skills/product-flow/SKILL.md +14 -9
- package/skills/research/SKILL.md +97 -48
- package/skills/rl-env/SKILL.md +25 -13
- package/skills/rl-env/SOURCE +8 -6
- package/skills/tezgah-contract/SKILL.md +65 -47
- package/statusline.py +20 -9
- package/workflows/graph-review.js +14 -2
- package/bin/tezgah-skill.py +0 -59
- /package/skills/ai-research/0-autoresearch-skill/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/litgpt/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/mamba/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/nanogpt/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/rwkv/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/torchtitan/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/02-tokenization/huggingface-tokenizers/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/02-tokenization/sentencepiece/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/03-fine-tuning/axolotl/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/03-fine-tuning/llama-factory/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/03-fine-tuning/peft/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/03-fine-tuning/unsloth/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/04-mechanistic-interpretability/nnsight/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/04-mechanistic-interpretability/pyvene/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/04-mechanistic-interpretability/saelens/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/05-data-processing/nemo-curator/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/05-data-processing/ray-data/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/grpo-rl-training/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/miles/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/openrlhf/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/simpo/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/slime/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/torchforge/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/trl-fine-tuning/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/verl/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/07-safety-alignment/constitutional-ai/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/07-safety-alignment/llamaguard/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/07-safety-alignment/nemo-guardrails/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/07-safety-alignment/prompt-guard/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/accelerate/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/deepspeed/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/megatron-core/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/pytorch-fsdp2/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/pytorch-lightning/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/ray-train/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/09-infrastructure/lambda-labs/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/09-infrastructure/modal/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/09-infrastructure/skypilot/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/awq/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/bitsandbytes/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/flash-attention/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/gguf/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/gptq/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/hqq/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/ml-training-recipes/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/11-evaluation/lm-evaluation-harness/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/11-evaluation/nemo-evaluator/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/12-inference-serving/llama-cpp/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/12-inference-serving/sglang/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/12-inference-serving/tensorrt-llm/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/12-inference-serving/vllm/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/13-mlops/mlflow/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/13-mlops/swanlab/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/13-mlops/tensorboard/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/13-mlops/weights-and-biases/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/a-evolve/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/autogpt/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/crewai/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/langchain/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/llamaindex/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/chroma/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/faiss/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/pinecone/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/qdrant/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/sentence-transformers/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/16-prompt-engineering/dspy/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/16-prompt-engineering/guidance/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/16-prompt-engineering/instructor/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/16-prompt-engineering/outlines/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/17-observability/langsmith/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/17-observability/phoenix/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/audiocraft/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/blip-2/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/clip/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/cosmos-policy/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/llava/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/openpi/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/openvla-oft/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/segment-anything/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/stable-diffusion/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/whisper/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/knowledge-distillation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/long-context/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/model-merging/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/model-pruning/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/moe-training/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/speculative-decoding/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/20-ml-paper-writing/academic-plotting/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/21-research-ideation/brainstorming-research-ideas/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/21-research-ideation/creative-thinking-for-research/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/22-agent-native-research-artifact/compiler/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/22-agent-native-research-artifact/research-manager/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/colour-independence/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/flexible-typography/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/information-density/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/preference-audit/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/responsive-accessibility/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/responsive-review/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/simplified-views/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/specify/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/user-preference-respect/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/adaptive-personalisation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/assess-load/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/cognitive-load-assessment/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/contextual-help-design/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/error-prevention-recovery/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/focus-attention-design/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/memory-load-reduction/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/plain-language-design/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/review/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/simplify/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/wayfinding-navigation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/design-research/skills/behavioural-analytics/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/design-research/skills/qual-quant-triangulation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/audit/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/design-flow/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/feedback-and-status/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/gesture-alternatives/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/keyboard-navigation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/keyboard-review/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/motion-sensitivity/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/multi-modal-input/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/touch-target-design/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/voice-interaction/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-affordance/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-brand-consistency/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-color/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-composition/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-information-density/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-typography/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-visual-hierarchy/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/pm-frameworks/intended-vs-implemented/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/pm-frameworks/opportunity-solution-tree/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/generate-nemo-gym-env/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/generate-openenv-env/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/generate-ors-env/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/generate-verifiers-env/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/rl-env-from-description/{SKILL.md → ENTRY.md} +0 -0
package/hooks/tezgah_policy.py
CHANGED
|
@@ -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}
|
|
7
|
-
|
|
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: `
|
|
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: `
|
|
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 (`
|
|
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
|
-
`
|
|
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
|
-
`
|
|
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 - `
|
|
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 `
|
|
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 `
|
|
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 `
|
|
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 - `
|
|
397
|
-
silently absorbed inline; run `
|
|
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).
|
|
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
|
|
556
|
-
`{ORX_BIN} skill
|
|
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 `
|
|
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
|
|
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: `
|
|
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
|
|
889
|
-
|
|
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
|
|
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.**
|
|
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}`)
|
|
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 `
|
|
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/`,
|
|
1055
|
-
project
|
|
1056
|
-
|
|
1057
|
-
project root and never `git add -f`
|
|
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 - `
|
|
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
|
|
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: `
|
|
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", "
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
#
|
|
1111
|
-
#
|
|
1112
|
-
#
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
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.
|
|
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;
|
|
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/.
|
package/hooks/tezgah_rank.py
CHANGED
|
@@ -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
|
-
|
|
52
|
-
|
|
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))
|
|
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]]
|
package/hooks/tezgah_replay.py
CHANGED
|
@@ -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
|
-
|
|
590
|
-
|
|
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
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
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
|