pipeline_jobs


Description

{“what”:“A job in the content generation pipeline, tracking a single keyword-to-article workflow.”,“why”:“Without it, there is no record of each content request’s progress and state.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T04:17:29.868963545+00:00”}

Columns

Column Type Size Nulls Auto Default Children Parents Comments
id serial 10 √ nextval('pipeline_jobs_id_seq'::regclass)
drafts.job_id drafts_job_id_fkey R
editorial_briefs.job_id editorial_briefs_job_id_fkey R
published_posts.job_id published_posts_job_id_fkey R
quality_scores.job_id quality_scores_job_id_fkey R
serp_analyses.job_id serp_analyses_job_id_fkey R

{“what”:“Unique integer identifier for each pipeline job.”,“why”:“Without it, jobs cannot be referenced or updated individually.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T04:17:29.898654932+00:00”}

keyword text 2147483647 null

{“what”:“The search keyword or topic phrase that the job will produce content for.”,“why”:“Without it, the job has no subject to generate content about.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T04:17:29.920274569+00:00”}

content_type text 2147483647 'how_to'::text

{“what”:“Content format type, e.g., ‘how_to’, ‘listicle’, ‘guide’.”,“why”:“Without it, the output format is unknown, so the generation template cannot be chosen.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T04:17:29.931987812+00:00”}

tone text 2147483647 'educational'::text

{“what”:“Writing tone for the content, e.g., ‘educational’, ‘casual’, ‘professional’.”,“why”:“Without it, the style of the generated article is unspecified, affecting audience fit.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T04:17:29.963787404+00:00”}

target_word_count int4 10 √ 2000

{“what”:“Desired length of the final article in words.”,“why”:“Without it, the generation process has no length target, leading to inconsistent output sizes.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T04:17:29.980847394+00:00”}

current_step text 2147483647 'keyword_submitted'::text

{“what”:“Current stage in the pipeline, e.g., ‘keyword_submitted’, ‘outline_created’, ‘draft_written’.”,“why”:“Without it, the job’s progress is unknown, so resuming or error recovery is impossible.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T04:17:30.006730047+00:00”}

revision_count int4 10 √ 0

{“what”:“Number of revision cycles the job has undergone.”,“why”:“Without it, there is no limit or history of how many times the content was revised.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T04:17:30.047172342+00:00”}

error text 2147483647 √ null

{“what”:“Error message if the job failed, otherwise NULL.”,“why”:“Without it, failed jobs have no diagnostic information for debugging.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T04:17:30.121266864+00:00”}

created_at timestamptz 35,6 √ now()

{“what”:“Timestamp when the job was created, in UTC.”,“why”:“Without it, job age and ordering cannot be determined.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T04:17:30.162693670+00:00”}

updated_at timestamptz 35,6 √ now()

{“what”:“Timestamp of the last update to the job, in UTC.”,“why”:“Without it, stale jobs cannot be identified for cleanup or monitoring.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T04:17:30.199402264+00:00”}

news_pack_id int4 10 √ null

{“what”:“Foreign key to a news pack, if this job is part of a batch.”,“why”:“Without it, jobs cannot be grouped into a news pack for coordinated processing.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T04:17:30.244521789+00:00”}

Indexes

Constraint Name Type Sort Column(s)
pipeline_jobs_pkey Primary key Asc id
idx_jobs_status Performance Asc current_step

Check Constraints

Constraint Name Constraint
pipeline_jobs_current_step_check (current_step = ANY (ARRAY['keyword_submitted'::text, 'serp_researched'::text, 'content_extracted'::text, 'brief_created'::text, 'draft_generated'::text, 'quality_scored'::text, 'revision_complete'::text, 'published'::text, 'failed'::text]))

Relationships