@r1z4x/tezgah 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +738 -0
- package/LICENSE +21 -0
- package/MANIFEST +753 -0
- package/README.de.md +169 -0
- package/README.es.md +168 -0
- package/README.fr.md +166 -0
- package/README.md +161 -0
- package/README.tr.md +163 -0
- package/agents/tezgah-reviewer.md +70 -0
- package/bin/codegen +337 -0
- package/bin/consult +797 -0
- package/bin/tezgah-adhd +50 -0
- package/bin/tezgah-agents +45 -0
- package/bin/tezgah-capture +66 -0
- package/bin/tezgah-context +96 -0
- package/bin/tezgah-decisions +213 -0
- package/bin/tezgah-design +953 -0
- package/bin/tezgah-docs +1199 -0
- package/bin/tezgah-doctor +497 -0
- package/bin/tezgah-dsh +37 -0
- package/bin/tezgah-dsh.cmd +70 -0
- package/bin/tezgah-gate +75 -0
- package/bin/tezgah-import-ai-research +439 -0
- package/bin/tezgah-index +32 -0
- package/bin/tezgah-lessons +148 -0
- package/bin/tezgah-mcp +322 -0
- package/bin/tezgah-migrate +324 -0
- package/bin/tezgah-pony +50 -0
- package/bin/tezgah-research +772 -0
- package/bin/tezgah-rollback +93 -0
- package/bin/tezgah-route +124 -0
- package/bin/tezgah-setup +5798 -0
- package/bin/tezgah-status +383 -0
- package/bin/tezgah-task +607 -0
- package/bin/tezgah-taste +423 -0
- package/bin/tezgah-triage +485 -0
- package/bin/tezgah.js +36 -0
- package/commands/adhd.md +21 -0
- package/commands/ponytail.md +21 -0
- package/docs/README.md +112 -0
- package/docs/architecture.md +226 -0
- package/docs/citations-baseline.json +59 -0
- package/docs/clarity-baseline.json +116 -0
- package/docs/contract.md +416 -0
- package/docs/environment.md +141 -0
- package/docs/evidence.md +831 -0
- package/docs/feature-audit.md +139 -0
- package/docs/gate.md +407 -0
- package/docs/glossary.md +201 -0
- package/docs/hosts.md +400 -0
- package/docs/index.json +471 -0
- package/docs/judge.md +193 -0
- package/docs/layers.md +189 -0
- package/docs/models.md +160 -0
- package/docs/operations.md +666 -0
- package/docs/research.md +809 -0
- package/docs/results/paired-outcome-2026-10.jsonl +254 -0
- package/docs/results/paired-outcome-2026-10.md +204 -0
- package/docs/skills.md +236 -0
- package/docs/status-line.md +315 -0
- package/docs/testing.md +287 -0
- package/docs/vision.md +117 -0
- package/hooks/hooks.json +33 -0
- package/hooks/projects-auto-init.py +98 -0
- package/hooks/projects-posttooluse.py +149 -0
- package/hooks/projects-pretooluse.py +40 -0
- package/hooks/projects-stop.py +60 -0
- package/hooks/tezgah_agents.py +817 -0
- package/hooks/tezgah_apps.py +266 -0
- package/hooks/tezgah_attest.py +255 -0
- package/hooks/tezgah_clarity.py +171 -0
- package/hooks/tezgah_components.py +140 -0
- package/hooks/tezgah_context.py +2953 -0
- package/hooks/tezgah_embed.py +765 -0
- package/hooks/tezgah_gate.py +2736 -0
- package/hooks/tezgah_guard.py +177 -0
- package/hooks/tezgah_index.py +124 -0
- package/hooks/tezgah_integrity.py +5141 -0
- package/hooks/tezgah_judge.py +487 -0
- package/hooks/tezgah_lang.py +230 -0
- package/hooks/tezgah_lessons.py +210 -0
- package/hooks/tezgah_models.py +855 -0
- package/hooks/tezgah_paths.py +1132 -0
- package/hooks/tezgah_policy.py +1039 -0
- package/hooks/tezgah_rank.py +77 -0
- package/hooks/tezgah_replay.py +1109 -0
- package/hooks/tezgah_research.py +5176 -0
- package/hooks/tezgah_shapes.py +305 -0
- package/hooks/tezgah_skill_pick.py +227 -0
- package/hooks/tezgah_snapshot.py +490 -0
- package/hooks/tezgah_stopspec.py +320 -0
- package/hooks/tezgah_task.py +458 -0
- package/hooks/tezgah_taste.py +201 -0
- package/hooks/tezgah_untrusted.py +112 -0
- package/hooks/tezgah_update.py +430 -0
- package/hosts/codex/hook.py +268 -0
- package/hosts/codex/hooks.json +26 -0
- package/hosts/cursor/hook.py +461 -0
- package/hosts/cursor/hooks.json +44 -0
- package/hosts/dsh/hooks.json +21 -0
- package/hosts/dsh/statusline/lib/client.js +138 -0
- package/hosts/dsh/statusline/lib/index.js +104 -0
- package/hosts/dsh/statusline/package.json +28 -0
- package/hosts/omp/hook.py +277 -0
- package/hosts/omp/tezgah-hook.ts.in +701 -0
- package/hosts/opencode/plugins/tezgah.js +2742 -0
- package/hosts/opencode/tui/tezgah-tui.tsx +151 -0
- package/output-styles/tezgah.md +142 -0
- package/package.json +32 -0
- package/packaging/build.sh +342 -0
- package/packaging/install.ps1 +166 -0
- package/packaging/install.sh +56 -0
- package/packaging/upgrade.sh +142 -0
- package/skills/ai-research/0-autoresearch-skill/SKILL.md +411 -0
- package/skills/ai-research/0-autoresearch-skill/references/agent-continuity.md +95 -0
- package/skills/ai-research/0-autoresearch-skill/references/progress-reporting.md +166 -0
- package/skills/ai-research/0-autoresearch-skill/references/skill-routing.md +219 -0
- package/skills/ai-research/0-autoresearch-skill/templates/findings.md +44 -0
- package/skills/ai-research/0-autoresearch-skill/templates/research-log.md +41 -0
- package/skills/ai-research/01-model-architecture/litgpt/SKILL.md +469 -0
- package/skills/ai-research/01-model-architecture/litgpt/references/custom-models.md +569 -0
- package/skills/ai-research/01-model-architecture/litgpt/references/distributed-training.md +452 -0
- package/skills/ai-research/01-model-architecture/litgpt/references/supported-models.md +337 -0
- package/skills/ai-research/01-model-architecture/litgpt/references/training-recipes.md +620 -0
- package/skills/ai-research/01-model-architecture/mamba/SKILL.md +260 -0
- package/skills/ai-research/01-model-architecture/mamba/references/architecture-details.md +207 -0
- package/skills/ai-research/01-model-architecture/mamba/references/benchmarks.md +256 -0
- package/skills/ai-research/01-model-architecture/mamba/references/training-guide.md +389 -0
- package/skills/ai-research/01-model-architecture/nanogpt/SKILL.md +290 -0
- package/skills/ai-research/01-model-architecture/nanogpt/references/architecture.md +383 -0
- package/skills/ai-research/01-model-architecture/nanogpt/references/data.md +477 -0
- package/skills/ai-research/01-model-architecture/nanogpt/references/training.md +565 -0
- package/skills/ai-research/01-model-architecture/rwkv/SKILL.md +260 -0
- package/skills/ai-research/01-model-architecture/rwkv/references/architecture-details.md +345 -0
- package/skills/ai-research/01-model-architecture/rwkv/references/rwkv7.md +387 -0
- package/skills/ai-research/01-model-architecture/rwkv/references/state-management.md +370 -0
- package/skills/ai-research/01-model-architecture/torchtitan/SKILL.md +358 -0
- package/skills/ai-research/01-model-architecture/torchtitan/references/checkpoint.md +182 -0
- package/skills/ai-research/01-model-architecture/torchtitan/references/custom-models.md +259 -0
- package/skills/ai-research/01-model-architecture/torchtitan/references/float8.md +134 -0
- package/skills/ai-research/01-model-architecture/torchtitan/references/fsdp.md +127 -0
- package/skills/ai-research/02-tokenization/huggingface-tokenizers/SKILL.md +516 -0
- package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/algorithms.md +654 -0
- package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/integration.md +638 -0
- package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/pipeline.md +724 -0
- package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/training.md +566 -0
- package/skills/ai-research/02-tokenization/sentencepiece/SKILL.md +235 -0
- package/skills/ai-research/02-tokenization/sentencepiece/references/algorithms.md +201 -0
- package/skills/ai-research/02-tokenization/sentencepiece/references/training.md +305 -0
- package/skills/ai-research/03-fine-tuning/axolotl/SKILL.md +158 -0
- package/skills/ai-research/03-fine-tuning/axolotl/references/api.md +5549 -0
- package/skills/ai-research/03-fine-tuning/axolotl/references/dataset-formats.md +1030 -0
- package/skills/ai-research/03-fine-tuning/axolotl/references/index.md +16 -0
- package/skills/ai-research/03-fine-tuning/axolotl/references/other.md +3564 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/SKILL.md +80 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/references/_images.md +24 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/references/advanced.md +1056 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/references/getting_started.md +350 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/references/index.md +20 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/references/other.md +32 -0
- package/skills/ai-research/03-fine-tuning/peft/SKILL.md +431 -0
- package/skills/ai-research/03-fine-tuning/peft/references/advanced-usage.md +515 -0
- package/skills/ai-research/03-fine-tuning/peft/references/troubleshooting.md +481 -0
- package/skills/ai-research/03-fine-tuning/unsloth/SKILL.md +80 -0
- package/skills/ai-research/03-fine-tuning/unsloth/references/index.md +8 -0
- package/skills/ai-research/03-fine-tuning/unsloth/references/llms.md +83 -0
- package/skills/ai-research/04-mechanistic-interpretability/nnsight/SKILL.md +436 -0
- package/skills/ai-research/04-mechanistic-interpretability/nnsight/references/README.md +79 -0
- package/skills/ai-research/04-mechanistic-interpretability/nnsight/references/api.md +345 -0
- package/skills/ai-research/04-mechanistic-interpretability/nnsight/references/tutorials.md +301 -0
- package/skills/ai-research/04-mechanistic-interpretability/pyvene/SKILL.md +473 -0
- package/skills/ai-research/04-mechanistic-interpretability/pyvene/references/README.md +74 -0
- package/skills/ai-research/04-mechanistic-interpretability/pyvene/references/api.md +384 -0
- package/skills/ai-research/04-mechanistic-interpretability/pyvene/references/tutorials.md +377 -0
- package/skills/ai-research/04-mechanistic-interpretability/saelens/SKILL.md +386 -0
- package/skills/ai-research/04-mechanistic-interpretability/saelens/references/README.md +71 -0
- package/skills/ai-research/04-mechanistic-interpretability/saelens/references/api.md +334 -0
- package/skills/ai-research/04-mechanistic-interpretability/saelens/references/tutorials.md +319 -0
- package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/SKILL.md +346 -0
- package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/references/README.md +55 -0
- package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/references/api.md +363 -0
- package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/references/tutorials.md +340 -0
- package/skills/ai-research/05-data-processing/nemo-curator/SKILL.md +383 -0
- package/skills/ai-research/05-data-processing/nemo-curator/references/deduplication.md +88 -0
- package/skills/ai-research/05-data-processing/nemo-curator/references/filtering.md +103 -0
- package/skills/ai-research/05-data-processing/ray-data/SKILL.md +326 -0
- package/skills/ai-research/05-data-processing/ray-data/references/integration.md +83 -0
- package/skills/ai-research/05-data-processing/ray-data/references/transformations.md +84 -0
- package/skills/ai-research/06-post-training/grpo-rl-training/README.md +98 -0
- package/skills/ai-research/06-post-training/grpo-rl-training/SKILL.md +572 -0
- package/skills/ai-research/06-post-training/miles/SKILL.md +315 -0
- package/skills/ai-research/06-post-training/miles/references/api-reference.md +142 -0
- package/skills/ai-research/06-post-training/miles/references/troubleshooting.md +353 -0
- package/skills/ai-research/06-post-training/openrlhf/SKILL.md +249 -0
- package/skills/ai-research/06-post-training/openrlhf/references/algorithm-comparison.md +405 -0
- package/skills/ai-research/06-post-training/openrlhf/references/custom-rewards.md +531 -0
- package/skills/ai-research/06-post-training/openrlhf/references/hybrid-engine.md +288 -0
- package/skills/ai-research/06-post-training/openrlhf/references/multi-node-training.md +455 -0
- package/skills/ai-research/06-post-training/simpo/SKILL.md +219 -0
- package/skills/ai-research/06-post-training/simpo/references/datasets.md +479 -0
- package/skills/ai-research/06-post-training/simpo/references/hyperparameters.md +453 -0
- package/skills/ai-research/06-post-training/simpo/references/loss-functions.md +351 -0
- package/skills/ai-research/06-post-training/slime/SKILL.md +464 -0
- package/skills/ai-research/06-post-training/slime/references/api-reference.md +393 -0
- package/skills/ai-research/06-post-training/slime/references/troubleshooting.md +387 -0
- package/skills/ai-research/06-post-training/torchforge/SKILL.md +433 -0
- package/skills/ai-research/06-post-training/torchforge/references/api-reference.md +328 -0
- package/skills/ai-research/06-post-training/torchforge/references/troubleshooting.md +410 -0
- package/skills/ai-research/06-post-training/trl-fine-tuning/SKILL.md +455 -0
- package/skills/ai-research/06-post-training/trl-fine-tuning/references/dpo-variants.md +228 -0
- package/skills/ai-research/06-post-training/trl-fine-tuning/references/online-rl.md +83 -0
- package/skills/ai-research/06-post-training/trl-fine-tuning/references/reward-modeling.md +123 -0
- package/skills/ai-research/06-post-training/trl-fine-tuning/references/sft-training.md +169 -0
- package/skills/ai-research/06-post-training/verl/SKILL.md +391 -0
- package/skills/ai-research/06-post-training/verl/references/api-reference.md +302 -0
- package/skills/ai-research/06-post-training/verl/references/troubleshooting.md +392 -0
- package/skills/ai-research/07-safety-alignment/constitutional-ai/SKILL.md +290 -0
- package/skills/ai-research/07-safety-alignment/llamaguard/SKILL.md +337 -0
- package/skills/ai-research/07-safety-alignment/nemo-guardrails/SKILL.md +297 -0
- package/skills/ai-research/07-safety-alignment/prompt-guard/SKILL.md +312 -0
- package/skills/ai-research/08-distributed-training/accelerate/SKILL.md +332 -0
- package/skills/ai-research/08-distributed-training/accelerate/references/custom-plugins.md +454 -0
- package/skills/ai-research/08-distributed-training/accelerate/references/megatron-integration.md +490 -0
- package/skills/ai-research/08-distributed-training/accelerate/references/performance.md +526 -0
- package/skills/ai-research/08-distributed-training/deepspeed/SKILL.md +141 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/08.md +18 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/09.md +174 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/2020.md +379 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/2023.md +280 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/assets.md +180 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/index.md +36 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/mii.md +119 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/other.md +1192 -0
- package/skills/ai-research/08-distributed-training/megatron-core/SKILL.md +366 -0
- package/skills/ai-research/08-distributed-training/megatron-core/references/benchmarks.md +250 -0
- package/skills/ai-research/08-distributed-training/megatron-core/references/parallelism-guide.md +405 -0
- package/skills/ai-research/08-distributed-training/megatron-core/references/production-examples.md +474 -0
- package/skills/ai-research/08-distributed-training/megatron-core/references/training-recipes.md +548 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/SKILL.md +231 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_dcp_async_recipe.md +14 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_dcp_overview.md +19 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_dcp_recipe.md +18 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_ddp_notes.md +10 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_device_mesh_tutorial.md +22 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_examples_fsdp2.md +15 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_fsdp1_api.md +9 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_fsdp2_tutorial.md +45 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_fully_shard_api.md +49 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_tp_tutorial.md +22 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/ray_train_fsdp2_example.md +13 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/torchtitan_fsdp_notes.md +14 -0
- package/skills/ai-research/08-distributed-training/pytorch-lightning/SKILL.md +346 -0
- package/skills/ai-research/08-distributed-training/pytorch-lightning/references/callbacks.md +437 -0
- package/skills/ai-research/08-distributed-training/pytorch-lightning/references/distributed.md +491 -0
- package/skills/ai-research/08-distributed-training/pytorch-lightning/references/hyperparameter-tuning.md +557 -0
- package/skills/ai-research/08-distributed-training/ray-train/SKILL.md +406 -0
- package/skills/ai-research/08-distributed-training/ray-train/references/multi-node.md +629 -0
- package/skills/ai-research/09-infrastructure/lambda-labs/SKILL.md +545 -0
- package/skills/ai-research/09-infrastructure/lambda-labs/references/advanced-usage.md +612 -0
- package/skills/ai-research/09-infrastructure/lambda-labs/references/troubleshooting.md +531 -0
- package/skills/ai-research/09-infrastructure/modal/SKILL.md +341 -0
- package/skills/ai-research/09-infrastructure/modal/references/advanced-usage.md +504 -0
- package/skills/ai-research/09-infrastructure/modal/references/troubleshooting.md +495 -0
- package/skills/ai-research/09-infrastructure/skypilot/SKILL.md +509 -0
- package/skills/ai-research/09-infrastructure/skypilot/references/advanced-usage.md +492 -0
- package/skills/ai-research/09-infrastructure/skypilot/references/troubleshooting.md +571 -0
- package/skills/ai-research/10-optimization/awq/SKILL.md +310 -0
- package/skills/ai-research/10-optimization/awq/references/advanced-usage.md +325 -0
- package/skills/ai-research/10-optimization/awq/references/troubleshooting.md +345 -0
- package/skills/ai-research/10-optimization/bitsandbytes/SKILL.md +411 -0
- package/skills/ai-research/10-optimization/bitsandbytes/references/memory-optimization.md +522 -0
- package/skills/ai-research/10-optimization/bitsandbytes/references/qlora-training.md +522 -0
- package/skills/ai-research/10-optimization/bitsandbytes/references/quantization-formats.md +448 -0
- package/skills/ai-research/10-optimization/flash-attention/SKILL.md +367 -0
- package/skills/ai-research/10-optimization/flash-attention/references/benchmarks.md +216 -0
- package/skills/ai-research/10-optimization/flash-attention/references/transformers-integration.md +294 -0
- package/skills/ai-research/10-optimization/gguf/SKILL.md +427 -0
- package/skills/ai-research/10-optimization/gguf/references/advanced-usage.md +505 -0
- package/skills/ai-research/10-optimization/gguf/references/troubleshooting.md +443 -0
- package/skills/ai-research/10-optimization/gptq/SKILL.md +450 -0
- package/skills/ai-research/10-optimization/gptq/references/calibration.md +338 -0
- package/skills/ai-research/10-optimization/gptq/references/integration.md +130 -0
- package/skills/ai-research/10-optimization/gptq/references/troubleshooting.md +96 -0
- package/skills/ai-research/10-optimization/hqq/SKILL.md +445 -0
- package/skills/ai-research/10-optimization/hqq/references/advanced-usage.md +529 -0
- package/skills/ai-research/10-optimization/hqq/references/troubleshooting.md +504 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/SKILL.md +319 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/architecture.md +320 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/biomedical.md +498 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/domain-specific.md +626 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/experiment-loop.md +129 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/optimizers.md +330 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/scaling-and-selection.md +428 -0
- package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/SKILL.md +405 -0
- package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/references/benchmarks.md +394 -0
- package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/references/custom-tasks.md +425 -0
- package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/references/issues.md +395 -0
- package/skills/ai-research/11-evaluation/lm-evaluation-harness/SKILL.md +490 -0
- package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/api-evaluation.md +491 -0
- package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/benchmark-guide.md +489 -0
- package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/custom-tasks.md +603 -0
- package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/distributed-eval.md +520 -0
- package/skills/ai-research/11-evaluation/nemo-evaluator/SKILL.md +494 -0
- package/skills/ai-research/11-evaluation/nemo-evaluator/references/adapter-system.md +341 -0
- package/skills/ai-research/11-evaluation/nemo-evaluator/references/configuration.md +448 -0
- package/skills/ai-research/11-evaluation/nemo-evaluator/references/custom-benchmarks.md +316 -0
- package/skills/ai-research/11-evaluation/nemo-evaluator/references/execution-backends.md +362 -0
- package/skills/ai-research/12-inference-serving/llama-cpp/SKILL.md +258 -0
- package/skills/ai-research/12-inference-serving/llama-cpp/references/optimization.md +90 -0
- package/skills/ai-research/12-inference-serving/llama-cpp/references/quantization.md +214 -0
- package/skills/ai-research/12-inference-serving/llama-cpp/references/server.md +126 -0
- package/skills/ai-research/12-inference-serving/sglang/SKILL.md +442 -0
- package/skills/ai-research/12-inference-serving/sglang/references/deployment.md +491 -0
- package/skills/ai-research/12-inference-serving/sglang/references/radix-attention.md +414 -0
- package/skills/ai-research/12-inference-serving/sglang/references/structured-generation.md +542 -0
- package/skills/ai-research/12-inference-serving/tensorrt-llm/SKILL.md +187 -0
- package/skills/ai-research/12-inference-serving/tensorrt-llm/references/multi-gpu.md +299 -0
- package/skills/ai-research/12-inference-serving/tensorrt-llm/references/optimization.md +243 -0
- package/skills/ai-research/12-inference-serving/tensorrt-llm/references/serving.md +471 -0
- package/skills/ai-research/12-inference-serving/vllm/SKILL.md +364 -0
- package/skills/ai-research/12-inference-serving/vllm/references/optimization.md +227 -0
- package/skills/ai-research/12-inference-serving/vllm/references/quantization.md +285 -0
- package/skills/ai-research/12-inference-serving/vllm/references/server-deployment.md +256 -0
- package/skills/ai-research/12-inference-serving/vllm/references/troubleshooting.md +448 -0
- package/skills/ai-research/13-mlops/mlflow/SKILL.md +704 -0
- package/skills/ai-research/13-mlops/mlflow/references/deployment.md +745 -0
- package/skills/ai-research/13-mlops/mlflow/references/model-registry.md +771 -0
- package/skills/ai-research/13-mlops/mlflow/references/tracking.md +681 -0
- package/skills/ai-research/13-mlops/swanlab/SKILL.md +406 -0
- package/skills/ai-research/13-mlops/swanlab/references/integrations.md +305 -0
- package/skills/ai-research/13-mlops/swanlab/references/visualization.md +234 -0
- package/skills/ai-research/13-mlops/tensorboard/SKILL.md +629 -0
- package/skills/ai-research/13-mlops/tensorboard/references/integrations.md +639 -0
- package/skills/ai-research/13-mlops/tensorboard/references/profiling.md +546 -0
- package/skills/ai-research/13-mlops/tensorboard/references/visualization.md +621 -0
- package/skills/ai-research/13-mlops/weights-and-biases/SKILL.md +590 -0
- package/skills/ai-research/13-mlops/weights-and-biases/references/artifacts.md +585 -0
- package/skills/ai-research/13-mlops/weights-and-biases/references/integrations.md +701 -0
- package/skills/ai-research/13-mlops/weights-and-biases/references/sweeps.md +848 -0
- package/skills/ai-research/14-agents/a-evolve/SKILL.md +383 -0
- package/skills/ai-research/14-agents/a-evolve/references/README.md +831 -0
- package/skills/ai-research/14-agents/a-evolve/references/api.md +594 -0
- package/skills/ai-research/14-agents/a-evolve/references/architecture.md +417 -0
- package/skills/ai-research/14-agents/a-evolve/references/design-patterns.md +462 -0
- package/skills/ai-research/14-agents/a-evolve/references/examples.md +352 -0
- package/skills/ai-research/14-agents/a-evolve/references/issues.md +591 -0
- package/skills/ai-research/14-agents/a-evolve/references/releases.md +112 -0
- package/skills/ai-research/14-agents/a-evolve/references/tutorials.md +819 -0
- package/skills/ai-research/14-agents/autogpt/SKILL.md +403 -0
- package/skills/ai-research/14-agents/autogpt/references/advanced-usage.md +536 -0
- package/skills/ai-research/14-agents/autogpt/references/troubleshooting.md +421 -0
- package/skills/ai-research/14-agents/crewai/SKILL.md +498 -0
- package/skills/ai-research/14-agents/crewai/references/flows.md +439 -0
- package/skills/ai-research/14-agents/crewai/references/tools.md +430 -0
- package/skills/ai-research/14-agents/crewai/references/troubleshooting.md +481 -0
- package/skills/ai-research/14-agents/langchain/SKILL.md +480 -0
- package/skills/ai-research/14-agents/langchain/references/agents.md +500 -0
- package/skills/ai-research/14-agents/langchain/references/integration.md +563 -0
- package/skills/ai-research/14-agents/langchain/references/rag.md +601 -0
- package/skills/ai-research/14-agents/llamaindex/SKILL.md +569 -0
- package/skills/ai-research/14-agents/llamaindex/references/agents.md +84 -0
- package/skills/ai-research/14-agents/llamaindex/references/data_connectors.md +109 -0
- package/skills/ai-research/14-agents/llamaindex/references/query_engines.md +407 -0
- package/skills/ai-research/15-rag/chroma/SKILL.md +406 -0
- package/skills/ai-research/15-rag/chroma/references/integration.md +39 -0
- package/skills/ai-research/15-rag/faiss/SKILL.md +221 -0
- package/skills/ai-research/15-rag/faiss/references/index_types.md +281 -0
- package/skills/ai-research/15-rag/pinecone/SKILL.md +358 -0
- package/skills/ai-research/15-rag/pinecone/references/deployment.md +182 -0
- package/skills/ai-research/15-rag/qdrant/SKILL.md +493 -0
- package/skills/ai-research/15-rag/qdrant/references/advanced-usage.md +649 -0
- package/skills/ai-research/15-rag/qdrant/references/troubleshooting.md +632 -0
- package/skills/ai-research/15-rag/sentence-transformers/SKILL.md +255 -0
- package/skills/ai-research/15-rag/sentence-transformers/references/models.md +124 -0
- package/skills/ai-research/16-prompt-engineering/dspy/SKILL.md +590 -0
- package/skills/ai-research/16-prompt-engineering/dspy/references/examples.md +664 -0
- package/skills/ai-research/16-prompt-engineering/dspy/references/modules.md +476 -0
- package/skills/ai-research/16-prompt-engineering/dspy/references/optimizers.md +567 -0
- package/skills/ai-research/16-prompt-engineering/guidance/SKILL.md +572 -0
- package/skills/ai-research/16-prompt-engineering/guidance/references/backends.md +555 -0
- package/skills/ai-research/16-prompt-engineering/guidance/references/constraints.md +675 -0
- package/skills/ai-research/16-prompt-engineering/guidance/references/examples.md +768 -0
- package/skills/ai-research/16-prompt-engineering/instructor/SKILL.md +740 -0
- package/skills/ai-research/16-prompt-engineering/instructor/references/examples.md +108 -0
- package/skills/ai-research/16-prompt-engineering/instructor/references/providers.md +71 -0
- package/skills/ai-research/16-prompt-engineering/instructor/references/validation.md +607 -0
- package/skills/ai-research/16-prompt-engineering/outlines/SKILL.md +652 -0
- package/skills/ai-research/16-prompt-engineering/outlines/references/backends.md +616 -0
- package/skills/ai-research/16-prompt-engineering/outlines/references/examples.md +774 -0
- package/skills/ai-research/16-prompt-engineering/outlines/references/json_generation.md +653 -0
- package/skills/ai-research/17-observability/langsmith/SKILL.md +422 -0
- package/skills/ai-research/17-observability/langsmith/references/advanced-usage.md +549 -0
- package/skills/ai-research/17-observability/langsmith/references/troubleshooting.md +538 -0
- package/skills/ai-research/17-observability/phoenix/SKILL.md +475 -0
- package/skills/ai-research/17-observability/phoenix/references/advanced-usage.md +620 -0
- package/skills/ai-research/17-observability/phoenix/references/troubleshooting.md +539 -0
- package/skills/ai-research/18-multimodal/audiocraft/SKILL.md +564 -0
- package/skills/ai-research/18-multimodal/audiocraft/references/advanced-usage.md +667 -0
- package/skills/ai-research/18-multimodal/audiocraft/references/troubleshooting.md +505 -0
- package/skills/ai-research/18-multimodal/blip-2/SKILL.md +564 -0
- package/skills/ai-research/18-multimodal/blip-2/references/advanced-usage.md +681 -0
- package/skills/ai-research/18-multimodal/blip-2/references/troubleshooting.md +527 -0
- package/skills/ai-research/18-multimodal/clip/SKILL.md +253 -0
- package/skills/ai-research/18-multimodal/clip/references/applications.md +208 -0
- package/skills/ai-research/18-multimodal/cosmos-policy/SKILL.md +402 -0
- package/skills/ai-research/18-multimodal/cosmos-policy/references/libero-commands.md +175 -0
- package/skills/ai-research/18-multimodal/cosmos-policy/references/robocasa-commands.md +147 -0
- package/skills/ai-research/18-multimodal/llava/SKILL.md +304 -0
- package/skills/ai-research/18-multimodal/llava/references/training.md +198 -0
- package/skills/ai-research/18-multimodal/openpi/SKILL.md +480 -0
- package/skills/ai-research/18-multimodal/openpi/references/checkpoints-and-env-map.md +86 -0
- package/skills/ai-research/18-multimodal/openpi/references/config-recipes.md +50 -0
- package/skills/ai-research/18-multimodal/openpi/references/pytorch-gotchas.md +49 -0
- package/skills/ai-research/18-multimodal/openpi/references/remote-client-pattern.md +48 -0
- package/skills/ai-research/18-multimodal/openpi/references/training-debugging.md +46 -0
- package/skills/ai-research/18-multimodal/openvla-oft/SKILL.md +441 -0
- package/skills/ai-research/18-multimodal/openvla-oft/references/aloha-workflow.md +141 -0
- package/skills/ai-research/18-multimodal/openvla-oft/references/config-troubleshooting.md +97 -0
- package/skills/ai-research/18-multimodal/openvla-oft/references/libero-workflow.md +115 -0
- package/skills/ai-research/18-multimodal/openvla-oft/references/paper-and-checkpoints.md +84 -0
- package/skills/ai-research/18-multimodal/segment-anything/SKILL.md +500 -0
- package/skills/ai-research/18-multimodal/segment-anything/references/advanced-usage.md +590 -0
- package/skills/ai-research/18-multimodal/segment-anything/references/troubleshooting.md +485 -0
- package/skills/ai-research/18-multimodal/stable-diffusion/SKILL.md +519 -0
- package/skills/ai-research/18-multimodal/stable-diffusion/references/advanced-usage.md +717 -0
- package/skills/ai-research/18-multimodal/stable-diffusion/references/troubleshooting.md +556 -0
- package/skills/ai-research/18-multimodal/whisper/SKILL.md +317 -0
- package/skills/ai-research/18-multimodal/whisper/references/languages.md +190 -0
- package/skills/ai-research/19-emerging-techniques/knowledge-distillation/SKILL.md +458 -0
- package/skills/ai-research/19-emerging-techniques/knowledge-distillation/references/minillm.md +335 -0
- package/skills/ai-research/19-emerging-techniques/long-context/SKILL.md +536 -0
- package/skills/ai-research/19-emerging-techniques/long-context/references/extension_methods.md +469 -0
- package/skills/ai-research/19-emerging-techniques/long-context/references/fine_tuning.md +612 -0
- package/skills/ai-research/19-emerging-techniques/long-context/references/rope.md +403 -0
- package/skills/ai-research/19-emerging-techniques/model-merging/SKILL.md +497 -0
- package/skills/ai-research/19-emerging-techniques/model-merging/references/coefficient-tuning.md +415 -0
- package/skills/ai-research/19-emerging-techniques/model-merging/references/evaluation.md +463 -0
- package/skills/ai-research/19-emerging-techniques/model-merging/references/examples.md +429 -0
- package/skills/ai-research/19-emerging-techniques/model-merging/references/methods.md +353 -0
- package/skills/ai-research/19-emerging-techniques/model-pruning/SKILL.md +495 -0
- package/skills/ai-research/19-emerging-techniques/model-pruning/references/wanda.md +348 -0
- package/skills/ai-research/19-emerging-techniques/moe-training/SKILL.md +526 -0
- package/skills/ai-research/19-emerging-techniques/moe-training/references/architectures.md +433 -0
- package/skills/ai-research/19-emerging-techniques/moe-training/references/inference.md +349 -0
- package/skills/ai-research/19-emerging-techniques/moe-training/references/training.md +426 -0
- package/skills/ai-research/19-emerging-techniques/speculative-decoding/SKILL.md +467 -0
- package/skills/ai-research/19-emerging-techniques/speculative-decoding/references/lookahead.md +310 -0
- package/skills/ai-research/19-emerging-techniques/speculative-decoding/references/medusa.md +351 -0
- package/skills/ai-research/20-ml-paper-writing/academic-plotting/SKILL.md +479 -0
- package/skills/ai-research/20-ml-paper-writing/academic-plotting/references/data-visualization.md +509 -0
- package/skills/ai-research/20-ml-paper-writing/academic-plotting/references/diagram-generation.md +395 -0
- package/skills/ai-research/20-ml-paper-writing/academic-plotting/references/style-guide.md +305 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/SKILL.md +982 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/checklists.md +348 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/citation-workflow.md +563 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/reviewer-guidelines.md +349 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/sources.md +165 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/writing-guide.md +477 -0
- package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/SKILL.md +298 -0
- package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/references/slide-templates.md +505 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/SKILL.md +270 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/checklist.md +279 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/reviewer-guidelines.md +116 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/section-blueprints.md +400 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/systems-conferences.md +261 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/writing-patterns.md +231 -0
- package/skills/ai-research/21-research-ideation/brainstorming-research-ideas/SKILL.md +384 -0
- package/skills/ai-research/21-research-ideation/creative-thinking-for-research/SKILL.md +366 -0
- package/skills/ai-research/22-agent-native-research-artifact/compiler/SKILL.md +245 -0
- package/skills/ai-research/22-agent-native-research-artifact/compiler/references/ara-schema.md +439 -0
- package/skills/ai-research/22-agent-native-research-artifact/compiler/references/exploration-tree-spec.md +125 -0
- package/skills/ai-research/22-agent-native-research-artifact/compiler/references/validation-checklist.md +149 -0
- package/skills/ai-research/22-agent-native-research-artifact/research-manager/SKILL.md +324 -0
- package/skills/ai-research/22-agent-native-research-artifact/research-manager/references/event-taxonomy.md +124 -0
- package/skills/ai-research/22-agent-native-research-artifact/research-manager/references/provenance-tags.md +190 -0
- package/skills/ai-research/22-agent-native-research-artifact/research-manager/references/session-protocol.md +162 -0
- package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/SKILL.md +322 -0
- package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/references/review-dimensions.md +182 -0
- package/skills/ai-research/SKILL.md +101 -0
- package/skills/ai-research/SOURCE +38 -0
- package/skills/ai-research/index/1-frame.md +18 -0
- package/skills/ai-research/index/2-data.md +21 -0
- package/skills/ai-research/index/3-train.md +48 -0
- package/skills/ai-research/index/4-measure.md +25 -0
- package/skills/ai-research/index/5-run.md +23 -0
- package/skills/ai-research/index/6-write.md +35 -0
- package/skills/ai-research/library.json +3456 -0
- package/skills/analyze-app/EVALS.md +82 -0
- package/skills/analyze-app/SKILL.md +188 -0
- package/skills/design-contract/EVALS.md +80 -0
- package/skills/design-contract/SKILL.md +171 -0
- package/skills/design-library/EVALS.md +85 -0
- package/skills/design-library/INDEX.md +59 -0
- package/skills/design-library/SKILL.md +58 -0
- package/skills/design-library/SOURCE +131 -0
- package/skills/design-library/adaptive-interfaces/skills/colour-independence/SKILL.md +90 -0
- package/skills/design-library/adaptive-interfaces/skills/flexible-typography/SKILL.md +83 -0
- package/skills/design-library/adaptive-interfaces/skills/information-density/SKILL.md +87 -0
- package/skills/design-library/adaptive-interfaces/skills/preference-audit/SKILL.md +70 -0
- package/skills/design-library/adaptive-interfaces/skills/responsive-accessibility/SKILL.md +86 -0
- package/skills/design-library/adaptive-interfaces/skills/responsive-review/SKILL.md +76 -0
- package/skills/design-library/adaptive-interfaces/skills/simplified-views/SKILL.md +97 -0
- package/skills/design-library/adaptive-interfaces/skills/specify/SKILL.md +63 -0
- package/skills/design-library/adaptive-interfaces/skills/user-preference-respect/SKILL.md +100 -0
- package/skills/design-library/cognitive-accessibility/skills/adaptive-personalisation/SKILL.md +61 -0
- package/skills/design-library/cognitive-accessibility/skills/assess-load/SKILL.md +48 -0
- package/skills/design-library/cognitive-accessibility/skills/cognitive-load-assessment/SKILL.md +60 -0
- package/skills/design-library/cognitive-accessibility/skills/contextual-help-design/SKILL.md +61 -0
- package/skills/design-library/cognitive-accessibility/skills/error-prevention-recovery/SKILL.md +71 -0
- package/skills/design-library/cognitive-accessibility/skills/focus-attention-design/SKILL.md +67 -0
- package/skills/design-library/cognitive-accessibility/skills/memory-load-reduction/SKILL.md +60 -0
- package/skills/design-library/cognitive-accessibility/skills/plain-language-design/SKILL.md +78 -0
- package/skills/design-library/cognitive-accessibility/skills/review/SKILL.md +56 -0
- package/skills/design-library/cognitive-accessibility/skills/simplify/SKILL.md +39 -0
- package/skills/design-library/cognitive-accessibility/skills/wayfinding-navigation/SKILL.md +64 -0
- package/skills/design-library/design-research/skills/behavioural-analytics/SKILL.md +33 -0
- package/skills/design-library/design-research/skills/qual-quant-triangulation/SKILL.md +33 -0
- package/skills/design-library/inclusive-interaction/skills/audit/SKILL.md +50 -0
- package/skills/design-library/inclusive-interaction/skills/design-flow/SKILL.md +58 -0
- package/skills/design-library/inclusive-interaction/skills/feedback-and-status/SKILL.md +76 -0
- package/skills/design-library/inclusive-interaction/skills/gesture-alternatives/SKILL.md +70 -0
- package/skills/design-library/inclusive-interaction/skills/keyboard-navigation/SKILL.md +99 -0
- package/skills/design-library/inclusive-interaction/skills/keyboard-review/SKILL.md +54 -0
- package/skills/design-library/inclusive-interaction/skills/motion-sensitivity/SKILL.md +79 -0
- package/skills/design-library/inclusive-interaction/skills/multi-modal-input/SKILL.md +70 -0
- package/skills/design-library/inclusive-interaction/skills/touch-target-design/SKILL.md +71 -0
- package/skills/design-library/inclusive-interaction/skills/voice-interaction/SKILL.md +68 -0
- package/skills/design-library/visual-critique/skills/critique-affordance/SKILL.md +45 -0
- package/skills/design-library/visual-critique/skills/critique-brand-consistency/SKILL.md +42 -0
- package/skills/design-library/visual-critique/skills/critique-color/SKILL.md +44 -0
- package/skills/design-library/visual-critique/skills/critique-composition/SKILL.md +46 -0
- package/skills/design-library/visual-critique/skills/critique-information-density/SKILL.md +45 -0
- package/skills/design-library/visual-critique/skills/critique-typography/SKILL.md +45 -0
- package/skills/design-library/visual-critique/skills/critique-visual-hierarchy/SKILL.md +40 -0
- package/skills/feature-audit/EVALS.md +83 -0
- package/skills/feature-audit/SKILL.md +326 -0
- package/skills/harness/EVALS.md +81 -0
- package/skills/harness/SKILL.md +88 -0
- package/skills/i-have-adhd/EVALS.md +80 -0
- package/skills/i-have-adhd/SKILL.md +183 -0
- package/skills/no-ai-slop/EVALS.md +89 -0
- package/skills/no-ai-slop/SKILL.md +209 -0
- package/skills/no-ai-slop/eval.md +52 -0
- package/skills/plan-add/EVALS.md +79 -0
- package/skills/plan-add/SKILL.md +179 -0
- package/skills/plan-add/render_table.py +72 -0
- package/skills/plan-status/EVALS.md +78 -0
- package/skills/plan-status/SKILL.md +52 -0
- package/skills/plan-sync/EVALS.md +80 -0
- package/skills/plan-sync/SKILL.md +69 -0
- package/skills/pm-frameworks/SKILL.md +33 -0
- package/skills/pm-frameworks/SOURCE +39 -0
- package/skills/pm-frameworks/intended-vs-implemented/SKILL.md +42 -0
- package/skills/pm-frameworks/opportunity-solution-tree/SKILL.md +64 -0
- package/skills/ponytail/EVALS.md +80 -0
- package/skills/ponytail/SKILL.md +124 -0
- package/skills/product-analysis/EVALS.md +103 -0
- package/skills/product-analysis/SKILL.md +361 -0
- package/skills/research/EVALS.md +104 -0
- package/skills/research/SKILL.md +570 -0
- package/skills/rl-env/SKILL.md +53 -0
- package/skills/rl-env/SOURCE +41 -0
- package/skills/rl-env/generate-nemo-gym-env/SKILL.md +169 -0
- package/skills/rl-env/generate-nemo-gym-env/references/architecture.md +114 -0
- package/skills/rl-env/generate-openenv-env/SKILL.md +183 -0
- package/skills/rl-env/generate-openenv-env/references/architecture.md +82 -0
- package/skills/rl-env/generate-ors-env/SKILL.md +209 -0
- package/skills/rl-env/generate-ors-env/references/architecture.md +113 -0
- package/skills/rl-env/generate-verifiers-env/SKILL.md +188 -0
- package/skills/rl-env/generate-verifiers-env/references/architecture.md +119 -0
- package/skills/rl-env/rl-env-from-description/SKILL.md +124 -0
- package/skills/rl-env/rl-env-from-description/references/interview.md +75 -0
- package/skills/rl-env/rl-env-from-description/references/nemo_gym.md +41 -0
- package/skills/rl-env/rl-env-from-description/references/openenv.md +35 -0
- package/skills/rl-env/rl-env-from-description/references/ors.md +50 -0
- package/skills/rl-env/rl-env-from-description/references/verifiers.md +39 -0
- package/skills/tezgah-contract/EVALS.md +78 -0
- package/skills/tezgah-contract/SKILL.md +792 -0
- package/statusline.py +129 -0
- package/workflows/graph-impact.js +153 -0
- package/workflows/graph-map.js +158 -0
- package/workflows/graph-review.js +170 -0
package/docs/testing.md
ADDED
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
# Testing: the checks, the probes, the e2e scripts
|
|
2
|
+
|
|
3
|
+
This page is for a maintainer adding or changing a test, or who has just changed
|
|
4
|
+
a hook, a CLI or a status line and wants to know what will notice. It records the
|
|
5
|
+
checks that gate a commit, the shape of the suite, the helpers to reach for, and
|
|
6
|
+
the rules a new test must satisfy.
|
|
7
|
+
|
|
8
|
+
## The three checks
|
|
9
|
+
|
|
10
|
+
```sh
|
|
11
|
+
python3 -m compileall -q hooks hosts bin statusline.py # byte-compile every script
|
|
12
|
+
python3 -m unittest discover -s tests # stdlib test suite
|
|
13
|
+
ruff check . # lint; config in pyproject.toml
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
[`AGENTS.md`](../AGENTS.md) gives them in that order (`AGENTS.md:20-35`), and
|
|
17
|
+
[`CONTRIBUTING.md`](../CONTRIBUTING.md) repeats the same three before a pull
|
|
18
|
+
request (`CONTRIBUTING.md:15-20`).
|
|
19
|
+
|
|
20
|
+
| Check | What it catches that the other two do not |
|
|
21
|
+
|---|---|
|
|
22
|
+
| `compileall` | A syntax error in any `.py` under `hooks/` and `hosts/`, plus `statusline.py`, without running a line of it and with no environment set up. The `bin/` CLIs are Python sources with no `.py` suffix, so only running one compiles it (`test_setup.py::SetupBase.setup`). |
|
|
23
|
+
| `unittest` | Behaviour: what a hook answers, what the [gate](glossary.md#gate) denies, what reaches the [ledger](glossary.md#ledger), what a status line renders. |
|
|
24
|
+
| `ruff` | Lint only, with the rule set pinned in `pyproject.toml:12-14` (`E4`, `E7`, `E9`, `F`; `E501` ignored). The pin exists because newer ruff releases ship a broader default and would otherwise change `ruff check .` in CI (`pyproject.toml:10-11`). One pre-existing script is exempted per-file in `pyproject.toml:19-20`. |
|
|
25
|
+
|
|
26
|
+
`ruff` is not vendored: install it as a uv tool, run `uvx ruff check .` without
|
|
27
|
+
installing it, or use the version CI installs from `requirements-dev.txt:3`
|
|
28
|
+
(`ruff==0.16.7`). There is no other linter and no type checker
|
|
29
|
+
(`AGENTS.md:44-45`).
|
|
30
|
+
|
|
31
|
+
The clarity ratchet, `bin/tezgah-docs --clarity`, counts four prose rules per
|
|
32
|
+
file in `docs/*.md` and `CHANGELOG.md`. The rules are sentences over 25 words,
|
|
33
|
+
semicolons, a short list of words with a plainer form, and passive voice. It
|
|
34
|
+
skips code fences, code spans, tables, headings and Turkish lines. Each count is held to
|
|
35
|
+
`docs/clarity-baseline.json`. A file over its baseline in any rule exits 1, and
|
|
36
|
+
a file the baseline does not list is held to 0. A count that drops lowers the
|
|
37
|
+
baseline on the next run. Only `--clarity --update` raises it.
|
|
38
|
+
|
|
39
|
+
## What the pins do not cover
|
|
40
|
+
|
|
41
|
+
A pin is a claim about what ran, not a guarantee about what will. This repository
|
|
42
|
+
has two, and both are about the language rather than about dependencies: the
|
|
43
|
+
floor `py310` (`pyproject.toml:5`) and the CI matrix that proves it
|
|
44
|
+
(`.github/workflows/ci.yml:24`). There is no dependency lockfile to pin
|
|
45
|
+
because there is no package: tezgah is a set of scripts run in place, and no
|
|
46
|
+
`[project]` or build system is declared (`pyproject.toml:1-2`). The only
|
|
47
|
+
third-party tool the checks name is ruff, at a version in
|
|
48
|
+
`requirements-dev.txt:3`.
|
|
49
|
+
|
|
50
|
+
The FineEnvs multi-harness RL tutorial carries far more machinery and says the
|
|
51
|
+
same thing out loud: its validation record installs TRL and OpenEnv from upstream
|
|
52
|
+
main, records the commit each run resolved to, states that this "is not a
|
|
53
|
+
dependency lockfile", and lists its own unchecked GPU items as pending rather
|
|
54
|
+
than implying the matrix is done. That is the shape to copy - say what is pinned,
|
|
55
|
+
say what was resolved at the time, and say what a reader should therefore not
|
|
56
|
+
conclude from either.
|
|
57
|
+
|
|
58
|
+
## Continuous integration
|
|
59
|
+
|
|
60
|
+
`.github/workflows/ci.yml` runs on every push and pull request. `release.yml`
|
|
61
|
+
calls it (`ci.yml:8`) as its `ci` job, so npm and brew publish only after CI
|
|
62
|
+
passed on the release commit. It runs five jobs. No matrix
|
|
63
|
+
cancels its other legs when one fails (`fail-fast: false`).
|
|
64
|
+
|
|
65
|
+
- `test` (`ci.yml:15-43`) on Python 3.10, 3.12, 3.13 and 3.14. 3.10 is the
|
|
66
|
+
floor the project supports. The byte-compile step exercises it rather than
|
|
67
|
+
asserts it. It byte-compiles, runs the suite with `-v`, lints with
|
|
68
|
+
ruff from `requirements-dev.txt` (`ci.yml:37`), audits the docs citations and
|
|
69
|
+
runs `TEZGAH_E2E_STRICT=1 python3 tests/e2e_plan_flow.py`.
|
|
70
|
+
- `test-sharded` (`ci.yml:48-69`) on Python 3.10 and 3.14 with node 22 (the
|
|
71
|
+
first line that loads the omp `.ts` hook without a flag):
|
|
72
|
+
`python3 tests/impacted.py --all`. It is a shadow that started 2026-10-05.
|
|
73
|
+
After four weeks it replaces the four-version `test` matrix only if it missed
|
|
74
|
+
no failure that matrix caught.
|
|
75
|
+
- `apps-e2e` (`ci.yml:71-88`) on Python 3.12 and node 20: one step,
|
|
76
|
+
`TEZGAH_E2E_STRICT=1 python3 tests/e2e_analyze_wiring.py`. It completes the
|
|
77
|
+
app-MCP handshake only - no browser, no device - so it stays deterministic;
|
|
78
|
+
strict mode makes a server that cannot start a failure rather than a skip, so
|
|
79
|
+
a broken wire cannot hide behind a skip (`e2e_analyze_wiring.py:4-12`).
|
|
80
|
+
- `artifact-install` (`ci.yml:90-128`) on Python 3.10 and 3.12: builds the
|
|
81
|
+
tarball, installs from it under a temp prefix, and runs the artifact smoke on
|
|
82
|
+
the installed tree instead of the checkout.
|
|
83
|
+
- `artifact-install-windows` (`ci.yml:130-214`) on `windows-latest`: the same
|
|
84
|
+
build, install and smoke through `packaging/install.ps1` - the twin a Windows
|
|
85
|
+
user runs - so it is the only place the Windows claim is proven. It then runs
|
|
86
|
+
the opencode plugin's path tests natively, `tezgah update --dry-run`, the
|
|
87
|
+
opencode live probe and `--uninstall` from the installed tree. Any residue
|
|
88
|
+
under the prefix fails it.
|
|
89
|
+
|
|
90
|
+
`.github/workflows/neuter.yml` runs two jobs weekly (and on demand). The first,
|
|
91
|
+
`neuter`, asks the question the suite cannot ask of itself - would a test fail
|
|
92
|
+
if a guard went?
|
|
93
|
+
`tests/neuter_matrix.py` clones HEAD once per anti-shortcut guard, reverts that
|
|
94
|
+
guard, and runs the gate's test modules; a mutant that still passes is a guard no
|
|
95
|
+
test notices, and an unmutated control that fails voids the run. The script
|
|
96
|
+
generates the gate half: one `gate-<rule>` mutant per rule `decision` refuses with.
|
|
97
|
+
It reads HEAD with the AST reader of the `--citations` rule check. Each mutant turns
|
|
98
|
+
every `return _deny(...)` of its rule into `pass` at its line span.
|
|
99
|
+
The script generates the Stop half too. Each `return ("<class>", ...)` site of
|
|
100
|
+
`_stop_block`, `_shape_block` and `_evidence_block` gets one `stop-<class>` mutant. Hand-written
|
|
101
|
+
rows cover the guards around those classes: the pass predicate, the empty-run
|
|
102
|
+
read and the "doğrulanmadı" clear. The lost call, the bookkeeping and idle-turn
|
|
103
|
+
fallbacks and the refusal row have rows too. The shortcut half is still
|
|
104
|
+
hand-written (`MUTANTS`), so a new guard there needs a row.
|
|
105
|
+
|
|
106
|
+
The second, `fuzz-shell`, runs the bash-oracle fuzzer (`tests/fuzz_shell.py`)
|
|
107
|
+
under the ubuntu runner's bash 5.x. Locally, macOS ships bash 3.2. A first step
|
|
108
|
+
fails unless `BASH_VERSINFO` is 5 or later. Then
|
|
109
|
+
`python3 tests/fuzz_shell.py --seed 1 --lines 20000 --strict` reads the lines
|
|
110
|
+
with the core readers. The same command with `--js` reads them with the
|
|
111
|
+
opencode plugin's ports. That step runs even when the core step failed.
|
|
112
|
+
`--strict` turns any disagreement class into exit 1
|
|
113
|
+
(`tests/fuzz_shell.py::main`). So a reader that misreads a bash 5 line fails
|
|
114
|
+
the leg instead of printing a count. `tests/test_packaging.py` pins the job.
|
|
115
|
+
|
|
116
|
+
The Stop rule's temporal spec (`hooks/tezgah_stopspec.py`, plan 063) has its own
|
|
117
|
+
local script, `tests/stop_spec_eval.py`. `--replay` judges plan 055's replayed
|
|
118
|
+
Stop events with both folds and reads GO 2 only on the events whose selector
|
|
119
|
+
reached the fold. `--shadow-rows` reads the live `stop_spec` rows the same way.
|
|
120
|
+
`--timing` times both folds in-process. `--stop-cost` times the whole
|
|
121
|
+
`stop_reason`, shadow on and off, on copies of the real ledgers. `--mutants`, also reached through
|
|
122
|
+
`tests/neuter_matrix.py --stop-generated`, runs seeded mutants of the formula
|
|
123
|
+
table through the in-process Stop tests of `tests/test_integrity.py`. On any
|
|
124
|
+
suite run, `TEZGAH_STOPSPEC_STRICT=1` fails the test that reached a disagreement.
|
|
125
|
+
|
|
126
|
+
The plan report (`render_table.py --acceptance --strict`) is not in CI: it reads
|
|
127
|
+
the gitignored `.tezgah/`, so on a runner it reads nothing and cannot fail. Run
|
|
128
|
+
it locally. The dsh and omp status-line scripts, `tests/e2e_tezgah_mcp.py` and
|
|
129
|
+
`tests/e2e_docker_cycle.py` are not in CI either.
|
|
130
|
+
|
|
131
|
+
## How the suite is shaped
|
|
132
|
+
|
|
133
|
+
Every test that exercises a hook runs it in a subprocess with an environment the
|
|
134
|
+
test built: a throwaway `HOME`, `TEZGAH_ROOTS` under tempfile, `PYTHONPATH` at
|
|
135
|
+
`hooks/`, so the real `~/.claude`, `~/.config/tezgah` and `~/.cache` are never
|
|
136
|
+
read or written (`tests/support.py:3-5`). Four kinds of test live under `tests/`,
|
|
137
|
+
on top of that support layer.
|
|
138
|
+
|
|
139
|
+
**Unit tests over a module.** `tests/test_paths.py:17-18` imports
|
|
140
|
+
`hooks/tezgah_paths.py` directly and drives it in-process; where a temp HOME must
|
|
141
|
+
matter it patches the module's own constants with
|
|
142
|
+
`unittest.mock.patch.multiple` (`tests/test_paths.py::ConcurrentProbe`). Reach for this only for
|
|
143
|
+
pure logic or for concurrency, which a subprocess cannot express.
|
|
144
|
+
|
|
145
|
+
**Subprocess tests with a temp HOME.** The default. `TempHome` gives the test a
|
|
146
|
+
fresh `home` and a `roots` dir, `env()`, `make_repo()`, `config()` and `touch()`
|
|
147
|
+
(`TempHome`, `tests/support.py::TempHome`); the hook or CLI is then run with `run`
|
|
148
|
+
(`tests/support.py::run`) or `run_json` (`tests/support.py::run_json`). `tests/test_codex_hook.py::CodexHook` is the smallest example.
|
|
149
|
+
|
|
150
|
+
**Probes.** `tests/_probe_*.py` are tiny scripts that call one function of a
|
|
151
|
+
shared module and print its result as JSON, so the call happens in a process
|
|
152
|
+
whose `HOME` and `TEZGAH_ROOTS` are already the test's. They exist because those
|
|
153
|
+
modules derive paths from `HOME` at import time - `hooks/tezgah_paths.py:19-32`
|
|
154
|
+
builds `CONFIG`, `CACHE` and `DEFAULT_ROOT` at module level - so importing them
|
|
155
|
+
into the test process would answer about the developer's real machine.
|
|
156
|
+
|
|
157
|
+
| Probe | Command | Entry points |
|
|
158
|
+
|---|---|---|
|
|
159
|
+
| `tests/_probe_paths.py` | argv op, no payload (`:11`) | `roots`, `root_for`, `off`, `default_root`, `config`, `off_dirs`, `cache_dir`, `which_user`, `orx_bin`, `consult_options`, `have_typesafe_key`, `codegraph_bin` |
|
|
160
|
+
| `tests/_probe_context.py` | JSON on stdin, `{"fn": ...}` (`:4-5`) | `context_for`, `health_lines`, `health_segments`, `record` |
|
|
161
|
+
| `tests/_probe_integrity.py` | JSON on stdin (`:4-6`) | `note`, `note_tool`, `note_turn`, `kinds`, `events`, `prior_calls`, `counters`, `shortcut_command`, `shortcut_edit`, `stop_reason`, `verify_command` |
|
|
162
|
+
| `tests/_probe_agents.py` | JSON on stdin (`:3-4`) | `sync_root`, `opencode_json`, `cleanup`, `detect` |
|
|
163
|
+
| `tests/_probe_gate.py` | JSON on stdin (`:4-8`) | the shared gate `decision(tool, input, cwd, session_id)`; `capture_log` plants a stub `tezgah_snapshot` in `sys.modules`, so the snapshot call site is pinned whether or not that module has landed |
|
|
164
|
+
|
|
165
|
+
A probe is invoked through `support.run`/`run_json` with its path constant
|
|
166
|
+
(`support.PROBE_PATHS`, `support.PROBE_CONTEXT`, ... in `support.py:21-26`), e.g.
|
|
167
|
+
`run_json([support.PROBE_CONTEXT], {"fn": "health_lines", "cwd": repo},
|
|
168
|
+
env=self.env())` (`test_context.py::HealthLines.test_armed_but_unused_checklist`). Nothing in `tests/_probe_*.py` is
|
|
169
|
+
collected: the name does not match discovery's `test*.py` pattern and no probe
|
|
170
|
+
defines a `TestCase`.
|
|
171
|
+
|
|
172
|
+
**End-to-end scripts.** `tests/e2e_*.py` are not collected either
|
|
173
|
+
(`e2e_omp_statusline.py:13-16`) and are run by hand. They exit 0 on `PASS` or
|
|
174
|
+
`SKIP` and 1 only on a real failure (`tests/e2e_dsh_statusline.py::main`).
|
|
175
|
+
|
|
176
|
+
| Script | Needs | Prints `SKIP` when |
|
|
177
|
+
|---|---|---|
|
|
178
|
+
| `e2e_analyze_wiring.py` | node (`npx`) (`tests/e2e_analyze_wiring.py::main`) | npx is absent; a server that cannot start is a skip, or a failure under `TEZGAH_E2E_STRICT=1` (`:10-12`) |
|
|
179
|
+
| `e2e_analyze_web.py` | `TEZGAH_E2E_APPS=1`, npx, a Playwright browser build (`:9-13`) | the opt-in env var, npx, the server start or the browser build is missing |
|
|
180
|
+
| `e2e_analyze_mobile.py` | `TEZGAH_E2E_APPS=1`, npx, a booted simulator or emulator (`:9-14`) | the same, or no running device |
|
|
181
|
+
| `e2e_dsh_statusline.py` | the `dsh` binary, Playwright, a Chromium build, a persisted session (`tests/e2e_dsh_statusline.py::run`) | any of them is missing (`tests/e2e_dsh_statusline.py::run`) |
|
|
182
|
+
| `e2e_omp_statusline.py` | the `omp` binary and the extension `tezgah-setup` installs, plus a pty (`:13-15`) | either is missing (`tests/e2e_omp_statusline.py::run`) |
|
|
183
|
+
| `e2e_docker_cycle.py` | a running Docker daemon; the image is `python:3.12-slim` unless `TEZGAH_E2E_DOCKER_IMAGE` says otherwise (`tests/e2e_docker_cycle.py::IMAGE`) | docker or its daemon is missing (`tests/e2e_docker_cycle.py::main`) |
|
|
184
|
+
|
|
185
|
+
`SKIP` is the designed answer, not a hideout: these scripts test that a wire or a
|
|
186
|
+
render works, and a missing prerequisite says nothing about the repository. Two
|
|
187
|
+
are opt-in behind `TEZGAH_E2E_APPS=1` because they do real work, so they never run
|
|
188
|
+
by surprise (`tests/e2e_analyze_web.py::main`), and the omp script starts the TUI with
|
|
189
|
+
no prompt, so the run costs no model call (`e2e_omp_statusline.py:2-4`).
|
|
190
|
+
|
|
191
|
+
## The rules a new test must satisfy
|
|
192
|
+
|
|
193
|
+
**It must fail on a plausible bug.** Where the repo turns a behaviour into a
|
|
194
|
+
string, the pin *is* the contract: the exact status segment
|
|
195
|
+
(`tests/test_statusline.py::SEGMENT`, compared at `tests/test_statusline.py::Statusline.test_claude_mode_segment`), a `tezgah-setup --status` row
|
|
196
|
+
label (`test_setup.py::StatusNamesTheHostListGap`), the opencode router line a skill's trigger
|
|
197
|
+
reaches (`test_setup.py::SkillRouterTriggers.test_core_skill_lines_carry_their_trigger`), the kill-switch labels whose deletion must
|
|
198
|
+
fail the test rather than silently disarm a rule (`test_context.py::KillSwitchEnforcement`). An
|
|
199
|
+
intentional change updates the pin in the same commit; deleting the test because
|
|
200
|
+
it is now red is the failure mode these pins exist to catch.
|
|
201
|
+
|
|
202
|
+
**Assert observable behaviour, not wiring, defaults or source text.** A test that
|
|
203
|
+
reads a file to check a copy of an implementation, or that asserts an internal
|
|
204
|
+
call was forwarded, dies at the first refactor. Where text is asserted it is
|
|
205
|
+
output the user or a host sees. The suite's own comments say the rule twice:
|
|
206
|
+
pin the behaviour, not one phrasing of it (`tests/test_skills.py::SkillStandards.test_the_bootstrap_completes_a_partial_tree_and_never_clobbers_it`), and pin a
|
|
207
|
+
rule on a synthetic input, not only on the shipped pair
|
|
208
|
+
(`test_setup.py::SkillTriggerLine`).
|
|
209
|
+
|
|
210
|
+
**Stay deterministic and isolated.** A temp HOME is the mechanism
|
|
211
|
+
(`support.py:3-5`), and importing `support` gives the test process one too, with
|
|
212
|
+
no `TEZGAH_SESSION` (`support.py:113-126`); `base_env` also points `TEZGAH_CODEGRAPH_BIN` and `TEZGAH_ORX_BIN`
|
|
213
|
+
at paths that do not exist and sets `TEZGAH_CONSULT_CLIS` empty, so the
|
|
214
|
+
machine's own graph binary, orx and agent CLIs cannot leak into an assertion
|
|
215
|
+
(`tests/support.py::base_env`). The installer suite sets
|
|
216
|
+
`TEZGAH_NO_DEPS=1` so `--install` fetches nothing (`tests/test_setup.py::SetupBase.setUp`). No test
|
|
217
|
+
reaches the network: where a provider is needed it is a loopback stub
|
|
218
|
+
(`tests/test_providers.py::Trickle.__init__`, `tests/test_consult_arena.py::ArenaCase.setUp`).
|
|
219
|
+
|
|
220
|
+
**Run inside the default discovery.** A new test is `tests/test_<thing>.py`, a
|
|
221
|
+
`unittest.TestCase`, and passes under
|
|
222
|
+
`python3 -m unittest discover -s tests` from the repository root. A check that
|
|
223
|
+
cannot run everywhere is not a test: it goes to `e2e_*.py` (needs a binary,
|
|
224
|
+
a browser or a device) or to a `_probe_*.py` helper the tests call.
|
|
225
|
+
|
|
226
|
+
## What the suite deliberately does not do
|
|
227
|
+
|
|
228
|
+
- **No coverage target and no coverage tool.** `requirements-dev.txt` pins ruff
|
|
229
|
+
and nothing else (`requirements-dev.txt:1-3`); no coverage tool is named there
|
|
230
|
+
or in `pyproject.toml`. A line count is not a check.
|
|
231
|
+
- **No fixtures framework.** Stdlib `unittest` only (`CONTRIBUTING.md:33`);
|
|
232
|
+
`tests/support.py` is the whole fixture layer, with no `conftest.py`.
|
|
233
|
+
- **No network.** Loopback stubs only, as above.
|
|
234
|
+
- **Two e2e scripts stay opt-in and local**: `e2e_analyze_web.py` and
|
|
235
|
+
`e2e_analyze_mobile.py`, behind `TEZGAH_E2E_APPS=1`, with the wiring handshake
|
|
236
|
+
as their CI substitute (`AGENTS.md:108-114`).
|
|
237
|
+
|
|
238
|
+
## Adding a test
|
|
239
|
+
|
|
240
|
+
**For a hook.** Subclass `TempHome`, make a repo, run the adapter with a payload
|
|
241
|
+
and `self.env()`, assert on its JSON output:
|
|
242
|
+
|
|
243
|
+
1. `from support import TempHome, run_json` and `import support` (`test_codex_hook.py:1-8`).
|
|
244
|
+
2. `repo = self.make_repo()`; seed any state with `self.touch(...)` / `self.config({...})`.
|
|
245
|
+
3. `out, proc = run_json([support.CODEX_HOOK], {"hook_event_name": "Stop", "cwd": repo, "session_id": "s"}, env=self.env())`.
|
|
246
|
+
4. `self.assertEqual(proc.returncode, 0, proc.stderr)` first, then assert the field you changed.
|
|
247
|
+
Which host lives where: `support.py:31-36` (`CODEX_HOOK`, `CURSOR_HOOK`, `OMP_HOOK`, `STATUSLINE`).
|
|
248
|
+
5. Reading back what the hook wrote? Use the ledger probe, not the file path
|
|
249
|
+
(`test_codex_hook.py::CodexEvidence.kinds` uses `support.PROBE_INTEGRITY` with `{"fn": "kinds"}`).
|
|
250
|
+
|
|
251
|
+
**For a CLI.** Run it with a temp environment and assert on its stdout or on the
|
|
252
|
+
tree it left. A `bin/` CLI is run as a subprocess with `sys.executable` and an
|
|
253
|
+
explicit environment (`test_setup.py::SetupBase.setup`); `SetupBase` in
|
|
254
|
+
`tests/test_setup.py::SetupBase` is the worked example for `bin/tezgah-setup` (fake host
|
|
255
|
+
dirs, `TEZGAH_NO_DEPS=1`, stdin always a pipe so the wizard cannot block on a
|
|
256
|
+
real terminal). For a plain CLI,
|
|
257
|
+
`run([support.STATUSLINE], {"cwd": repo}, env=self.envv)` is enough
|
|
258
|
+
(`test_statusline.py::Statusline.test_claude_mode_segment`).
|
|
259
|
+
|
|
260
|
+
**For a status-line change.**
|
|
261
|
+
|
|
262
|
+
1. Change the [mark](glossary.md#mark) in `hooks/tezgah_context.py` (the shared
|
|
263
|
+
builder) or in the host surface named on [status-line](status-line.md).
|
|
264
|
+
2. Update the pinned segment in `tests/test_statusline.py:17-20` - both the
|
|
265
|
+
in-roots and off-roots constants - and re-run
|
|
266
|
+
`python3 -m unittest discover -s tests -p 'test_statusline.py'`.
|
|
267
|
+
3. If the colour or the state changed, extend the `NO_COLOR` / `TEZGAH_STATUS_COLOR`
|
|
268
|
+
cases (`test_statusline.py::Statusline.test_status_color_env_off_strips_ansi`) rather than adding a new file.
|
|
269
|
+
4. The shared builder is covered through the context probe
|
|
270
|
+
(`test_context.py::HealthLines`); a mark that flips on an event belongs there.
|
|
271
|
+
5. Only the drawing is left to the real surface, and that is
|
|
272
|
+
`e2e_omp_statusline.py` / `e2e_dsh_statusline.py`, run by hand.
|
|
273
|
+
|
|
274
|
+
## Source of truth
|
|
275
|
+
|
|
276
|
+
- `AGENTS.md`
|
|
277
|
+
- `CONTRIBUTING.md`
|
|
278
|
+
- `.github/workflows/ci.yml`
|
|
279
|
+
- `pyproject.toml`, `requirements-dev.txt`
|
|
280
|
+
- `tests/support.py`
|
|
281
|
+
- `tests/_probe_paths.py`, `tests/_probe_gate.py`, `tests/_probe_context.py`,
|
|
282
|
+
`tests/_probe_integrity.py`, `tests/_probe_agents.py`
|
|
283
|
+
- `tests/e2e_analyze_wiring.py`, `tests/e2e_analyze_web.py`,
|
|
284
|
+
`tests/e2e_analyze_mobile.py`, `tests/e2e_dsh_statusline.py`,
|
|
285
|
+
`tests/e2e_omp_statusline.py`
|
|
286
|
+
- `tests/test_statusline.py`, `tests/test_codex_hook.py`, `tests/test_setup.py`,
|
|
287
|
+
`tests/test_context.py`, `tests/test_paths.py`
|
package/docs/vision.md
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# How a tezgah session is meant to run
|
|
2
|
+
|
|
3
|
+
**Who reads this, and when.** A maintainer or an agent about to change how
|
|
4
|
+
sessions behave: the check cadence, the review loop, model routing, the research
|
|
5
|
+
layer. It is the operating model those rules serve, with the measurement behind
|
|
6
|
+
each one. The rules themselves live in `hooks/tezgah_policy.py`; this page is the
|
|
7
|
+
shape they add up to, and it is written so a change to one of them can be judged
|
|
8
|
+
against the model instead of against taste.
|
|
9
|
+
|
|
10
|
+
Measured on 2026-10-01 from one session (356 active minutes, 573 tool calls) plus
|
|
11
|
+
the workspace's own records; every number below names where it came from.
|
|
12
|
+
|
|
13
|
+
## The five principles
|
|
14
|
+
|
|
15
|
+
1. **Answer first, act only inside the asked scope.** A turn whose ask is a
|
|
16
|
+
question answers it from evidence already gathered, then stops. Standing
|
|
17
|
+
authority to merge or push never fires on such a turn. (Measured: a question
|
|
18
|
+
turn ended in a merge and a push, and the user had to say the question went
|
|
19
|
+
unanswered.)
|
|
20
|
+
2. **Cost is paid once per revision, not once per commit.** Checks have tiers,
|
|
21
|
+
and the biggest one runs once on the final tree (`hooks/tezgah_policy.py::CORE`). (Measured: 11 serial suite
|
|
22
|
+
runs, 106 minutes, 10 of them green confirmations, in one session - the rule
|
|
23
|
+
"run the full suite once, on the final tree" was already written down and
|
|
24
|
+
`AGENTS.md` said "before every commit".)
|
|
25
|
+
3. **A review loop reads every fix.** A round that confirms a defect gets a
|
|
26
|
+
round over the fix. The loop ends when a round confirms none
|
|
27
|
+
(`hooks/tezgah_agents.py::_reviewer_body`). The same defect family three times means the
|
|
28
|
+
design changes. (Measured: two of four severe defects in one internal plan came from
|
|
29
|
+
fixes, after round two.)
|
|
30
|
+
4. **Doubt lowers nothing and hides nothing.** An unverifiable check never
|
|
31
|
+
downgrades a finding, an unknown criterion never relaxes a cap, and a line
|
|
32
|
+
whose own criteria are unmet is reported as unanswered rather than concluded.
|
|
33
|
+
(Measured: `close --limit` accepted any string; 4 of 11 sampled research lines
|
|
34
|
+
concluded with the ask unanswered.)
|
|
35
|
+
5. **Do not re-verify a revision that has not changed, and do not re-ask a
|
|
36
|
+
question that was answered.** Repeat guards key on the tree, not on the
|
|
37
|
+
command text; a green check is evidence until the tree moves.
|
|
38
|
+
|
|
39
|
+
## The tiers, and what each costs (measured)
|
|
40
|
+
|
|
41
|
+
| Tier | Command | Wall time |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| edit loop | `tests/impacted.py --run <changed paths>` | 0.1-95 s (integrity+gate: 18 modules, 93.8 s) |
|
|
44
|
+
| pre-commit | that set + compileall + ruff (+ `--citations` when hooks/ or bin/ moved) | +~5 s |
|
|
45
|
+
| pre-merge, once | `tests/impacted.py --all` + the two e2e scripts | 103.5 s (8 shards; 566.9 s serial) |
|
|
46
|
+
| CI | the same, on the matrix in `.github/workflows/ci.yml` | unchanged |
|
|
47
|
+
|
|
48
|
+
A path the map does not know runs everything (`tests/impacted.py::modules_for`): `tests/support.py`,
|
|
49
|
+
`hooks/tezgah_paths.py` and anything new. `tests/test_impacted.py` refuses a
|
|
50
|
+
change that would silently run nothing.
|
|
51
|
+
|
|
52
|
+
## Model routing
|
|
53
|
+
|
|
54
|
+
Every omp agent gets a **cross-family fallback chain** (`hooks/tezgah_models.py::_chain`, over `hooks/tezgah_models.py::funded_families`): the mode's family first,
|
|
55
|
+
then every other family this machine holds a credential for. One pin per agent
|
|
56
|
+
made one provider's 429 every subagent's failure, because the account is shared
|
|
57
|
+
with the main thread (measured: 24 of 26 post-routing 429s hit a subagent's first
|
|
58
|
+
request, all on one Opus account; four reviews and three implementation agents
|
|
59
|
+
died on it in one day). A family whose credential cannot be detected is left out
|
|
60
|
+
of the chain, never guessed in. The main thread's own model, and the provider-keyed
|
|
61
|
+
chains, stay the user's settings - tezgah writes only the keys it owns.
|
|
62
|
+
|
|
63
|
+
What tezgah cannot fix from inside: a provider that stalls on a very large
|
|
64
|
+
context (`OpenAI completions stream stalled`, five minutes without an event on a
|
|
65
|
+
458k-token request - a DeepSeek-side stall, with no hook blocking the loop), and a
|
|
66
|
+
quota shared by every session on the machine. Those are settings and a reminder,
|
|
67
|
+
not a rule.
|
|
68
|
+
|
|
69
|
+
## The research layer
|
|
70
|
+
|
|
71
|
+
A line carries the user's ask verbatim, a tier (`quick` gets no line at all, `hooks/tezgah_research.py::ask_problems`), and
|
|
72
|
+
one success criterion per part of the ask, written before any experiment. It ends
|
|
73
|
+
with a verdict per criterion; a criterion that is `not-met` is a result, but it is
|
|
74
|
+
recorded, and an unanswered line stays visible in `status` instead of disappearing
|
|
75
|
+
into `done/`. Lines live under `research/open/` and `research/done/`, the way plans do, resolved
|
|
76
|
+
by one reader (`hooks/tezgah_research.py::line_dir`); an unmet criterion keeps a line
|
|
77
|
+
listed as unanswered (`hooks/tezgah_research.py::unanswered`).
|
|
78
|
+
|
|
79
|
+
## What is measured to know the operating model holds
|
|
80
|
+
|
|
81
|
+
These are measures of how a session runs, not of task outcomes.
|
|
82
|
+
|
|
83
|
+
- wall time per session and the share spent waiting;
|
|
84
|
+
- serial full-suite runs per session (the count, not the length, is the cost);
|
|
85
|
+
- review rounds per change;
|
|
86
|
+
- subagent spawn failures by model;
|
|
87
|
+
- research lines concluded with every criterion met, against lines concluded
|
|
88
|
+
unanswered;
|
|
89
|
+
- `status`'s own count of lines the layout has not migrated.
|
|
90
|
+
|
|
91
|
+
## What it does not claim
|
|
92
|
+
|
|
93
|
+
The model above describes mechanisms: what a session is told, what the gate
|
|
94
|
+
refuses, what the ledger records. It does not claim that an agent under tezgah
|
|
95
|
+
cheats less, finishes more tasks or reports more honestly. A paired on/off
|
|
96
|
+
experiment in October 2026 tested that and found no measurable effect. It ran
|
|
97
|
+
DeepSeek V4.1 Flash on omp, bare against a full install. On ImpossibleBench's
|
|
98
|
+
conflicting SWE-bench split, the agent cheated in 0 of 132 runs with tezgah and
|
|
99
|
+
1 of 131 without. The model barely cheated in either arm, so the experiment had
|
|
100
|
+
no headroom. Hand labels of final messages on those impossible tasks found
|
|
101
|
+
false done claims in 3 of 30 runs with tezgah and 6 of 30 without. The CI of
|
|
102
|
+
that difference includes 0. The Stop rule's claim reader
|
|
103
|
+
flagged far more runs than that. On Turkish replies it counts `doğrulandı`
|
|
104
|
+
(verified) on a partial fix as a claim, a recorded weakness not yet fixed. The
|
|
105
|
+
numbers, the per-task counts and the instrument flaws are in
|
|
106
|
+
[the results bundle](results/paired-outcome-2026-10.md).
|
|
107
|
+
|
|
108
|
+
## Source of truth
|
|
109
|
+
|
|
110
|
+
- `hooks/tezgah_policy.py` - the rules this page describes.
|
|
111
|
+
- `hooks/tezgah_integrity.py`, `hooks/tezgah_gate.py` - the gate and the ledger.
|
|
112
|
+
- `hooks/tezgah_models.py`, `docs/models.md` - the routing table and the chains.
|
|
113
|
+
- `hooks/tezgah_research.py`, `docs/research.md` - the research layer.
|
|
114
|
+
- `tests/impacted.py`, `docs/testing.md`, `AGENTS.md` - the check tiers.
|
|
115
|
+
- `docs/results/paired-outcome-2026-10.md` - the paired outcome experiment.
|
|
116
|
+
- The four internal diagnosis reports behind the numbers (session scratch,
|
|
117
|
+
not published).
|
package/hooks/hooks.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hooks": {
|
|
3
|
+
"SessionStart": [
|
|
4
|
+
{ "hooks": [ { "type": "command", "command": "TEZGAH_CORE_IN_FILE=1 \"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-auto-init.py\"", "timeout": 10 } ] }
|
|
5
|
+
],
|
|
6
|
+
"SubagentStart": [
|
|
7
|
+
{ "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-auto-init.py\"", "timeout": 10 } ] }
|
|
8
|
+
],
|
|
9
|
+
"PostCompact": [
|
|
10
|
+
{ "hooks": [ { "type": "command", "command": "TEZGAH_CORE_IN_FILE=1 \"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-auto-init.py\"", "timeout": 10 } ] }
|
|
11
|
+
],
|
|
12
|
+
"UserPromptSubmit": [
|
|
13
|
+
{ "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-auto-init.py\"", "timeout": 10 } ] }
|
|
14
|
+
],
|
|
15
|
+
"PreToolUse": [
|
|
16
|
+
{ "matcher": "Agent|agent|Task|task|Grep|grep|Bash|bash|PowerShell|pwsh|Shell|shell|subagent|Edit|Write|MultiEdit|NotebookEdit", "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-pretooluse.py\"", "timeout": 5 } ] },
|
|
17
|
+
{ "matcher": "^mcp__(?:.*[^A-Za-z0-9])?(?:append|cancel|clear|click|close|comment|commit|copy|create|delete|deploy|drag|edit|email|evaluate|exec|execute|fill|insert|install|kill|launch|merge|message|mkdir|move|navigate|notify|patch|pause|post|press|print|publish|push|put|release|remove|rename|replace|reply|resume|review|run|save|send|set|share|skip|start|stop|submit|swipe|tag|tap|terminate|type|uninstall|update|upload|write)(?:[^A-Za-z0-9].*)?$", "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-pretooluse.py\"", "timeout": 5 } ] }
|
|
18
|
+
],
|
|
19
|
+
"PostToolUse": [
|
|
20
|
+
{ "matcher": "Edit|edit|Write|write|MultiEdit|NotebookEdit|Bash|bash|PowerShell|pwsh|str_replace_editor|WebFetch|WebSearch|web_fetch|web_search|fetch|mcp__.*", "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-posttooluse.py\"", "timeout": 5 } ] },
|
|
21
|
+
{ "matcher": "Agent|Task|Skill", "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-posttooluse.py\"", "timeout": 5 } ] }
|
|
22
|
+
],
|
|
23
|
+
"PostToolUseFailure": [
|
|
24
|
+
{ "matcher": "Edit|edit|Write|write|MultiEdit|NotebookEdit|Bash|bash|PowerShell|pwsh|str_replace_editor|WebFetch|WebSearch|web_fetch|web_search|fetch|mcp__.*", "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-posttooluse.py\"", "timeout": 5 } ] }
|
|
25
|
+
],
|
|
26
|
+
"Stop": [
|
|
27
|
+
{ "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-stop.py\"", "timeout": 5 } ] }
|
|
28
|
+
],
|
|
29
|
+
"SubagentStop": [
|
|
30
|
+
{ "hooks": [ { "type": "command", "command": "\"${TEZGAH_PYTHON:-python3}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/projects-stop.py\"", "timeout": 5 } ] }
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Claude Code hook: SessionStart, UserPromptSubmit, SubagentStart, PostCompact.
|
|
3
|
+
|
|
4
|
+
Emits the shared tezgah context (hooks/tezgah_context.py) for the session's
|
|
5
|
+
cwd when it resolves inside a configured root, and prints nothing outside them.
|
|
6
|
+
This file is only the Claude envelope; the contract itself lives in the core so
|
|
7
|
+
Codex, Cursor, opencode, dsh and omp inject the exact same text.
|
|
8
|
+
"""
|
|
9
|
+
import json
|
|
10
|
+
import os
|
|
11
|
+
import sys
|
|
12
|
+
|
|
13
|
+
sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
|
|
14
|
+
from tezgah_guard import attest_session, import_failed, safe # noqa: E402
|
|
15
|
+
try:
|
|
16
|
+
from tezgah_context import context_for, record # noqa: E402
|
|
17
|
+
from tezgah_paths import HOST_DIRS # noqa: E402
|
|
18
|
+
except Exception as exc:
|
|
19
|
+
import_failed(exc)
|
|
20
|
+
|
|
21
|
+
EVENTS = {
|
|
22
|
+
"SessionStart": "session_start",
|
|
23
|
+
"UserPromptSubmit": "user_prompt",
|
|
24
|
+
"SubagentStart": "subagent_start",
|
|
25
|
+
"PostCompact": "post_compact",
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
# PostCompact is observed, not answered. A real compaction on Claude Code
|
|
29
|
+
# 2.1.283 (2026-09-30) showed what the host does with an envelope on
|
|
30
|
+
# this event: it REJECTS it - "Hook JSON output validation failed -
|
|
31
|
+
# hookSpecificOutput.hookEventName: expected one of "PreToolUse" |
|
|
32
|
+
# "UserPromptSubmit" | ... | "SessionStart" | ..." - reports the hook as failed,
|
|
33
|
+
# and prints the raw JSON, context text included, into the transcript the model
|
|
34
|
+
# reads next. The post-compaction context reaches the model through SessionStart,
|
|
35
|
+
# which fires again as `SessionStart:compact` and whose additionalContext was
|
|
36
|
+
# delivered in the same run. So on PostCompact this hook still builds the block -
|
|
37
|
+
# that is where `context_for` records the compaction (remember_compaction) - and
|
|
38
|
+
# prints nothing. Codex answers PostCompact from hosts/codex/hook.py, which
|
|
39
|
+
# prints no context on it either, and dsh's bridge does not carry the event.
|
|
40
|
+
|
|
41
|
+
# Claude's global memory file, where install_claude writes the always-on core as
|
|
42
|
+
# a managed block: the file Claude reads into every session, so the core is
|
|
43
|
+
# already in the session's instructions.
|
|
44
|
+
CORE_IN_FILE = os.path.join(HOST_DIRS["claude"], "CLAUDE.md")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def core_is_in_a_file():
|
|
48
|
+
"""True when the core reaches this session from a file the host keeps, so
|
|
49
|
+
this hook must not pay for the contract a second time in its one message.
|
|
50
|
+
|
|
51
|
+
The host declares it in its manifest (`TEZGAH_CORE_IN_FILE`, the same shape
|
|
52
|
+
as the dsh rows' `TEZGAH_CALL_OUTCOME`) rather than this file guessing from
|
|
53
|
+
the payload: dsh runs this very script through its claude-code bridge and has
|
|
54
|
+
no such file, so its session still gets the core from here. The file is read
|
|
55
|
+
as well as assumed - a user who deleted it falls back to the hook."""
|
|
56
|
+
if os.environ.get("TEZGAH_CORE_IN_FILE") != "1":
|
|
57
|
+
return False
|
|
58
|
+
try:
|
|
59
|
+
with open(CORE_IN_FILE, encoding="utf-8", errors="ignore") as fh:
|
|
60
|
+
return "<!-- tezgah:start" in fh.read()
|
|
61
|
+
except OSError:
|
|
62
|
+
return False
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def main():
|
|
66
|
+
try:
|
|
67
|
+
payload = json.load(sys.stdin)
|
|
68
|
+
except Exception:
|
|
69
|
+
payload = {}
|
|
70
|
+
event = payload.get("hook_event_name") or "SessionStart"
|
|
71
|
+
cwd = payload.get("cwd") or os.environ.get("CLAUDE_PROJECT_DIR") or os.getcwd()
|
|
72
|
+
if event == "SubagentStart":
|
|
73
|
+
# The status line's orch mark. This file is the only SubagentStart hook
|
|
74
|
+
# tezgah wires, and dsh (which runs it too) has no transcript to derive
|
|
75
|
+
# the kind from, so the store is the only channel its line has.
|
|
76
|
+
safe(payload.get("session_id"), record, payload.get("session_id"), "orch")
|
|
77
|
+
if event == "SessionStart":
|
|
78
|
+
# Claude and dsh run this one script; Claude's manifest declares
|
|
79
|
+
# TEZGAH_CORE_IN_FILE on SessionStart and dsh's does not, so the flag
|
|
80
|
+
# names whose entries to attest. ponytail: a Claude manifest edited to
|
|
81
|
+
# drop the flag is attested as dsh - and still reads as drift there.
|
|
82
|
+
sid = payload.get("session_id")
|
|
83
|
+
host = "claude" if os.environ.get("TEZGAH_CORE_IN_FILE") == "1" else "dsh"
|
|
84
|
+
safe(sid, attest_session, host, sid, cwd)
|
|
85
|
+
text = safe(payload.get("session_id"), context_for,
|
|
86
|
+
EVENTS.get(event, "session_start"), cwd, payload,
|
|
87
|
+
# the brief is a subagent's own text, never the file's; every
|
|
88
|
+
# other event drops the core when the host's file carries it
|
|
89
|
+
with_core=(event == "SubagentStart" or not core_is_in_a_file()))
|
|
90
|
+
if text and event != "PostCompact":
|
|
91
|
+
json.dump({"hookSpecificOutput": {
|
|
92
|
+
"hookEventName": event,
|
|
93
|
+
"additionalContext": text,
|
|
94
|
+
}}, sys.stdout)
|
|
95
|
+
sys.exit(0)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
main()
|