diff --git a/README.md b/README.md index 57346a6..3b67ae7 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,9 @@ file to delivered record: 2. **Lathe cutting**: cutting the master disc 3. **Silvering**: metallizing the cut master 4. **Stamper production**: electroforming nickel stampers in-house -5. **Pressing**: extrusion and pressing of the finished records -6. **Finishing**: trimming, labels, shrink wrapping +5. **Pressing**: extrusion and pressing of the records, with the labels + pressed in +6. **Finishing**: trimming, sleeving, shrink wrapping 7. **Packaging**: folded paper cartons (jackets and sleeves), produced in collaboration with local packaging manufacturers 8. **Fulfillment**: dropshipping directly to end customers on behalf of diff --git a/docs/business-plan/CNX-Vinyl-Business-Plan.docx b/docs/business-plan/CNX-Vinyl-Business-Plan.docx index b137c5c..2f3dd4b 100644 Binary files a/docs/business-plan/CNX-Vinyl-Business-Plan.docx and b/docs/business-plan/CNX-Vinyl-Business-Plan.docx differ diff --git a/docs/business-plan/CNX-Vinyl-Business-Plan.pdf b/docs/business-plan/CNX-Vinyl-Business-Plan.pdf index 92acff8..01b9adf 100644 Binary files a/docs/business-plan/CNX-Vinyl-Business-Plan.pdf and b/docs/business-plan/CNX-Vinyl-Business-Plan.pdf differ diff --git a/docs/business-plan/build/content_a.py b/docs/business-plan/build/content_a.py index cf18c76..f072dff 100644 --- a/docs/business-plan/build/content_a.py +++ b/docs/business-plan/build/content_a.py @@ -154,7 +154,7 @@ def blocks(): P("A vinyl record is made by cutting the audio into a soft lacquer disc, growing a set of nickel " "metal parts from that lacquer by electroplating (the 'stampers'), and pressing hot PVC between two " "stampers under about 150 tonnes of force with steam heating and water cooling. The record is then " - "trimmed, labelled, sleeved, put into a printed jacket, shrink-wrapped and shipped. Each of these " + "trimmed, sleeved, put into a printed jacket, shrink-wrapped and shipped. Each of these " "steps has its own equipment, skills and failure modes, and most plants in the world do only some " "of them, sending the rest out to specialists, often on other continents."), P("Demand for vinyl has grown for well over a decade from a small base. The 2021 to 2022 boom " @@ -347,7 +347,9 @@ def blocks(): "between two stampers in a steam-heated mould. The press closes at about 150 tonnes, the mould is " "then water-cooled, and the record is ejected and trimmed. A cycle takes about 25 to 30 seconds on " "an automatic press; on a semi-automatic press an operator handles the patty and the record, which " - "is slower but is exactly what colour, splatter and special editions need."), + "is slower but is exactly what colour, splatter and special editions need. The labels are pressed " + "into the record, not glued on afterwards: they are pre-dried in an oven (moisture in a label " + "causes bubbles) and loaded with the patty every cycle, and the label lot is logged per cycle."), P("**The fleet strategy: 50/50.** Half the fleet fully automatic for standard volume, half " "semi-automatic for effects, special editions and small runs, where an operator working the mould " "directly is an advantage rather than a cost."), @@ -395,8 +397,8 @@ def blocks(): "re-quote. If they hold, they argue for a higher effectiveness on the automatic half only."), H2("4.5 Finishing, packaging and fulfilment"), - P("After pressing, records are trimmed inline, labels have been pre-dried in an oven (moisture in a " - "label causes bubbles), and records are sleeved, assembled into jackets, shrink-wrapped and packed. " + P("After pressing, records are trimmed inline, sleeved, assembled into jackets, shrink-wrapped and " + "packed. " "Jackets, sleeves, inserts, J-cards and CD packaging come from **Ploy Printing** (Ploy Karnpim " "Limited Partnership, Pa Daet, Mueang Chiang Mai), an established print house with offset, " "digital, risograph, UV inkjet and latex inkjet presses and vinyl packaging production. That " diff --git a/docs/plant-operation.html b/docs/plant-operation.html index 45f2a87..98e1e6f 100644 --- a/docs/plant-operation.html +++ b/docs/plant-operation.html @@ -184,7 +184,7 @@ const S={ galv:{active:null,cur:0,temp:55,ni:0.25}, press:{state:'IDLE',idx:0,tIn:0,cycle:0,cycleStart:0,lastCycle:0,force:0,moldT:58,job:null,run:0,runQty:0,tpLeft:0,waiting:false,changeT:0,rack:[],topY:300}, jobN:41, stamperN:2261, gates:{g1:false,g2:false,g3:false}, - opticalLast:'-', audioLast:'-', lastMoldT:58, + opticalLast:'-', audioLast:'-', lastMoldT:58, labelPairs:480, }; const PALETTE=['#e0552f','#3aa0ff','#ffbf1f','#3ddc84','#c86bff','#ff7ab6','#59d9c9']; @@ -199,6 +199,7 @@ const MACH=[ {id:'prep',x:1150,y:70,w:140,h:90,t:'Stamper prep',s:'punch · back-finish · coin',tags:[()=>'concentr. '+f0(jit(18,4))+' µm',()=>'rack '+S.press.rack.length+' ready']}, {id:'archive',x:1330,y:70,w:140,h:90,t:'Mother archive',s:'repress path, no gates',tags:[()=>'mothers 128 stored',()=>'repress 7 to 11 days']}, // side boxes + {id:'labels',x:560,y:195,w:150,h:60,t:'Label dry oven',s:'print inspected · pre-dried',tags:[()=>'60 °C · L-77 · '+S.labelPairs+' pr']}, {id:'audioqc',x:1050,y:195,w:130,h:60,t:'Audio compare',s:'needle-drop · 1 in 50',tags:[()=>'n '+S.samples+' · last '+S.audioLast]}, {id:'carton',x:1390,y:195,w:150,h:60,t:'Carton partner',s:'incoming QC per delivery',tags:[()=>'lot CP-0311 · ΔE 0.8 OK']}, // material + record path, row 2 @@ -209,7 +210,7 @@ const MACH=[ {id:'press',x:720,y:270,w:140,h:210,t:'',custom:'press'}, {id:'trim',x:900,y:345,w:110,h:100,t:'Trimmer',s:'Vario 12" · flash cut',tags:[()=>'trimmed '+S.trimmed,()=>'scrap '+f1(S.scrapKg)+' kg',()=>'to grinder']}, {id:'optical',x:1050,y:345,w:130,h:100,t:'Optical inspection',s:'100 % · darkfield line-scan',tags:[()=>'pass '+yieldStr(),()=>'rejects '+S.rej,()=>'last '+S.opticalLast]}, - {id:'label',x:1220,y:345,w:130,h:100,t:'Finishing',s:'label oven · shrink wrap',tags:[()=>'oven '+f0(jit(60,1))+' °C',()=>'labels lot L-77',()=>'shrink sampled QC']}, + {id:'label',x:1220,y:345,w:130,h:100,t:'Finishing',s:'inner sleeve · shrink wrap',tags:[()=>'sleeved '+S.assembled,()=>'sleeve lot IS-204',()=>'shrink sampled QC']}, {id:'pack',x:1390,y:345,w:150,h:100,t:'Packaging',s:'matrix code vs jacket barcode',tags:[()=>'assembled '+S.assembled,()=>'mismatch '+S.mismatches,()=>'barcode 100 % verified']}, {id:'ship',x:1580,y:345,w:180,h:100,t:'Fulfillment',s:'bulk pallet · dropship',tags:[()=>'pallet '+S.pallet+' / 300',()=>'dropship '+S.parcels+' parcels',()=>'tracking per shipment']}, // utilities, row 3 @@ -304,7 +305,7 @@ function drawPress(m){ // top platen moving m.topPl=el('rect',{x:738,y:300,width:104,height:18,class:'platen'},g); m.topSt=el('rect',{x:748,y:318,width:84,height:3,fill:'#b9c2cc'},g); // stamper A - m.cake=el('circle',{cx:790,cy:395,r:9,fill:'#3d3a33',stroke:'#8a7a55',visibility:'hidden'},g); + m.cake=el('g',{visibility:'hidden'},g);el('circle',{cx:790,cy:395,r:9,fill:'#3d3a33',stroke:'#8a7a55'},m.cake);m.cakeLbl=[el('rect',{x:781,y:383,width:18,height:2.5,rx:1,fill:'#e6ecf7'},m.cake),el('rect',{x:781,y:404,width:18,height:2.5,rx:1,fill:'#e6ecf7'},m.cake)]; m.stateEl=el('text',{x:790,y:440,class:'mtag','text-anchor':'middle',style:'font-weight:700;fill:#e6ecf7'},g,'IDLE'); m.tagEls=[el('text',{x:727,y:456,class:'mtag'},g,''),el('text',{x:727,y:469,class:'mtag'},g,'')]; m.tags=[()=>'F '+f0(S.press.force)+' t · mold '+f0(S.press.moldT)+' °C',()=>S.press.job?('run '+S.press.run+'/'+S.press.runQty+' · '+S.press.job.stamper):'no stamper mounted']; @@ -356,6 +357,7 @@ route('cake','M648,392 H790','mat thin'); route('scrap','M955,445 V470 H925 V560','scrap thin'); route('reject','M1115,445 V470 H925 V560','scrap thin'); route('sample','M1115,345 V255','route thin'); +route('labels','M690,255 V262 H760 V300','mat thin'); route('carton','M1465,255 V345','route thin'); route('regrind','M925,680 V715 H20 V262 H165 V280','reg thin'); PATHS.route=el('path',{d:'M860,395 H1700',fill:'none',stroke:'none'},L.pipes);PATHS.route.len=PATHS.route.getTotalLength(); @@ -375,6 +377,7 @@ el('text',{x:1122,y:300,class:'small'},L.top,'1 in 50 + all TPs'); el('text',{x:1472,y:300,class:'small'},L.top,'jackets · sleeves'); el('text',{x:1520,y:395,class:'small'},L.top,''); el('text',{x:660,y:378,class:'small'},L.top,'cake'); +el('text',{x:700,y:268,class:'small'},L.top,'labels'); el('text',{x:1265,y:178,class:'small'},L.top,'stamper to press'); /* ------------------------------------------------------------------ tokens */ @@ -473,8 +476,10 @@ function pressEnter(state){ const P=S.press;P.state=state;P.tIn=0; if(state==='LOAD'){ P.cake.node=dot('',9);P.cake.node.setAttribute('fill','#3d3a33');P.cake.node.setAttribute('stroke','#8a7a55'); - mover('cake',P.cake.node,142/2.6,m=>{m.node.remove();M.press.cake.setAttribute('visibility','visible');}); + mover('cake',P.cake.node,142/2.6,m=>{m.node.remove();M.press.cake.setAttribute('visibility','visible');M.press.cakeLbl.forEach(r=>r.setAttribute('fill',P.job?P.job.color:'#e6ecf7'));}); S.ext.cake=jit(163,4); + for(let k=0;k<2;k++){const lb=el('circle',{r:3.2,fill:P.job?P.job.color:'#fff',stroke:'#e6ecf7','stroke-width':1},L.tok);mover('labels',lb,60,m=>{m.node.remove();});} + S.labelPairs--;if(S.labelPairs<=0){S.labelPairs=480;log('Labels: new pre-dried stack loaded at P1, lot L-77','info');} } if(state==='CLOSE'){} if(state==='STEAM'){M.press.cake.setAttribute('visibility','hidden');} @@ -485,7 +490,7 @@ function pressEnter(state){ P.lastCycle=S.t-P.cycleStart;P.cycleStart=S.t; const r=mkRecord(P.job,tp); S.logged++; - const msg='P1 cycle #'+P.cycle+(tp?' TEST PRESSING':'')+' · '+f1(P.lastCycle)+' s · cake '+f0(S.ext.cake)+' g · mold '+f0(S.lastMoldT)+' °C'; + const msg='P1 cycle #'+P.cycle+(tp?' TEST PRESSING':'')+' · '+f1(P.lastCycle)+' s · cake '+f0(S.ext.cake)+' g · labels L-77 · mold '+f0(S.lastMoldT)+' °C'; log(msg,tp?'warn':'info'); } } @@ -655,7 +660,7 @@ function render(dt){ lamp('boiler',S.boiler.p<9.5?'alarm':S.boiler.p<9.8?'warn':'run'); lamp('chiller','run');lamp('comp','run');lamp('hyd',running?'run':'idle');lamp('grind','run');lamp('energy','run');lamp('trace','run');lamp('hvac','run'); lamp('lab',S.tmv.p===PATHS.sample)?'run':'idle');lamp('carton','run'); + lamp('audioqc',movers.some(mv=>mv.p===PATHS.sample)?'run':'idle');lamp('labels',running?'run':'idle');lamp('carton','run'); const js=job?MSTAGES[job.stage]&&MSTAGES[job.stage].id:null; ['audio','master','cut','silver','prep'].forEach(id=>lamp(id,js===id?'run':'idle')); lamp('galv',S.galv.active?'run':'idle');lamp('archive','idle'); @@ -693,11 +698,12 @@ const DETAILS={ silo_v:{t:'Virgin PVC compound',w:'Record-grade compound, classically a vinyl chloride / vinyl acetate copolymer, makes up 80 % of the mix. Every lot is released through the material lab before it reaches the extruder and its ID attaches to every record pressed from it.',c:['Certificate of analysis per lot','Retained sample archived per lot'],f:['Qualifying Thai and regional compound against European references is an explicit goal']}, silo_r:{t:'Regrind stream',w:'Trims and rejected records are ground in-house and fed back as roughly 20 % of the feedstock. It is a material source in its own right and gets its own gate.',c:['No labels, paper or foreign material into the grinder','Contamination check per regrind batch','Virgin/regrind ratio verified at the extruder','Regrind batch IDs logged like any other lot'],f:['Newbilt process schematic: 80 % new granulate, 20 % recycled']}, lab:{t:'M · Material lab gate',w:'Every incoming compound lot passes a benchtop gate before release. New lots, and especially new suppliers, are released only after test pressings from that lot pass optical and audio QC.',c:['Moisture (halogen analyzer or Karl Fischer): the most common cause of noisy surfaces','Heat stability (oven strips, ISO 182): PVC degradation releases HCl','Density, color L*a*b* and gloss, granulate sieve analysis, ash','Release by test pressing'],f:['Later: torque rheometry, DSC (degree of gelation), FTIR','External per supplier: K-value, XRF stabilizer system, TGA, resistivity']}, - ext:{t:'6a · Extruder VEX 50',w:'Granulate from the hopper is melted through three electrically heated zones and extruded as a cake (puck) of about 160 g for a 140 g record, the surplus becoming flash. The cake is placed between the two labels and loaded into the press.',c:['Zone temperatures and screw speed logged per cycle','Cake weight per cycle (press telemetry)','Regrind ratio verified here'],f:['15 kVA connected, 8 kW average','660 kg on ~0.5 m²','Cooling water ~4 l/min, air 2 m³/h']}, - press:{t:'6b · Hydraulic press HRP 12',w:'The stamper pair is mounted on the platens. Each cycle: load cake and labels, close, steam at 10 bar / 180 °C heats the molds and the ~150 t force flows the vinyl into the grooves, cooling water sets it, open, eject. About 28 to 30 s per record. Telemetry is logged every cycle, and the artist approves the test pressing (gate 3) before the production run.',c:['Per cycle: nozzle pressure, mold temperatures, cycle time, cake weight, yields, drift alerts','Artist gate 3: test pressing approved','Record identity = stamper ID + press ID + cycle timestamp + side'],f:['1,350 kg on 0.9 m²: slab loading is a building criterion','Steam 150 to 180 kg/h at 9.5 to 10.5 bar','Cooling up to 100 l/min, up to 125 kW','Fleet plan: 50/50 automated (Pheenix Alpha class) and semi-automatic (Newbilt) presses']}, + ext:{t:'6a · Extruder VEX 50',w:'Granulate from the hopper is melted through three electrically heated zones and extruded as a cake (puck) of about 160 g for a 140 g record, the surplus becoming flash. The cake is sandwiched between the bottom and top label and loaded into the press.',c:['Zone temperatures and screw speed logged per cycle','Cake weight per cycle (press telemetry)','Regrind ratio verified here'],f:['15 kVA connected, 8 kW average','660 kg on ~0.5 m²','Cooling water ~4 l/min, air 2 m³/h']}, + press:{t:'6b · Hydraulic press HRP 12',w:'The stamper pair is mounted on the platens. Each cycle: bottom label, cake and top label go in between the stampers, close, steam at 10 bar / 180 °C heats the molds and the ~150 t force flows the vinyl into the grooves, cooling water sets it, open, eject. About 28 to 30 s per record. Telemetry is logged every cycle, and the artist approves the test pressing (gate 3) before the production run.',c:['Per cycle: nozzle pressure, mold temperatures, cycle time, cake weight, label lot, yields, drift alerts','Artist gate 3: test pressing approved','Record identity = stamper ID + press ID + cycle timestamp + side'],f:['1,350 kg on 0.9 m²: slab loading is a building criterion','Steam 150 to 180 kg/h at 9.5 to 10.5 bar','Cooling up to 100 l/min, up to 125 kW','Fleet plan: 50/50 automated (Pheenix Alpha class) and semi-automatic (Newbilt) presses']}, trim:{t:'7a · Trimmer',w:'The Vario trimmer cuts the flash from the pressed record. Trimmings go straight to the grinder and back into the regrind stream.',c:['Trim quality on every record'],f:['12" now, 7"/10" upgrade path']}, optical:{t:'QC layer 1 · 100 % optical inspection, inline',w:'Machine vision at line speed inspects every record with darkfield lighting and line-scan cameras. Non-fill and stitching correlate with audible defects, so this is a strong proxy for audio quality without playing the record. No vinyl-specific product exists; this is a custom Keyence/Cognex-class integration.',c:['Non-fill (dull patches), stitching and flow lines','Warp via structured light','Off-centre spindle hole vs groove spiral','Surface debris, label errors'],f:['Rejects go to the grinder; the cycle stays in the traceability record','The dead-wax fiducial gives the camera a fixed angular anchor']}, - label:{t:'7b · Finishing',w:'Labels are pre-dried in the oven before pressing so they do not blister; finished records are sleeved and shrink-wrapped.',c:['Label print inspection','Shrink wrap on a sampling basis'],f:['Label dry oven, shrink wrapper and buffer spindles in the Newbilt scope']}, + label:{t:'7b · Finishing',w:'The trimmed record goes into its inner sleeve and, once assembled, through the shrink wrapper. The labels are already on: they were pressed into the record in the mold, not applied here.',c:['Inner sleeve scuff check per sleeve lot','Shrink wrap on a sampling basis'],f:['Shrink wrapper and buffer spindles in the Newbilt scope']}, + labels:{t:'L · Labels',w:'Center labels are pressed into the record, not glued on afterwards. Each cycle the operator (or the automatic label feed on an automated press) places the bottom label, the cake and the top label between the stampers; the steam-heated mold bonds the paper into the vinyl. Labels are pre-dried in the oven before they reach the press because moisture in the paper causes bubbles, and the label lot is logged per press cycle.',c:['Print inspection of each label lot against the approved proof','Pre-dried in the oven (Newbilt quotes a France Etuves XU 112 class oven)','Label identity and centering checked by the optical inspection on every record'],f:['Label dry oven and 7" center label punch in the Newbilt scope','Vision-guided label rotation at the press is feasible but deprioritized; the dead-wax fiducial keeps it measurable']}, pack:{t:'8 · Packaging and assembly',w:'The highest-value check in the plant: the runout matrix code is scanned against the jacket barcode at the packing station, so the wrong record in the right jacket is systematically caught. Inserts and extras are checked against the order bill of materials.',c:['Matrix code vs jacket barcode on every unit','Barcode verification (a misprinted barcode is a rejected delivery at the distributor)','Inserts per bill of materials','Final visual on a sampling basis'],f:['Packaging + finished goods ~300 to 500 m²']}, ship:{t:'9 · Fulfillment',w:'Consignments are assembled against the order, shipped as bulk pallets or dropshipped parcel by parcel to end customers on behalf of the label. Carrier tracking is recorded per shipment or per end customer and joins the traceability record.',c:['Consignment vs bill of materials','Tracking per shipment or per dropshipped customer'],f:['Quoted lead time: 7 to 9 weeks mature, 2 to 3 weeks repress, from test-pressing approval']}, boiler:{t:'Steam boiler',w:'Saturated steam at 10 bar / 180 °C heats the press molds. Sized at 400 kg/h (~300 kW thermal) for the Duplex path; one press draws 150 to 180 kg/h. Sourced and installed locally with water treatment, in a detached boiler hall with a 14 m flue.',c:['Pressure held between 9.5 and 10.5 bar at the press','Feedwater treatment, condensate return'],f:['Fuel decision open: biomass (own 60 rai coppice + northern agricultural waste), LPG, or electric (~300 kW)','Boiler hall 66 m², fuel store 42 m²']}, diff --git a/docs/process-flow.drawio b/docs/process-flow.drawio index a4fe05d..59812e4 100644 --- a/docs/process-flow.drawio +++ b/docs/process-flow.drawio @@ -61,7 +61,7 @@ - + @@ -70,11 +70,11 @@ - + - - + + @@ -160,7 +160,7 @@ - + diff --git a/docs/process-flow.md b/docs/process-flow.md index 274bef8..92fd2ef 100644 --- a/docs/process-flow.md +++ b/docs/process-flow.md @@ -22,9 +22,10 @@ flowchart TD E --> F[6. Pressing] PVC[PVC compound intake] --> LAB[Material lab gate] --> F REG[Regrind stream] --> LAB + LBL[Labels: print inspected,
pre-dried in oven] --> F F --> G3{Artist gate:
test pressing approved} G3 --> F2[Production run] - F2 --> H[7. Finishing
trim, label, shrink] + F2 --> H[7. Finishing
trim, sleeve, shrink] H --> I[8. Packaging
and assembly] CART[Cartons and sleeves
from local partners] --> PQC[Packaging incoming QC] --> I I --> J[9. Fulfillment
warehouse, bulk, dropshipping] @@ -47,8 +48,9 @@ flowchart TD | 4 | Silvering and electroforming | Bath chemistry logs per batch; XRF nickel thickness per part; confocal/profiler groove metrology on sampled radial zones; mother listening check (mothers are playable); laser Data Matrix marks on part backs | | | 5 | Stamper prep | Concentricity and dimensional checks after punch, back-finish, and coining; visual inspection | | | M | PVC intake (parallel input) | Material lab gate per lot: certificate of analysis, moisture, heat stability, color, density, granulate physicals; new lots released only by test pressing; regrind stream passes its own contamination gate before joining the 80/20 mix | | -| 6 | Pressing | Press telemetry logged every cycle; then per record: 100% inline optical inspection; sampled automated audio comparison against the source master | Artist/label approves the test pressing before the production run | -| 7 | Finishing | Trimming quality; label print inspection (labels pre-dried in the oven); shrink wrap on sampling basis | | +| L | Labels (parallel input) | Print inspection of each label lot against the approved proof; labels pre-dried in the oven before they go to the press (moisture in the paper causes bubbles); label lot logged per press cycle | | +| 6 | Pressing | Bottom label, cake and top label are loaded between the stampers every cycle, so the labels are pressed into the record; press telemetry logged every cycle; then per record: 100% inline optical inspection (including label identity and centering); sampled automated audio comparison against the source master | Artist/label approves the test pressing before the production run | +| 7 | Finishing | Trimming quality; inner sleeving; shrink wrap on sampling basis | | | 8 | Packaging | Incoming carton QC per delivery (dimensions, print Delta E against approved proof, seam strength, inner sleeve scuff check); assembly verification by scanning the runout matrix code against the jacket barcode; barcode verification on every unit | | | 9 | Fulfillment | Consignment assembly against the order's bill of materials; carrier tracking recorded per shipment or per dropshipped end customer | | @@ -62,9 +64,9 @@ flowchart TD propagates through every metal generation and appears on every pressed record, which is what lets stage 9 verify that the right record is in the right jacket. -- **Materials join the chain with their own gates**: PVC lots and regrind - batches enter at pressing, cartons and sleeves at packaging, and their lot - IDs attach to every record and order they touch. +- **Materials join the chain with their own gates**: PVC lots, regrind + batches and label lots enter at pressing, cartons and sleeves at + packaging, and their lot IDs attach to every record and order they touch. - **A complaint resolves backwards**: any single record traces to its stamper, press, cycle, operator, compound lot, and packaging lot, and from the stamper back through mother and father to the lacquer and the approved diff --git a/docs/process-flow.pdf b/docs/process-flow.pdf index ee926df..7c65e87 100644 Binary files a/docs/process-flow.pdf and b/docs/process-flow.pdf differ diff --git a/docs/process-flow.png b/docs/process-flow.png index 1d94c68..94e1101 100644 Binary files a/docs/process-flow.png and b/docs/process-flow.png differ