syncestra 1.0.0__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.
- syncestra-1.0.0/.claude/learnings/index.yaml +6 -0
- syncestra-1.0.0/.claude/learnings/pending.yaml +272 -0
- syncestra-1.0.0/.github/workflows/publish.yml +42 -0
- syncestra-1.0.0/.gitignore +56 -0
- syncestra-1.0.0/PKG-INFO +457 -0
- syncestra-1.0.0/README.md +419 -0
- syncestra-1.0.0/_bmad/bmm/config.yaml +30 -0
- syncestra-1.0.0/deploy/README.md +83 -0
- syncestra-1.0.0/deploy/ansible/README.md +40 -0
- syncestra-1.0.0/deploy/ansible/roles/syncestra/handlers/main.yml +4 -0
- syncestra-1.0.0/deploy/ansible/roles/syncestra/tasks/main.yml +71 -0
- syncestra-1.0.0/deploy/ansible/roles/syncestra/templates/syncestra-sync@.service.j2 +11 -0
- syncestra-1.0.0/deploy/ansible/roles/syncestra/templates/syncestra-sync@.timer.j2 +11 -0
- syncestra-1.0.0/deploy/ansible/roles/syncestra/templates/syncestra.env.j2 +5 -0
- syncestra-1.0.0/deploy/cloud-init.yaml.example +88 -0
- syncestra-1.0.0/deploy/syncestra.env.example +30 -0
- syncestra-1.0.0/deploy/systemd/syncestra-sync@.service +23 -0
- syncestra-1.0.0/deploy/systemd/syncestra-sync@.timer +14 -0
- syncestra-1.0.0/docs/brainstorming/brainstorming-session-2026-06-13-001.md +224 -0
- syncestra-1.0.0/docs/brainstorming/brainstorming-session-2026-06-16-001.md +161 -0
- syncestra-1.0.0/docs/implementation-artifacts/deferred-work.md +17 -0
- syncestra-1.0.0/docs/implementation-artifacts/spec-always-on-auto-sync.md +38 -0
- syncestra-1.0.0/docs/implementation-artifacts/spec-auto-push-watchman.md +44 -0
- syncestra-1.0.0/docs/implementation-artifacts/spec-remote-from-username-repo.md +163 -0
- syncestra-1.0.0/docs/implementation-artifacts/spec-saved-service-presets.md +137 -0
- syncestra-1.0.0/docs/implementation-artifacts/spec-vps-default-sync.md +130 -0
- syncestra-1.0.0/docs/implementation-artifacts/sprint-status.yaml +741 -0
- syncestra-1.0.0/docs/planning-artifacts/architecture.md +664 -0
- syncestra-1.0.0/docs/planning-artifacts/epics.md +765 -0
- syncestra-1.0.0/docs/planning-artifacts/implementation-readiness-report.md +236 -0
- syncestra-1.0.0/docs/planning-artifacts/prd-validation-report.md +147 -0
- syncestra-1.0.0/docs/planning-artifacts/prd.md +349 -0
- syncestra-1.0.0/docs/plans/2026-06-15-auto-push-watchman.md +1321 -0
- syncestra-1.0.0/docs/plans/2026-06-16-always-on-auto-sync.md +764 -0
- syncestra-1.0.0/docs/plans/2026-06-16-vps-default-sync-and-deploy.md +658 -0
- syncestra-1.0.0/pyproject.toml +68 -0
- syncestra-1.0.0/src/syncestra/__init__.py +14 -0
- syncestra-1.0.0/src/syncestra/__main__.py +17 -0
- syncestra-1.0.0/src/syncestra/adapters/__init__.py +5 -0
- syncestra-1.0.0/src/syncestra/adapters/askpass_helper.sh +22 -0
- syncestra-1.0.0/src/syncestra/adapters/classifier.py +111 -0
- syncestra-1.0.0/src/syncestra/adapters/classifier_stub.py +20 -0
- syncestra-1.0.0/src/syncestra/adapters/debounce.py +47 -0
- syncestra-1.0.0/src/syncestra/adapters/docker_volume.py +76 -0
- syncestra-1.0.0/src/syncestra/adapters/git_engine.py +1290 -0
- syncestra-1.0.0/src/syncestra/adapters/git_ignore.py +196 -0
- syncestra-1.0.0/src/syncestra/adapters/interfaces.py +175 -0
- syncestra-1.0.0/src/syncestra/adapters/secrets.py +381 -0
- syncestra-1.0.0/src/syncestra/adapters/watchman.py +119 -0
- syncestra-1.0.0/src/syncestra/auth/__init__.py +5 -0
- syncestra-1.0.0/src/syncestra/auth/github.py +124 -0
- syncestra-1.0.0/src/syncestra/cli.py +623 -0
- syncestra-1.0.0/src/syncestra/config.py +673 -0
- syncestra-1.0.0/src/syncestra/core/__init__.py +10 -0
- syncestra-1.0.0/src/syncestra/core/context.py +178 -0
- syncestra-1.0.0/src/syncestra/core/init.py +73 -0
- syncestra-1.0.0/src/syncestra/core/profile.py +95 -0
- syncestra-1.0.0/src/syncestra/core/pull.py +157 -0
- syncestra-1.0.0/src/syncestra/core/push.py +214 -0
- syncestra-1.0.0/src/syncestra/core/restore.py +132 -0
- syncestra-1.0.0/src/syncestra/core/status.py +47 -0
- syncestra-1.0.0/src/syncestra/core/sync.py +90 -0
- syncestra-1.0.0/src/syncestra/core/watch.py +229 -0
- syncestra-1.0.0/src/syncestra/errors.py +117 -0
- syncestra-1.0.0/src/syncestra/exit_codes.py +63 -0
- syncestra-1.0.0/src/syncestra/logging.py +104 -0
- syncestra-1.0.0/src/syncestra/mcp_server.py +360 -0
- syncestra-1.0.0/src/syncestra/models.py +255 -0
- syncestra-1.0.0/src/syncestra/renderers.py +107 -0
- syncestra-1.0.0/src/syncestra/services/__init__.py +13 -0
- syncestra-1.0.0/src/syncestra/services/claude_code.py +114 -0
- syncestra-1.0.0/src/syncestra/services/registry.py +83 -0
- syncestra-1.0.0/src/syncestra/services/spec.py +46 -0
- syncestra-1.0.0/src/syncestra/state/__init__.py +14 -0
- syncestra-1.0.0/src/syncestra/state/machine.py +222 -0
- syncestra-1.0.0/tests/__init__.py +0 -0
- syncestra-1.0.0/tests/conftest.py +22 -0
- syncestra-1.0.0/tests/e2e/__init__.py +0 -0
- syncestra-1.0.0/tests/e2e/test_epic1_user_journeys.py +273 -0
- syncestra-1.0.0/tests/e2e/test_epic2_user_journeys.py +232 -0
- syncestra-1.0.0/tests/e2e/test_epic3_user_journeys.py +275 -0
- syncestra-1.0.0/tests/e2e/test_epic4_user_journeys.py +275 -0
- syncestra-1.0.0/tests/e2e/test_epic5_user_journeys.py +348 -0
- syncestra-1.0.0/tests/e2e/test_epic6_user_journeys.py +290 -0
- syncestra-1.0.0/tests/e2e/test_github_live_auth.py +137 -0
- syncestra-1.0.0/tests/e2e/test_watch_foreground.py +80 -0
- syncestra-1.0.0/tests/integration/__init__.py +0 -0
- syncestra-1.0.0/tests/integration/conftest.py +129 -0
- syncestra-1.0.0/tests/integration/test_branch_resolution.py +101 -0
- syncestra-1.0.0/tests/integration/test_cli_commands.py +204 -0
- syncestra-1.0.0/tests/integration/test_dry_run_default.py +210 -0
- syncestra-1.0.0/tests/integration/test_exit_code_plumbing.py +336 -0
- syncestra-1.0.0/tests/integration/test_git_init.py +151 -0
- syncestra-1.0.0/tests/integration/test_git_plan.py +237 -0
- syncestra-1.0.0/tests/integration/test_github_auth_wiring.py +454 -0
- syncestra-1.0.0/tests/integration/test_json_envelope.py +110 -0
- syncestra-1.0.0/tests/integration/test_mcp_tools.py +219 -0
- syncestra-1.0.0/tests/integration/test_pre_push_tag.py +148 -0
- syncestra-1.0.0/tests/integration/test_private_repo_guard.py +84 -0
- syncestra-1.0.0/tests/integration/test_profile_isolation.py +424 -0
- syncestra-1.0.0/tests/integration/test_pull.py +187 -0
- syncestra-1.0.0/tests/integration/test_push_dryrun.py +132 -0
- syncestra-1.0.0/tests/integration/test_quarantine.py +229 -0
- syncestra-1.0.0/tests/integration/test_repo_auto_create.py +300 -0
- syncestra-1.0.0/tests/integration/test_restore.py +362 -0
- syncestra-1.0.0/tests/integration/test_secret_block.py +215 -0
- syncestra-1.0.0/tests/integration/test_status.py +125 -0
- syncestra-1.0.0/tests/integration/test_sync_cli.py +109 -0
- syncestra-1.0.0/tests/integration/test_table_rendering.py +196 -0
- syncestra-1.0.0/tests/integration/test_watch_cli.py +207 -0
- syncestra-1.0.0/tests/unit/__init__.py +0 -0
- syncestra-1.0.0/tests/unit/test_auth.py +114 -0
- syncestra-1.0.0/tests/unit/test_autostart_watch.py +60 -0
- syncestra-1.0.0/tests/unit/test_classifier.py +128 -0
- syncestra-1.0.0/tests/unit/test_claude_code_spec.py +121 -0
- syncestra-1.0.0/tests/unit/test_config.py +313 -0
- syncestra-1.0.0/tests/unit/test_config_identity.py +320 -0
- syncestra-1.0.0/tests/unit/test_config_presets.py +510 -0
- syncestra-1.0.0/tests/unit/test_context.py +120 -0
- syncestra-1.0.0/tests/unit/test_debounce.py +61 -0
- syncestra-1.0.0/tests/unit/test_docker_stub.py +73 -0
- syncestra-1.0.0/tests/unit/test_errors.py +109 -0
- syncestra-1.0.0/tests/unit/test_exit_codes.py +109 -0
- syncestra-1.0.0/tests/unit/test_git_ignore.py +122 -0
- syncestra-1.0.0/tests/unit/test_logging.py +144 -0
- syncestra-1.0.0/tests/unit/test_mcp_preflight.py +187 -0
- syncestra-1.0.0/tests/unit/test_mcp_sync.py +96 -0
- syncestra-1.0.0/tests/unit/test_models.py +194 -0
- syncestra-1.0.0/tests/unit/test_profile_switch.py +186 -0
- syncestra-1.0.0/tests/unit/test_registry.py +64 -0
- syncestra-1.0.0/tests/unit/test_secret_scanner.py +290 -0
- syncestra-1.0.0/tests/unit/test_state_machine.py +203 -0
- syncestra-1.0.0/tests/unit/test_sync.py +228 -0
- syncestra-1.0.0/tests/unit/test_sync_result.py +22 -0
- syncestra-1.0.0/tests/unit/test_watch.py +171 -0
- syncestra-1.0.0/tests/unit/test_watchman.py +114 -0
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
{
|
|
2
|
+
"learnings": [
|
|
3
|
+
{
|
|
4
|
+
"rule": "/bmad-brainstorming I want to create a back up system that backsup mounted volumes to github. I want that for each service. so if I have openclaw , hermes, etc. each would use the tool to create a private repo on github and by default backup eveything but also make only some things that I select. I also want functions that would check that nothing changed, functions that would restore the backup or update the current state, etc.",
|
|
5
|
+
"why": "",
|
|
6
|
+
"type": "preference",
|
|
7
|
+
"tags": [
|
|
8
|
+
"patterns"
|
|
9
|
+
],
|
|
10
|
+
"scope": "project",
|
|
11
|
+
"scope_detail": "project-wide",
|
|
12
|
+
"confidence": 0.7,
|
|
13
|
+
"created": "2026-06-12",
|
|
14
|
+
"last_used": "2026-06-12",
|
|
15
|
+
"reinforced": 0,
|
|
16
|
+
"raw_context": "/bmad-brainstorming I want to create a back up system that backsup mounted volumes to github. I want that for each service. so if I have openclaw , hermes, etc. each would use the tool to create a private repo on github and by default backup eveything but also make only some things that I select. I also want functions that would check that nothing changed, functions that would restore the backup or update the current state, etc."
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"rule": "Should as easy to use by ai agents",
|
|
20
|
+
"why": "",
|
|
21
|
+
"type": "preference",
|
|
22
|
+
"tags": [
|
|
23
|
+
"patterns"
|
|
24
|
+
],
|
|
25
|
+
"scope": "project",
|
|
26
|
+
"scope_detail": "project-wide",
|
|
27
|
+
"confidence": 0.7,
|
|
28
|
+
"created": "2026-06-13",
|
|
29
|
+
"last_used": "2026-06-13",
|
|
30
|
+
"reinforced": 0,
|
|
31
|
+
"raw_context": "primiary user isn't ai, it's still humans but it should be as easy to use by ai agents"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"rule": "Ensure all required imports are present",
|
|
35
|
+
"why": "Bug detected via \\bpatch\\b [Refined: bug recurred despite learning — Bug detected via \\bpatch\\b]",
|
|
36
|
+
"type": "bugfix",
|
|
37
|
+
"tags": [
|
|
38
|
+
"testing"
|
|
39
|
+
],
|
|
40
|
+
"scope": "project",
|
|
41
|
+
"confidence": 1.0,
|
|
42
|
+
"created": "2026-06-13",
|
|
43
|
+
"last_used": "2026-06-16",
|
|
44
|
+
"reinforced": 9,
|
|
45
|
+
"raw_context": "auto-captured from bug fix",
|
|
46
|
+
"source": "bug-capture",
|
|
47
|
+
"files": [
|
|
48
|
+
"/Users/assaad/Documents/Coding projects/syncestra/tests/integration/test_profile_isolation.py"
|
|
49
|
+
],
|
|
50
|
+
"_fingerprint": "5055e3a946ebfbaef316d0e8c1ecedd9"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"rule": "for the bmad-sprint-autopilot-teams-parallel-op_reviewed-tdd-plan-val and bmad-sprint-autopilot-teams-parallel-op_reviewed-tdd-plan-val-ques both, when impementing epics, it's still doing it in one chat instead of sending it to other agent per epics for better context management. fix that",
|
|
54
|
+
"why": "",
|
|
55
|
+
"type": "bugfix",
|
|
56
|
+
"tags": [
|
|
57
|
+
"patterns"
|
|
58
|
+
],
|
|
59
|
+
"scope": "project",
|
|
60
|
+
"scope_detail": "project-wide",
|
|
61
|
+
"confidence": 0.75,
|
|
62
|
+
"created": "2026-06-13",
|
|
63
|
+
"last_used": "2026-06-13",
|
|
64
|
+
"reinforced": 0,
|
|
65
|
+
"raw_context": "for the bmad-sprint-autopilot-teams-parallel-op_reviewed-tdd-plan-val and bmad-sprint-autopilot-teams-parallel-op_reviewed-tdd-plan-val-ques both, when impementing epics, it's still doing it in one chat instead of sending it to other agent per epics for better context management. fix that"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"rule": "Review similar code paths for the same bug pattern",
|
|
69
|
+
"why": "Bug detected via \\bpatch\\b [Refined: bug recurred despite learning — Bug detected via \\b(?:fix|fixed|fixing)\\b]",
|
|
70
|
+
"type": "bugfix",
|
|
71
|
+
"tags": [
|
|
72
|
+
"testing"
|
|
73
|
+
],
|
|
74
|
+
"scope": "project",
|
|
75
|
+
"confidence": 1.0,
|
|
76
|
+
"created": "2026-06-13",
|
|
77
|
+
"last_used": "2026-06-16",
|
|
78
|
+
"reinforced": 24,
|
|
79
|
+
"raw_context": "auto-captured from bug fix",
|
|
80
|
+
"source": "bug-capture",
|
|
81
|
+
"files": [
|
|
82
|
+
"/Users/assaad/Documents/Coding projects/syncestra/tests/integration/test_exit_code_plumbing.py"
|
|
83
|
+
],
|
|
84
|
+
"_fingerprint": "b6a31dcc76595e2cb9108ee3b5276058"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"rule": "<ide_selection>The user selected the lines 1 to 17 from /git-error-1781406843648: > git pull --tags origin main From https://github.com/assaads/syncestra * branch main -> FETCH_HEAD hint: You have divergent branches and need to specify how to reconcile them. hint: You can do so by running one of the following commands sometime before hint: your next pull: hint: hint: git config pull.rebase false # merge hint: git config pull.rebase true # rebase hint: git config pull.ff only # fast-forward only hint: hint: You can replace \"git config\" with \"git config --global\" to set a default hint: preference for all repositories. You can also pass --rebase, --no-rebase, hint: or --ff-only on the command line to override the configured default per hint: invocation. fatal: Need to specify how to reconcile divergent branches. This may or may not be related to the current task.</ide_selection> solve this > git pull --tags origin main From https://github.com/assaads/syncestra * branch main -> FETCH_HEAD hint: You have divergent branches and need to specify how to reconcile them. hint: You can do so by running one of the following commands sometime before hint: your next pull: hint: hint: git config pull.rebase false # merge hint: git config pull.rebase true # rebase hint: git config pull.ff only # fast-forward only hint: hint: You can replace \"git config\" with \"git config --global\" to set a default hint: preference for all repositories. You can also pass --rebase, --no-rebase, hint: or --ff-only on the command line to override the configured default per hint: invocation. fatal: Need to specify how to reconcile divergent branches.",
|
|
88
|
+
"why": "",
|
|
89
|
+
"type": "reinforcement",
|
|
90
|
+
"tags": [
|
|
91
|
+
"config",
|
|
92
|
+
"infra"
|
|
93
|
+
],
|
|
94
|
+
"scope": "project",
|
|
95
|
+
"scope_detail": "config",
|
|
96
|
+
"confidence": 0.75,
|
|
97
|
+
"created": "2026-06-14",
|
|
98
|
+
"last_used": "2026-06-14",
|
|
99
|
+
"reinforced": 0,
|
|
100
|
+
"raw_context": "<ide_selection>The user selected the lines 1 to 17 from /git-error-1781406843648: > git pull --tags origin main From https://github.com/assaads/syncestra * branch main -> FETCH_HEAD hint: You have divergent branches and need to specify how to reconcile them. hint: You can do so by running one of the following commands sometime before hint: your next pull: hint: hint: git config pull.rebase false # merge hint: git config pull.rebase true # rebase hint: git config pull.ff only # fast-forward only hint: hint: You can replace \"git config\" with \"git config --global\" to set a default hint: preference for all repositories. You can also pass --rebase, --no-rebase, hint: or --ff-only on the command line to override the configured default per hint: invocation. fatal: Need to specify how to reconcile divergent branches. This may or may not be related to the current task.</ide_selection> solve this > git pull --tags origin main From https://github.com/assaads/syncestra * branch main -> FETCH_HEAD hint: You have divergent branches and need to specify how to reconcile them. hint: You can do so by running one of the following commands sometime before hint: your next pull: hint: hint: git config pull.rebase false # merge hint: git config pull.rebase true # rebase hint: git config pull.ff only # fast-forward only hint: hint: You can replace \"git config\" with \"git config --global\" to set a default hint: preference for all repositories. You can also pass --rebase, --no-rebase, hint: or --ff-only on the command line to override the configured default per hint: invocation. fatal: Need to specify how to reconcile divergent branches."
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"rule": "I want that and from all the previous suggested fixed I only want this: Make Tier 2 implementer-subagent the DEFAULT",
|
|
104
|
+
"why": "",
|
|
105
|
+
"type": "bugfix",
|
|
106
|
+
"tags": [
|
|
107
|
+
"patterns"
|
|
108
|
+
],
|
|
109
|
+
"scope": "project",
|
|
110
|
+
"scope_detail": "project-wide",
|
|
111
|
+
"confidence": 0.7,
|
|
112
|
+
"created": "2026-06-15",
|
|
113
|
+
"last_used": "2026-06-15",
|
|
114
|
+
"reinforced": 0,
|
|
115
|
+
"raw_context": "I want that and from all the previous suggested fixed I only want this: Make Tier 2 implementer-subagent the DEFAULT"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"rule": "<ide_opened_file>The user opened the file /Users/assaad/Documents/Coding projects/syncestra/docs/plans/2026-06-15-auto-push-watchman.md in the IDE. This may or may not be related to the current task.</ide_opened_file> merge to main",
|
|
119
|
+
"why": "",
|
|
120
|
+
"type": "reinforcement",
|
|
121
|
+
"tags": [
|
|
122
|
+
"patterns"
|
|
123
|
+
],
|
|
124
|
+
"scope": "project",
|
|
125
|
+
"scope_detail": "projects/syncestra/docs/plans (2026-06-15-auto-push-watchman.md)",
|
|
126
|
+
"confidence": 0.75,
|
|
127
|
+
"created": "2026-06-15",
|
|
128
|
+
"last_used": "2026-06-15",
|
|
129
|
+
"reinforced": 0,
|
|
130
|
+
"raw_context": "<ide_opened_file>The user opened the file /Users/assaad/Documents/Coding projects/syncestra/docs/plans/2026-06-15-auto-push-watchman.md in the IDE. This may or may not be related to the current task.</ide_opened_file> merge to main",
|
|
131
|
+
"files": [
|
|
132
|
+
"projects/syncestra/docs/plans/2026-06-15-auto-push-watchman.md"
|
|
133
|
+
]
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"rule": "Don't a new branch for that",
|
|
137
|
+
"why": "",
|
|
138
|
+
"type": "preference",
|
|
139
|
+
"tags": [
|
|
140
|
+
"auth"
|
|
141
|
+
],
|
|
142
|
+
"scope": "project",
|
|
143
|
+
"scope_detail": "project-wide",
|
|
144
|
+
"confidence": 0.8,
|
|
145
|
+
"created": "2026-06-16",
|
|
146
|
+
"last_used": "2026-06-16",
|
|
147
|
+
"reinforced": 0,
|
|
148
|
+
"raw_context": "change the SYNCESTRA_TOKEN variable name in the whole repo to SYNCESTRA_GITHUB_TOKEN. don't use a new branch for that"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"rule": "merge to main",
|
|
152
|
+
"why": "",
|
|
153
|
+
"type": "reinforcement",
|
|
154
|
+
"tags": [
|
|
155
|
+
"patterns"
|
|
156
|
+
],
|
|
157
|
+
"scope": "project",
|
|
158
|
+
"scope_detail": "project-wide",
|
|
159
|
+
"confidence": 0.75,
|
|
160
|
+
"created": "2026-06-16",
|
|
161
|
+
"last_used": "2026-06-16",
|
|
162
|
+
"reinforced": 0,
|
|
163
|
+
"raw_context": "merge to main"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"rule": "merge to main",
|
|
167
|
+
"why": "",
|
|
168
|
+
"type": "reinforcement",
|
|
169
|
+
"tags": [
|
|
170
|
+
"patterns"
|
|
171
|
+
],
|
|
172
|
+
"scope": "project",
|
|
173
|
+
"scope_detail": "project-wide",
|
|
174
|
+
"confidence": 0.75,
|
|
175
|
+
"created": "2026-06-16",
|
|
176
|
+
"last_used": "2026-06-16",
|
|
177
|
+
"reinforced": 0,
|
|
178
|
+
"raw_context": "merge to main"
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"rule": "Use that /bmad-quick-dev-teams-reviewed-tdd-v2-srch instead of the repo link I want you to take 2 variable either in teh config file or mcp: github_username and repo_name and then from these I want you to form the url. if the repo doesn't exist I want you to automatically create a new private one with that name obviously return the right error if the github key isn't allowing you to",
|
|
182
|
+
"why": "",
|
|
183
|
+
"type": "bugfix",
|
|
184
|
+
"tags": [
|
|
185
|
+
"config"
|
|
186
|
+
],
|
|
187
|
+
"scope": "project",
|
|
188
|
+
"scope_detail": "config",
|
|
189
|
+
"confidence": 0.75,
|
|
190
|
+
"created": "2026-06-16",
|
|
191
|
+
"last_used": "2026-06-16",
|
|
192
|
+
"reinforced": 0,
|
|
193
|
+
"raw_context": "instead of the repo link I want you to take 2 variable either in teh config file or mcp: github_username and repo_name and then from these I want you to form the url. if the repo doesn't exist I want you to automatically create a new private one with that name obviously return the right error if the github key isn't allowing you to do that /bmad-quick-dev-teams-reviewed-tdd-v2-srch"
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"rule": "Don't these chnages on a new branch and push with claude-sync afterwards",
|
|
197
|
+
"why": "",
|
|
198
|
+
"type": "preference",
|
|
199
|
+
"tags": [
|
|
200
|
+
"patterns"
|
|
201
|
+
],
|
|
202
|
+
"scope": "project",
|
|
203
|
+
"scope_detail": "project-wide",
|
|
204
|
+
"confidence": 0.8,
|
|
205
|
+
"created": "2026-06-16",
|
|
206
|
+
"last_used": "2026-06-16",
|
|
207
|
+
"reinforced": 0,
|
|
208
|
+
"raw_context": "modify bmad-quick-dev-teams-reviewed-tdd-v2 and bmad-quick-dev-teams-reviewed-tdd-v2-srch skill so after the plan phase they don't ask for aproval don't do these chnages on a new branch and push with claude-sync afterwards"
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"rule": "merge to main",
|
|
212
|
+
"why": "",
|
|
213
|
+
"type": "reinforcement",
|
|
214
|
+
"tags": [
|
|
215
|
+
"patterns"
|
|
216
|
+
],
|
|
217
|
+
"scope": "project",
|
|
218
|
+
"scope_detail": "project-wide",
|
|
219
|
+
"confidence": 0.75,
|
|
220
|
+
"created": "2026-06-16",
|
|
221
|
+
"last_used": "2026-06-16",
|
|
222
|
+
"reinforced": 0,
|
|
223
|
+
"raw_context": "merge to main"
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"rule": "I want you to create a feature where you could have presaved settings as to waht you want to save and not save within the same service (branch in repo) that you are backing up. so if the next time you set it up you use the name of the same service in the same repo, what to include and exclude gets overwriten. but you also take in consideration that the path at the beginning may not be the same on all machines /bmad-quick-dev-teams-reviewed-tdd-v2-srch",
|
|
227
|
+
"why": "",
|
|
228
|
+
"type": "preference",
|
|
229
|
+
"tags": [
|
|
230
|
+
"config"
|
|
231
|
+
],
|
|
232
|
+
"scope": "project",
|
|
233
|
+
"scope_detail": "project-wide",
|
|
234
|
+
"confidence": 0.7,
|
|
235
|
+
"created": "2026-06-16",
|
|
236
|
+
"last_used": "2026-06-16",
|
|
237
|
+
"reinforced": 0,
|
|
238
|
+
"raw_context": "I want you to create a feature where you could have presaved settings as to waht you want to save and not save within the same service (branch in repo) that you are backing up. so if the next time you set it up you use the name of the same service in the same repo, what to include and exclude gets overwriten. but you also take in consideration that the path at the beginning may not be the same on all machines /bmad-quick-dev-teams-reviewed-tdd-v2-srch"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"rule": "merge to main and push",
|
|
242
|
+
"why": "",
|
|
243
|
+
"type": "reinforcement",
|
|
244
|
+
"tags": [
|
|
245
|
+
"patterns"
|
|
246
|
+
],
|
|
247
|
+
"scope": "project",
|
|
248
|
+
"scope_detail": "project-wide",
|
|
249
|
+
"confidence": 0.75,
|
|
250
|
+
"created": "2026-06-16",
|
|
251
|
+
"last_used": "2026-06-16",
|
|
252
|
+
"reinforced": 0,
|
|
253
|
+
"raw_context": "merge to main and push"
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"rule": "In a Pydantic v2 BaseModel classmethod, call module-level helper functions directly (func()), never via cls.func()",
|
|
257
|
+
"why": "Pydantic's ModelMetaclass.__getattr__ intercepts attribute access on the model class and raises AttributeError for any name that is not a private attribute. So cls.<module_func>() fails at runtime even when the function is in module scope. Symptom is a confusing AttributeError pointing at pydantic internals (_model_construction.py), not the call site.",
|
|
258
|
+
"type": "bugfix",
|
|
259
|
+
"tags": [
|
|
260
|
+
"patterns",
|
|
261
|
+
"backend"
|
|
262
|
+
],
|
|
263
|
+
"scope": "global",
|
|
264
|
+
"scope_detail": "any Pydantic v2 project",
|
|
265
|
+
"confidence": 0.9,
|
|
266
|
+
"created": "2026-06-16",
|
|
267
|
+
"last_used": "2026-06-16",
|
|
268
|
+
"reinforced": 0,
|
|
269
|
+
"raw_context": "TDD caught cls._merge_env_watch raising AttributeError inside syncestra Config.load; the merge helper is module-level, not a classmethod. Plan had written cls._merge_env_watch(merged) — fixed to _merge_env_watch(merged)."
|
|
270
|
+
}
|
|
271
|
+
]
|
|
272
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
id-token: write
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
- name: Set up uv
|
|
17
|
+
uses: astral-sh/setup-uv@v3
|
|
18
|
+
- name: Build distributions
|
|
19
|
+
run: uv build
|
|
20
|
+
- name: Upload distributions
|
|
21
|
+
uses: actions/upload-artifact@v4
|
|
22
|
+
with:
|
|
23
|
+
name: dist
|
|
24
|
+
path: dist/
|
|
25
|
+
|
|
26
|
+
publish:
|
|
27
|
+
needs: build
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
environment: pypi
|
|
30
|
+
permissions:
|
|
31
|
+
contents: read
|
|
32
|
+
id-token: write
|
|
33
|
+
steps:
|
|
34
|
+
- name: Set up uv
|
|
35
|
+
uses: astral-sh/setup-uv@v3
|
|
36
|
+
- name: Download distributions
|
|
37
|
+
uses: actions/download-artifact@v4
|
|
38
|
+
with:
|
|
39
|
+
name: dist
|
|
40
|
+
path: dist/
|
|
41
|
+
- name: Publish to PyPI
|
|
42
|
+
run: uv publish
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
*.egg-info/
|
|
20
|
+
.installed.cfg
|
|
21
|
+
*.egg
|
|
22
|
+
|
|
23
|
+
# Virtual environments
|
|
24
|
+
.venv/
|
|
25
|
+
venv/
|
|
26
|
+
env/
|
|
27
|
+
|
|
28
|
+
# Testing / coverage
|
|
29
|
+
.pytest_cache/
|
|
30
|
+
.coverage
|
|
31
|
+
.coverage.*
|
|
32
|
+
htmlcov/
|
|
33
|
+
.tox/
|
|
34
|
+
.nox/
|
|
35
|
+
coverage.xml
|
|
36
|
+
*.cover
|
|
37
|
+
.cache
|
|
38
|
+
|
|
39
|
+
# Ruff / mypy
|
|
40
|
+
.ruff_cache/
|
|
41
|
+
.mypy_cache/
|
|
42
|
+
.dmypy.json
|
|
43
|
+
dmypy.json
|
|
44
|
+
|
|
45
|
+
# Type-check
|
|
46
|
+
pyright/
|
|
47
|
+
|
|
48
|
+
# IDE
|
|
49
|
+
.idea/
|
|
50
|
+
.vscode/
|
|
51
|
+
*.swp
|
|
52
|
+
*.swo
|
|
53
|
+
.DS_Store
|
|
54
|
+
|
|
55
|
+
# uv
|
|
56
|
+
uv.lock
|