Commit 62b18df
fix: GitHub Pages configuration and linting improvements (#9)
* chore: remove mcp.json from version control
* fix: correct test paths for new .specfact structure
- Fix test_compare_with_smart_defaults: remove duplicate mkdir for plans directory
- Fix test_compare_output_to_specfact_reports: move auto-derived plan to .specfact/plans/ instead of .specfact/reports/brownfield/
- Fix test_team_collaboration_workflow: use correct pattern 'report-*.md' for comparison reports and check auto-derived plans in .specfact/plans/
* fix: update .gitignore
* fix: correct pre-merge check to only flag root-level temporary files
- Fix regex to only match temporary files at project root (not in tests/)
- Patterns match .gitignore: /test_*.py, /debug_*.py, /trigger_*.py, /temp_*.py
- Use grep -v '/' to ensure files are at root level (no subdirectories)
- Also check for analysis artifacts at root
- Exclude legitimate test files in tests/ directory
* fix: add conftest.py to fix tools imports in tests
- Create tests/conftest.py to add project root to sys.path
- Fixes ModuleNotFoundError for 'tools' module in Python 3.11 tests
- Update test_smart_test_coverage.py to use consistent sys.path approach
- Required because pytest --import-mode=importlib doesn't respect pythonpath
during test collection
* fix: install specfact-cli from local source in specfact-gate workflow
- Change from 'pip install specfact-cli' (PyPI) to 'pip install -e .' (local source)
- Required because package is not yet published to PyPI
- Matches approach used in pr-orchestrator.yml workflow
- Install hatch first to ensure proper environment setup
* refactor: combine hatch installation and CLI setup steps
- Combine 'Install dependencies' and 'Install SpecFact CLI from source' steps
- Ensures hatch is available before use
- Matches pattern used in pr-orchestrator.yml cli-validation job
- More efficient and clearer workflow structure
* fix: make repro main command the default callback
- Replace @app.command() with @app.callback(invoke_without_command=True)
- Allows 'specfact repro --verbose --budget 90' without requiring a subcommand
- Fixes workflow error: 'No such option: --verbose'
- main() now runs when repro is called without a subcommand
* fix: remove invalid -k filter from Python 3.11 compatibility tests
- Remove -k 'contract' filter that was deselecting all tests (exit code 5)
- Run unit and integration tests instead for Python 3.11 compatibility check
- Skip E2E tests to keep compatibility check fast
- Tests are advisory (don't fail build) to allow gradual compatibility work
* fix: sync __version__ with pyproject.toml (0.4.0)
- Update __version__ in __init__.py to match pyproject.toml version
- Ensures version consistency across package metadata
* fix: exclude tests, docs, tools from PyPI package
- Add [tool.hatch.build.targets.sdist] configuration
- Include only essential files: src/, README.md, LICENSE.md, pyproject.toml
- Exclude development files: tests/, tools/, docs/, .github/, .cursor/, contracts/, reports/, etc.
- Ensure clean PyPI package with only production code
* docs: fix uvx command syntax in all documentation
- Update all occurrences of 'uvx specfact' to 'uvx --from specfact-cli specfact'
- Fixes issue where uvx couldn't find package by command name alone
- Package name is 'specfact-cli', command name is 'specfact'
- Updated in: README.md, docs/README.md, docs/getting-started/installation.md,
docs/guides/competitive-analysis.md, AGENTS.md
* fix: Contract test directory handling and GitHub Pages legal files (#3)
* fix: handle directories in contract test file scanning
- Add is_file() check in _get_modified_files() to skip directories
- Add IsADirectoryError handling in _get_file_hash() and _compute_file_hash()
- Fix contract test error when scanning resources directory
- Ensure only Python files are processed for contract validation
* fix: include LICENSE.md and TRADEMARKS.md in GitHub Pages
- Copy LICENSE.md and TRADEMARKS.md to docs/ before building
- Add root files to workflow paths trigger
- Update docs/index.md to use relative links for LICENSE and TRADEMARKS
- Ensure legal information is included in published documentation
* feat: enable PR orchestrator workflow for dev branch
- Add dev branch to pull_request and push triggers
- Ensure CI/CD runs on PRs to both main and dev branches
- Maintains same path ignore rules for both branches
* feat: enable specfact-gate workflow for dev branch
- Add dev branch to pull_request and push triggers
- Ensure contract validation runs on PRs to both main and dev branches
* fix: replace percent format with f-string in plan.py
- Fix UP031 ruff error by using f-string instead of percent format
- Update prompt text to use modern Python string formatting
* fix: resolve import sorting conflict between isort and ruff
- Remove isort from format and lint scripts to avoid conflicts
- Configure ruff's isort to match black profile (multi_line_output=3, combine_as_imports)
- Use ruff for both import sorting and formatting (more reliable and modern)
- Fix I001 import sorting errors in plan.py
This resolves the conflict where format and lint were producing different results
due to isort and ruff having different import sorting configurations.
* fix: use hatch run in GitHub workflow to ensure tools are available
- Change specfact repro to hatch run specfact repro in specfact-gate.yml
- Ensures all tools (semgrep, basedpyright, ruff, crosshair) are available in PATH
- Fix I001 import sorting in plan.py
* fix: replace try-except-pass with contextlib.suppress in logger_setup
- Fix SIM105 ruff error by using contextlib.suppress(Exception)
- Replace nested try-except-pass blocks with contextlib.suppress
- Improves code quality and follows ruff best practices
* fix: exclude logger_setup.py from CrossHair analysis
- Exclude logger_setup.py from CrossHair due to known signature analysis bug
- CrossHair has issues analyzing functions with *args/**kwargs patterns with decorators
- Contract exploration remains advisory, this prevents false failures
* fix: resolve ruff errors and CrossHair syntax issue
- Fix C414: Remove unnecessary list() call in sorted()
- Fix B007: Rename unused loop variable story_idx to _story_idx
- Fix CrossHair: Exclude common directory instead of using non-existent --exclude flag
- CrossHair doesn't support --exclude, so we exclude common/ by only including other directories
* fix: use unpacking instead of list concatenation for CrossHair targets
- Fix RUF005: Use unpacking (*crosshair_targets) instead of list concatenation
- Improves code quality and follows ruff best practices
* fix: resolve RET504 and SIM102 ruff errors
- Fix RET504: Remove unnecessary assignment before return in feature_keys.py
- Fix SIM102: Combine nested if statements into single if in fsm.py
- Improves code quality and follows ruff best practices
* fix: make CrossHair failures non-blocking
- Treat CrossHair failures as warnings (advisory only)
- Contract exploration is advisory, not blocking
- CrossHair has known issues analyzing certain function signatures with decorators
- Only count non-CrossHair failures for exit code determination
* fix: ruff check
* fix: ruff check
* fix: ruff check
---------
Co-authored-by: Dominikus Nold <[email protected]>
* feat: dynamic CrossHair detection, GitHub Action integration, and enforcement report enhancements (v0.4.2) (#5)
* feat: dynamic CrossHair detection, GitHub Action integration, and enforcement report enhancements
- Replace hard-coded skip list with dynamic signature issue detection
- Add comprehensive metadata to enforcement reports (plan, budget, config)
- Add structured findings extraction from tool output
- Add auto-fix support for Semgrep via --fix flag
- Add GitHub Action workflow with PR annotations and comments
- Add GitHub annotations utility with contract-first validation
- Add comprehensive test suite for new features
- Sync versions to 0.4.2 across all files
Fixes: CrossHair signature analysis limitations blocking CI/CD
New Features: GitHub Action integration, auto-fix support, enhanced reports
* fix: handle CrossHair signature analysis limitations in GitHub annotations
- Detect signature analysis limitations in create_annotations_from_report
- Treat signature issues as non-blocking (notice level, not error)
- Filter signature issues from failed checks in PR comments
- Add dedicated section for signature analysis limitations in PR comments
- Prevents workflow failures for non-blocking CrossHair signature issues
Fixes: GitHub Action workflow failing on CrossHair signature analysis limitations
* fix: escape GitHub Actions syntax in Jinja2 template
- Use {% raw %} blocks to escape GitHub Actions expressions
- Fixes Jinja2 UndefinedError for 'steps' variable
- All 5 failing tests now pass
Fixes:
- test_import_speckit_via_cli_command
- test_import_speckit_generates_github_action
- test_import_speckit_with_full_workflow
- test_generate_from_template
- test_generate_github_action
* fix: handle CrossHair signature issues in ReproChecker and fix ruff whitespace
- Detect CrossHair signature analysis limitations in ReproChecker.run_check()
- Mark signature issues as skipped instead of failed
- Fix whitespace issues in test_directory_structure_workflow.py (W293)
- Prevents local repro failures on CrossHair signature limitations
Fixes: specfact repro failing on CrossHair signature analysis limitations
* chore: remove duplicate specfact-gate.yml workflow
- specfact.yml is the new comprehensive workflow with PR annotations
- specfact-gate.yml was the old workflow with same triggers
- Removing to prevent duplicate workflow executions
Fixes: workflow running twice on each push
* fix: show all ruff errors by using --output-format=full
- Add --output-format=full flag to ruff check command
- Ensures all linting errors are reported, not just a few
- Fixes issue where pipeline only shows limited number of errors
Fixes: ruff report showing only a few issues instead of all
* fix: remove whitespace from blank lines in test_analyze_command.py
- Fix 20 W293 whitespace errors in dedent() strings
- Ruff now passes all checks for this file
Fixes: ruff linting errors in test file
* fix: remove whitespace from blank lines in test files
- Fix W293 whitespace errors in:
- tests/integration/analyzers/test_code_analyzer_integration.py
- tests/unit/analyzers/test_code_analyzer.py
- tests/unit/tools/test_smart_test_coverage.py
- tests/unit/utils/test_ide_setup.py
- All whitespace errors now fixed (68 fixed)
- Remaining 2 SIM105 suggestions are style recommendations, not errors
Fixes: ruff linting errors in test files
* fix: replace try-except-pass with contextlib.suppress for SIM105
- Replace try-except-pass pattern with contextlib.suppress(SystemExit)
- Fixes 2 SIM105 errors in test_smart_test_coverage.py
- All ruff linting errors now fixed
Fixes: SIM105 linting errors in test files
---------
Co-authored-by: Dominikus Nold <[email protected]>
* feat: Watch mode and documentation reorganization (v0.5.0) (#6)
* feat: add watch mode and complete documentation reorganization (v0.5.0)
- Add watch mode for continuous synchronization (sync spec-kit and sync repository)
- Implement real-time file system monitoring with configurable interval
- Add comprehensive E2E test suite for watch mode (20+ tests)
- Complete documentation reorganization (all 3 phases):
- Phase 1: Core reorganization (streamlined README, persona-based docs/README)
- Phase 2: Content creation (first-steps.md, workflows.md, troubleshooting.md, quick-examples.md)
- Phase 3: Content enhancement (architecture.md, commands.md, polish all docs)
- Add plan sync --shared and plan compare --code-vs-plan convenience aliases
- Fix watch mode path validation and error handling
- Update all version artifacts to 0.5.0
- Add comprehensive CHANGELOG entry for 0.5.0
Closes: Watch mode implementation (Phase 6 & 7)
Closes: Documentation reorganization (all phases)
* chore: add reports/ to .gitignore and remove tracked reports
- Add reports/ directory to .gitignore (ephemeral artifacts should not be versioned)
- Remove tracked reports files from git (they are generated artifacts)
- Aligns with directory structure documentation where reports/ is gitignored
---------
Co-authored-by: Dominikus Nold <[email protected]>
* Update to repositioning for brownfield first strategy
* Switch to Apache 2 license
* Fix test failurs
* Fix tests and linter conflicts
* Fix github pages setup
* Fix pages setup
* Fix pages setup
* fix: remove container build job (no Dockerfile)
---------
Co-authored-by: Dominikus Nold <[email protected]>1 parent f02cc17 commit 62b18df
File tree
3 files changed
+45
-102
lines changed- .github/workflows
- docs
3 files changed
+45
-102
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
344 | 344 | | |
345 | 345 | | |
346 | 346 | | |
347 | | - | |
348 | | - | |
349 | | - | |
350 | | - | |
351 | | - | |
352 | | - | |
353 | | - | |
354 | | - | |
355 | | - | |
356 | | - | |
357 | | - | |
358 | | - | |
359 | | - | |
360 | | - | |
361 | | - | |
362 | | - | |
363 | | - | |
364 | | - | |
365 | | - | |
366 | | - | |
367 | | - | |
368 | | - | |
369 | | - | |
370 | | - | |
371 | | - | |
372 | | - | |
373 | | - | |
374 | | - | |
375 | | - | |
376 | | - | |
377 | | - | |
378 | | - | |
379 | | - | |
380 | | - | |
381 | | - | |
382 | | - | |
383 | | - | |
384 | | - | |
385 | | - | |
386 | | - | |
387 | | - | |
388 | | - | |
389 | | - | |
390 | | - | |
391 | | - | |
392 | | - | |
393 | | - | |
394 | | - | |
395 | | - | |
396 | | - | |
397 | | - | |
398 | | - | |
399 | | - | |
400 | | - | |
401 | | - | |
402 | | - | |
403 | | - | |
404 | | - | |
405 | | - | |
406 | | - | |
407 | | - | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
6 | | - | |
7 | | - | |
8 | | - | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| |||
51 | 51 | | |
52 | 52 | | |
53 | 53 | | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
54 | 70 | | |
55 | 71 | | |
56 | 72 | | |
57 | 73 | | |
58 | 74 | | |
59 | | - | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
60 | 78 | | |
61 | 79 | | |
62 | 80 | | |
63 | | - | |
64 | | - | |
65 | | - | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
| 81 | + | |
| 82 | + | |
74 | 83 | | |
75 | 84 | | |
76 | 85 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
8 | 12 | | |
9 | 13 | | |
10 | 14 | | |
11 | | - | |
| 15 | + | |
12 | 16 | | |
13 | 17 | | |
14 | 18 | | |
15 | 19 | | |
16 | 20 | | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
22 | | - | |
23 | | - | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
24 | 25 | | |
25 | 26 | | |
26 | 27 | | |
27 | | - | |
| 28 | + | |
28 | 29 | | |
29 | | - | |
| 30 | + | |
30 | 31 | | |
31 | 32 | | |
| 33 | + | |
| 34 | + | |
32 | 35 | | |
33 | 36 | | |
| 37 | + | |
34 | 38 | | |
35 | 39 | | |
36 | | - | |
| 40 | + | |
37 | 41 | | |
38 | 42 | | |
39 | | - | |
| 43 | + | |
40 | 44 | | |
41 | 45 | | |
42 | 46 | | |
43 | 47 | | |
44 | 48 | | |
45 | 49 | | |
46 | | - | |
47 | | - | |
48 | | - | |
49 | | - | |
50 | | - | |
| 50 | + | |
51 | 51 | | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
58 | | - | |
| 52 | + | |
| 53 | + | |
59 | 54 | | |
60 | 55 | | |
61 | 56 | | |
| |||
0 commit comments