CHANGES:
1. **Fixed 9 PDF Scraper Test Failures:**
- Added .get() safety for missing page keys (headings, text, code_blocks, images)
- Supported both 'code_samples' and 'code_blocks' keys for compatibility
- Fixed extract_pdf() to raise RuntimeError on failure (tests expect exception)
- Added image saving functionality to _generate_reference_file()
- Updated all test methods to override skill_dir with temp directory
- Fixed categorization to handle pre-categorized test data
2. **Fixed 25 MCP Test Skips:**
- Renamed mcp/ directory to skill_seeker_mcp/ to avoid shadowing external mcp package
- Updated all imports in tests/test_mcp_server.py
- Simplified skill_seeker_mcp/server.py import logic (no more shadowing workarounds)
- Updated tests/test_package_structure.py to reference skill_seeker_mcp
3. **Test Results:**
- ✅ 297 tests passing (100%)
- ✅ 0 tests skipped
- ✅ 0 tests failed
- All test categories passing:
* 23 package structure tests
* 18 PDF scraper tests
* 67 PDF extractor/advanced tests
* 25 MCP server tests
* 164 other core tests
BREAKING CHANGE: MCP server directory renamed from `mcp/` to `skill_seeker_mcp/`
📦 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
PROBLEM:
- Local mcp/ directory shadows installed mcp package from PyPI
- Tests couldn't import external mcp.server.Server and mcp.types classes
- MCP server tests (67 tests) were blocked
SOLUTION:
1. Updated mcp/server.py to check sys.modules for pre-imported MCP classes
- Allows tests to import external MCP first, then import our server module
- Falls back to regular import if MCP not pre-imported
- No longer crashes during test collection
2. Updated tests/test_mcp_server.py to import external MCP from /tmp
- Temporarily changes to /tmp directory before importing external mcp
- Avoids local mcp/ directory shadowing in sys.path
- Restores original directory after import
RESULTS:
- Test collection: 297 tests collected (was 272)
- Passing: 263 tests (was 205) - +58 tests
- Skipped: 25 MCP tests (intentional, due to shadowing)
- Failed: 9 PDF scraper tests (pre-existing bugs, not Phase 0 related)
- All PDF tests now running (67 PDF tests passing)
TEST BREAKDOWN:
✅ 205 core tests passing
✅ 67 PDF tests passing (PyMuPDF installed)
✅ 23 package structure tests passing
⏭️ 25 MCP server tests skipped (architectural issue - mcp/ naming conflict)
❌ 9 PDF scraper tests failing (pre-existing bugs in cli/pdf_scraper.py)
LONG-TERM FIX:
Rename mcp/ directory to skill_seeker_mcp/ to eliminate shadowing conflict
(Will enable all 25 MCP tests to run)
📦 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
🐛 Fixes:
- Fix mcp package shadowing by importing external MCP before sys.path modification
- Update mcp/server.py to avoid shadowing installed mcp package
- Update tests/test_mcp_server.py import order
✅ Tests Added:
- Add tests/test_package_structure.py with 23 comprehensive tests
- Test cli package structure and imports
- Test mcp package structure and imports
- Test backwards compatibility
- All package structure tests passing ✅📊 Test Results:
- 205 tests passed ✅
- 67 tests skipped (PDF features, PyMuPDF not installed)
- 23 new package structure tests added
- Total: 272 tests (excluding test_mcp_server.py which needs more work)
⚠️ Known Issue:
- test_mcp_server.py still has import issues (67 tests)
- Will be fixed in next commit
- Main functionality tests all passing
Impact: Package structure working, 75% of tests passing
Adds 'tests-complete' summary job that:
- Provides single status check for branch protection
- Only passes when all matrix tests succeed
- Fixes "Tests" check always showing as pending
- Resolves PR merge blocking issue
This ensures PRs can auto-merge once all 5 matrix jobs pass.
Adds PDF Advanced Features (v1.2.0)
This merge brings Priority 2 & 3 PDF features:
- OCR support for scanned PDFs
- Password-protected PDF support
- Complex table extraction
- Parallel page processing (3x faster)
- Intelligent caching (50% faster re-runs)
All 142 tests passing (100%)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add PDF support to README.md Key Features
- Add PDF CLI example (Option 3)
- Update MCP README from 9 to 10 tools
- Add scrape_pdf tool documentation
- Add PDF workflow example
- Update tool descriptions
All main documentation now reflects PDF functionality
Changed:
- tests.yml: Run on 'development' instead of 'dev'
- Triggers on push to: main, development
- Triggers on PRs to: main, development
This ensures:
✅ All PRs to development run tests
✅ Pushes to development run tests
✅ Branch protection can require 'Tests' check
✅ CI works with new two-branch workflow
Related: Two-branch workflow setup
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Changes:
1. Created 'development' branch as integration branch
2. Set 'development' as default branch for all PRs
3. Protected both branches with appropriate rules
Branch Protection:
- main: Requires tests + 1 review, only maintainer merges
- development: Requires tests, open for all contributor PRs
Updated CONTRIBUTING.md:
- Added comprehensive Branch Workflow section
- Updated all examples to use 'development' branch
- Clear visual diagram of branch structure
- Step-by-step workflow example
Workflow:
- Contributors: Create feature branches from 'development'
- PRs: Always target 'development' (not main)
- Releases: Maintainer merges 'development' → 'main'
This ensures:
✅ main always stable and production-ready
✅ development integrates all ongoing work
✅ Clear separation between integration and production
✅ Only maintainer controls production releases
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Problem:
- Release workflow failing with "Resource not accessible by integration"
- Missing permissions for GITHUB_TOKEN to create releases
- Workflow tried to create releases that already exist manually
Fix:
1. Added `permissions: contents: write` at workflow level
- Grants GITHUB_TOKEN permission to create/edit releases
- Required for softprops/action-gh-release@v1
2. Added release existence check before creation
- Prevents errors when release already exists
- Skips creation gracefully with informative message
- Useful for manually created releases (like v1.1.0)
Changes:
- Line 8-9: Added permissions section
- Line 48-57: Check if release exists with gh CLI
- Line 59-60: Only create if release doesn't exist
- Line 69-73: Skip message when release already exists
This allows:
- Automatic release creation on new tags
- Manual release creation without workflow conflicts
- Proper error handling and user feedback
Related: GitHub Actions permissions model
https://docs.github.com/en/actions/security-guides/automatic-token-authentication🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Problem:
- 2 tests in test_upload_skill.py failing intermittently in CI
- Tests passed individually but failed when run after test_parallel_scraping.py
- Tests failed with exit code 2 instead of 0 when running `--help`
Root Cause:
- test_parallel_scraping.py calls `os.chdir(tmpdir)` to create temporary test directories
- These directory changes persisted across test classes
- When upload_skill CLI tests ran subprocess with path 'cli/upload_skill.py',
the relative path was broken because cwd was still in the temp directory
- Result: subprocess couldn't find the script, returned exit code 2
Fix:
- Added setUp/tearDown to all 6 test classes in test_parallel_scraping.py
- setUp saves original cwd with `self.original_cwd = os.getcwd()`
- tearDown restores it with `os.chdir(self.original_cwd)`
- Ensures tests don't pollute working directory state for subsequent tests
Impact:
- All 158 tests now pass consistently
- No more flaky failures in CI
- Test isolation properly maintained
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added ansible-core.json config to available presets list in:
- README.md: Added to preset table and usage examples
- CLAUDE.md: Added to production configs list with details
Changes:
- Total configs: 11 → 12
- New category: DevOps & Automation
- Reorganized config list for better categorization
Related: PR #147