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.
Files changed (222) hide show
  1. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/gh-issues/SKILL.md +44 -7
  2. ruff_sync-0.1.9.dev1/.agents/workflows/task-lifecycle.md +158 -0
  3. ruff_sync-0.1.9.dev1/.pre-commit-config.yaml +56 -0
  4. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/AGENTS.md +26 -3
  5. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/PKG-INFO +1 -1
  6. ruff_sync-0.1.9.dev1/configs/data-science-engineering/ruff.toml +209 -0
  7. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/configs/fastapi/ruff.toml +88 -23
  8. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/configs/kitchen-sink/ruff.toml +32 -4
  9. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/pre-defined-configs.md +1 -1
  10. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/pyproject.toml +4 -4
  11. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/system.py +7 -5
  12. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/tui/app.py +9 -2
  13. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/tui/screens.py +4 -5
  14. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/tui/types_.py +41 -6
  15. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/tui/widgets.py +11 -6
  16. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/types_.py +3 -2
  17. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/validation.py +1 -1
  18. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/ruff.toml +3 -0
  19. ruff_sync-0.1.9.dev1/tests/test_predefined_configs.py +101 -0
  20. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_rule_logic.py +53 -0
  21. ruff_sync-0.1.9.dev1/tests/test_system.py +193 -0
  22. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/tui/test_tui.py +147 -88
  23. ruff_sync-0.1.9.dev1/tests/tui/test_tui_types.py +163 -0
  24. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/uv.lock +23 -23
  25. ruff_sync-0.1.9.dev0/.pre-commit-config.yaml +0 -45
  26. ruff_sync-0.1.9.dev0/configs/data-science-engineering/ruff.toml +0 -25
  27. ruff_sync-0.1.9.dev0/tests/test_system.py +0 -54
  28. ruff_sync-0.1.9.dev0/tests/tui/test_tui_types.py +0 -87
  29. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/DEPENDENCIES.md +0 -0
  30. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/TESTING.md +0 -0
  31. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/decisions/0001-type-refactoring-strategy.md +0 -0
  32. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/decisions/0002-tui-node-ast.md +0 -0
  33. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/decisions/0003-argument-resolution-layers.md +0 -0
  34. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/decisions/0004-httpx2-respx-test-aliasing.md +0 -0
  35. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/decisions/README.md +0 -0
  36. {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/args_refactor_plan.md +0 -0
  37. {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/cli_animation_plan.md +0 -0
  38. {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/doc-fix.md +0 -0
  39. {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/docs_update_plan.md +0 -0
  40. {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/formatters-architecture.md +0 -0
  41. {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/gitlab-reports.md +0 -0
  42. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/plans/issue-100-roadmap-plan.md +0 -0
  43. {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/issue-102-context.md +0 -0
  44. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/plans/issue-116-config-validation.md +0 -0
  45. {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/tui_design.md +0 -0
  46. {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/tui_requirements.md +0 -0
  47. {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/tui_rule_browsing.md +0 -0
  48. {ruff_sync-0.1.9.dev0/.agents → ruff_sync-0.1.9.dev1/.agents/plans}/tui_rule_browsing_design.md +0 -0
  49. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/ruff.toml +0 -0
  50. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/adr/SKILL.md +0 -0
  51. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/dirty-equals/SKILL.md +0 -0
  52. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/dirty-equals/references/common-matchers.md +0 -0
  53. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/dirty-equals/references/toml-matching.md +0 -0
  54. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/dirty-equals/trigger_eval.json +0 -0
  55. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/mike/SKILL.md +0 -0
  56. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/mike/references/commands.md +0 -0
  57. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/mkdocs-generation/SKILL.md +0 -0
  58. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/mkdocs-generation/examples.md +0 -0
  59. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/mkdocs-generation/templates/api-reference.md +0 -0
  60. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/mkdocs-generation/templates/getting-started.md +0 -0
  61. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/mkdocs-generation/templates/index.md +0 -0
  62. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/mkdocs-generation/templates/mkdocs.yml +0 -0
  63. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/release-notes-generation/SKILL.md +0 -0
  64. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/ruff-sync/SKILL.md +0 -0
  65. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/ruff-sync/references/ci-integration.md +0 -0
  66. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/ruff-sync/references/configuration.md +0 -0
  67. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/ruff-sync/references/troubleshooting.md +0 -0
  68. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/skill-creator/SKILL.md +0 -0
  69. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/skill-creator/references/best-practices.md +0 -0
  70. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/skill-creator/references/evaluating-skills.md +0 -0
  71. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/skill-creator/references/optimizing-descriptions.md +0 -0
  72. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/skill-creator/references/quickstart.md +0 -0
  73. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/skill-creator/references/sources.md +0 -0
  74. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/skill-creator/references/using-scripts.md +0 -0
  75. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/skill-creator/scripts/scaffold_skill.py +0 -0
  76. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/textual/SKILL.md +0 -0
  77. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/textual/examples/basic_app.py +0 -0
  78. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/textual/examples/reactive_example.py +0 -0
  79. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/textual/references/events.md +0 -0
  80. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/textual/references/styling.md +0 -0
  81. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/textual/references/testing.md +0 -0
  82. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/textual/references/widgets.md +0 -0
  83. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/SKILL.md +0 -0
  84. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/evals.json +0 -0
  85. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/references/advanced-narrowing.md +0 -0
  86. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/references/error-code-lookup.md +0 -0
  87. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/references/generics.md +0 -0
  88. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/references/naming.md +0 -0
  89. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/references/protocol-patterns.md +0 -0
  90. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/references/quickstart.md +0 -0
  91. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/references/refactoring-patterns.md +0 -0
  92. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/type-checking/scripts/audit_types.py +0 -0
  93. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/skills/warnings-control/SKILL.md +0 -0
  94. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/workflows/add-test-case.md +0 -0
  95. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/workflows/update-recordings.md +0 -0
  96. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.agents/workflows/update-screenshots.md +0 -0
  97. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.git-blame-ignore-revs +0 -0
  98. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.github/dependabot.yml +0 -0
  99. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.github/workflows/ci.yaml +0 -0
  100. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.github/workflows/codspeed.yaml +0 -0
  101. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.github/workflows/complexity.yaml +0 -0
  102. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.gitignore +0 -0
  103. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/.pre-commit-hooks.yaml +0 -0
  104. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/CONTRIBUTING.md +0 -0
  105. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/LICENSE.md +0 -0
  106. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/README.md +0 -0
  107. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/codecov.yml +0 -0
  108. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/agent-skill.md +0 -0
  109. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/favicon.png +0 -0
  110. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/github-job-summary.png +0 -0
  111. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/github-pr-annotation.png +0 -0
  112. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/inspect-main.png +0 -0
  113. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/inspect-search.png +0 -0
  114. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/logo.png +0 -0
  115. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/recordings/check_drift.gif +0 -0
  116. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/recordings/check_in_sync.gif +0 -0
  117. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/recordings/help_overview.gif +0 -0
  118. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/recordings/init_project.gif +0 -0
  119. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/recordings/pull_basic.gif +0 -0
  120. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/recordings/validate_strict.gif +0 -0
  121. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/ruff_sync_banner.png +0 -0
  122. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/screenshots/dashboard.svg +0 -0
  123. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/screenshots/legend_help.svg +0 -0
  124. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/screenshots/rule_details.svg +0 -0
  125. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/screenshots/screenshot_sample.toml +0 -0
  126. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/assets/screenshots/search_omnibox.svg +0 -0
  127. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/best-practices.md +0 -0
  128. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/ci-integration.md +0 -0
  129. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/configuration.md +0 -0
  130. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/contributing.md +0 -0
  131. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/examples/advanced-config.toml +0 -0
  132. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/examples/basic-config.toml +0 -0
  133. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/gen_ref_pages.py +0 -0
  134. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/index.md +0 -0
  135. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/inspect.md +0 -0
  136. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/installation.md +0 -0
  137. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/overrides/main.html +0 -0
  138. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/overrides/partials/version_warning.html +0 -0
  139. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/pre-commit.md +0 -0
  140. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/troubleshooting.md +0 -0
  141. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/url-resolution.md +0 -0
  142. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/docs/usage.md +0 -0
  143. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/mkdocs.yml +0 -0
  144. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/scripts/check_dogfood.sh +0 -0
  145. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/scripts/generate_tui_screenshots.py +0 -0
  146. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/scripts/gitclone_dogfood.sh +0 -0
  147. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/scripts/pull_dogfood.sh +0 -0
  148. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/skills-lock.json +0 -0
  149. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/.agents/skills/ruff-sync/SKILL.md +0 -0
  150. {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
  151. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/.agents/skills/ruff-sync/references/configuration.md +0 -0
  152. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/.agents/skills/ruff-sync/references/troubleshooting.md +0 -0
  153. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/__init__.py +0 -0
  154. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/__main__.py +0 -0
  155. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/cli.py +0 -0
  156. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/config_io.py +0 -0
  157. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/constants.py +0 -0
  158. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/core.py +0 -0
  159. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/dependencies.py +0 -0
  160. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/formatters.py +0 -0
  161. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/pre_commit.py +0 -0
  162. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/tui/__init__.py +0 -0
  163. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/tui/constants.py +0 -0
  164. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/ruff_sync/tui/themes.py +0 -0
  165. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/src/sitecustomize.py +0 -0
  166. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tapes/_common.tape +0 -0
  167. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tapes/check_drift.tape +0 -0
  168. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tapes/check_in_sync.tape +0 -0
  169. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tapes/help_overview.tape +0 -0
  170. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tapes/init_project.tape +0 -0
  171. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tapes/pull_basic.tape +0 -0
  172. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tapes/validate_strict.tape +0 -0
  173. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tasks.py +0 -0
  174. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/__init__.py +0 -0
  175. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/conftest.py +0 -0
  176. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/multi_upstream_final.toml +0 -0
  177. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/multi_upstream_initial.toml +0 -0
  178. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/multi_upstream_up1.toml +0 -0
  179. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/multi_upstream_up2.toml +0 -0
  180. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_changes_final.toml +0 -0
  181. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_changes_initial.toml +0 -0
  182. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_changes_upstream.toml +0 -0
  183. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_dotted_keys_final.toml +0 -0
  184. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_dotted_keys_initial.toml +0 -0
  185. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_dotted_keys_upstream.toml +0 -0
  186. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_ruff_cfg_final.toml +0 -0
  187. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_ruff_cfg_initial.toml +0 -0
  188. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/no_ruff_cfg_upstream.toml +0 -0
  189. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/readme_excludes_final.toml +0 -0
  190. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/readme_excludes_initial.toml +0 -0
  191. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/readme_excludes_upstream.toml +0 -0
  192. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/standard_final.toml +0 -0
  193. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/standard_initial.toml +0 -0
  194. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/lifecycle_tomls/standard_upstream.toml +0 -0
  195. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_basic.py +0 -0
  196. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_benchmarks.py +0 -0
  197. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_check.py +0 -0
  198. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_ci_integration.py +0 -0
  199. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_ci_validation.py +0 -0
  200. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_config_io.py +0 -0
  201. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_config_validation.py +0 -0
  202. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_constants.py +0 -0
  203. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_corner_cases.py +0 -0
  204. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_dependencies.py +0 -0
  205. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_deprecation.py +0 -0
  206. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_e2e.py +0 -0
  207. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_formatters.py +0 -0
  208. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_git_fetch.py +0 -0
  209. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_minimal_imports.sh +0 -0
  210. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_pre_commit.py +0 -0
  211. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_project.py +0 -0
  212. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_scaffold.py +0 -0
  213. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_serialization.py +0 -0
  214. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_toml_operations.py +0 -0
  215. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_url_handling.py +0 -0
  216. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/test_whitespace.py +0 -0
  217. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/tui/__init__.py +0 -0
  218. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/tui/conftest.py +0 -0
  219. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/tui/test_themes.py +0 -0
  220. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/w_ruff_sync_cfg/pyproject.toml +0 -0
  221. {ruff_sync-0.1.9.dev0 → ruff_sync-0.1.9.dev1}/tests/wo_ruff_cfg/pyproject.toml +0 -0
  222. {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 (e.g. research docs) to GitHub.
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
- - [GitHub CLI manual](https://cli.github.com/manual/gh_issue)
181
- - [GitHub cross-referencing issues](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/autolinked-references-and-urls#issues-and-pull-requests)
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.15.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/ # [NEW] Canonical physical skill source directory (packaged into wheels)
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.dev0
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"