# Generated by Django 5.2.16 on 2026-08-21 06:10 import uuid import django.db.models.deletion from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ('projects', '0006_roadmap_scenario_lab_v1'), ] operations = [ migrations.CreateModel( name='Chapter', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('number', models.PositiveIntegerField()), ('title', models.CharField(max_length=255)), ('status', models.CharField(choices=[('PLANNED', 'Planned'), ('DRAFTING', 'Drafting'), ('REVIEW', 'Review'), ('APPROVED', 'Approved')], default='PLANNED', max_length=32)), ], options={ 'ordering': ['number'], }, ), migrations.CreateModel( name='OutlineVersion', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('version', models.PositiveIntegerField()), ('content', models.JSONField(default=dict)), ('sha256', models.CharField(blank=True, max_length=64)), ('approved_at', models.DateTimeField(blank=True, null=True)), ], ), migrations.CreateModel( name='StoryBibleVersion', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('version', models.PositiveIntegerField()), ('content', models.TextField()), ('structured_canon', models.JSONField(blank=True, default=dict)), ('sha256', models.CharField(blank=True, max_length=64)), ('approved_at', models.DateTimeField(blank=True, null=True)), ], ), migrations.CreateModel( name='ChapterRevision', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('revision', models.PositiveIntegerField()), ('status', models.CharField(choices=[('SOURCE', 'Source'), ('DRAFT', 'Draft'), ('REVIEW', 'Review'), ('APPROVED', 'Approved'), ('REJECTED', 'Rejected')], default='DRAFT', max_length=32)), ('scene_plan', models.JSONField(blank=True, default=dict)), ('prose', models.TextField(blank=True)), ('continuity_state', models.JSONField(blank=True, default=dict)), ('artifact_uri', models.TextField(blank=True)), ('word_count', models.PositiveIntegerField(default=0)), ('sha256', models.CharField(blank=True, max_length=64)), ('graph_thread_id', models.CharField(blank=True, db_index=True, max_length=255)), ('generation_metadata', models.JSONField(blank=True, default=dict)), ('approved_at', models.DateTimeField(blank=True, null=True)), ('chapter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='revisions', to='authoring.chapter')), ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='children', to='authoring.chapterrevision')), ('source_revision', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='source_children', to='authoring.chapterrevision')), ], ), migrations.AddField( model_name='chapter', name='current_revision', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='current_for_chapters', to='authoring.chapterrevision'), ), migrations.CreateModel( name='CanonSnapshot', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('through_chapter', models.PositiveIntegerField()), ('version', models.PositiveIntegerField()), ('state', models.JSONField(default=dict)), ('sha256', models.CharField(max_length=64)), ('source_revision', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, related_name='committed_canon', to='authoring.chapterrevision')), ], options={ 'ordering': ['version'], }, ), migrations.CreateModel( name='EditorialFinding', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('review_kind', models.CharField(max_length=80)), ('severity', models.CharField(choices=[('INFO', 'Info'), ('LOW', 'Low'), ('MEDIUM', 'Medium'), ('HIGH', 'High'), ('CRITICAL', 'Critical')], default='INFO', max_length=16)), ('category', models.CharField(max_length=80)), ('location', models.CharField(blank=True, max_length=255)), ('description', models.TextField()), ('suggested_revision', models.TextField(blank=True)), ('evidence', models.JSONField(blank=True, default=dict)), ('status', models.CharField(choices=[('OPEN', 'Open'), ('RESOLVED', 'Resolved'), ('ACCEPTED', 'Accepted')], default='OPEN', max_length=16)), ('model_metadata', models.JSONField(blank=True, default=dict)), ('revision', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='findings', to='authoring.chapterrevision')), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='GenerationContextSnapshot', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('content', models.JSONField(default=dict)), ('sha256', models.CharField(max_length=64)), ('chapter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='context_snapshots', to='authoring.chapter')), ('prior_canon', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='derived_contexts', to='authoring.canonsnapshot')), ('outline', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='authoring.outlineversion')), ('story_bible', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='authoring.storybibleversion')), ], options={ 'abstract': False, }, ), migrations.AddField( model_name='chapterrevision', name='context_snapshot', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='revisions', to='authoring.generationcontextsnapshot'), ), migrations.AddField( model_name='chapterrevision', name='outline', field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='authoring.outlineversion'), ), migrations.CreateModel( name='PromptVersion', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('name', models.CharField(max_length=160)), ('purpose', models.CharField(max_length=80)), ('version', models.PositiveIntegerField()), ('system_text', models.TextField(blank=True)), ('user_template', models.TextField()), ('config', models.JSONField(blank=True, default=dict)), ('is_active', models.BooleanField(default=False)), ], options={ 'constraints': [models.UniqueConstraint(fields=('name', 'version'), name='unique_authoring_prompt_version'), models.UniqueConstraint(condition=models.Q(('is_active', True)), fields=('purpose',), name='unique_active_authoring_prompt_purpose')], }, ), migrations.AddField( model_name='chapterrevision', name='story_bible', field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='authoring.storybibleversion'), ), migrations.CreateModel( name='StoryProject', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('title', models.CharField(max_length=255)), ('series', models.CharField(blank=True, max_length=255)), ('slug', models.SlugField(max_length=160, unique=True)), ('status', models.CharField(choices=[('PLANNING', 'Planning'), ('REVISING', 'Revising'), ('DRAFTING', 'Drafting'), ('COMPLETE', 'Complete')], default='PLANNING', max_length=32)), ('artifact_root', models.TextField(blank=True)), ('config', models.JSONField(blank=True, default=dict)), ('project', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='story_project', to='projects.project')), ], options={ 'abstract': False, }, ), migrations.AddField( model_name='storybibleversion', name='story', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bible_versions', to='authoring.storyproject'), ), migrations.AddField( model_name='outlineversion', name='story', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='outline_versions', to='authoring.storyproject'), ), migrations.AddField( model_name='generationcontextsnapshot', name='story', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='context_snapshots', to='authoring.storyproject'), ), migrations.AddField( model_name='chapter', name='story', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='chapters', to='authoring.storyproject'), ), migrations.AddField( model_name='canonsnapshot', name='story', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='canon_snapshots', to='authoring.storyproject'), ), migrations.AddConstraint( model_name='chapterrevision', constraint=models.UniqueConstraint(fields=('chapter', 'revision'), name='unique_chapter_revision_number'), ), migrations.AddConstraint( model_name='storybibleversion', constraint=models.UniqueConstraint(fields=('story', 'version'), name='unique_story_bible_version'), ), migrations.AddConstraint( model_name='outlineversion', constraint=models.UniqueConstraint(fields=('story', 'version'), name='unique_story_outline_version'), ), migrations.AddConstraint( model_name='chapter', constraint=models.UniqueConstraint(fields=('story', 'number'), name='unique_story_chapter_number'), ), migrations.AddConstraint( model_name='canonsnapshot', constraint=models.UniqueConstraint(fields=('story', 'version'), name='unique_story_canon_version'), ), ]