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