@sylix/coworker 2.0.10 → 2.0.12

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 (178) hide show
  1. package/dist/commands/slash/config.d.ts.map +1 -1
  2. package/dist/commands/slash/config.js +23 -5
  3. package/dist/commands/slash/config.js.map +1 -1
  4. package/dist/commands/slash/todo.js +1 -1
  5. package/dist/commands/slash/todo.js.map +1 -1
  6. package/dist/core/CoWorkerAgent.d.ts.map +1 -1
  7. package/dist/core/CoWorkerAgent.js +6 -3
  8. package/dist/core/CoWorkerAgent.js.map +1 -1
  9. package/dist/permissions/PermissionInterceptor.js +1 -1
  10. package/dist/permissions/PermissionInterceptor.js.map +1 -1
  11. package/dist/skills/defaults/accessibility/screen-reader-testing.md +545 -0
  12. package/dist/skills/defaults/accessibility/wcag-audit-patterns.md +555 -0
  13. package/dist/skills/defaults/ai-ml/rag.md +276 -0
  14. package/dist/skills/defaults/backend-development/api-design-principles.md +528 -0
  15. package/dist/skills/defaults/backend-development/api-design.md +285 -0
  16. package/dist/skills/defaults/backend-development/architecture-patterns.md +494 -0
  17. package/dist/skills/defaults/backend-development/async-python.md +237 -0
  18. package/dist/skills/defaults/backend-development/auth-implementation-patterns.md +638 -0
  19. package/dist/skills/defaults/backend-development/bazel-build-optimization.md +387 -0
  20. package/dist/skills/defaults/backend-development/billing-automation/SKILL.md +566 -0
  21. package/dist/skills/defaults/backend-development/code-review-excellence.md +538 -0
  22. package/dist/skills/defaults/backend-development/cqrs-implementation.md +554 -0
  23. package/dist/skills/defaults/backend-development/database-design.md +305 -0
  24. package/dist/skills/defaults/backend-development/debugging-strategies.md +536 -0
  25. package/dist/skills/defaults/backend-development/e2e-testing-patterns.md +544 -0
  26. package/dist/skills/defaults/backend-development/error-handling-patterns.md +641 -0
  27. package/dist/skills/defaults/backend-development/fastapi-templates.md +559 -0
  28. package/dist/skills/defaults/backend-development/fastapi.md +309 -0
  29. package/dist/skills/defaults/backend-development/git-advanced-workflows.md +405 -0
  30. package/dist/skills/defaults/backend-development/microservices-patterns.md +595 -0
  31. package/dist/skills/defaults/backend-development/microservices.md +284 -0
  32. package/dist/skills/defaults/backend-development/monorepo-management.md +623 -0
  33. package/dist/skills/defaults/backend-development/nodejs-backend-patterns.md +1048 -0
  34. package/dist/skills/defaults/backend-development/nx-workspace-patterns.md +457 -0
  35. package/dist/skills/defaults/backend-development/paypal-integration/SKILL.md +478 -0
  36. package/dist/skills/defaults/backend-development/pci-compliance/SKILL.md +480 -0
  37. package/dist/skills/defaults/backend-development/python-anti-patterns.md +349 -0
  38. package/dist/skills/defaults/backend-development/python-background-jobs.md +364 -0
  39. package/dist/skills/defaults/backend-development/python-code-style.md +360 -0
  40. package/dist/skills/defaults/backend-development/python-configuration.md +368 -0
  41. package/dist/skills/defaults/backend-development/python-design-patterns.md +296 -0
  42. package/dist/skills/defaults/backend-development/python-error-handling.md +323 -0
  43. package/dist/skills/defaults/backend-development/python-packaging.md +887 -0
  44. package/dist/skills/defaults/backend-development/python-performance-optimization.md +874 -0
  45. package/dist/skills/defaults/backend-development/python-project-structure.md +252 -0
  46. package/dist/skills/defaults/backend-development/python-resilience.md +376 -0
  47. package/dist/skills/defaults/backend-development/python-resource-management.md +421 -0
  48. package/dist/skills/defaults/backend-development/python-type-safety.md +428 -0
  49. package/dist/skills/defaults/backend-development/sql-optimization-patterns.md +509 -0
  50. package/dist/skills/defaults/backend-development/stripe-integration/SKILL.md +522 -0
  51. package/dist/skills/defaults/backend-development/turborepo-caching.md +376 -0
  52. package/dist/skills/defaults/blockchain/defi-protocol-templates.md +430 -0
  53. package/dist/skills/defaults/blockchain/nft-standards.md +364 -0
  54. package/dist/skills/defaults/blockchain/solidity-security.md +514 -0
  55. package/dist/skills/defaults/blockchain/web3-testing.md +360 -0
  56. package/dist/skills/defaults/business/competitive-landscape/SKILL.md +527 -0
  57. package/dist/skills/defaults/business/market-sizing-analysis/SKILL.md +451 -0
  58. package/dist/skills/defaults/business/startup-financial-modeling/SKILL.md +494 -0
  59. package/dist/skills/defaults/business/startup-metrics-framework/SKILL.md +564 -0
  60. package/dist/skills/defaults/business/team-composition-analysis.md +437 -0
  61. package/dist/skills/defaults/compliance/employment-contract-templates/SKILL.md +527 -0
  62. package/dist/skills/defaults/compliance/gdpr-data-handling/SKILL.md +630 -0
  63. package/dist/skills/defaults/data-engineering/airflow-dag-patterns.md +436 -0
  64. package/dist/skills/defaults/data-engineering/airflow.md +519 -0
  65. package/dist/skills/defaults/data-engineering/data-quality.md +583 -0
  66. package/dist/skills/defaults/data-engineering/dbt-transformation-patterns.md +482 -0
  67. package/dist/skills/defaults/data-engineering/dbt.md +556 -0
  68. package/dist/skills/defaults/data-engineering/ml-pipeline-workflow/SKILL.md +247 -0
  69. package/dist/skills/defaults/data-engineering/spark-optimization.md +348 -0
  70. package/dist/skills/defaults/data-engineering/spark.md +411 -0
  71. package/dist/skills/defaults/database/postgresql.md +202 -0
  72. package/dist/skills/defaults/debugging/systematic-debugging.md +249 -0
  73. package/dist/skills/defaults/devops/architecture-decision-records.md +448 -0
  74. package/dist/skills/defaults/devops/changelog-automation.md +580 -0
  75. package/dist/skills/defaults/devops/cicd.md +314 -0
  76. package/dist/skills/defaults/devops/cloud.md +263 -0
  77. package/dist/skills/defaults/devops/code-review-excellence.md +299 -0
  78. package/dist/skills/defaults/devops/cost-optimization.md +295 -0
  79. package/dist/skills/defaults/devops/deployment-pipeline-design.md +356 -0
  80. package/dist/skills/defaults/devops/docker.md +281 -0
  81. package/dist/skills/defaults/devops/git-workflows.md +205 -0
  82. package/dist/skills/defaults/devops/github-actions.md +311 -0
  83. package/dist/skills/defaults/devops/gitlab-ci-patterns.md +266 -0
  84. package/dist/skills/defaults/devops/hybrid-cloud-networking.md +241 -0
  85. package/dist/skills/defaults/devops/istio-traffic-management.md +327 -0
  86. package/dist/skills/defaults/devops/kubernetes.md +339 -0
  87. package/dist/skills/defaults/devops/linkerd-patterns.md +311 -0
  88. package/dist/skills/defaults/devops/multi-cloud-architecture.md +181 -0
  89. package/dist/skills/defaults/devops/observability.md +243 -0
  90. package/dist/skills/defaults/devops/openapi-spec-generation.md +1024 -0
  91. package/dist/skills/defaults/devops/postmortem-writing.md +396 -0
  92. package/dist/skills/defaults/devops/prometheus-configuration.md +265 -0
  93. package/dist/skills/defaults/devops/secrets-management.md +341 -0
  94. package/dist/skills/defaults/devops/service-mesh-observability.md +385 -0
  95. package/dist/skills/defaults/devops/terraform-module-library.md +244 -0
  96. package/dist/skills/defaults/finance/backtesting-frameworks/SKILL.md +663 -0
  97. package/dist/skills/defaults/finance/risk-metrics-calculation/SKILL.md +557 -0
  98. package/dist/skills/defaults/frontend/accessibility-compliance.md +420 -0
  99. package/dist/skills/defaults/frontend/design-system-patterns.md +337 -0
  100. package/dist/skills/defaults/frontend/interaction-design.md +327 -0
  101. package/dist/skills/defaults/frontend/javascript.md +311 -0
  102. package/dist/skills/defaults/frontend/modern-javascript-patterns.md +927 -0
  103. package/dist/skills/defaults/frontend/react-native-design.md +440 -0
  104. package/dist/skills/defaults/frontend/react.md +345 -0
  105. package/dist/skills/defaults/frontend/responsive-design.md +472 -0
  106. package/dist/skills/defaults/frontend/tailwind-design-system.md +337 -0
  107. package/dist/skills/defaults/frontend/typescript-advanced-types.md +724 -0
  108. package/dist/skills/defaults/frontend/typescript.md +334 -0
  109. package/dist/skills/defaults/frontend/visual-design-foundations.md +326 -0
  110. package/dist/skills/defaults/frontend/web-component-design.md +279 -0
  111. package/dist/skills/defaults/game-development/godot-gdscript-patterns.md +188 -0
  112. package/dist/skills/defaults/game-development/unity-ecs-patterns.md +594 -0
  113. package/dist/skills/defaults/kubernetes/gitops-workflow.md +285 -0
  114. package/dist/skills/defaults/kubernetes/gitops.md +280 -0
  115. package/dist/skills/defaults/kubernetes/helm-chart-scaffolding.md +553 -0
  116. package/dist/skills/defaults/kubernetes/helm.md +343 -0
  117. package/dist/skills/defaults/kubernetes/k8s-manifest-generator.md +501 -0
  118. package/dist/skills/defaults/kubernetes/k8s-security-policies.md +342 -0
  119. package/dist/skills/defaults/kubernetes/manifests.md +330 -0
  120. package/dist/skills/defaults/kubernetes/security.md +337 -0
  121. package/dist/skills/defaults/llm-application/embedding-strategies.md +608 -0
  122. package/dist/skills/defaults/llm-application/hybrid-search-implementation.md +570 -0
  123. package/dist/skills/defaults/llm-application/hybrid-search.md +570 -0
  124. package/dist/skills/defaults/llm-application/langchain-architecture.md +666 -0
  125. package/dist/skills/defaults/llm-application/langchain.md +259 -0
  126. package/dist/skills/defaults/llm-application/llm-evaluation.md +695 -0
  127. package/dist/skills/defaults/llm-application/prompt-engineering-patterns.md +449 -0
  128. package/dist/skills/defaults/llm-application/prompt-engineering.md +219 -0
  129. package/dist/skills/defaults/llm-application/rag-implementation.md +434 -0
  130. package/dist/skills/defaults/llm-application/similarity-search-patterns.md +560 -0
  131. package/dist/skills/defaults/llm-application/similarity-search.md +560 -0
  132. package/dist/skills/defaults/llm-application/vector-index-tuning.md +523 -0
  133. package/dist/skills/defaults/mobile/mobile-android-design.md +440 -0
  134. package/dist/skills/defaults/mobile/mobile-ios-design.md +266 -0
  135. package/dist/skills/defaults/monitoring/distributed-tracing.md +436 -0
  136. package/dist/skills/defaults/monitoring/grafana-dashboards.md +370 -0
  137. package/dist/skills/defaults/monitoring/prometheus-configuration.md +379 -0
  138. package/dist/skills/defaults/monitoring/slo-implementation.md +323 -0
  139. package/dist/skills/defaults/refactoring/code-refactoring.md +349 -0
  140. package/dist/skills/defaults/security/anti-reversing-techniques/SKILL.md +559 -0
  141. package/dist/skills/defaults/security/auditor.md +168 -0
  142. package/dist/skills/defaults/security/binary-analysis-patterns/SKILL.md +438 -0
  143. package/dist/skills/defaults/security/memory-forensics/SKILL.md +483 -0
  144. package/dist/skills/defaults/security/mtls-configuration.md +349 -0
  145. package/dist/skills/defaults/security/protocol-reverse-engineering/SKILL.md +520 -0
  146. package/dist/skills/defaults/security/sast-configuration.md +182 -0
  147. package/dist/skills/defaults/security/security.md +313 -0
  148. package/dist/skills/defaults/security/stride-analysis.md +273 -0
  149. package/dist/skills/defaults/security/threat-mitigation-mapping.md +290 -0
  150. package/dist/skills/defaults/systems/bash-defensive-patterns/SKILL.md +539 -0
  151. package/dist/skills/defaults/systems/bats-testing-patterns/SKILL.md +631 -0
  152. package/dist/skills/defaults/systems/go-concurrency-patterns.md +657 -0
  153. package/dist/skills/defaults/systems/memory-safety-patterns.md +605 -0
  154. package/dist/skills/defaults/systems/rust-async-patterns.md +519 -0
  155. package/dist/skills/defaults/systems/shellcheck-configuration/SKILL.md +456 -0
  156. package/dist/skills/defaults/team-collaboration/multi-reviewer-patterns.md +126 -0
  157. package/dist/skills/defaults/team-collaboration/parallel-feature-development.md +151 -0
  158. package/dist/skills/defaults/testing/javascript-testing-patterns.md +1021 -0
  159. package/dist/skills/defaults/testing/python-testing-patterns.md +351 -0
  160. package/dist/skills/defaults/testing/testing.md +332 -0
  161. package/dist/skills/defaults/workflows/context-driven-development.md +384 -0
  162. package/dist/skills/defaults/workflows/track-management.md +592 -0
  163. package/dist/skills/defaults/workflows/workflow-patterns.md +622 -0
  164. package/dist/skills/index.d.ts +11 -0
  165. package/dist/skills/index.d.ts.map +1 -0
  166. package/dist/skills/index.js +129 -0
  167. package/dist/skills/index.js.map +1 -0
  168. package/dist/utils/character.js +6 -9
  169. package/dist/utils/character.js.map +1 -1
  170. package/dist/utils/contextManager.js +3 -7
  171. package/dist/utils/contextManager.js.map +1 -1
  172. package/dist/utils/inputbar.d.ts.map +1 -1
  173. package/dist/utils/inputbar.js +8 -1
  174. package/dist/utils/inputbar.js.map +1 -1
  175. package/dist/utils/output.d.ts.map +1 -1
  176. package/dist/utils/output.js +3 -35
  177. package/dist/utils/output.js.map +1 -1
  178. package/package.json +1 -1
@@ -0,0 +1,305 @@
1
+ ---
2
+ name: database-design
3
+ description: Design efficient, scalable database schemas with normalization, indexing, and performance optimization.
4
+ ---
5
+
6
+ # Database Design — CoWorker Edition
7
+
8
+ Build robust data models that scale. These principles apply to PostgreSQL, MySQL, and most relational databases.
9
+
10
+ ## When to Use This Skill
11
+
12
+ - Designing new database schemas
13
+ - Normalizing or denormalizing existing schemas
14
+ - Optimizing query performance
15
+ - Choosing data types
16
+ - Implementing relationships
17
+
18
+ ## Core Concepts
19
+
20
+ ### 1. Normalization
21
+
22
+ **First Normal Form (1NF):**
23
+ - Atomic values (no arrays in columns)
24
+ - No repeated groups
25
+ - Each row unique
26
+
27
+ ```sql
28
+ -- Bad: Repeating groups
29
+ CREATE TABLE orders_bad (
30
+ id INT,
31
+ item1 VARCHAR(100),
32
+ item2 VARCHAR(100),
33
+ item3 VARCHAR(100)
34
+ );
35
+
36
+ -- Good: Atomic values
37
+ CREATE TABLE orders (
38
+ id INT PRIMARY KEY,
39
+ customer_id INT,
40
+ order_date DATE
41
+ );
42
+
43
+ CREATE TABLE order_items (
44
+ id INT PRIMARY KEY,
45
+ order_id INT REFERENCES orders(id),
46
+ product_id INT,
47
+ quantity INT
48
+ );
49
+ ```
50
+
51
+ **Second Normal Form (2NF):**
52
+ - 1NF + No partial dependencies
53
+ - Non-key columns depend on entire primary key
54
+
55
+ ```sql
56
+ -- Bad: Partial dependency
57
+ CREATE TABLE order_items_bad (
58
+ order_id INT,
59
+ product_id INT, -- Part of PK
60
+ product_name VARCHAR(100), -- Depends only on product_id
61
+ quantity INT,
62
+ PRIMARY KEY (order_id, product_id)
63
+ );
64
+
65
+ -- Good: Separate tables
66
+ CREATE TABLE products (
67
+ id INT PRIMARY KEY,
68
+ name VARCHAR(100)
69
+ );
70
+
71
+ CREATE TABLE order_items (
72
+ order_id INT REFERENCES orders(id),
73
+ product_id INT REFERENCES products(id),
74
+ quantity INT,
75
+ PRIMARY KEY (order_id, product_id)
76
+ );
77
+ ```
78
+
79
+ **Third Normal Form (3NF):**
80
+ - 2NF + No transitive dependencies
81
+ - Non-key columns depend only on primary key
82
+
83
+ ```sql
84
+ -- Bad: Transitive dependency
85
+ CREATE TABLE orders_bad (
86
+ id INT PRIMARY KEY,
87
+ customer_id INT,
88
+ customer_city VARCHAR(100), -- Depends on customer_id, not order
89
+ customer_zip VARCHAR(10)
90
+ );
91
+
92
+ -- Good: Separate customer info
93
+ CREATE TABLE customers (
94
+ id INT PRIMARY KEY,
95
+ city VARCHAR(100),
96
+ zip VARCHAR(10)
97
+ );
98
+ ```
99
+
100
+ ### 2. Indexing Strategies
101
+
102
+ ```sql
103
+ -- Single column index
104
+ CREATE INDEX idx_orders_customer ON orders(customer_id);
105
+
106
+ -- Composite index (order matters!)
107
+ -- For: WHERE status = 'pending' AND created_at > '2024-01-01'
108
+ CREATE INDEX idx_orders_status_date ON orders(status, created_at);
109
+
110
+ -- Partial index (only active records)
111
+ CREATE INDEX idx_active_orders ON orders(customer_id)
112
+ WHERE status = 'active';
113
+
114
+ -- Unique index
115
+ CREATE UNIQUE INDEX idx_users_email ON users(email);
116
+
117
+ -- Covering index (includes all queried columns)
118
+ CREATE INDEX idx_orders_cover ON orders(customer_id, status, created_at)
119
+ INCLUDE (total_amount);
120
+ ```
121
+
122
+ ### 3. Data Types
123
+
124
+ ```sql
125
+ -- Use appropriate types
126
+ -- Dates
127
+ created_at TIMESTAMP WITH TIME ZONE -- For logs, records
128
+ birth_date DATE -- For dates without time
129
+
130
+ -- Strings
131
+ username VARCHAR(50) -- Bounded
132
+ bio TEXT -- Unbounded
133
+ country_code CHAR(2) -- Fixed length
134
+
135
+ -- Numbers
136
+ quantity INT -- Whole numbers
137
+ price DECIMAL(10, 2) -- Exact precision for money
138
+ latitude DECIMAL(9, 6) -- Coordinates
139
+
140
+ -- UUID vs Integer
141
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid() -- Distributed systems
142
+ id SERIAL PRIMARY KEY -- Single database
143
+ ```
144
+
145
+ ### 4. Relationships
146
+
147
+ ```sql
148
+ -- One-to-One
149
+ CREATE TABLE users (
150
+ id SERIAL PRIMARY KEY,
151
+ email VARCHAR(255) UNIQUE
152
+ );
153
+
154
+ CREATE TABLE user_profiles (
155
+ user_id INT PRIMARY KEY REFERENCES users(id),
156
+ bio TEXT,
157
+ avatar_url VARCHAR(500)
158
+ );
159
+
160
+ -- One-to-Many
161
+ CREATE TABLE customers (
162
+ id SERIAL PRIMARY KEY,
163
+ name VARCHAR(255)
164
+ );
165
+
166
+ CREATE TABLE orders (
167
+ id SERIAL PRIMARY KEY,
168
+ customer_id INT REFERENCES customers(id),
169
+ total DECIMAL(10, 2)
170
+ );
171
+
172
+ -- Many-to-Many
173
+ CREATE TABLE students (
174
+ id SERIAL PRIMARY KEY,
175
+ name VARCHAR(255)
176
+ );
177
+
178
+ CREATE TABLE courses (
179
+ id SERIAL PRIMARY KEY,
180
+ name VARCHAR(255)
181
+ );
182
+
183
+ CREATE TABLE enrollments (
184
+ student_id INT REFERENCES students(id),
185
+ course_id INT REFERENCES courses(id),
186
+ enrolled_at TIMESTAMP DEFAULT NOW(),
187
+ PRIMARY KEY (student_id, course_id)
188
+ );
189
+ ```
190
+
191
+ ### 5. Migrations
192
+
193
+ ```python
194
+ # Alembic migration example
195
+ """add_user_preferences
196
+
197
+ Revision ID: abc123
198
+ Revises:
199
+ Create Date: 2024-01-15 10:00:00
200
+ """
201
+ from alembic import op
202
+ import sqlalchemy as sa
203
+
204
+ revision = 'abc123'
205
+ down_revision = 'previous_revision'
206
+ branch_labels = None
207
+ depends_on = None
208
+
209
+ def upgrade():
210
+ op.create_table(
211
+ 'user_preferences',
212
+ sa.Column('user_id', sa.Integer(), nullable=False),
213
+ sa.Column('theme', sa.String(20), server_default='light'),
214
+ sa.Column('notifications', sa.Boolean(), server_default=True),
215
+ sa.ForeignKeyConstraint(['user_id'], ['users.id']),
216
+ sa.PrimaryKeyConstraint('user_id')
217
+ )
218
+
219
+ # Add index
220
+ op.create_index(
221
+ 'idx_preferences_theme',
222
+ 'user_preferences',
223
+ ['theme']
224
+ )
225
+
226
+ def downgrade():
227
+ op.drop_index('idx_preferences_theme')
228
+ op.drop_table('user_preferences')
229
+ ```
230
+
231
+ ### 6. Query Optimization
232
+
233
+ ```python
234
+ # Bad: N+1 queries
235
+ def get_orders_with_users():
236
+ orders = db.query(Order).all()
237
+ for order in orders:
238
+ user = db.query(User).get(order.user_id) # Query per order!
239
+ order.user = user
240
+ return orders
241
+
242
+ # Good: Eager loading
243
+ def get_orders_with_users():
244
+ return db.query(Order).options(
245
+ joinedload(Order.user)
246
+ ).all()
247
+
248
+ # Good: Specific columns
249
+ def get_order_summary():
250
+ return db.query(
251
+ Order.id,
252
+ Order.status,
253
+ User.name.label('customer_name')
254
+ ).join(User).all()
255
+ ```
256
+
257
+ ### 7. Transactions
258
+
259
+ ```python
260
+ from sqlalchemy import create_engine
261
+ from sqlalchemy.orm import sessionmaker
262
+
263
+ engine = create_engine(DATABASE_URL)
264
+ Session = sessionmaker(bind=engine)
265
+
266
+ def transfer_funds(from_account: int, to_account: int, amount: Decimal):
267
+ session = Session()
268
+ try:
269
+ # Start transaction
270
+ from_acc = session.query(Account).filter_by(id=from_account).with_for_update().first()
271
+ to_acc = session.query(Account).filter_by(id=to_account).with_for_update().first()
272
+
273
+ if from_acc.balance < amount:
274
+ raise InsufficientFundsError()
275
+
276
+ from_acc.balance -= amount
277
+ to_acc.balance += amount
278
+
279
+ session.commit()
280
+ except Exception:
281
+ session.rollback()
282
+ raise
283
+ finally:
284
+ session.close()
285
+ ```
286
+
287
+ ## Best Practices
288
+
289
+ 1. **Start normalized** - Denormalize only for performance
290
+ 2. **Index strategically** - Based on actual query patterns
291
+ 3. **Use constraints** - NOT NULL, CHECK, UNIQUE, FOREIGN KEY
292
+ 4. **Version migrations** - Always use migration tools
293
+ 5. **Test migrations** - Run against copy before production
294
+ 6. **Document schema** - ERD diagrams, README
295
+ 7. **Soft deletes** - Use `deleted_at` for audit trails
296
+
297
+ ## Common Pitfalls
298
+
299
+ - Missing foreign key constraints
300
+ - No indexes on foreign keys
301
+ - Storing serialized JSON when columns work
302
+ - Using TEXT for everything
303
+ - Over-normalization (too many joins)
304
+ - No migration strategy
305
+ - Ignoring database-specific features