clsync 1.1.2__tar.gz → 1.1.3__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 (132) hide show
  1. clsync-1.1.3/.claude/.gitkeep +1 -0
  2. {clsync-1.1.2 → clsync-1.1.3}/.gitlab-ci.yml +15 -0
  3. clsync-1.1.3/.pip-cache/http-v2/0/e/d/3/3/0ed336d749e009fe1267c844e36c442e5b3dc645d5eb9865c545b81a +0 -0
  4. clsync-1.1.3/.pip-cache/http-v2/1/5/9/c/5/159c56e4ec3c8e71dacef647c600365ad192876d095dd29b5b5c8ace +0 -0
  5. clsync-1.1.3/.pip-cache/http-v2/1/5/9/c/5/159c56e4ec3c8e71dacef647c600365ad192876d095dd29b5b5c8ace.body +0 -0
  6. clsync-1.1.3/.pip-cache/http-v2/2/4/d/b/9/24db9366753b8559a96fe294a29ebf32f13c5cff54739e41b20a46e8 +0 -0
  7. clsync-1.1.3/.pip-cache/http-v2/2/4/d/b/9/24db9366753b8559a96fe294a29ebf32f13c5cff54739e41b20a46e8.body +0 -0
  8. clsync-1.1.3/.pip-cache/http-v2/2/8/3/9/a/2839a1e60014c8f0cdf9453a6036b2fef7bf06342761e3d37258b029 +0 -0
  9. clsync-1.1.3/.pip-cache/http-v2/2/b/c/2/8/2bc2855ae0ee0448fa088e265e6d7cf5bce69889ce23abb6cc761c44 +0 -0
  10. clsync-1.1.2/.pip-cache/http-v2/9/2/8/c/7/928c755db48c17282ed7a16aa7cbf0ae7aa370d2e20d939a3292aa75.body → clsync-1.1.3/.pip-cache/http-v2/2/b/c/2/8/2bc2855ae0ee0448fa088e265e6d7cf5bce69889ce23abb6cc761c44.body +1 -1
  11. clsync-1.1.3/.pip-cache/http-v2/3/3/9/7/4/33974f84394d9a943f68359da08431dab4af9f86c33962982ea21b5f +0 -0
  12. clsync-1.1.3/.pip-cache/http-v2/3/3/9/7/4/33974f84394d9a943f68359da08431dab4af9f86c33962982ea21b5f.body +0 -0
  13. clsync-1.1.3/.pip-cache/http-v2/4/3/6/8/4/436846b847c9c90a13539a872e2084e3f9ca23eb93b4b1cc44b55964 +0 -0
  14. clsync-1.1.2/.pip-cache/http-v2/3/c/e/7/7/3ce770df07ea321ab056bed31a67391a50e82aea9460d349fd057276.body → clsync-1.1.3/.pip-cache/http-v2/4/3/6/8/4/436846b847c9c90a13539a872e2084e3f9ca23eb93b4b1cc44b55964.body +10 -5
  15. clsync-1.1.2/.pip-cache/http-v2/6/2/e/2/c/62e2caaadb9fd2d0a88b65a7d2043b2c343936491ef44dc753aa91e0 → clsync-1.1.3/.pip-cache/http-v2/4/4/e/5/b/44e5b11a6caa92636d8ccfe658d420ba4ed8f67f7f4e835b214255aa +0 -0
  16. clsync-1.1.3/.pip-cache/http-v2/4/4/e/5/b/44e5b11a6caa92636d8ccfe658d420ba4ed8f67f7f4e835b214255aa.body +0 -0
  17. clsync-1.1.3/.pip-cache/http-v2/4/5/8/c/7/458c7a7721c5d95619ebccea457715f5b1720258d02ce8362016a55c +0 -0
  18. clsync-1.1.2/.pip-cache/http-v2/c/5/2/e/2/c52e2f1dd5b9608ced10cc1a661cb4850330552cdc6801105598d8e4.body → clsync-1.1.3/.pip-cache/http-v2/4/5/8/c/7/458c7a7721c5d95619ebccea457715f5b1720258d02ce8362016a55c.body +40 -4
  19. clsync-1.1.3/.pip-cache/http-v2/6/2/e/2/c/62e2caaadb9fd2d0a88b65a7d2043b2c343936491ef44dc753aa91e0 +0 -0
  20. clsync-1.1.3/.pip-cache/http-v2/6/2/e/2/c/62e2caaadb9fd2d0a88b65a7d2043b2c343936491ef44dc753aa91e0.body +0 -0
  21. clsync-1.1.3/.pip-cache/http-v2/8/c/5/4/2/8c54213ac80b2536d9dbc88d24229468300e07d0d4883935e180e4d8 +0 -0
  22. clsync-1.1.3/.pip-cache/http-v2/8/c/5/4/2/8c54213ac80b2536d9dbc88d24229468300e07d0d4883935e180e4d8.body +0 -0
  23. clsync-1.1.3/.pip-cache/http-v2/9/1/6/f/8/916f8e59eed25dd14a24a0bf49b437757fe356d363efd6ede438087f +0 -0
  24. clsync-1.1.2/.pip-cache/http-v2/a/d/f/d/a/adfdac1a71358ae7b47b92917f8a6af8c5acecccb52b186c45372c03.body → clsync-1.1.3/.pip-cache/http-v2/9/1/6/f/8/916f8e59eed25dd14a24a0bf49b437757fe356d363efd6ede438087f.body +0 -0
  25. clsync-1.1.3/.pip-cache/http-v2/9/e/d/3/7/9ed377a761861346a483546ee4ebbe92a83f2d3a40e917849c2eb140 +0 -0
  26. clsync-1.1.3/.pip-cache/http-v2/9/e/d/3/7/9ed377a761861346a483546ee4ebbe92a83f2d3a40e917849c2eb140.body +0 -0
  27. clsync-1.1.3/.pip-cache/http-v2/a/1/9/5/3/a19537d3cf37c122db841d6fe4cd322bc10d1a558bb00d146b85cb9a +0 -0
  28. clsync-1.1.3/.pip-cache/http-v2/a/1/9/5/3/a19537d3cf37c122db841d6fe4cd322bc10d1a558bb00d146b85cb9a.body +0 -0
  29. {clsync-1.1.2 → clsync-1.1.3}/.pip-cache/http-v2/b/9/3/9/c/b939c4552b20c2f2a36204f6bb1d2e526af7e96070b43b1d2e2e9ae4 +0 -0
  30. clsync-1.1.3/.pip-cache/http-v2/c/5/5/1/6/c5516052911272854847b94d1c7e5dcdda18d04768795c313b9958bc +0 -0
  31. clsync-1.1.2/.pip-cache/http-v2/8/3/2/5/0/832505e3888a5751a777d9654bf14eb54b92aa42dfc569c4812d43cf.body → clsync-1.1.3/.pip-cache/http-v2/c/5/5/1/6/c5516052911272854847b94d1c7e5dcdda18d04768795c313b9958bc.body +4 -4
  32. clsync-1.1.3/.pip-cache/http-v2/c/d/2/3/6/cd2366d413a2e8e87377cfadece7d8173562ece48b2be25218d5714a +0 -0
  33. clsync-1.1.3/.pip-cache/http-v2/c/d/2/3/6/cd2366d413a2e8e87377cfadece7d8173562ece48b2be25218d5714a.body +0 -0
  34. clsync-1.1.3/.pip-cache/http-v2/c/d/e/c/3/cdec3d0140a615c153130a37691576ea1707e32a1ab5e60ae5a540f4 +0 -0
  35. clsync-1.1.3/.pip-cache/http-v2/c/d/e/c/3/cdec3d0140a615c153130a37691576ea1707e32a1ab5e60ae5a540f4.body +0 -0
  36. clsync-1.1.3/.pip-cache/http-v2/e/d/3/a/c/ed3acad79bebd48e93f9254a4702825f833ffd8119c8d2cbff43abfc +0 -0
  37. clsync-1.1.3/.pip-cache/http-v2/e/d/3/a/c/ed3acad79bebd48e93f9254a4702825f833ffd8119c8d2cbff43abfc.body +0 -0
  38. clsync-1.1.3/.pip-cache/http-v2/f/2/d/a/b/f2dabcdf97e445f98036aadbe7dddc4c9ecb47a8a60783427f548b2c +0 -0
  39. clsync-1.1.2/.pip-cache/http-v2/6/a/0/8/8/6a088fc192b69f4692b96903e0d1df2f92839b402221a47a2ca3b5be.body → clsync-1.1.3/.pip-cache/http-v2/f/2/d/a/b/f2dabcdf97e445f98036aadbe7dddc4c9ecb47a8a60783427f548b2c.body +1 -1
  40. clsync-1.1.3/.pip-cache/http-v2/f/3/6/d/5/f36d58c71164036f2cff3c9d0bb0c2b4d1d94bd0814c26b9cbe036b2 +0 -0
  41. clsync-1.1.3/.pip-cache/http-v2/f/3/6/d/5/f36d58c71164036f2cff3c9d0bb0c2b4d1d94bd0814c26b9cbe036b2.body +0 -0
  42. clsync-1.1.3/.pip-cache/http-v2/f/9/9/b/3/f99b3487d2b9c55edcd311aeafa35cbf852ab2cc5c3f5d1a1a08e2b5 +0 -0
  43. clsync-1.1.3/.pip-cache/selfcheck/fe300af6f7d708c14827daac3afc81fbb8306b73de8dd6e3f1f8ea3b +1 -0
  44. {clsync-1.1.2 → clsync-1.1.3}/PKG-INFO +1 -1
  45. {clsync-1.1.2/src/claude_sync/templates → clsync-1.1.3}/pipeline/synthesize.py +14 -1
  46. {clsync-1.1.2 → clsync-1.1.3}/pyproject.toml +1 -1
  47. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/bootstrap.py +3 -1
  48. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/templates/github-workflow.yml +10 -0
  49. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/templates/gitlab-ci.yml +14 -1
  50. {clsync-1.1.2 → clsync-1.1.3/src/claude_sync/templates}/pipeline/synthesize.py +14 -1
  51. {clsync-1.1.2 → clsync-1.1.3}/tests/test_config.py +1 -1
  52. clsync-1.1.2/.pip-cache/http-v2/0/3/5/9/5/03595f024098ed084eba12d86fd2749d935b061fa35d6b1f18cc0b84 +0 -0
  53. clsync-1.1.2/.pip-cache/http-v2/0/3/5/9/5/03595f024098ed084eba12d86fd2749d935b061fa35d6b1f18cc0b84.body +0 -139
  54. clsync-1.1.2/.pip-cache/http-v2/0/e/d/3/3/0ed336d749e009fe1267c844e36c442e5b3dc645d5eb9865c545b81a +0 -0
  55. clsync-1.1.2/.pip-cache/http-v2/1/0/f/7/b/10f7b6adbfb7d3cd4bc86e1d6fb49a2b3aa9d3e5b1bb00aa757f9b45 +0 -0
  56. clsync-1.1.2/.pip-cache/http-v2/1/0/f/7/b/10f7b6adbfb7d3cd4bc86e1d6fb49a2b3aa9d3e5b1bb00aa757f9b45.body +0 -0
  57. clsync-1.1.2/.pip-cache/http-v2/2/8/3/9/a/2839a1e60014c8f0cdf9453a6036b2fef7bf06342761e3d37258b029 +0 -0
  58. clsync-1.1.2/.pip-cache/http-v2/3/3/9/7/4/33974f84394d9a943f68359da08431dab4af9f86c33962982ea21b5f +0 -0
  59. clsync-1.1.2/.pip-cache/http-v2/3/3/9/7/4/33974f84394d9a943f68359da08431dab4af9f86c33962982ea21b5f.body +0 -0
  60. clsync-1.1.2/.pip-cache/http-v2/3/c/e/7/7/3ce770df07ea321ab056bed31a67391a50e82aea9460d349fd057276 +0 -0
  61. clsync-1.1.2/.pip-cache/http-v2/4/4/e/5/b/44e5b11a6caa92636d8ccfe658d420ba4ed8f67f7f4e835b214255aa +0 -0
  62. clsync-1.1.2/.pip-cache/http-v2/4/4/e/5/b/44e5b11a6caa92636d8ccfe658d420ba4ed8f67f7f4e835b214255aa.body +0 -0
  63. clsync-1.1.2/.pip-cache/http-v2/6/2/e/2/c/62e2caaadb9fd2d0a88b65a7d2043b2c343936491ef44dc753aa91e0.body +0 -0
  64. clsync-1.1.2/.pip-cache/http-v2/6/a/0/8/8/6a088fc192b69f4692b96903e0d1df2f92839b402221a47a2ca3b5be +0 -0
  65. clsync-1.1.2/.pip-cache/http-v2/8/3/2/5/0/832505e3888a5751a777d9654bf14eb54b92aa42dfc569c4812d43cf +0 -0
  66. clsync-1.1.2/.pip-cache/http-v2/8/c/5/4/2/8c54213ac80b2536d9dbc88d24229468300e07d0d4883935e180e4d8 +0 -0
  67. clsync-1.1.2/.pip-cache/http-v2/8/c/5/4/2/8c54213ac80b2536d9dbc88d24229468300e07d0d4883935e180e4d8.body +0 -0
  68. clsync-1.1.2/.pip-cache/http-v2/9/2/8/c/7/928c755db48c17282ed7a16aa7cbf0ae7aa370d2e20d939a3292aa75 +0 -0
  69. clsync-1.1.2/.pip-cache/http-v2/9/e/a/1/5/9ea15e1a7a7a1cb9950b76e2e3c06da4d07100bc185f905f6e33e283 +0 -0
  70. clsync-1.1.2/.pip-cache/http-v2/9/e/a/1/5/9ea15e1a7a7a1cb9950b76e2e3c06da4d07100bc185f905f6e33e283.body +0 -0
  71. clsync-1.1.2/.pip-cache/http-v2/9/e/d/3/7/9ed377a761861346a483546ee4ebbe92a83f2d3a40e917849c2eb140 +0 -0
  72. clsync-1.1.2/.pip-cache/http-v2/9/e/d/3/7/9ed377a761861346a483546ee4ebbe92a83f2d3a40e917849c2eb140.body +0 -0
  73. clsync-1.1.2/.pip-cache/http-v2/a/1/9/5/3/a19537d3cf37c122db841d6fe4cd322bc10d1a558bb00d146b85cb9a +0 -0
  74. clsync-1.1.2/.pip-cache/http-v2/a/1/9/5/3/a19537d3cf37c122db841d6fe4cd322bc10d1a558bb00d146b85cb9a.body +0 -0
  75. clsync-1.1.2/.pip-cache/http-v2/a/d/3/4/4/ad344e8dcc28c72166da85db3d3c34ea7bd39531944f502465cf3a50 +0 -0
  76. clsync-1.1.2/.pip-cache/http-v2/a/d/3/4/4/ad344e8dcc28c72166da85db3d3c34ea7bd39531944f502465cf3a50.body +0 -0
  77. clsync-1.1.2/.pip-cache/http-v2/a/d/f/d/a/adfdac1a71358ae7b47b92917f8a6af8c5acecccb52b186c45372c03 +0 -0
  78. clsync-1.1.2/.pip-cache/http-v2/a/f/0/b/4/af0b4f3ea11a267af8c06f6fa9fa74e1a06b91e221cbd34f379bb11c +0 -0
  79. clsync-1.1.2/.pip-cache/http-v2/a/f/0/b/4/af0b4f3ea11a267af8c06f6fa9fa74e1a06b91e221cbd34f379bb11c.body +0 -0
  80. clsync-1.1.2/.pip-cache/http-v2/c/5/2/e/2/c52e2f1dd5b9608ced10cc1a661cb4850330552cdc6801105598d8e4 +0 -0
  81. clsync-1.1.2/.pip-cache/http-v2/c/6/f/3/1/c6f3192810e6b78a08fee1da61557cd4bdd93a63331b9d474bca9d38 +0 -0
  82. clsync-1.1.2/.pip-cache/http-v2/c/6/f/3/1/c6f3192810e6b78a08fee1da61557cd4bdd93a63331b9d474bca9d38.body +0 -0
  83. clsync-1.1.2/.pip-cache/http-v2/c/d/2/3/6/cd2366d413a2e8e87377cfadece7d8173562ece48b2be25218d5714a +0 -0
  84. clsync-1.1.2/.pip-cache/http-v2/c/d/2/3/6/cd2366d413a2e8e87377cfadece7d8173562ece48b2be25218d5714a.body +0 -0
  85. clsync-1.1.2/.pip-cache/http-v2/f/3/6/d/5/f36d58c71164036f2cff3c9d0bb0c2b4d1d94bd0814c26b9cbe036b2 +0 -0
  86. clsync-1.1.2/.pip-cache/http-v2/f/3/6/d/5/f36d58c71164036f2cff3c9d0bb0c2b4d1d94bd0814c26b9cbe036b2.body +0 -0
  87. clsync-1.1.2/.pip-cache/http-v2/f/9/9/b/3/f99b3487d2b9c55edcd311aeafa35cbf852ab2cc5c3f5d1a1a08e2b5 +0 -0
  88. clsync-1.1.2/.pip-cache/selfcheck/fe300af6f7d708c14827daac3afc81fbb8306b73de8dd6e3f1f8ea3b +0 -1
  89. {clsync-1.1.2 → clsync-1.1.3}/.gitignore +0 -0
  90. {clsync-1.1.2 → clsync-1.1.3}/.pip-cache/http-v2/0/e/d/3/3/0ed336d749e009fe1267c844e36c442e5b3dc645d5eb9865c545b81a.body +0 -0
  91. {clsync-1.1.2 → clsync-1.1.3}/.pip-cache/http-v2/2/8/3/9/a/2839a1e60014c8f0cdf9453a6036b2fef7bf06342761e3d37258b029.body +0 -0
  92. {clsync-1.1.2 → clsync-1.1.3}/.pip-cache/http-v2/b/9/3/9/c/b939c4552b20c2f2a36204f6bb1d2e526af7e96070b43b1d2e2e9ae4.body +0 -0
  93. {clsync-1.1.2 → clsync-1.1.3}/.pip-cache/http-v2/f/9/9/b/3/f99b3487d2b9c55edcd311aeafa35cbf852ab2cc5c3f5d1a1a08e2b5.body +0 -0
  94. {clsync-1.1.2 → clsync-1.1.3}/CLAUDE.md +0 -0
  95. {clsync-1.1.2 → clsync-1.1.3}/LICENSE +0 -0
  96. {clsync-1.1.2 → clsync-1.1.3}/README.md +0 -0
  97. {clsync-1.1.2 → clsync-1.1.3}/pipeline/models.py +0 -0
  98. {clsync-1.1.2 → clsync-1.1.3}/pipeline/prompts/synthesize_claude_md.txt +0 -0
  99. {clsync-1.1.2 → clsync-1.1.3}/pipeline/prompts/synthesize_critic.txt +0 -0
  100. {clsync-1.1.2 → clsync-1.1.3}/pipeline/requirements.txt +0 -0
  101. {clsync-1.1.2 → clsync-1.1.3}/project-specification.md +0 -0
  102. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/__init__.py +0 -0
  103. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/apply.py +0 -0
  104. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/ci_provider.py +0 -0
  105. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/claude_paths.py +0 -0
  106. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/cli.py +0 -0
  107. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/config.py +0 -0
  108. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/git_ops.py +0 -0
  109. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/gitlab_api.py +0 -0
  110. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/lock.py +0 -0
  111. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/models.py +0 -0
  112. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/prompts/bootstrap.txt +0 -0
  113. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/scaffold.py +0 -0
  114. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/snapshot.py +0 -0
  115. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/templates/__init__.py +0 -0
  116. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/templates/gitignore +0 -0
  117. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/templates/pipeline/models.py +0 -0
  118. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/templates/pipeline/prompts/synthesize_claude_md.txt +0 -0
  119. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/templates/pipeline/prompts/synthesize_critic.txt +0 -0
  120. {clsync-1.1.2 → clsync-1.1.3}/src/claude_sync/templates/pipeline/requirements.txt +0 -0
  121. {clsync-1.1.2 → clsync-1.1.3}/tests/fixtures/machine_a/global/CLAUDE.md +0 -0
  122. {clsync-1.1.2 → clsync-1.1.3}/tests/fixtures/machine_a/projects/my-app/CLAUDE.md +0 -0
  123. {clsync-1.1.2 → clsync-1.1.3}/tests/fixtures/machine_b/global/CLAUDE.md +0 -0
  124. {clsync-1.1.2 → clsync-1.1.3}/tests/test_apply.py +0 -0
  125. {clsync-1.1.2 → clsync-1.1.3}/tests/test_bootstrap.py +0 -0
  126. {clsync-1.1.2 → clsync-1.1.3}/tests/test_claude_paths.py +0 -0
  127. {clsync-1.1.2 → clsync-1.1.3}/tests/test_git_ops.py +0 -0
  128. {clsync-1.1.2 → clsync-1.1.3}/tests/test_gitlab_api.py +0 -0
  129. {clsync-1.1.2 → clsync-1.1.3}/tests/test_lock.py +0 -0
  130. {clsync-1.1.2 → clsync-1.1.3}/tests/test_scaffold.py +0 -0
  131. {clsync-1.1.2 → clsync-1.1.3}/tests/test_snapshot.py +0 -0
  132. {clsync-1.1.2 → clsync-1.1.3}/tests/test_synthesize.py +0 -0
@@ -0,0 +1 @@
1
+
@@ -19,6 +19,21 @@ build_wheel:
19
19
  paths:
20
20
  - .pip-cache/
21
21
  script:
22
+ # The package version is hardcoded in pyproject.toml and is NOT derived from
23
+ # the tag. Assert they agree before building, so a forgotten version bump
24
+ # fails here with a clear message instead of at the twine upload step with
25
+ # an opaque "File already exists" 400.
26
+ - |
27
+ if [ -n "$CI_COMMIT_TAG" ]; then
28
+ PROJECT_VERSION=$(python -c "import tomllib, pathlib; print(tomllib.loads(pathlib.Path('pyproject.toml').read_text(encoding='utf-8'))['project']['version'])")
29
+ if [ "$CI_COMMIT_TAG" != "v${PROJECT_VERSION}" ]; then
30
+ echo "ERROR: tag '${CI_COMMIT_TAG}' does not match pyproject.toml version '${PROJECT_VERSION}'."
31
+ echo "Expected the tag to be 'v${PROJECT_VERSION}'."
32
+ echo "Bump the version in pyproject.toml in the same commit as the change, then retag."
33
+ exit 1
34
+ fi
35
+ echo "Tag '${CI_COMMIT_TAG}' matches pyproject.toml version '${PROJECT_VERSION}'."
36
+ fi
22
37
  - pip install build
23
38
  - python -m build
24
39
  artifacts:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hatchling
3
- Version: 1.29.0
3
+ Version: 1.31.0
4
4
  Summary: Modern, extensible Python build backend
5
5
  Project-URL: Homepage, https://hatch.pypa.io/latest/
6
6
  Project-URL: Sponsor, https://github.com/sponsors/ofek
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: packaging
3
- Version: 26.0
3
+ Version: 26.2
4
4
  Summary: Core utilities for Python packages
5
5
  Author-email: Donald Stufft <donald@stufft.io>
6
6
  Requires-Python: >=3.8
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.13
20
20
  Classifier: Programming Language :: Python :: 3.14
21
21
  Classifier: Programming Language :: Python :: Implementation :: CPython
22
22
  Classifier: Programming Language :: Python :: Implementation :: PyPy
23
+ Classifier: Programming Language :: Python :: Free Threading :: 4 - Resilient
23
24
  Classifier: Typing :: Typed
24
25
  License-File: LICENSE
25
26
  License-File: LICENSE.APACHE
@@ -52,10 +53,14 @@ The `documentation`_ provides information and the API for the following:
52
53
  - Version Handling
53
54
  - Specifiers
54
55
  - Markers
56
+ - Licenses
55
57
  - Requirements
56
- - Tags
57
58
  - Metadata
58
- - Lockfiles
59
+ - Tags
60
+ - Lockfiles (pylock)
61
+ - Direct URL helpers
62
+ - Dependency groups
63
+ - Errors
59
64
  - Utilities
60
65
 
61
66
  Installation
@@ -72,11 +77,11 @@ Discussion
72
77
 
73
78
  If you run into bugs, you can file them in our `issue tracker`_.
74
79
 
75
- You can also join ``#pypa`` on Freenode to ask questions or get involved.
76
-
80
+ You can also join discussions on `GitHub Discussions`_ to ask questions or get involved.
77
81
 
78
82
  .. _`documentation`: https://packaging.pypa.io/
79
83
  .. _`issue tracker`: https://github.com/pypa/packaging/issues
84
+ .. _`GitHub Discussions`: https://github.com/pypa/packaging/discussions
80
85
 
81
86
 
82
87
  Code of Conduct
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pathspec
3
- Version: 1.0.4
3
+ Version: 1.1.1
4
4
  Summary: Utility library for gitignore style pattern matching of file paths.
5
5
  Author-email: "Caleb P. Burns" <cpburnz@gmail.com>
6
6
  Requires-Python: >=3.9
@@ -25,15 +25,13 @@ License-File: LICENSE
25
25
  Requires-Dist: hyperscan >=0.7 ; extra == "hyperscan"
26
26
  Requires-Dist: typing-extensions >=4 ; extra == "optional"
27
27
  Requires-Dist: google-re2 >=1.1 ; extra == "re2"
28
- Requires-Dist: pytest >=9 ; extra == "tests"
29
- Requires-Dist: typing-extensions >=4.15 ; extra == "tests"
28
+ Project-URL: Change Log, https://python-path-specification.readthedocs.io/en/latest/changes.html
30
29
  Project-URL: Documentation, https://python-path-specification.readthedocs.io/en/latest/index.html
31
30
  Project-URL: Issue Tracker, https://github.com/cpburnz/python-pathspec/issues
32
31
  Project-URL: Source Code, https://github.com/cpburnz/python-pathspec
33
32
  Provides-Extra: hyperscan
34
33
  Provides-Extra: optional
35
34
  Provides-Extra: re2
36
- Provides-Extra: tests
37
35
 
38
36
 
39
37
  PathSpec
@@ -264,9 +262,47 @@ Change History
264
262
  ==============
265
263
 
266
264
 
265
+ 1.1.1 (2026-04-26)
266
+ ------------------
267
+
268
+ Improvements:
269
+
270
+ - Improved type checking with mypy and pyright.
271
+
272
+ Bug fixes:
273
+
274
+ - Fixed typing on `PathSpec[TPattern]` to `PathSpec[TPattern_co]`.
275
+ - Added missing variant type-hint `type[Pattern]` to `PathSpec.from_lines()` parameter `pattern_factory`.
276
+ - Fixed possible type error when using `+` and `+=` operators on `PathSpec`.
277
+
278
+
279
+ 1.1.0 (2026-04-22)
280
+ ------------------
281
+
282
+ New features:
283
+
284
+ - `Issue #108`_: Specialize pattern type for `PathSpec` as `PathSpec[TPattern]` for better debugging of `PathSpec().patterns`.
285
+
286
+ Bug fixes:
287
+
288
+ - `Issue #93`_: Git discards invalid range notation. `GitIgnoreSpecPattern` now discards patterns with invalid range notation like Git.
289
+ - `Pull #106`_: Fix escape() not escaping backslash characters.
290
+
291
+ Improvements:
292
+
293
+ - `Pull #110`_: Nicer debug print outs (and str for regex pattern).
294
+
295
+
296
+ .. _`Pull #106`: https://github.com/cpburnz/python-pathspec/pull/106
297
+ .. _`Issue #108`: https://github.com/cpburnz/python-pathspec/issues/108
298
+ .. _`Pull #110`: https://github.com/cpburnz/python-pathspec/pull/110
299
+
300
+
267
301
  1.0.4 (2026-01-26)
268
302
  ------------------
269
303
 
304
+ Bug fixes:
305
+
270
306
  - `Issue #103`_: Using re2 fails if pyre2 is also installed.
271
307
 
272
308
  .. _`Issue #103`: https://github.com/cpburnz/python-pathspec/issues/103
@@ -1,14 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: build
3
- Version: 1.4.2
3
+ Version: 1.5.0
4
4
  Summary: A simple, correct Python build frontend
5
5
  Author-email: Filipe Laíns <lains@riseup.net>, Bernát Gábor <gaborjbernat@gmail.com>, layday <layday@protonmail.com>, Henry Schreiner <henryschreineriii@gmail.com>
6
- Requires-Python: >= 3.9
6
+ Requires-Python: >= 3.10
7
7
  Description-Content-Type: text/markdown
8
8
  License-Expression: MIT
9
9
  Classifier: Programming Language :: Python :: 3
10
10
  Classifier: Programming Language :: Python :: 3 :: Only
11
- Classifier: Programming Language :: Python :: 3.9
12
11
  Classifier: Programming Language :: Python :: 3.10
13
12
  Classifier: Programming Language :: Python :: 3.11
14
13
  Classifier: Programming Language :: Python :: 3.12
@@ -22,14 +21,15 @@ Requires-Dist: pyproject_hooks
22
21
  Requires-Dist: colorama; os_name == "nt"
23
22
  Requires-Dist: importlib-metadata >= 4.6; python_full_version < "3.10.2"
24
23
  Requires-Dist: tomli >= 1.1.0; python_version < "3.11"
24
+ Requires-Dist: keyring ; extra == "keyring"
25
25
  Requires-Dist: uv >= 0.1.18 ; extra == "uv"
26
- Requires-Dist: virtualenv >= 20.11 ; extra == "virtualenv" and ( python_version < '3.10')
27
26
  Requires-Dist: virtualenv >= 20.17 ; extra == "virtualenv" and ( python_version >= '3.10' and python_version < '3.14')
28
27
  Requires-Dist: virtualenv >= 20.31 ; extra == "virtualenv" and ( python_version >= '3.14')
29
28
  Project-URL: changelog, https://build.pypa.io/en/stable/changelog.html
30
29
  Project-URL: homepage, https://build.pypa.io
31
30
  Project-URL: issues, https://github.com/pypa/build/issues
32
31
  Project-URL: source, https://github.com/pypa/build
32
+ Provides-Extra: keyring
33
33
  Provides-Extra: uv
34
34
  Provides-Extra: virtualenv
35
35
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: trove-classifiers
3
- Version: 2026.1.14.14
3
+ Version: 2026.6.1.19
4
4
  Summary: Canonical source for classifiers on PyPI (pypi.org).
5
5
  Home-page: https://github.com/pypa/trove-classifiers
6
6
  Author: The PyPI Admins
@@ -0,0 +1 @@
1
+ {"key":"/usr/local","last_check":"2026-07-28T22:11:02.508933+00:00","pypi_version":"26.1.2"}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clsync
3
- Version: 1.1.2
3
+ Version: 1.1.3
4
4
  Summary: Sync Claude Code knowledge across machines via a shared git repository and AI-powered synthesis
5
5
  Project-URL: Homepage, https://gitlab.hahtse.de/published/claudesync
6
6
  Project-URL: Repository, https://gitlab.hahtse.de/published/claudesync
@@ -27,7 +27,8 @@ CONSOLIDATED_DIR = REPO_ROOT / "consolidated"
27
27
  META_DIR = REPO_ROOT / "meta"
28
28
  PROMPTS_DIR = Path(__file__).parent / "prompts"
29
29
 
30
- MODEL = "claude-sonnet-4-20250514"
30
+ # Overridable so a retired model ID can be swapped via CI variable without a code change.
31
+ MODEL = os.environ.get("SYNTHESIS_MODEL", "claude-sonnet-5")
31
32
  MAX_TOKENS = 8192
32
33
 
33
34
 
@@ -421,6 +422,18 @@ def main() -> None:
421
422
  + (", ".join(synthesized_scopes) if synthesized_scopes else "none")
422
423
  )
423
424
 
425
+ if failed_scopes:
426
+ print(
427
+ f"ERROR: {len(failed_scopes)} of {len(scopes)} scope(s) failed and were left "
428
+ "unsynthesised: " + ", ".join(sorted(failed_scopes))
429
+ )
430
+ print(
431
+ "Propagated files (memory/, settings.json) are unaffected — they are written "
432
+ "outside the synthesis gate. Exiting non-zero so a broken synthesis cannot "
433
+ "report a green pipeline. The CI job commits results before honouring this code."
434
+ )
435
+ sys.exit(1)
436
+
424
437
 
425
438
  if __name__ == "__main__":
426
439
  main()
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "clsync"
7
- version = "1.1.2"
7
+ version = "1.1.3"
8
8
  description = "Sync Claude Code knowledge across machines via a shared git repository and AI-powered synthesis"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -5,11 +5,13 @@ This module calls the Anthropic API directly on the client machine. It requires
5
5
  'bootstrap' optional dependency: pip install clsync[bootstrap]
6
6
  """
7
7
  import json
8
+ import os
8
9
  from pathlib import Path
9
10
 
10
11
  from claude_sync.claude_paths import claude_memory_dir, claude_sessions_index
11
12
 
12
- MODEL = "claude-sonnet-4-20250514"
13
+ # Overridable so a retired model ID can be swapped via env var without a code change.
14
+ MODEL = os.environ.get("SYNTHESIS_MODEL", "claude-sonnet-5")
13
15
  MAX_TOKENS = 8192
14
16
 
15
17
  _PROMPTS_DIR = Path(__file__).parent / "prompts"
@@ -23,7 +23,12 @@ jobs:
23
23
  python-version: '3.12'
24
24
  - name: Install dependencies
25
25
  run: pip install -r pipeline/requirements.txt
26
+ # synthesize.py exits non-zero when any scope fails. continue-on-error keeps the
27
+ # commit step running so propagated memory/ and settings.json are still pushed;
28
+ # the final step then fails the run loudly.
26
29
  - name: Run synthesis
30
+ id: synthesis
31
+ continue-on-error: true
27
32
  env:
28
33
  ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
29
34
  run: python pipeline/synthesize.py
@@ -38,3 +43,8 @@ jobs:
38
43
  git commit -m "synthesis: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
39
44
  git push
40
45
  fi
46
+ - name: Fail if synthesis reported failed scopes
47
+ if: steps.synthesis.outcome == 'failure'
48
+ run: |
49
+ echo "ERROR: synthesis reported failed scope(s). Any results produced were still committed above."
50
+ exit 1
@@ -27,8 +27,16 @@ variables:
27
27
  - git checkout main
28
28
  - git pull origin main
29
29
  script:
30
- - python pipeline/synthesize.py
30
+ # synthesize.py exits non-zero when any scope fails. Capture that instead of
31
+ # letting it abort the job, so propagated memory/ and settings.json are still
32
+ # committed, then honour the code at the end to fail the pipeline loudly.
31
33
  - |
34
+ set +e
35
+ python pipeline/synthesize.py
36
+ SYNTH_RC=$?
37
+ set -e
38
+ echo "synthesize.py exit code: $SYNTH_RC"
39
+
32
40
  git add consolidated/ meta/
33
41
  if git diff --cached --quiet; then
34
42
  echo "No changes after synthesis, skipping commit."
@@ -38,6 +46,11 @@ variables:
38
46
  git push origin main
39
47
  fi
40
48
 
49
+ if [ "$SYNTH_RC" -ne 0 ]; then
50
+ echo "ERROR: synthesis reported failed scope(s). Any results produced were still committed above."
51
+ exit "$SYNTH_RC"
52
+ fi
53
+
41
54
  synthesize_scheduled:
42
55
  extends: .synthesis_base
43
56
  rules:
@@ -27,7 +27,8 @@ CONSOLIDATED_DIR = REPO_ROOT / "consolidated"
27
27
  META_DIR = REPO_ROOT / "meta"
28
28
  PROMPTS_DIR = Path(__file__).parent / "prompts"
29
29
 
30
- MODEL = "claude-sonnet-4-20250514"
30
+ # Overridable so a retired model ID can be swapped via CI variable without a code change.
31
+ MODEL = os.environ.get("SYNTHESIS_MODEL", "claude-sonnet-5")
31
32
  MAX_TOKENS = 8192
32
33
 
33
34
 
@@ -421,6 +422,18 @@ def main() -> None:
421
422
  + (", ".join(synthesized_scopes) if synthesized_scopes else "none")
422
423
  )
423
424
 
425
+ if failed_scopes:
426
+ print(
427
+ f"ERROR: {len(failed_scopes)} of {len(scopes)} scope(s) failed and were left "
428
+ "unsynthesised: " + ", ".join(sorted(failed_scopes))
429
+ )
430
+ print(
431
+ "Propagated files (memory/, settings.json) are unaffected — they are written "
432
+ "outside the synthesis gate. Exiting non-zero so a broken synthesis cannot "
433
+ "report a green pipeline. The CI job commits results before honouring this code."
434
+ )
435
+ sys.exit(1)
436
+
424
437
 
425
438
  if __name__ == "__main__":
426
439
  main()
@@ -43,7 +43,7 @@ def test_load_valid_config(config_file):
43
43
 
44
44
  def test_load_missing_config_raises(config_file):
45
45
  # Don't write the file — it shouldn't exist
46
- with pytest.raises(FileNotFoundError, match="claude-sync init"):
46
+ with pytest.raises(FileNotFoundError, match="clsync init"):
47
47
  load_config()
48
48
 
49
49
 
@@ -1,139 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: build
3
- Version: 1.4.0
4
- Summary: A simple, correct Python build frontend
5
- Author-email: Filipe Laíns <lains@riseup.net>, Bernát Gábor <gaborjbernat@gmail.com>, layday <layday@protonmail.com>, Henry Schreiner <henryschreineriii@gmail.com>
6
- Requires-Python: >= 3.9
7
- Description-Content-Type: text/markdown
8
- License-Expression: MIT
9
- Classifier: Programming Language :: Python :: 3
10
- Classifier: Programming Language :: Python :: 3 :: Only
11
- Classifier: Programming Language :: Python :: 3.9
12
- Classifier: Programming Language :: Python :: 3.10
13
- Classifier: Programming Language :: Python :: 3.11
14
- Classifier: Programming Language :: Python :: 3.12
15
- Classifier: Programming Language :: Python :: 3.13
16
- Classifier: Programming Language :: Python :: 3.14
17
- Classifier: Programming Language :: Python :: Implementation :: CPython
18
- Classifier: Programming Language :: Python :: Implementation :: PyPy
19
- License-File: LICENSE
20
- Requires-Dist: packaging >= 24.0
21
- Requires-Dist: pyproject_hooks
22
- Requires-Dist: colorama; os_name == "nt"
23
- Requires-Dist: importlib-metadata >= 4.6; python_full_version < "3.10.2"
24
- Requires-Dist: tomli >= 1.1.0; python_version < "3.11"
25
- Requires-Dist: uv >= 0.1.18 ; extra == "uv"
26
- Requires-Dist: virtualenv >= 20.11 ; extra == "virtualenv" and ( python_version < '3.10')
27
- Requires-Dist: virtualenv >= 20.17 ; extra == "virtualenv" and ( python_version >= '3.10' and python_version < '3.14')
28
- Requires-Dist: virtualenv >= 20.31 ; extra == "virtualenv" and ( python_version >= '3.14')
29
- Project-URL: changelog, https://build.pypa.io/en/stable/changelog.html
30
- Project-URL: homepage, https://build.pypa.io
31
- Project-URL: issues, https://github.com/pypa/build/issues
32
- Project-URL: source, https://github.com/pypa/build
33
- Provides-Extra: uv
34
- Provides-Extra: virtualenv
35
-
36
- # build
37
-
38
- [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/pypa/build/main.svg)](https://results.pre-commit.ci/latest/github/pypa/build/main)
39
- [![CI test](https://github.com/pypa/build/actions/workflows/test.yml/badge.svg)](https://github.com/pypa/build/actions/workflows/test.yml)
40
- [![codecov](https://codecov.io/gh/pypa/build/branch/main/graph/badge.svg)](https://codecov.io/gh/pypa/build)
41
-
42
- [![Documentation Status](https://readthedocs.org/projects/pypa-build/badge/?version=latest)](https://build.pypa.io/en/latest/?badge=latest)
43
- [![PyPI version](https://badge.fury.io/py/build.svg)](https://pypi.org/project/build/)
44
- [![Discord](https://img.shields.io/discord/803025117553754132?label=Discord%20chat%20%23build)](https://discord.gg/pypa)
45
-
46
- A simple, correct Python build frontend.
47
-
48
- See the [documentation](https://build.pypa.io) for more information.
49
-
50
- ### Installation
51
-
52
- `build` can be installed via `pip` or an equivalent via:
53
-
54
- ```console
55
- $ pip install build
56
- ```
57
-
58
- ### Usage
59
-
60
- ```console
61
- $ python -m build
62
- ```
63
-
64
- This will build the package in an isolated environment, generating a
65
- source-distribution and wheel in the directory `dist/`. See the
66
- [documentation](https://build.pypa.io) for full information. Build is also
67
- available via the command line as `pyproject-build` once installed.
68
-
69
- ### Common arguments
70
-
71
- - `--sdist` (`-s`): Produce just an SDist
72
- - `--wheel` (`-w`): Produce just a wheel
73
- - `--metadata`: Produce just the metadata as JSON. Cannot be used with `--sdist`/`--wheel`.
74
- - `-C<option>=<value>`: A Config-setting, the PEP 517 way of passing options to a backend. Can be passed multiple times. Matching options will make a list. Note that setuptools has very limited support.
75
- - `--config-json=<value>`: An alternative way to pass in complex config settings as JSON strings. Can't be used with `-C`.
76
- - `--installer`: Pick an installer for the isolated build (`pip` or `uv`).
77
- - `--no-isolation` (`-n`): Disable build isolation.
78
- - `--skip-dependency-check` (`-x`): Disable dependency checking when not isolated; this should be done if some requirements or version ranges are not required for non-isolated builds.
79
- - `--outdir` (`-o`): The output directory (defaults to `dist`)
80
-
81
- Some common combinations of arguments:
82
-
83
- - `--sdist --wheel` (`-sw`): Produce and SDist and a wheel, both from the source distribution. The default (if no flag is passed) is to build an SDist and then build a wheel _from_ the SDist.
84
- - `-nx`: Disable build isolation and dependency checking. Identical to pip and uv's `--no-build-isolation` flag.
85
- - `--metadata | jq -r .version`: get the version in a bash-like environment.
86
-
87
- ### Integration with other tools
88
-
89
- #### pipx
90
-
91
- If you use [pipx][], such as in GitHub Actions, the following command will download
92
- and run build in one step:
93
-
94
- ```console
95
- $ pipx run build
96
- ```
97
-
98
- #### uv
99
-
100
- If you want to use [uv][] to speed up the virtual environment creation, you can
101
- use `--installer=uv`. You can get a Python wheel for `uv` with the `[uv]`
102
- extra. For example, using pipx like above:
103
-
104
- ```console
105
- $ pipx run 'build[uv]' --installer uv
106
- ```
107
-
108
- If you already have uv, you don't need the extra. For example:
109
-
110
- ```console
111
- $ uvx --from build pyproject-build --installer uv
112
- ```
113
-
114
- #### cibuildwheel
115
-
116
- If you are using [cibuildwheel][], build is integrated and the default builder in 3.0+. If you want to use `uv` as the installer, you can use:
117
-
118
- ```toml
119
- [tool.cibuildwheel]
120
- build-frontend = "build[uv]"
121
- ```
122
-
123
- (Be sure to pre-install uv before running cibuildwheel for this one!)
124
-
125
- #### Conda-forge
126
-
127
- On conda-forge, this package is called [python-build][].
128
-
129
- ### Code of Conduct
130
-
131
- Everyone interacting in the build's codebase, issue trackers, chat rooms, and mailing lists is expected to follow
132
- the [PSF Code of Conduct].
133
-
134
- [psf code of conduct]: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md
135
- [pipx]: https://pipx.pypa.io
136
- [uv]: https://docs.astral.sh/uv/
137
- [cibuildwheel]: https://cibuildwheel.pypa.io
138
- [python-build]: https://github.com/conda-forge/python-build-feedstock
139
-
@@ -1 +0,0 @@
1
- {"key":"/usr/local","last_check":"2026-04-02T08:06:15.087529+00:00","pypi_version":"26.0.1"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes