gabriel / musehub public
0001_consolidated_schema.py python
846 lines 55.4 KB
Raw
sha256:94ef169c149a452bff7c604ded8b280b19bd477c2dabcb56972780b0b784c7aa Merge 'fix/assignee-sigil-inline' into 'dev' — proposal: As… Human 1 day ago
1 """Consolidated schema — single migration replacing the previous chain.
2
3 All tables, indexes, and constraints generated from the current ORM models.
4 """
5 from __future__ import annotations
6
7 from alembic import op
8 import sqlalchemy as sa
9
10
11 revision = "0001"
12 down_revision = None
13 branch_labels = None
14 depends_on = None
15
16
17 def upgrade() -> None:
18 # ### commands auto generated by Alembic - please adjust! ###
19 op.create_table('muse_objects',
20 sa.Column('object_id', sa.String(length=128), nullable=False),
21 sa.Column('size_bytes', sa.Integer(), nullable=False),
22 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
23 sa.PrimaryKeyConstraint('object_id')
24 )
25 op.create_table('muse_snapshots',
26 sa.Column('snapshot_id', sa.String(length=128), nullable=False),
27 sa.Column('manifest', sa.JSON(), nullable=False),
28 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
29 sa.PrimaryKeyConstraint('snapshot_id')
30 )
31 op.create_table('musehub_attestations',
32 sa.Column('attestation_id', sa.String(length=128), nullable=False),
33 sa.Column('attester', sa.String(length=64), nullable=False),
34 sa.Column('subject', sa.String(length=64), nullable=False),
35 sa.Column('claim', sa.Text(), nullable=False),
36 sa.Column('signature', sa.String(length=128), nullable=False),
37 sa.Column('attester_public_key', sa.String(length=128), nullable=False),
38 sa.Column('issued_at', sa.DateTime(timezone=True), nullable=False),
39 sa.Column('revoked_at', sa.DateTime(timezone=True), nullable=True),
40 sa.PrimaryKeyConstraint('attestation_id')
41 )
42 op.create_index('ix_musehub_attestations_attester', 'musehub_attestations', ['attester'], unique=False)
43 op.create_index('ix_musehub_attestations_subject', 'musehub_attestations', ['subject'], unique=False)
44 op.create_table('musehub_auth_challenges',
45 sa.Column('challenge_id', sa.String(length=36), nullable=False),
46 sa.Column('nonce_hex', sa.String(length=64), nullable=False),
47 sa.Column('fingerprint', sa.String(length=71), nullable=False),
48 sa.Column('algorithm', sa.String(length=32), nullable=False),
49 sa.Column('expires_at', sa.DateTime(timezone=True), nullable=False),
50 sa.PrimaryKeyConstraint('challenge_id'),
51 sa.UniqueConstraint('nonce_hex', name='uq_musehub_auth_challenges_nonce_hex')
52 )
53 op.create_index('ix_musehub_auth_challenges_expires_at', 'musehub_auth_challenges', ['expires_at'], unique=False)
54 op.create_table('musehub_domain_installs',
55 sa.Column('install_id', sa.String(length=36), nullable=False),
56 sa.Column('user_id', sa.String(length=128), nullable=False),
57 sa.Column('domain_id', sa.String(length=128), nullable=False),
58 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
59 sa.PrimaryKeyConstraint('install_id'),
60 sa.UniqueConstraint('user_id', 'domain_id', name='uq_musehub_domain_installs')
61 )
62 op.create_index(op.f('ix_musehub_domain_installs_domain_id'), 'musehub_domain_installs', ['domain_id'], unique=False)
63 op.create_index(op.f('ix_musehub_domain_installs_user_id'), 'musehub_domain_installs', ['user_id'], unique=False)
64 op.create_table('musehub_domains',
65 sa.Column('domain_id', sa.String(length=128), nullable=False),
66 sa.Column('author_user_id', sa.String(length=128), nullable=True),
67 sa.Column('author_slug', sa.String(length=64), nullable=False),
68 sa.Column('slug', sa.String(length=64), nullable=False),
69 sa.Column('display_name', sa.String(length=255), nullable=False),
70 sa.Column('description', sa.Text(), nullable=False),
71 sa.Column('version', sa.String(length=32), nullable=False),
72 sa.Column('manifest_hash', sa.String(length=128), nullable=False),
73 sa.Column('capabilities', sa.JSON(), nullable=False),
74 sa.Column('viewer_type', sa.String(length=64), nullable=False),
75 sa.Column('install_count', sa.Integer(), nullable=False),
76 sa.Column('is_verified', sa.Boolean(), nullable=False),
77 sa.Column('is_deprecated', sa.Boolean(), nullable=False),
78 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
79 sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
80 sa.PrimaryKeyConstraint('domain_id'),
81 sa.UniqueConstraint('author_slug', 'slug', name='uq_musehub_domains_author_slug')
82 )
83 op.create_index(op.f('ix_musehub_domains_author_slug'), 'musehub_domains', ['author_slug'], unique=False)
84 op.create_index(op.f('ix_musehub_domains_author_user_id'), 'musehub_domains', ['author_user_id'], unique=False)
85 op.create_index(op.f('ix_musehub_domains_slug'), 'musehub_domains', ['slug'], unique=False)
86 op.create_table('musehub_identities',
87 sa.Column('identity_id', sa.String(length=128), nullable=False),
88 sa.Column('handle', sa.String(length=64), nullable=False),
89 sa.Column('identity_type', sa.String(length=16), nullable=False),
90 sa.Column('display_name', sa.String(length=255), nullable=True),
91 sa.Column('bio', sa.Text(), nullable=True),
92 sa.Column('avatar_url', sa.String(length=2048), nullable=True),
93 sa.Column('website_url', sa.String(length=2048), nullable=True),
94 sa.Column('email', sa.String(length=255), nullable=True),
95 sa.Column('agent_model', sa.String(length=255), nullable=True),
96 sa.Column('agent_capabilities', sa.JSON(), nullable=False),
97 sa.Column('location', sa.String(length=255), nullable=True),
98 sa.Column('social_url', sa.String(length=2048), nullable=True),
99 sa.Column('is_verified', sa.Boolean(), nullable=False),
100 sa.Column('cc_license', sa.String(length=50), nullable=True),
101 sa.Column('pinned_repo_ids', sa.JSON(), nullable=False),
102 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
103 sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
104 sa.Column('deleted_at', sa.DateTime(timezone=True), nullable=True),
105 sa.Column('spawned_by', sa.String(length=64), nullable=True),
106 sa.Column('scope', sa.JSON(), nullable=True),
107 sa.Column('expires_at', sa.DateTime(timezone=True), nullable=True),
108 sa.Column('tos_accepted_at', sa.DateTime(timezone=True), nullable=True),
109 sa.Column('tos_version', sa.String(length=16), nullable=True),
110 sa.Column('avax_address', sa.String(length=64), nullable=True),
111 sa.Column('org_members', sa.JSON(), nullable=True),
112 sa.Column('org_quorum', sa.Integer(), nullable=True),
113 sa.Column('org_treasury_address', sa.String(length=64), nullable=True),
114 sa.PrimaryKeyConstraint('identity_id'),
115 sa.UniqueConstraint('handle', name='uq_musehub_identities_handle')
116 )
117 op.create_index(op.f('ix_musehub_identities_email'), 'musehub_identities', ['email'], unique=False)
118 op.create_index(op.f('ix_musehub_identities_expires_at'), 'musehub_identities', ['expires_at'], unique=False)
119 op.create_index(op.f('ix_musehub_identities_handle'), 'musehub_identities', ['handle'], unique=False)
120 op.create_index(op.f('ix_musehub_identities_is_verified'), 'musehub_identities', ['is_verified'], unique=False)
121 op.create_index(op.f('ix_musehub_identities_spawned_by'), 'musehub_identities', ['spawned_by'], unique=False)
122 op.create_table('musehub_mpay_claims',
123 sa.Column('claim_id', sa.String(length=128), nullable=False),
124 sa.Column('sender', sa.String(length=64), nullable=False),
125 sa.Column('recipient', sa.String(length=64), nullable=False),
126 sa.Column('amount_nano', sa.Integer(), nullable=False),
127 sa.Column('nonce_hex', sa.String(length=64), nullable=False),
128 sa.Column('signature', sa.String(length=128), nullable=False),
129 sa.Column('sender_public_key', sa.String(length=128), nullable=False),
130 sa.Column('memo', sa.String(length=500), nullable=True),
131 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
132 sa.Column('confirmed_at', sa.DateTime(timezone=True), nullable=True),
133 sa.Column('voided_at', sa.DateTime(timezone=True), nullable=True),
134 sa.PrimaryKeyConstraint('claim_id'),
135 sa.UniqueConstraint('nonce_hex'),
136 sa.UniqueConstraint('nonce_hex', name='uq_musehub_mpay_claims_nonce')
137 )
138 op.create_index('ix_musehub_mpay_claims_recipient', 'musehub_mpay_claims', ['recipient'], unique=False)
139 op.create_index('ix_musehub_mpay_claims_sender', 'musehub_mpay_claims', ['sender'], unique=False)
140 op.create_table('musehub_objects',
141 sa.Column('object_id', sa.String(length=128), nullable=False),
142 sa.Column('path', sa.String(length=1024), nullable=False),
143 sa.Column('size_bytes', sa.Integer(), nullable=False),
144 sa.Column('storage_uri', sa.String(length=2048), nullable=True),
145 sa.Column('content_cache', sa.LargeBinary(), nullable=True),
146 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
147 sa.Column('deleted_at', sa.DateTime(timezone=True), nullable=True),
148 sa.PrimaryKeyConstraint('object_id')
149 )
150 op.create_table('musehub_profile_snapshots',
151 sa.Column('handle', sa.String(length=64), nullable=False),
152 sa.Column('data_json', sa.Text(), nullable=False),
153 sa.Column('computed_at', sa.DateTime(timezone=True), nullable=False),
154 sa.Column('is_stale', sa.Boolean(), nullable=False),
155 sa.PrimaryKeyConstraint('handle')
156 )
157 op.create_table('musehub_repos',
158 sa.Column('repo_id', sa.String(length=128), nullable=False),
159 sa.Column('name', sa.String(length=255), nullable=False),
160 sa.Column('owner', sa.String(length=64), nullable=False),
161 sa.Column('slug', sa.String(length=64), nullable=False),
162 sa.Column('visibility', sa.String(length=20), nullable=False),
163 sa.Column('owner_user_id', sa.String(length=128), nullable=False),
164 sa.Column('description', sa.Text(), nullable=False),
165 sa.Column('tags', sa.JSON(), nullable=False),
166 sa.Column('domain_id', sa.String(length=128), nullable=True),
167 sa.Column('domain_meta', sa.JSON(), nullable=False),
168 sa.Column('settings', sa.JSON(), nullable=True),
169 sa.Column('default_branch', sa.String(length=255), nullable=False),
170 sa.Column('pushed_at', sa.DateTime(timezone=True), nullable=True),
171 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
172 sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
173 sa.Column('training_opt_out', sa.Boolean(), nullable=False),
174 sa.PrimaryKeyConstraint('repo_id'),
175 sa.UniqueConstraint('owner', 'slug', name='uq_musehub_repos_owner_slug')
176 )
177 op.create_index(op.f('ix_musehub_repos_domain_id'), 'musehub_repos', ['domain_id'], unique=False)
178 op.create_index(op.f('ix_musehub_repos_owner'), 'musehub_repos', ['owner'], unique=False)
179 op.create_index(op.f('ix_musehub_repos_owner_user_id'), 'musehub_repos', ['owner_user_id'], unique=False)
180 op.create_index('ix_musehub_repos_owner_visibility', 'musehub_repos', ['owner', 'visibility'], unique=False)
181 op.create_index(op.f('ix_musehub_repos_slug'), 'musehub_repos', ['slug'], unique=False)
182 op.create_table('muse_commits',
183 sa.Column('commit_id', sa.String(length=128), nullable=False),
184 sa.Column('repo_id', sa.String(length=128), nullable=False),
185 sa.Column('branch', sa.String(length=255), nullable=False),
186 sa.Column('parent_commit_id', sa.String(length=128), nullable=True),
187 sa.Column('parent2_commit_id', sa.String(length=128), nullable=True),
188 sa.Column('snapshot_id', sa.String(length=128), nullable=False),
189 sa.Column('message', sa.Text(), nullable=False),
190 sa.Column('author', sa.String(length=255), nullable=False),
191 sa.Column('committed_at', sa.DateTime(timezone=True), nullable=False),
192 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
193 sa.Column('commit_metadata', sa.JSON(), nullable=True),
194 sa.ForeignKeyConstraint(['snapshot_id'], ['muse_snapshots.snapshot_id'], ondelete='RESTRICT'),
195 sa.PrimaryKeyConstraint('commit_id')
196 )
197 op.create_index(op.f('ix_muse_commits_parent2_commit_id'), 'muse_commits', ['parent2_commit_id'], unique=False)
198 op.create_index(op.f('ix_muse_commits_parent_commit_id'), 'muse_commits', ['parent_commit_id'], unique=False)
199 op.create_index(op.f('ix_muse_commits_repo_id'), 'muse_commits', ['repo_id'], unique=False)
200 op.create_table('musehub_auth_keys',
201 sa.Column('key_id', sa.String(length=128), nullable=False),
202 sa.Column('identity_id', sa.String(length=128), nullable=False),
203 sa.Column('algorithm', sa.String(length=32), nullable=False),
204 sa.Column('public_key_b64', sa.Text(), nullable=False),
205 sa.Column('fingerprint', sa.String(length=71), nullable=False),
206 sa.Column('label', sa.String(length=255), nullable=False),
207 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
208 sa.Column('last_used_at', sa.DateTime(timezone=True), nullable=True),
209 sa.ForeignKeyConstraint(['identity_id'], ['musehub_identities.identity_id'], ondelete='CASCADE'),
210 sa.PrimaryKeyConstraint('key_id'),
211 sa.UniqueConstraint('fingerprint', name='uq_musehub_auth_keys_fingerprint')
212 )
213 op.create_index('ix_musehub_auth_keys_algorithm', 'musehub_auth_keys', ['algorithm'], unique=False)
214 op.create_index('ix_musehub_auth_keys_identity_id', 'musehub_auth_keys', ['identity_id'], unique=False)
215 op.create_table('musehub_background_jobs',
216 sa.Column('job_id', sa.String(length=36), nullable=False),
217 sa.Column('repo_id', sa.String(length=128), nullable=False),
218 sa.Column('job_type', sa.String(length=64), nullable=False),
219 sa.Column('payload', sa.JSON(), nullable=False),
220 sa.Column('status', sa.String(length=16), nullable=False),
221 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
222 sa.Column('claimed_at', sa.DateTime(timezone=True), nullable=True),
223 sa.Column('done_at', sa.DateTime(timezone=True), nullable=True),
224 sa.Column('attempt', sa.Integer(), nullable=False),
225 sa.Column('error', sa.Text(), nullable=True),
226 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
227 sa.PrimaryKeyConstraint('job_id')
228 )
229 op.create_index(op.f('ix_musehub_background_jobs_repo_id'), 'musehub_background_jobs', ['repo_id'], unique=False)
230 op.create_index(op.f('ix_musehub_background_jobs_status'), 'musehub_background_jobs', ['status'], unique=False)
231 op.create_index('ix_musehub_background_jobs_status_created', 'musehub_background_jobs', ['status', 'created_at'], unique=False)
232 op.create_table('musehub_branches',
233 sa.Column('branch_id', sa.String(length=128), nullable=False),
234 sa.Column('repo_id', sa.String(length=128), nullable=False),
235 sa.Column('name', sa.String(length=255), nullable=False),
236 sa.Column('head_commit_id', sa.String(length=128), nullable=True),
237 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
238 sa.PrimaryKeyConstraint('branch_id')
239 )
240 op.create_index(op.f('ix_musehub_branches_repo_id'), 'musehub_branches', ['repo_id'], unique=False)
241 op.create_table('musehub_collaborators',
242 sa.Column('id', sa.String(length=128), nullable=False),
243 sa.Column('repo_id', sa.String(length=128), nullable=False),
244 sa.Column('identity_handle', sa.String(length=64), nullable=False),
245 sa.Column('permission', sa.String(length=20), nullable=False),
246 sa.Column('invited_by_handle', sa.String(length=64), nullable=True),
247 sa.Column('invited_at', sa.DateTime(timezone=True), nullable=False),
248 sa.Column('accepted_at', sa.DateTime(timezone=True), nullable=True),
249 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
250 sa.PrimaryKeyConstraint('id'),
251 sa.UniqueConstraint('repo_id', 'identity_handle', name='uq_musehub_collaborators_repo_identity')
252 )
253 op.create_index('ix_musehub_collaborators_identity_handle', 'musehub_collaborators', ['identity_handle'], unique=False)
254 op.create_index('ix_musehub_collaborators_repo_id', 'musehub_collaborators', ['repo_id'], unique=False)
255 op.create_table('musehub_commits',
256 sa.Column('commit_id', sa.String(length=128), nullable=False),
257 sa.Column('repo_id', sa.String(length=128), nullable=False),
258 sa.Column('branch', sa.String(length=255), nullable=False),
259 sa.Column('parent_ids', sa.JSON(), nullable=False),
260 sa.Column('message', sa.Text(), nullable=False),
261 sa.Column('author', sa.String(length=255), nullable=False),
262 sa.Column('timestamp', sa.DateTime(timezone=True), nullable=False),
263 sa.Column('snapshot_id', sa.String(length=128), nullable=True),
264 sa.Column('commit_meta', sa.JSON(), nullable=False),
265 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
266 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
267 sa.PrimaryKeyConstraint('commit_id')
268 )
269 op.create_index(op.f('ix_musehub_commits_branch'), 'musehub_commits', ['branch'], unique=False)
270 op.create_index('ix_musehub_commits_repo_branch', 'musehub_commits', ['repo_id', 'branch'], unique=False)
271 op.create_index(op.f('ix_musehub_commits_repo_id'), 'musehub_commits', ['repo_id'], unique=False)
272 op.create_index('ix_musehub_commits_repo_timestamp', 'musehub_commits', ['repo_id', 'timestamp'], unique=False)
273 op.create_index(op.f('ix_musehub_commits_timestamp'), 'musehub_commits', ['timestamp'], unique=False)
274 op.create_table('musehub_coord_records',
275 sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
276 sa.Column('repo_id', sa.String(length=128), nullable=False),
277 sa.Column('kind', sa.String(length=32), nullable=False),
278 sa.Column('record_uuid', sa.String(length=36), nullable=False),
279 sa.Column('run_id', sa.String(length=255), nullable=False),
280 sa.Column('payload', sa.JSON(), nullable=False),
281 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
282 sa.Column('expires_at', sa.DateTime(timezone=True), nullable=True),
283 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
284 sa.PrimaryKeyConstraint('id'),
285 sa.UniqueConstraint('repo_id', 'kind', 'record_uuid', name='uq_coord_repo_kind_uuid')
286 )
287 op.create_index('ix_coord_repo_id_cursor', 'musehub_coord_records', ['repo_id', 'id'], unique=False)
288 op.create_index('ix_coord_repo_kind_id', 'musehub_coord_records', ['repo_id', 'kind', 'id'], unique=False)
289 op.create_index(op.f('ix_musehub_coord_records_repo_id'), 'musehub_coord_records', ['repo_id'], unique=False)
290 op.create_table('musehub_coord_reservations',
291 sa.Column('reservation_id', sa.String(length=128), nullable=False),
292 sa.Column('repo_id', sa.String(length=128), nullable=False),
293 sa.Column('symbol_address', sa.String(length=512), nullable=False),
294 sa.Column('agent_id', sa.String(length=255), nullable=False),
295 sa.Column('agent_model_id', sa.String(length=255), nullable=False),
296 sa.Column('ttl_s', sa.Integer(), nullable=False),
297 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
298 sa.Column('expires_at', sa.DateTime(timezone=True), nullable=False),
299 sa.Column('released_at', sa.DateTime(timezone=True), nullable=True),
300 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
301 sa.PrimaryKeyConstraint('reservation_id')
302 )
303 op.create_index(op.f('ix_musehub_coord_reservations_repo_id'), 'musehub_coord_reservations', ['repo_id'], unique=False)
304 op.create_table('musehub_coord_tasks',
305 sa.Column('task_id', sa.String(length=128), nullable=False),
306 sa.Column('repo_id', sa.String(length=128), nullable=False),
307 sa.Column('queue', sa.String(length=255), nullable=False),
308 sa.Column('priority', sa.Integer(), nullable=False),
309 sa.Column('payload', sa.JSON(), nullable=False),
310 sa.Column('status', sa.String(length=20), nullable=False),
311 sa.Column('claimed_by', sa.String(length=255), nullable=True),
312 sa.Column('claimed_at', sa.DateTime(timezone=True), nullable=True),
313 sa.Column('completed_at', sa.DateTime(timezone=True), nullable=True),
314 sa.Column('depends_on', sa.JSON(), nullable=False),
315 sa.Column('run_id', sa.String(length=255), nullable=True),
316 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
317 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
318 sa.PrimaryKeyConstraint('task_id')
319 )
320 op.create_index('ix_coord_tasks_repo_priority', 'musehub_coord_tasks', ['repo_id', 'priority'], unique=False)
321 op.create_index('ix_coord_tasks_repo_queue_status', 'musehub_coord_tasks', ['repo_id', 'queue', 'status'], unique=False)
322 op.create_index(op.f('ix_musehub_coord_tasks_repo_id'), 'musehub_coord_tasks', ['repo_id'], unique=False)
323 op.create_index(op.f('ix_musehub_coord_tasks_status'), 'musehub_coord_tasks', ['status'], unique=False)
324 op.create_table('musehub_forks',
325 sa.Column('fork_id', sa.String(length=128), nullable=False),
326 sa.Column('source_repo_id', sa.String(length=128), nullable=False),
327 sa.Column('fork_repo_id', sa.String(length=128), nullable=False),
328 sa.Column('forked_by', sa.String(length=255), nullable=False),
329 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
330 sa.ForeignKeyConstraint(['fork_repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
331 sa.ForeignKeyConstraint(['source_repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
332 sa.PrimaryKeyConstraint('fork_id'),
333 sa.UniqueConstraint('source_repo_id', 'forked_by', name='uq_musehub_forks')
334 )
335 op.create_index(op.f('ix_musehub_forks_fork_repo_id'), 'musehub_forks', ['fork_repo_id'], unique=False)
336 op.create_index(op.f('ix_musehub_forks_forked_by'), 'musehub_forks', ['forked_by'], unique=False)
337 op.create_index(op.f('ix_musehub_forks_source_repo_id'), 'musehub_forks', ['source_repo_id'], unique=False)
338 op.create_table('musehub_intel_results',
339 sa.Column('result_id', sa.String(length=128), nullable=False),
340 sa.Column('repo_id', sa.String(length=128), nullable=False),
341 sa.Column('intel_type', sa.String(length=128), nullable=False),
342 sa.Column('domain', sa.String(length=64), nullable=False),
343 sa.Column('ref', sa.String(length=128), nullable=False),
344 sa.Column('data_json', sa.Text(), nullable=False),
345 sa.Column('schema_version', sa.Integer(), nullable=False),
346 sa.Column('computed_at', sa.DateTime(timezone=True), nullable=False),
347 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
348 sa.PrimaryKeyConstraint('result_id'),
349 sa.UniqueConstraint('repo_id', 'intel_type', name='uq_musehub_intel_results_repo_type')
350 )
351 op.create_index(op.f('ix_musehub_intel_results_domain'), 'musehub_intel_results', ['domain'], unique=False)
352 op.create_index(op.f('ix_musehub_intel_results_intel_type'), 'musehub_intel_results', ['intel_type'], unique=False)
353 op.create_index(op.f('ix_musehub_intel_results_repo_id'), 'musehub_intel_results', ['repo_id'], unique=False)
354 op.create_index('ix_musehub_intel_results_repo_type', 'musehub_intel_results', ['repo_id', 'intel_type'], unique=False)
355 op.create_table('musehub_issues',
356 sa.Column('issue_id', sa.String(length=128), nullable=False),
357 sa.Column('repo_id', sa.String(length=128), nullable=False),
358 sa.Column('number', sa.Integer(), nullable=False),
359 sa.Column('title', sa.String(length=500), nullable=False),
360 sa.Column('body', sa.Text(), nullable=False),
361 sa.Column('state', sa.String(length=20), nullable=False),
362 sa.Column('labels', sa.JSON(), nullable=False),
363 sa.Column('symbol_anchors', sa.JSON(), nullable=False),
364 sa.Column('commit_anchors', sa.JSON(), nullable=False),
365 sa.Column('author', sa.String(length=255), nullable=False),
366 sa.Column('assignee', sa.String(length=255), nullable=True),
367 sa.Column('agent_id', sa.String(length=255), nullable=False),
368 sa.Column('model_id', sa.String(length=255), nullable=False),
369 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
370 sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
371 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
372 sa.PrimaryKeyConstraint('issue_id')
373 )
374 op.create_index(op.f('ix_musehub_issues_number'), 'musehub_issues', ['number'], unique=False)
375 op.create_index(op.f('ix_musehub_issues_repo_id'), 'musehub_issues', ['repo_id'], unique=False)
376 op.create_index('ix_musehub_issues_repo_number', 'musehub_issues', ['repo_id', 'number'], unique=False)
377 op.create_index('ix_musehub_issues_repo_state', 'musehub_issues', ['repo_id', 'state'], unique=False)
378 op.create_index(op.f('ix_musehub_issues_state'), 'musehub_issues', ['state'], unique=False)
379 op.create_table('musehub_labels',
380 sa.Column('id', sa.String(length=128), nullable=False),
381 sa.Column('repo_id', sa.String(length=128), nullable=False),
382 sa.Column('name', sa.String(length=50), nullable=False),
383 sa.Column('color', sa.String(length=7), nullable=False),
384 sa.Column('description', sa.String(length=200), nullable=True),
385 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
386 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
387 sa.PrimaryKeyConstraint('id'),
388 sa.UniqueConstraint('repo_id', 'name', name='uq_musehub_labels_repo_name')
389 )
390 op.create_index('ix_musehub_labels_repo_id', 'musehub_labels', ['repo_id'], unique=False)
391 op.create_table('musehub_mists',
392 sa.Column('mist_id', sa.String(length=128), nullable=False),
393 sa.Column('repo_id', sa.String(length=128), nullable=False),
394 sa.Column('owner', sa.String(length=64), nullable=False),
395 sa.Column('artifact_type', sa.String(length=20), nullable=False),
396 sa.Column('language', sa.String(length=64), nullable=False),
397 sa.Column('filename', sa.String(length=255), nullable=False),
398 sa.Column('title', sa.String(length=500), nullable=False),
399 sa.Column('description', sa.Text(), nullable=False),
400 sa.Column('content', sa.Text(), nullable=False),
401 sa.Column('size_bytes', sa.Integer(), nullable=False),
402 sa.Column('commit_id', sa.String(length=128), nullable=True),
403 sa.Column('snapshot_id', sa.String(length=128), nullable=True),
404 sa.Column('version', sa.Integer(), nullable=False),
405 sa.Column('agent_id', sa.String(length=255), nullable=False),
406 sa.Column('model_id', sa.String(length=255), nullable=False),
407 sa.Column('gpg_signature', sa.Text(), nullable=True),
408 sa.Column('fork_parent_id', sa.String(length=128), nullable=True),
409 sa.Column('fork_depth', sa.Integer(), nullable=False),
410 sa.Column('fork_count', sa.Integer(), nullable=False),
411 sa.Column('view_count', sa.Integer(), nullable=False),
412 sa.Column('embed_count', sa.Integer(), nullable=False),
413 sa.Column('visibility', sa.String(length=10), nullable=False),
414 sa.Column('tags', sa.JSON(), nullable=False),
415 sa.Column('symbol_anchors', sa.JSON(), nullable=False),
416 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
417 sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
418 sa.ForeignKeyConstraint(['fork_parent_id'], ['musehub_mists.mist_id'], ondelete='SET NULL'),
419 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
420 sa.PrimaryKeyConstraint('mist_id')
421 )
422 op.create_index(op.f('ix_musehub_mists_artifact_type'), 'musehub_mists', ['artifact_type'], unique=False)
423 op.create_index('ix_musehub_mists_artifact_type_created_at', 'musehub_mists', ['artifact_type', 'created_at'], unique=False)
424 op.create_index('ix_musehub_mists_fork_parent_id', 'musehub_mists', ['fork_parent_id'], unique=False)
425 op.create_index(op.f('ix_musehub_mists_owner'), 'musehub_mists', ['owner'], unique=False)
426 op.create_index('ix_musehub_mists_owner_created_at', 'musehub_mists', ['owner', 'created_at'], unique=False)
427 op.create_index('ix_musehub_mists_owner_visibility', 'musehub_mists', ['owner', 'visibility'], unique=False)
428 op.create_index(op.f('ix_musehub_mists_repo_id'), 'musehub_mists', ['repo_id'], unique=False)
429 op.create_table('musehub_object_refs',
430 sa.Column('repo_id', sa.String(length=128), nullable=False),
431 sa.Column('object_id', sa.String(length=128), nullable=False),
432 sa.ForeignKeyConstraint(['object_id'], ['musehub_objects.object_id'], ondelete='CASCADE'),
433 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
434 sa.PrimaryKeyConstraint('repo_id', 'object_id')
435 )
436 op.create_table('musehub_proposals',
437 sa.Column('proposal_id', sa.String(length=128), nullable=False),
438 sa.Column('repo_id', sa.String(length=128), nullable=False),
439 sa.Column('proposal_number', sa.Integer(), nullable=False),
440 sa.Column('title', sa.String(length=500), nullable=False),
441 sa.Column('body', sa.Text(), nullable=False),
442 sa.Column('state', sa.String(length=20), nullable=False),
443 sa.Column('from_branch', sa.String(length=255), nullable=False),
444 sa.Column('to_branch', sa.String(length=255), nullable=False),
445 sa.Column('merge_commit_id', sa.String(length=128), nullable=True),
446 sa.Column('merged_at', sa.DateTime(timezone=True), nullable=True),
447 sa.Column('author', sa.String(length=255), nullable=False),
448 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
449 sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
450 sa.Column('domain_diff', sa.JSON(), nullable=True),
451 sa.Column('risk_score', sa.Float(), nullable=True),
452 sa.Column('blast_delta', sa.Float(), nullable=True),
453 sa.Column('breakage_count', sa.Integer(), nullable=False),
454 sa.Column('test_gap_count', sa.Integer(), nullable=False),
455 sa.Column('symbols_changed', sa.Integer(), nullable=False),
456 sa.Column('touched_symbols', sa.JSON(), nullable=False),
457 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
458 sa.PrimaryKeyConstraint('proposal_id')
459 )
460 op.create_index(op.f('ix_musehub_proposals_repo_id'), 'musehub_proposals', ['repo_id'], unique=False)
461 op.create_index('ix_musehub_proposals_repo_number', 'musehub_proposals', ['repo_id', 'proposal_number'], unique=False)
462 op.create_index('ix_musehub_proposals_repo_state', 'musehub_proposals', ['repo_id', 'state'], unique=False)
463 op.create_index(op.f('ix_musehub_proposals_state'), 'musehub_proposals', ['state'], unique=False)
464 op.create_table('musehub_releases',
465 sa.Column('release_id', sa.String(length=128), nullable=False),
466 sa.Column('repo_id', sa.String(length=128), nullable=False),
467 sa.Column('tag', sa.String(length=100), nullable=False),
468 sa.Column('title', sa.String(length=500), nullable=False),
469 sa.Column('body', sa.Text(), nullable=False),
470 sa.Column('commit_id', sa.String(length=128), nullable=True),
471 sa.Column('snapshot_id', sa.String(length=128), nullable=True),
472 sa.Column('semver_major', sa.Integer(), nullable=False),
473 sa.Column('semver_minor', sa.Integer(), nullable=False),
474 sa.Column('semver_patch', sa.Integer(), nullable=False),
475 sa.Column('semver_pre', sa.String(length=255), nullable=False),
476 sa.Column('semver_build', sa.String(length=255), nullable=False),
477 sa.Column('channel', sa.String(length=20), nullable=False),
478 sa.Column('download_urls', sa.JSON(), nullable=False),
479 sa.Column('author', sa.String(length=255), nullable=False),
480 sa.Column('agent_id', sa.String(length=255), nullable=False),
481 sa.Column('model_id', sa.String(length=255), nullable=False),
482 sa.Column('changelog_json', sa.Text(), nullable=False),
483 sa.Column('is_draft', sa.Boolean(), nullable=False),
484 sa.Column('gpg_signature', sa.Text(), nullable=True),
485 sa.Column('semantic_report_json', sa.Text(), nullable=False),
486 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
487 sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
488 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
489 sa.PrimaryKeyConstraint('release_id'),
490 sa.UniqueConstraint('repo_id', 'tag', name='uq_musehub_releases_repo_tag')
491 )
492 op.create_index(op.f('ix_musehub_releases_channel'), 'musehub_releases', ['channel'], unique=False)
493 op.create_index(op.f('ix_musehub_releases_repo_id'), 'musehub_releases', ['repo_id'], unique=False)
494 op.create_index(op.f('ix_musehub_releases_tag'), 'musehub_releases', ['tag'], unique=False)
495 op.create_table('musehub_sessions',
496 sa.Column('session_id', sa.String(length=128), nullable=False),
497 sa.Column('repo_id', sa.String(length=128), nullable=False),
498 sa.Column('schema_version', sa.String(length=10), nullable=False),
499 sa.Column('started_at', sa.DateTime(timezone=True), nullable=False),
500 sa.Column('ended_at', sa.DateTime(timezone=True), nullable=True),
501 sa.Column('participants', sa.JSON(), nullable=False),
502 sa.Column('location', sa.String(length=500), nullable=False),
503 sa.Column('intent', sa.Text(), nullable=False),
504 sa.Column('commits', sa.JSON(), nullable=False),
505 sa.Column('notes', sa.Text(), nullable=False),
506 sa.Column('is_active', sa.Boolean(), nullable=False),
507 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
508 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
509 sa.PrimaryKeyConstraint('session_id')
510 )
511 op.create_index(op.f('ix_musehub_sessions_is_active'), 'musehub_sessions', ['is_active'], unique=False)
512 op.create_index(op.f('ix_musehub_sessions_repo_id'), 'musehub_sessions', ['repo_id'], unique=False)
513 op.create_index(op.f('ix_musehub_sessions_started_at'), 'musehub_sessions', ['started_at'], unique=False)
514 op.create_table('musehub_snapshots',
515 sa.Column('snapshot_id', sa.String(length=128), nullable=False),
516 sa.Column('repo_id', sa.String(length=128), nullable=False),
517 sa.Column('directories', sa.JSON(), nullable=False),
518 sa.Column('manifest_blob', sa.LargeBinary(), nullable=False),
519 sa.Column('entry_count', sa.Integer(), nullable=False),
520 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
521 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
522 sa.PrimaryKeyConstraint('snapshot_id')
523 )
524 op.create_index(op.f('ix_musehub_snapshots_repo_id'), 'musehub_snapshots', ['repo_id'], unique=False)
525 op.create_table('musehub_webhooks',
526 sa.Column('webhook_id', sa.String(length=128), nullable=False),
527 sa.Column('repo_id', sa.String(length=128), nullable=False),
528 sa.Column('url', sa.String(length=2048), nullable=False),
529 sa.Column('events', sa.JSON(), nullable=False),
530 sa.Column('secret', sa.Text(), nullable=False),
531 sa.Column('active', sa.Boolean(), nullable=False),
532 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
533 sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
534 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
535 sa.PrimaryKeyConstraint('webhook_id')
536 )
537 op.create_index(op.f('ix_musehub_webhooks_repo_id'), 'musehub_webhooks', ['repo_id'], unique=False)
538 op.create_table('musehub_wire_tags',
539 sa.Column('tag_id', sa.String(length=128), nullable=False),
540 sa.Column('repo_id', sa.String(length=128), nullable=False),
541 sa.Column('commit_id', sa.String(length=128), nullable=False),
542 sa.Column('tag', sa.String(length=500), nullable=False),
543 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
544 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
545 sa.PrimaryKeyConstraint('tag_id'),
546 sa.UniqueConstraint('repo_id', 'tag', name='uq_musehub_wire_tags_repo_tag')
547 )
548 op.create_index(op.f('ix_musehub_wire_tags_repo_id'), 'musehub_wire_tags', ['repo_id'], unique=False)
549 op.create_index(op.f('ix_musehub_wire_tags_tag'), 'musehub_wire_tags', ['tag'], unique=False)
550 op.create_table('muse_tags',
551 sa.Column('tag_id', sa.String(length=36), nullable=False),
552 sa.Column('repo_id', sa.String(length=128), nullable=False),
553 sa.Column('commit_id', sa.String(length=128), nullable=False),
554 sa.Column('tag', sa.Text(), nullable=False),
555 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
556 sa.ForeignKeyConstraint(['commit_id'], ['muse_commits.commit_id'], ondelete='CASCADE'),
557 sa.PrimaryKeyConstraint('tag_id')
558 )
559 op.create_index(op.f('ix_muse_tags_commit_id'), 'muse_tags', ['commit_id'], unique=False)
560 op.create_index(op.f('ix_muse_tags_repo_id'), 'muse_tags', ['repo_id'], unique=False)
561 op.create_index(op.f('ix_muse_tags_tag'), 'muse_tags', ['tag'], unique=False)
562 op.create_table('musehub_issue_comments',
563 sa.Column('comment_id', sa.String(length=128), nullable=False),
564 sa.Column('issue_id', sa.String(length=128), nullable=False),
565 sa.Column('repo_id', sa.String(length=128), nullable=False),
566 sa.Column('author', sa.String(length=255), nullable=False),
567 sa.Column('body', sa.Text(), nullable=False),
568 sa.Column('parent_id', sa.String(length=128), nullable=True),
569 sa.Column('is_deleted', sa.Boolean(), nullable=False),
570 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
571 sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
572 sa.ForeignKeyConstraint(['issue_id'], ['musehub_issues.issue_id'], ondelete='CASCADE'),
573 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
574 sa.PrimaryKeyConstraint('comment_id')
575 )
576 op.create_index(op.f('ix_musehub_issue_comments_created_at'), 'musehub_issue_comments', ['created_at'], unique=False)
577 op.create_index(op.f('ix_musehub_issue_comments_issue_id'), 'musehub_issue_comments', ['issue_id'], unique=False)
578 op.create_index(op.f('ix_musehub_issue_comments_parent_id'), 'musehub_issue_comments', ['parent_id'], unique=False)
579 op.create_index(op.f('ix_musehub_issue_comments_repo_id'), 'musehub_issue_comments', ['repo_id'], unique=False)
580 op.create_table('musehub_issue_events',
581 sa.Column('event_id', sa.String(length=36), nullable=False),
582 sa.Column('issue_id', sa.String(length=128), nullable=False),
583 sa.Column('repo_id', sa.String(length=128), nullable=False),
584 sa.Column('actor', sa.String(length=255), nullable=False),
585 sa.Column('event_type', sa.String(length=64), nullable=False),
586 sa.Column('payload', sa.JSON(), nullable=False),
587 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
588 sa.ForeignKeyConstraint(['issue_id'], ['musehub_issues.issue_id'], ondelete='CASCADE'),
589 sa.ForeignKeyConstraint(['repo_id'], ['musehub_repos.repo_id'], ondelete='CASCADE'),
590 sa.PrimaryKeyConstraint('event_id')
591 )
592 op.create_index(op.f('ix_musehub_issue_events_created_at'), 'musehub_issue_events', ['created_at'], unique=False)
593 op.create_index('ix_musehub_issue_events_issue_created', 'musehub_issue_events', ['issue_id', 'created_at'], unique=False)
594 op.create_index(op.f('ix_musehub_issue_events_issue_id'), 'musehub_issue_events', ['issue_id'], unique=False)
595 op.create_index(op.f('ix_musehub_issue_events_repo_id'), 'musehub_issue_events', ['repo_id'], unique=False)
596 op.create_table('musehub_issue_labels',
597 sa.Column('issue_id', sa.String(length=128), nullable=False),
598 sa.Column('label_id', sa.String(length=128), nullable=False),
599 sa.ForeignKeyConstraint(['issue_id'], ['musehub_issues.issue_id'], ondelete='CASCADE'),
600 sa.ForeignKeyConstraint(['label_id'], ['musehub_labels.id'], ondelete='CASCADE'),
601 sa.PrimaryKeyConstraint('issue_id', 'label_id')
602 )
603 op.create_index('ix_musehub_issue_labels_label_id', 'musehub_issue_labels', ['label_id'], unique=False)
604 op.create_table('musehub_proposal_comments',
605 sa.Column('comment_id', sa.String(length=128), nullable=False),
606 sa.Column('proposal_id', sa.String(length=128), nullable=False),
607 sa.Column('repo_id', sa.String(length=128), nullable=False),
608 sa.Column('author', sa.String(length=255), nullable=False),
609 sa.Column('body', sa.Text(), nullable=False),
610 sa.Column('dimension_ref', sa.JSON(), nullable=False),
611 sa.Column('symbol_address', sa.String(length=512), nullable=True),
612 sa.Column('parent_comment_id', sa.String(length=128), nullable=True),
613 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
614 sa.ForeignKeyConstraint(['proposal_id'], ['musehub_proposals.proposal_id'], ondelete='CASCADE'),
615 sa.PrimaryKeyConstraint('comment_id')
616 )
617 op.create_index(op.f('ix_musehub_proposal_comments_created_at'), 'musehub_proposal_comments', ['created_at'], unique=False)
618 op.create_index(op.f('ix_musehub_proposal_comments_parent_comment_id'), 'musehub_proposal_comments', ['parent_comment_id'], unique=False)
619 op.create_index(op.f('ix_musehub_proposal_comments_proposal_id'), 'musehub_proposal_comments', ['proposal_id'], unique=False)
620 op.create_index(op.f('ix_musehub_proposal_comments_repo_id'), 'musehub_proposal_comments', ['repo_id'], unique=False)
621 op.create_table('musehub_proposal_labels',
622 sa.Column('proposal_id', sa.String(length=128), nullable=False),
623 sa.Column('label_id', sa.String(length=128), nullable=False),
624 sa.ForeignKeyConstraint(['label_id'], ['musehub_labels.id'], ondelete='CASCADE'),
625 sa.ForeignKeyConstraint(['proposal_id'], ['musehub_proposals.proposal_id'], ondelete='CASCADE'),
626 sa.PrimaryKeyConstraint('proposal_id', 'label_id')
627 )
628 op.create_index('ix_musehub_proposal_labels_label_id', 'musehub_proposal_labels', ['label_id'], unique=False)
629 op.create_table('musehub_proposal_reviews',
630 sa.Column('review_id', sa.String(length=128), nullable=False),
631 sa.Column('proposal_id', sa.String(length=128), nullable=False),
632 sa.Column('reviewer_username', sa.String(length=255), nullable=False),
633 sa.Column('state', sa.String(length=30), nullable=False),
634 sa.Column('body', sa.Text(), nullable=True),
635 sa.Column('submitted_at', sa.DateTime(timezone=True), nullable=True),
636 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
637 sa.ForeignKeyConstraint(['proposal_id'], ['musehub_proposals.proposal_id'], ondelete='CASCADE'),
638 sa.PrimaryKeyConstraint('review_id')
639 )
640 op.create_index(op.f('ix_musehub_proposal_reviews_proposal_id'), 'musehub_proposal_reviews', ['proposal_id'], unique=False)
641 op.create_index(op.f('ix_musehub_proposal_reviews_reviewer_username'), 'musehub_proposal_reviews', ['reviewer_username'], unique=False)
642 op.create_index(op.f('ix_musehub_proposal_reviews_state'), 'musehub_proposal_reviews', ['state'], unique=False)
643 op.create_table('musehub_release_assets',
644 sa.Column('asset_id', sa.String(length=128), nullable=False),
645 sa.Column('release_id', sa.String(length=128), nullable=False),
646 sa.Column('repo_id', sa.String(length=128), nullable=False),
647 sa.Column('name', sa.String(length=500), nullable=False),
648 sa.Column('label', sa.String(length=255), nullable=False),
649 sa.Column('content_type', sa.String(length=128), nullable=False),
650 sa.Column('size', sa.Integer(), nullable=False),
651 sa.Column('download_url', sa.String(length=2048), nullable=False),
652 sa.Column('download_count', sa.Integer(), nullable=False),
653 sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
654 sa.ForeignKeyConstraint(['release_id'], ['musehub_releases.release_id'], ondelete='CASCADE'),
655 sa.PrimaryKeyConstraint('asset_id')
656 )
657 op.create_index(op.f('ix_musehub_release_assets_release_id'), 'musehub_release_assets', ['release_id'], unique=False)
658 op.create_index(op.f('ix_musehub_release_assets_repo_id'), 'musehub_release_assets', ['repo_id'], unique=False)
659 op.create_table('musehub_snapshot_entries',
660 sa.Column('snapshot_id', sa.String(length=128), nullable=False),
661 sa.Column('path', sa.String(length=4096), nullable=False),
662 sa.Column('object_id', sa.String(length=128), nullable=False),
663 sa.Column('size_bytes', sa.Integer(), nullable=False),
664 sa.ForeignKeyConstraint(['snapshot_id'], ['musehub_snapshots.snapshot_id'], ondelete='CASCADE'),
665 sa.PrimaryKeyConstraint('snapshot_id', 'path')
666 )
667 op.create_table('musehub_webhook_deliveries',
668 sa.Column('delivery_id', sa.String(length=36), nullable=False),
669 sa.Column('webhook_id', sa.String(length=128), nullable=False),
670 sa.Column('event_type', sa.String(length=64), nullable=False),
671 sa.Column('payload', sa.Text(), nullable=False),
672 sa.Column('attempt', sa.Integer(), nullable=False),
673 sa.Column('success', sa.Boolean(), nullable=False),
674 sa.Column('response_status', sa.Integer(), nullable=False),
675 sa.Column('response_body', sa.Text(), nullable=False),
676 sa.Column('delivered_at', sa.DateTime(timezone=True), nullable=False),
677 sa.ForeignKeyConstraint(['webhook_id'], ['musehub_webhooks.webhook_id'], ondelete='CASCADE'),
678 sa.PrimaryKeyConstraint('delivery_id')
679 )
680 op.create_index(op.f('ix_musehub_webhook_deliveries_event_type'), 'musehub_webhook_deliveries', ['event_type'], unique=False)
681 op.create_index(op.f('ix_musehub_webhook_deliveries_webhook_id'), 'musehub_webhook_deliveries', ['webhook_id'], unique=False)
682 # ### end Alembic commands ###
683
684
685 def downgrade() -> None:
686 # Wrap drop operations with IF EXISTS so this base migration is idempotent
687 # even if a later migration's downgrade already dropped some tables/indexes.
688 from sqlalchemy import text as _text
689 _conn = op.get_bind()
690
691 def _safe_drop_index(name, **kw):
692 _conn.execute(_text(f"DROP INDEX IF EXISTS {name}"))
693
694 def _safe_drop_table(name, **kw):
695 _conn.execute(_text(f"DROP TABLE IF EXISTS {name} CASCADE"))
696
697 _orig_drop_index, _orig_drop_table = op.drop_index, op.drop_table
698 op.drop_index, op.drop_table = _safe_drop_index, _safe_drop_table
699
700 # ### commands auto generated by Alembic - please adjust! ###
701 op.drop_index(op.f('ix_musehub_webhook_deliveries_webhook_id'), table_name='musehub_webhook_deliveries')
702 op.drop_index(op.f('ix_musehub_webhook_deliveries_event_type'), table_name='musehub_webhook_deliveries')
703 op.drop_table('musehub_webhook_deliveries')
704 op.drop_table('musehub_snapshot_entries')
705 op.drop_index(op.f('ix_musehub_release_assets_repo_id'), table_name='musehub_release_assets')
706 op.drop_index(op.f('ix_musehub_release_assets_release_id'), table_name='musehub_release_assets')
707 op.drop_table('musehub_release_assets')
708 op.drop_index(op.f('ix_musehub_proposal_reviews_state'), table_name='musehub_proposal_reviews')
709 op.drop_index(op.f('ix_musehub_proposal_reviews_reviewer_username'), table_name='musehub_proposal_reviews')
710 op.drop_index(op.f('ix_musehub_proposal_reviews_proposal_id'), table_name='musehub_proposal_reviews')
711 op.drop_table('musehub_proposal_reviews')
712 op.drop_index('ix_musehub_proposal_labels_label_id', table_name='musehub_proposal_labels')
713 op.drop_table('musehub_proposal_labels')
714 op.drop_index(op.f('ix_musehub_proposal_comments_repo_id'), table_name='musehub_proposal_comments')
715 op.drop_index(op.f('ix_musehub_proposal_comments_proposal_id'), table_name='musehub_proposal_comments')
716 op.drop_index(op.f('ix_musehub_proposal_comments_parent_comment_id'), table_name='musehub_proposal_comments')
717 op.drop_index(op.f('ix_musehub_proposal_comments_created_at'), table_name='musehub_proposal_comments')
718 op.drop_table('musehub_proposal_comments')
719 op.drop_index('ix_musehub_issue_labels_label_id', table_name='musehub_issue_labels')
720 op.drop_table('musehub_issue_labels')
721 op.drop_index(op.f('ix_musehub_issue_events_repo_id'), table_name='musehub_issue_events')
722 op.drop_index(op.f('ix_musehub_issue_events_issue_id'), table_name='musehub_issue_events')
723 op.drop_index('ix_musehub_issue_events_issue_created', table_name='musehub_issue_events')
724 op.drop_index(op.f('ix_musehub_issue_events_created_at'), table_name='musehub_issue_events')
725 op.drop_table('musehub_issue_events')
726 op.drop_index(op.f('ix_musehub_issue_comments_repo_id'), table_name='musehub_issue_comments')
727 op.drop_index(op.f('ix_musehub_issue_comments_parent_id'), table_name='musehub_issue_comments')
728 op.drop_index(op.f('ix_musehub_issue_comments_issue_id'), table_name='musehub_issue_comments')
729 op.drop_index(op.f('ix_musehub_issue_comments_created_at'), table_name='musehub_issue_comments')
730 op.drop_table('musehub_issue_comments')
731 op.drop_index(op.f('ix_muse_tags_tag'), table_name='muse_tags')
732 op.drop_index(op.f('ix_muse_tags_repo_id'), table_name='muse_tags')
733 op.drop_index(op.f('ix_muse_tags_commit_id'), table_name='muse_tags')
734 op.drop_table('muse_tags')
735 op.drop_index(op.f('ix_musehub_wire_tags_tag'), table_name='musehub_wire_tags')
736 op.drop_index(op.f('ix_musehub_wire_tags_repo_id'), table_name='musehub_wire_tags')
737 op.drop_table('musehub_wire_tags')
738 op.drop_index(op.f('ix_musehub_webhooks_repo_id'), table_name='musehub_webhooks')
739 op.drop_table('musehub_webhooks')
740 op.drop_index(op.f('ix_musehub_snapshots_repo_id'), table_name='musehub_snapshots')
741 op.drop_table('musehub_snapshots')
742 op.drop_index(op.f('ix_musehub_sessions_started_at'), table_name='musehub_sessions')
743 op.drop_index(op.f('ix_musehub_sessions_repo_id'), table_name='musehub_sessions')
744 op.drop_index(op.f('ix_musehub_sessions_is_active'), table_name='musehub_sessions')
745 op.drop_table('musehub_sessions')
746 op.drop_index(op.f('ix_musehub_releases_tag'), table_name='musehub_releases')
747 op.drop_index(op.f('ix_musehub_releases_repo_id'), table_name='musehub_releases')
748 op.drop_index(op.f('ix_musehub_releases_channel'), table_name='musehub_releases')
749 op.drop_table('musehub_releases')
750 op.drop_index(op.f('ix_musehub_proposals_state'), table_name='musehub_proposals')
751 op.drop_index('ix_musehub_proposals_repo_state', table_name='musehub_proposals')
752 op.drop_index('ix_musehub_proposals_repo_number', table_name='musehub_proposals')
753 op.drop_index(op.f('ix_musehub_proposals_repo_id'), table_name='musehub_proposals')
754 op.drop_table('musehub_proposals')
755 op.drop_table('musehub_object_refs')
756 op.drop_index(op.f('ix_musehub_mists_repo_id'), table_name='musehub_mists')
757 op.drop_index('ix_musehub_mists_owner_visibility', table_name='musehub_mists')
758 op.drop_index('ix_musehub_mists_owner_created_at', table_name='musehub_mists')
759 op.drop_index(op.f('ix_musehub_mists_owner'), table_name='musehub_mists')
760 op.drop_index('ix_musehub_mists_fork_parent_id', table_name='musehub_mists')
761 op.drop_index('ix_musehub_mists_artifact_type_created_at', table_name='musehub_mists')
762 op.drop_index(op.f('ix_musehub_mists_artifact_type'), table_name='musehub_mists')
763 op.drop_table('musehub_mists')
764 op.drop_index('ix_musehub_labels_repo_id', table_name='musehub_labels')
765 op.drop_table('musehub_labels')
766 op.drop_index(op.f('ix_musehub_issues_state'), table_name='musehub_issues')
767 op.drop_index('ix_musehub_issues_repo_state', table_name='musehub_issues')
768 op.drop_index('ix_musehub_issues_repo_number', table_name='musehub_issues')
769 op.drop_index(op.f('ix_musehub_issues_repo_id'), table_name='musehub_issues')
770 op.drop_index(op.f('ix_musehub_issues_number'), table_name='musehub_issues')
771 op.drop_table('musehub_issues')
772 op.drop_index('ix_musehub_intel_results_repo_type', table_name='musehub_intel_results')
773 op.drop_index(op.f('ix_musehub_intel_results_repo_id'), table_name='musehub_intel_results')
774 op.drop_index(op.f('ix_musehub_intel_results_intel_type'), table_name='musehub_intel_results')
775 op.drop_index(op.f('ix_musehub_intel_results_domain'), table_name='musehub_intel_results')
776 op.drop_table('musehub_intel_results')
777 op.drop_index(op.f('ix_musehub_forks_source_repo_id'), table_name='musehub_forks')
778 op.drop_index(op.f('ix_musehub_forks_forked_by'), table_name='musehub_forks')
779 op.drop_index(op.f('ix_musehub_forks_fork_repo_id'), table_name='musehub_forks')
780 op.drop_table('musehub_forks')
781 op.drop_index(op.f('ix_musehub_coord_tasks_status'), table_name='musehub_coord_tasks')
782 op.drop_index(op.f('ix_musehub_coord_tasks_repo_id'), table_name='musehub_coord_tasks')
783 op.drop_index('ix_coord_tasks_repo_queue_status', table_name='musehub_coord_tasks')
784 op.drop_index('ix_coord_tasks_repo_priority', table_name='musehub_coord_tasks')
785 op.drop_table('musehub_coord_tasks')
786 op.drop_index(op.f('ix_musehub_coord_reservations_repo_id'), table_name='musehub_coord_reservations')
787 op.drop_table('musehub_coord_reservations')
788 op.drop_index(op.f('ix_musehub_coord_records_repo_id'), table_name='musehub_coord_records')
789 op.drop_index('ix_coord_repo_kind_id', table_name='musehub_coord_records')
790 op.drop_index('ix_coord_repo_id_cursor', table_name='musehub_coord_records')
791 op.drop_table('musehub_coord_records')
792 op.drop_index(op.f('ix_musehub_commits_timestamp'), table_name='musehub_commits')
793 op.drop_index('ix_musehub_commits_repo_timestamp', table_name='musehub_commits')
794 op.drop_index(op.f('ix_musehub_commits_repo_id'), table_name='musehub_commits')
795 op.drop_index('ix_musehub_commits_repo_branch', table_name='musehub_commits')
796 op.drop_index(op.f('ix_musehub_commits_branch'), table_name='musehub_commits')
797 op.drop_table('musehub_commits')
798 op.drop_index('ix_musehub_collaborators_repo_id', table_name='musehub_collaborators')
799 op.drop_index('ix_musehub_collaborators_identity_handle', table_name='musehub_collaborators')
800 op.drop_table('musehub_collaborators')
801 op.drop_index(op.f('ix_musehub_branches_repo_id'), table_name='musehub_branches')
802 op.drop_table('musehub_branches')
803 op.drop_index('ix_musehub_background_jobs_status_created', table_name='musehub_background_jobs')
804 op.drop_index(op.f('ix_musehub_background_jobs_status'), table_name='musehub_background_jobs')
805 op.drop_index(op.f('ix_musehub_background_jobs_repo_id'), table_name='musehub_background_jobs')
806 op.drop_table('musehub_background_jobs')
807 op.drop_index('ix_musehub_auth_keys_identity_id', table_name='musehub_auth_keys')
808 op.drop_index('ix_musehub_auth_keys_algorithm', table_name='musehub_auth_keys')
809 op.drop_table('musehub_auth_keys')
810 op.drop_index(op.f('ix_muse_commits_repo_id'), table_name='muse_commits')
811 op.drop_index(op.f('ix_muse_commits_parent_commit_id'), table_name='muse_commits')
812 op.drop_index(op.f('ix_muse_commits_parent2_commit_id'), table_name='muse_commits')
813 op.drop_table('muse_commits')
814 op.drop_index(op.f('ix_musehub_repos_slug'), table_name='musehub_repos')
815 op.drop_index('ix_musehub_repos_owner_visibility', table_name='musehub_repos')
816 op.drop_index(op.f('ix_musehub_repos_owner_user_id'), table_name='musehub_repos')
817 op.drop_index(op.f('ix_musehub_repos_owner'), table_name='musehub_repos')
818 op.drop_index(op.f('ix_musehub_repos_domain_id'), table_name='musehub_repos')
819 op.drop_table('musehub_repos')
820 op.drop_table('musehub_profile_snapshots')
821 op.drop_table('musehub_objects')
822 op.drop_index('ix_musehub_mpay_claims_sender', table_name='musehub_mpay_claims')
823 op.drop_index('ix_musehub_mpay_claims_recipient', table_name='musehub_mpay_claims')
824 op.drop_table('musehub_mpay_claims')
825 op.drop_index(op.f('ix_musehub_identities_spawned_by'), table_name='musehub_identities')
826 op.drop_index(op.f('ix_musehub_identities_is_verified'), table_name='musehub_identities')
827 op.drop_index(op.f('ix_musehub_identities_handle'), table_name='musehub_identities')
828 op.drop_index(op.f('ix_musehub_identities_expires_at'), table_name='musehub_identities')
829 op.drop_index(op.f('ix_musehub_identities_email'), table_name='musehub_identities')
830 op.drop_table('musehub_identities')
831 op.drop_index(op.f('ix_musehub_domains_slug'), table_name='musehub_domains')
832 op.drop_index(op.f('ix_musehub_domains_author_user_id'), table_name='musehub_domains')
833 op.drop_index(op.f('ix_musehub_domains_author_slug'), table_name='musehub_domains')
834 op.drop_table('musehub_domains')
835 op.drop_index(op.f('ix_musehub_domain_installs_user_id'), table_name='musehub_domain_installs')
836 op.drop_index(op.f('ix_musehub_domain_installs_domain_id'), table_name='musehub_domain_installs')
837 op.drop_table('musehub_domain_installs')
838 op.drop_index('ix_musehub_auth_challenges_expires_at', table_name='musehub_auth_challenges')
839 op.drop_table('musehub_auth_challenges')
840 op.drop_index('ix_musehub_attestations_subject', table_name='musehub_attestations')
841 op.drop_index('ix_musehub_attestations_attester', table_name='musehub_attestations')
842 op.drop_table('musehub_attestations')
843 op.drop_table('muse_snapshots')
844 op.drop_table('muse_objects')
845 # ### end Alembic commands ###
846 op.drop_index, op.drop_table = _orig_drop_index, _orig_drop_table
File History 3 commits
sha256:94ef169c149a452bff7c604ded8b280b19bd477c2dabcb56972780b0b784c7aa Merge 'fix/assignee-sigil-inline' into 'dev' — proposal: As… Human 1 day ago
sha256:6b1949fc2797ca4c1936a637a4cbfec828ef56cf52398a2e74ca3c4f494e728f fix: use wire_bytes not mpack_bytes_raw in compute_object_b… Sonnet 4.6 patch 9 days ago
sha256:4aed3d8601c8dd3ed37074de35f11f4a9699a0a4b99d43727048fd3f8e6fd13d chore: doc sweep, ignore wrangler build state, misc fixes Sonnet 4.6 minor 12 days ago