| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503 |
- {
- "project": {
- "id": 21,
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "description": "A local food AI that provides full nutritional value information on any food and can generate complete menu proposals based on the user's specification.\nVision statement\nA local food AI that provides full nutritional value information on any food and can generate complete menu proposals based on the user's specification.\n\nThe user can:\n* Create an account and log in.\n* Get complete nutritional value information on any food, including macro nutrients, minerals, vitamins, amino acids etc.\n* Get the full nutritional value information for a given food combination, i.e. the user can enter the quantities of several foods and get a full nutritional value overview.\n* Search for specific nutrient content and get a sortable list of all foods that contain this/these nutrient(s).\n* Store food combinations in named and editable lists.\n* Get menu proposals based on nutritional value and other food constraint input, e.g. allergies.\n* Freely chat about anything related to nutrition and get competent answers.\n* The AI must have a local web search tool that it will use to anonymously gather any info that it does not have in its local database.\n* No user data leaves the server.\n* The whole project must be in a public listed https://git.btshub.lu repo named LocalFoodAI_lanfr144 that is updated in real-time. Make sure to prevent confidential data from being uploaded. Add your teacher (id evegi144) as a collaborator. Anyone should be able to clone the repo and get his own local food AI running with ease.\n* The application must be designed to run entirely on your provided Ubuntu 24.04 VM (8 vCPUs, 30 GB RAM, no dedicated GPU). You must evaluate and select appropriate lightweight, quantized local LLMs (via Ollama) and databases that fit securely within this hardware limit.",
- "created_date": "2026-03-26T09:05:19.412Z",
- "modified_date": "2026-05-22T09:01:46.364Z",
- "owner": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "members": [
- {
- "role": 128,
- "role_name": "Stakeholder",
- "full_name": "",
- "full_name_display": "admin",
- "is_active": true,
- "id": 5,
- "color": "#f79f10",
- "username": "admin",
- "photo": "https://192.168.130.161/taiga/media/user/2/6/0/4/a601f669057759a37377dd309b5188d77bfa61f2d46c4a2100b95c82b44d/72-l1150196.jpg.80x80_q85_crop.jpg?token=ajPGyQ%3AqOqIHDTJXKJo-YPv7tXDiDDU84sXW8Dibgcx0SWzjKbtdw8LjzgQC3Ztbtd8OzpH2lLNY-qz-U-21-LTkfLqKA",
- "gravatar_id": "1035626aec77f04b01417d7d6b9b513a"
- },
- {
- "role": 127,
- "role_name": "Product Owner",
- "full_name": "",
- "full_name_display": "FrancoisLange",
- "is_active": true,
- "id": 17,
- "color": "#0a17e3",
- "username": "FrancoisLange",
- "photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e"
- }
- ],
- "total_milestones": 8,
- "total_story_points": 100.0,
- "is_contact_activated": true,
- "is_epics_activated": true,
- "is_backlog_activated": true,
- "is_kanban_activated": true,
- "is_wiki_activated": true,
- "is_issues_activated": true,
- "videoconferences": null,
- "videoconferences_extra_data": null,
- "creation_template": 1,
- "is_private": false,
- "anon_permissions": [
- "view_wiki_pages",
- "view_epics",
- "view_wiki_links",
- "view_milestones",
- "view_project",
- "view_issues",
- "view_us",
- "view_tasks"
- ],
- "public_permissions": [
- "view_wiki_pages",
- "view_epics",
- "view_wiki_links",
- "view_milestones",
- "view_project",
- "view_issues",
- "view_us",
- "view_tasks"
- ],
- "is_featured": false,
- "is_looking_for_people": false,
- "looking_for_people_note": "",
- "blocked_code": null,
- "totals_updated_datetime": "2026-06-11T08:41:57.833Z",
- "total_fans": 0,
- "total_fans_last_week": 0,
- "total_fans_last_month": 0,
- "total_fans_last_year": 0,
- "total_activity": 767,
- "total_activity_last_week": 44,
- "total_activity_last_month": 387,
- "total_activity_last_year": 767,
- "tags": [],
- "tags_colors": {},
- "default_epic_status": 101,
- "default_points": 241,
- "default_us_status": 121,
- "default_task_status": 101,
- "default_priority": 62,
- "default_severity": 103,
- "default_issue_status": 141,
- "default_issue_type": 61,
- "default_swimlane": null,
- "my_permissions": [
- "modify_task",
- "comment_issue",
- "add_issue",
- "add_wiki_link",
- "view_epics",
- "comment_us",
- "add_task",
- "remove_member",
- "view_milestones",
- "add_us",
- "delete_project",
- "comment_wiki_page",
- "modify_wiki_page",
- "modify_project",
- "add_milestone",
- "view_project",
- "view_tasks",
- "view_wiki_pages",
- "modify_wiki_link",
- "delete_milestone",
- "delete_wiki_page",
- "modify_issue",
- "delete_epic",
- "admin_roles",
- "modify_us",
- "modify_milestone",
- "add_member",
- "delete_wiki_link",
- "view_wiki_links",
- "comment_task",
- "add_wiki_page",
- "admin_project_values",
- "delete_us",
- "delete_task",
- "view_issues",
- "comment_epic",
- "view_us",
- "delete_issue",
- "add_epic",
- "modify_epic"
- ],
- "i_am_owner": true,
- "i_am_admin": true,
- "i_am_member": true,
- "notify_level": 1,
- "total_closed_milestones": 13,
- "is_watcher": true,
- "total_watchers": 2,
- "logo_small_url": null,
- "logo_big_url": null,
- "is_fan": false,
- "my_homepage": 1,
- "epic_statuses": [
- {
- "id": 101,
- "name": "New",
- "slug": "new",
- "order": 1,
- "is_closed": false,
- "color": "#70728F",
- "project_id": 21
- },
- {
- "id": 102,
- "name": "Ready",
- "slug": "ready",
- "order": 2,
- "is_closed": false,
- "color": "#E44057",
- "project_id": 21
- },
- {
- "id": 103,
- "name": "In progress",
- "slug": "in-progress",
- "order": 3,
- "is_closed": false,
- "color": "#E47C40",
- "project_id": 21
- },
- {
- "id": 104,
- "name": "Ready for test",
- "slug": "ready-for-test",
- "order": 4,
- "is_closed": false,
- "color": "#E4CE40",
- "project_id": 21
- },
- {
- "id": 105,
- "name": "Done",
- "slug": "done",
- "order": 5,
- "is_closed": true,
- "color": "#A8E440",
- "project_id": 21
- }
- ],
- "swimlanes": null,
- "us_statuses": [
- {
- "id": 121,
- "name": "New",
- "order": 1,
- "is_closed": false,
- "color": "#70728F",
- "wip_limit": null,
- "project_id": 21,
- "slug": "new",
- "is_archived": false
- },
- {
- "id": 122,
- "name": "Ready",
- "order": 2,
- "is_closed": false,
- "color": "#E44057",
- "wip_limit": null,
- "project_id": 21,
- "slug": "ready",
- "is_archived": false
- },
- {
- "id": 123,
- "name": "In progress",
- "order": 3,
- "is_closed": false,
- "color": "#E47C40",
- "wip_limit": null,
- "project_id": 21,
- "slug": "in-progress",
- "is_archived": false
- },
- {
- "id": 124,
- "name": "Ready for test",
- "order": 4,
- "is_closed": false,
- "color": "#E4CE40",
- "wip_limit": null,
- "project_id": 21,
- "slug": "ready-for-test",
- "is_archived": false
- },
- {
- "id": 125,
- "name": "Done",
- "order": 5,
- "is_closed": true,
- "color": "#A8E440",
- "wip_limit": null,
- "project_id": 21,
- "slug": "done",
- "is_archived": false
- },
- {
- "id": 126,
- "name": "Archived",
- "order": 6,
- "is_closed": true,
- "color": "#A9AABC",
- "wip_limit": null,
- "project_id": 21,
- "slug": "archived",
- "is_archived": true
- }
- ],
- "us_duedates": [
- {
- "id": 61,
- "name": "Default",
- "order": 1,
- "by_default": true,
- "color": "#9dce0a",
- "days_to_due": null,
- "project_id": 21
- },
- {
- "id": 62,
- "name": "Due soon",
- "order": 2,
- "by_default": false,
- "color": "#ff9900",
- "days_to_due": 14,
- "project_id": 21
- },
- {
- "id": 63,
- "name": "Past due",
- "order": 3,
- "by_default": false,
- "color": "#E44057",
- "days_to_due": 0,
- "project_id": 21
- }
- ],
- "points": [
- {
- "id": 241,
- "name": "?",
- "order": 1,
- "value": null,
- "project_id": 21
- },
- {
- "id": 242,
- "name": "0",
- "order": 2,
- "value": 0,
- "project_id": 21
- },
- {
- "id": 243,
- "name": "1/2",
- "order": 3,
- "value": 0.5,
- "project_id": 21
- },
- {
- "id": 244,
- "name": "1",
- "order": 4,
- "value": 1,
- "project_id": 21
- },
- {
- "id": 245,
- "name": "2",
- "order": 5,
- "value": 2,
- "project_id": 21
- },
- {
- "id": 246,
- "name": "3",
- "order": 6,
- "value": 3,
- "project_id": 21
- },
- {
- "id": 247,
- "name": "5",
- "order": 7,
- "value": 5,
- "project_id": 21
- },
- {
- "id": 248,
- "name": "8",
- "order": 8,
- "value": 8,
- "project_id": 21
- },
- {
- "id": 249,
- "name": "10",
- "order": 9,
- "value": 10,
- "project_id": 21
- },
- {
- "id": 250,
- "name": "13",
- "order": 10,
- "value": 13,
- "project_id": 21
- },
- {
- "id": 251,
- "name": "20",
- "order": 11,
- "value": 20,
- "project_id": 21
- },
- {
- "id": 252,
- "name": "40",
- "order": 12,
- "value": 40,
- "project_id": 21
- }
- ],
- "task_statuses": [
- {
- "id": 101,
- "name": "New",
- "order": 1,
- "is_closed": false,
- "color": "#70728F",
- "project_id": 21,
- "slug": "new"
- },
- {
- "id": 102,
- "name": "In progress",
- "order": 2,
- "is_closed": false,
- "color": "#E47C40",
- "project_id": 21,
- "slug": "in-progress"
- },
- {
- "id": 103,
- "name": "Ready for test",
- "order": 3,
- "is_closed": false,
- "color": "#E4CE40",
- "project_id": 21,
- "slug": "ready-for-test"
- },
- {
- "id": 104,
- "name": "Closed",
- "order": 4,
- "is_closed": true,
- "color": "#A8E440",
- "project_id": 21,
- "slug": "closed"
- },
- {
- "id": 105,
- "name": "Needs Info",
- "order": 5,
- "is_closed": false,
- "color": "#5178D3",
- "project_id": 21,
- "slug": "needs-info"
- }
- ],
- "task_duedates": [
- {
- "id": 61,
- "name": "Default",
- "order": 1,
- "by_default": true,
- "color": "#9dce0a",
- "days_to_due": null,
- "project_id": 21
- },
- {
- "id": 62,
- "name": "Due soon",
- "order": 2,
- "by_default": false,
- "color": "#ff9900",
- "days_to_due": 14,
- "project_id": 21
- },
- {
- "id": 63,
- "name": "Past due",
- "order": 3,
- "by_default": false,
- "color": "#E44057",
- "days_to_due": 0,
- "project_id": 21
- }
- ],
- "issue_statuses": [
- {
- "id": 141,
- "name": "New",
- "order": 1,
- "is_closed": false,
- "color": "#70728F",
- "project_id": 21,
- "slug": "new"
- },
- {
- "id": 142,
- "name": "In progress",
- "order": 2,
- "is_closed": false,
- "color": "#40A8E4",
- "project_id": 21,
- "slug": "in-progress"
- },
- {
- "id": 143,
- "name": "Ready for test",
- "order": 3,
- "is_closed": false,
- "color": "#E4CE40",
- "project_id": 21,
- "slug": "ready-for-test"
- },
- {
- "id": 144,
- "name": "Closed",
- "order": 4,
- "is_closed": true,
- "color": "#A8E440",
- "project_id": 21,
- "slug": "closed"
- },
- {
- "id": 145,
- "name": "Needs Info",
- "order": 5,
- "is_closed": false,
- "color": "#E44057",
- "project_id": 21,
- "slug": "needs-info"
- },
- {
- "id": 146,
- "name": "Rejected",
- "order": 6,
- "is_closed": true,
- "color": "#A9AABC",
- "project_id": 21,
- "slug": "rejected"
- },
- {
- "id": 147,
- "name": "Postponed",
- "order": 7,
- "is_closed": false,
- "color": "#5178D3",
- "project_id": 21,
- "slug": "postponed"
- }
- ],
- "issue_types": [
- {
- "id": 61,
- "name": "Bug",
- "order": 1,
- "color": "#E44057",
- "project_id": 21
- },
- {
- "id": 62,
- "name": "Question",
- "order": 2,
- "color": "#5178D3",
- "project_id": 21
- },
- {
- "id": 63,
- "name": "Enhancement",
- "order": 3,
- "color": "#40E4CE",
- "project_id": 21
- }
- ],
- "issue_duedates": [
- {
- "id": 61,
- "name": "Default",
- "order": 1,
- "by_default": true,
- "color": "#9dce0a",
- "days_to_due": null,
- "project_id": 21
- },
- {
- "id": 62,
- "name": "Due soon",
- "order": 2,
- "by_default": false,
- "color": "#ff9900",
- "days_to_due": 14,
- "project_id": 21
- },
- {
- "id": 63,
- "name": "Past due",
- "order": 3,
- "by_default": false,
- "color": "#E44057",
- "days_to_due": 0,
- "project_id": 21
- }
- ],
- "priorities": [
- {
- "id": 61,
- "name": "Low",
- "order": 1,
- "color": "#A8E440",
- "project_id": 21
- },
- {
- "id": 62,
- "name": "Normal",
- "order": 3,
- "color": "#E4CE40",
- "project_id": 21
- },
- {
- "id": 63,
- "name": "High",
- "order": 5,
- "color": "#E47C40",
- "project_id": 21
- }
- ],
- "severities": [
- {
- "id": 101,
- "name": "Wishlist",
- "order": 1,
- "color": "#70728F",
- "project_id": 21
- },
- {
- "id": 102,
- "name": "Minor",
- "order": 2,
- "color": "#40A8E4",
- "project_id": 21
- },
- {
- "id": 103,
- "name": "Normal",
- "order": 3,
- "color": "#40E47C",
- "project_id": 21
- },
- {
- "id": 104,
- "name": "Important",
- "order": 4,
- "color": "#E4A240",
- "project_id": 21
- },
- {
- "id": 105,
- "name": "Critical",
- "order": 5,
- "color": "#D35450",
- "project_id": 21
- }
- ],
- "epic_custom_attributes": null,
- "userstory_custom_attributes": null,
- "task_custom_attributes": null,
- "issue_custom_attributes": null,
- "roles": [
- {
- "id": 123,
- "name": "UX",
- "slug": "ux",
- "permissions": [
- "add_issue",
- "modify_issue",
- "delete_issue",
- "view_issues",
- "add_milestone",
- "modify_milestone",
- "delete_milestone",
- "view_milestones",
- "view_project",
- "add_task",
- "modify_task",
- "delete_task",
- "view_tasks",
- "add_us",
- "modify_us",
- "delete_us",
- "view_us",
- "add_wiki_page",
- "modify_wiki_page",
- "delete_wiki_page",
- "view_wiki_pages",
- "add_wiki_link",
- "delete_wiki_link",
- "view_wiki_links",
- "view_epics",
- "add_epic",
- "modify_epic",
- "delete_epic",
- "comment_epic",
- "comment_us",
- "comment_task",
- "comment_issue",
- "comment_wiki_page"
- ],
- "order": 10,
- "computable": true,
- "project_id": 21
- },
- {
- "id": 124,
- "name": "Design",
- "slug": "design",
- "permissions": [
- "add_issue",
- "modify_issue",
- "delete_issue",
- "view_issues",
- "add_milestone",
- "modify_milestone",
- "delete_milestone",
- "view_milestones",
- "view_project",
- "add_task",
- "modify_task",
- "delete_task",
- "view_tasks",
- "add_us",
- "modify_us",
- "delete_us",
- "view_us",
- "add_wiki_page",
- "modify_wiki_page",
- "delete_wiki_page",
- "view_wiki_pages",
- "add_wiki_link",
- "delete_wiki_link",
- "view_wiki_links",
- "view_epics",
- "add_epic",
- "modify_epic",
- "delete_epic",
- "comment_epic",
- "comment_us",
- "comment_task",
- "comment_issue",
- "comment_wiki_page"
- ],
- "order": 20,
- "computable": true,
- "project_id": 21
- },
- {
- "id": 125,
- "name": "Front",
- "slug": "front",
- "permissions": [
- "add_issue",
- "modify_issue",
- "delete_issue",
- "view_issues",
- "add_milestone",
- "modify_milestone",
- "delete_milestone",
- "view_milestones",
- "view_project",
- "add_task",
- "modify_task",
- "delete_task",
- "view_tasks",
- "add_us",
- "modify_us",
- "delete_us",
- "view_us",
- "add_wiki_page",
- "modify_wiki_page",
- "delete_wiki_page",
- "view_wiki_pages",
- "add_wiki_link",
- "delete_wiki_link",
- "view_wiki_links",
- "view_epics",
- "add_epic",
- "modify_epic",
- "delete_epic",
- "comment_epic",
- "comment_us",
- "comment_task",
- "comment_issue",
- "comment_wiki_page"
- ],
- "order": 30,
- "computable": true,
- "project_id": 21
- },
- {
- "id": 126,
- "name": "Back",
- "slug": "back",
- "permissions": [
- "add_issue",
- "modify_issue",
- "delete_issue",
- "view_issues",
- "add_milestone",
- "modify_milestone",
- "delete_milestone",
- "view_milestones",
- "view_project",
- "add_task",
- "modify_task",
- "delete_task",
- "view_tasks",
- "add_us",
- "modify_us",
- "delete_us",
- "view_us",
- "add_wiki_page",
- "modify_wiki_page",
- "delete_wiki_page",
- "view_wiki_pages",
- "add_wiki_link",
- "delete_wiki_link",
- "view_wiki_links",
- "view_epics",
- "add_epic",
- "modify_epic",
- "delete_epic",
- "comment_epic",
- "comment_us",
- "comment_task",
- "comment_issue",
- "comment_wiki_page"
- ],
- "order": 40,
- "computable": true,
- "project_id": 21
- },
- {
- "id": 127,
- "name": "Product Owner",
- "slug": "product-owner",
- "permissions": [
- "add_issue",
- "modify_issue",
- "delete_issue",
- "view_issues",
- "add_milestone",
- "modify_milestone",
- "delete_milestone",
- "view_milestones",
- "view_project",
- "add_task",
- "modify_task",
- "delete_task",
- "view_tasks",
- "add_us",
- "modify_us",
- "delete_us",
- "view_us",
- "add_wiki_page",
- "modify_wiki_page",
- "delete_wiki_page",
- "view_wiki_pages",
- "add_wiki_link",
- "delete_wiki_link",
- "view_wiki_links",
- "view_epics",
- "add_epic",
- "modify_epic",
- "delete_epic",
- "comment_epic",
- "comment_us",
- "comment_task",
- "comment_issue",
- "comment_wiki_page"
- ],
- "order": 50,
- "computable": false,
- "project_id": 21
- },
- {
- "id": 128,
- "name": "Stakeholder",
- "slug": "stakeholder",
- "permissions": [
- "add_issue",
- "modify_issue",
- "delete_issue",
- "view_issues",
- "view_milestones",
- "view_project",
- "view_tasks",
- "view_us",
- "modify_wiki_page",
- "view_wiki_pages",
- "add_wiki_link",
- "delete_wiki_link",
- "view_wiki_links",
- "view_epics",
- "comment_epic",
- "comment_us",
- "comment_task",
- "comment_issue",
- "comment_wiki_page"
- ],
- "order": 60,
- "computable": false,
- "project_id": 21
- }
- ],
- "total_memberships": 2,
- "is_out_of_owner_limits": false,
- "is_private_extra_info": {
- "can_be_updated": true,
- "reason": null
- },
- "max_memberships": null,
- "epics_csv_uuid": null,
- "userstories_csv_uuid": null,
- "tasks_csv_uuid": null,
- "issues_csv_uuid": null,
- "transfer_token": null,
- "milestones": [
- {
- "id": 68,
- "slug": "sprint-1-1",
- "name": "Sprint 1",
- "closed": true
- },
- {
- "id": 69,
- "slug": "sprint-2",
- "name": "Sprint 2",
- "closed": true
- },
- {
- "id": 70,
- "slug": "sprint-3",
- "name": "Sprint 3",
- "closed": true
- },
- {
- "id": 84,
- "slug": "sprint-9",
- "name": "Sprint 9",
- "closed": true
- },
- {
- "id": 85,
- "slug": "sprint-10",
- "name": "Sprint 10",
- "closed": true
- },
- {
- "id": 71,
- "slug": "sprint-4",
- "name": "Sprint 4",
- "closed": true
- },
- {
- "id": 86,
- "slug": "sprint-11",
- "name": "Sprint 11",
- "closed": true
- },
- {
- "id": 87,
- "slug": "sprint-12",
- "name": "Sprint 12",
- "closed": true
- },
- {
- "id": 88,
- "slug": "sprint-13",
- "name": "Sprint 13",
- "closed": true
- },
- {
- "id": 72,
- "slug": "sprint-5",
- "name": "Sprint 5",
- "closed": true
- },
- {
- "id": 89,
- "slug": "sprint-7-production-hardening-handover",
- "name": "Sprint 7: Production Hardening & Handover",
- "closed": true
- },
- {
- "id": 73,
- "slug": "sprint-6",
- "name": "Sprint 6",
- "closed": false
- },
- {
- "id": 82,
- "slug": "sprint-7",
- "name": "Sprint 7",
- "closed": true
- },
- {
- "id": 83,
- "slug": "sprint-8",
- "name": "Sprint 8",
- "closed": true
- }
- ]
- },
- "sprints": [
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 83,
- "name": "Sprint 8",
- "slug": "sprint-8",
- "owner": 17,
- "estimated_start": "2026-06-04",
- "estimated_finish": "2026-06-10",
- "created_date": "2026-04-17T06:47:56.806Z",
- "modified_date": "2026-05-12T10:33:20.832Z",
- "closed": true,
- "disponibility": 0.0,
- "order": 1,
- "user_stories": [],
- "total_points": null,
- "closed_points": null
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 82,
- "name": "Sprint 7",
- "slug": "sprint-7",
- "owner": 17,
- "estimated_start": "2026-05-28",
- "estimated_finish": "2026-06-03",
- "created_date": "2026-04-17T06:47:56.694Z",
- "modified_date": "2026-05-12T10:33:20.926Z",
- "closed": true,
- "disponibility": 0.0,
- "order": 1,
- "user_stories": [],
- "total_points": null,
- "closed_points": null
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 73,
- "name": "Sprint 6",
- "slug": "sprint-6",
- "owner": 17,
- "estimated_start": "2026-05-21",
- "estimated_finish": "2026-05-28",
- "created_date": "2026-03-26T09:10:46.453Z",
- "modified_date": "2026-06-11T08:41:57.783Z",
- "closed": false,
- "disponibility": 0.0,
- "order": 1,
- "user_stories": [
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 204,
- "ref": 1,
- "milestone": 73,
- "is_closed": false,
- "created_date": "2026-03-26T09:05:44.979Z",
- "modified_date": "2026-05-22T09:54:36.373Z",
- "finish_date": null,
- "subject": "US-10: Public Git repository with easy cloning support (LocalFoodAI_lanfr144)",
- "client_requirement": false,
- "team_requirement": false,
- "external_reference": null,
- "version": 4,
- "is_blocked": false,
- "blocked_note": "",
- "backlog_order": 1774515944979838,
- "sprint_order": 1774515944979843,
- "kanban_order": 2,
- "epics": null,
- "points": {
- "124": 241,
- "125": 241,
- "126": 241,
- "123": 247
- },
- "total_points": 5.0
- }
- ],
- "total_points": 5.0,
- "closed_points": null
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 89,
- "name": "Sprint 7: Production Hardening & Handover",
- "slug": "sprint-7-production-hardening-handover",
- "owner": 17,
- "estimated_start": "2026-05-18",
- "estimated_finish": "2026-05-20",
- "created_date": "2026-05-20T07:03:09.168Z",
- "modified_date": "2026-05-20T07:03:09.174Z",
- "closed": true,
- "disponibility": 0.0,
- "order": 1,
- "user_stories": [],
- "total_points": null,
- "closed_points": null
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 72,
- "name": "Sprint 5",
- "slug": "sprint-5",
- "owner": 17,
- "estimated_start": "2026-05-14",
- "estimated_finish": "2026-05-21",
- "created_date": "2026-03-26T09:10:07.099Z",
- "modified_date": "2026-05-12T10:33:21.117Z",
- "closed": true,
- "disponibility": 0.0,
- "order": 1,
- "user_stories": [],
- "total_points": null,
- "closed_points": null
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 88,
- "name": "Sprint 13",
- "slug": "sprint-13",
- "owner": 17,
- "estimated_start": "2026-05-12",
- "estimated_finish": "2026-05-19",
- "created_date": "2026-05-12T08:05:16.275Z",
- "modified_date": "2026-05-12T10:33:21.215Z",
- "closed": true,
- "disponibility": 0.0,
- "order": 1,
- "user_stories": [],
- "total_points": null,
- "closed_points": null
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 87,
- "name": "Sprint 12",
- "slug": "sprint-12",
- "owner": 17,
- "estimated_start": "2026-05-11",
- "estimated_finish": "2026-05-18",
- "created_date": "2026-05-11T05:55:51.920Z",
- "modified_date": "2026-05-11T05:55:51.924Z",
- "closed": true,
- "disponibility": 0.0,
- "order": 1,
- "user_stories": [],
- "total_points": null,
- "closed_points": null
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 86,
- "name": "Sprint 11",
- "slug": "sprint-11",
- "owner": 17,
- "estimated_start": "2026-05-08",
- "estimated_finish": "2026-05-15",
- "created_date": "2026-05-08T06:19:13.078Z",
- "modified_date": "2026-05-08T06:19:13.081Z",
- "closed": true,
- "disponibility": 0.0,
- "order": 1,
- "user_stories": [],
- "total_points": null,
- "closed_points": null
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 71,
- "name": "Sprint 4",
- "slug": "sprint-4",
- "owner": 17,
- "estimated_start": "2026-05-07",
- "estimated_finish": "2026-05-14",
- "created_date": "2026-03-26T09:09:30.075Z",
- "modified_date": "2026-05-12T10:33:21.318Z",
- "closed": true,
- "disponibility": 0.0,
- "order": 1,
- "user_stories": [
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 207,
- "ref": 4,
- "milestone": 71,
- "is_closed": true,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:36.259Z",
- "finish_date": "2026-05-12T10:35:48.914Z",
- "subject": "US-9: 100% local data privacy (no user data leaves the server)",
- "client_requirement": false,
- "team_requirement": false,
- "external_reference": null,
- "version": 5,
- "is_blocked": false,
- "blocked_note": "",
- "backlog_order": 1774515944980084,
- "sprint_order": 1774515944980086,
- "kanban_order": 5,
- "epics": null,
- "points": {
- "123": 242,
- "124": 242,
- "125": 242,
- "126": 245
- },
- "total_points": 2.0
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 206,
- "ref": 3,
- "milestone": 71,
- "is_closed": true,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:35.233Z",
- "finish_date": "2026-05-12T10:35:49.563Z",
- "subject": "US-1: Create an account and log in securely",
- "client_requirement": false,
- "team_requirement": false,
- "external_reference": null,
- "version": 5,
- "is_blocked": false,
- "blocked_note": "",
- "backlog_order": 1774515944980085,
- "sprint_order": 1774515944980022,
- "kanban_order": 4,
- "epics": null,
- "points": {
- "123": 242,
- "124": 244,
- "125": 245,
- "126": 245
- },
- "total_points": 5.0
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 208,
- "ref": 5,
- "milestone": 71,
- "is_closed": true,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:35.362Z",
- "finish_date": "2026-05-12T10:35:50.195Z",
- "subject": "US-2: Get complete nutritional value information on any food",
- "client_requirement": false,
- "team_requirement": false,
- "external_reference": null,
- "version": 5,
- "is_blocked": false,
- "blocked_note": "",
- "backlog_order": 1774515944980086,
- "sprint_order": 1774515944980149,
- "kanban_order": 1778581998333738,
- "epics": null,
- "points": {
- "123": 244,
- "124": 242,
- "125": 245,
- "126": 245
- },
- "total_points": 5.0
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 209,
- "ref": 6,
- "milestone": 71,
- "is_closed": true,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:35.618Z",
- "finish_date": "2026-05-12T10:35:50.843Z",
- "subject": "US-4: Search for specific nutrient content and get a sortable list of all foods",
- "client_requirement": false,
- "team_requirement": false,
- "external_reference": null,
- "version": 5,
- "is_blocked": false,
- "blocked_note": "",
- "backlog_order": 1774515944980087,
- "sprint_order": 1774515944980210,
- "kanban_order": 1778581998482712,
- "epics": null,
- "points": {
- "123": 244,
- "124": 244,
- "125": 246,
- "126": 246
- },
- "total_points": 8.0
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 211,
- "ref": 8,
- "milestone": 71,
- "is_closed": true,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:35.749Z",
- "finish_date": "2026-05-12T10:35:51.486Z",
- "subject": "US-5: Store food combinations in named and editable lists",
- "client_requirement": false,
- "team_requirement": false,
- "external_reference": null,
- "version": 5,
- "is_blocked": false,
- "blocked_note": "",
- "backlog_order": 1774515944980089,
- "sprint_order": 1774515944980351,
- "kanban_order": 1778581998627669,
- "epics": null,
- "points": {
- "124": 241,
- "125": 241,
- "126": 241,
- "123": 247
- },
- "total_points": 5.0
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 212,
- "ref": 9,
- "milestone": 71,
- "is_closed": true,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:36.483Z",
- "finish_date": "2026-05-12T10:35:52.142Z",
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "client_requirement": false,
- "team_requirement": false,
- "external_reference": null,
- "version": 5,
- "is_blocked": false,
- "blocked_note": "",
- "backlog_order": 1774515944980091,
- "sprint_order": 1774515944980410,
- "kanban_order": 6,
- "epics": null,
- "points": {
- "123": 242,
- "124": 242,
- "125": 242,
- "126": 247
- },
- "total_points": 5.0
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 210,
- "ref": 7,
- "milestone": 71,
- "is_closed": true,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:35.498Z",
- "finish_date": "2026-05-12T10:35:52.676Z",
- "subject": "US-3: Get the full nutritional value overview for a given food combination",
- "client_requirement": false,
- "team_requirement": false,
- "external_reference": null,
- "version": 5,
- "is_blocked": false,
- "blocked_note": "",
- "backlog_order": 1774515944980092,
- "sprint_order": 1774515944980288,
- "kanban_order": 1778581998764350,
- "epics": null,
- "points": {
- "124": 241,
- "125": 241,
- "126": 241,
- "123": 247
- },
- "total_points": 5.0
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 213,
- "ref": 10,
- "milestone": 71,
- "is_closed": true,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:36.016Z",
- "finish_date": "2026-05-12T10:35:53.303Z",
- "subject": "US-7: Freely chat about anything related to nutrition and get competent answers",
- "client_requirement": false,
- "team_requirement": false,
- "external_reference": null,
- "version": 5,
- "is_blocked": false,
- "blocked_note": "",
- "backlog_order": 1774515944980093,
- "sprint_order": 1774515944980467,
- "kanban_order": 7,
- "epics": null,
- "points": {
- "123": 244,
- "124": 242,
- "125": 245,
- "126": 245
- },
- "total_points": 5.0
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 214,
- "ref": 11,
- "milestone": 71,
- "is_closed": true,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:35.879Z",
- "finish_date": "2026-05-12T10:35:53.979Z",
- "subject": "US-6: Get menu proposals based on nutritional value and health constraints",
- "client_requirement": false,
- "team_requirement": false,
- "external_reference": null,
- "version": 5,
- "is_blocked": false,
- "blocked_note": "",
- "backlog_order": 1774515944980094,
- "sprint_order": 1774515944980523,
- "kanban_order": 1778581998895616,
- "epics": null,
- "points": {
- "123": 244,
- "124": 242,
- "125": 245,
- "126": 247
- },
- "total_points": 8.0
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 215,
- "ref": 12,
- "milestone": 71,
- "is_closed": true,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:36.141Z",
- "finish_date": "2026-05-12T10:35:54.611Z",
- "subject": "US-8: Anonymous private web search tool (SearXNG) integration",
- "client_requirement": false,
- "team_requirement": false,
- "external_reference": null,
- "version": 5,
- "is_blocked": false,
- "blocked_note": "",
- "backlog_order": 1774515944980095,
- "sprint_order": 1774515944980579,
- "kanban_order": 8,
- "epics": null,
- "points": {
- "123": 242,
- "124": 242,
- "125": 242,
- "126": 246
- },
- "total_points": 3.0
- }
- ],
- "total_points": 51.0,
- "closed_points": 51.0
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 85,
- "name": "Sprint 10",
- "slug": "sprint-10",
- "owner": 17,
- "estimated_start": "2026-05-06",
- "estimated_finish": "2026-05-13",
- "created_date": "2026-05-06T09:09:34.980Z",
- "modified_date": "2026-05-06T09:09:34.985Z",
- "closed": true,
- "disponibility": 0.0,
- "order": 1,
- "user_stories": [],
- "total_points": null,
- "closed_points": null
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 84,
- "name": "Sprint 9",
- "slug": "sprint-9",
- "owner": 17,
- "estimated_start": "2026-05-04",
- "estimated_finish": "2026-05-04",
- "created_date": "2026-05-04T06:04:35.058Z",
- "modified_date": "2026-05-04T06:04:35.062Z",
- "closed": true,
- "disponibility": 0.0,
- "order": 1,
- "user_stories": [],
- "total_points": null,
- "closed_points": null
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 70,
- "name": "Sprint 3",
- "slug": "sprint-3",
- "owner": 17,
- "estimated_start": "2026-04-30",
- "estimated_finish": "2026-05-07",
- "created_date": "2026-03-26T09:08:52.039Z",
- "modified_date": "2026-05-12T10:33:21.422Z",
- "closed": true,
- "disponibility": 0.0,
- "order": 1,
- "user_stories": [],
- "total_points": null,
- "closed_points": null
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 69,
- "name": "Sprint 2",
- "slug": "sprint-2",
- "owner": 17,
- "estimated_start": "2026-04-23",
- "estimated_finish": "2026-04-30",
- "created_date": "2026-03-26T09:07:58.795Z",
- "modified_date": "2026-05-12T10:33:21.518Z",
- "closed": true,
- "disponibility": 0.0,
- "order": 1,
- "user_stories": [],
- "total_points": null,
- "closed_points": null
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 68,
- "name": "Sprint 1",
- "slug": "sprint-1-1",
- "owner": 17,
- "estimated_start": "2026-04-16",
- "estimated_finish": "2026-04-23",
- "created_date": "2026-03-26T09:06:00.869Z",
- "modified_date": "2026-05-12T10:33:21.599Z",
- "closed": true,
- "disponibility": 0.0,
- "order": 1,
- "user_stories": [],
- "total_points": null,
- "closed_points": null
- }
- ],
- "user_stories": [
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 204,
- "ref": 1,
- "milestone": 73,
- "milestone_slug": "sprint-6",
- "milestone_name": "Sprint 6",
- "is_closed": false,
- "points": {
- "124": 241,
- "125": 241,
- "126": 241,
- "123": 247
- },
- "backlog_order": 1774515944979838,
- "sprint_order": 1774515944979843,
- "kanban_order": 2,
- "created_date": "2026-03-26T09:05:44.979Z",
- "modified_date": "2026-05-22T09:54:36.373Z",
- "finish_date": null,
- "subject": "US-10: Public Git repository with easy cloning support (LocalFoodAI_lanfr144)",
- "client_requirement": false,
- "team_requirement": false,
- "generated_from_issue": null,
- "generated_from_task": null,
- "from_task_ref": null,
- "external_reference": null,
- "tribe_gig": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "total_points": 5.0,
- "comment": "",
- "origin_issue": null,
- "origin_task": null,
- "epics": null,
- "epic_order": null,
- "tasks": [],
- "total_attachments": 0,
- "swimlane": null,
- "assigned_users": [
- 17
- ]
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 207,
- "ref": 4,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "milestone_name": "Sprint 4",
- "is_closed": true,
- "points": {
- "123": 242,
- "124": 242,
- "125": 242,
- "126": 245
- },
- "backlog_order": 1774515944980084,
- "sprint_order": 1774515944980086,
- "kanban_order": 5,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:36.259Z",
- "finish_date": "2026-05-12T10:35:48.914Z",
- "subject": "US-9: 100% local data privacy (no user data leaves the server)",
- "client_requirement": false,
- "team_requirement": false,
- "generated_from_issue": null,
- "generated_from_task": null,
- "from_task_ref": null,
- "external_reference": null,
- "tribe_gig": null,
- "version": 5,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "total_points": 2.0,
- "comment": "",
- "origin_issue": null,
- "origin_task": null,
- "epics": null,
- "epic_order": null,
- "tasks": [],
- "total_attachments": 0,
- "swimlane": null,
- "assigned_users": [
- 17
- ]
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 206,
- "ref": 3,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "milestone_name": "Sprint 4",
- "is_closed": true,
- "points": {
- "123": 242,
- "124": 244,
- "125": 245,
- "126": 245
- },
- "backlog_order": 1774515944980085,
- "sprint_order": 1774515944980022,
- "kanban_order": 4,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:35.233Z",
- "finish_date": "2026-05-12T10:35:49.563Z",
- "subject": "US-1: Create an account and log in securely",
- "client_requirement": false,
- "team_requirement": false,
- "generated_from_issue": null,
- "generated_from_task": null,
- "from_task_ref": null,
- "external_reference": null,
- "tribe_gig": null,
- "version": 5,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "total_points": 5.0,
- "comment": "",
- "origin_issue": null,
- "origin_task": null,
- "epics": null,
- "epic_order": null,
- "tasks": [],
- "total_attachments": 0,
- "swimlane": null,
- "assigned_users": [
- 17
- ]
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 208,
- "ref": 5,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "milestone_name": "Sprint 4",
- "is_closed": true,
- "points": {
- "123": 244,
- "124": 242,
- "125": 245,
- "126": 245
- },
- "backlog_order": 1774515944980086,
- "sprint_order": 1774515944980149,
- "kanban_order": 1778581998333738,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:35.362Z",
- "finish_date": "2026-05-12T10:35:50.195Z",
- "subject": "US-2: Get complete nutritional value information on any food",
- "client_requirement": false,
- "team_requirement": false,
- "generated_from_issue": null,
- "generated_from_task": null,
- "from_task_ref": null,
- "external_reference": null,
- "tribe_gig": null,
- "version": 5,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "total_points": 5.0,
- "comment": "",
- "origin_issue": null,
- "origin_task": null,
- "epics": null,
- "epic_order": null,
- "tasks": [],
- "total_attachments": 0,
- "swimlane": null,
- "assigned_users": []
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 209,
- "ref": 6,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "milestone_name": "Sprint 4",
- "is_closed": true,
- "points": {
- "123": 244,
- "124": 244,
- "125": 246,
- "126": 246
- },
- "backlog_order": 1774515944980087,
- "sprint_order": 1774515944980210,
- "kanban_order": 1778581998482712,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:35.618Z",
- "finish_date": "2026-05-12T10:35:50.843Z",
- "subject": "US-4: Search for specific nutrient content and get a sortable list of all foods",
- "client_requirement": false,
- "team_requirement": false,
- "generated_from_issue": null,
- "generated_from_task": null,
- "from_task_ref": null,
- "external_reference": null,
- "tribe_gig": null,
- "version": 5,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "total_points": 8.0,
- "comment": "",
- "origin_issue": null,
- "origin_task": null,
- "epics": null,
- "epic_order": null,
- "tasks": [],
- "total_attachments": 0,
- "swimlane": null,
- "assigned_users": []
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 211,
- "ref": 8,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "milestone_name": "Sprint 4",
- "is_closed": true,
- "points": {
- "124": 241,
- "125": 241,
- "126": 241,
- "123": 247
- },
- "backlog_order": 1774515944980089,
- "sprint_order": 1774515944980351,
- "kanban_order": 1778581998627669,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:35.749Z",
- "finish_date": "2026-05-12T10:35:51.486Z",
- "subject": "US-5: Store food combinations in named and editable lists",
- "client_requirement": false,
- "team_requirement": false,
- "generated_from_issue": null,
- "generated_from_task": null,
- "from_task_ref": null,
- "external_reference": null,
- "tribe_gig": null,
- "version": 5,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "total_points": 5.0,
- "comment": "",
- "origin_issue": null,
- "origin_task": null,
- "epics": null,
- "epic_order": null,
- "tasks": [],
- "total_attachments": 0,
- "swimlane": null,
- "assigned_users": []
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 212,
- "ref": 9,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "milestone_name": "Sprint 4",
- "is_closed": true,
- "points": {
- "123": 242,
- "124": 242,
- "125": 242,
- "126": 247
- },
- "backlog_order": 1774515944980091,
- "sprint_order": 1774515944980410,
- "kanban_order": 6,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:36.483Z",
- "finish_date": "2026-05-12T10:35:52.142Z",
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "client_requirement": false,
- "team_requirement": false,
- "generated_from_issue": null,
- "generated_from_task": null,
- "from_task_ref": null,
- "external_reference": null,
- "tribe_gig": null,
- "version": 5,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "total_points": 5.0,
- "comment": "",
- "origin_issue": null,
- "origin_task": null,
- "epics": null,
- "epic_order": null,
- "tasks": [],
- "total_attachments": 0,
- "swimlane": null,
- "assigned_users": [
- 17
- ]
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 210,
- "ref": 7,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "milestone_name": "Sprint 4",
- "is_closed": true,
- "points": {
- "124": 241,
- "125": 241,
- "126": 241,
- "123": 247
- },
- "backlog_order": 1774515944980092,
- "sprint_order": 1774515944980288,
- "kanban_order": 1778581998764350,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:35.498Z",
- "finish_date": "2026-05-12T10:35:52.676Z",
- "subject": "US-3: Get the full nutritional value overview for a given food combination",
- "client_requirement": false,
- "team_requirement": false,
- "generated_from_issue": null,
- "generated_from_task": null,
- "from_task_ref": null,
- "external_reference": null,
- "tribe_gig": null,
- "version": 5,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "total_points": 5.0,
- "comment": "",
- "origin_issue": null,
- "origin_task": null,
- "epics": null,
- "epic_order": null,
- "tasks": [],
- "total_attachments": 0,
- "swimlane": null,
- "assigned_users": []
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 213,
- "ref": 10,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "milestone_name": "Sprint 4",
- "is_closed": true,
- "points": {
- "123": 244,
- "124": 242,
- "125": 245,
- "126": 245
- },
- "backlog_order": 1774515944980093,
- "sprint_order": 1774515944980467,
- "kanban_order": 7,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:36.016Z",
- "finish_date": "2026-05-12T10:35:53.303Z",
- "subject": "US-7: Freely chat about anything related to nutrition and get competent answers",
- "client_requirement": false,
- "team_requirement": false,
- "generated_from_issue": null,
- "generated_from_task": null,
- "from_task_ref": null,
- "external_reference": null,
- "tribe_gig": null,
- "version": 5,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "total_points": 5.0,
- "comment": "",
- "origin_issue": null,
- "origin_task": null,
- "epics": null,
- "epic_order": null,
- "tasks": [],
- "total_attachments": 0,
- "swimlane": null,
- "assigned_users": [
- 17
- ]
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 214,
- "ref": 11,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "milestone_name": "Sprint 4",
- "is_closed": true,
- "points": {
- "123": 244,
- "124": 242,
- "125": 245,
- "126": 247
- },
- "backlog_order": 1774515944980094,
- "sprint_order": 1774515944980523,
- "kanban_order": 1778581998895616,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:35.879Z",
- "finish_date": "2026-05-12T10:35:53.979Z",
- "subject": "US-6: Get menu proposals based on nutritional value and health constraints",
- "client_requirement": false,
- "team_requirement": false,
- "generated_from_issue": null,
- "generated_from_task": null,
- "from_task_ref": null,
- "external_reference": null,
- "tribe_gig": null,
- "version": 5,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "total_points": 8.0,
- "comment": "",
- "origin_issue": null,
- "origin_task": null,
- "epics": null,
- "epic_order": null,
- "tasks": [],
- "total_attachments": 0,
- "swimlane": null,
- "assigned_users": []
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "status": 125,
- "status_extra_info": {
- "name": "Done",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "id": 215,
- "ref": 12,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "milestone_name": "Sprint 4",
- "is_closed": true,
- "points": {
- "123": 242,
- "124": 242,
- "125": 242,
- "126": 246
- },
- "backlog_order": 1774515944980095,
- "sprint_order": 1774515944980579,
- "kanban_order": 8,
- "created_date": "2026-03-26T09:05:44.980Z",
- "modified_date": "2026-05-22T09:54:36.141Z",
- "finish_date": "2026-05-12T10:35:54.611Z",
- "subject": "US-8: Anonymous private web search tool (SearXNG) integration",
- "client_requirement": false,
- "team_requirement": false,
- "generated_from_issue": null,
- "generated_from_task": null,
- "from_task_ref": null,
- "external_reference": null,
- "tribe_gig": null,
- "version": 5,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "total_points": 3.0,
- "comment": "",
- "origin_issue": null,
- "origin_task": null,
- "epics": null,
- "epic_order": null,
- "tasks": [],
- "total_attachments": 0,
- "swimlane": null,
- "assigned_users": [
- 17
- ]
- }
- ],
- "tasks": [
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 435,
- "user_story": 208,
- "ref": 15,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-22T12:44:03.374Z",
- "modified_date": "2026-06-18T09:52:41.029Z",
- "finished_date": "2026-05-12T10:33:14.934Z",
- "subject": "Rebuild setup_db.py to allow dynamic Pandas table generation.",
- "us_order": 1776861843367,
- "taskboard_order": 1776861843366,
- "is_iocaine": false,
- "external_reference": null,
- "version": 13,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 208,
- "ref": 5,
- "subject": "US-2: Get complete nutritional value information on any food",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 436,
- "user_story": 208,
- "ref": 16,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-22T12:44:21.132Z",
- "modified_date": "2026-06-18T09:52:41.190Z",
- "finished_date": "2026-05-12T10:33:15.097Z",
- "subject": "Update ingest_csv.py with to_sql and post-load index generating.",
- "us_order": 1776861861124,
- "taskboard_order": 1776861861123,
- "is_iocaine": false,
- "external_reference": null,
- "version": 14,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 208,
- "ref": 5,
- "subject": "US-2: Get complete nutritional value information on any food",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 437,
- "user_story": 208,
- "ref": 17,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-22T12:44:55.357Z",
- "modified_date": "2026-06-18T09:52:41.337Z",
- "finished_date": "2026-05-12T10:33:15.239Z",
- "subject": "Create start_batch_ingest.sh wrapper for disconnected execution.",
- "us_order": 1776861895324,
- "taskboard_order": 1776861895323,
- "is_iocaine": false,
- "external_reference": null,
- "version": 13,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 208,
- "ref": 5,
- "subject": "US-2: Get complete nutritional value information on any food",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 438,
- "user_story": 208,
- "ref": 18,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-22T12:45:13.639Z",
- "modified_date": "2026-06-18T09:52:41.477Z",
- "finished_date": "2026-05-12T10:33:15.385Z",
- "subject": "Configure server .forward mail protocols for centralized admin support.",
- "us_order": 1776861895325,
- "taskboard_order": 1776861913623,
- "is_iocaine": false,
- "external_reference": null,
- "version": 15,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 208,
- "ref": 5,
- "subject": "US-2: Get complete nutritional value information on any food",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 439,
- "user_story": 215,
- "ref": 20,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-22T12:59:39.686Z",
- "modified_date": "2026-06-18T09:52:41.625Z",
- "finished_date": "2026-05-12T10:33:15.530Z",
- "subject": "Create setup_searxng.sh to install Docker and bind anonymous SearXNG to localhost:8080.",
- "us_order": 1776862779678,
- "taskboard_order": 1776862779678,
- "is_iocaine": false,
- "external_reference": null,
- "version": 13,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 215,
- "ref": 12,
- "subject": "US-8: Anonymous private web search tool (SearXNG) integration",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 440,
- "user_story": 215,
- "ref": 21,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-22T12:59:57.033Z",
- "modified_date": "2026-06-18T09:52:41.757Z",
- "finished_date": "2026-05-12T10:33:15.680Z",
- "subject": "Update deploy.sh to include requests connectivity dependency.",
- "us_order": 1776862797018,
- "taskboard_order": 1776862797018,
- "is_iocaine": false,
- "external_reference": null,
- "version": 13,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 215,
- "ref": 12,
- "subject": "US-8: Anonymous private web search tool (SearXNG) integration",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 441,
- "user_story": 215,
- "ref": 22,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-22T13:00:14.722Z",
- "modified_date": "2026-06-18T09:52:41.873Z",
- "finished_date": "2026-05-12T10:33:15.834Z",
- "subject": "Rework app.py LLM inference loop to support native Mistral Tool/Function calling integrations.",
- "us_order": 1776862814714,
- "taskboard_order": 1776862814714,
- "is_iocaine": false,
- "external_reference": null,
- "version": 13,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 215,
- "ref": 12,
- "subject": "US-8: Anonymous private web search tool (SearXNG) integration",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 442,
- "user_story": 208,
- "ref": 23,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-22T13:39:11.957Z",
- "modified_date": "2026-06-18T09:52:42.011Z",
- "finished_date": "2026-05-12T10:33:15.993Z",
- "subject": "Why: Applying the global CSS architecture is the direct prerequisite to making the visual information actually look premium and readable when the user views the data.",
- "us_order": 0,
- "taskboard_order": 1776865151950,
- "is_iocaine": false,
- "external_reference": null,
- "version": 14,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 208,
- "ref": 5,
- "subject": "US-2: Get complete nutritional value information on any food",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 443,
- "user_story": 209,
- "ref": 24,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-22T13:40:38.276Z",
- "modified_date": "2026-06-18T09:52:42.156Z",
- "finished_date": "2026-05-12T10:33:16.130Z",
- "subject": "Why: Building the numerical filtering sliders logically completes the \"Advanced Search\" capabilities explicitly defined by this story.",
- "us_order": 1776865238268,
- "taskboard_order": 1776865238268,
- "is_iocaine": false,
- "external_reference": null,
- "version": 13,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 209,
- "ref": 6,
- "subject": "US-4: Search for specific nutrient content and get a sortable list of all foods",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 445,
- "user_story": 210,
- "ref": 26,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-22T13:42:51.660Z",
- "modified_date": "2026-06-18T09:52:42.303Z",
- "finished_date": "2026-05-12T10:33:16.267Z",
- "subject": "Why: Generating the Pandas calculation logic that mathematically adds up the macros is what delivers the final \"Combined Value Overview\" to the user!",
- "us_order": 0,
- "taskboard_order": 1776865371620,
- "is_iocaine": false,
- "external_reference": null,
- "version": 14,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 210,
- "ref": 7,
- "subject": "US-3: Get the full nutritional value overview for a given food combination",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 446,
- "user_story": 211,
- "ref": 27,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-22T13:51:32.632Z",
- "modified_date": "2026-06-18T09:52:42.445Z",
- "finished_date": "2026-05-12T10:33:16.415Z",
- "subject": "Why: The core of this story is storing data, which is entirely solved by creating the explicit relational plates and plate_items MySQL database tables.",
- "us_order": 0,
- "taskboard_order": 1776865892612,
- "is_iocaine": false,
- "external_reference": null,
- "version": 14,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 211,
- "ref": 8,
- "subject": "US-5: Store food combinations in named and editable lists",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 447,
- "user_story": 214,
- "ref": 29,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-23T07:36:32.876Z",
- "modified_date": "2026-06-18T09:52:42.602Z",
- "finished_date": "2026-04-23T07:54:49.012Z",
- "subject": "Implement EAV Mapping Database Architecture",
- "us_order": 0,
- "taskboard_order": 1776929792865,
- "is_iocaine": false,
- "external_reference": null,
- "version": 17,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 214,
- "ref": 11,
- "subject": "US-6: Get menu proposals based on nutritional value and health constraints",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 448,
- "user_story": 208,
- "ref": 30,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-23T07:37:49.353Z",
- "modified_date": "2026-06-18T09:52:42.718Z",
- "finished_date": "2026-04-23T07:54:49.164Z",
- "subject": "Fix Windows Encodings in Pandas Ingestion Engine",
- "us_order": 1,
- "taskboard_order": 1776929869343,
- "is_iocaine": false,
- "external_reference": null,
- "version": 19,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 208,
- "ref": 5,
- "subject": "US-2: Get complete nutritional value information on any food",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 449,
- "user_story": 214,
- "ref": 31,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-23T07:39:36.448Z",
- "modified_date": "2026-06-18T09:52:42.832Z",
- "finished_date": "2026-04-23T07:54:49.299Z",
- "subject": "Build Dynamic 'Medical Profile' CRUD Interface",
- "us_order": 2,
- "taskboard_order": 1776929976440,
- "is_iocaine": false,
- "external_reference": null,
- "version": 16,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 214,
- "ref": 11,
- "subject": "US-6: Get menu proposals based on nutritional value and health constraints",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 450,
- "user_story": 214,
- "ref": 32,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-23T07:40:43.498Z",
- "modified_date": "2026-06-18T09:52:42.950Z",
- "finished_date": "2026-04-23T07:54:49.431Z",
- "subject": "Deploy Clinical Health-Warning Alert Engine",
- "us_order": 3,
- "taskboard_order": 1776930043491,
- "is_iocaine": false,
- "external_reference": null,
- "version": 16,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 214,
- "ref": 11,
- "subject": "US-6: Get menu proposals based on nutritional value and health constraints",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": 17,
- "assigned_to_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 451,
- "user_story": 214,
- "ref": 33,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-23T07:41:53.165Z",
- "modified_date": "2026-06-18T09:52:43.055Z",
- "finished_date": "2026-04-23T07:54:49.550Z",
- "subject": "Deploy Email Resets and Persistent Query Limits",
- "us_order": 1776930113155,
- "taskboard_order": 1776930113155,
- "is_iocaine": false,
- "external_reference": null,
- "version": 14,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 214,
- "ref": 11,
- "subject": "US-6: Get menu proposals based on nutritional value and health constraints",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 452,
- "user_story": 214,
- "ref": 35,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-24T05:51:51.446Z",
- "modified_date": "2026-06-18T09:52:43.153Z",
- "finished_date": "2026-05-12T10:33:16.573Z",
- "subject": "Create unified PDF presentation for review",
- "us_order": 1777009911434,
- "taskboard_order": 1777009911434,
- "is_iocaine": false,
- "external_reference": null,
- "version": 13,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 214,
- "ref": 11,
- "subject": "US-6: Get menu proposals based on nutritional value and health constraints",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 453,
- "user_story": 212,
- "ref": 36,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-24T05:51:51.638Z",
- "modified_date": "2026-06-18T09:52:43.246Z",
- "finished_date": "2026-05-12T10:33:16.753Z",
- "subject": "Execute Alembic Database Migration scripting",
- "us_order": 1777009911621,
- "taskboard_order": 1777009911622,
- "is_iocaine": false,
- "external_reference": null,
- "version": 13,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 454,
- "user_story": 212,
- "ref": 37,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-24T05:51:51.897Z",
- "modified_date": "2026-06-18T09:52:43.356Z",
- "finished_date": "2026-05-12T10:33:16.906Z",
- "subject": "Sanitize Ollama Mistral LLM endpoints on .170",
- "us_order": 1777009911885,
- "taskboard_order": 1777009911885,
- "is_iocaine": false,
- "external_reference": null,
- "version": 13,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 455,
- "user_story": 212,
- "ref": 38,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-24T05:51:52.138Z",
- "modified_date": "2026-06-18T09:52:43.487Z",
- "finished_date": "2026-05-12T10:33:17.056Z",
- "subject": "Perform Green Recommendation Engine Demo",
- "us_order": 1777009912127,
- "taskboard_order": 1777009912127,
- "is_iocaine": false,
- "external_reference": null,
- "version": 13,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 546,
- "user_story": 204,
- "ref": 129,
- "milestone": 73,
- "milestone_slug": "sprint-6",
- "created_date": "2026-04-28T09:58:45.498Z",
- "modified_date": "2026-06-18T09:52:43.623Z",
- "finished_date": "2026-05-12T10:35:57.414Z",
- "subject": "Auto‑generated task (define details)",
- "us_order": 1777370325485,
- "taskboard_order": 1777370325485,
- "is_iocaine": false,
- "external_reference": null,
- "version": 8,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 204,
- "ref": 1,
- "subject": "US-10: Public Git repository with easy cloning support (LocalFoodAI_lanfr144)",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 547,
- "user_story": 212,
- "ref": 130,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-28T09:58:46.622Z",
- "modified_date": "2026-06-18T09:52:43.760Z",
- "finished_date": "2026-05-12T10:35:57.562Z",
- "subject": "Auto‑generated task (define details)",
- "us_order": 1777370326610,
- "taskboard_order": 1777370326610,
- "is_iocaine": false,
- "external_reference": null,
- "version": 9,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 548,
- "user_story": 212,
- "ref": 132,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-29T09:10:35.430Z",
- "modified_date": "2026-06-18T09:52:43.882Z",
- "finished_date": "2026-05-12T10:35:57.703Z",
- "subject": "Execute: Zabbix Server Docker Setup",
- "us_order": 1777453835419,
- "taskboard_order": 1777453835419,
- "is_iocaine": false,
- "external_reference": null,
- "version": 9,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 549,
- "user_story": 212,
- "ref": 134,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-29T09:10:35.733Z",
- "modified_date": "2026-06-18T09:52:43.998Z",
- "finished_date": "2026-05-12T10:35:57.852Z",
- "subject": "Execute: SNMPv3 Integration",
- "us_order": 1777453835722,
- "taskboard_order": 1777453835722,
- "is_iocaine": false,
- "external_reference": null,
- "version": 9,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 550,
- "user_story": 212,
- "ref": 136,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-29T09:10:36.058Z",
- "modified_date": "2026-06-18T09:52:44.111Z",
- "finished_date": "2026-05-12T10:35:58.011Z",
- "subject": "Execute: Application Component Traps",
- "us_order": 1777453836050,
- "taskboard_order": 1777453836050,
- "is_iocaine": false,
- "external_reference": null,
- "version": 9,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 551,
- "user_story": 212,
- "ref": 138,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-30T05:57:38.907Z",
- "modified_date": "2026-06-18T09:52:44.210Z",
- "finished_date": "2026-05-12T10:35:58.174Z",
- "subject": "Execute: Clinical Explorer Verification Testing",
- "us_order": 1777528658899,
- "taskboard_order": 1777528658899,
- "is_iocaine": false,
- "external_reference": null,
- "version": 9,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 552,
- "user_story": 212,
- "ref": 140,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-30T05:57:39.189Z",
- "modified_date": "2026-06-18T09:52:44.325Z",
- "finished_date": "2026-05-12T10:35:58.335Z",
- "subject": "Execute: Zabbix Application Monitoring Checks",
- "us_order": 1777528659180,
- "taskboard_order": 1777528659180,
- "is_iocaine": false,
- "external_reference": null,
- "version": 9,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 553,
- "user_story": 212,
- "ref": 142,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-30T05:57:39.509Z",
- "modified_date": "2026-06-18T09:52:44.455Z",
- "finished_date": "2026-05-12T10:35:58.474Z",
- "subject": "Execute: Zabbix Email Integration",
- "us_order": 1777528659501,
- "taskboard_order": 1777528659501,
- "is_iocaine": false,
- "external_reference": null,
- "version": 9,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 554,
- "user_story": 212,
- "ref": 144,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-30T05:57:39.811Z",
- "modified_date": "2026-06-18T09:52:44.606Z",
- "finished_date": "2026-05-12T10:35:58.624Z",
- "subject": "Execute: Zabbix Live Alert Testing",
- "us_order": 1777528659805,
- "taskboard_order": 1777528659805,
- "is_iocaine": false,
- "external_reference": null,
- "version": 9,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 555,
- "user_story": 212,
- "ref": 146,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-30T05:57:40.130Z",
- "modified_date": "2026-06-18T09:52:44.738Z",
- "finished_date": "2026-05-12T10:35:58.771Z",
- "subject": "Execute: Server Backup Procedures",
- "us_order": 1777528660123,
- "taskboard_order": 1777528660123,
- "is_iocaine": false,
- "external_reference": null,
- "version": 9,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 556,
- "user_story": 212,
- "ref": 148,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-30T05:57:40.416Z",
- "modified_date": "2026-05-22T09:54:40.850Z",
- "finished_date": "2026-05-12T10:35:58.964Z",
- "subject": "Execute: WSL Deployment Playbook",
- "us_order": 1777528660403,
- "taskboard_order": 1777528660403,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 557,
- "user_story": 204,
- "ref": 150,
- "milestone": 73,
- "milestone_slug": "sprint-6",
- "created_date": "2026-04-30T05:57:40.718Z",
- "modified_date": "2026-05-22T09:54:41.050Z",
- "finished_date": "2026-05-12T10:35:59.146Z",
- "subject": "Execute: Agile Scrum Rituals Wiki",
- "us_order": 1777528660709,
- "taskboard_order": 1777528660709,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 204,
- "ref": 1,
- "subject": "US-10: Public Git repository with easy cloning support (LocalFoodAI_lanfr144)",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 558,
- "user_story": 212,
- "ref": 152,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-30T08:08:25.993Z",
- "modified_date": "2026-05-22T09:54:41.212Z",
- "finished_date": "2026-05-12T10:35:59.313Z",
- "subject": "Execute Bug Fixes",
- "us_order": 1777536505983,
- "taskboard_order": 1777536505983,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 559,
- "user_story": 212,
- "ref": 154,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-04-30T10:06:49.734Z",
- "modified_date": "2026-05-22T09:54:41.380Z",
- "finished_date": "2026-05-12T10:35:59.493Z",
- "subject": "Execute Phase 3 Overhaul",
- "us_order": 1777543609726,
- "taskboard_order": 1777543609726,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 560,
- "user_story": 212,
- "ref": 156,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-04T06:04:35.307Z",
- "modified_date": "2026-05-22T09:54:41.569Z",
- "finished_date": "2026-05-04T10:25:23.934Z",
- "subject": "Centralize docker-compose.yml with individual component services",
- "us_order": 1777874675292,
- "taskboard_order": 1777874675292,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 561,
- "user_story": 212,
- "ref": 157,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-04T06:04:35.478Z",
- "modified_date": "2026-05-22T09:54:41.760Z",
- "finished_date": "2026-05-04T10:27:45.642Z",
- "subject": "Integrate NVIDIA GPU support for Ollama container",
- "us_order": 1777874675463,
- "taskboard_order": 1777874675463,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 562,
- "user_story": 208,
- "ref": 158,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-04T06:04:35.650Z",
- "modified_date": "2026-05-22T09:54:41.946Z",
- "finished_date": "2026-05-04T10:27:45.801Z",
- "subject": "Update App and Ingest Dockerfiles to include SNMP telemetry packages",
- "us_order": 1777874675636,
- "taskboard_order": 1777874675636,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 208,
- "ref": 5,
- "subject": "US-2: Get complete nutritional value information on any food",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 563,
- "user_story": 212,
- "ref": 159,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-04T06:04:35.814Z",
- "modified_date": "2026-05-22T09:54:42.131Z",
- "finished_date": "2026-05-04T10:27:45.931Z",
- "subject": "Write Zabbix API script to create App -> MySQL trigger dependencies",
- "us_order": 1777874675803,
- "taskboard_order": 1777874675803,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 564,
- "user_story": 204,
- "ref": 160,
- "milestone": 73,
- "milestone_slug": "sprint-6",
- "created_date": "2026-05-04T06:04:35.988Z",
- "modified_date": "2026-05-22T09:54:42.319Z",
- "finished_date": "2026-05-04T10:27:46.096Z",
- "subject": "Sync Git repository and update Taiga tracking",
- "us_order": 1777874675973,
- "taskboard_order": 1777874675973,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 204,
- "ref": 1,
- "subject": "US-10: Public Git repository with easy cloning support (LocalFoodAI_lanfr144)",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 565,
- "user_story": 212,
- "ref": 162,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-06T09:09:35.216Z",
- "modified_date": "2026-05-22T09:54:42.498Z",
- "finished_date": "2026-05-07T05:29:25.762Z",
- "subject": "Execute: Fix Llama3 Tool Compatibility",
- "us_order": 1778058575209,
- "taskboard_order": 1778058575209,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 566,
- "user_story": 212,
- "ref": 164,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-06T09:09:35.519Z",
- "modified_date": "2026-05-22T09:54:42.686Z",
- "finished_date": "2026-05-07T05:29:25.958Z",
- "subject": "Execute: Resolve MySQL Cartesian Product Explosion",
- "us_order": 1778058575513,
- "taskboard_order": 1778058575513,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 567,
- "user_story": 212,
- "ref": 166,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-06T09:09:35.855Z",
- "modified_date": "2026-05-22T09:54:42.931Z",
- "finished_date": "2026-05-07T05:29:26.136Z",
- "subject": "Execute: Implement Subquery First Optimization Strategy",
- "us_order": 1778058575847,
- "taskboard_order": 1778058575847,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 568,
- "user_story": 212,
- "ref": 168,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-06T09:09:36.177Z",
- "modified_date": "2026-05-22T09:54:43.110Z",
- "finished_date": "2026-05-07T05:29:26.318Z",
- "subject": "Execute: UI Execution Timers",
- "us_order": 1778058576169,
- "taskboard_order": 1778058576169,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 569,
- "user_story": 212,
- "ref": 170,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-06T09:09:36.505Z",
- "modified_date": "2026-05-22T09:54:43.283Z",
- "finished_date": "2026-05-07T05:29:26.492Z",
- "subject": "Execute: Zabbix Microsoft Teams Alert Integration",
- "us_order": 1778058576496,
- "taskboard_order": 1778058576496,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 571,
- "user_story": 212,
- "ref": 172,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-08T06:19:13.270Z",
- "modified_date": "2026-05-22T09:54:43.474Z",
- "finished_date": "2026-05-08T06:19:14.916Z",
- "subject": "Execute: Pre-Emptive Database Cleaning via Upsert",
- "us_order": 1778221153264,
- "taskboard_order": 1778221153264,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 572,
- "user_story": 212,
- "ref": 174,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-08T06:19:13.523Z",
- "modified_date": "2026-05-22T09:54:43.635Z",
- "finished_date": "2026-05-08T06:19:15.065Z",
- "subject": "Execute: Cascaded Search Logic & Nutrient Selectors",
- "us_order": 1778221153512,
- "taskboard_order": 1778221153512,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 573,
- "user_story": 210,
- "ref": 176,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-08T06:19:13.789Z",
- "modified_date": "2026-05-22T09:54:43.797Z",
- "finished_date": "2026-05-08T06:19:15.222Z",
- "subject": "Execute: Food Scale Conversion Expansion",
- "us_order": 1778221153780,
- "taskboard_order": 1778221153780,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 210,
- "ref": 7,
- "subject": "US-3: Get the full nutritional value overview for a given food combination",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 574,
- "user_story": 208,
- "ref": 178,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-08T06:19:14.057Z",
- "modified_date": "2026-05-22T09:54:43.937Z",
- "finished_date": "2026-05-08T06:19:15.369Z",
- "subject": "Execute: Self-Detaching NOHUP Ingestion Sync",
- "us_order": 1778221154048,
- "taskboard_order": 1778221154048,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 208,
- "ref": 5,
- "subject": "US-2: Get complete nutritional value information on any food",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 575,
- "user_story": 212,
- "ref": 180,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-08T07:36:17.981Z",
- "modified_date": "2026-05-22T09:54:44.070Z",
- "finished_date": "2026-05-08T07:36:18.916Z",
- "subject": "Execute: AI Dietary Restriction SQL Enforcement",
- "us_order": 1778225777967,
- "taskboard_order": 1778225777967,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 576,
- "user_story": 208,
- "ref": 182,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-08T07:36:18.283Z",
- "modified_date": "2026-05-22T09:54:44.222Z",
- "finished_date": "2026-05-08T07:36:19.077Z",
- "subject": "Execute: Zabbix Database Ingestion Telemetry",
- "us_order": 1778225778266,
- "taskboard_order": 1778225778266,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 208,
- "ref": 5,
- "subject": "US-2: Get complete nutritional value information on any food",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 577,
- "user_story": 214,
- "ref": 184,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-11T05:55:52.273Z",
- "modified_date": "2026-05-22T09:54:44.401Z",
- "finished_date": "2026-05-11T07:14:56.895Z",
- "subject": "Execute: AI Meal Plan PDF Generation",
- "us_order": 1778478952259,
- "taskboard_order": 1778478952259,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 214,
- "ref": 11,
- "subject": "US-6: Get menu proposals based on nutritional value and health constraints",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 578,
- "user_story": 212,
- "ref": 186,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-11T05:55:52.662Z",
- "modified_date": "2026-05-22T09:54:44.573Z",
- "finished_date": "2026-05-11T07:14:57.064Z",
- "subject": "Execute: Health Profile Input Constraints",
- "us_order": 1778478952645,
- "taskboard_order": 1778478952645,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 579,
- "user_story": 215,
- "ref": 188,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-12T08:05:16.596Z",
- "modified_date": "2026-05-22T09:54:44.753Z",
- "finished_date": "2026-05-12T10:35:59.665Z",
- "subject": "Inject SearXNG container into docker-compose.yml",
- "us_order": 1778573116588,
- "taskboard_order": 1778573116588,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 215,
- "ref": 12,
- "subject": "US-8: Anonymous private web search tool (SearXNG) integration",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 580,
- "user_story": 213,
- "ref": 189,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-12T08:05:16.727Z",
- "modified_date": "2026-05-22T09:54:44.928Z",
- "finished_date": "2026-05-12T10:35:59.814Z",
- "subject": "Implement Web Search Heuristic fallback in AI Chat",
- "us_order": 1778573116720,
- "taskboard_order": 1778573116720,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 213,
- "ref": 10,
- "subject": "US-7: Freely chat about anything related to nutrition and get competent answers",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 581,
- "user_story": 215,
- "ref": 190,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-12T08:05:16.869Z",
- "modified_date": "2026-05-22T09:54:45.105Z",
- "finished_date": "2026-05-12T10:35:59.953Z",
- "subject": "Integrate SearXNG API payload parsing with Ollama",
- "us_order": 1778573116857,
- "taskboard_order": 1778573116857,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 215,
- "ref": 12,
- "subject": "US-8: Anonymous private web search tool (SearXNG) integration",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 582,
- "user_story": 207,
- "ref": 192,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-12T11:25:35.655Z",
- "modified_date": "2026-05-22T09:54:45.296Z",
- "finished_date": "2026-05-12T11:30:25.320Z",
- "subject": "Execute rotate_passwords.py and update containers",
- "us_order": 1778585135644,
- "taskboard_order": 1778585135644,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 207,
- "ref": 4,
- "subject": "US-9: 100% local data privacy (no user data leaves the server)",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 583,
- "user_story": 206,
- "ref": 193,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-15T06:51:06.870Z",
- "modified_date": "2026-05-22T09:54:45.485Z",
- "finished_date": "2026-05-21T10:19:30.450Z",
- "subject": "Security: Remove hardcoded passwords and resolve DB login issues",
- "us_order": 1778827866858,
- "taskboard_order": 1778827866858,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 206,
- "ref": 3,
- "subject": "US-1: Create an account and log in securely",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 584,
- "user_story": 212,
- "ref": 194,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-15T07:17:19.128Z",
- "modified_date": "2026-05-22T09:54:45.655Z",
- "finished_date": "2026-05-21T10:19:30.604Z",
- "subject": "Configure Zabbix Alerting (Discord & Email) for Downtime & Slow Performance",
- "us_order": 1778829439120,
- "taskboard_order": 1778829439120,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 585,
- "user_story": 212,
- "ref": 195,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-15T10:26:35.911Z",
- "modified_date": "2026-05-22T09:54:45.836Z",
- "finished_date": "2026-05-21T10:19:30.756Z",
- "subject": "Configure Zabbix Alerting (Discord & Email) for Downtime & Slow Performance",
- "us_order": 1778840795900,
- "taskboard_order": 1778840795900,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 586,
- "user_story": 206,
- "ref": 196,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-18T12:17:29.481Z",
- "modified_date": "2026-05-22T09:54:45.997Z",
- "finished_date": "2026-05-21T10:19:30.912Z",
- "subject": "Remove hardcoded passwords and use .env / login-path",
- "us_order": 1779106649468,
- "taskboard_order": 1779106649468,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 206,
- "ref": 3,
- "subject": "US-1: Create an account and log in securely",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 587,
- "user_story": 212,
- "ref": 197,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-18T12:17:29.636Z",
- "modified_date": "2026-05-22T09:54:46.185Z",
- "finished_date": "2026-05-21T10:19:31.050Z",
- "subject": "Fix LIMIT bugs in app.py",
- "us_order": 1779106649624,
- "taskboard_order": 1779106649624,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 588,
- "user_story": 212,
- "ref": 198,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-18T12:17:29.813Z",
- "modified_date": "2026-05-22T09:54:46.388Z",
- "finished_date": "2026-05-21T10:19:31.179Z",
- "subject": "Automate data pipeline and Zabbix telemetry",
- "us_order": 1779106649800,
- "taskboard_order": 1779106649800,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 589,
- "user_story": 212,
- "ref": 200,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-19T05:43:48.940Z",
- "modified_date": "2026-05-22T09:54:46.584Z",
- "finished_date": "2026-05-21T10:19:31.317Z",
- "subject": "Create setup_deploy.py for Docker orchestration",
- "us_order": 1779169428926,
- "taskboard_order": 1779169428926,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 590,
- "user_story": 212,
- "ref": 202,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-20T05:08:23.977Z",
- "modified_date": "2026-05-22T09:54:46.739Z",
- "finished_date": "2026-05-21T10:19:31.451Z",
- "subject": "Replace data_sync.sh cron with Python DAG and configure Zabbix API health checks.",
- "us_order": 1779253703962,
- "taskboard_order": 1779253703962,
- "is_iocaine": false,
- "external_reference": null,
- "version": 4,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 591,
- "user_story": 204,
- "ref": 204,
- "milestone": 73,
- "milestone_slug": "sprint-6",
- "created_date": "2026-05-21T10:04:48.279Z",
- "modified_date": "2026-05-22T09:54:46.898Z",
- "finished_date": "2026-05-21T10:04:48.287Z",
- "subject": "Configure Easy Cloning and Repository Footprint",
- "us_order": 1779357888271,
- "taskboard_order": 1779357888277,
- "is_iocaine": false,
- "external_reference": null,
- "version": 3,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 204,
- "ref": 1,
- "subject": "US-10: Public Git repository with easy cloning support (LocalFoodAI_lanfr144)",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 592,
- "user_story": 206,
- "ref": 205,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-21T10:04:48.450Z",
- "modified_date": "2026-05-21T10:26:37.468Z",
- "finished_date": "2026-05-21T10:04:48.457Z",
- "subject": "Implement Secure Local User Authentication & Login UI",
- "us_order": 1779357888444,
- "taskboard_order": 1779357888450,
- "is_iocaine": false,
- "external_reference": null,
- "version": 2,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 206,
- "ref": 3,
- "subject": "US-1: Create an account and log in securely",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 593,
- "user_story": 207,
- "ref": 206,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-21T10:04:48.676Z",
- "modified_date": "2026-05-21T10:26:37.708Z",
- "finished_date": "2026-05-21T10:04:48.686Z",
- "subject": "Establish Strict Offline Database Constraints & Boundary Limits",
- "us_order": 1779357888663,
- "taskboard_order": 1779357888669,
- "is_iocaine": false,
- "external_reference": null,
- "version": 2,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 207,
- "ref": 4,
- "subject": "US-9: 100% local data privacy (no user data leaves the server)",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 594,
- "user_story": 212,
- "ref": 207,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-21T10:04:48.900Z",
- "modified_date": "2026-05-21T10:26:37.933Z",
- "finished_date": "2026-05-21T10:04:48.914Z",
- "subject": "Configure Ollama Local Orchestration for Llama3.2",
- "us_order": 1779357888918,
- "taskboard_order": 1779357888924,
- "is_iocaine": false,
- "external_reference": null,
- "version": 2,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 595,
- "user_story": 213,
- "ref": 208,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-21T10:04:49.113Z",
- "modified_date": "2026-05-21T10:26:38.153Z",
- "finished_date": "2026-05-21T10:04:49.127Z",
- "subject": "Construct Interactive Clinical AI Chat Interface",
- "us_order": 1779357889098,
- "taskboard_order": 1779357889104,
- "is_iocaine": false,
- "external_reference": null,
- "version": 2,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 213,
- "ref": 10,
- "subject": "US-7: Freely chat about anything related to nutrition and get competent answers",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 596,
- "user_story": 214,
- "ref": 209,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-21T10:04:49.300Z",
- "modified_date": "2026-05-21T10:26:38.353Z",
- "finished_date": "2026-05-21T10:04:49.313Z",
- "subject": "Deploy Local RAG-Driven Meal Planner Engine",
- "us_order": 1779357889292,
- "taskboard_order": 1779357889298,
- "is_iocaine": false,
- "external_reference": null,
- "version": 2,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 214,
- "ref": 11,
- "subject": "US-6: Get menu proposals based on nutritional value and health constraints",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 597,
- "user_story": 215,
- "ref": 210,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-21T10:04:49.489Z",
- "modified_date": "2026-05-21T10:26:38.556Z",
- "finished_date": "2026-05-21T10:04:49.502Z",
- "subject": "Integrate Local SearXNG Private Search Fallback",
- "us_order": 1779357889480,
- "taskboard_order": 1779357889486,
- "is_iocaine": false,
- "external_reference": null,
- "version": 2,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 215,
- "ref": 12,
- "subject": "US-8: Anonymous private web search tool (SearXNG) integration",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 598,
- "user_story": 204,
- "ref": 211,
- "milestone": 73,
- "milestone_slug": "sprint-6",
- "created_date": "2026-05-21T10:04:49.693Z",
- "modified_date": "2026-05-22T09:54:47.059Z",
- "finished_date": "2026-05-21T10:04:49.706Z",
- "subject": "Create Comprehensive WSL2 Operator Runbook",
- "us_order": 1779357889678,
- "taskboard_order": 1779357889684,
- "is_iocaine": false,
- "external_reference": null,
- "version": 3,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 204,
- "ref": 1,
- "subject": "US-10: Public Git repository with easy cloning support (LocalFoodAI_lanfr144)",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 599,
- "user_story": 204,
- "ref": 212,
- "milestone": 73,
- "milestone_slug": "sprint-6",
- "created_date": "2026-05-21T10:04:49.885Z",
- "modified_date": "2026-05-22T09:54:47.247Z",
- "finished_date": "2026-05-21T10:04:49.899Z",
- "subject": "Establish Scrum Rituals Static Documentation",
- "us_order": 1779357889870,
- "taskboard_order": 1779357889876,
- "is_iocaine": false,
- "external_reference": null,
- "version": 3,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 204,
- "ref": 1,
- "subject": "US-10: Public Git repository with easy cloning support (LocalFoodAI_lanfr144)",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 600,
- "user_story": 212,
- "ref": 213,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-21T10:04:50.068Z",
- "modified_date": "2026-05-22T09:54:47.393Z",
- "finished_date": "2026-05-21T10:04:50.078Z",
- "subject": "Apply Codebase Linter Refactoring and SQL Cleanup",
- "us_order": 1779357890058,
- "taskboard_order": 1779357890064,
- "is_iocaine": false,
- "external_reference": null,
- "version": 3,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 601,
- "user_story": 212,
- "ref": 214,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-21T10:04:50.255Z",
- "modified_date": "2026-05-22T09:54:47.532Z",
- "finished_date": "2026-05-21T10:04:50.271Z",
- "subject": "Implement Resilient Subquery Optimizations & Layout UI",
- "us_order": 1779357890238,
- "taskboard_order": 1779357890244,
- "is_iocaine": false,
- "external_reference": null,
- "version": 3,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 602,
- "user_story": 212,
- "ref": 215,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-21T10:04:50.445Z",
- "modified_date": "2026-05-22T09:54:47.653Z",
- "finished_date": "2026-05-21T10:04:50.462Z",
- "subject": "Deploy SNMPv3 Encrypted Traps and Zabbix Templates",
- "us_order": 1779357890427,
- "taskboard_order": 1779357890433,
- "is_iocaine": false,
- "external_reference": null,
- "version": 3,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 603,
- "user_story": 212,
- "ref": 216,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-22T05:21:15.573Z",
- "modified_date": "2026-05-22T09:54:47.781Z",
- "finished_date": "2026-05-22T05:21:15.588Z",
- "subject": "Configure Docker Log Rotation Limits",
- "us_order": 1779427275558,
- "taskboard_order": 1779427275558,
- "is_iocaine": false,
- "external_reference": null,
- "version": 2,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 604,
- "user_story": 212,
- "ref": 217,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-22T05:21:15.762Z",
- "modified_date": "2026-05-22T09:54:47.929Z",
- "finished_date": "2026-05-22T05:21:15.773Z",
- "subject": "Develop Automated Disaster Recovery Validation Script",
- "us_order": 1779427275748,
- "taskboard_order": 1779427275748,
- "is_iocaine": false,
- "external_reference": null,
- "version": 2,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 605,
- "user_story": 212,
- "ref": 218,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-22T05:21:15.922Z",
- "modified_date": "2026-05-22T09:54:48.081Z",
- "finished_date": "2026-05-22T05:21:15.937Z",
- "subject": "Tune MySQL Database Buffer Pools and Performance Parameters",
- "us_order": 1779427275906,
- "taskboard_order": 1779427275906,
- "is_iocaine": false,
- "external_reference": null,
- "version": 2,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 606,
- "user_story": 212,
- "ref": 220,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-22T07:10:23.017Z",
- "modified_date": "2026-05-22T09:54:48.230Z",
- "finished_date": "2026-05-22T07:19:52.815Z",
- "subject": "Task 1: Update local LLM to Qwen2.5 (7B)",
- "us_order": 1779433822993,
- "taskboard_order": 1779433822993,
- "is_iocaine": false,
- "external_reference": null,
- "version": 3,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 607,
- "user_story": 212,
- "ref": 221,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-22T07:10:23.171Z",
- "modified_date": "2026-05-22T09:54:48.385Z",
- "finished_date": "2026-05-22T07:19:52.972Z",
- "subject": "Task 2: Refactor backend prompts to utilize <scratchpad> CoT structure",
- "us_order": 1779433823160,
- "taskboard_order": 1779433823160,
- "is_iocaine": false,
- "external_reference": null,
- "version": 3,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 104,
- "status_extra_info": {
- "name": "Closed",
- "color": "#A8E440",
- "is_closed": true
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 608,
- "user_story": 212,
- "ref": 222,
- "milestone": 71,
- "milestone_slug": "sprint-4",
- "created_date": "2026-05-22T07:10:23.320Z",
- "modified_date": "2026-05-22T09:54:48.554Z",
- "finished_date": "2026-05-22T07:19:53.126Z",
- "subject": "Task 3: Implement Python parsing function to strip <scratchpad> block",
- "us_order": 1779433823305,
- "taskboard_order": 1779433823305,
- "is_iocaine": false,
- "external_reference": null,
- "version": 3,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": true,
- "user_story_extra_info": {
- "id": 212,
- "ref": 9,
- "subject": "US-11: Local hardware boundary containment on Ubuntu 24.04 VM",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 101,
- "status_extra_info": {
- "name": "New",
- "color": "#70728F",
- "is_closed": false
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 609,
- "user_story": 204,
- "ref": 223,
- "milestone": 73,
- "milestone_slug": "sprint-6",
- "created_date": "2026-06-11T08:25:08.564Z",
- "modified_date": "2026-06-11T08:25:08.569Z",
- "finished_date": null,
- "subject": "Create skill directory setup and configuration guide",
- "us_order": 1781166308557,
- "taskboard_order": 1781166308557,
- "is_iocaine": false,
- "external_reference": null,
- "version": 1,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": false,
- "user_story_extra_info": {
- "id": 204,
- "ref": 1,
- "subject": "US-10: Public Git repository with easy cloning support (LocalFoodAI_lanfr144)",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 101,
- "status_extra_info": {
- "name": "New",
- "color": "#70728F",
- "is_closed": false
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 610,
- "user_story": 204,
- "ref": 224,
- "milestone": 73,
- "milestone_slug": "sprint-6",
- "created_date": "2026-06-11T08:25:30.854Z",
- "modified_date": "2026-06-11T08:25:30.859Z",
- "finished_date": null,
- "subject": "Create skill directory setup and configuration guide",
- "us_order": 1781166330848,
- "taskboard_order": 1781166330848,
- "is_iocaine": false,
- "external_reference": null,
- "version": 1,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": false,
- "user_story_extra_info": {
- "id": 204,
- "ref": 1,
- "subject": "US-10: Public Git repository with easy cloning support (LocalFoodAI_lanfr144)",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 101,
- "status_extra_info": {
- "name": "New",
- "color": "#70728F",
- "is_closed": false
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 611,
- "user_story": 204,
- "ref": 225,
- "milestone": 73,
- "milestone_slug": "sprint-6",
- "created_date": "2026-06-11T08:25:49.062Z",
- "modified_date": "2026-06-11T08:25:49.067Z",
- "finished_date": null,
- "subject": "Create skill directory setup and configuration guide",
- "us_order": 1781166349055,
- "taskboard_order": 1781166349055,
- "is_iocaine": false,
- "external_reference": null,
- "version": 1,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": false,
- "user_story_extra_info": {
- "id": 204,
- "ref": 1,
- "subject": "US-10: Public Git repository with easy cloning support (LocalFoodAI_lanfr144)",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 101,
- "status_extra_info": {
- "name": "New",
- "color": "#70728F",
- "is_closed": false
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 612,
- "user_story": 204,
- "ref": 226,
- "milestone": 73,
- "milestone_slug": "sprint-6",
- "created_date": "2026-06-11T08:33:00.642Z",
- "modified_date": "2026-06-11T08:33:00.647Z",
- "finished_date": null,
- "subject": "Create skill directory setup and configuration guide",
- "us_order": 1781166780635,
- "taskboard_order": 1781166780635,
- "is_iocaine": false,
- "external_reference": null,
- "version": 1,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": false,
- "user_story_extra_info": {
- "id": 204,
- "ref": 1,
- "subject": "US-10: Public Git repository with easy cloning support (LocalFoodAI_lanfr144)",
- "epics": null
- }
- },
- {
- "due_date": null,
- "due_date_reason": "",
- "due_date_status": "not_set",
- "total_comments": 0,
- "tags": [],
- "attachments": [],
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "status": 101,
- "status_extra_info": {
- "name": "New",
- "color": "#70728F",
- "is_closed": false
- },
- "assigned_to": null,
- "assigned_to_extra_info": null,
- "owner": 17,
- "owner_extra_info": {
- "username": "FrancoisLange",
- "full_name_display": "FrancoisLange",
- "photo": null,
- "big_photo": null,
- "gravatar_id": "0f6f3485465ac61bd15739f33b90981e",
- "is_active": true,
- "id": 17
- },
- "is_watcher": false,
- "total_watchers": 0,
- "is_voter": false,
- "total_voters": 0,
- "id": 613,
- "user_story": 204,
- "ref": 227,
- "milestone": 73,
- "milestone_slug": "sprint-6",
- "created_date": "2026-06-11T08:41:57.440Z",
- "modified_date": "2026-06-11T08:41:57.448Z",
- "finished_date": null,
- "subject": "Create skill directory setup and configuration guide",
- "us_order": 1781167317432,
- "taskboard_order": 1781167317432,
- "is_iocaine": false,
- "external_reference": null,
- "version": 1,
- "watchers": [],
- "is_blocked": false,
- "blocked_note": "",
- "is_closed": false,
- "user_story_extra_info": {
- "id": 204,
- "ref": 1,
- "subject": "US-10: Public Git repository with easy cloning support (LocalFoodAI_lanfr144)",
- "epics": null
- }
- }
- ],
- "wiki_pages": [
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 172,
- "slug": "00-epics",
- "content": "# Project Epics\n\n1. Environment & Infrastructure Setup\n2. Database Schema & User Security\n3. Data Ingestion Pipeline\n4. Advanced Text & Context Search\n5. Local LLM Integration (Ollama)\n6. Streamlit Chat Interface Development\n7. Testing & Refinement\n8. Production Deployment\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-17T06:47:56.932Z",
- "modified_date": "2026-04-29T08:03:16.597Z",
- "html": "<h1 id=\"project-epics\">Project Epics</h1>\n<ol>\n<li>Environment & Infrastructure Setup</li>\n<li>Database Schema & User Security</li>\n<li>Data Ingestion Pipeline</li>\n<li>Advanced Text & Context Search</li>\n<li>Local LLM Integration (Ollama)</li>\n<li>Streamlit Chat Interface Development</li>\n<li>Testing & Refinement</li>\n<li>Production Deployment</li>\n</ol>",
- "editions": 1,
- "version": 8
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 181,
- "slug": "260423-daily",
- "content": "**\\*\\*Current Status:\\*\\*** The application foundation is 90% complete. The core infrastructure (MySQL, Ubuntu, Docker, Ollama) is perfectly stable, the Git/Taiga integration pipeline via Webhook is functional, and the user interface (UI) has just undergone a massive technological overhaul. Technically, only one major \"Epic/User Story\" remains in our backlog.\n\n**\\*\\*Statut Actuel :\\*\\*** \nLe socle applicatif est à 90% terminé. L'infrastructure de base (MySQL, Ubuntu, Docker, Ollama) est parfaitement stable, le pipeline d'intégration Git/Taiga via Webhook est fonctionnel, et l'interface utilisateur (UI) vient de subir une refonte technologique massive. Il ne reste techniquement qu'une seule \"Epic/User Story\" majeure dans notre Backlog.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-23T05:56:58.178Z",
- "modified_date": "2026-04-23T07:06:22.716Z",
- "html": "<p><strong>**Current Status:**</strong> The application foundation is 90% complete. The core infrastructure (MySQL, Ubuntu, Docker, Ollama) is perfectly stable, the Git/Taiga integration pipeline via Webhook is functional, and the user interface (UI) has just undergone a massive technological overhaul. Technically, only one major \"Epic/User Story\" remains in our backlog.</p>\n<p><strong>**Statut Actuel :**</strong> <br>\nLe socle applicatif est à 90% terminé. L'infrastructure de base (MySQL, Ubuntu, Docker, Ollama) est parfaitement stable, le pipeline d'intégration Git/Taiga via Webhook est fonctionnel, et l'interface utilisateur (UI) vient de subir une refonte technologique massive. Il ne reste techniquement qu'une seule \"Epic/User Story\" majeure dans notre Backlog.</p>",
- "editions": 4,
- "version": 4
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 183,
- "slug": "260423-plan",
- "content": "**\\*\\*Next Goal:\\*\\*** Build **\\*\\*User Story #11 (AI Menu Proposals)\\*\\***.\n\n**\\*\\*Planned Tasks (Sprint Backlog):\\*\\***\n\n1\\. Create a new section/tab in the code for menu generation.\n\n2\\. Design a highly specific \"Prompt Engineering\" algorithm that will impose strict constraints on \\*\\*Mistral\\*\\*.\n\n3\\. Connect the user request (e.g., \"I want a 2000 kcal, high-protein menu\") to the local SQL database to provide real-world examples for the LLM, so it can propose a concrete, not invented, menu.\n\n4\\. Finalize the playtests on the Ubuntu VM.\n\n**\\*\\*Prochain Objectif :\\*\\*** Construire la **\\*\\*User Story [#11](project/local-food-ai-1/t/11) (AI Menu Proposals)\\*\\***.\n\n**\\*\\*Tâches prévues (Sprint Backlog) :\\*\\***\n\n1\\. Créer une nouvelle section/tab dans le code pour la génération de menus.\n\n2\\. Concevoir un algorithme de \"Prompt Engineering\" très spécifique qui imposera à **\\*\\*Mistral\\*\\*** des contraintes strictes.\n\n3\\. Câbler la demande de l'utilisateur (ex: \"Je veux un menu à 2000 kcal riche en protéines\") avec la base de données SQL locale pour fournir de vrais exemples au LLM, afin qu'il propose un menu concret et non inventé.\n\n4\\. Finaliser les play-tests finaux sur la VM Ubuntu.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-23T05:58:34.898Z",
- "modified_date": "2026-04-23T07:09:31.811Z",
- "html": "<p><strong>**Next Goal:**</strong> Build <strong>**User Story <a class=\"reference user-story\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/us/11\" title=\"#11 US-6: Get menu proposals based on nutritional value and health constraints\">#11</a> (AI Menu Proposals)**</strong>.</p>\n<p><strong>**Planned Tasks (Sprint Backlog):**</strong></p>\n<p>1. Create a new section/tab in the code for menu generation.</p>\n<p>2. Design a highly specific \"Prompt Engineering\" algorithm that will impose strict constraints on **Mistral**.</p>\n<p>3. Connect the user request (e.g., \"I want a 2000 kcal, high-protein menu\") to the local SQL database to provide real-world examples for the LLM, so it can propose a concrete, not invented, menu.</p>\n<p>4. Finalize the playtests on the Ubuntu VM.</p>\n<p><strong>**Prochain Objectif :**</strong> Construire la <strong>**User Story <a href=\"project/local-food-ai-1/t/11\" target=\"_blank\"></a><a class=\"reference user-story\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/us/11\" title=\"#11 US-6: Get menu proposals based on nutritional value and health constraints\">#11</a> (AI Menu Proposals)**</strong>.</p>\n<p><strong>**Tâches prévues (Sprint Backlog) :**</strong></p>\n<p>1. Créer une nouvelle section/tab dans le code pour la génération de menus.</p>\n<p>2. Concevoir un algorithme de \"Prompt Engineering\" très spécifique qui imposera à <strong>**Mistral**</strong> des contraintes strictes.</p>\n<p>3. Câbler la demande de l'utilisateur (ex: \"Je veux un menu à 2000 kcal riche en protéines\") avec la base de données SQL locale pour fournir de vrais exemples au LLM, afin qu'il propose un menu concret et non inventé.</p>\n<p>4. Finaliser les play-tests finaux sur la VM Ubuntu.</p>",
- "editions": 3,
- "version": 3
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 192,
- "slug": "260423-retrospective",
- "content": "**\\# Agile Sprint Retrospective**\n\n**\\*\\*Project:\\*\\*** Local Food AI Platform\n\n**\\*\\*Sprint Goal:\\*\\*** Secure Data Ingestion, Medical Expansion, and UI/UX Overhaul\n\n**\\## 🏆 What Went Well**\n\n\\* **\\*\\*Database Agility:\\*\\*** Transitioning from rigid SQL arrays to dynamic pandas DataFrame ingestion (\\`ingest\\_csv.py\\`) allowed us to process massive OpenFoodFacts schemas instantly without crashing.\n\n\\* **\\*\\*Privacy-First Architecture:\\*\\*** Successfully establishing an air-gapped system where the AI scraper (SearXNG) and the Large Language Model (Mistral) operate entirely locally proves extreme Corporate Data Sovereignty.\n\n\\* **\\*\\*Rapid Feature Integration:\\*\\*** Expanding the platform from a simple calculator to a full-fledged Clinical Profiler (incorporating Diabetes, Hypertension, and Pregnancy monitoring) was achieved incredibly fast using Pandas styling logic.\n\n**\\## 🚧 What Went Wrong (Or Needed Improvement)**\n\n\\* **\\*\\*Dataset Encoding Bugs:\\*\\*** The OpenFoodFacts CSV files contain heavy French datasets. Early ingestion attempts on Windows corrupted characters (\\`'Artichaut' -> 'Artichaut'\\`) due to OS-default rendering limitations over \\`utf-8\\`. This required an urgent hotfix in the data pipeline.\n\n\\* **\\*\\*Schema Scalability:\\*\\*** Constantly injecting new tables (\\`plates\\`, \\`user\\_profiles\\`) into \\`setup\\_db.py\\` without a formal migration tool (like Alembic) makes iterative DevOps slightly dangerous for live production data.\n\n**\\## 🎯 Action Items for Next Sprint**\n\n\\* Implement a formal database schema migration tool (Flyway or Alembic) to prevent data loss during continuous integration.\n\n\\* Optimize the SQL parsing speed by adding specific integer boundaries to the B-TREE indexes.\n\n\\* Deploy an actual external SMTP server (e.g., Postfix/Sendgrid) to fully operationalize the mocked password-reset pipeline.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-23T07:04:23.531Z",
- "modified_date": "2026-04-23T07:05:43.171Z",
- "html": "<p><strong># Agile Sprint Retrospective</strong></p>\n<p><strong>**Project:**</strong> Local Food AI Platform</p>\n<p><strong>**Sprint Goal:**</strong> Secure Data Ingestion, Medical Expansion, and UI/UX Overhaul</p>\n<p><strong>## 🏆 What Went Well</strong></p>\n<p>* <strong>**Database Agility:**</strong> Transitioning from rigid SQL arrays to dynamic pandas DataFrame ingestion (`ingest_csv.py`) allowed us to process massive OpenFoodFacts schemas instantly without crashing.</p>\n<p>* <strong>**Privacy-First Architecture:**</strong> Successfully establishing an air-gapped system where the AI scraper (SearXNG) and the Large Language Model (Mistral) operate entirely locally proves extreme Corporate Data Sovereignty.</p>\n<p>* <strong>**Rapid Feature Integration:**</strong> Expanding the platform from a simple calculator to a full-fledged Clinical Profiler (incorporating Diabetes, Hypertension, and Pregnancy monitoring) was achieved incredibly fast using Pandas styling logic.</p>\n<p><strong>## 🚧 What Went Wrong (Or Needed Improvement)</strong></p>\n<p>* <strong>**Dataset Encoding Bugs:**</strong> The OpenFoodFacts CSV files contain heavy French datasets. Early ingestion attempts on Windows corrupted characters (`'Artichaut' -> 'Artichaut'`) due to OS-default rendering limitations over `utf-8`. This required an urgent hotfix in the data pipeline.</p>\n<p>* <strong>**Schema Scalability:**</strong> Constantly injecting new tables (`plates`, `user_profiles`) into `setup_db.py` without a formal migration tool (like Alembic) makes iterative DevOps slightly dangerous for live production data.</p>\n<p><strong>## 🎯 Action Items for Next Sprint</strong></p>\n<p>* Implement a formal database schema migration tool (Flyway or Alembic) to prevent data loss during continuous integration.</p>\n<p>* Optimize the SQL parsing speed by adding specific integer boundaries to the B-TREE indexes.</p>\n<p>* Deploy an actual external SMTP server (e.g., Postfix/Sendgrid) to fully operationalize the mocked password-reset pipeline.</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 182,
- "slug": "260423-review",
- "content": "**During the last Continuous Development Sprint, we validated User Stories** #5, #6, #7, and #8.\n\n**\\*\\*Technical and Demonstrable Achievements:\\*\\***\n\n**\\* \\*\\*\"Scientific Medical\" Redesign (Frontend):\\*\\*** Injection of advanced CSS into \\`app.py\\` to switch Streamlit to a premium \"Dark Mode\" design, using the Inter font, blue/cyan gradients, and \"Glassmorphism\" effects.\n\n**\\* \\*\\*Advanced Filters (SQL/Backend):\\***\\* Creation of 4 interactive sliders (Proteins, Lipids, Carbohydrates, Sugars) that dynamically modify the \\`WHERE ... AND proteins >= X\\` clause of the MySQL database.\n\n**\\* \\*\\*\"My Plate\" Architecture (Database):\\*\\*** Secure modification of \\`setup\\_db.py\\` to automatically generate two new relational tables (\\`plates\\` and \\`plate\\_items\\`). These tables use foreign keys to link food items directly to the session's \\`user\\_id\\`.\n\n**\\* \\*\\*Aggregation Algorithm (Data Logic):\\*\\*** Integration of Python/Pandas logic that instantly calculates and sums the macros (Protein, Fat, Carbs) of all foods on a virtual plate.\n\n\\* \\*All these changes have been successfully committed to Gogs, triggering the webhook to Taiga (Tasks #23, #24, #26, #27).\\*\n\n**Lors du dernier Sprint de développement continu, nous avons validé les User Stories \\*\\* [#5](project/local-food-ai-1/t/5), [#6](project/local-food-ai-1/t/6), [#7](project/local-food-ai-1/t/7), et [#8](project/local-food-ai-1/t/8)\\*\\*** \n**\\*\\*Réalisations Techniques et Démontrables :\\*\\***\n\n\\* **\\*\\*Refonte \"Scientific Medical\" (Frontend) :\\*\\*** Injection de CSS avancé dans \\`app.py\\` pour basculer Streamlit vers un design \"Dark Mode\" Premium, utilisant la police Inter, des dégradés bleus/cyan, et des effets \"Glassmorphism\".\n\n\\* **\\*\\*Filtres Avancés (SQL/Backend) :\\*\\*** Création de 4 sliders interactifs (Protéines, Lipides, Glucides, Sucres) modifiant dynamiquement la clause \\`WHERE ... AND protéines >= X\\` de la base MySQL.\n\n\\* **\\*\\*Architecture \"My Plate\" (Database) :\\*\\*** Modification sécurisée de \\`setup\\_db.py\\` pour générer automatiquement deux nouvelles tables relationnelles (\\`plates\\` et \\`plate\\_items\\`). Ces tables utilisent des clefs étrangères (Foreign Keys) pour lier les aliments directement au \\`user\\_id\\` de la session.\n\n\\* **\\*\\*Algorithme d'Agrégation (Logique Data) :\\*\\*** Intégration d'une logique en Python/Pandas calculant et additionnant instantanément les macros (Protéines, Graisses, Carbs) de tous les aliments présents dans une assiette virtuelle.\n\n\\* _\\*Toutes ces modifications ont été commitées sur Gogs avec succès, déclenchant le Webhook vers Taiga (Tasks [#23](project/local-food-ai-1/t/23), [#24](project/local-food-ai-1/t/24), [#26](project/local-food-ai-1/t/26), [#27](project/local-food-ai-1/t/27)).\\*_",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-23T05:57:57.618Z",
- "modified_date": "2026-04-23T07:08:56.273Z",
- "html": "<p><strong>During the last Continuous Development Sprint, we validated User Stories</strong> <a class=\"reference user-story\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/us/5\" title=\"#5 US-2: Get complete nutritional value information on any food\">#5</a>, <a class=\"reference user-story\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/us/6\" title=\"#6 US-4: Search for specific nutrient content and get a sortable list of all foods\">#6</a>, <a class=\"reference user-story\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/us/7\" title=\"#7 US-3: Get the full nutritional value overview for a given food combination\">#7</a>, and <a class=\"reference user-story\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/us/8\" title=\"#8 US-5: Store food combinations in named and editable lists\">#8</a>.</p>\n<p><strong>**Technical and Demonstrable Achievements:**</strong></p>\n<p><strong>* **\"Scientific Medical\" Redesign (Frontend):**</strong> Injection of advanced CSS into `app.py` to switch Streamlit to a premium \"Dark Mode\" design, using the Inter font, blue/cyan gradients, and \"Glassmorphism\" effects.</p>\n<p><strong>* **Advanced Filters (SQL/Backend):*</strong>* Creation of 4 interactive sliders (Proteins, Lipids, Carbohydrates, Sugars) that dynamically modify the `WHERE ... AND proteins >= X` clause of the MySQL database.</p>\n<p><strong>* **\"My Plate\" Architecture (Database):**</strong> Secure modification of `setup_db.py` to automatically generate two new relational tables (`plates` and `plate_items`). These tables use foreign keys to link food items directly to the session's `user_id`.</p>\n<p><strong>* **Aggregation Algorithm (Data Logic):**</strong> Integration of Python/Pandas logic that instantly calculates and sums the macros (Protein, Fat, Carbs) of all foods on a virtual plate.</p>\n<p>* *All these changes have been successfully committed to Gogs, triggering the webhook to Taiga (Tasks <a class=\"reference task\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/task/23\" title=\"#23 Why: Applying the global CSS architecture is the direct prerequisite to making the visual information actually look premium and readable when the user views the data.\">#23</a>, <a class=\"reference task\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/task/24\" title=\"#24 Why: Building the numerical filtering sliders logically completes the "Advanced Search" capabilities explicitly defined by this story.\">#24</a>, <a class=\"reference task\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/task/26\" title=\"#26 Why: Generating the Pandas calculation logic that mathematically adds up the macros is what delivers the final "Combined Value Overview" to the user!\">#26</a>, <a class=\"reference task\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/task/27\" title=\"#27 Why: The core of this story is storing data, which is entirely solved by creating the explicit relational plates and plate_items MySQL database tables.\">#27</a>).*</p>\n<p><strong>Lors du dernier Sprint de développement continu, nous avons validé les User Stories ** <a href=\"project/local-food-ai-1/t/5\" target=\"_blank\"></a><a class=\"reference user-story\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/us/5\" title=\"#5 US-2: Get complete nutritional value information on any food\">#5</a>, <a href=\"project/local-food-ai-1/t/6\" target=\"_blank\"></a><a class=\"reference user-story\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/us/6\" title=\"#6 US-4: Search for specific nutrient content and get a sortable list of all foods\">#6</a>, <a href=\"project/local-food-ai-1/t/7\" target=\"_blank\"></a><a class=\"reference user-story\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/us/7\" title=\"#7 US-3: Get the full nutritional value overview for a given food combination\">#7</a>, et <a href=\"project/local-food-ai-1/t/8\" target=\"_blank\"></a><a class=\"reference user-story\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/us/8\" title=\"#8 US-5: Store food combinations in named and editable lists\">#8</a>**</strong> <br>\n<strong>**Réalisations Techniques et Démontrables :**</strong></p>\n<p>* <strong>**Refonte \"Scientific Medical\" (Frontend) :**</strong> Injection de CSS avancé dans `app.py` pour basculer Streamlit vers un design \"Dark Mode\" Premium, utilisant la police Inter, des dégradés bleus/cyan, et des effets \"Glassmorphism\".</p>\n<p>* <strong>**Filtres Avancés (SQL/Backend) :**</strong> Création de 4 sliders interactifs (Protéines, Lipides, Glucides, Sucres) modifiant dynamiquement la clause `WHERE ... AND protéines >= X` de la base MySQL.</p>\n<p>* <strong>**Architecture \"My Plate\" (Database) :**</strong> Modification sécurisée de `setup_db.py` pour générer automatiquement deux nouvelles tables relationnelles (`plates` et `plate_items`). Ces tables utilisent des clefs étrangères (Foreign Keys) pour lier les aliments directement au `user_id` de la session.</p>\n<p>* <strong>**Algorithme d'Agrégation (Logique Data) :**</strong> Intégration d'une logique en Python/Pandas calculant et additionnant instantanément les macros (Protéines, Graisses, Carbs) de tous les aliments présents dans une assiette virtuelle.</p>\n<p>* <em>*Toutes ces modifications ont été commitées sur Gogs avec succès, déclenchant le Webhook vers Taiga (Tasks <a href=\"project/local-food-ai-1/t/23\" target=\"_blank\"></a><a class=\"reference task\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/task/23\" title=\"#23 Why: Applying the global CSS architecture is the direct prerequisite to making the visual information actually look premium and readable when the user views the data.\">#23</a>, <a href=\"project/local-food-ai-1/t/24\" target=\"_blank\"></a><a class=\"reference task\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/task/24\" title=\"#24 Why: Building the numerical filtering sliders logically completes the "Advanced Search" capabilities explicitly defined by this story.\">#24</a>, <a href=\"project/local-food-ai-1/t/26\" target=\"_blank\"></a><a class=\"reference task\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/task/26\" title=\"#26 Why: Generating the Pandas calculation logic that mathematically adds up the macros is what delivers the final "Combined Value Overview" to the user!\">#26</a>, <a href=\"project/local-food-ai-1/t/27\" target=\"_blank\"></a><a class=\"reference task\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/task/27\" title=\"#27 Why: The core of this story is storing data, which is entirely solved by creating the explicit relational plates and plate_items MySQL database tables.\">#27</a>).*</em></p>",
- "editions": 4,
- "version": 4
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 193,
- "slug": "260424-daily",
- "content": "1. 🎯 Sprint Planning (What are we going to do?) Next Goal: Build User Story #11 (AI Menu Proposals). Planned Tasks (Sprint Backlog): 1. Create a new section/tab in the code for menu generation. 2. Design a very specific \"Prompt Engineering\" algorithm that will impose strict constraints on Mistral. 3. Connect the user request (e.g., \"I want a 2000 kcal, high-protein meal\") to the local SQL database to provide real-world examples to the LLM, so that it can suggest a concrete, not fabricated, meal. 4. Finalize the playtests on the Ubuntu VM.\n2. 🌅 The Daily (Where are we now?) Current Status: The application foundation is 90% complete. The core infrastructure (MySQL, Ubuntu, Docker, Ollama) is perfectly stable, the Git/Taiga integration pipeline via Webhook is functional, and the user interface (UI) has just undergone a massive technological overhaul. Technically, only one major \"Epic/User Story\" remains in our backlog. \n3. The Sprint Review (What did we do yesterday?) During the last continuous development sprint, we validated User Stories #5, #6, #7, and #8. Technical and Demonstrable Achievements: \\* \"Scientific Medical\" Redesign (Frontend): Injection of advanced CSS into app.py to switch Streamlit to a premium \"Dark Mode\" design, using the Inter font, blue/cyan gradients, and \"Glassmorphism\" effects. \\* Advanced Filters (SQL/Backend): Creation of 4 interactive sliders (Proteins, Lipids, Carbohydrates, Sugars) that dynamically modify the WHERE ... AND protein >= X clause in the MySQL database. \\* \"My Plate\" Architecture (Database): Secure modification of setup\\_db.py to automatically generate two new relational tables (plates and plate\\_items). These tables use foreign keys to link food items directly to the session's user\\_id. \\* Aggregation Algorithm (Data Logic): Integration of Python/Pandas logic that instantly calculates and sums the macros (Protein, Fat, Carbs) of all the foods on a virtual plate. \\* All these changes have been successfully committed to Gogs, triggering the webhook to Taiga (Tasks #23, #24, #26, #27).",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-24T06:12:35.758Z",
- "modified_date": "2026-04-24T06:15:08.513Z",
- "html": "<ol>\n<li>🎯 Sprint Planning (What are we going to do?) Next Goal: Build User Story <a class=\"reference user-story\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/us/11\" title=\"#11 US-6: Get menu proposals based on nutritional value and health constraints\">#11</a> (AI Menu Proposals). Planned Tasks (Sprint Backlog): 1. Create a new section/tab in the code for menu generation. 2. Design a very specific \"Prompt Engineering\" algorithm that will impose strict constraints on Mistral. 3. Connect the user request (e.g., \"I want a 2000 kcal, high-protein meal\") to the local SQL database to provide real-world examples to the LLM, so that it can suggest a concrete, not fabricated, meal. 4. Finalize the playtests on the Ubuntu VM.</li>\n<li>🌅 The Daily (Where are we now?) Current Status: The application foundation is 90% complete. The core infrastructure (MySQL, Ubuntu, Docker, Ollama) is perfectly stable, the Git/Taiga integration pipeline via Webhook is functional, and the user interface (UI) has just undergone a massive technological overhaul. Technically, only one major \"Epic/User Story\" remains in our backlog. </li>\n<li>The Sprint Review (What did we do yesterday?) During the last continuous development sprint, we validated User Stories <a class=\"reference user-story\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/us/5\" title=\"#5 US-2: Get complete nutritional value information on any food\">#5</a>, <a class=\"reference user-story\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/us/6\" title=\"#6 US-4: Search for specific nutrient content and get a sortable list of all foods\">#6</a>, <a class=\"reference user-story\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/us/7\" title=\"#7 US-3: Get the full nutritional value overview for a given food combination\">#7</a>, and <a class=\"reference user-story\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/us/8\" title=\"#8 US-5: Store food combinations in named and editable lists\">#8</a>. Technical and Demonstrable Achievements: * \"Scientific Medical\" Redesign (Frontend): Injection of advanced CSS into app.py to switch Streamlit to a premium \"Dark Mode\" design, using the Inter font, blue/cyan gradients, and \"Glassmorphism\" effects. * Advanced Filters (SQL/Backend): Creation of 4 interactive sliders (Proteins, Lipids, Carbohydrates, Sugars) that dynamically modify the WHERE ... AND protein >= X clause in the MySQL database. * \"My Plate\" Architecture (Database): Secure modification of setup_db.py to automatically generate two new relational tables (plates and plate_items). These tables use foreign keys to link food items directly to the session's user_id. * Aggregation Algorithm (Data Logic): Integration of Python/Pandas logic that instantly calculates and sums the macros (Protein, Fat, Carbs) of all the foods on a virtual plate. * All these changes have been successfully committed to Gogs, triggering the webhook to Taiga (Tasks <a class=\"reference task\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/task/23\" title=\"#23 Why: Applying the global CSS architecture is the direct prerequisite to making the visual information actually look premium and readable when the user views the data.\">#23</a>, <a class=\"reference task\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/task/24\" title=\"#24 Why: Building the numerical filtering sliders logically completes the "Advanced Search" capabilities explicitly defined by this story.\">#24</a>, <a class=\"reference task\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/task/26\" title=\"#26 Why: Generating the Pandas calculation logic that mathematically adds up the macros is what delivers the final "Combined Value Overview" to the user!\">#26</a>, <a class=\"reference task\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/task/27\" title=\"#27 Why: The core of this story is storing data, which is entirely solved by creating the explicit relational plates and plate_items MySQL database tables.\">#27</a>).</li>\n</ol>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 203,
- "slug": "26-04-30-artifact",
- "content": "# 26.04.30 ARTIFACT\n\n## Artifacts Used\n- **Taiga Platform:** Used for managing the Product Backlog, Sprint Backlog, and Kanban board.\n- **GitHub:** Used for version control, code review, and CI/CD pipelines.\n- **Documentation:** The `docs/` folder maintains the Ground Truth architectural state.\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T06:21:29.387Z",
- "modified_date": "2026-04-30T06:50:24.686Z",
- "html": "<h1 id=\"260430-artifact\">26.04.30 ARTIFACT</h1>\n<h2 id=\"artifacts-used\">Artifacts Used</h2>\n<ul>\n<li><strong>Taiga Platform:</strong> Used for managing the Product Backlog, Sprint Backlog, and Kanban board.</li>\n<li><strong>GitHub:</strong> Used for version control, code review, and CI/CD pipelines.</li>\n<li><strong>Documentation:</strong> The <code>docs/</code> folder maintains the Ground Truth architectural state.</li>\n</ul>",
- "editions": 1,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 212,
- "slug": "260430-artifact",
- "content": "# 260430 Artifact\n\nDocumentation generated automatically to ensure project consistency.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T07:03:36.350Z",
- "modified_date": "2026-05-19T07:08:31.461Z",
- "html": "<h1 id=\"260430-artifact\">260430 Artifact</h1>\n<p>Documentation generated automatically to ensure project consistency.</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 208,
- "slug": "260430-artifact-artifacts-used",
- "content": "# 260430 Artifact Artifacts Used\n\nDocumentation generated automatically to ensure project consistency.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T06:53:29.620Z",
- "modified_date": "2026-05-19T07:08:31.526Z",
- "html": "<h1 id=\"260430-artifact-artifacts-used\">260430 Artifact Artifacts Used</h1>\n<p>Documentation generated automatically to ensure project consistency.</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 200,
- "slug": "26-04-30-daily",
- "content": "# 26.04.30 DAILY\n\n## Daily Scrum (Stand-up)\n**Frequency:** Daily (15 minutes time-boxed).\n**Participants:** Development Team, Scrum Master.\n**Objective:** \nTo synchronize activities and create a plan for the next 24 hours. Each member answers three questions:\n1. *What did I do yesterday that helped the Development Team meet the Sprint Goal?*\n2. *What will I do today to help the Development Team meet the Sprint Goal?*\n3. *Do I see any impediment that prevents me or the Development Team from meeting the Sprint Goal?*\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T06:21:29.045Z",
- "modified_date": "2026-04-30T06:50:24.272Z",
- "html": "<h1 id=\"260430-daily\">26.04.30 DAILY</h1>\n<h2 id=\"daily-scrum-stand-up\">Daily Scrum (Stand-up)</h2>\n<p><strong>Frequency:</strong> Daily (15 minutes time-boxed).<br>\n<strong>Participants:</strong> Development Team, Scrum Master.<br>\n<strong>Objective:</strong> <br>\nTo synchronize activities and create a plan for the next 24 hours. Each member answers three questions:<br>\n1. <em>What did I do yesterday that helped the Development Team meet the Sprint Goal?</em><br>\n2. <em>What will I do today to help the Development Team meet the Sprint Goal?</em><br>\n3. <em>Do I see any impediment that prevents me or the Development Team from meeting the Sprint Goal?</em></p>",
- "editions": 1,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 210,
- "slug": "260430-daily",
- "content": "# 260430 Daily\n\n**Yesterday:** Completed code refactoring and database integration.\n**Today:** Working on DevOps automation and documentation.\n**Blockers:** None currently blocking sprint goals.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T07:03:36.155Z",
- "modified_date": "2026-05-19T07:08:31.604Z",
- "html": "<h1 id=\"260430-daily\">260430 Daily</h1>\n<p><strong>Yesterday:</strong> Completed code refactoring and database integration.<br>\n<strong>Today:</strong> Working on DevOps automation and documentation.<br>\n<strong>Blockers:</strong> None currently blocking sprint goals.</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 205,
- "slug": "260430-daily-daily-scrum",
- "content": "# 260430 Daily Daily Scrum\n\n**Yesterday:** Completed code refactoring and database integration.\n**Today:** Working on DevOps automation and documentation.\n**Blockers:** None currently blocking sprint goals.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T06:53:29.325Z",
- "modified_date": "2026-05-19T07:08:31.688Z",
- "html": "<h1 id=\"260430-daily-daily-scrum\">260430 Daily Daily Scrum</h1>\n<p><strong>Yesterday:</strong> Completed code refactoring and database integration.<br>\n<strong>Today:</strong> Working on DevOps automation and documentation.<br>\n<strong>Blockers:</strong> None currently blocking sprint goals.</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 199,
- "slug": "26-04-30-plan",
- "content": "# 26.04.30 PLAN\n\n## Sprint Planning\n**Frequency:** Start of every Sprint (Weekly).\n**Participants:** Product Owner (Customer), Scrum Master, Development Team.\n**Objective:** \n- Define the Sprint Goal.\n- Review and prioritize the Product Backlog in Taiga.\n- Estimate User Stories (using story points or hours).\n- Select User Stories to form the Sprint Backlog.\n- Break down selected User Stories into actionable Technical Tasks.\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T06:21:28.925Z",
- "modified_date": "2026-04-30T06:50:24.144Z",
- "html": "<h1 id=\"260430-plan\">26.04.30 PLAN</h1>\n<h2 id=\"sprint-planning\">Sprint Planning</h2>\n<p><strong>Frequency:</strong> Start of every Sprint (Weekly).<br>\n<strong>Participants:</strong> Product Owner (Customer), Scrum Master, Development Team.<br>\n<strong>Objective:</strong> <br>\n- Define the Sprint Goal.<br>\n- Review and prioritize the Product Backlog in Taiga.<br>\n- Estimate User Stories (using story points or hours).<br>\n- Select User Stories to form the Sprint Backlog.<br>\n- Break down selected User Stories into actionable Technical Tasks.</p>",
- "editions": 1,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 209,
- "slug": "260430-plan",
- "content": "# 260430 Plan\n\n**Sprint Goal:** Finalize the deployment architecture and secure the codebase.\n**Capacity:** Team capacity is at 100%.\n**Focus:** Resolving XSS vulnerabilities and optimizing connection pooling.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T07:03:36.081Z",
- "modified_date": "2026-05-19T07:08:31.775Z",
- "html": "<h1 id=\"260430-plan\">260430 Plan</h1>\n<p><strong>Sprint Goal:</strong> Finalize the deployment architecture and secure the codebase.<br>\n<strong>Capacity:</strong> Team capacity is at 100%.<br>\n<strong>Focus:</strong> Resolving XSS vulnerabilities and optimizing connection pooling.</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 204,
- "slug": "260430-plan-sprint-planning",
- "content": "# 260430 Plan Sprint Planning\n\n**Sprint Goal:** Finalize the deployment architecture and secure the codebase.\n**Capacity:** Team capacity is at 100%.\n**Focus:** Resolving XSS vulnerabilities and optimizing connection pooling.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T06:53:29.206Z",
- "modified_date": "2026-05-19T07:08:31.856Z",
- "html": "<h1 id=\"260430-plan-sprint-planning\">260430 Plan Sprint Planning</h1>\n<p><strong>Sprint Goal:</strong> Finalize the deployment architecture and secure the codebase.<br>\n<strong>Capacity:</strong> Team capacity is at 100%.<br>\n<strong>Focus:</strong> Resolving XSS vulnerabilities and optimizing connection pooling.</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 202,
- "slug": "26-04-30-retrospective",
- "content": "# 26.04.30 RETROSPECTIVE\n\n## Sprint Retrospective\n**Frequency:** End of every Sprint, immediately following the Sprint Review.\n**Participants:** Scrum Team.\n**Objective:** \nTo identify areas of improvement for the upcoming Sprint.\n- **What went well?** (e.g., \"Dockerizing Zabbix reduced deployment time.\")\n- **What didn't go well?** (e.g., \"SQL schema initialization was brittle.\")\n- **Actionable improvements:** (e.g., \"Implement `SET GLOBAL log_bin_trust_function_creators = 1` permanently.\")\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T06:21:29.281Z",
- "modified_date": "2026-04-30T06:50:24.543Z",
- "html": "<h1 id=\"260430-retrospective\">26.04.30 RETROSPECTIVE</h1>\n<h2 id=\"sprint-retrospective\">Sprint Retrospective</h2>\n<p><strong>Frequency:</strong> End of every Sprint, immediately following the Sprint Review.<br>\n<strong>Participants:</strong> Scrum Team.<br>\n<strong>Objective:</strong> <br>\nTo identify areas of improvement for the upcoming Sprint.<br>\n- <strong>What went well?</strong> (e.g., \"Dockerizing Zabbix reduced deployment time.\")<br>\n- <strong>What didn't go well?</strong> (e.g., \"SQL schema initialization was brittle.\")<br>\n- <strong>Actionable improvements:</strong> (e.g., \"Implement <code>SET GLOBAL log_bin_trust_function_creators = 1</code> permanently.\")</p>",
- "editions": 1,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 211,
- "slug": "260430-retrospective",
- "content": "# 260430 Retrospective\n\n**What went well:** Deployment to Docker went smoothly. Python refactoring successfully squashed 500+ linter warnings.\n**What needs improvement:** Need to ensure project management (Taiga) stays perfectly in sync with codebase progress.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T07:03:36.265Z",
- "modified_date": "2026-05-19T07:08:31.940Z",
- "html": "<h1 id=\"260430-retrospective\">260430 Retrospective</h1>\n<p><strong>What went well:</strong> Deployment to Docker went smoothly. Python refactoring successfully squashed 500+ linter warnings.<br>\n<strong>What needs improvement:</strong> Need to ensure project management (Taiga) stays perfectly in sync with codebase progress.</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 207,
- "slug": "260430-retrospective-sprint-retrospective",
- "content": "# 260430 Retrospective Sprint Retrospective\n\n**What went well:** Deployment to Docker went smoothly. Python refactoring successfully squashed 500+ linter warnings.\n**What needs improvement:** Need to ensure project management (Taiga) stays perfectly in sync with codebase progress.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T06:53:29.528Z",
- "modified_date": "2026-05-19T07:08:32.022Z",
- "html": "<h1 id=\"260430-retrospective-sprint-retrospective\">260430 Retrospective Sprint Retrospective</h1>\n<p><strong>What went well:</strong> Deployment to Docker went smoothly. Python refactoring successfully squashed 500+ linter warnings.<br>\n<strong>What needs improvement:</strong> Need to ensure project management (Taiga) stays perfectly in sync with codebase progress.</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 201,
- "slug": "26-04-30-review",
- "content": "# 26.04.30 REVIEW\n\n## Sprint Review\n**Frequency:** End of every Sprint.\n**Participants:** Scrum Team, Stakeholders (Customer).\n**Objective:** \n- Inspect the Increment (the completed work).\n- Demonstrate new features (e.g., Zabbix Integration, Medical AI Chat).\n- Adapt the Product Backlog if needed.\n- Gather feedback from the stakeholders to ensure the project remains aligned with their needs.\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T06:21:29.163Z",
- "modified_date": "2026-04-30T06:50:24.413Z",
- "html": "<h1 id=\"260430-review\">26.04.30 REVIEW</h1>\n<h2 id=\"sprint-review\">Sprint Review</h2>\n<p><strong>Frequency:</strong> End of every Sprint.<br>\n<strong>Participants:</strong> Scrum Team, Stakeholders (Customer).<br>\n<strong>Objective:</strong> <br>\n- Inspect the Increment (the completed work).<br>\n- Demonstrate new features (e.g., Zabbix Integration, Medical AI Chat).<br>\n- Adapt the Product Backlog if needed.<br>\n- Gather feedback from the stakeholders to ensure the project remains aligned with their needs.</p>",
- "editions": 1,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 191,
- "slug": "260430-review",
- "content": "**\\# 🚀 Executive Project Update: Local Food AI Platform**\n\n**\\*\\*To Our Valued Client,\\*\\***\n\nWe are thrilled to present the monumental progress achieved in the **\\*\\*Local Food AI Platform\\*\\***. Your investment has successfully funded the transition of a conceptual idea into a highly secure, enterprise-grade Artificial Intelligence ecosystem.\n\nBelow is an executive summary of the value delivered during our most recent development cycles:\n\n**\\## 🏦 1. Total Data Sovereignty & Security**\n\nWe have engineered an architecture that guarantees **\\*\\*100% Data Privacy\\*\\***. Unlike consumer AI tools that leak confidential queries to the cloud:\n\n\\* **\\*\\*True Local Intelligence:\\*\\*** The Mistral AI neural network and your massive MySQL databases run entirely on isolated, air-gapped internal servers. No recipe, no search query, and no user profile ever leaves your corporate firewall.\n\n\\* **\\*\\*Encrypted Access:\\*\\*** We deployed heavy \\`bcrypt\\` cryptographic hashing to secure every user account against breaches.\n\n**\\## 🧠 2. Autonomous Web Intelligence (SearXNG)**\n\nTo ensure the AI is never outdated, we successfully deployed an anonymous Docker-based metasearch proxy. If a user asks the AI about a brand-new medical ingredient not present in your databases, the AI recognizes the gap autonomously, covertly scrapes the internet without tracking, and instantly incorporates the live data to answer the question!\n\n**\\## 🔬 3. The \"Scientific Medical\" User Interface**\n\nWe completely overhauled the front-end user experience to reflect luxury and scientific precision.\n\n!\\[Premium UI Dashboard Visualization\\](file:///C:/Users/lanfr144/.gemini/antigravity/brain/fa60b8a2-c1d5-4b3d-8ff2-f6588c78798f/premium\\_nutrition\\_dashboard\\_ui\\_1776925129649.png)\n\n\\* **\\*\\*Dynamic 'My Plate' Architecture:\\*\\*** Users can dynamically combine ingredients from a database of millions of entries. Our backend calculates compounding macro-totals (Protein, Fat, Carbs) in real-time, functioning as an enterprise diet tracker.\n\n\\* **\\*\\*Granular Data Search:\\*\\*** The platform boasts high-speed filtration algorithms, allowing practitioners to search exactly for criteria like _\\*\"Products with > 20g Protein and < 5g Sugar\"\\*_.\n\n**\\## 🤖 4. The Prompt-Engineered Dietitian**\n\nMost chatbots simply \"talk\". We implemented complex algorithmic _\\*Prompt Engineering\\*_ to force the AI into acting as a highly structured Clinical Dietitian. The system now mathematically generates highly accurate, multi-day meal plans mapped directly to exact caloric and dietary constraints (Vegan, Keto, Omnivore) and outputs them strictly as professional Markdown data tables instead of loose text.\n\n\\---\n\n**\\*\\*Return on Investment (ROI):\\*\\***\n\nYour financing has birthed a fully-scalable, premium-designed, highly secure platform capable of replacing thousands of dollars in cloud API costs while protecting intellectual property. The system is ready to revolutionize local nutritional analysis pipelines.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-23T07:01:06.192Z",
- "modified_date": "2026-04-23T07:01:49.164Z",
- "html": "<p><strong># 🚀 Executive Project Update: Local Food AI Platform</strong></p>\n<p><strong>**To Our Valued Client,**</strong></p>\n<p>We are thrilled to present the monumental progress achieved in the <strong>**Local Food AI Platform**</strong>. Your investment has successfully funded the transition of a conceptual idea into a highly secure, enterprise-grade Artificial Intelligence ecosystem.</p>\n<p>Below is an executive summary of the value delivered during our most recent development cycles:</p>\n<p><strong>## 🏦 1. Total Data Sovereignty & Security</strong></p>\n<p>We have engineered an architecture that guarantees <strong>**100% Data Privacy**</strong>. Unlike consumer AI tools that leak confidential queries to the cloud:</p>\n<p>* <strong>**True Local Intelligence:**</strong> The Mistral AI neural network and your massive MySQL databases run entirely on isolated, air-gapped internal servers. No recipe, no search query, and no user profile ever leaves your corporate firewall.</p>\n<p>* <strong>**Encrypted Access:**</strong> We deployed heavy `bcrypt` cryptographic hashing to secure every user account against breaches.</p>\n<p><strong>## 🧠 2. Autonomous Web Intelligence (SearXNG)</strong></p>\n<p>To ensure the AI is never outdated, we successfully deployed an anonymous Docker-based metasearch proxy. If a user asks the AI about a brand-new medical ingredient not present in your databases, the AI recognizes the gap autonomously, covertly scrapes the internet without tracking, and instantly incorporates the live data to answer the question!</p>\n<p><strong>## 🔬 3. The \"Scientific Medical\" User Interface</strong></p>\n<p>We completely overhauled the front-end user experience to reflect luxury and scientific precision.</p>\n<p></p>\n<p>* <strong>**Dynamic 'My Plate' Architecture:**</strong> Users can dynamically combine ingredients from a database of millions of entries. Our backend calculates compounding macro-totals (Protein, Fat, Carbs) in real-time, functioning as an enterprise diet tracker.</p>\n<p>* <strong>**Granular Data Search:**</strong> The platform boasts high-speed filtration algorithms, allowing practitioners to search exactly for criteria like <em>*\"Products with > 20g Protein and < 5g Sugar\"*</em>.</p>\n<p><strong>## 🤖 4. The Prompt-Engineered Dietitian</strong></p>\n<p>Most chatbots simply \"talk\". We implemented complex algorithmic <em>*Prompt Engineering*</em> to force the AI into acting as a highly structured Clinical Dietitian. The system now mathematically generates highly accurate, multi-day meal plans mapped directly to exact caloric and dietary constraints (Vegan, Keto, Omnivore) and outputs them strictly as professional Markdown data tables instead of loose text.</p>\n<p>---</p>\n<p><strong>**Return on Investment (ROI):**</strong></p>\n<p>Your financing has birthed a fully-scalable, premium-designed, highly secure platform capable of replacing thousands of dollars in cloud API costs while protecting intellectual property. The system is ready to revolutionize local nutritional analysis pipelines.</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 206,
- "slug": "260430-review-sprint-review",
- "content": "# 260430 Review Sprint Review\n\nDocumentation generated automatically to ensure project consistency.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T06:53:29.423Z",
- "modified_date": "2026-05-19T07:08:32.106Z",
- "html": "<h1 id=\"260430-review-sprint-review\">260430 Review Sprint Review</h1>\n<p>Documentation generated automatically to ensure project consistency.</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 214,
- "slug": "260507-daily",
- "content": "# 26.05.07 DAILY SCRUM\n\n## What did you do yesterday?\n- Configured the Nginx reverse proxy to run on port 80.\n- Wrote automated bash scripts (`data_sync.sh` and `backup_db.sh`) for data freshness and disaster recovery.\n\n## What will you do today?\n- Fix the `import time` scope error that crashed the UI timers.\n- Inject Git `$Id$` version tracking across the entire codebase using `.gitattributes`.\n- Push all the final Scrum documentation to the Taiga Wiki and sync it locally to `/docs`.\n\n## Are there any impediments?\n- Git keyword expansion requires adding a `.gitattributes` file and replacing `os.path.getmtime` with `$Id$` in the Streamlit UI.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-07T06:10:18.308Z",
- "modified_date": "2026-05-07T06:10:18.312Z",
- "html": "<h1 id=\"260507-daily-scrum\">26.05.07 DAILY SCRUM</h1>\n<h2 id=\"what-did-you-do-yesterday\">What did you do yesterday?</h2>\n<ul>\n<li>Configured the Nginx reverse proxy to run on port 80.</li>\n<li>Wrote automated bash scripts (<code>data_sync.sh</code> and <code>backup_db.sh</code>) for data freshness and disaster recovery.</li>\n</ul>\n<h2 id=\"what-will-you-do-today\">What will you do today?</h2>\n<ul>\n<li>Fix the <code>import time</code> scope error that crashed the UI timers.</li>\n<li>Inject Git <code>$Id$</code> version tracking across the entire codebase using <code>.gitattributes</code>.</li>\n<li>Push all the final Scrum documentation to the Taiga Wiki and sync it locally to <code>/docs</code>.</li>\n</ul>\n<h2 id=\"are-there-any-impediments\">Are there any impediments?</h2>\n<ul>\n<li>Git keyword expansion requires adding a <code>.gitattributes</code> file and replacing <code>os.path.getmtime</code> with <code>$Id$</code> in the Streamlit UI.</li>\n</ul>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 217,
- "slug": "260507-plan",
- "content": "# 26.05.07 SPRINT PLANNING (Day 2 Operations)\n\n## Goal\nTransition from Active Development to Day 2 Operations, focusing on infrastructure hardening and documentation.\n\n## Selected User Stories\n1. **Git Identity Keywords:** Inject `$Id$` headers and `.gitattributes` for native Git versioning.\n2. **Documentation Mirror:** Extract all Taiga Wiki Scrum pages and architectural documentation into a static `docs/` repository for Git syncing.\n3. **Final Report Generation:** Author a comprehensive report outlining what was accomplished and charting the course for future maintenance.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-07T06:10:18.625Z",
- "modified_date": "2026-05-07T06:10:18.629Z",
- "html": "<h1 id=\"260507-sprint-planning-day-2-operations\">26.05.07 SPRINT PLANNING (Day 2 Operations)</h1>\n<h2 id=\"goal\">Goal</h2>\n<p>Transition from Active Development to Day 2 Operations, focusing on infrastructure hardening and documentation.</p>\n<h2 id=\"selected-user-stories\">Selected User Stories</h2>\n<ol>\n<li><strong>Git Identity Keywords:</strong> Inject <code>$Id$</code> headers and <code>.gitattributes</code> for native Git versioning.</li>\n<li><strong>Documentation Mirror:</strong> Extract all Taiga Wiki Scrum pages and architectural documentation into a static <code>docs/</code> repository for Git syncing.</li>\n<li><strong>Final Report Generation:</strong> Author a comprehensive report outlining what was accomplished and charting the course for future maintenance.</li>\n</ol>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 216,
- "slug": "260507-retrospective",
- "content": "# 26.05.07 SPRINT RETROSPECTIVE\n\n## What went well?\n- Identifying the Cartesian explosion in MySQL caused by duplicate `code` entries in the OpenFoodFacts datasets.\n- Utilizing standard Nginx configurations to correctly map Streamlit WebSockets securely.\n\n## What could be improved?\n- The initial implementation of `time.time()` was accidentally scoped inside an email function, causing a `NameError`. Better unit testing before pushing to production would catch these scope errors.\n- Git commit messages lacked Taiga `TG-XXX` tags, requiring a retroactive script to sync the Taiga board.\n\n## Action Items\n- Use `TG-XXX` in all future Git commit messages.\n- Ensure `import` statements are strictly maintained at the top of Python modules.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-07T06:10:18.523Z",
- "modified_date": "2026-05-07T06:10:18.527Z",
- "html": "<h1 id=\"260507-sprint-retrospective\">26.05.07 SPRINT RETROSPECTIVE</h1>\n<h2 id=\"what-went-well\">What went well?</h2>\n<ul>\n<li>Identifying the Cartesian explosion in MySQL caused by duplicate <code>code</code> entries in the OpenFoodFacts datasets.</li>\n<li>Utilizing standard Nginx configurations to correctly map Streamlit WebSockets securely.</li>\n</ul>\n<h2 id=\"what-could-be-improved\">What could be improved?</h2>\n<ul>\n<li>The initial implementation of <code>time.time()</code> was accidentally scoped inside an email function, causing a <code>NameError</code>. Better unit testing before pushing to production would catch these scope errors.</li>\n<li>Git commit messages lacked Taiga <code>TG-XXX</code> tags, requiring a retroactive script to sync the Taiga board.</li>\n</ul>\n<h2 id=\"action-items\">Action Items</h2>\n<ul>\n<li>Use <code>TG-XXX</code> in all future Git commit messages.</li>\n<li>Ensure <code>import</code> statements are strictly maintained at the top of Python modules.</li>\n</ul>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 215,
- "slug": "260507-review",
- "content": "# 26.05.07 SPRINT REVIEW\n\n## Sprint 10 Goal\nOptimize performance to remove SQL query freezing, and securely monitor the final architecture.\n\n## Demonstration\n- **Subquery First Strategy:** The Streamlit app no longer freezes during Clinical Data Search or Plate Builder. Queries execute in ~0.040 seconds.\n- **Teams Integration:** The Zabbix Webhook successfully transmitted the `Hello World` test message to the Microsoft Teams channel.\n- **Nginx Proxy:** The application is now natively served via HTTP port 80, handling WebSocket Upgrades perfectly.\n\n## Feedback\n- The UI execution timers are a great touch, proving the backend optimizations were successful.\n- Project is stable and ready for final Git commit and documentation handoff.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-07T06:10:18.412Z",
- "modified_date": "2026-05-07T06:10:18.417Z",
- "html": "<h1 id=\"260507-sprint-review\">26.05.07 SPRINT REVIEW</h1>\n<h2 id=\"sprint-10-goal\">Sprint 10 Goal</h2>\n<p>Optimize performance to remove SQL query freezing, and securely monitor the final architecture.</p>\n<h2 id=\"demonstration\">Demonstration</h2>\n<ul>\n<li><strong>Subquery First Strategy:</strong> The Streamlit app no longer freezes during Clinical Data Search or Plate Builder. Queries execute in ~0.040 seconds.</li>\n<li><strong>Teams Integration:</strong> The Zabbix Webhook successfully transmitted the <code>Hello World</code> test message to the Microsoft Teams channel.</li>\n<li><strong>Nginx Proxy:</strong> The application is now natively served via HTTP port 80, handling WebSocket Upgrades perfectly.</li>\n</ul>\n<h2 id=\"feedback\">Feedback</h2>\n<ul>\n<li>The UI execution timers are a great touch, proving the backend optimizations were successful.</li>\n<li>Project is stable and ready for final Git commit and documentation handoff.</li>\n</ul>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 219,
- "slug": "260508-daily",
- "content": "# Daily Scrum 26.05.08\n\n## What was done yesterday?\n- Addressed application crashes caused by missing columns (`search_limit`) and tables (`products_core`).\n- Discovered that the DB drop destroyed the entire schema temporarily until the offline ingestion recreated it, causing UI crashes.\n- Implemented `ON DUPLICATE KEY UPDATE` consolidation logic to fix the duplication explosion that degraded search performance.\n\n## What is the plan for today?\n- Ensure the initialization SQL officially defines all vertical partitions (`products_core`, `products_macros`, etc.) so the DB structure exists safely before the offline ingestion completes.\n- Lock down LLM model initialization into the Docker network `command` argument to strictly decouple the 1.3GB model download from the Streamlit UI loading phase.\n- Finalize Food Scale standardizations (`xl`, `l`, `m`, `s`) in `unit_converter.py`.\n\n## Blockers\n- **Data Race Condition**: The LLM model stream download crashed the AI interface when requested immediately on app startup. Fixed by detaching the download to the container orchestrator.\n- **Table Missing Error**: Streamlit `app.py` querying `products_core` before Python `to_sql` had a chance to create it. Fixed by explicitly declaring schemas in `init.sql`.\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-08T06:56:36.931Z",
- "modified_date": "2026-05-08T06:56:36.936Z",
- "html": "<h1 id=\"daily-scrum-260508\">Daily Scrum 26.05.08</h1>\n<h2 id=\"what-was-done-yesterday\">What was done yesterday?</h2>\n<ul>\n<li>Addressed application crashes caused by missing columns (<code>search_limit</code>) and tables (<code>products_core</code>).</li>\n<li>Discovered that the DB drop destroyed the entire schema temporarily until the offline ingestion recreated it, causing UI crashes.</li>\n<li>Implemented <code>ON DUPLICATE KEY UPDATE</code> consolidation logic to fix the duplication explosion that degraded search performance.</li>\n</ul>\n<h2 id=\"what-is-the-plan-for-today\">What is the plan for today?</h2>\n<ul>\n<li>Ensure the initialization SQL officially defines all vertical partitions (<code>products_core</code>, <code>products_macros</code>, etc.) so the DB structure exists safely before the offline ingestion completes.</li>\n<li>Lock down LLM model initialization into the Docker network <code>command</code> argument to strictly decouple the 1.3GB model download from the Streamlit UI loading phase.</li>\n<li>Finalize Food Scale standardizations (<code>xl</code>, <code>l</code>, <code>m</code>, <code>s</code>) in <code>unit_converter.py</code>.</li>\n</ul>\n<h2 id=\"blockers\">Blockers</h2>\n<ul>\n<li><strong>Data Race Condition</strong>: The LLM model stream download crashed the AI interface when requested immediately on app startup. Fixed by detaching the download to the container orchestrator.</li>\n<li><strong>Table Missing Error</strong>: Streamlit <code>app.py</code> querying <code>products_core</code> before Python <code>to_sql</code> had a chance to create it. Fixed by explicitly declaring schemas in <code>init.sql</code>.</li>\n</ul>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 225,
- "slug": "26-05-15-daily",
- "content": "# 26.05.15 DAILY\n\nDaily for today.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-15T06:47:46.851Z",
- "modified_date": "2026-05-15T06:47:46.857Z",
- "html": "<h1 id=\"260515-daily\">26.05.15 DAILY</h1>\n<p>Daily for today.</p>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 229,
- "slug": "260515-daily",
- "content": "# 260515 Daily\n\n**Yesterday:** Completed code refactoring and database integration.\n**Today:** Working on DevOps automation and documentation.\n**Blockers:** None currently blocking sprint goals.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-15T06:47:47.258Z",
- "modified_date": "2026-05-19T07:08:32.227Z",
- "html": "<h1 id=\"260515-daily\">260515 Daily</h1>\n<p><strong>Yesterday:</strong> Completed code refactoring and database integration.<br>\n<strong>Today:</strong> Working on DevOps automation and documentation.<br>\n<strong>Blockers:</strong> None currently blocking sprint goals.</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 223,
- "slug": "26-05-15-plan",
- "content": "# 26.05.15 PLAN\n\nCreate a plan for this week.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-15T06:47:46.652Z",
- "modified_date": "2026-05-15T06:47:46.661Z",
- "html": "<h1 id=\"260515-plan\">26.05.15 PLAN</h1>\n<p>Create a plan for this week.</p>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 227,
- "slug": "260515-plan",
- "content": "# 260515 Plan\n\n**Sprint Goal:** Finalize the deployment architecture and secure the codebase.\n**Capacity:** Team capacity is at 100%.\n**Focus:** Resolving XSS vulnerabilities and optimizing connection pooling.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-15T06:47:47.054Z",
- "modified_date": "2026-05-19T07:08:32.300Z",
- "html": "<h1 id=\"260515-plan\">260515 Plan</h1>\n<p><strong>Sprint Goal:</strong> Finalize the deployment architecture and secure the codebase.<br>\n<strong>Capacity:</strong> Team capacity is at 100%.<br>\n<strong>Focus:</strong> Resolving XSS vulnerabilities and optimizing connection pooling.</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 222,
- "slug": "26-05-15-retrospective",
- "content": "# 26.05.15 RETROSPECTIVE\n\nReview for the two last weeks.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-15T06:47:46.541Z",
- "modified_date": "2026-05-15T06:47:46.550Z",
- "html": "<h1 id=\"260515-retrospective\">26.05.15 RETROSPECTIVE</h1>\n<p>Review for the two last weeks.</p>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 220,
- "slug": "260515-retrospective",
- "content": "After fighting with taiga. It has set up man task to close. For it the project is finished!",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-15T05:55:12.611Z",
- "modified_date": "2026-05-15T05:56:09.794Z",
- "html": "<p>After fighting with taiga. It has set up man task to close. For it the project is finished!</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 226,
- "slug": "260515-retrospective-1",
- "content": "",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-15T06:47:46.950Z",
- "modified_date": "2026-05-15T06:47:46.950Z",
- "html": "",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 224,
- "slug": "26-05-15-review",
- "content": "# 26.05.15 REVIEW\n\nCreate a review the two last weeks.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-15T06:47:46.753Z",
- "modified_date": "2026-05-15T06:47:46.761Z",
- "html": "<h1 id=\"260515-review\">26.05.15 REVIEW</h1>\n<p>Create a review the two last weeks.</p>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 228,
- "slug": "260515-review",
- "content": "",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-15T06:47:47.163Z",
- "modified_date": "2026-05-15T06:47:47.163Z",
- "html": "",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 230,
- "slug": "26-05-18-daily",
- "content": "# Daily Scrum - 26.05.18\n\n**What did we do yesterday?**\nFixed docker-compose caching issues and verified Zabbix telemetry.\n\n**What will we do today?**\nWe addressed the SQL query limitations (`LIMIT 15` and `LIMIT 1`), hardened security by removing hardcoded passwords, implemented Unix system users (`food_ai_cron`, `food_ai_mysql`), and automated the `data_sync.sh` pipeline with checksum validation.\n\n**Any blockers?**\nNone, everything is deployed successfully.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-18T12:17:29.963Z",
- "modified_date": "2026-05-18T12:17:29.972Z",
- "html": "<h1 id=\"daily-scrum-260518\">Daily Scrum - 26.05.18</h1>\n<p><strong>What did we do yesterday?</strong><br>\nFixed docker-compose caching issues and verified Zabbix telemetry.</p>\n<p><strong>What will we do today?</strong><br>\nWe addressed the SQL query limitations (<code>LIMIT 15</code> and <code>LIMIT 1</code>), hardened security by removing hardcoded passwords, implemented Unix system users (<code>food_ai_cron</code>, <code>food_ai_mysql</code>), and automated the <code>data_sync.sh</code> pipeline with checksum validation.</p>\n<p><strong>Any blockers?</strong><br>\nNone, everything is deployed successfully.</p>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 232,
- "slug": "26-05-18-plan",
- "content": "# Sprint Planning - 26.05.18\n\n**Goal:** Finalize the security architecture and automate the data pipeline.\n\n**Tasks:**\n1. Provision dedicated Unix users.\n2. Sanitize database queries in `app.py`.\n3. Implement `.env` configurations for all automated bash/python scripts.\n4. Close all Taiga documentation gaps.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-18T12:17:30.163Z",
- "modified_date": "2026-05-18T12:17:30.172Z",
- "html": "<h1 id=\"sprint-planning-260518\">Sprint Planning - 26.05.18</h1>\n<p><strong>Goal:</strong> Finalize the security architecture and automate the data pipeline.</p>\n<p><strong>Tasks:</strong><br>\n1. Provision dedicated Unix users.<br>\n2. Sanitize database queries in <code>app.py</code>.<br>\n3. Implement <code>.env</code> configurations for all automated bash/python scripts.<br>\n4. Close all Taiga documentation gaps.</p>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 233,
- "slug": "26-05-18-retrospective",
- "content": "# Sprint Retrospective - 26.05.18\n\n**What went well:**\nThe transition to `.env` variables and the `04:00` cron job integration was extremely smooth. The Unix ACL (`setfacl`) setup enforces perfect Principle of Least Privilege on the server.\n\n**What didn't go well:**\nWe discovered that 30 tasks in Taiga had been closed without any descriptions, which violates our documentation policies. Additionally, using `LIMIT 15` inside the Plate Builder SQL was artificially restricting search results and has been removed.\n\n**Action Items:**\nEnsure all future Taiga tasks contain a detailed description before closing.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-18T12:17:30.271Z",
- "modified_date": "2026-05-18T12:17:30.279Z",
- "html": "<h1 id=\"sprint-retrospective-260518\">Sprint Retrospective - 26.05.18</h1>\n<p><strong>What went well:</strong><br>\nThe transition to <code>.env</code> variables and the <code>04:00</code> cron job integration was extremely smooth. The Unix ACL (<code>setfacl</code>) setup enforces perfect Principle of Least Privilege on the server.</p>\n<p><strong>What didn't go well:</strong><br>\nWe discovered that 30 tasks in Taiga had been closed without any descriptions, which violates our documentation policies. Additionally, using <code>LIMIT 15</code> inside the Plate Builder SQL was artificially restricting search results and has been removed.</p>\n<p><strong>Action Items:</strong><br>\nEnsure all future Taiga tasks contain a detailed description before closing.</p>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 231,
- "slug": "26-05-18-review",
- "content": "# Sprint Review - 26.05.18\n\nDuring this phase, we completed a massive infrastructure hardening cycle. All database users were renamed (`food_reader`, `food_loader`, `food_app_auth`) and isolated. The data ingestion pipeline was fully automated with a `04:00` cron job and `md5sum` validation to prevent redundant downloads. The system logs are now correctly piped into `logs/data_sync.log` for immediate Zabbix agent telemetry. No hardcoded passwords remain in our scripts.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-18T12:17:30.068Z",
- "modified_date": "2026-05-18T12:17:30.072Z",
- "html": "<h1 id=\"sprint-review-260518\">Sprint Review - 26.05.18</h1>\n<p>During this phase, we completed a massive infrastructure hardening cycle. All database users were renamed (<code>food_reader</code>, <code>food_loader</code>, <code>food_app_auth</code>) and isolated. The data ingestion pipeline was fully automated with a <code>04:00</code> cron job and <code>md5sum</code> validation to prevent redundant downloads. The system logs are now correctly piped into <code>logs/data_sync.log</code> for immediate Zabbix agent telemetry. No hardcoded passwords remain in our scripts.</p>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 240,
- "slug": "26-05-21-daily",
- "content": "# 💬 Daily Scrum - 26.05.21\n\n## 📅 Yesterday's Progress\n* Successfully finished offline fallback database migrations, ingestion of the OpenFoodFacts 20,000-row subset, and verified Streamlit app login.\n* Fixed the git RCS `$Id$` placeholder compilation bug in documents and PDFs, mirroring dynamic Git log information on the first page of compiled manuals.\n* Patched the PDF generator script (`generate_pdfs.py`) to gracefully skip locked files on Windows without crashing the build pipeline.\n\n---\n\n## 🚀 Today's Plan\n\n### 1. Remote Server Integration & Fixes\n* **Taiga, Git, and Server Connectivity**: Re-established full connectivity with remote systems.\n* **SearXNG Crash-loop Fix**: Pull the latest code on the target server `192.168.130.170` to apply the default settings validation patch and resolve the remote SearXNG container crash-loop.\n* **Docker Operations**: Ensure the entire stack on the remote server runs healthy.\n\n### 2. Antigravity Upgrade Check\n* **Environment Integrity**: Verified that the Antigravity local IDE setup is operating on the correct current version.\n* **Tool & Library Integrity**: Confirmed the status of local virtual environments (`.venv`), Python libraries, and tools.\n* **CI/CD Telemetry**: Verified git remote push/pull connectivity.\n\n### 3. Agile Synchronization\n* Push this plan, daily, and review documents directly to the Taiga Wiki.\n* Run `taiga_sync_final.py` to resolve and populate unassigned tasks and user stories.\n\n---\n\n## 🚫 Blockers\n* **None**. The remote server VM and Taiga API are fully online and accessible.\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-21T07:11:00.388Z",
- "modified_date": "2026-05-21T07:11:00.397Z",
- "html": "<h1 id=\"daily-scrum-260521\">💬 Daily Scrum - 26.05.21</h1>\n<h2 id=\"yesterdays-progress\">📅 Yesterday's Progress</h2>\n<ul>\n<li>Successfully finished offline fallback database migrations, ingestion of the OpenFoodFacts 20,000-row subset, and verified Streamlit app login.</li>\n<li>Fixed the git RCS <code>$Id$</code> placeholder compilation bug in documents and PDFs, mirroring dynamic Git log information on the first page of compiled manuals.</li>\n<li>Patched the PDF generator script (<code>generate_pdfs.py</code>) to gracefully skip locked files on Windows without crashing the build pipeline.</li>\n</ul>\n<hr>\n<h2 id=\"todays-plan\">🚀 Today's Plan</h2>\n<h3 id=\"1-remote-server-integration-fixes\">1. Remote Server Integration & Fixes</h3>\n<ul>\n<li><strong>Taiga, Git, and Server Connectivity</strong>: Re-established full connectivity with remote systems.</li>\n<li><strong>SearXNG Crash-loop Fix</strong>: Pull the latest code on the target server <code>192.168.130.170</code> to apply the default settings validation patch and resolve the remote SearXNG container crash-loop.</li>\n<li><strong>Docker Operations</strong>: Ensure the entire stack on the remote server runs healthy.</li>\n</ul>\n<h3 id=\"2-antigravity-upgrade-check\">2. Antigravity Upgrade Check</h3>\n<ul>\n<li><strong>Environment Integrity</strong>: Verified that the Antigravity local IDE setup is operating on the correct current version.</li>\n<li><strong>Tool & Library Integrity</strong>: Confirmed the status of local virtual environments (<code>.venv</code>), Python libraries, and tools.</li>\n<li><strong>CI/CD Telemetry</strong>: Verified git remote push/pull connectivity.</li>\n</ul>\n<h3 id=\"3-agile-synchronization\">3. Agile Synchronization</h3>\n<ul>\n<li>Push this plan, daily, and review documents directly to the Taiga Wiki.</li>\n<li>Run <code>taiga_sync_final.py</code> to resolve and populate unassigned tasks and user stories.</li>\n</ul>\n<hr>\n<h2 id=\"blockers\">🚫 Blockers</h2>\n<ul>\n<li><strong>None</strong>. The remote server VM and Taiga API are fully online and accessible.</li>\n</ul>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 237,
- "slug": "260521-daily",
- "content": "# 💬 Daily Scrum - 26.05.21\n\n## 📅 Yesterday's Progress\n* Successfully finished offline fallback database migrations, ingestion of the OpenFoodFacts 20,000-row subset, and verified Streamlit app login.\n* Fixed the git RCS `$Id$` placeholder compilation bug in documents and PDFs, mirroring dynamic Git log information on the first page of compiled manuals.\n* Patched the PDF generator script (`generate_pdfs.py`) to gracefully skip locked files on Windows without crashing the build pipeline.\n\n---\n\n## 🚀 Today's Plan\n\n### 1. Remote Server Integration & Fixes\n* **Taiga, Git, and Server Connectivity**: Re-established full connectivity with remote systems.\n* **SearXNG Crash-loop Fix**: Pull the latest code on the target server `192.168.130.170` to apply the default settings validation patch and resolve the remote SearXNG container crash-loop.\n* **Docker Operations**: Ensure the entire stack on the remote server runs healthy.\n\n### 2. Antigravity Upgrade Check\n* **Environment Integrity**: Verified that the Antigravity local IDE setup is operating on the correct current version.\n* **Tool & Library Integrity**: Confirmed the status of local virtual environments (`.venv`), Python libraries, and tools.\n* **CI/CD Telemetry**: Verified git remote push/pull connectivity.\n\n### 3. Agile Synchronization\n* Push this plan, daily, and review documents directly to the Taiga Wiki.\n* Run `taiga_sync_final.py` to resolve and populate unassigned tasks and user stories.\n\n---\n\n## 🚫 Blockers\n* **None**. The remote server VM and Taiga API are fully online and accessible.\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-21T07:10:59.872Z",
- "modified_date": "2026-05-21T07:10:59.880Z",
- "html": "<h1 id=\"daily-scrum-260521\">💬 Daily Scrum - 26.05.21</h1>\n<h2 id=\"yesterdays-progress\">📅 Yesterday's Progress</h2>\n<ul>\n<li>Successfully finished offline fallback database migrations, ingestion of the OpenFoodFacts 20,000-row subset, and verified Streamlit app login.</li>\n<li>Fixed the git RCS <code>$Id$</code> placeholder compilation bug in documents and PDFs, mirroring dynamic Git log information on the first page of compiled manuals.</li>\n<li>Patched the PDF generator script (<code>generate_pdfs.py</code>) to gracefully skip locked files on Windows without crashing the build pipeline.</li>\n</ul>\n<hr>\n<h2 id=\"todays-plan\">🚀 Today's Plan</h2>\n<h3 id=\"1-remote-server-integration-fixes\">1. Remote Server Integration & Fixes</h3>\n<ul>\n<li><strong>Taiga, Git, and Server Connectivity</strong>: Re-established full connectivity with remote systems.</li>\n<li><strong>SearXNG Crash-loop Fix</strong>: Pull the latest code on the target server <code>192.168.130.170</code> to apply the default settings validation patch and resolve the remote SearXNG container crash-loop.</li>\n<li><strong>Docker Operations</strong>: Ensure the entire stack on the remote server runs healthy.</li>\n</ul>\n<h3 id=\"2-antigravity-upgrade-check\">2. Antigravity Upgrade Check</h3>\n<ul>\n<li><strong>Environment Integrity</strong>: Verified that the Antigravity local IDE setup is operating on the correct current version.</li>\n<li><strong>Tool & Library Integrity</strong>: Confirmed the status of local virtual environments (<code>.venv</code>), Python libraries, and tools.</li>\n<li><strong>CI/CD Telemetry</strong>: Verified git remote push/pull connectivity.</li>\n</ul>\n<h3 id=\"3-agile-synchronization\">3. Agile Synchronization</h3>\n<ul>\n<li>Push this plan, daily, and review documents directly to the Taiga Wiki.</li>\n<li>Run <code>taiga_sync_final.py</code> to resolve and populate unassigned tasks and user stories.</li>\n</ul>\n<hr>\n<h2 id=\"blockers\">🚫 Blockers</h2>\n<ul>\n<li><strong>None</strong>. The remote server VM and Taiga API are fully online and accessible.</li>\n</ul>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 238,
- "slug": "26-05-21-plan",
- "content": "# 📅 Sprint 7 Plan - 26.05.21\n\n## 🎯 Sprint Goal\nTransition the Local Food AI clinical platform from 100% offline, local-only fallback mode to the fully connected, distributed production environment now that the VM server and Taiga are fully accessible.\n\n---\n\n## 🛠️ Detailed Tasks & Actions\n\n### 1. Git Repository & Server Sync\n* Push all local resilience configurations (dynamic DB URL, dynamic Zabbix host, Nginx configurations) to the Git repository.\n* Pull the latest code updates directly on the target server `192.168.130.170` to synchronize the host and remote states.\n\n### 2. Remote Server Hardening\n* Address the `searxng` container crash-loop on the remote server by applying the default settings validation patch (`use_default_settings: true`).\n* Verify that all 8 containers in the `docker-compose.yml` stack are running smoothly in a fully operational state.\n* Perform runtime checks on the Streamlit web interface and verify the local Ollama LLM is successfully loading the clinical RAG tools on the server.\n\n### 3. Observability & Telemetry Integration\n* Validate SNMPv3 metrics scraping on the server's local Zabbix agent.\n* Verify database row count check, memory consumption, and CPU load metrics are correctly streaming to the Zabbix dashboard.\n* Configure active alerts to trigger Discord and Microsoft Teams webhooks upon system metrics anomalies.\n\n### 4. Continuous Documentation Mirroring\n* Automatically mirror daily sprint logs, plans, and retrospective reviews to the Taiga wiki.\n* Dynamically substitute RCS keyword `$Id$` placeholders across all documents and PDFs using git log revision details to ensure high-fidelity outputs.\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-21T07:11:00.050Z",
- "modified_date": "2026-05-21T07:11:00.058Z",
- "html": "<h1 id=\"sprint-7-plan-260521\">📅 Sprint 7 Plan - 26.05.21</h1>\n<h2 id=\"sprint-goal\">🎯 Sprint Goal</h2>\n<p>Transition the Local Food AI clinical platform from 100% offline, local-only fallback mode to the fully connected, distributed production environment now that the VM server and Taiga are fully accessible.</p>\n<hr>\n<h2 id=\"detailed-tasks-actions\">🛠️ Detailed Tasks & Actions</h2>\n<h3 id=\"1-git-repository-server-sync\">1. Git Repository & Server Sync</h3>\n<ul>\n<li>Push all local resilience configurations (dynamic DB URL, dynamic Zabbix host, Nginx configurations) to the Git repository.</li>\n<li>Pull the latest code updates directly on the target server <code>192.168.130.170</code> to synchronize the host and remote states.</li>\n</ul>\n<h3 id=\"2-remote-server-hardening\">2. Remote Server Hardening</h3>\n<ul>\n<li>Address the <code>searxng</code> container crash-loop on the remote server by applying the default settings validation patch (<code>use_default_settings: true</code>).</li>\n<li>Verify that all 8 containers in the <code>docker-compose.yml</code> stack are running smoothly in a fully operational state.</li>\n<li>Perform runtime checks on the Streamlit web interface and verify the local Ollama LLM is successfully loading the clinical RAG tools on the server.</li>\n</ul>\n<h3 id=\"3-observability-telemetry-integration\">3. Observability & Telemetry Integration</h3>\n<ul>\n<li>Validate SNMPv3 metrics scraping on the server's local Zabbix agent.</li>\n<li>Verify database row count check, memory consumption, and CPU load metrics are correctly streaming to the Zabbix dashboard.</li>\n<li>Configure active alerts to trigger Discord and Microsoft Teams webhooks upon system metrics anomalies.</li>\n</ul>\n<h3 id=\"4-continuous-documentation-mirroring\">4. Continuous Documentation Mirroring</h3>\n<ul>\n<li>Automatically mirror daily sprint logs, plans, and retrospective reviews to the Taiga wiki.</li>\n<li>Dynamically substitute RCS keyword <code>$Id$</code> placeholders across all documents and PDFs using git log revision details to ensure high-fidelity outputs.</li>\n</ul>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 235,
- "slug": "260521-plan",
- "content": "# 📅 Sprint 7 Plan - 26.05.21\n\n## 🎯 Sprint Goal\nTransition the Local Food AI clinical platform from 100% offline, local-only fallback mode to the fully connected, distributed production environment now that the VM server and Taiga are fully accessible.\n\n---\n\n## 🛠️ Detailed Tasks & Actions\n\n### 1. Git Repository & Server Sync\n* Push all local resilience configurations (dynamic DB URL, dynamic Zabbix host, Nginx configurations) to the Git repository.\n* Pull the latest code updates directly on the target server `192.168.130.170` to synchronize the host and remote states.\n\n### 2. Remote Server Hardening\n* Address the `searxng` container crash-loop on the remote server by applying the default settings validation patch (`use_default_settings: true`).\n* Verify that all 8 containers in the `docker-compose.yml` stack are running smoothly in a fully operational state.\n* Perform runtime checks on the Streamlit web interface and verify the local Ollama LLM is successfully loading the clinical RAG tools on the server.\n\n### 3. Observability & Telemetry Integration\n* Validate SNMPv3 metrics scraping on the server's local Zabbix agent.\n* Verify database row count check, memory consumption, and CPU load metrics are correctly streaming to the Zabbix dashboard.\n* Configure active alerts to trigger Discord and Microsoft Teams webhooks upon system metrics anomalies.\n\n### 4. Continuous Documentation Mirroring\n* Automatically mirror daily sprint logs, plans, and retrospective reviews to the Taiga wiki.\n* Dynamically substitute RCS keyword `$Id$` placeholders across all documents and PDFs using git log revision details to ensure high-fidelity outputs.\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-21T07:10:59.523Z",
- "modified_date": "2026-05-21T07:10:59.531Z",
- "html": "<h1 id=\"sprint-7-plan-260521\">📅 Sprint 7 Plan - 26.05.21</h1>\n<h2 id=\"sprint-goal\">🎯 Sprint Goal</h2>\n<p>Transition the Local Food AI clinical platform from 100% offline, local-only fallback mode to the fully connected, distributed production environment now that the VM server and Taiga are fully accessible.</p>\n<hr>\n<h2 id=\"detailed-tasks-actions\">🛠️ Detailed Tasks & Actions</h2>\n<h3 id=\"1-git-repository-server-sync\">1. Git Repository & Server Sync</h3>\n<ul>\n<li>Push all local resilience configurations (dynamic DB URL, dynamic Zabbix host, Nginx configurations) to the Git repository.</li>\n<li>Pull the latest code updates directly on the target server <code>192.168.130.170</code> to synchronize the host and remote states.</li>\n</ul>\n<h3 id=\"2-remote-server-hardening\">2. Remote Server Hardening</h3>\n<ul>\n<li>Address the <code>searxng</code> container crash-loop on the remote server by applying the default settings validation patch (<code>use_default_settings: true</code>).</li>\n<li>Verify that all 8 containers in the <code>docker-compose.yml</code> stack are running smoothly in a fully operational state.</li>\n<li>Perform runtime checks on the Streamlit web interface and verify the local Ollama LLM is successfully loading the clinical RAG tools on the server.</li>\n</ul>\n<h3 id=\"3-observability-telemetry-integration\">3. Observability & Telemetry Integration</h3>\n<ul>\n<li>Validate SNMPv3 metrics scraping on the server's local Zabbix agent.</li>\n<li>Verify database row count check, memory consumption, and CPU load metrics are correctly streaming to the Zabbix dashboard.</li>\n<li>Configure active alerts to trigger Discord and Microsoft Teams webhooks upon system metrics anomalies.</li>\n</ul>\n<h3 id=\"4-continuous-documentation-mirroring\">4. Continuous Documentation Mirroring</h3>\n<ul>\n<li>Automatically mirror daily sprint logs, plans, and retrospective reviews to the Taiga wiki.</li>\n<li>Dynamically substitute RCS keyword <code>$Id$</code> placeholders across all documents and PDFs using git log revision details to ensure high-fidelity outputs.</li>\n</ul>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 239,
- "slug": "26-05-21-review",
- "content": "# 🔍 Sprint 7 Review - 26.05.21\n\n## 🏆 Accomplishments & Delivered Features\nThis week was focused on recovering from the system crash, setting up resilient offline fallback architectures, and transition back to fully operational server mode.\n\n---\n\n## 📈 Detailed Breakdown\n\n### 1. Database Operations & Resilience\n* **MySQL Network Port Recovery**: Resolved the problematic `command: --skip-grant-tables` issue which disabled TCP/IP networking sockets. MySQL now binds successfully to port `3306` inside the container network.\n* **Unified Initialization Script**: Developed `init.sql` to programmatically configure databases (`food_db`, `zabbix`), users, passwords, and correct privilege mapping.\n* **OpenFoodFacts Ingestion**: Successfully loaded the 20,000-row products macro subset offline using group-based vertical partitioning and FULLTEXT indexes.\n* **Alembic Schema Migrations**: Established target clinical tables (`users`, `user_health_profiles`, `plates`, `plate_items`) via python Alembic migrations.\n* **Admin Seeding**: Seeded the `Admin` dietitian account (password: `BTSai123`) to ensure instant clinical frontend login.\n\n### 2. Enterprise Telemetry\n* **Dynamic Zabbix Telemetry**: Refactored `snmp_notifier.py` and `configure_zabbix_alerts.py` to dynamically resolve target hosts from environment variables instead of failing on hardcoded IPs.\n* **Local Telemetry Verification**: Confirmed that Zabbix Server, Web UI, and Agent are active locally and successfully scraping SNMP metric traps on container operations.\n\n### 3. Documentation & Auditing\n* **Disaster Recovery**: Audited and updated the system disaster recovery plan to include local single-node fallback runbooks.\n* **Zabbix Telemetry Manual**: Documented local offline telemetry fallback steps.\n* **High-Fidelity PDF Compilation**: Resolved literal `$Id$` placeholders inside all manuals and PDFs, replacing them with dynamic git log revision hashes.\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-21T07:11:00.207Z",
- "modified_date": "2026-05-21T07:11:00.215Z",
- "html": "<h1 id=\"sprint-7-review-260521\">🔍 Sprint 7 Review - 26.05.21</h1>\n<h2 id=\"accomplishments-delivered-features\">🏆 Accomplishments & Delivered Features</h2>\n<p>This week was focused on recovering from the system crash, setting up resilient offline fallback architectures, and transition back to fully operational server mode.</p>\n<hr>\n<h2 id=\"detailed-breakdown\">📈 Detailed Breakdown</h2>\n<h3 id=\"1-database-operations-resilience\">1. Database Operations & Resilience</h3>\n<ul>\n<li><strong>MySQL Network Port Recovery</strong>: Resolved the problematic <code>command: --skip-grant-tables</code> issue which disabled TCP/IP networking sockets. MySQL now binds successfully to port <code>3306</code> inside the container network.</li>\n<li><strong>Unified Initialization Script</strong>: Developed <code>init.sql</code> to programmatically configure databases (<code>food_db</code>, <code>zabbix</code>), users, passwords, and correct privilege mapping.</li>\n<li><strong>OpenFoodFacts Ingestion</strong>: Successfully loaded the 20,000-row products macro subset offline using group-based vertical partitioning and FULLTEXT indexes.</li>\n<li><strong>Alembic Schema Migrations</strong>: Established target clinical tables (<code>users</code>, <code>user_health_profiles</code>, <code>plates</code>, <code>plate_items</code>) via python Alembic migrations.</li>\n<li><strong>Admin Seeding</strong>: Seeded the <code>Admin</code> dietitian account (password: <code>BTSai123</code>) to ensure instant clinical frontend login.</li>\n</ul>\n<h3 id=\"2-enterprise-telemetry\">2. Enterprise Telemetry</h3>\n<ul>\n<li><strong>Dynamic Zabbix Telemetry</strong>: Refactored <code>snmp_notifier.py</code> and <code>configure_zabbix_alerts.py</code> to dynamically resolve target hosts from environment variables instead of failing on hardcoded IPs.</li>\n<li><strong>Local Telemetry Verification</strong>: Confirmed that Zabbix Server, Web UI, and Agent are active locally and successfully scraping SNMP metric traps on container operations.</li>\n</ul>\n<h3 id=\"3-documentation-auditing\">3. Documentation & Auditing</h3>\n<ul>\n<li><strong>Disaster Recovery</strong>: Audited and updated the system disaster recovery plan to include local single-node fallback runbooks.</li>\n<li><strong>Zabbix Telemetry Manual</strong>: Documented local offline telemetry fallback steps.</li>\n<li><strong>High-Fidelity PDF Compilation</strong>: Resolved literal <code>$Id$</code> placeholders inside all manuals and PDFs, replacing them with dynamic git log revision hashes.</li>\n</ul>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 236,
- "slug": "260521-review",
- "content": "# 🔍 Sprint 7 Review - 26.05.21\n\n## 🏆 Accomplishments & Delivered Features\nThis week was focused on recovering from the system crash, setting up resilient offline fallback architectures, and transition back to fully operational server mode.\n\n---\n\n## 📈 Detailed Breakdown\n\n### 1. Database Operations & Resilience\n* **MySQL Network Port Recovery**: Resolved the problematic `command: --skip-grant-tables` issue which disabled TCP/IP networking sockets. MySQL now binds successfully to port `3306` inside the container network.\n* **Unified Initialization Script**: Developed `init.sql` to programmatically configure databases (`food_db`, `zabbix`), users, passwords, and correct privilege mapping.\n* **OpenFoodFacts Ingestion**: Successfully loaded the 20,000-row products macro subset offline using group-based vertical partitioning and FULLTEXT indexes.\n* **Alembic Schema Migrations**: Established target clinical tables (`users`, `user_health_profiles`, `plates`, `plate_items`) via python Alembic migrations.\n* **Admin Seeding**: Seeded the `Admin` dietitian account (password: `BTSai123`) to ensure instant clinical frontend login.\n\n### 2. Enterprise Telemetry\n* **Dynamic Zabbix Telemetry**: Refactored `snmp_notifier.py` and `configure_zabbix_alerts.py` to dynamically resolve target hosts from environment variables instead of failing on hardcoded IPs.\n* **Local Telemetry Verification**: Confirmed that Zabbix Server, Web UI, and Agent are active locally and successfully scraping SNMP metric traps on container operations.\n\n### 3. Documentation & Auditing\n* **Disaster Recovery**: Audited and updated the system disaster recovery plan to include local single-node fallback runbooks.\n* **Zabbix Telemetry Manual**: Documented local offline telemetry fallback steps.\n* **High-Fidelity PDF Compilation**: Resolved literal `$Id$` placeholders inside all manuals and PDFs, replacing them with dynamic git log revision hashes.\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-21T07:10:59.708Z",
- "modified_date": "2026-05-21T07:10:59.711Z",
- "html": "<h1 id=\"sprint-7-review-260521\">🔍 Sprint 7 Review - 26.05.21</h1>\n<h2 id=\"accomplishments-delivered-features\">🏆 Accomplishments & Delivered Features</h2>\n<p>This week was focused on recovering from the system crash, setting up resilient offline fallback architectures, and transition back to fully operational server mode.</p>\n<hr>\n<h2 id=\"detailed-breakdown\">📈 Detailed Breakdown</h2>\n<h3 id=\"1-database-operations-resilience\">1. Database Operations & Resilience</h3>\n<ul>\n<li><strong>MySQL Network Port Recovery</strong>: Resolved the problematic <code>command: --skip-grant-tables</code> issue which disabled TCP/IP networking sockets. MySQL now binds successfully to port <code>3306</code> inside the container network.</li>\n<li><strong>Unified Initialization Script</strong>: Developed <code>init.sql</code> to programmatically configure databases (<code>food_db</code>, <code>zabbix</code>), users, passwords, and correct privilege mapping.</li>\n<li><strong>OpenFoodFacts Ingestion</strong>: Successfully loaded the 20,000-row products macro subset offline using group-based vertical partitioning and FULLTEXT indexes.</li>\n<li><strong>Alembic Schema Migrations</strong>: Established target clinical tables (<code>users</code>, <code>user_health_profiles</code>, <code>plates</code>, <code>plate_items</code>) via python Alembic migrations.</li>\n<li><strong>Admin Seeding</strong>: Seeded the <code>Admin</code> dietitian account (password: <code>BTSai123</code>) to ensure instant clinical frontend login.</li>\n</ul>\n<h3 id=\"2-enterprise-telemetry\">2. Enterprise Telemetry</h3>\n<ul>\n<li><strong>Dynamic Zabbix Telemetry</strong>: Refactored <code>snmp_notifier.py</code> and <code>configure_zabbix_alerts.py</code> to dynamically resolve target hosts from environment variables instead of failing on hardcoded IPs.</li>\n<li><strong>Local Telemetry Verification</strong>: Confirmed that Zabbix Server, Web UI, and Agent are active locally and successfully scraping SNMP metric traps on container operations.</li>\n</ul>\n<h3 id=\"3-documentation-auditing\">3. Documentation & Auditing</h3>\n<ul>\n<li><strong>Disaster Recovery</strong>: Audited and updated the system disaster recovery plan to include local single-node fallback runbooks.</li>\n<li><strong>Zabbix Telemetry Manual</strong>: Documented local offline telemetry fallback steps.</li>\n<li><strong>High-Fidelity PDF Compilation</strong>: Resolved literal <code>$Id$</code> placeholders inside all manuals and PDFs, replacing them with dynamic git log revision hashes.</li>\n</ul>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 248,
- "slug": "260611-daily",
- "content": "Check missing tag in file. Start installation locally. Check with the customer if he is happy.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-06-11T05:51:13.483Z",
- "modified_date": "2026-06-11T05:56:22.019Z",
- "html": "<p>Check missing tag in file. Start installation locally. Check with the customer if he is happy.</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 247,
- "slug": "260611-plan",
- "content": "Keep it simple check only basic things are in place. \n \ntrack some missing information in files. \nI should be able to deploy it on my notebook following the installation.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-06-11T05:50:48.974Z",
- "modified_date": "2026-06-11T05:54:16.685Z",
- "html": "<p>Keep it simple check only basic things are in place. </p>\n<p>track some missing information in files.<br>\nI should be able to deploy it on my notebook following the installation.</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 246,
- "slug": "260611-review",
- "content": "Bugs have been fixed..\n\nSession survive to browser stop. \n \nApplication seams to work",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-06-11T05:50:35.096Z",
- "modified_date": "2026-06-11T05:52:55.448Z",
- "html": "<p>Bugs have been fixed..</p>\n<p>Session survive to browser stop. </p>\n<p>Application seams to work</p>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 184,
- "slug": "architecture-technologies",
- "content": "# ARCHITECTURE & TECHNOLOGIES\n\n## Frontend\n- **Streamlit (v1.30+)**: Handles all UI routing and data presentation asynchronously.\n\n## Backend Data\n- **MySQL 8.0**: Features robust horizontal table partitioning across the massive OpenFoodFacts dataset. Queries are heavily optimized using a \"Subquery-First\" limiting strategy to prevent Cartesian explosions during `LEFT JOIN` operations.\n\n## AI Inference Engine\n- **Ollama**: Hosted locally via Docker. Utilizes the **`llama3.1`** model exclusively, as the updated 3.1 architecture supports native API Tool Calling schemas (JSON output), which the Clinical RAG system relies heavily upon to search the MySQL database.\n\n## Monitoring & Alerting\n- **Zabbix**: Actively monitors Docker network health, SNMP traps, and Nginx reverse proxy HTTP codes.\n- **Microsoft Teams Integration**: Zabbix dynamically pushes critical alerts to a designated Microsoft Teams channel using a Python-configured Webhook MediaType.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-23T06:01:13.108Z",
- "modified_date": "2026-05-07T06:10:19.030Z",
- "html": "<h1 id=\"architecture-technologies\">ARCHITECTURE & TECHNOLOGIES</h1>\n<h2 id=\"frontend\">Frontend</h2>\n<ul>\n<li><strong>Streamlit (v1.30+)</strong>: Handles all UI routing and data presentation asynchronously.</li>\n</ul>\n<h2 id=\"backend-data\">Backend Data</h2>\n<ul>\n<li><strong>MySQL 8.0</strong>: Features robust horizontal table partitioning across the massive OpenFoodFacts dataset. Queries are heavily optimized using a \"Subquery-First\" limiting strategy to prevent Cartesian explosions during <code>LEFT JOIN</code> operations.</li>\n</ul>\n<h2 id=\"ai-inference-engine\">AI Inference Engine</h2>\n<ul>\n<li><strong>Ollama</strong>: Hosted locally via Docker. Utilizes the <strong><code>llama3.1</code></strong> model exclusively, as the updated 3.1 architecture supports native API Tool Calling schemas (JSON output), which the Clinical RAG system relies heavily upon to search the MySQL database.</li>\n</ul>\n<h2 id=\"monitoring-alerting\">Monitoring & Alerting</h2>\n<ul>\n<li><strong>Zabbix</strong>: Actively monitors Docker network health, SNMP traps, and Nginx reverse proxy HTTP codes.</li>\n<li><strong>Microsoft Teams Integration</strong>: Zabbix dynamically pushes critical alerts to a designated Microsoft Teams channel using a Python-configured Webhook MediaType.</li>\n</ul>",
- "editions": 5,
- "version": 5
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 196,
- "slug": "backup-procedure",
- "content": "# Server Backup Procedure\n\nThis document outlines the standard operating procedure for backing up the Local Food AI application server (192.168.130.170).\n\n## 1. MySQL Database Backup\nThe database contains all user accounts, parsed food profiles, and health parameters. \n\n**Automated Cron Backup Command:**\n```bash\n# Execute as the db_owner using the mysql_config_editor login path\nmysqldump --login-path=app_owner --single-transaction --routines --triggers food_db > /backup/mysql/food_db_$(date +\\%F).sql\n```\n\n**Zabbix Database Backup:**\n```bash\nmysqldump --login-path=app_owner --single-transaction --routines --triggers zabbix > /backup/mysql/zabbix_$(date +\\%F).sql\n```\n\n## 2. Docker Volumes & App Data Backup\nThe Docker configuration, application code, and Taiga configurations must be backed up.\n\n```bash\n# Compress the entire project directory\ntar -czvf /backup/app/food_project_$(date +\\%F).tar.gz /home/francois/food_project/\n\n# Backup Docker Compose configurations\ntar -czvf /backup/docker/docker_configs_$(date +\\%F).tar.gz /home/francois/food_project/docker/\n```\n\n## 3. Retention Policy\nA standard `cron` job should be configured to run daily at `03:00 AM` local time.\nTo prevent disk exhaustion, backups older than 7 days should be automatically purged:\n```bash\nfind /backup/mysql/ -type f -name \"*.sql\" -mtime +7 -exec rm {} \\;\nfind /backup/app/ -type f -name \"*.tar.gz\" -mtime +7 -exec rm {} \\;\n```\n\n## 4. Restoration Procedure\nTo restore the database from a backup:\n```bash\nmysql --login-path=app_owner food_db < /backup/mysql/food_db_2026-04-30.sql\n```\nTo restore the application:\n```bash\ntar -xzvf /backup/app/food_project_2026-04-30.tar.gz -C /\ncd /home/francois/food_project/docker/app\ndocker-compose up -d\n```\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T06:11:49.468Z",
- "modified_date": "2026-04-30T06:11:49.472Z",
- "html": "<h1 id=\"server-backup-procedure\">Server Backup Procedure</h1>\n<p>This document outlines the standard operating procedure for backing up the Local Food AI application server (192.168.130.170).</p>\n<h2 id=\"1-mysql-database-backup\">1. MySQL Database Backup</h2>\n<p>The database contains all user accounts, parsed food profiles, and health parameters. </p>\n<p><strong>Automated Cron Backup Command:</strong></p>\n<div class=\"codehilite\"><pre><span></span><code><span class=\"c1\"># Execute as the db_owner using the mysql_config_editor login path</span>\nmysqldump<span class=\"w\"> </span>--login-path<span class=\"o\">=</span>app_owner<span class=\"w\"> </span>--single-transaction<span class=\"w\"> </span>--routines<span class=\"w\"> </span>--triggers<span class=\"w\"> </span>food_db<span class=\"w\"> </span>><span class=\"w\"> </span>/backup/mysql/food_db_<span class=\"k\">$(</span>date<span class=\"w\"> </span>+<span class=\"se\">\\%</span>F<span class=\"k\">)</span>.sql\n</code></pre></div>\n\n<p><strong>Zabbix Database Backup:</strong></p>\n<div class=\"codehilite\"><pre><span></span><code>mysqldump<span class=\"w\"> </span>--login-path<span class=\"o\">=</span>app_owner<span class=\"w\"> </span>--single-transaction<span class=\"w\"> </span>--routines<span class=\"w\"> </span>--triggers<span class=\"w\"> </span>zabbix<span class=\"w\"> </span>><span class=\"w\"> </span>/backup/mysql/zabbix_<span class=\"k\">$(</span>date<span class=\"w\"> </span>+<span class=\"se\">\\%</span>F<span class=\"k\">)</span>.sql\n</code></pre></div>\n\n<h2 id=\"2-docker-volumes-app-data-backup\">2. Docker Volumes & App Data Backup</h2>\n<p>The Docker configuration, application code, and Taiga configurations must be backed up.</p>\n<div class=\"codehilite\"><pre><span></span><code><span class=\"c1\"># Compress the entire project directory</span>\ntar<span class=\"w\"> </span>-czvf<span class=\"w\"> </span>/backup/app/food_project_<span class=\"k\">$(</span>date<span class=\"w\"> </span>+<span class=\"se\">\\%</span>F<span class=\"k\">)</span>.tar.gz<span class=\"w\"> </span>/home/francois/food_project/\n\n<span class=\"c1\"># Backup Docker Compose configurations</span>\ntar<span class=\"w\"> </span>-czvf<span class=\"w\"> </span>/backup/docker/docker_configs_<span class=\"k\">$(</span>date<span class=\"w\"> </span>+<span class=\"se\">\\%</span>F<span class=\"k\">)</span>.tar.gz<span class=\"w\"> </span>/home/francois/food_project/docker/\n</code></pre></div>\n\n<h2 id=\"3-retention-policy\">3. Retention Policy</h2>\n<p>A standard <code>cron</code> job should be configured to run daily at <code>03:00 AM</code> local time.<br>\nTo prevent disk exhaustion, backups older than 7 days should be automatically purged:</p>\n<div class=\"codehilite\"><pre><span></span><code>find<span class=\"w\"> </span>/backup/mysql/<span class=\"w\"> </span>-type<span class=\"w\"> </span>f<span class=\"w\"> </span>-name<span class=\"w\"> </span><span class=\"s2\">"*.sql"</span><span class=\"w\"> </span>-mtime<span class=\"w\"> </span>+7<span class=\"w\"> </span>-exec<span class=\"w\"> </span>rm<span class=\"w\"> </span><span class=\"o\">{}</span><span class=\"w\"> </span><span class=\"se\">\\;</span>\nfind<span class=\"w\"> </span>/backup/app/<span class=\"w\"> </span>-type<span class=\"w\"> </span>f<span class=\"w\"> </span>-name<span class=\"w\"> </span><span class=\"s2\">"*.tar.gz"</span><span class=\"w\"> </span>-mtime<span class=\"w\"> </span>+7<span class=\"w\"> </span>-exec<span class=\"w\"> </span>rm<span class=\"w\"> </span><span class=\"o\">{}</span><span class=\"w\"> </span><span class=\"se\">\\;</span>\n</code></pre></div>\n\n<h2 id=\"4-restoration-procedure\">4. Restoration Procedure</h2>\n<p>To restore the database from a backup:</p>\n<div class=\"codehilite\"><pre><span></span><code>mysql<span class=\"w\"> </span>--login-path<span class=\"o\">=</span>app_owner<span class=\"w\"> </span>food_db<span class=\"w\"> </span><<span class=\"w\"> </span>/backup/mysql/food_db_2026-04-30.sql\n</code></pre></div>\n\n<p>To restore the application:</p>\n<div class=\"codehilite\"><pre><span></span><code>tar<span class=\"w\"> </span>-xzvf<span class=\"w\"> </span>/backup/app/food_project_2026-04-30.tar.gz<span class=\"w\"> </span>-C<span class=\"w\"> </span>/\n<span class=\"nb\">cd</span><span class=\"w\"> </span>/home/francois/food_project/docker/app\ndocker-compose<span class=\"w\"> </span>up<span class=\"w\"> </span>-d\n</code></pre></div>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 218,
- "slug": "bookmarks",
- "content": "# BOOKMARKS\n\n- [26.05.07 DAILY](260507-daily)\n- [26.05.07 REVIEW](260507-review)\n- [26.05.07 RETROSPECTIVE](260507-retrospective)\n- [26.05.07 PLAN](260507-plan)\n\n- [26.05.08 DAILY](260508-daily)\n- [26.05.08 REVIEW](260508-review)\n- [26.05.08 RETROSPECTIVE](260508-retrospective)\n- [26.05.08 PLAN](260508-plan)\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-05-07T07:50:37.291Z",
- "modified_date": "2026-05-08T06:31:40.787Z",
- "html": "<h1 id=\"bookmarks\">BOOKMARKS</h1>\n<ul>\n<li><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/260507-daily\">26.05.07 DAILY</a></li>\n<li><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/260507-review\">26.05.07 REVIEW</a></li>\n<li><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/260507-retrospective\">26.05.07 RETROSPECTIVE</a></li>\n<li>\n<p><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/260507-plan\">26.05.07 PLAN</a></p>\n</li>\n<li>\n<p><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/260508-daily\">26.05.08 DAILY</a></p>\n</li>\n<li><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/260508-review\">26.05.08 REVIEW</a></li>\n<li><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/260508-retrospective\">26.05.08 RETROSPECTIVE</a></li>\n<li><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/260508-plan\">26.05.08 PLAN</a></li>\n</ul>",
- "editions": 2,
- "version": 2
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 185,
- "slug": "devops-deploiement",
- "content": "# DEVOPS & DÉPLOIEMENT\n\n## Docker Architecture\nThe project utilizes `docker-compose` to orchestrate 4 core containers:\n1. `app` (Streamlit Python UI)\n2. `mysql` (Database Backend)\n3. `nginx` (Reverse Proxy on Port 80 handling WebSockets)\n4. `ingest` (Ephemeral offline Data Ingestion Container)\n\n## Automated Cron Jobs (Day 2 Operations)\nTo ensure system stability over time, two Bash scripts must be configured in the host's `crontab`:\n\n### 1. Data Freshness (`data_sync.sh`)\nSyncs the OpenFoodFacts CSV files. Supports `--online` for `wget` scraping or offline mode for processing locally dropped files.\n\n### 2. Disaster Recovery (`backup_db.sh`)\nExecutes a `mysqldump` directly from the MySQL container, compressing the output to `gzip`. Enforces a strict 7-day retention policy to prevent storage exhaustion.\n\n## Git Versioning\nAll files utilize the `ident` property within `.gitattributes`, injecting real-time Git SHA-1 hashes into file `$Id$` variables for precise version tracking in production.",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-23T06:01:53.183Z",
- "modified_date": "2026-05-07T06:10:18.753Z",
- "html": "<h1 id=\"devops-deploiement\">DEVOPS & DÉPLOIEMENT</h1>\n<h2 id=\"docker-architecture\">Docker Architecture</h2>\n<p>The project utilizes <code>docker-compose</code> to orchestrate 4 core containers:<br>\n1. <code>app</code> (Streamlit Python UI)<br>\n2. <code>mysql</code> (Database Backend)<br>\n3. <code>nginx</code> (Reverse Proxy on Port 80 handling WebSockets)<br>\n4. <code>ingest</code> (Ephemeral offline Data Ingestion Container)</p>\n<h2 id=\"automated-cron-jobs-day-2-operations\">Automated Cron Jobs (Day 2 Operations)</h2>\n<p>To ensure system stability over time, two Bash scripts must be configured in the host's <code>crontab</code>:</p>\n<h3 id=\"1-data-freshness-data_syncsh\">1. Data Freshness (<code>data_sync.sh</code>)</h3>\n<p>Syncs the OpenFoodFacts CSV files. Supports <code>--online</code> for <code>wget</code> scraping or offline mode for processing locally dropped files.</p>\n<h3 id=\"2-disaster-recovery-backup_dbsh\">2. Disaster Recovery (<code>backup_db.sh</code>)</h3>\n<p>Executes a <code>mysqldump</code> directly from the MySQL container, compressing the output to <code>gzip</code>. Enforces a strict 7-day retention policy to prevent storage exhaustion.</p>\n<h2 id=\"git-versioning\">Git Versioning</h2>\n<p>All files utilize the <code>ident</code> property within <code>.gitattributes</code>, injecting real-time Git SHA-1 hashes into file <code>$Id$</code> variables for precise version tracking in production.</p>",
- "editions": 4,
- "version": 4
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 195,
- "slug": "home",
- "content": "# Local Food AI Wiki\n\nWelcome to the Agile Scrum Wiki for the Local Food AI project.\n\n## Sprint 8 Documentation\nPlease review the official documentation and Scrum Ritual logs below:\n\n- [[26-04-30-plan]] - Sprint Planning\n- [[26-04-30-daily]] - Daily Scrum (Stand-up)\n- [[26-04-30-review]] - Sprint Review\n- [[26-04-30-retrospective]] - Sprint Retrospective\n- [[26-04-30-artifact]] - Artifacts Used\n- [[wsl-deployment]] - WSL Deployment Playbook\n- [[backup-procedure]] - Server Backup Procedure\n- [[test-cases-sprint8]] - Clinical Verification Test Cases\n\n- [26.05.07 DAILY](260507-daily)\n- [26.05.07 REVIEW](260507-review)\n- [26.05.07 RETROSPECTIVE](260507-retrospective)\n- [26.05.07 PLAN](260507-plan)\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T06:11:49.314Z",
- "modified_date": "2026-05-07T06:18:12.816Z",
- "html": "<h1 id=\"local-food-ai-wiki\">Local Food AI Wiki</h1>\n<p>Welcome to the Agile Scrum Wiki for the Local Food AI project.</p>\n<h2 id=\"sprint-8-documentation\">Sprint 8 Documentation</h2>\n<p>Please review the official documentation and Scrum Ritual logs below:</p>\n<ul>\n<li><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/26-04-30-plan\" title=\"26-04-30-plan\">26-04-30-plan</a> - Sprint Planning</li>\n<li><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/26-04-30-daily\" title=\"26-04-30-daily\">26-04-30-daily</a> - Daily Scrum (Stand-up)</li>\n<li><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/26-04-30-review\" title=\"26-04-30-review\">26-04-30-review</a> - Sprint Review</li>\n<li><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/26-04-30-retrospective\" title=\"26-04-30-retrospective\">26-04-30-retrospective</a> - Sprint Retrospective</li>\n<li><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/26-04-30-artifact\" title=\"26-04-30-artifact\">26-04-30-artifact</a> - Artifacts Used</li>\n<li><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/wsl-deployment\" title=\"wsl-deployment\">wsl-deployment</a> - WSL Deployment Playbook</li>\n<li><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/backup-procedure\" title=\"backup-procedure\">backup-procedure</a> - Server Backup Procedure</li>\n<li>\n<p><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/test-cases-sprint8\" title=\"test-cases-sprint8\">test-cases-sprint8</a> - Clinical Verification Test Cases</p>\n</li>\n<li>\n<p><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/260507-daily\">26.05.07 DAILY</a></p>\n</li>\n<li><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/260507-review\">26.05.07 REVIEW</a></li>\n<li><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/260507-retrospective\">26.05.07 RETROSPECTIVE</a></li>\n<li><a class=\"reference wiki\" href=\"https://192.168.130.161/taiga/project/local-food-ai-1/wiki/260507-plan\">26.05.07 PLAN</a></li>\n</ul>",
- "editions": 3,
- "version": 3
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 173,
- "slug": "sprint-1",
- "content": "# Sprint 1\n\n**Sprint Tag**: Sprint_1\n**Story Points**: 1000\n**Members**: francois, evegi144\n\n## 2026/04/16 Planning\n- [x] Initialize Git Repo and configure AI History context.\n- [x] Setup Taiga Wiki and Backlog generation.\n- [x] Finalize `deploy.sh` and Database Setup (`init.sql`, `setup_db.py`).\n- [x] Data Ingestion Pipeline (`ingest_csv.py`, `convert_datatypes.py`).\n- [x] Build basic Streamlit Base App (`app.py`).\n\n### 2026/04/16 Daily Scrum\n- **evegi144**: \n- **francois**: Set up git, database, and ingestion scripts.\n\n### 2026/04/17 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/04/18 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/04/19 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/04/20 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n## 2026/04/22 Review\n- **Review**: Successfully pushed all foundational files to Git and configured DB schemas.\n\n## 2026/04/22 Retrospective\n- **Retrospective**: Good velocity. Environment setup went smoothly.\n\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-17T06:47:57.053Z",
- "modified_date": "2026-04-29T08:03:16.702Z",
- "html": "<h1 id=\"sprint-1\">Sprint 1</h1>\n<p><strong>Sprint Tag</strong>: Sprint_1<br>\n<strong>Story Points</strong>: 1000<br>\n<strong>Members</strong>: francois, evegi144</p>\n<h2 id=\"20260416-planning\">2026/04/16 Planning</h2>\n<ul class=\"task-list\">\n<li class=\"task-list-item\"><label class=\"task-list-control\"><input checked type=\"checkbox\"><span class=\"task-list-indicator\"></span></label> Initialize Git Repo and configure AI History context.</li>\n<li class=\"task-list-item\"><label class=\"task-list-control\"><input checked type=\"checkbox\"><span class=\"task-list-indicator\"></span></label> Setup Taiga Wiki and Backlog generation.</li>\n<li class=\"task-list-item\"><label class=\"task-list-control\"><input checked type=\"checkbox\"><span class=\"task-list-indicator\"></span></label> Finalize <code>deploy.sh</code> and Database Setup (<code>init.sql</code>, <code>setup_db.py</code>).</li>\n<li class=\"task-list-item\"><label class=\"task-list-control\"><input checked type=\"checkbox\"><span class=\"task-list-indicator\"></span></label> Data Ingestion Pipeline (<code>ingest_csv.py</code>, <code>convert_datatypes.py</code>).</li>\n<li class=\"task-list-item\"><label class=\"task-list-control\"><input checked type=\"checkbox\"><span class=\"task-list-indicator\"></span></label> Build basic Streamlit Base App (<code>app.py</code>).</li>\n</ul>\n<h3 id=\"20260416-daily-scrum\">2026/04/16 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: Set up git, database, and ingestion scripts.</li>\n</ul>\n<h3 id=\"20260417-daily-scrum\">2026/04/17 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260418-daily-scrum\">2026/04/18 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260419-daily-scrum\">2026/04/19 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260420-daily-scrum\">2026/04/20 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h2 id=\"20260422-review\">2026/04/22 Review</h2>\n<ul>\n<li><strong>Review</strong>: Successfully pushed all foundational files to Git and configured DB schemas.</li>\n</ul>\n<h2 id=\"20260422-retrospective\">2026/04/22 Retrospective</h2>\n<ul>\n<li><strong>Retrospective</strong>: Good velocity. Environment setup went smoothly.</li>\n</ul>",
- "editions": 1,
- "version": 8
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 174,
- "slug": "sprint-2",
- "content": "# Sprint 2\n\n**Sprint Tag**: Sprint_2\n**Story Points**: 1000\n**Members**: francois, evegi144\n\n## 2026/04/23 Planning\n- [x] Execute Sprint 2: Core Nutritional Database.\n- [x] Test and verify `ingest_csv.py` for CSV Pandas imports.\n- [x] Implement the Database Search tab in the Streamlit UI (`app.py`).\n\n### 2026/04/23 Daily Scrum\n- **evegi144**: \n- **francois**: Verified Streamlit search views and Pandas ingestion pipeline.\n\n### 2026/04/24 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/04/25 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/04/26 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/04/27 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n## 2026/04/29 Review\n- **Review**: Data ingestion strategy and Streamlit search features are fully coded and finalized ahead of schedule.\n\n## 2026/04/29 Retrospective\n- **Retrospective**: Extremely efficient. By pre-building `app.py` search logic during Sprint 1, Sprint 2 was completed seamlessly.\n\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-17T06:47:57.214Z",
- "modified_date": "2026-04-29T08:03:16.877Z",
- "html": "<h1 id=\"sprint-2\">Sprint 2</h1>\n<p><strong>Sprint Tag</strong>: Sprint_2<br>\n<strong>Story Points</strong>: 1000<br>\n<strong>Members</strong>: francois, evegi144</p>\n<h2 id=\"20260423-planning\">2026/04/23 Planning</h2>\n<ul class=\"task-list\">\n<li class=\"task-list-item\"><label class=\"task-list-control\"><input checked type=\"checkbox\"><span class=\"task-list-indicator\"></span></label> Execute Sprint 2: Core Nutritional Database.</li>\n<li class=\"task-list-item\"><label class=\"task-list-control\"><input checked type=\"checkbox\"><span class=\"task-list-indicator\"></span></label> Test and verify <code>ingest_csv.py</code> for CSV Pandas imports.</li>\n<li class=\"task-list-item\"><label class=\"task-list-control\"><input checked type=\"checkbox\"><span class=\"task-list-indicator\"></span></label> Implement the Database Search tab in the Streamlit UI (<code>app.py</code>).</li>\n</ul>\n<h3 id=\"20260423-daily-scrum\">2026/04/23 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: Verified Streamlit search views and Pandas ingestion pipeline.</li>\n</ul>\n<h3 id=\"20260424-daily-scrum\">2026/04/24 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260425-daily-scrum\">2026/04/25 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260426-daily-scrum\">2026/04/26 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260427-daily-scrum\">2026/04/27 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h2 id=\"20260429-review\">2026/04/29 Review</h2>\n<ul>\n<li><strong>Review</strong>: Data ingestion strategy and Streamlit search features are fully coded and finalized ahead of schedule.</li>\n</ul>\n<h2 id=\"20260429-retrospective\">2026/04/29 Retrospective</h2>\n<ul>\n<li><strong>Retrospective</strong>: Extremely efficient. By pre-building <code>app.py</code> search logic during Sprint 1, Sprint 2 was completed seamlessly.</li>\n</ul>",
- "editions": 1,
- "version": 8
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 175,
- "slug": "sprint-3",
- "content": "# Sprint 3\n\n**Sprint Tag**: Sprint_3\n**Story Points**: 1000\n**Members**: francois, evegi144\n\n## 2026/04/30 Planning\n- Planning notes...\n\n### 2026/04/30 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/01 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/02 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/03 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/04 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n## 2026/05/06 Review\n- Review notes...\n\n## 2026/05/06 Retrospective\n- Retrospective notes...\n\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-17T06:47:57.368Z",
- "modified_date": "2026-04-29T08:03:16.985Z",
- "html": "<h1 id=\"sprint-3\">Sprint 3</h1>\n<p><strong>Sprint Tag</strong>: Sprint_3<br>\n<strong>Story Points</strong>: 1000<br>\n<strong>Members</strong>: francois, evegi144</p>\n<h2 id=\"20260430-planning\">2026/04/30 Planning</h2>\n<ul>\n<li>Planning notes...</li>\n</ul>\n<h3 id=\"20260430-daily-scrum\">2026/04/30 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260501-daily-scrum\">2026/05/01 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260502-daily-scrum\">2026/05/02 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260503-daily-scrum\">2026/05/03 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260504-daily-scrum\">2026/05/04 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h2 id=\"20260506-review\">2026/05/06 Review</h2>\n<ul>\n<li>Review notes...</li>\n</ul>\n<h2 id=\"20260506-retrospective\">2026/05/06 Retrospective</h2>\n<ul>\n<li>Retrospective notes...</li>\n</ul>",
- "editions": 1,
- "version": 8
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 176,
- "slug": "sprint-4",
- "content": "# Sprint 4\n\n**Sprint Tag**: Sprint_4\n**Story Points**: 1000\n**Members**: francois, evegi144\n\n## 2026/05/07 Planning\n- Planning notes...\n\n### 2026/05/07 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/08 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/09 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/10 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/11 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n## 2026/05/13 Review\n- Review notes...\n\n## 2026/05/13 Retrospective\n- Retrospective notes...\n\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-17T06:47:57.504Z",
- "modified_date": "2026-04-29T08:03:17.091Z",
- "html": "<h1 id=\"sprint-4\">Sprint 4</h1>\n<p><strong>Sprint Tag</strong>: Sprint_4<br>\n<strong>Story Points</strong>: 1000<br>\n<strong>Members</strong>: francois, evegi144</p>\n<h2 id=\"20260507-planning\">2026/05/07 Planning</h2>\n<ul>\n<li>Planning notes...</li>\n</ul>\n<h3 id=\"20260507-daily-scrum\">2026/05/07 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260508-daily-scrum\">2026/05/08 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260509-daily-scrum\">2026/05/09 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260510-daily-scrum\">2026/05/10 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260511-daily-scrum\">2026/05/11 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h2 id=\"20260513-review\">2026/05/13 Review</h2>\n<ul>\n<li>Review notes...</li>\n</ul>\n<h2 id=\"20260513-retrospective\">2026/05/13 Retrospective</h2>\n<ul>\n<li>Retrospective notes...</li>\n</ul>",
- "editions": 1,
- "version": 8
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 177,
- "slug": "sprint-5",
- "content": "# Sprint 5\n\n**Sprint Tag**: Sprint_5\n**Story Points**: 1000\n**Members**: francois, evegi144\n\n## 2026/05/14 Planning\n- Planning notes...\n\n### 2026/05/14 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/15 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/16 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/17 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/18 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n## 2026/05/20 Review\n- Review notes...\n\n## 2026/05/20 Retrospective\n- Retrospective notes...\n\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-17T06:47:57.640Z",
- "modified_date": "2026-04-29T08:03:17.196Z",
- "html": "<h1 id=\"sprint-5\">Sprint 5</h1>\n<p><strong>Sprint Tag</strong>: Sprint_5<br>\n<strong>Story Points</strong>: 1000<br>\n<strong>Members</strong>: francois, evegi144</p>\n<h2 id=\"20260514-planning\">2026/05/14 Planning</h2>\n<ul>\n<li>Planning notes...</li>\n</ul>\n<h3 id=\"20260514-daily-scrum\">2026/05/14 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260515-daily-scrum\">2026/05/15 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260516-daily-scrum\">2026/05/16 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260517-daily-scrum\">2026/05/17 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260518-daily-scrum\">2026/05/18 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h2 id=\"20260520-review\">2026/05/20 Review</h2>\n<ul>\n<li>Review notes...</li>\n</ul>\n<h2 id=\"20260520-retrospective\">2026/05/20 Retrospective</h2>\n<ul>\n<li>Retrospective notes...</li>\n</ul>",
- "editions": 1,
- "version": 8
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 178,
- "slug": "sprint-6",
- "content": "# Sprint 6\n\n**Sprint Tag**: Sprint_6\n**Story Points**: 1000\n**Members**: francois, evegi144\n\n## 2026/05/21 Planning\n- Planning notes...\n\n### 2026/05/21 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/22 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/23 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/24 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/25 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n## 2026/05/27 Review\n- Review notes...\n\n## 2026/05/27 Retrospective\n- Retrospective notes...\n\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-17T06:47:57.789Z",
- "modified_date": "2026-04-29T08:03:17.298Z",
- "html": "<h1 id=\"sprint-6\">Sprint 6</h1>\n<p><strong>Sprint Tag</strong>: Sprint_6<br>\n<strong>Story Points</strong>: 1000<br>\n<strong>Members</strong>: francois, evegi144</p>\n<h2 id=\"20260521-planning\">2026/05/21 Planning</h2>\n<ul>\n<li>Planning notes...</li>\n</ul>\n<h3 id=\"20260521-daily-scrum\">2026/05/21 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260522-daily-scrum\">2026/05/22 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260523-daily-scrum\">2026/05/23 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260524-daily-scrum\">2026/05/24 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260525-daily-scrum\">2026/05/25 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h2 id=\"20260527-review\">2026/05/27 Review</h2>\n<ul>\n<li>Review notes...</li>\n</ul>\n<h2 id=\"20260527-retrospective\">2026/05/27 Retrospective</h2>\n<ul>\n<li>Retrospective notes...</li>\n</ul>",
- "editions": 1,
- "version": 8
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 179,
- "slug": "sprint-7",
- "content": "# Sprint 7\n\n**Sprint Tag**: Sprint_7\n**Story Points**: 1000\n**Members**: francois, evegi144\n\n## 2026/05/28 Planning\n- Planning notes...\n\n### 2026/05/28 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/29 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/30 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/05/31 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/06/01 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n## 2026/06/03 Review\n- Review notes...\n\n## 2026/06/03 Retrospective\n- Retrospective notes...\n\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-17T06:47:57.934Z",
- "modified_date": "2026-04-29T08:03:17.403Z",
- "html": "<h1 id=\"sprint-7\">Sprint 7</h1>\n<p><strong>Sprint Tag</strong>: Sprint_7<br>\n<strong>Story Points</strong>: 1000<br>\n<strong>Members</strong>: francois, evegi144</p>\n<h2 id=\"20260528-planning\">2026/05/28 Planning</h2>\n<ul>\n<li>Planning notes...</li>\n</ul>\n<h3 id=\"20260528-daily-scrum\">2026/05/28 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260529-daily-scrum\">2026/05/29 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260530-daily-scrum\">2026/05/30 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260531-daily-scrum\">2026/05/31 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260601-daily-scrum\">2026/06/01 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h2 id=\"20260603-review\">2026/06/03 Review</h2>\n<ul>\n<li>Review notes...</li>\n</ul>\n<h2 id=\"20260603-retrospective\">2026/06/03 Retrospective</h2>\n<ul>\n<li>Retrospective notes...</li>\n</ul>",
- "editions": 1,
- "version": 8
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 180,
- "slug": "sprint-8",
- "content": "# Sprint 8\n\n**Sprint Tag**: Sprint_8\n**Story Points**: 1000\n**Members**: francois, evegi144\n\n## 2026/06/04 Planning\n- Planning notes...\n\n### 2026/06/04 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/06/05 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/06/06 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/06/07 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n### 2026/06/08 Daily Scrum\n- **evegi144**: \n- **francois**: \n\n## 2026/06/10 Review\n- Review notes...\n\n## 2026/06/10 Retrospective\n- Retrospective notes...\n\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-17T06:47:58.075Z",
- "modified_date": "2026-04-29T08:03:17.506Z",
- "html": "<h1 id=\"sprint-8\">Sprint 8</h1>\n<p><strong>Sprint Tag</strong>: Sprint_8<br>\n<strong>Story Points</strong>: 1000<br>\n<strong>Members</strong>: francois, evegi144</p>\n<h2 id=\"20260604-planning\">2026/06/04 Planning</h2>\n<ul>\n<li>Planning notes...</li>\n</ul>\n<h3 id=\"20260604-daily-scrum\">2026/06/04 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260605-daily-scrum\">2026/06/05 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260606-daily-scrum\">2026/06/06 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260607-daily-scrum\">2026/06/07 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h3 id=\"20260608-daily-scrum\">2026/06/08 Daily Scrum</h3>\n<ul>\n<li><strong>evegi144</strong>: </li>\n<li><strong>francois</strong>: </li>\n</ul>\n<h2 id=\"20260610-review\">2026/06/10 Review</h2>\n<ul>\n<li>Review notes...</li>\n</ul>\n<h2 id=\"20260610-retrospective\">2026/06/10 Retrospective</h2>\n<ul>\n<li>Retrospective notes...</li>\n</ul>",
- "editions": 1,
- "version": 8
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 198,
- "slug": "test-cases-sprint8",
- "content": "# Sprint 8: Clinical Test Cases\n\n**Target Persona Profile:**\n- **Condition:** Pregnant, Diabetic, Kidney Problems\n- **Nutritional Focus:** Low Sugar (Diabetes), Controlled Protein/Phosphorus/Potassium (Kidney), High Folate/Iron/Calcium (Pregnancy), Safe Foods Only (No raw meats, unpasteurized dairy, or high-mercury fish).\n\n---\n\n## 1. AI Chat Verification\n**Objective:** Verify the AI provides safe, cross-referenced advice for complex overlapping conditions.\n\n1. **Prompt:** \"I am pregnant, diabetic, and have kidney problems. Can I eat sushi?\"\n - *Expected Outcome:* AI strongly advises against sushi (raw fish risk for pregnancy, high sodium soy sauce risk for kidneys).\n2. **Prompt:** \"What is a safe snack to stabilize my blood sugar without hurting my kidneys?\"\n - *Expected Outcome:* Recommends low-potassium, low-sugar snacks (e.g., apple with a small amount of peanut butter), avoiding high-potassium/high-sugar options like bananas.\n3. **Prompt:** \"Can I drink milk? I need calcium for the baby.\"\n - *Expected Outcome:* AI notes that milk is high in phosphorus and potassium (kidney risk) and suggests kidney-friendly calcium alternatives or consulting a dietitian.\n4. **Prompt:** \"Is it safe to eat a large steak for iron?\"\n - *Expected Outcome:* AI warns against large protein portions due to kidney stress and suggests smaller, kidney-safe portions of lean meats.\n5. **Prompt:** \"What foods are strictly forbidden for me?\"\n - *Expected Outcome:* Lists raw meats, unpasteurized cheese, high-sugar foods, starfruit (kidney toxicity), and high-sodium processed foods.\n\n---\n\n## 2. Clinical Search Cases\n**Objective:** Verify the RAG database prioritizes safe macros when searching for ingredients.\n\n1. **Search:** \"Cereal\"\n - *Expected Outcome:* Should highlight sugar content in red (Diabetic risk) and check for phosphorus additives.\n2. **Search:** \"Cheese\"\n - *Expected Outcome:* Should flag unpasteurized cheeses (Pregnancy risk) and high sodium/phosphorus (Kidney risk).\n3. **Search:** \"Fruit Juice\"\n - *Expected Outcome:* Should flag high sugar spikes (Diabetes) and potentially high potassium (e.g., Orange Juice for Kidneys).\n4. **Search:** \"Deli Meat / Charcuterie\"\n - *Expected Outcome:* Flagged for Listeria risk (Pregnancy) and extreme sodium levels (Kidney).\n5. **Search:** \"White Rice\"\n - *Expected Outcome:* Acceptable for kidneys (low potassium/phosphorus) but flagged for high glycemic index (Diabetes).\n\n---\n\n## 3. My Plate Builder Cases\n**Objective:** Ensure the dynamic macro calculator correctly aggregates plate totals against strict clinical limits.\n\n1. **Plate 1:** 150g White Rice + 50g Chicken Breast + 100g Green Beans.\n - *Expected Outcome:* Calculates macros. Protein stays within kidney limits, carbs are moderate for diabetes.\n2. **Plate 2:** 200g Potatoes + 100g Tomatoes + 100g Beef.\n - *Expected Outcome:* Calculates macros. Should visually warn about excessive potassium (potatoes/tomatoes) for kidney patients.\n3. **Plate 3:** 100g Spinach Salad + 50g Feta Cheese.\n - *Expected Outcome:* Flags unpasteurized feta (pregnancy risk) and calculates high sodium.\n4. **Plate 4:** 200g Lentils + 100g Quinoa.\n - *Expected Outcome:* Calculates high phosphorus/potassium from legumes, warning the kidney profile.\n5. **Plate 5:** 100g Apple + 30g Almonds.\n - *Expected Outcome:* Calculates healthy macros. Low glycemic load, kidney-safe in moderation.\n\n---\n\n## 4. AI Meal Planner Cases\n**Objective:** Verify the AI can generate full daily meal plans respecting the tri-morbidity constraints.\n\n1. **Prompt:** \"Generate a full day meal plan for me.\"\n - *Expected Outcome:* 3 meals + 2 snacks. Low sugar, low potassium/phosphorus, fully cooked meats, pasteurized dairy.\n2. **Prompt:** \"Plan a pregnancy-safe dinner that won't spike my blood sugar.\"\n - *Expected Outcome:* E.g., Baked chicken, portion-controlled white rice, steamed green beans.\n3. **Prompt:** \"I need a high-iron lunch that is safe for my kidneys.\"\n - *Expected Outcome:* Avoids spinach (high potassium) and suggests kidney-friendly iron sources with Vitamin C.\n4. **Prompt:** \"Plan a breakfast without dairy.\"\n - *Expected Outcome:* E.g., Scrambled eggs (fully cooked) with white toast and berries.\n5. **Prompt:** \"Give me a 3-day meal prep plan.\"\n - *Expected Outcome:* A structured 3-day menu ensuring no raw fish, controlled protein portions, and steady complex carbs.\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T06:11:49.822Z",
- "modified_date": "2026-04-30T06:11:49.827Z",
- "html": "<h1 id=\"sprint-8-clinical-test-cases\">Sprint 8: Clinical Test Cases</h1>\n<p><strong>Target Persona Profile:</strong><br>\n- <strong>Condition:</strong> Pregnant, Diabetic, Kidney Problems<br>\n- <strong>Nutritional Focus:</strong> Low Sugar (Diabetes), Controlled Protein/Phosphorus/Potassium (Kidney), High Folate/Iron/Calcium (Pregnancy), Safe Foods Only (No raw meats, unpasteurized dairy, or high-mercury fish).</p>\n<hr>\n<h2 id=\"1-ai-chat-verification\">1. AI Chat Verification</h2>\n<p><strong>Objective:</strong> Verify the AI provides safe, cross-referenced advice for complex overlapping conditions.</p>\n<ol>\n<li><strong>Prompt:</strong> \"I am pregnant, diabetic, and have kidney problems. Can I eat sushi?\"<br>\n - <em>Expected Outcome:</em> AI strongly advises against sushi (raw fish risk for pregnancy, high sodium soy sauce risk for kidneys).</li>\n<li><strong>Prompt:</strong> \"What is a safe snack to stabilize my blood sugar without hurting my kidneys?\"<br>\n - <em>Expected Outcome:</em> Recommends low-potassium, low-sugar snacks (e.g., apple with a small amount of peanut butter), avoiding high-potassium/high-sugar options like bananas.</li>\n<li><strong>Prompt:</strong> \"Can I drink milk? I need calcium for the baby.\"<br>\n - <em>Expected Outcome:</em> AI notes that milk is high in phosphorus and potassium (kidney risk) and suggests kidney-friendly calcium alternatives or consulting a dietitian.</li>\n<li><strong>Prompt:</strong> \"Is it safe to eat a large steak for iron?\"<br>\n - <em>Expected Outcome:</em> AI warns against large protein portions due to kidney stress and suggests smaller, kidney-safe portions of lean meats.</li>\n<li><strong>Prompt:</strong> \"What foods are strictly forbidden for me?\"<br>\n - <em>Expected Outcome:</em> Lists raw meats, unpasteurized cheese, high-sugar foods, starfruit (kidney toxicity), and high-sodium processed foods.</li>\n</ol>\n<hr>\n<h2 id=\"2-clinical-search-cases\">2. Clinical Search Cases</h2>\n<p><strong>Objective:</strong> Verify the RAG database prioritizes safe macros when searching for ingredients.</p>\n<ol>\n<li><strong>Search:</strong> \"Cereal\"<br>\n - <em>Expected Outcome:</em> Should highlight sugar content in red (Diabetic risk) and check for phosphorus additives.</li>\n<li><strong>Search:</strong> \"Cheese\"<br>\n - <em>Expected Outcome:</em> Should flag unpasteurized cheeses (Pregnancy risk) and high sodium/phosphorus (Kidney risk).</li>\n<li><strong>Search:</strong> \"Fruit Juice\"<br>\n - <em>Expected Outcome:</em> Should flag high sugar spikes (Diabetes) and potentially high potassium (e.g., Orange Juice for Kidneys).</li>\n<li><strong>Search:</strong> \"Deli Meat / Charcuterie\"<br>\n - <em>Expected Outcome:</em> Flagged for Listeria risk (Pregnancy) and extreme sodium levels (Kidney).</li>\n<li><strong>Search:</strong> \"White Rice\"<br>\n - <em>Expected Outcome:</em> Acceptable for kidneys (low potassium/phosphorus) but flagged for high glycemic index (Diabetes).</li>\n</ol>\n<hr>\n<h2 id=\"3-my-plate-builder-cases\">3. My Plate Builder Cases</h2>\n<p><strong>Objective:</strong> Ensure the dynamic macro calculator correctly aggregates plate totals against strict clinical limits.</p>\n<ol>\n<li><strong>Plate 1:</strong> 150g White Rice + 50g Chicken Breast + 100g Green Beans.<br>\n - <em>Expected Outcome:</em> Calculates macros. Protein stays within kidney limits, carbs are moderate for diabetes.</li>\n<li><strong>Plate 2:</strong> 200g Potatoes + 100g Tomatoes + 100g Beef.<br>\n - <em>Expected Outcome:</em> Calculates macros. Should visually warn about excessive potassium (potatoes/tomatoes) for kidney patients.</li>\n<li><strong>Plate 3:</strong> 100g Spinach Salad + 50g Feta Cheese.<br>\n - <em>Expected Outcome:</em> Flags unpasteurized feta (pregnancy risk) and calculates high sodium.</li>\n<li><strong>Plate 4:</strong> 200g Lentils + 100g Quinoa.<br>\n - <em>Expected Outcome:</em> Calculates high phosphorus/potassium from legumes, warning the kidney profile.</li>\n<li><strong>Plate 5:</strong> 100g Apple + 30g Almonds.<br>\n - <em>Expected Outcome:</em> Calculates healthy macros. Low glycemic load, kidney-safe in moderation.</li>\n</ol>\n<hr>\n<h2 id=\"4-ai-meal-planner-cases\">4. AI Meal Planner Cases</h2>\n<p><strong>Objective:</strong> Verify the AI can generate full daily meal plans respecting the tri-morbidity constraints.</p>\n<ol>\n<li><strong>Prompt:</strong> \"Generate a full day meal plan for me.\"<br>\n - <em>Expected Outcome:</em> 3 meals + 2 snacks. Low sugar, low potassium/phosphorus, fully cooked meats, pasteurized dairy.</li>\n<li><strong>Prompt:</strong> \"Plan a pregnancy-safe dinner that won't spike my blood sugar.\"<br>\n - <em>Expected Outcome:</em> E.g., Baked chicken, portion-controlled white rice, steamed green beans.</li>\n<li><strong>Prompt:</strong> \"I need a high-iron lunch that is safe for my kidneys.\"<br>\n - <em>Expected Outcome:</em> Avoids spinach (high potassium) and suggests kidney-friendly iron sources with Vitamin C.</li>\n<li><strong>Prompt:</strong> \"Plan a breakfast without dairy.\"<br>\n - <em>Expected Outcome:</em> E.g., Scrambled eggs (fully cooked) with white toast and berries.</li>\n<li><strong>Prompt:</strong> \"Give me a 3-day meal prep plan.\"<br>\n - <em>Expected Outcome:</em> A structured 3-day menu ensuring no raw fish, controlled protein portions, and steady complex carbs.</li>\n</ol>",
- "editions": 1,
- "version": 1
- },
- {
- "project": 21,
- "project_extra_info": {
- "name": "LocalFoodAI_lanfr144",
- "slug": "local-food-ai-1",
- "logo_small_url": null,
- "id": 21
- },
- "is_watcher": false,
- "total_watchers": 0,
- "id": 197,
- "slug": "wsl-deployment",
- "content": "# WSL Deployment Playbook\n\nThis document describes how to deploy the entire Local Food AI stack (including the database, Streamlit app, and Zabbix monitoring) into a fresh Windows Subsystem for Linux (WSL) environment.\n\n## 1. Prerequisites\nOpen PowerShell as Administrator and install WSL (Ubuntu):\n```powershell\nwsl --install -d Ubuntu\n```\n\nOnce inside the WSL Ubuntu terminal, update the package manager:\n```bash\nsudo apt update && sudo apt upgrade -y\n```\n\n## 2. Install Dependencies\nInstall MySQL Server, Docker, and Python:\n```bash\n# Install MySQL\nsudo apt install mysql-server -y\nsudo systemctl start mysql\n\n# Install Docker\nsudo apt install docker.io docker-compose -y\nsudo usermod -aG docker $USER\n\n# Install Python and SNMP utilities\nsudo apt install python3-pip python3-venv snmp snmpd snmptrapd -y\n```\n\n## 3. Clone Repository\nClone the project repository from the Taiga/Git hub:\n```bash\ngit clone https://git.btshub.lu/lanfr/LocalFoodAI_lanfr144.git food_project\ncd food_project\n```\n\n## 4. Initialize Database\nRun the setup script to provision the MySQL database and securely create the PoLP users.\n```bash\nsudo python3 setup_db.py\n```\n*(You will be prompted for the MySQL root password, which is blank by default on fresh WSL installs. Press Enter).*\n\n## 5. Configure Secure Credentials\nEstablish the `mysql_config_editor` login paths so the application can connect to the database without exposing raw passwords.\n```bash\nmysql_config_editor set --login-path=app_auth --host=127.0.0.1 --user=db_app_auth --password\nmysql_config_editor set --login-path=app_reader --host=127.0.0.1 --user=db_app_reader --password\n```\n*(Enter the passwords defined during `setup_db.py` when prompted).*\n\n## 6. Build and Deploy Containers\nDeploy the Streamlit Application and the Zabbix monitoring stack using Docker Compose.\n\n```bash\n# Deploy Streamlit\nsudo docker build -t food-ai-app:latest -f docker/app/Dockerfile .\nsudo docker run -d --name food_ai --network host -v ~/.mylogin.cnf:/root/.mylogin.cnf:ro food-ai-app:latest\n\n# Deploy Zabbix\ncd docker/zabbix\nsudo bash ../../proper_reset.sh\nsudo docker-compose up -d\n```\n\n## 7. Verification\n- **Streamlit App:** `http://localhost:8501`\n- **Zabbix Web UI:** `http://localhost:8080`\n",
- "owner": 17,
- "last_modifier": 17,
- "created_date": "2026-04-30T06:11:49.659Z",
- "modified_date": "2026-04-30T06:11:49.663Z",
- "html": "<h1 id=\"wsl-deployment-playbook\">WSL Deployment Playbook</h1>\n<p>This document describes how to deploy the entire Local Food AI stack (including the database, Streamlit app, and Zabbix monitoring) into a fresh Windows Subsystem for Linux (WSL) environment.</p>\n<h2 id=\"1-prerequisites\">1. Prerequisites</h2>\n<p>Open PowerShell as Administrator and install WSL (Ubuntu):</p>\n<div class=\"codehilite\"><pre><span></span><code><span class=\"n\">wsl</span> <span class=\"p\">-</span><span class=\"n\">-install</span> <span class=\"n\">-d</span> <span class=\"n\">Ubuntu</span>\n</code></pre></div>\n\n<p>Once inside the WSL Ubuntu terminal, update the package manager:</p>\n<div class=\"codehilite\"><pre><span></span><code>sudo<span class=\"w\"> </span>apt<span class=\"w\"> </span>update<span class=\"w\"> </span><span class=\"o\">&&</span><span class=\"w\"> </span>sudo<span class=\"w\"> </span>apt<span class=\"w\"> </span>upgrade<span class=\"w\"> </span>-y\n</code></pre></div>\n\n<h2 id=\"2-install-dependencies\">2. Install Dependencies</h2>\n<p>Install MySQL Server, Docker, and Python:</p>\n<div class=\"codehilite\"><pre><span></span><code><span class=\"c1\"># Install MySQL</span>\nsudo<span class=\"w\"> </span>apt<span class=\"w\"> </span>install<span class=\"w\"> </span>mysql-server<span class=\"w\"> </span>-y\nsudo<span class=\"w\"> </span>systemctl<span class=\"w\"> </span>start<span class=\"w\"> </span>mysql\n\n<span class=\"c1\"># Install Docker</span>\nsudo<span class=\"w\"> </span>apt<span class=\"w\"> </span>install<span class=\"w\"> </span>docker.io<span class=\"w\"> </span>docker-compose<span class=\"w\"> </span>-y\nsudo<span class=\"w\"> </span>usermod<span class=\"w\"> </span>-aG<span class=\"w\"> </span>docker<span class=\"w\"> </span><span class=\"nv\">$USER</span>\n\n<span class=\"c1\"># Install Python and SNMP utilities</span>\nsudo<span class=\"w\"> </span>apt<span class=\"w\"> </span>install<span class=\"w\"> </span>python3-pip<span class=\"w\"> </span>python3-venv<span class=\"w\"> </span>snmp<span class=\"w\"> </span>snmpd<span class=\"w\"> </span>snmptrapd<span class=\"w\"> </span>-y\n</code></pre></div>\n\n<h2 id=\"3-clone-repository\">3. Clone Repository</h2>\n<p>Clone the project repository from the Taiga/Git hub:</p>\n<div class=\"codehilite\"><pre><span></span><code>git<span class=\"w\"> </span>clone<span class=\"w\"> </span>https://git.btshub.lu/lanfr/LocalFoodAI_lanfr144.git<span class=\"w\"> </span>food_project\n<span class=\"nb\">cd</span><span class=\"w\"> </span>food_project\n</code></pre></div>\n\n<h2 id=\"4-initialize-database\">4. Initialize Database</h2>\n<p>Run the setup script to provision the MySQL database and securely create the PoLP users.</p>\n<div class=\"codehilite\"><pre><span></span><code>sudo<span class=\"w\"> </span>python3<span class=\"w\"> </span>setup_db.py\n</code></pre></div>\n\n<p><em>(You will be prompted for the MySQL root password, which is blank by default on fresh WSL installs. Press Enter).</em></p>\n<h2 id=\"5-configure-secure-credentials\">5. Configure Secure Credentials</h2>\n<p>Establish the <code>mysql_config_editor</code> login paths so the application can connect to the database without exposing raw passwords.</p>\n<div class=\"codehilite\"><pre><span></span><code>mysql_config_editor<span class=\"w\"> </span><span class=\"nb\">set</span><span class=\"w\"> </span>--login-path<span class=\"o\">=</span>app_auth<span class=\"w\"> </span>--host<span class=\"o\">=</span><span class=\"m\">127</span>.0.0.1<span class=\"w\"> </span>--user<span class=\"o\">=</span>db_app_auth<span class=\"w\"> </span>--password\nmysql_config_editor<span class=\"w\"> </span><span class=\"nb\">set</span><span class=\"w\"> </span>--login-path<span class=\"o\">=</span>app_reader<span class=\"w\"> </span>--host<span class=\"o\">=</span><span class=\"m\">127</span>.0.0.1<span class=\"w\"> </span>--user<span class=\"o\">=</span>db_app_reader<span class=\"w\"> </span>--password\n</code></pre></div>\n\n<p><em>(Enter the passwords defined during <code>setup_db.py</code> when prompted).</em></p>\n<h2 id=\"6-build-and-deploy-containers\">6. Build and Deploy Containers</h2>\n<p>Deploy the Streamlit Application and the Zabbix monitoring stack using Docker Compose.</p>\n<div class=\"codehilite\"><pre><span></span><code><span class=\"c1\"># Deploy Streamlit</span>\nsudo<span class=\"w\"> </span>docker<span class=\"w\"> </span>build<span class=\"w\"> </span>-t<span class=\"w\"> </span>food-ai-app:latest<span class=\"w\"> </span>-f<span class=\"w\"> </span>docker/app/Dockerfile<span class=\"w\"> </span>.\nsudo<span class=\"w\"> </span>docker<span class=\"w\"> </span>run<span class=\"w\"> </span>-d<span class=\"w\"> </span>--name<span class=\"w\"> </span>food_ai<span class=\"w\"> </span>--network<span class=\"w\"> </span>host<span class=\"w\"> </span>-v<span class=\"w\"> </span>~/.mylogin.cnf:/root/.mylogin.cnf:ro<span class=\"w\"> </span>food-ai-app:latest\n\n<span class=\"c1\"># Deploy Zabbix</span>\n<span class=\"nb\">cd</span><span class=\"w\"> </span>docker/zabbix\nsudo<span class=\"w\"> </span>bash<span class=\"w\"> </span>../../proper_reset.sh\nsudo<span class=\"w\"> </span>docker-compose<span class=\"w\"> </span>up<span class=\"w\"> </span>-d\n</code></pre></div>\n\n<h2 id=\"7-verification\">7. Verification</h2>\n<ul>\n<li><strong>Streamlit App:</strong> <code>http://localhost:8501</code></li>\n<li><strong>Zabbix Web UI:</strong> <code>http://localhost:8080</code></li>\n</ul>",
- "editions": 1,
- "version": 1
- }
- ],
- "issues": []
- }
|