ruff-sync 0.1.9.dev0__tar.gz → 0.1.9.dev1__tar.gz
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.
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/gh-issues/SKILL.md +44 -7
- ruff_sync-0.1.9.dev1/.agents/workflows/task-lifecycle.md +158 -0
- ruff_sync-0.1.9.dev1/.pre-commit-config.yaml +56 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/AGENTS.md +26 -3
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/PKG-INFO +1 -1
- ruff_sync-0.1.9.dev1/configs/data-science-engineering/ruff.toml +209 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/configs/fastapi/ruff.toml +88 -23
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/configs/kitchen-sink/ruff.toml +32 -4
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/pre-defined-configs.md +1 -1
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/pyproject.toml +4 -4
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/system.py +7 -5
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/tui/app.py +9 -2
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/tui/screens.py +4 -5
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/tui/types_.py +41 -6
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/tui/widgets.py +11 -6
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/types_.py +3 -2
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/validation.py +1 -1
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/ruff.toml +3 -0
- ruff_sync-0.1.9.dev1/tests/test_predefined_configs.py +101 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_rule_logic.py +53 -0
- ruff_sync-0.1.9.dev1/tests/test_system.py +193 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/tui/test_tui.py +147 -88
- ruff_sync-0.1.9.dev1/tests/tui/test_tui_types.py +163 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/uv.lock +23 -23
- ruff_sync-0.1.9.dev0/.pre-commit-config.yaml +0 -45
- ruff_sync-0.1.9.dev0/configs/data-science-engineering/ruff.toml +0 -25
- ruff_sync-0.1.9.dev0/tests/test_system.py +0 -54
- ruff_sync-0.1.9.dev0/tests/tui/test_tui_types.py +0 -87
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/DEPENDENCIES.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/TESTING.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/decisions/0001-type-refactoring-strategy.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/decisions/0002-tui-node-ast.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/decisions/0003-argument-resolution-layers.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/decisions/0004-httpx2-respx-test-aliasing.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/decisions/README.md +0 -0
- {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/args_refactor_plan.md +0 -0
- {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/cli_animation_plan.md +0 -0
- {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/doc-fix.md +0 -0
- {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/docs_update_plan.md +0 -0
- {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/formatters-architecture.md +0 -0
- {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/gitlab-reports.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/plans/issue-100-roadmap-plan.md +0 -0
- {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/issue-102-context.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/plans/issue-116-config-validation.md +0 -0
- {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/tui_design.md +0 -0
- {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/tui_requirements.md +0 -0
- {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/tui_rule_browsing.md +0 -0
- {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/tui_rule_browsing_design.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/ruff.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/adr/SKILL.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/dirty-equals/SKILL.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/dirty-equals/references/common-matchers.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/dirty-equals/references/toml-matching.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/dirty-equals/trigger_eval.json +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/mike/SKILL.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/mike/references/commands.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/mkdocs-generation/SKILL.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/mkdocs-generation/examples.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/mkdocs-generation/templates/api-reference.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/mkdocs-generation/templates/getting-started.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/mkdocs-generation/templates/index.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/mkdocs-generation/templates/mkdocs.yml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/release-notes-generation/SKILL.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/ruff-sync/SKILL.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/ruff-sync/references/ci-integration.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/ruff-sync/references/configuration.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/ruff-sync/references/troubleshooting.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/skill-creator/SKILL.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/skill-creator/references/best-practices.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/skill-creator/references/evaluating-skills.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/skill-creator/references/optimizing-descriptions.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/skill-creator/references/quickstart.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/skill-creator/references/sources.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/skill-creator/references/using-scripts.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/skill-creator/scripts/scaffold_skill.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/textual/SKILL.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/textual/examples/basic_app.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/textual/examples/reactive_example.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/textual/references/events.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/textual/references/styling.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/textual/references/testing.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/textual/references/widgets.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/SKILL.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/evals.json +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/references/advanced-narrowing.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/references/error-code-lookup.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/references/generics.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/references/naming.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/references/protocol-patterns.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/references/quickstart.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/references/refactoring-patterns.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/scripts/audit_types.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/warnings-control/SKILL.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/workflows/add-test-case.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/workflows/update-recordings.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/workflows/update-screenshots.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.git-blame-ignore-revs +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.github/dependabot.yml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.github/workflows/ci.yaml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.github/workflows/codspeed.yaml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.github/workflows/complexity.yaml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.gitignore +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.pre-commit-hooks.yaml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/CONTRIBUTING.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/LICENSE.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/README.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/codecov.yml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/agent-skill.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/favicon.png +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/github-job-summary.png +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/github-pr-annotation.png +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/inspect-main.png +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/inspect-search.png +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/logo.png +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/recordings/check_drift.gif +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/recordings/check_in_sync.gif +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/recordings/help_overview.gif +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/recordings/init_project.gif +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/recordings/pull_basic.gif +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/recordings/validate_strict.gif +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/ruff_sync_banner.png +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/screenshots/dashboard.svg +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/screenshots/legend_help.svg +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/screenshots/rule_details.svg +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/screenshots/screenshot_sample.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/screenshots/search_omnibox.svg +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/best-practices.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/ci-integration.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/configuration.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/contributing.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/examples/advanced-config.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/examples/basic-config.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/gen_ref_pages.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/index.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/inspect.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/installation.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/overrides/main.html +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/overrides/partials/version_warning.html +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/pre-commit.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/troubleshooting.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/url-resolution.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/usage.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/mkdocs.yml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/scripts/check_dogfood.sh +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/scripts/generate_tui_screenshots.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/scripts/gitclone_dogfood.sh +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/scripts/pull_dogfood.sh +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/skills-lock.json +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/.agents/skills/ruff-sync/SKILL.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/.agents/skills/ruff-sync/references/ci-integration.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/.agents/skills/ruff-sync/references/configuration.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/.agents/skills/ruff-sync/references/troubleshooting.md +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/__init__.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/__main__.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/cli.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/config_io.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/constants.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/core.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/dependencies.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/formatters.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/pre_commit.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/tui/__init__.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/tui/constants.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/tui/themes.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/sitecustomize.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tapes/_common.tape +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tapes/check_drift.tape +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tapes/check_in_sync.tape +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tapes/help_overview.tape +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tapes/init_project.tape +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tapes/pull_basic.tape +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tapes/validate_strict.tape +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tasks.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/__init__.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/conftest.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/multi_upstream_final.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/multi_upstream_initial.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/multi_upstream_up1.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/multi_upstream_up2.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_changes_final.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_changes_initial.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_changes_upstream.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_dotted_keys_final.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_dotted_keys_initial.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_dotted_keys_upstream.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_ruff_cfg_final.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_ruff_cfg_initial.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_ruff_cfg_upstream.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/readme_excludes_final.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/readme_excludes_initial.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/readme_excludes_upstream.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/standard_final.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/standard_initial.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/standard_upstream.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_basic.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_benchmarks.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_check.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_ci_integration.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_ci_validation.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_config_io.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_config_validation.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_constants.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_corner_cases.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_dependencies.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_deprecation.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_e2e.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_formatters.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_git_fetch.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_minimal_imports.sh +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_pre_commit.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_project.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_scaffold.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_serialization.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_toml_operations.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_url_handling.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_whitespace.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/tui/__init__.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/tui/conftest.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/tui/test_themes.py +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/w_ruff_sync_cfg/pyproject.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/wo_ruff_cfg/pyproject.toml +0 -0
- {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/wo_ruff_sync_cfg/pyproject.toml +0 -0
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gh-issues
|
|
3
3
|
description: >-
|
|
4
|
-
Create, update, comment on, and link GitHub issues using the gh CLI.
|
|
5
|
-
Use when creating a new issue, adding sub-issues, cross-referencing issues,
|
|
6
|
-
or posting large structured content
|
|
4
|
+
Create, update, comment on, and link GitHub issues and pull requests using the gh CLI.
|
|
5
|
+
Use when creating a new issue or PR, adding sub-issues, cross-referencing issues,
|
|
6
|
+
checking CI status, or posting large structured content to GitHub.
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
# Working with GitHub Issues via the `gh` CLI
|
|
9
|
+
# Working with GitHub Issues and Pull Requests via the `gh` CLI
|
|
10
10
|
|
|
11
11
|
## Quick Reference
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
+
# Issues
|
|
14
15
|
gh issue list # Open issues
|
|
15
16
|
gh issue list --limit 5 # Most recent 5
|
|
16
17
|
gh issue view <number> # Read issue body + metadata
|
|
@@ -20,6 +21,13 @@ gh issue create --title "..." --body-file /tmp/body.md # Create from file (pref
|
|
|
20
21
|
gh issue comment <number> --body "..." # Post a comment
|
|
21
22
|
gh issue edit <number> --title "..." # Edit issue metadata
|
|
22
23
|
gh issue close <number> # Close an issue
|
|
24
|
+
|
|
25
|
+
# Pull Requests
|
|
26
|
+
gh pr list # Open PRs
|
|
27
|
+
gh pr view <number_or_branch> # Read PR details
|
|
28
|
+
gh pr create --title "..." --body "..." # Open PR (or use --body-file)
|
|
29
|
+
gh pr checks # Check CI run status on current PR branch
|
|
30
|
+
gh pr diff # Review changes in PR
|
|
23
31
|
```
|
|
24
32
|
|
|
25
33
|
---
|
|
@@ -174,8 +182,37 @@ as a GitHub issue body.
|
|
|
174
182
|
|
|
175
183
|
---
|
|
176
184
|
|
|
185
|
+
## Working with Pull Requests via `gh`
|
|
186
|
+
|
|
187
|
+
### Creating a Pull Request
|
|
188
|
+
|
|
189
|
+
When opening a PR from a topic branch:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
# 1. Push topic branch (prefer plain 'git push' if autoSetupRemote is enabled)
|
|
193
|
+
git push
|
|
194
|
+
# Fallback if upstream tracking is unset: git push -u origin HEAD
|
|
195
|
+
|
|
196
|
+
# 2. Open the PR linking to the relevant issue
|
|
197
|
+
gh pr create \
|
|
198
|
+
--title "feat(cli): short descriptive summary" \
|
|
199
|
+
--body $'## Summary\n- Description of changes made\n\nCloses #<issue-number>'
|
|
200
|
+
# Or use --body-file /tmp/pr-body.md for larger PR descriptions
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Reviewing CI and PR Status
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
gh pr view # View current PR summary in terminal
|
|
207
|
+
gh pr checks # Check CI run / check status
|
|
208
|
+
gh pr diff # Review line-by-line diff of the PR
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
177
213
|
## References
|
|
178
214
|
|
|
179
|
-
- `gh issue --help` — full CLI reference
|
|
180
|
-
-
|
|
181
|
-
- [GitHub
|
|
215
|
+
- `gh issue --help` — full issue CLI reference
|
|
216
|
+
- `gh pr --help` — full PR CLI reference
|
|
217
|
+
- [GitHub CLI manual](https://cli.github.com/manual/)
|
|
218
|
+
- [GitHub cross-referencing issues and PRs](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/autolinked-references-and-urls#issues-and-pull-requests)
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Standard step-by-step task lifecycle for AI agents working on ruff-sync
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Agent Task Lifecycle & Git Workflow
|
|
6
|
+
|
|
7
|
+
Follow this end-to-end lifecycle whenever starting a new feature, bug fix, refactor, or documentation update on `ruff-sync`.
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
[1. Context] ➔ [2. Branch] ➔ [3. Test First ➔ Commit `test:`] ➔ [4. Implement & Validate ➔ Commit `feat:`/`fix:`] ➔ [5. Sync Docs/Skills ➔ Commit `docs:`] ➔ [6. Push & PR]
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
> [!IMPORTANT]
|
|
14
|
+
> **Commit Incrementally & Forward-Only (No Git Surgery)**:
|
|
15
|
+
> - Make focused, atomic commits as you complete each stage of work (`test:`, `feat:`, `fix:`, `docs:`). Do not wait until the very end.
|
|
16
|
+
> - **No need to polish history**: This repository uses **Squash and Merge** when merging PRs to `main`. There is no pressure to maintain an artificially pristine internal commit history.
|
|
17
|
+
> - **Avoid Git Surgery**: Do NOT use `git commit --amend` or `git reset` to rewrite past commits (standard `git rebase` against `main` is fine). Always make new forward-only commits for fixes, follow-ups, or formatting.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 1. Intake & Context Gathering
|
|
22
|
+
|
|
23
|
+
Before writing any code:
|
|
24
|
+
1. **Read GitHub Issues**: If addressing an issue, inspect the description, labels, and all discussion comments:
|
|
25
|
+
```bash
|
|
26
|
+
gh issue view <issue-number> --comments
|
|
27
|
+
```
|
|
28
|
+
2. **Check Architectural Decisions (ADRs)**: Review [`.agents/decisions/README.md`](../decisions/README.md) to understand existing architectural constraints and design patterns.
|
|
29
|
+
3. **Review Specialized Skills**: If working on TOML matching, warnings, Textual TUI, or documentation, review the relevant skill in [`.agents/skills/`](../skills/).
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 2. Sync & Branch from Latest `main`
|
|
34
|
+
|
|
35
|
+
> [!IMPORTANT]
|
|
36
|
+
> **Never make commits directly on `main`** unless explicitly instructed by the user. Always branch off the latest remote `main`.
|
|
37
|
+
|
|
38
|
+
1. **Verify working directory is clean**:
|
|
39
|
+
```bash
|
|
40
|
+
git status
|
|
41
|
+
```
|
|
42
|
+
2. **Switch to `main` and pull latest changes**:
|
|
43
|
+
```bash
|
|
44
|
+
git checkout main && git pull origin main
|
|
45
|
+
```
|
|
46
|
+
3. **Create and checkout a descriptive topic branch**:
|
|
47
|
+
```bash
|
|
48
|
+
# Branch naming format: <type>/<issue-number>-<short-description>
|
|
49
|
+
# Types: feat, fix, docs, refactor, test, chore
|
|
50
|
+
git checkout -b feat/123-url-validation
|
|
51
|
+
# or for an unlinked bugfix/task:
|
|
52
|
+
git checkout -b fix/dotted-keys-proxy-table
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 3. Test First (TDD & Reproduction) ➔ *Commit Incrementally*
|
|
58
|
+
|
|
59
|
+
- **Bug Fixes**: Always write a reproduction test that **fails** before applying your fix and **passes** with it.
|
|
60
|
+
- Edge cases and TOML merge tests go in `tests/test_corner_cases.py` or `tests/test_whitespace.py`.
|
|
61
|
+
- For full lifecycle sync scenarios, scaffold a fixture triple in `tests/lifecycle_tomls/` using [`add-test-case.md`](add-test-case.md):
|
|
62
|
+
```bash
|
|
63
|
+
uv run invoke new-case --name <case_name> --description "Description of edge case"
|
|
64
|
+
```
|
|
65
|
+
- **New Features**: Add unit tests in `tests/test_basic.py` or corresponding test module.
|
|
66
|
+
- **Testing Standards**: Follow [`.agents/TESTING.md`](../TESTING.md):
|
|
67
|
+
- No `unittest.mock` or `MagicMock` (use DI, `respx`, or `pyfakefs`).
|
|
68
|
+
- Strict async: decorate async tests with `@pytest.mark.asyncio`.
|
|
69
|
+
- Terminate test files with `if __name__ == "__main__": pytest.main([__file__, "-vv"])`.
|
|
70
|
+
|
|
71
|
+
**Incremental Commit for Tests**:
|
|
72
|
+
```bash
|
|
73
|
+
git add tests/
|
|
74
|
+
git commit -m "test: add reproduction case for <issue-or-feature-summary>"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 4. Implement & Validate Quality ➔ *Commit Incrementally*
|
|
80
|
+
|
|
81
|
+
- **Implement Following Project Conventions**:
|
|
82
|
+
- **Imports**: Always include `from __future__ import annotations` as the first import. Use `import pathlib` and `import datetime as dt`.
|
|
83
|
+
- **TOML Operations**: Always use `tomlkit`. Use `.unwrap()` when converting proxy objects to native Python objects.
|
|
84
|
+
- **Sentinels**: Use `MissingType.SENTINEL` (`MISSING`) from `ruff_sync.constants` to distinguish absent fields from explicitly configured defaults.
|
|
85
|
+
- **Typing**: Python 3.11 strict typing. Prefer `NamedTuple` for return types and `typing.Protocol` over abstract base classes.
|
|
86
|
+
- **Warnings**: Follow [`.agents/skills/warnings-control/SKILL.md`](../skills/warnings-control/SKILL.md) for user-facing deprecations and `--strict` validation.
|
|
87
|
+
|
|
88
|
+
- **Run Mandatory 4-Step Validation Pipeline**:
|
|
89
|
+
```bash
|
|
90
|
+
# 1. Lint and auto-fix
|
|
91
|
+
uv run ruff check . --fix
|
|
92
|
+
|
|
93
|
+
# 2. Format code
|
|
94
|
+
uv run ruff format .
|
|
95
|
+
|
|
96
|
+
# 3. Type check (strict mode)
|
|
97
|
+
uv run mypy .
|
|
98
|
+
|
|
99
|
+
# 4. Run test suite
|
|
100
|
+
uv run pytest -vv
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Optional pre-commit run:
|
|
104
|
+
```bash
|
|
105
|
+
uv run prek run --all-files
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Incremental Commit for Implementation**:
|
|
109
|
+
```bash
|
|
110
|
+
git add src/ tests/
|
|
111
|
+
git commit -m "feat(core): implement <feature-description> (#123)"
|
|
112
|
+
# or for a bugfix:
|
|
113
|
+
git commit -m "fix(merge): resolve <bug-description> (#123)"
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 5. Synchronize Documentation, Skills, & Assets ➔ *Commit Incrementally*
|
|
119
|
+
|
|
120
|
+
- **CLI or Config Changes**: If CLI flags, config keys in `[tool.ruff-sync]`, or exit codes change, **update the agent skill** at [`.agents/skills/ruff-sync/`](../skills/ruff-sync/) (which points to `src/ruff_sync/.agents/skills/ruff-sync/`).
|
|
121
|
+
- **User Documentation**: Update relevant pages in `docs/` or `mkdocs.yml` and test the docs build:
|
|
122
|
+
```bash
|
|
123
|
+
uv run invoke docs --build
|
|
124
|
+
```
|
|
125
|
+
- **Terminal Recordings / Screenshots**:
|
|
126
|
+
- If CLI output changed, regenerate VHS GIFs: [`update-recordings.md`](update-recordings.md).
|
|
127
|
+
- If TUI layouts or screens changed, regenerate SVG screenshots: [`update-screenshots.md`](update-screenshots.md).
|
|
128
|
+
- **Architectural Shift**: If you made a major design decision, document it via the [ADR Skill](../skills/adr/SKILL.md).
|
|
129
|
+
|
|
130
|
+
**Incremental Commit for Documentation & Assets**:
|
|
131
|
+
```bash
|
|
132
|
+
git add docs/ .agents/ src/ruff_sync/.agents/
|
|
133
|
+
git commit -m "docs: update documentation and agent skills for <feature-name>"
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 6. Push & Open Pull Request
|
|
139
|
+
|
|
140
|
+
1. **Push Topic Branch**:
|
|
141
|
+
```bash
|
|
142
|
+
# Prefer plain 'git push' (works automatically if push.autoSetupRemote is enabled and matches auto-approval prefixes)
|
|
143
|
+
git push
|
|
144
|
+
# Fallback if upstream tracking is not configured: git push -u origin HEAD
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
2. **Open Pull Request via `gh` CLI**:
|
|
148
|
+
```bash
|
|
149
|
+
gh pr create \
|
|
150
|
+
--title "feat: descriptive title" \
|
|
151
|
+
--body $'## Summary\n- Description of changes\n\nCloses #<issue-number>'
|
|
152
|
+
# Or use --body-file /tmp/pr-body.md for larger descriptions
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
3. **Verify CI**:
|
|
156
|
+
```bash
|
|
157
|
+
gh pr checks
|
|
158
|
+
```
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
+
rev: v6.0.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: check-ast # validates Python syntax before committing
|
|
6
|
+
- id: check-json # validates JSON file structure
|
|
7
|
+
- id: check-yaml # validates YAML file structure
|
|
8
|
+
args: ["--unsafe"]
|
|
9
|
+
exclude: .agents/skills/mkdocs-generation/templates/mkdocs.yml
|
|
10
|
+
- id: check-toml # validates pyproject.toml and other TOML files
|
|
11
|
+
- id: check-merge-conflict # blocks files that still have <<< merge conflict markers
|
|
12
|
+
- id: check-added-large-files # prevents files over 1MB from being committed
|
|
13
|
+
args: ["--maxkb=1024"]
|
|
14
|
+
- id: check-case-conflict # catches filename casing issues across Windows/Mac/Linux
|
|
15
|
+
- id: detect-private-key # blocks accidental commit of SSH keys and API secrets
|
|
16
|
+
- id: mixed-line-ending # enforces LF line endings for cross-platform consistency
|
|
17
|
+
args: ["--fix=lf"]
|
|
18
|
+
- id: end-of-file-fixer # ensures every file ends with a newline
|
|
19
|
+
- id: trailing-whitespace # removes trailing whitespace from all lines
|
|
20
|
+
- id: no-commit-to-branch # prevents direct commits to develop and main branches
|
|
21
|
+
args: [--branch, develop, --branch, main]
|
|
22
|
+
|
|
23
|
+
# Ruff: fast Python linter and formatter
|
|
24
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
25
|
+
rev: "v0.16.5"
|
|
26
|
+
hooks:
|
|
27
|
+
- id: ruff-check # lints Python code and auto-fixes where possible
|
|
28
|
+
args: ["--fix"]
|
|
29
|
+
- id: ruff-format # formats Python code consistently
|
|
30
|
+
|
|
31
|
+
# Prettier: opinionated formatter for YAML and JSON
|
|
32
|
+
- repo: https://github.com/pre-commit/mirrors-prettier
|
|
33
|
+
rev: v4.0.0-alpha.8
|
|
34
|
+
hooks:
|
|
35
|
+
- id: prettier
|
|
36
|
+
types_or: [yaml, json] # formats YAML and JSON files
|
|
37
|
+
exclude: .agents/skills/mkdocs-generation/templates/mkdocs.yml
|
|
38
|
+
|
|
39
|
+
# Actionlint: static analysis for GitHub Actions workflow files
|
|
40
|
+
- repo: https://github.com/rhysd/actionlint
|
|
41
|
+
rev: v1.7.12
|
|
42
|
+
hooks:
|
|
43
|
+
- id: actionlint
|
|
44
|
+
exclude: .github/workflows/complexity.yaml
|
|
45
|
+
|
|
46
|
+
# https://pre-commit.ci/
|
|
47
|
+
ci:
|
|
48
|
+
autofix_commit_msg: |
|
|
49
|
+
[pre-commit.ci] auto fixes from pre-commit.com hooks
|
|
50
|
+
|
|
51
|
+
for more information, see https://pre-commit.ci
|
|
52
|
+
autofix_prs: true
|
|
53
|
+
autoupdate_branch: "main"
|
|
54
|
+
autoupdate_commit_msg: "[pre-commit.ci] pre-commit autoupdate"
|
|
55
|
+
autoupdate_schedule: weekly
|
|
56
|
+
submodules: false
|
|
@@ -10,7 +10,24 @@
|
|
|
10
10
|
|
|
11
11
|
## GitHub Context
|
|
12
12
|
|
|
13
|
-
Use the GitHub CLI (`gh`) to gather extra context about issues, pull requests, and releases before starting work. For detailed workflows on managing issues, see the `gh-issues` skill in `.agents/skills/gh-issues/SKILL.md`.
|
|
13
|
+
Use the GitHub CLI (`gh`) to gather extra context about issues, pull requests, and releases before starting work. For detailed workflows on managing issues and pull requests, see the `gh-issues` skill in `.agents/skills/gh-issues/SKILL.md`.
|
|
14
|
+
|
|
15
|
+
## Task Lifecycle & Git Workflow
|
|
16
|
+
|
|
17
|
+
All new tasks, bug fixes, refactors, and features MUST follow the standard lifecycle (see detailed guide in [`.agents/workflows/task-lifecycle.md`](.agents/workflows/task-lifecycle.md)):
|
|
18
|
+
|
|
19
|
+
1. **Intake Context**: Read relevant issues (`gh issue view <num> --comments`) and ADRs in `.agents/decisions/`.
|
|
20
|
+
2. **Branch from Latest `main`**: **Never commit directly to `main`** unless explicitly instructed.
|
|
21
|
+
```bash
|
|
22
|
+
git checkout main && git pull origin main
|
|
23
|
+
git checkout -b <type>/<issue-number>-<short-description>
|
|
24
|
+
```
|
|
25
|
+
*Branch types: `feat/`, `fix/`, `docs/`, `refactor/`, `test/`, `chore/`.*
|
|
26
|
+
3. **Test First (TDD)**: For bugfixes, write a reproduction test before fixing the bug. Commit test cases incrementally (`test: ...`).
|
|
27
|
+
4. **Implement & Validate**: Adhere to project conventions (strict typing, DI, `tomlkit`, sentinels). Run the 4-step quality pipeline (`ruff check`, `ruff format`, `mypy`, `pytest`). Commit logical units of implementation incrementally (`feat: ...`, `fix: ...`, `refactor: ...`).
|
|
28
|
+
5. **Sync Documentation & Skills**: Update `.agents/skills/ruff-sync/` and `docs/` if CLI flags, config keys, or behavior change. Commit documentation changes (`docs: ...`).
|
|
29
|
+
6. **Open PR**: Push branch (prefer plain `git push` if upstream tracking / `push.autoSetupRemote` is configured) and open a PR via `gh pr create`. **Do not wait until the very end to make a single giant commit**; keep commit history clean, granular, and incremental.
|
|
30
|
+
7. **No Git Surgery / Commit Amending**: This repository uses **Squash and Merge** on PR merge, so there is no pressure to curate branch history. Do **not** use `git commit --amend` or `git reset` to polish past commits (standard `git rebase` to stay up to date with `main` is fine). Always make forward-only commits for fixes and follow-ups.
|
|
14
31
|
|
|
15
32
|
## Agent Skills
|
|
16
33
|
|
|
@@ -21,7 +38,7 @@ Specific workflows, libraries, and tools are documented in `.agents/skills/`. Be
|
|
|
21
38
|
- **Python** ≥ 3.11 (target version `py311`)
|
|
22
39
|
- **Package Manager**: [uv](https://docs.astral.sh/uv/) — Use `uv run <command>` for all executions to ensure the correct environment.
|
|
23
40
|
- **Note on PATH**: On macOS, `uv` is often installed in `~/.local/bin`. If `uv` is not found, add this to your `PATH`: `export PATH="$PATH:$HOME/.local/bin"`.
|
|
24
|
-
- **Linter / Formatter**: [Ruff](https://docs.astral.sh/ruff/) (`>=0.
|
|
41
|
+
- **Linter / Formatter**: [Ruff](https://docs.astral.sh/ruff/) (`>=0.16.5`)
|
|
25
42
|
- **Type Checker**: [mypy](https://mypy-lang.org/) (strict mode)
|
|
26
43
|
- **Test Framework**: [pytest](https://docs.pytest.org/) with `pytest-asyncio`, `respx`, `pyfakefs` (See [Testing Standards](.agents/TESTING.md))
|
|
27
44
|
- **Coverage**: `coverage` + Codecov
|
|
@@ -34,9 +51,15 @@ Specific workflows, libraries, and tools are documented in `.agents/skills/`. Be
|
|
|
34
51
|
```text
|
|
35
52
|
.agents/ # Agent-specific instructions (Deep Standards)
|
|
36
53
|
TESTING.md # Mandatory testing patterns and rules
|
|
54
|
+
DEPENDENCIES.md # Optional dependencies and lazy loading standard
|
|
37
55
|
workflows/ # Step-by-step guides for common tasks
|
|
56
|
+
task-lifecycle.md # Standard end-to-end task lifecycle & git workflow
|
|
57
|
+
add-test-case.md # How to add lifecycle TOML fixtures
|
|
58
|
+
update-recordings.md # How to regenerate VHS CLI animation recordings
|
|
59
|
+
update-screenshots.md # How to regenerate TUI screenshots
|
|
38
60
|
decisions/ # Internal Architectural Decision Records (ADRs)
|
|
39
61
|
README.md # Index of all architectural decisions
|
|
62
|
+
plans/ # Historical and active implementation plans
|
|
40
63
|
skills/
|
|
41
64
|
ruff-sync/ # Symlink to src/ruff_sync/.agents/skills/ruff-sync (for local workspace agent loading)
|
|
42
65
|
SKILL.md
|
|
@@ -45,7 +68,7 @@ Specific workflows, libraries, and tools are documented in `.agents/skills/`. Be
|
|
|
45
68
|
troubleshooting.md
|
|
46
69
|
ci-integration.md
|
|
47
70
|
src/ruff_sync/ # The application source
|
|
48
|
-
.agents/skills/ruff-sync/ #
|
|
71
|
+
.agents/skills/ruff-sync/ # Canonical physical skill source directory (packaged into wheels)
|
|
49
72
|
__init__.py # Public API
|
|
50
73
|
__main__.py # CLI entry point (`python -m ruff_sync`)
|
|
51
74
|
cli.py # CLI argparse definition and orchestration
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: ruff-sync
|
|
3
|
-
Version: 0.1.9.
|
|
3
|
+
Version: 0.1.9.dev1
|
|
4
4
|
Summary: Synchronize Ruff linter configuration across projects
|
|
5
5
|
Project-URL: Homepage, https://github.com/Kilo59/ruff-sync
|
|
6
6
|
Project-URL: Documentation, https://kilo59.github.io/ruff-sync/
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# ruff-sync Data Science & Engineering Configuration
|
|
2
|
+
# https://github.com/Kilo59/ruff-sync
|
|
3
|
+
#
|
|
4
|
+
# This is a Ruff configuration tailored for Data Science, Machine Learning,
|
|
5
|
+
# and Data Engineering workflows.
|
|
6
|
+
# It enables rules for Jupyter Notebooks, NumPy, Pandas, Airflow, and performance.
|
|
7
|
+
#
|
|
8
|
+
# Usage (direct Ruff config, assuming this file is vendored into your repo):
|
|
9
|
+
# extend = "configs/data-science-engineering/ruff.toml"
|
|
10
|
+
#
|
|
11
|
+
# Usage (with ruff-sync in pyproject.toml):
|
|
12
|
+
# [tool.ruff-sync]
|
|
13
|
+
# path = "configs/data-science-engineering/ruff.toml"
|
|
14
|
+
|
|
15
|
+
# Same as Black.
|
|
16
|
+
line-length = 88
|
|
17
|
+
indent-width = 4
|
|
18
|
+
|
|
19
|
+
# Assume Python 3.10. Consumers should override this to match their project's Python version.
|
|
20
|
+
target-version = "py310"
|
|
21
|
+
|
|
22
|
+
# Enable Jupyter notebook linting and formatting
|
|
23
|
+
extend-include = ["*.ipynb"]
|
|
24
|
+
extend-exclude = [".ipynb_checkpoints"]
|
|
25
|
+
|
|
26
|
+
[lint]
|
|
27
|
+
# Enable rules tailored for data science, machine learning, and data engineering.
|
|
28
|
+
select = [
|
|
29
|
+
# https://docs.astral.sh/ruff/rules/#pyflakes-f
|
|
30
|
+
"F", # Pyflakes: Essential checks for Python bugs
|
|
31
|
+
# https://docs.astral.sh/ruff/rules/#error-e
|
|
32
|
+
"E", # pycodestyle errors: PEP8 styling
|
|
33
|
+
# https://docs.astral.sh/ruff/rules/#warning-w
|
|
34
|
+
"W", # pycodestyle warnings: PEP8 styling
|
|
35
|
+
# https://docs.astral.sh/ruff/rules/#mccabe-c90
|
|
36
|
+
"C90", # mccabe: Code complexity (cyclomatic complexity)
|
|
37
|
+
# https://docs.astral.sh/ruff/rules/#isort-i
|
|
38
|
+
"I", # isort: Import sorting
|
|
39
|
+
# https://docs.astral.sh/ruff/rules/#pep8-naming-n
|
|
40
|
+
"N", # pep8-naming: Naming conventions
|
|
41
|
+
# https://docs.astral.sh/ruff/rules/#pydocstyle-d
|
|
42
|
+
"D", # pydocstyle: Docstring conventions (NumPy style)
|
|
43
|
+
# https://docs.astral.sh/ruff/rules/#pyupgrade-up
|
|
44
|
+
"UP", # pyupgrade: Upgrade syntax for newer Python versions
|
|
45
|
+
# https://docs.astral.sh/ruff/rules/#flake8-annotations-ann
|
|
46
|
+
"ANN", # flake8-annotations: Type annotation checks
|
|
47
|
+
# https://docs.astral.sh/ruff/rules/#flake8-bugbear-b
|
|
48
|
+
"B", # flake8-bugbear: Finding likely bugs and design problems
|
|
49
|
+
# https://docs.astral.sh/ruff/rules/#flake8-builtins-a
|
|
50
|
+
"A", # flake8-builtins: Check for python builtins being used as variables
|
|
51
|
+
# https://docs.astral.sh/ruff/rules/#flake8-comprehensions-c4
|
|
52
|
+
"C4", # flake8-comprehensions: Better list/set/dict comprehensions
|
|
53
|
+
# https://docs.astral.sh/ruff/rules/#flake8-datetimez-dtz
|
|
54
|
+
"DTZ", # flake8-datetimez: Usage of unsafe naive datetime class
|
|
55
|
+
# https://docs.astral.sh/ruff/rules/#flake8-debugger-t10
|
|
56
|
+
"T10", # flake8-debugger: Check for pdb/ipdb imports and set_traces
|
|
57
|
+
# https://docs.astral.sh/ruff/rules/#flake8-logging-format-g
|
|
58
|
+
"G", # flake8-logging-format: Validate logging format strings
|
|
59
|
+
# https://docs.astral.sh/ruff/rules/#flake8-pie-pie
|
|
60
|
+
"PIE", # flake8-pie: Misc. lints
|
|
61
|
+
# https://docs.astral.sh/ruff/rules/#flake8-print-t20
|
|
62
|
+
"T20", # flake8-print: Check for Print statements
|
|
63
|
+
# https://docs.astral.sh/ruff/rules/#flake8-pytest-style-pt
|
|
64
|
+
"PT", # flake8-pytest-style: Pytest style checks
|
|
65
|
+
# https://docs.astral.sh/ruff/rules/#flake8-quotes-q
|
|
66
|
+
"Q", # flake8-quotes: Lint for quotes
|
|
67
|
+
# https://docs.astral.sh/ruff/rules/#flake8-return-ret
|
|
68
|
+
"RET", # flake8-return: Check return values
|
|
69
|
+
# https://docs.astral.sh/ruff/rules/#flake8-simplify-sim
|
|
70
|
+
"SIM", # flake8-simplify: Code simplification
|
|
71
|
+
# https://docs.astral.sh/ruff/rules/#flake8-unused-arguments-arg
|
|
72
|
+
"ARG", # flake8-unused-arguments: Unused argument checks
|
|
73
|
+
# https://docs.astral.sh/ruff/rules/#flake8-use-pathlib-pth
|
|
74
|
+
"PTH", # flake8-use-pathlib: Use pathlib instead of os.path
|
|
75
|
+
# https://docs.astral.sh/ruff/rules/#pandas-vet-pd
|
|
76
|
+
"PD", # pandas-vet: Pandas code checks
|
|
77
|
+
# https://docs.astral.sh/ruff/rules/#numpy-specific-rules-npy
|
|
78
|
+
"NPY", # NumPy-specific rules: NumPy conventions & NumPy 2.0 migration
|
|
79
|
+
# https://docs.astral.sh/ruff/rules/#airflow-air
|
|
80
|
+
"AIR", # Airflow: Airflow best practices (Data Engineering pipelines)
|
|
81
|
+
# https://docs.astral.sh/ruff/rules/#perflint-perf
|
|
82
|
+
"PERF", # Perflint: Performance anti-patterns in loops
|
|
83
|
+
# https://docs.astral.sh/ruff/rules/#refurb-furb
|
|
84
|
+
"FURB", # refurb: Modernize Python code
|
|
85
|
+
# https://docs.astral.sh/ruff/rules/#flake8-logging-log
|
|
86
|
+
"LOG", # flake8-logging: Better logging practices
|
|
87
|
+
# https://docs.astral.sh/ruff/rules/#pylint-pl
|
|
88
|
+
"PL", # Pylint: Pylint rules
|
|
89
|
+
# https://docs.astral.sh/ruff/rules/#flynt-fly
|
|
90
|
+
"FLY", # flynt: Convert string formatting to f-strings
|
|
91
|
+
# https://docs.astral.sh/ruff/rules/#pydoclint-doc
|
|
92
|
+
# "DOC", # pydoclint: Validate docstrings against function signatures (Note: requires `preview = true`)
|
|
93
|
+
# https://docs.astral.sh/ruff/rules/pytest-fixture-autouse/
|
|
94
|
+
# "pedantic", # Category selector: Pedantic checks (Note: requires `preview = true`)
|
|
95
|
+
# "pytest-fixture-autouse", # Codeless rule: Avoid autouse=True in pytest fixtures (Note: requires `preview = true`)
|
|
96
|
+
# https://docs.astral.sh/ruff/rules/#ruff-specific-rules-ruf
|
|
97
|
+
"RUF", # Ruff-specific rules: Rules unique to Ruff
|
|
98
|
+
]
|
|
99
|
+
|
|
100
|
+
# Preview mode settings:
|
|
101
|
+
# preview = true # Enable preview rules and fixes across Ruff
|
|
102
|
+
# explicit-preview-rules = true # When preview is enabled, require full rule codes instead of prefixes
|
|
103
|
+
|
|
104
|
+
# Ignore rules that conflict with the Ruff formatter.
|
|
105
|
+
# See: https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules
|
|
106
|
+
ignore = [
|
|
107
|
+
"W191", # tab-indentation
|
|
108
|
+
"E111", # indentation-with-invalid-multiple
|
|
109
|
+
"E114", # indentation-with-invalid-multiple-comment
|
|
110
|
+
"E117", # over-indented
|
|
111
|
+
"D206", # docstring-tab-indentation
|
|
112
|
+
"D300", # triple-single-quotes
|
|
113
|
+
"Q000", # bad-quotes-inline-string
|
|
114
|
+
"Q001", # bad-quotes-multiline-string
|
|
115
|
+
"Q002", # bad-quotes-docstring
|
|
116
|
+
"Q003", # avoidable-escaped-quote
|
|
117
|
+
"Q004", # unnecessary-escaped-quote
|
|
118
|
+
"COM812", # missing-trailing-comma
|
|
119
|
+
"COM819", # prohibited-trailing-comma
|
|
120
|
+
"ISC001", # single-line-implicit-string-concatenation
|
|
121
|
+
"ISC002", # multi-line-implicit-string-concatenation
|
|
122
|
+
]
|
|
123
|
+
|
|
124
|
+
# Allow autofix for all enabled rules.
|
|
125
|
+
fixable = ["ALL"]
|
|
126
|
+
unfixable = []
|
|
127
|
+
|
|
128
|
+
# Allow unused variables when underscore-prefixed.
|
|
129
|
+
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
|
|
130
|
+
|
|
131
|
+
[lint.per-file-ignores]
|
|
132
|
+
# Notebooks often have top-level statements, plots, and exploratory code.
|
|
133
|
+
"*.ipynb" = [
|
|
134
|
+
"E402", # Module level import not at top of file
|
|
135
|
+
"T201", # print found
|
|
136
|
+
"D100", # Missing docstring in public module
|
|
137
|
+
"D103", # Missing docstring in public function
|
|
138
|
+
]
|
|
139
|
+
|
|
140
|
+
[lint.pydocstyle]
|
|
141
|
+
# Use NumPy-style docstrings (standard in Data Science / Scientific Python).
|
|
142
|
+
# Default: "pep257"
|
|
143
|
+
convention = "numpy"
|
|
144
|
+
|
|
145
|
+
[lint.mccabe]
|
|
146
|
+
# Flag errors (C901) whenever the complexity level exceeds 10.
|
|
147
|
+
# Default: 10
|
|
148
|
+
max-complexity = 10
|
|
149
|
+
|
|
150
|
+
[lint.flake8-quotes]
|
|
151
|
+
# Use double quotes for inline strings (same as Black).
|
|
152
|
+
# Default: "double"
|
|
153
|
+
inline-quotes = "double"
|
|
154
|
+
# Use double quotes for multiline strings.
|
|
155
|
+
# Default: "double"
|
|
156
|
+
multiline-quotes = "double"
|
|
157
|
+
# Use double quotes for docstrings.
|
|
158
|
+
# Default: "double"
|
|
159
|
+
docstring-quotes = "double"
|
|
160
|
+
# Avoid escaping quotes if the other quote type would save an escape.
|
|
161
|
+
# Default: true
|
|
162
|
+
avoid-escape = true
|
|
163
|
+
|
|
164
|
+
[lint.flake8-pytest-style]
|
|
165
|
+
# Whether to require parentheses for pytest fixtures.
|
|
166
|
+
# Default: true
|
|
167
|
+
fixture-parentheses = true
|
|
168
|
+
# The type of pytest.mark.parametrize names to use: "tuple", "list", or "csv"
|
|
169
|
+
# Default: "tuple"
|
|
170
|
+
parametrize-names-type = "tuple"
|
|
171
|
+
|
|
172
|
+
[lint.pylint]
|
|
173
|
+
# The maximum number of arguments allowed for a function.
|
|
174
|
+
# Default: 5
|
|
175
|
+
max-args = 5
|
|
176
|
+
# The maximum number of branches allowed for a function.
|
|
177
|
+
# Default: 12
|
|
178
|
+
max-branches = 12
|
|
179
|
+
|
|
180
|
+
[format]
|
|
181
|
+
# Like Black, use double quotes for strings.
|
|
182
|
+
quote-style = "double"
|
|
183
|
+
|
|
184
|
+
# Like Black, indent with spaces, rather than tabs.
|
|
185
|
+
indent-style = "space"
|
|
186
|
+
|
|
187
|
+
# Like Black, respect magic trailing commas.
|
|
188
|
+
skip-magic-trailing-comma = false
|
|
189
|
+
|
|
190
|
+
# Like Black, automatically detect the appropriate line ending.
|
|
191
|
+
line-ending = "auto"
|
|
192
|
+
|
|
193
|
+
# Enable auto-formatting of code examples in docstrings. Markdown,
|
|
194
|
+
# reStructuredText code/literal blocks and doctests are all supported.
|
|
195
|
+
#
|
|
196
|
+
# This is currently disabled by default, but it is planned for this
|
|
197
|
+
# to be opt-out in the future.
|
|
198
|
+
docstring-code-format = true
|
|
199
|
+
|
|
200
|
+
# Set the line length limit used when formatting code snippets in
|
|
201
|
+
# docstrings.
|
|
202
|
+
#
|
|
203
|
+
# This only has an effect when the `docstring-code-format` setting is
|
|
204
|
+
# enabled.
|
|
205
|
+
docstring-code-line-length = "dynamic"
|
|
206
|
+
|
|
207
|
+
# Controls the quote style for nested strings inside interpolated string expressions (Python 3.12+).
|
|
208
|
+
# Can be "alternating" (default) or "preferred".
|
|
209
|
+
nested-string-quote-style = "alternating"
|