Artifex/control_plane/authoring/migrations/0001_initial.py

235 lines
13 KiB
Python
Raw Permalink Normal View History

# 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'),
),
]