1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6355],{32304:(e,t,i)=>{i.d(t,{Uf:()=>r});let r=Object.freeze(["primary","guest-2","guest-3","guest-4","guest-5"]);r.length},35226:(e,t,i)=>{i.d(t,{Fy:()=>a,MY:()=>l,RR:()=>s,uC:()=>d});let r=/^[a-zA-Z0-9_.:-]{1,180}$/;function s(e){return[...new Set((Array.isArray(e)?e:[]).filter(e=>"string"==typeof e&&r.test(e.trim())).map(e=>e.trim()))].slice(0,20)}function n(e){let t=new Set;return(Array.isArray(e)?e:[]).flatMap(e=>{let i="string"==typeof e?.person_id?e.person_id.trim():"",s=String(e?.label||e?.name||"").trim().replace(/\s+/g," ").slice(0,180);return!r.test(i)||!s||/[\r\n@]/.test(s)||t.has(i)?[]:(t.add(i),[{person_id:i,label:s}])}).slice(0,20)}function o(e,t){let i=String(e||""),r=[];for(let e of n(t)){let t=`@${e.label}`,s=i.indexOf(t);for(;-1!==s;){let n=s?i[s-1]:"",o=i[s+t.length]||"";n&&/[\p{L}\p{N}_@]/u.test(n)||o&&/[\p{L}\p{N}_]/u.test(o)||r.push({start:s,end:s+t.length,...e}),s=i.indexOf(t,s+t.length)}}let s=r.sort((e,t)=>e.start-t.start||t.end-e.end||e.person_id.localeCompare(t.person_id));return s.filter(e=>!s.some(t=>t.start<=e.start&&t.end>=e.end&&(t.start<e.start||t.end>e.end)))}function a(e,t){let i=new Set(o(e,t).map(e=>e.person_id));return n(t).filter(e=>i.has(e.person_id))}function d(e,t){let i=String(e||""),r=[],s=0;for(let e of o(i,t))e.start<s||(e.start>s&&r.push({text:i.slice(s,e.start)}),r.push({text:i.slice(e.start,e.end),person_id:e.person_id,label:e.label}),s=e.end);return(s<i.length||!r.length)&&r.push({text:i.slice(s)}),r}function l(e,t,i){let n=()=>{let e=Error("Message: choose mentions from the people in this conversation and keep their @name in the message.");throw e.code="INVALID_MESSAGE_MENTIONS",e};if(void 0===t)return[];(!Array.isArray(t)||t.length>20||t.some(e=>"string"!=typeof e||!r.test(e.trim())))&&n();let o=s(t),d=o.map(e=>(i||[]).find(t=>t.person_id===e));d.some(e=>!e)&&n();let l=a(e,d);return l.length!==o.length&&n(),l.sort((e,t)=>e.person_id.localeCompare(t.person_id))}},45018:(e,t,i)=>{i.d(t,{Aq:()=>w,C4:()=>d,EZ:()=>k,Ej:()=>v,Rt:()=>T,Wy:()=>A,ZW:()=>O,_A:()=>y,ev:()=>N,gp:()=>l,wG:()=>r,y7:()=>j,zl:()=>s}),i(67482),i(32304);let r=["recording","image","document","sponsor_audio","other"],s=250,n="producer-proof-audio",o=new Set(["planning","in_progress","submitted","submitted_with_gaps","needs_changes","accepted"]);function a(e={}){return e.deleted_at||e.deletion_finalized_at?{status:409,code:"EPISODE_STUDIO_DELETION_PENDING",error:"This Episode Studio is being deleted, so its files cannot be changed."}:!0===e.archived?{status:409,code:"EPISODE_STUDIO_ARCHIVED",error:"Restore this archived Episode Studio before adding or changing files."}:null}function d(e){return"string"==typeof e&&e.trim()?null:{status:409,code:"EPISODE_UPLOAD_PROFILE_REQUIRED",error:"Connect this account to your team profile before uploading files so each upload can be attributed to you. Open My Profile to connect your account, then return here and reload. If you cannot connect it, ask a Studio manager to use Host & Team Access."}}let l=Object.freeze({image:0x1e00000,document:0x4b00000,audio:0x60000000,video:786432e3}),p=new Set(["","application/octet-stream","binary/octet-stream"]),c=[{extensions:["wav"],contentType:"audio/wav",aliases:["audio/x-wav","audio/wave","audio/vnd.wave"],kind:"audio",label:"WAV audio"},{extensions:["mp3"],contentType:"audio/mpeg",aliases:["audio/mp3","audio/x-mp3","audio/x-mpeg"],kind:"audio",label:"MP3 audio"},{extensions:["m4a"],contentType:"audio/mp4",aliases:["audio/m4a","audio/x-m4a"],kind:"audio",label:"M4A audio"},{extensions:["aac"],contentType:"audio/aac",aliases:["audio/x-aac"],kind:"audio",label:"AAC audio"},{extensions:["aif","aiff"],contentType:"audio/aiff",aliases:["audio/x-aiff"],kind:"audio",label:"AIFF audio"},{extensions:["flac"],contentType:"audio/flac",aliases:["audio/x-flac"],kind:"audio",label:"FLAC audio"},{extensions:["ogg","oga"],contentType:"audio/ogg",aliases:["application/ogg"],kind:"audio",label:"Ogg audio"},{extensions:["opus"],contentType:"audio/opus",aliases:["audio/ogg"],kind:"audio",label:"Opus audio"},{extensions:["caf"],contentType:"audio/x-caf",aliases:["audio/caf"],kind:"audio",label:"CAF audio"},{extensions:["mp4"],contentType:"video/mp4",aliases:[],kind:"video",label:"MP4 video"},{extensions:["mov"],contentType:"video/quicktime",aliases:[],kind:"video",label:"QuickTime video"}
1,{extensions:["m4v"],contentType:"video/x-m4v",aliases:["video/mp4"],kind:"video",label:"M4V video"},{extensions:["webm"],contentType:"video/webm",aliases:[],kind:"video",label:"WebM video"},{extensions:["jpg","jpeg"],contentType:"image/jpeg",aliases:["image/jpg","image/pjpeg"],kind:"image",label:"JPEG image"},{extensions:["png"],contentType:"image/png",aliases:["image/x-png"],kind:"image",label:"PNG image"},{extensions:["gif"],contentType:"image/gif",aliases:[],kind:"image",label:"GIF image"},{extensions:["webp"],contentType:"image/webp",aliases:[],kind:"image",label:"WebP image"},{extensions:["avif"],contentType:"image/avif",aliases:[],kind:"image",label:"AVIF image"},{extensions:["tif","tiff"],contentType:"image/tiff",aliases:["image/x-tiff"],kind:"image",label:"TIFF image"},{extensions:["heic"],contentType:"image/heic",aliases:["image/heic-sequence"],kind:"image",label:"HEIC image"},{extensions:["heif"],contentType:"image/heif",aliases:["image/heif-sequence"],kind:"image",label:"HEIF image"},{extensions:["bmp"],contentType:"image/bmp",aliases:["image/x-ms-bmp"],kind:"image",label:"BMP image"},{extensions:["pdf"],contentType:"application/pdf",aliases:[],kind:"document",label:"PDF document"},{extensions:["docx"],contentType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",aliases:[],kind:"document",label:"Word document"},{extensions:["odt"],contentType:"application/vnd.oasis.opendocument.text",aliases:[],kind:"document",label:"OpenDocument text"},{extensions:["txt"],contentType:"text/plain",aliases:[],kind:"document",label:"Plain text"},{extensions:["md","markdown"],contentType:"text/markdown",aliases:["text/plain"],kind:"document",label:"Markdown document"},{extensions:["csv"],contentType:"text/csv",aliases:["application/csv","text/plain"],kind:"document",label:"CSV spreadsheet"},{extensions:["xlsx"],contentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",aliases:[],kind:"document",label:"Excel spreadsheet"},{extensions:["ods"],contentType:"application/vnd.oasis.opendocument.spreadsheet",aliases:[],kind:"document",label:"OpenDocument spreadsheet"},{extensions:["pptx"],contentType:"application/vnd.openxmlformats-officedocument.presentationml.presentation",aliases:[],kind:"document",label:"PowerPoint presentation"},{extensions:["odp"],contentType:"application/vnd.oasis.opendocument.presentation",aliases:[],kind:"document",label:"OpenDocument presentation"},{extensions:["json"],contentType:"application/json",aliases:["text/json"],kind:"document",label:"JSON data"},{extensions:["srt"],contentType:"application/x-subrip",aliases:["text/plain","text/srt"],kind:"document",label:"SRT transcript"},{extensions:["vtt"],contentType:"text/vtt",aliases:["text/plain"],kind:"document",label:"WebVTT transcript"},{extensions:["edl"],contentType:"text/plain",aliases:["application/edl"],kind:"document",label:"Edit decision list"}],u=new Map,_=new Map;for(let e of c){for(let t of e.extensions)u.set(t,e);for(let t of[e.contentType,...e.aliases]){let i=_.get(t)||[];_.set(t,[...i,e])}}function h(e=""){return String(e||"").split(";",1)[0].trim().toLowerCase().slice(0,160)}function m(e=""){let t=String(e||"").trim(),i=t.lastIndexOf(".");return i<=0||i===t.length-1?"":t.slice(i+1).toLowerCase()}function f(e){return["recording","sponsor_audio"].includes(e)?["audio"]:"image"===e?["image"]:"document"===e?["document"]:["audio","video","image","document"]}function g(e){return["recording","sponsor_audio"].includes(e)?"Use a WAV, MP3, M4A, AAC, AIFF, FLAC, Ogg, Opus, or CAF audio file.":"image"===e?"Use a JPG, PNG, GIF, WebP, AVIF, TIFF, HEIC, HEIF, or BMP image.":"document"===e?"Use a PDF, DOCX, text, spreadsheet, presentation, JSON, transcript, or EDL file.":"Use a supported audio, video, raster image, document, transcript, or edit-list file. Executables, scripts, SVG, macro-enabled documents, and archives are not accepted."}function b(e=""){let t=String(e||"").normalize("NFKC").replace(/[\p{Cc}\p{Cf}\/\\]+/gu,"-").replace(/[<>:"|?*]+/g,"-").replace(/\s+/g," ").replace(/^[.\s]+|[.\s]+$/g,"");if(!t)return"";let i=Array.from(t);if(i.length<=180)return t;let r=m(t);if(!r)return i.slice(0,180).join("").trim();let s=`.${r}`,n=t.slice(0,-s.length);return`${Array.from(n).slice(0,Math.max(1,180-Array.from(s).length)).join("").replace(/[.\s-]+$/g,"")}${s}`}function y(e={}){var t;let i,s=String(e.category||"").trim(),n=r.includes(s)?s:"other",o=String(e.file_name||"").trim(),a=b(o),d=m(a),c=u.get(d);if(!a||!c||!f(n).includes(c.kind))throw Error(`Episode asset: â${o||"This file"}â is not supported for this step. ${g(n)}`);let _=h(e.content_type),k=new Set([c.contentType,...c.aliases]);if(!p.has(_)&&!k.has(_))throw Error(`Episode asset: â${a}â has a file extension and type that do not match. ${g(n)}`);let w=Number(e.size),v=Math.trunc(w);if(!Number.isSafeInteger(w)||w!==v||v<=0)throw Error(`Episode asset: â${a}
1â is empty or has an invalid size.`);let A=(t=c.kind,i=r.includes(n)?n:"other",l[t||("image"===i?"image":"document"===i?"document":"audio")]||l.audio);if(v>A)throw Error(`Episode asset: â${a}â exceeds the ${function(e){if(e>=0x40000000){let t=e/0x40000000;return`${Number.isInteger(t)?t:t.toFixed(1)} GB`}return`${Math.round(e/1048576)} MB`}(A)} limit for ${c.kind} files.`);return{file_name:a,content_type:c.contentType,size:v,category:n}}function k(e="other"){let t=new Set(f(e));return[...new Set(c.filter(e=>t.has(e.kind)).flatMap(e=>[...e.extensions.map(e=>`.${e}`),e.contentType]))].join(",")}function w(e={}){let t=u.get(m(e.file_name));if(t)return t.label;let i=h(e.content_type),r=_.get(i);return r?.length===1?r[0].label:i||"Production file"}function v(e=[],t={}){let i=b(t.file_name).normalize("NFKC").toLocaleLowerCase("en-US"),r=h(t.content_type),s=Math.trunc(Number(t.size)||0),n=String(t.category||"").trim(),o=String(t.deliverable_id||"").trim(),a=String(t.questionnaire_id||"").trim();return i&&r&&!(s<=0)&&o&&(Array.isArray(e)?e:[]).find(e=>b(e.file_name).normalize("NFKC").toLocaleLowerCase("en-US")===i&&h(e.content_type)===r&&Number(e.size)===s&&String(e.category||"").trim()===n&&String(e.deliverable_id||"").trim()===o&&String(e.questionnaire_id||"").trim()===a)||null}function A({roles:e=[],status:t="",canAdminOverride:i=!1,canProduce:r=!1,episode:s={}}={}){if(a(s))return!1;let n=new Set(Array.isArray(e)?e:[]);return o.has(t)&&(i||r||n.has("producer")||n.has("host"))}function x(e={}){return String(e?.id||"").trim()===n}function S(e={}){return x(e)||e?.allowed_uploader==="producer"}function T({deliverable:e={},roles:t=[],status:i="",canManage:r=!1,canAdminOverride:s=!1,canProduce:n=!1,episode:d={},viewerPersonId:l=""}={}){if(a(d)||!o.has(i))return!1;if(x(e)){let e=(Array.isArray(d.production_tasks)?d.production_tasks:[]).find(e=>"producer-proof-upload"===String(e?.task_id||e?.id||"").trim()),i=!!l&&(Array.isArray(e?.assigned_person_ids)?e.assigned_person_ids:[]).includes(l);return!0===r||!0===n||t.includes("producer")||i}return S(e)?!0===r||!0===n||t.includes("producer"):A({roles:t,status:i,canAdminOverride:s,canProduce:n,episode:d})}function O({roles:e=[],status:t="",canManage:i=!1,viewerPersonId:r="",uploaderPersonId:s=""}={}){return!!(i||e.includes("workflow_assignee")&&r&&r===s)||(e.includes("producer")?["planning","in_progress","submitted","submitted_with_gaps","needs_changes"].includes(t):e.includes("host")&&["planning","in_progress","needs_changes"].includes(t)&&!!r&&r===s)}function N({roles:e=[],canManage:t=!1,canProduce:i=!1,viewerPersonId:r="",episode:s={},asset:o={}}={}){if(t||i)return!0;let a=new Set(Array.isArray(e)?e:[]),d="intro-audio"===String(o?.deliverable_id||"").trim()||"sponsor_audio"===String(o?.category||"").trim()||(Array.isArray(s.deliverables)?s.deliverables:[]).some(e=>e.id===o.deliverable_id&&!x(e)&&S(e));if(a.has("producer"))return!0;if(a.has("host"))return!d;if(!a.has("workflow_assignee")||!r||d)return!1;let l=String(o.asset_id||"").trim(),p=String(o.deliverable_id||"").trim();return(Array.isArray(s.production_tasks)?s.production_tasks:[]).some(e=>{if(!(Array.isArray(e?.assigned_person_ids)?e.assigned_person_ids:[]).includes(r))return!1;if(p!==n&&["producer_review","publishing","release_coordination"].includes(e.phase))return!0;let t=Array.isArray(e?.linked_deliverable_ids)?e.linked_deliverable_ids:[];return!!p&&t.includes(p)||!!l&&e?.evidence_asset_id===l})}function j(e={},t={}){let i=new Set(Array.isArray(t.roles)?t.roles:[]),r=!0===t.canManage||!0===t.canProduce||i.has("producer");return{...e,sponsor_read_assignments:r&&e.sponsor_read_assignments||[],assets:(Array.isArray(e.assets)?e.assets:[]).filter(i=>N({...t,episode:e,asset:i}))}}},67482:(e,t,i)=>{i.d(t,{Jy:()=>o,LW:()=>F,Qu:()=>I,UD:()=>E,UL:()=>M,Y3:()=>C,gI:()=>x,hM:()=>q,km:()=>z,qQ:()=>d});let r=["not_started","in_progress","complete","waived"],s=["hosts","producer","person","hosts_and_producer"],n=["standard","intro","proof","bundle"],o=12,a="producer-proof-audio",d="sponsor-read-production",l="microphone-plan-confirmed",p="guest-recording-plan-reviewed",c=Object.freeze({"producer-proof-upload":"angie-link","publishing-package":"sierra-bishop","promotion-scheduled":"sierra-bishop"}),u=Object.freeze({"guest-prep-sent":{from:28,to:35},"guest-prep-received":{from:21,to:28},[l]:{from:21,to:28},[p]:{from:21,to:28},"edit-package-delivered":{from:14,to:21},"intro-ready":{from:14,to:21},"show-notes-brief":{from:10,to:21},[d]:{from:17,to:17},"producer-proof-upload":{from:9,to:16},"proof-listen-approval":{from:8,to:15},"publishing-package":{from:7,to:21},"promotion-scheduled":{from:7,to:14},"guest-assets-shared":{from:7,to:14}}),_=Object.freeze({[l]:Object.freeze(["guest-prep-sent"]),"edit-package-delivered":Object.freeze(["guest-prep-received",p]),"producer-proof-upload":Object.freeze(["edit-package-delivered","intro-ready"]),"publishing-package":Object.freeze(["proof-listen-approval","show-notes-brief"]),"promotion-scheduled":Object.freeze(["publishing-package"]),"guest-assets-shared":Object.freeze(["publishing-package"])}),h=Object.freeze({"producer-proof-upload":60,"proof-listen-approval":70,"publishing-package":80}),m=Object.freeze({[l]:Object.freeze({labels:Object.freeze(["Confirm the host microphone plans"]),descriptions:Object.freeze(["Each assigned host confirms an active mic-kit request, identifies their own tested microphone and headphones, or records that no separate kit is needed."])}),"intro-ready":Object.freeze({labels:Object.freeze(["Record the intro or schedule it with Angie","Host either records the intro or schedules time with Angie to record"]),descriptions:Object.freeze(["Either upload a finished intro or send the script and record a meeting date with Angie. The recording session must occur no later than seven days before air.","Either upload a finished intro or send the script and record a meeting date with Angie. The recording session must occur no later than ten days before air.","Either upload a finished intro or send the script and record a meeting date with the assigned producer. The recording session must occur no later than ten days before air.","Either upload a finished intro or send the script and record a meeting date with the assigned producer. The recording session must occur no later than seventeen days before air."])}),"show-notes-brief":Object.freeze({labels:Object.freeze(["Send Sierra or Angie the show-notes request","Host sends Sierra/Angie shownotes requests","Deliver the show-notes and promotion brief"]),descriptions:Object.freeze(["Give Sierra and Angie the episode summary, takeaways, guest links and handles, image guidance, credits, and anything that must not be published.","Provide the episode summary, takeaways, guest links and handles, image guidance, credits, and anything that must not be published.","Provide the episode summary, takeaways, guest links and handles, credits, and anything that must not be published. Choose, order, and confirm exactly three final images with any crop or editing instructions.","Provide one source brief with the episode summary, title ideas, takeaways, guest links and handles, suggested excerpts or timestamps, and any no-tag, privacy, or do-not-publish instructions. Upload and confirm the final image set in Photos and artwork."])}),"edit-package-delivered":Object.freeze({labels:Object.freeze(["Deliver the recording and edit package"]),descriptions:Object.freeze(["Upload the conversation audio and provide all requested edits or timestamped edit notes."])}),"producer-proof-upload":Object.freeze({labels:Object.freeze(["Angie adds the mid-roll and outro","Angie adds mid-roll + outro and sends the final audio edit"]),descriptions:Object.freeze(["Angie adds the mid-roll and outro, then uploads the private final proof/master for the host to download and review."])}),"publishing-package":Object.freeze({labels:Object.freeze(["Sierra or Angie drafts the publishing package","Sierra/Angie draft graphic, shownotes and schedule on Spotify","Finish the publishing package"]),descriptions:Object.freeze(["Sierra or Angie completes the episode graphic and final show notes, then schedules the approved episode on Spotify.","Complete the episode graphic and final show notes, then schedule the approved episode on Spotify."])}),"promotion-scheduled":Object.freeze({labels:Object.freeze(["Sierra or Angie schedules promotion","Sierra/Angie schedule content","Schedule episode promotion"]),descriptions:Object.freeze(["Sierra or Angie schedules the approved social media, email, and blog promotion.","Schedule the approved social media, email, and blog promotion."])})}),f=[{task_id:"guest-prep-sent",label:"Send the guest prep form",description:"The host sends the guest the prep form early enough for it to be completed before editing begins.",phase:"host_preparation",owner_type:"hosts",assigned_person_ids:[],days_before_air:35,required:!0,dependencies:[],kind:"standard",linked_deliverable_ids:[],subtasks:[],sort_order:10},{task_id:"guest-prep-received",label:"Receive the completed guest prep form",description:"Confirm the guest submitted the form. This must be complete before editing starts.",phase:"host_preparation",owner_type:"hosts_and_producer",assigned_person_ids:[],days_before_air:28,required:!0,dependencies:["guest-prep-sent"],kind:"standard",linked_deliverable_ids:[],subtasks:[],sort_order:20},{task_id:l,label:"Confirm the episode microphone plans",description:"Each assigned host confirms an active mic-kit request, identifies tested equipment, or records that no separate kit is needed. When a guest questionnaire supplies a guest recording plan, that plan must also be ready.",phase:"host_preparation",owner_type:"hosts",assigned_person_ids:[],days_before_air:28,required:!0,dependencies:["guest-prep-received"],kind:"standard",linked_deliverable_ids:["mic-kit-plan"],subtasks:[],sort_order:25}
1,{task_id:p,label:"Review the guest recording setup",description:"The producer reviews the guest questionnaire for internet, microphone, headphones, recording-space readiness, and any guest microphone-kit shipping request before editing begins.",phase:"host_preparation",owner_type:"producer",assigned_person_ids:[],days_before_air:28,required:!0,dependencies:["guest-prep-received"],kind:"standard",linked_deliverable_ids:[],subtasks:[],sort_order:28},{task_id:"edit-package-delivered",label:"Complete the interview and upload the raw tracks",description:"Schedule and complete the interview, then upload every final local recording track so production can begin.",phase:"host_preparation",owner_type:"hosts",assigned_person_ids:[],days_before_air:21,required:!0,dependencies:["guest-prep-received",l,p],kind:"standard",linked_deliverable_ids:["recording-files"],subtasks:[],sort_order:30},{task_id:"intro-ready",label:"Record the intro or schedule it with the producer",description:"Either upload the finished intro with the raw recording tracks, or send the script and record a meeting date with the assigned producer. The recording session must occur no later than seventeen days before air.",phase:"host_preparation",owner_type:"hosts",assigned_person_ids:[],days_before_air:21,required:!0,dependencies:["edit-package-delivered"],kind:"intro",linked_deliverable_ids:["recording-files"],subtasks:[],sort_order:40},{task_id:"show-notes-brief",label:"Finish edit notes, show notes, and promotion details",description:"Submit the timestamped edit notes and one source brief with the episode summary, title ideas, takeaways, guest links and handles, suggested excerpts or timestamps, and any no-tag, privacy, or do-not-publish instructions. Upload and confirm the final image set in Photos and artwork.",phase:"host_preparation",owner_type:"hosts",assigned_person_ids:[],days_before_air:21,required:!0,dependencies:["edit-package-delivered"],kind:"standard",linked_deliverable_ids:["edit-notes","show-notes","photos","credits"],subtasks:[],sort_order:50},{task_id:d,label:"Record and attach sponsor reads",description:"The assigned producer reviews the frozen approved scripts, records any required sponsor spots, and attaches the audio evidence in this production task. Hosts do not need to record sponsor reads.",phase:"producer_review",owner_type:"producer",assigned_person_ids:[],days_before_air:17,required:!0,dependencies:["edit-package-delivered"],kind:"standard",linked_deliverable_ids:["intro-audio"],subtasks:[],sort_order:65},{task_id:"producer-proof-upload",label:"Upload the private review copy",description:"The producer adds the mid-roll and outro, then uploads the private review copy for the host to download and review.",phase:"producer_review",owner_type:"producer",assigned_person_ids:[],days_before_air:16,required:!0,dependencies:["intro-ready",d,"show-notes-brief"],kind:"proof",linked_deliverable_ids:[a],subtasks:[],sort_order:70},{task_id:"proof-listen-approval",label:"Listen to and approve the edited episode",description:"The host downloads and listens to the edited episode, then approves it or asks for changes. Keep unpublished audio and links inside the Studio.",phase:"producer_review",owner_type:"hosts",assigned_person_ids:[],days_before_air:15,required:!0,dependencies:["producer-proof-upload"],kind:"proof",linked_deliverable_ids:[a],subtasks:[],sort_order:80},{task_id:"publishing-package",label:"Complete the graphics and show assets",description:"Complete the episode graphic, final show notes, and the show assets the producer and social media crew need for the remaining review and release work.",phase:"publishing",owner_type:"producer",assigned_person_ids:[],days_before_air:21,required:!0,dependencies:["edit-package-delivered","show-notes-brief"],kind:"bundle",linked_deliverable_ids:[],subtasks:[{id:"graphic",label:"Episode graphic",required:!0},{id:"show-notes",label:"Final show notes",required:!0}],sort_order:60},{task_id:"promotion-scheduled",label:"Schedule the episode and promotion",description:"After proof approval, schedule the episode on Spotify and schedule the approved social media, email, and blog promotion.",phase:"publishing",owner_type:"producer",assigned_person_ids:[],days_before_air:14,required:!0,dependencies:["proof-listen-approval","publishing-package"],kind:"bundle",linked_deliverable_ids:[],subtasks:[{id:"spotify",label:"Spotify episode scheduled",required:!0},{id:"social-media",label:"Social media scheduled",required:!0},{id:"email",label:"Email scheduled",required:!0},{id:"blog",label:"Blog scheduled",required:!0}],sort_order:90},{task_id:"guest-assets-shared",label:"Share the air date and approved assets with the guest",description:"Share only approved assets. If a guest proof listen is desired, use a controlled Google Drive file. Never share a private staged Spotify link or the internal publishing package, because either can expose unreleased program material and internal-only metadata.",phase:"release_coordination",owner_type:"hosts",assigned_person_ids:[],days_before_air:14,required:!0,dependencies:["proof-listen-approval","publishing-package"],kind:"standard",linked_deliverable_ids:[],subtasks:[],sort_order:100}],g=new Map(f.map(e=>[e.task_id,e]));function b(e,t=4e3){return String(e??"").trim().slice(0,t)}function y(e,t=""){return String(e??t).trim().toLowerCase().replace(/[^a-z0-9_.:-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,180)||t}function k(e,t=20){return[...new Set((Array.isArray(e)?e:"string"==typeof e?e.split(","):[]).map(e=>
1y(e)).filter(Boolean))].slice(0,t)}function w(e){return[e.getUTCFullYear(),String(e.getUTCMonth()+1).padStart(2,"0"),String(e.getUTCDate()).padStart(2,"0")].join("-")}function v(e){if(e instanceof Date)return Number.isNaN(e.getTime())?"":w(e);let t=b(e,50);if(!t)return"";let i=t.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(i){let[,e,r,s]=i;return w(new Date(Date.UTC(Number(e),Number(r)-1,Number(s))))===t?t:""}let r=new Date(t);return Number.isNaN(r.getTime())?"":w(r)}function A(e){return!e||"object"!=typeof e||e instanceof Date?v(e):v(e.target_release_date||e.air_date||e.release_date)}function x(e,t){let i=A(e),r=Number(t);if(!i||!Number.isFinite(r))return"";let[s,n,o]=i.split("-").map(Number),a=new Date(Date.UTC(s,n-1,o));return a.setUTCDate(a.getUTCDate()-Math.trunc(r)),w(a)}function S(e){if(e instanceof Date)return Number.isNaN(e.getTime())?"":e.toISOString();let t=b(e,80);if(!t)return"";let i=new Date(t);return Number.isNaN(i.getTime())?"":i.toISOString()}function T(e){let t=b(e,40).toLowerCase();return r.includes(t)?t:["completed","done"].includes(t)?"complete":["started","active","blocked"].includes(t)?"in_progress":"not_started"}function O(e){let t=b(e,2e3);if(!t)return!1;try{return"https:"===new URL(t).protocol}catch{return!1}}function N(e={},t={},i=0){let r=y(e.id||e.subtask_id,t.id||`item-${i+1}`),s=!0===e.completed||"complete"===T(e.status);return{id:r,label:b(e.label,180)||b(t.label,180)||r,required:Object.prototype.hasOwnProperty.call(e,"required")?!1!==e.required:!1!==t.required,completed:s,completed_at:s?S(e.completed_at):"",completed_by_person_id:s?y(e.completed_by_person_id):"",completed_by_name:s?b(e.completed_by_name,180):""}}function j(e={},t={},i=0,r=""){let o,a=y(e.task_id||e.id,t.task_id||`production-task-${i+1}`),d=Math.max(0,Math.min(3650,Math.trunc(Number(Object.prototype.hasOwnProperty.call(e,"days_before_air")?e.days_before_air:t.days_before_air)||0))),l=!0===e.due_date_overridden,p=v(e.due_date),c=x(r,d),u=l&&!!p,_=T(e.status),h=["complete","waived"].includes(_),m=Array.isArray(t.subtasks)?t.subtasks:[],f=n.includes(e.kind)?e.kind:n.includes(t.kind)?t.kind:"standard",w=O(e.evidence_url)?b(e.evidence_url,2e3):"",A=Number(e.deadline_schema_version??t.deadline_schema_version),C=Number.isInteger(A)&&A>0?Math.min(A,1e3):5,E=Number(e.definition_schema_version??t.definition_schema_version),q=Number.isInteger(E)&&E>0?Math.min(E,1e3):5;return{task_id:a,label:b(e.label||e.title,180)||b(t.label,180)||a,description:b(e.description,1600)||b(t.description,1600),phase:y(e.phase,y(t.phase,"production"))||"production",owner_type:s.includes(e.owner_type)?e.owner_type:s.includes(t.owner_type)?t.owner_type:"person",assigned_person_ids:k(Object.prototype.hasOwnProperty.call(e,"assigned_person_ids")?e.assigned_person_ids:t.assigned_person_ids),definition_schema_version:q,deadline_schema_version:C,days_before_air:d,due_date:u||h&&p?p:c||p,due_date_overridden:u,required:Object.prototype.hasOwnProperty.call(e,"required")?!1!==e.required:!1!==t.required,dependencies:k(Object.prototype.hasOwnProperty.call(e,"dependencies")?e.dependencies:t.dependencies),kind:f,linked_deliverable_ids:k(Array.isArray(t.linked_deliverable_ids)?t.linked_deliverable_ids:e.linked_deliverable_ids),subtasks:function(e,t=[]){let i=Array.isArray(e)?e.slice(0,20):[],r=new Map(i.map(e=>[y(e?.id||e?.subtask_id),e]).filter(([e])=>e)),s=new Set(t.map(e=>e.id)),n=t.map((e,t)=>N(r.get(e.id)||{},e,t)),o=i.filter(e=>y(e?.id||e?.subtask_id)&&!s.has(y(e?.id||e?.subtask_id))).map((e,t)=>N(e,{},n.length+t));return[...n,...o].slice(0,20)}(e.subtasks,m),status:_,intro_method:"intro"===f?function(e,{acceptLegacy:t=!0}={}){let i=b(e,80).toLowerCase();return["recorded","recorded_intro","uploaded"].includes(i)?"recorded":"scheduled_with_producer"===i||t&&["scheduled_with_angie","scheduled","schedule_with_angie","script_and_schedule"].includes(i)?"scheduled_with_producer":""}(e.intro_method):"",intro_scheduled_for:"intro"===f?v(e.intro_scheduled_for):"",proof_decision:"proof"===f?["pending","approved","changes_requested"].includes(o=b(e.proof_decision,40).toLowerCase())?o:"pending":"",evidence_url:"guest-assets-shared"===a&&function(e){if(!O(e))return!1;let t=new URL(e).hostname.toLowerCase();return"spotify.com"===t||t.endsWith(".spotify.com")||"spotify.link"===t}(w)?"":w,evidence_note:b(e.evidence_note??e.note,2400),evidence_asset_id:y(e.evidence_asset_id),completed_at:h?S(e.completed_at):"",completed_by_person_id:h?y(e.completed_by_person_id):"",completed_by_name:h?b(e.completed_by_name,180):"",is_custom:!g.has(a),created_at:S(e.created_at),created_by_person_id:y(e.created_by_person_id),created_by_name:b(e.created_by_name,180),updated_at:S(e.updated_at),updated_by_person_id:y(e.updated_by_person_id),updated_by_name:b(e.updated_by_name,180),sort_order:Number.isFinite(Number(e.sort_order??t.sort_order))?Math.trunc(Number(e.sort_order??t.sort_order)):(i+1)*10}}function C(e,t,i={}){let r=A(t),s=function(e=[]){let t=Array.isArray(e)?e:[],i=t.findIndex(e=>"publishing-package"===y(e?.task_id||e?.id)),r=t.findIndex(e=>"promotion-scheduled"===y(e?.task_id||e?.id));if(i<0||r<0)return t;let s=t[i]||{};if(Number(s.definition_schema_version)>=5)return t;let n=Array.isArray(s.subtasks)?s.subtasks:[],o=n.find(e=>"spotify"===y(e?.id||e?.subtask_id));if(!o)return t;let a=t[r]||{},d=Array.isArray(a.subtasks)?a.subtasks:[],l=d.some(e=>"spotify"===y(e?.id||e?.subtask_id));return t.map((e,t)=>t===i?{...e,subtasks:n.filter(e=>"spotify"!==y(e?.id||e?.subtask_id))}:t!==r||l?e:{...e,subtasks:[o,...d]})}(Array.isArray(e)?e.slice(0,50):[]),n=new Map;for(let e of s){let t=y(e?.task_id||e?.id);t&&n.set(t,e)}let o=f.map((e,t)=>j(function(e={},t="",i=e){if(Number(i?.definition_schema_version)>=5||i?.updated_at)return e;let r=c[t],s=k(e.assigned_person_ids);return r&&"person"===e.owner_type&&1===s.length&&s[0]===r?{...e,owner_type:"producer",assigned_person_ids:[]}:e}(function(e={},t=""){let i=m[t],r=g.get(t);if(!i||!r)return e;let s=b(e.label||e.title,180),n=b(e.description||e.instructions,1600);return{...e,...i.labels.includes(s)?{label:r.label,title:void 0}:{},...i.descriptions.includes(n)?{description:r.description,instructions:void 0}:{}}}(function(e={},t=""){let i=Number(e.definition_schema_version);if(Number.isInteger(i)&&i>=5)return e;let r=_[t],s=g.get(t),n=[...r?[r]:[],..."producer-proof-upload"===t?[["intro-ready","show-notes-brief"]]:[]],o=!!(n.length&&s&&Object.prototype.hasOwnProperty.call(e,"dependencies")&&n.some(t=>{var i,r;let s;return i=e.dependencies,r=t,JSON.stringify((s=e=>[...new Set((Array.isArray(e)?e:[]).map(e=>
1y(e)).filter(Boolean))].sort())(i))===JSON.stringify(s(r))})),a=h[t],d=!!(s&&Number.isFinite(Number(a))&&Number(e.sort_order)===Number(a));return{...e,definition_schema_version:5,...o?{dependencies:s.dependencies}:{},...d?{sort_order:s.sort_order}:{}}}(function(e={},t="",i=""){let r=Number(e.deadline_schema_version);if(Number.isInteger(r)&&r>=5)return e;let s=u[t],n={...e,deadline_schema_version:5};if(!s)return n;let o=x(i,s.to);return{...n,days_before_air:s.to,due_date:o,due_date_overridden:!1}}(n.get(e.task_id)||{},e.task_id,r),e.task_id),e.task_id),e.task_id,n.get(e.task_id)),e,t,r)),a=s.filter(e=>{let t=y(e?.task_id||e?.id);return t&&!g.has(t)}).map((e,t)=>j(e,{},o.length+t,r)).filter(e=>e.task_id),d=[...o,...a].slice(0,50).sort((e,t)=>e.sort_order-t.sort_order||e.label.localeCompare(t.label));return"accepted"===i.episodeStatus&&!0===i.migrateAcceptedHistory?d.map(e=>(function(e={},t="",i={}){if(["complete","waived"].includes(T(e.status)))return e;let r=S(i.migrationCompletedAt)||S(t?`${t}T00:00:00.000Z`:"");return{...e,status:"waived",completed_at:r,completed_by_person_id:y(i.migrationCompletedByPersonId),completed_by_name:b(i.migrationCompletedByName,180)||"Accepted episode workflow migration"}})(e,r,i)):d}function E(e={},t=""){let i=Array.isArray(e.production_tasks)?e.production_tasks:[],r=i.find(e=>e.task_id===t);return r?e.archived||e.deleted_at?"Restore the episode before removing a production task.":g.has(y(t))?"Standard workflow steps stay on the board. Edit their settings or, where available, use Skip step with a reason in the task workspace.":"standard"!==r.kind||r.linked_deliverable_ids?.length||r.subtasks?.length?"This task contains linked work or substeps. Keep it on the board so that work remains available.":r.dependencies?.length||i.some(e=>e.dependencies?.includes(t))?"This task has blocking-task links. Edit the linked tasks to remove those dependencies before removing it.":r.status&&"not_started"!==r.status||r.completed_at||r.evidence_note||r.evidence_url||r.evidence_asset_id||(e.assets||[]).some(e=>e.production_task_id===t||e.task_id===t)?"This task has work or progress recorded. Keep its history and use Skip step with a reason if it is no longer needed.":"":"This task is no longer on the board. Refresh to see the latest tasks."}function q(e={},t="",i={}){if(!function(e={}){return!0===e.canManage||!0===e.can_manage||!0===e.canReview||!0===e.can_review}(i))throw Error("Episode production: only the assigned producer or a Studio manager can edit task structure.");let r=E(e,t);if(r)throw Error(`Episode production: ${r}`);return{...e,production_tasks:e.production_tasks.filter(e=>e.task_id!==t)}}function z(e={}){return(Array.isArray(e.sponsor_read_assignments)?e.sponsor_read_assignments:[]).some(e=>e?.requires_audio===!0)}function D(e={},t={},i={}){if("waived"===e.status||e.task_id===d&&!z(t))return!0;if("complete"!==e.status)return!1;if("proof-listen-approval"===e.task_id){let r=y(e.evidence_asset_id),s=(Array.isArray(t.production_tasks)?t.production_tasks:[]).find(e=>"producer-proof-upload"===y(e?.task_id||e?.id)),n=y(s?.evidence_asset_id);return"approved"===e.proof_decision&&!!e.completed_at&&!!r&&r===n&&function(e,t,i="",r={}){let s=new Set(k(t)),n=y(i);return(function(e={}){return Array.isArray(e.assets)?e.assets:[]})(e).some(e=>{let t=y(e?.asset_id||e?.id),i=y(e?.deliverable_id);return function(e={},t={}){if(["deleted","expired","failed"].includes(b(e.status,40).toLowerCase()))return!1;let i=b(e.retention_expires_at,80);if(!i)return!0;let r=new Date(i);return!Number.isNaN(r.getTime())&&r.getTime()>function(e={}){let t=e.now??e.today??new Date;if(t instanceof Date)return Number.isNaN(t.getTime())?Date.now():t.getTime();let i=b(t,80),r=new Date(/^\d{4}-\d{2}-\d{2}$/.test(i)?`${i}T00:00:00.000Z`:i);return Number.isNaN(r.getTime())?Date.now():r.getTime()}(t)}(e,r)&&t&&s.has(i)&&(!n||t===n)})}(t,[a],r,i)}return!0}let P=["evidence_note","evidence_url","due_date","due_date_overridden","assigned_person_ids"];function I(e=[],t={}){let i=Array.isArray(e)?e:[],r=t&&"object"==typeof t&&!Array.isArray(t)?t:{};return i.map(e=>{let t=r[e?.task_id];if(!t||"object"!=typeof t||Array.isArray(t))return e;let i={};for(let e of P)Object.prototype.hasOwnProperty.call(t,e)&&(i[e]=t[e]);return Object.keys(i).length?{...e,...i}:e})}function M(e={},t={}){let i=A(e),r=C(e.production_tasks,i,{episodeStatus:e.status,migrateAcceptedHistory:Number(e.schema_version||
11)<o,migrationCompletedAt:e.production_completed_at||e.updated_at,migrationCompletedByPersonId:e.production_advanced_by_person_id,migrationCompletedByName:e.production_advanced_by_name}),s={...e,production_tasks:r},n=new Map(r.map(e=>[e.task_id,e])),a=v(Object.prototype.hasOwnProperty.call(t,"today")?t.today:Object.prototype.hasOwnProperty.call(t,"now")?t.now:new Date)||v(new Date),l=Object.prototype.hasOwnProperty.call(t,"now")?{now:t.now}:{today:a},p=r.map(e=>{let t=D(e,s,l),i=t?[]:function(e,t,i,r={}){return k(e.dependencies).filter(e=>{let s=t.get(e);return!s||!D(s,i,r)})}(e,n,s,l),r=!!(e.required&&!t&&e.due_date&&e.due_date<a);return{task_id:e.task_id,complete:t,overdue:r,blocked_by_task_ids:i}}),c=new Map(p.map(e=>[e.task_id,e])),u=r.filter(e=>e.task_id!==d||z(s)),_=u.filter(e=>e.required),h=_.filter(e=>c.get(e.task_id)?.complete),m=u.filter(e=>c.get(e.task_id)?.complete),f=p.filter(e=>e.overdue).map(e=>e.task_id),g=p.filter(e=>e.blocked_by_task_ids.length>0).map(e=>({task_id:e.task_id,blocked_by_task_ids:e.blocked_by_task_ids})),b=r.filter(e=>{let t=c.get(e.task_id);return e.required&&!t.complete&&!t.blocked_by_task_ids.length}).sort((e,t)=>!e.due_date&&t.due_date?1:e.due_date&&!t.due_date?-1:e.due_date.localeCompare(t.due_date)||e.sort_order-t.sort_order)[0]||null;return{schema_version:5,air_date:i,today:a,task_count:r.length,required_task_count:_.length,completed_task_count:m.length,completed_required_task_count:h.length,completion_percent:_.length?Math.round(h.length/_.length*100):100,next_due_task:b,next_due_task_id:b?.task_id||"",overdue_task_ids:f,overdue_count:f.length,off_track:f.length>0,dependency_blocking:g,dependency_blocked_task_ids:g.map(e=>e.task_id),has_dependency_blocking:g.length>0,task_states:p}}function F(e={},t={},i="",r=[]){let s=y(i);if(!s)return!1;let n=new Set(r instanceof Set?[...r].map(e=>y(e)):(Array.isArray(r)?r:"string"==typeof r?r.split(","):[]).map(e=>y(e)).filter(Boolean));if(n.has("studio_manager")||n.has("admin")||new Set(k(e.assigned_person_ids)).has(s))return!0;if("person"===e.owner_type)return!1;let o=new Set(k(t.host_person_ids)),a=y(t.producer_person_id),d=o.has(s),l=a===s;return"hosts"===e.owner_type?d||!o.size&&n.has("host"):"producer"===e.owner_type?l||!a&&n.has("producer"):"hosts_and_producer"===e.owner_type&&(d||l||!o.size&&n.has("host")||!a&&n.has("producer"))}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.