boilersync 1.2.18__tar.gz → 1.2.19__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 (62) hide show
  1. {boilersync-1.2.18 → boilersync-1.2.19}/PKG-INFO +1 -1
  2. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/_version.py +2 -2
  3. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/file_ignores.py +18 -0
  4. {boilersync-1.2.18 → boilersync-1.2.19}/tests/test_diff.py +28 -0
  5. {boilersync-1.2.18 → boilersync-1.2.19}/.cursor/rules/adding-commands.mdc +0 -0
  6. {boilersync-1.2.18 → boilersync-1.2.19}/.cursor/rules/project-description.mdc +0 -0
  7. {boilersync-1.2.18 → boilersync-1.2.19}/.cursor/rules/python-conventions.mdc +0 -0
  8. {boilersync-1.2.18 → boilersync-1.2.19}/.github/workflows/auto-tag.yml +0 -0
  9. {boilersync-1.2.18 → boilersync-1.2.19}/.github/workflows/deploy-docs.yml +0 -0
  10. {boilersync-1.2.18 → boilersync-1.2.19}/.gitignore +0 -0
  11. {boilersync-1.2.18 → boilersync-1.2.19}/.vscode/launch.json +0 -0
  12. {boilersync-1.2.18 → boilersync-1.2.19}/.vscode/settings.json +0 -0
  13. {boilersync-1.2.18 → boilersync-1.2.19}/.vscode/tasks.json +0 -0
  14. {boilersync-1.2.18 → boilersync-1.2.19}/PROBLEMS.md +0 -0
  15. {boilersync-1.2.18 → boilersync-1.2.19}/README.md +0 -0
  16. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/__init__.py +0 -0
  17. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/__main__.py +0 -0
  18. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/cli.py +0 -0
  19. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/cli_helpers.py +0 -0
  20. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/commands/__init__.py +0 -0
  21. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/commands/check_pull.py +0 -0
  22. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/commands/diff.py +0 -0
  23. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/commands/init.py +0 -0
  24. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/commands/pull.py +0 -0
  25. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/commands/pull_proposal.py +0 -0
  26. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/commands/push.py +0 -0
  27. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/commands/templates.py +0 -0
  28. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/comparison.py +0 -0
  29. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/errors.py +0 -0
  30. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/interpolation_context.py +0 -0
  31. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/logging.py +0 -0
  32. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/names.py +0 -0
  33. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/paths.py +0 -0
  34. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/project_context.py +0 -0
  35. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/project_metadata.py +0 -0
  36. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/template_ownership.py +0 -0
  37. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/template_processor.py +0 -0
  38. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/template_sources.py +0 -0
  39. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/template_workspace.py +0 -0
  40. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/utils.py +0 -0
  41. {boilersync-1.2.18 → boilersync-1.2.19}/boilersync/variable_collector.py +0 -0
  42. {boilersync-1.2.18 → boilersync-1.2.19}/docs/ensemble.md +0 -0
  43. {boilersync-1.2.18 → boilersync-1.2.19}/docs/index.md +0 -0
  44. {boilersync-1.2.18 → boilersync-1.2.19}/docs/project-metadata.md +0 -0
  45. {boilersync-1.2.18 → boilersync-1.2.19}/docs/template-metadata.md +0 -0
  46. {boilersync-1.2.18 → boilersync-1.2.19}/mkdocs.yml +0 -0
  47. {boilersync-1.2.18 → boilersync-1.2.19}/pyproject.toml +0 -0
  48. {boilersync-1.2.18 → boilersync-1.2.19}/scripts/build.sh +0 -0
  49. {boilersync-1.2.18 → boilersync-1.2.19}/tests/__init__.py +0 -0
  50. {boilersync-1.2.18 → boilersync-1.2.19}/tests/test_check_pull.py +0 -0
  51. {boilersync-1.2.18 → boilersync-1.2.19}/tests/test_filename_interpolation.py +0 -0
  52. {boilersync-1.2.18 → boilersync-1.2.19}/tests/test_init_runtime_features.py +0 -0
  53. {boilersync-1.2.18 → boilersync-1.2.19}/tests/test_interpolation_context.py +0 -0
  54. {boilersync-1.2.18 → boilersync-1.2.19}/tests/test_paths.py +0 -0
  55. {boilersync-1.2.18 → boilersync-1.2.19}/tests/test_pull_proposal.py +0 -0
  56. {boilersync-1.2.18 → boilersync-1.2.19}/tests/test_push_inheritance.py +0 -0
  57. {boilersync-1.2.18 → boilersync-1.2.19}/tests/test_template_inheritance.py +0 -0
  58. {boilersync-1.2.18 → boilersync-1.2.19}/tests/test_template_sources.py +0 -0
  59. {boilersync-1.2.18 → boilersync-1.2.19}/tests/test_templates_commands.py +0 -0
  60. {boilersync-1.2.18 → boilersync-1.2.19}/tests/test_templates_init.py +0 -0
  61. {boilersync-1.2.18 → boilersync-1.2.19}/tests/test_variable_collection.py +0 -0
  62. {boilersync-1.2.18 → boilersync-1.2.19}/tests/test_variable_type_conversion.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boilersync
3
- Version: 1.2.18
3
+ Version: 1.2.19
4
4
  Summary: BoilerSync
5
5
  Project-URL: Repository, https://github.com/gabemontague/boilersync
6
6
  Project-URL: Issues, https://github.com/gabemontague/boilersync/issues
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.2.18'
22
- __version_tuple__ = version_tuple = (1, 2, 18)
21
+ __version__ = version = '1.2.19'
22
+ __version_tuple__ = version_tuple = (1, 2, 19)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -23,6 +23,20 @@ def is_default_copy_ignored(path: Path) -> bool:
23
23
  return any(part in DEFAULT_COPY_IGNORED_NAMES for part in path.parts)
24
24
 
25
25
 
26
+ def is_agents_compatibility_symlink(root_dir: Path, path: Path) -> bool:
27
+ if path != Path("CLAUDE.md"):
28
+ return False
29
+
30
+ source = root_dir / path
31
+ if not source.is_symlink():
32
+ return False
33
+
34
+ try:
35
+ return source.readlink() == Path("AGENTS.md")
36
+ except OSError:
37
+ return False
38
+
39
+
26
40
  def git_visible_files(root_dir: Path) -> list[Path] | None:
27
41
  """Return git-visible file paths relative to root_dir, or None outside git.
28
42
 
@@ -66,6 +80,8 @@ def git_visible_files(root_dir: Path) -> list[Path] | None:
66
80
  path = Path(raw_path.decode("utf-8", errors="surrogateescape"))
67
81
  if path.is_absolute() or ".." in path.parts or is_default_copy_ignored(path):
68
82
  continue
83
+ if is_agents_compatibility_symlink(root_dir, path):
84
+ continue
69
85
  if (root_dir / path).is_file():
70
86
  paths.append(path)
71
87
  return paths
@@ -83,6 +99,8 @@ def copyable_project_files(root_dir: Path) -> list[Path]:
83
99
  relative_path = item.relative_to(root_dir)
84
100
  if is_default_copy_ignored(relative_path):
85
101
  continue
102
+ if is_agents_compatibility_symlink(root_dir, relative_path):
103
+ continue
86
104
  paths.append(relative_path)
87
105
  return paths
88
106
 
@@ -213,6 +213,34 @@ class TestDiff(unittest.TestCase):
213
213
  self.assertEqual(result.exit_code, 0, result.output)
214
214
  self.assertIn("No divergence from template.", result.output)
215
215
 
216
+ def test_diff_ignores_claude_agents_compatibility_symlink(self) -> None:
217
+ _write_template(
218
+ self.template_root_dir,
219
+ org=self.org,
220
+ repo=self.repo,
221
+ subdir="agents-template",
222
+ files={"AGENTS.md.boilersync": "$${name_pretty} instructions\n"},
223
+ config={"skip_git": True},
224
+ )
225
+
226
+ target_dir = self.root / "agents-project"
227
+ target_dir.mkdir()
228
+ init(
229
+ self._template_ref("agents-template"),
230
+ target_dir=target_dir,
231
+ template_variables={
232
+ "name_snake": "agents_project",
233
+ "name_pretty": "Agents Project",
234
+ },
235
+ no_input=True,
236
+ )
237
+ (target_dir / "CLAUDE.md").symlink_to("AGENTS.md")
238
+
239
+ result = self._invoke_diff(target_dir, "--name-status")
240
+
241
+ self.assertEqual(result.exit_code, 0, result.output)
242
+ self.assertIn("No divergence from template.", result.output)
243
+
216
244
  def test_starter_files_are_excluded_by_default_and_included_on_request(
217
245
  self,
218
246
  ) -> None:
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes