Skip to main content

veto-implement-feature

Implement a feature or fix using TDD workflow in the veto Rust codebase. Use this skill whenever the user asks to: add a new rule category, implement a CLI subcommand, add an auth method, modify the risk engine, add a new integration (setup command), or write Rust code for veto. This skill enforces test-first development and follows veto's module conventions. If the request involves writing Rust code and tests, use this skill.

Informações da origem

Repositório
runkids/veto
Última atividade na origem
7 de março de 2026 às 08:53
Idioma detectado do SKILL.md
inglês
Estrelas
7
Forks
0

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
veto-implement-feature
description
Implement a feature or fix using TDD workflow in the veto Rust codebase. Use this skill whenever the user asks to: add a new rule category, implement a CLI subcommand, add an auth method, modify the risk engine, add a new integration (setup command), or write Rust code for veto. This skill enforces test-first development and follows veto's module conventions. If the request involves writing Rust code and tests, use this skill.
argument-hint
[spec-file-path | feature description]
targets
["claude"]
Implement a feature following TDD workflow. $ARGUMENTS is a spec file path or a plain-text feature description. **Scope**: This skill writes Rust code and tests. It does NOT update docs (update README manually if needed). ## Workflow ### Step 1: Understand Requirements If $ARGUMENTS is a file path: 1. Read the spec file 2. Extract acceptance criteria and edge cases 3. Identify affected modules If $ARGUMENTS is a description: 1. Search existing code for related functionality 2. Identify the right module to extend 3. Confirm scope with user before proceeding ### Step 2: Identify Affected Files Map the feature to veto's module structure: ``` src/ ├── main.rs # Entry point ├── cli/mod.rs # Clap CLI definitions ├── config/ │ ├── mod.rs # Config module root │ ├── types.rs # Config structs │ └── loader.rs # Config file loading ├── rules/ │ ├── mod.rs # Rules module root │ ├── types.rs # Rule, Rules, Whitelist structs │ ├── engine.rs # Risk evaluation engine │ └── defaults.rs # Built-in rule patterns ├── executor/ │ ├── mod.rs # Command execution │ └── shell.rs # Shell interaction ├── auth/ │ ├── mod.rs # Auth module root │ ├── manager.rs # Auth method dispatch │ ├── pin.rs # PIN auth │ ├── totp.rs # TOTP auth │ ├── touchid.rs # macOS Touch ID │ ├── telegram.rs # Telegram bot auth │ ├── keyring.rs # System keychain │ ├── challenge.rs # Challenge generation │ ├── confirm.rs # Confirmation prompts │ └── dialog.rs # Dialog-based auth ├── commands/ │ ├── mod.rs # Command dispatch │ ├── init.rs # veto init │ ├── doctor.rs # veto doctor │ ├── setup.rs # veto setup (integrations) │ ├── shell.rs # veto shell │ ├── auth.rs # veto auth │ ├── upgrade.rs # veto upgrade │ ├── log.rs # veto log │ └── allow.rs # veto allow └── audit.rs # Audit logging ``` ### Step 3: Write Failing Tests First (RED) Write tests in the relevant module's `#[cfg(test)] mod tests`: ```rust #[cfg(test)] mod tests { use super::*; #[test] fn test_feature_basic_case() { // Setup let rules = default_rules(); let engine = RuleEngine::new(&rules); // Act let result = engine.evaluate("some command"); // Assert assert_eq!(result.risk_level, RiskLevel::Critical); } } ``` For integration tests, use `assert_cmd` in `tests/`: ```rust use assert_cmd::Command; use predicates::prelude::*; #[test] fn test_check_blocks_dangerous_command() { Command::cargo_bin("veto") .unwrap() .args(&["check", "rm -rf /"]) .assert() .failure() .stderr(predicate::str::contains("CRITICAL")); } ``` Verify tests fail: ```bash cargo test test_feature_basic_case ``` ### Step 4: Implement (GREEN) Write minimal code to make tests pass: 1. Follow existing patterns in each module 2. Use `colored` crate for terminal output 3. Use `thiserror` for error types 4. Register new CLI commands in `cli/mod.rs` (Clap derive) 5. Wire command dispatch in `commands/mod.rs` Key patterns: - **Rules**: Add patterns to `defaults.rs`, types to `types.rs`, logic to `engine.rs` - **Auth**: Add method to `auth/`, register in `manager.rs` - **Commands**: Add handler in `commands/`, register in `cli/mod.rs` - **Config**: Add fields to `types.rs`, parsing to `loader.rs` Verify tests pass: ```bash cargo test ``` ### Step 5: Quality Check ```bash make check # cargo fmt --check + cargo clippy -D warnings + cargo test ``` Fix any issues before proceeding. ### Step 6: E2E Verification If the feature affects CLI-visible behavior: 1. Update `scripts/e2e.sh` with new test cases 2. Run `make e2e` to verify ### Step 7: Report 1. List all created/modified files 2. Confirm each acceptance criterion is met with test evidence 3. Show `cargo test` output as proof ## Rules - **Test-first** — always write failing test before implementation - **Minimal code** — only write what's needed to pass tests - **Follow patterns** — match existing code style in each module - **3-strike rule** — if a test fails 3 times after fixes, stop and report - **No speculative features** — only implement what's in the spec/description - **Verify with `make check`** — must pass fmt, clippy, and all tests
Ver no GitHub