0001_consolidated_schema.py
file-level
1
files
1
commits
0
hotspots
0
🧊 dead
0
💥 blast risk
| 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 |