235 lines
13 KiB
Python
235 lines
13 KiB
Python
|
|
# 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'),
|
||
|
|
),
|
||
|
|
]
|