Skip to main content

fix-bug

Debug and fix bugs in Syncpack using scientific debugging methodology. Use when a test is failing, unexpected behaviour occurs, or investigating issues. Covers hypothesis-driven debugging and TDD-based fixes.

소스 정보

저장소
JamieMason/syncpack
최근 소스 활동
2026년 3월 21일 20:40
감지된 SKILL.md 언어
영어
스타
2,101
포크
74

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
fix-bug
description
Debug and fix bugs in Syncpack using scientific debugging methodology. Use when a test is failing, unexpected behaviour occurs, or investigating issues. Covers hypothesis-driven debugging and TDD-based fixes.
# Fix Bug Guide for debugging and fixing bugs in Syncpack. ## Scientific Debugging Workflow 1. **Observe** — Understand the symptom precisely 2. **Hypothesise** — Form a theory about the root cause 3. **Experiment** — Test the hypothesis with targeted changes 4. **Validate** — Confirm the fix with tests 5. **Verify** — Run full test suite ## Step 1: Observe Gather information before changing code: ```bash # Run the failing test with output cargo test test_name -- --nocapture # Run with backtrace RUST_BACKTRACE=1 cargo test test_name # Test against fixture cd fixtures/fluid-framework cargo run -- lint ``` Questions to answer: - What is the exact error message? - What input triggers it? - What is the expected vs actual behaviour? ## Step 2: Hypothesise Common root causes by symptom: | Symptom | Likely Cause | | -------------------- | ------------------------------------------------------- | | State is `Unknown` | `visit_packages` not called or instance skipped | | Wrong state assigned | Validation logic order, earlier check overriding | | Instance not found | Package/dependency name mismatch, location format | | Command not running | Missing registration in cli.rs, main.rs, or commands.rs | | Panic/unwrap failure | Unexpected None or Err value | ## Step 3: Experiment Add targeted debug output: ```rust use log::debug; debug!("Instance: {:#?}", instance); debug!("State before: {:?}", instance.state.borrow()); ``` Search for related code: ```bash # Find where state is assigned ast-grep -p 'InstanceState::fixable' src/visit_packages/ # Find similar patterns ast-grep -p 'PATTERN' src/ ``` ## Step 4: Validate Write a failing test FIRST (TDD): ```rust #[test] fn reproduces_the_bug() { let ctx = TestBuilder::new() .with_packages(vec![/* minimal reproduction */]) .build_and_visit_packages(); // Assert expected behaviour (will fail initially) } ``` Then fix the code until the test passes. ## Step 5: Verify ```bash just test # All tests pass cargo clippy # No warnings ``` ## Where to Look ### By component | Issue with... | Check... | | ---------------- | ---------------------------------------- | | CLI parsing | `src/cli.rs` | | Config loading | `src/config.rs`, `src/rcfile.rs` | | Package reading | `src/packages.rs`, `src/package_json.rs` | | State assignment | `src/visit_packages/*.rs` | | Command output | `src/commands/*.rs`, `src/commands/ui/` | | Version parsing | `src/specifier/*.rs` | ### By phase | Phase | What happens | Files | | ------- | ---------------------------------------- | ------------------------------------------ | | Create | Read config, packages, collect instances | `context.rs`, `packages.rs` | | Inspect | Assign InstanceState | `visit_packages.rs`, `visit_packages/*.rs` | | Run | Process instances, output/write | `commands/*.rs` | ## Common Fixes ### Instance state not being assigned Check: 1. Is the instance's version group variant handled in `visit_packages.rs`? 2. Is there an early return skipping this instance? 3. Is another validation assigning a state first? ### Test assertion failing Check: 1. Is `build_and_visit_packages()` called (not just `build()`)? 2. Is the location string format correct? (`"{dep} in {location} of {package}"`) 3. Are there multiple instances of the same dependency? ### Command not found Verify registration in all three places: 1. `src/cli.rs` — `Subcommand` enum 2. `src/main.rs` — match arm 3. `src/commands.rs` — module declaration ## Debugging Tips - **Isolate** — Create minimal reproduction - **Binary search** — Comment out code to narrow down - **Print early** — Add debug output before suspected area - **Check order** — Validation order matters (first match wins) - **Read tests** — Existing tests show expected behaviour ## Anti-Patterns ❌ Changing code without understanding the cause ❌ Removing code just to make tests pass ❌ Fixing symptoms instead of root cause ❌ Skipping the test-first step
GitHub에서 보기