Tools API - Ändringslogg
Den här ändringsloggen sammanfattar användarsynliga förbättringar i Tools-plattformen.
2026-05-24
- Publik rendering av
/feed/category-content kraschar inte längre när cachad artikel-/kategoritext innehåller lokala utvecklings-URL:er som http://127.0.0.1/... eller http://localhost/.... Städningen av hostreferenser i den publika URL-normaliseraren använder nu ett korrigerat mönster igen.
- Publika
.net-/alias-hostar som just nu kör filcache använder nu striktare en runtime-säker file-cache-katalog i stället för att återanvända gamla storage/framework/cache/data-träd med fel ägare/rättigheter, vilket undviker återkommande Unable to create lockable file-fel på till exempel publika RSS-JSON-endpoints.
- De Tools-sidiga modereringsgraferna i Facebook Admin Tools visar nu en liten Last update-rad baserad på den senaste tillgängliga ingest-tidpunkten för det valda grupp-/källscope:t, så operatörer snabbare kan se om dashboarden fortfarande får in färsk Facebook-adminaktivitet.
- Den Tools-sidiga Facebook Admin Tools-dashboarden använder nu fler hot-path-index för Facebook-modereringsdata kring datum, grupp/källa, utfall och normaliserade aktör-/mål-namn. Det gör att de tyngre statistikvyerna och participant-history-uppslagningarna betydligt mindre lätt fastnar när modereringsdatan har vuxit sig stor.
- De publika RSS-/feed-vyerna har nu också fått ett extra databashot-path-index för uppslagningar av typen ”senaste raden per länk inom en feed/kategori”. Det minskar risken att publika
/feed, /feed/c/* och /feed/cards/* fastnar när en feed eller kategori har byggt upp en mycket stor artikelhistorik.
- SocialGPT-tillägget visar inte längre masterväxlarna för Facebook-adminaktivitet eller Facebook-admin-diagnostik i popupen/config-sidan. De växlarna finns nu bara på Tools-sidans Facebook Admin Tools-dashboard, och tillägget hämtar aktuellt av/på-läge från Tools innan det börjar arbeta på de Facebook-sidorna.
- SocialGPT-tillägget undertrycker nu sina markerad-text-knappar Verify fact / Open Toolbox inne i redigerbara iframe-baserade rich-text-ytor som forum-/CKEditor-fält. Det gör att de flytande etiketterna inte längre riskerar att tolkas som editorinnehåll eller läcka in i texten som skickas.
- Browserbot-/SocialGPT-stacken har nu en tydlig kanonisk hostinstaller igen:
bin/install-browserbot-stack.sh. Den fokuserar nu på det runtime som Socdemo-flödet faktiskt använder i dag — Node via NodeSource, filtrerade apt-installationer av browserberoenden, Xvfb, Playwright och en projektspecifik Playwright-Chromium-cache under storage/app/browser-automation/playwright-browsers — i stället för en splittrad kedja av äldre hjälpscript eller den aktuella Unix-användarens ~/.cache/ms-playwright.
- Själva Socdemo-playbackspåret är nu ett separat direktflöde igen:
play/socdemo-play.sh använder inte längre browserbot.sh för själva playbacksteget. Scriptet startar nu den inspelade Playwright-filen direkt, blockerar rent headless-läge för detta extensiontunga flöde, vägrar skapa en ny tom loginprofil tyst, kan återställa runtime-profilen från en matchande profilseed när den finns, och kan självläka den lokala Playwright-Chromium-cachen när browsernedladdningen saknas.
- Ubuntus snap-typ av
/usr/bin/chromium-browser behandlas nu som trasig för det här flödet i stället för som en giltig browser. Den aktuella Socdemo-runnern avvisar uttryckligen snap-stubbar och prioriterar en verifierad riktig Chromium-binär, inklusive den projektspecifika Playwright-Chromium-cachen, medan prepare-/doctor-hjälparna fortfarande kan falla tillbaka till en verifierad Google Chrome-binär för manuell profilförberedelse när Chromium saknas på hosten.
- SocialGPTs vanliga Toolbox-generering ser nu inte längre stillastående ut medan Tools arbetar. Inline-laddningen för Generate, Refresh och Verify fact växlar nu mellan tydliga stegtexter, förfluten tid och en liten rörlig progressbar både i Toolboxen på sidan och i webbläsarcompanionen.
- Browserbot och SocialGPTs socdemo-hjälpscript säger nu inte längre åt operatören att köra rå
apt-get update && apt-get install -y xvfb när xvfb-run saknas. De pekar nu i stället på den kanoniska installern som använder filtrerade distro-källor så att en trasig orelaterad PPA inte stoppar själva Xvfb-installationen på fjärrhostar.
- Laravels Playwright-setup undviker nu också Playwrights råa
--with-deps-aptflöde på Linux-hostar. Den installerar i stället de vanliga browserberoendena via Tools filtrerade apt-wrapper först och laddar sedan ned själva Playwright-browsern normalt, vilket gör att en trasig orelaterad PPA inte längre avbryter hela browser-setupen. Det beroendesteget löser nu dessutom automatiskt nyare Ubuntu-t64-/virtuella paketnamn (till exempel libasound2 → libasound2t64 när det behövs) i stället för att stanna på no installation candidate, och browsernedladdningar går nu som standard till en projektlokal cache under storage/app/browser-automation/playwright-browsers i stället för den aktuella användarens ~/.cache/ms-playwright.
- Browserbot, Socdemo-runnern och Playwright-setupen verifierar nu också att den projektlokala Playwright-browserbinären faktiskt finns och är körbar innan en körning startar. Om den cachen saknas eller har tappat sin execute-bit reparerar Tools nu rättigheterna och kan installera om browsern i den projektlokala cachen i stället för att falla direkt med råa Playwright-fel som
Executable doesn't exist eller spawn ... EACCES.
- Fler host-aware runtimekontroller behandlar nu även de publika
.net-aliasen som samma miljöfamilj som tools.tornevall.net, inte bara för val av cachedriver utan också för fallbacklogik för publika URL:er och för hostdetekteringen bakom DISABLE_SSL_VERIFY_TEST i den delade HTTP-klientdiagnostiken.
- Den publika översikten
/feed kan nu visa betydligt fler feeds per sida innan pagineringen tar vid, vilket gör den nya lazy-loadade kategorikorts-layouten mer praktisk när många feeds annars hamnar på sida 2 direkt.
- Lazy-loadade kategorikort på
/feed visar nu sina cachade kategori-AI-sammanfattningar igen, och sammanfattningarna öppnas direkt i det inlästa kategoriinnehållet i stället för att försvinna bakom feedlistan.
- Frågepanelen på
/feed gör nu följdfrågor tydligare: när ett tidigare svar väljs som follow-up-kontext öppnas frågepanelen, frågefältet fokuseras och en tydlig statusrad visar att nästa fråga ska skrivas i fältet nedanför. Rutan med senaste frågor har nu också en refresh-knapp.
- De publika kategorikorten på
/feed exponerar nu sin lazy-load-hjälpare säkert till sidans globala script igen, så öppning av en kollapsad kategori inte längre kraschar i webbläsaren med ensureCategoryContentLoaded is not defined.
- Memcached-fallback används nu bara när den riktiga PHP-extensionen
memcached faktiskt är laddad. Vanliga PHP-alias/stubbar räknas inte längre som giltig Memcached-klient, vilket förhindrar felaktiga fallbackförsök som annars kunde krascha under cache-bootstrap.
- Maintenancehjälparen som reparerar Laravels runtime-rättigheter kontrollerar nu också de faktiska filcache- och sessionskatalogerna under
storage/framework/*, så filcachefel för låsfiler blir lättare att fånga direkt efter underhåll i stället för först senare under sidvisningar.
- Hoststyrt cacheval kan nu falla tillbaka mjukare när en cachebackend är otillgänglig: om en host föredrar Redis men Redis inte går att använda där, faller Tools nu först tillbaka till Memcached när Memcached-extensionen/klienten finns och är konfigurerad, och först därefter till filcachen.
- Valet av cache-store kan nu följa den aktuella publika hosten tydligare:
tools.tornevall.com behåller den vanliga defaultdrivern för cache (just nu filbaserad i lokala/dev-miljöer), medan tools.tornevall.net kan växla till ett separat CACHE_DRIVER_NET-värde såsom Redis när den hosten/runtimen stöder det.
- Publika dokumentationssidor (
/docs, /docs/en, /docs/sv och enskilda dokumentsidor) samt RSS-utlänkarna (/out/{contentId}) hoppar nu över de icke nödvändiga databasberoende webbdelen som footer-räknare för online-sessioner, request-triggad jobbkörning och sidspårning. De lätta publika sidorna kan därmed fortfarande öppnas även när den vanliga sitedatabasen tillfälligt går trögt.
- Sessionskonfigurationen respekterar nu miljövariablerna
SESSION_DRIVER och SESSION_CONNECTION igen i stället för att tvinga databassessioner överallt, så lokala/dev-miljöer kan växla till filsessioner utan kodändringar.
- De språkstyrda dokumentationsgenvägarna (
/docs/sv och /docs/en) öppnar nu sina riktiga språkindex igen i stället för att ibland hamna i 404 när de feltolkades som vanliga dokumentationssluggar.
- Publika sidor som
/feed och /out/{contentId} hamnar inte längre i en 500-liknande bootstrapkrasch på Windows-/WAMP-hostar bara för att Laravels cachemanifestväg tolkades fel. Tools lämnar nu den vanliga lokala bootstrap/cache-vägen orörd när den redan är skrivbar, och den publika felsidan kan också falla tillbaka till ett minimalt inbyggt HTML-svar om view-lagret aldrig hann starta färdigt.
- Lokala Windows-/WAMP- eller CLI-miljöer som använder standardklienten
phpredis men faktiskt saknar Redis-PHP-extensionen faller nu automatiskt tillbaka bort från Redis, så sidor som /feed kan fortsätta använda den vanliga file/array-cachevägen i stället för att krascha med Class "Redis" not found.
2026-05-22
- Den publika översikten
/feed håller nu kategorikorten betydligt lättare vid första sidladdningen. Feedrader, kategori-AI-sammanfattningar och site-specifika AI-sammanfattningar hämtas först när en kategori faktiskt öppnas, vilket minskar initial page weight och gör den ihopfällda översikten märkbart snabbare.
- Brandväggsgenvägen på den inloggade dashboarden och i den administrativa delen av
/services öppnar nu live-control-sidan direkt, så gatewayens runtime-routingöversikt och den genererade run-after-konfigurationen är lättare att hitta.
- VirtualBox Manager visar nu en värdminnessammanfattning på varje konfigurerat serverkort, inklusive totalt värdminne, hur mycket värdminne som används just nu och hur mycket som fortfarande är tillgängligt när VirtualBox WebService exponerar de värdena.
- VirtualBox Manager håller nu ett striktare raw-WSDL-baserat SOAP-flöde från login till de första inventarieanropen, så Tools inte längre behandlar en tom eller obrukbar managed object reference som en lyckad inloggning.
- Översikten på
/admin/virtualbox gör nu en samlad inspektion per host i stället för att öppna flera bullriga uppföljningssessioner vid varje sidladdning, vilket gör SOAP-fel lättare att läsa och minskar duplicerat felbrus.
- VirtualBox-korten i adminpanelen visar nu ett särskilt diagnosblock med endpoint/WSDL/login-operation/referensstatus, samtidigt som lösenord och annan känslig SOAP-data fortfarande maskeras.
- Tomma inventarier behandlas nu som normallägen i VirtualBox Manager: noll VM:ar, noll registrerade ISO:er eller noll bridge-adaptrar visas inte längre automatiskt som hårda fel i sig.
2026-05-21
- Browserbots installationshjälpare (
bin/fixnode.sh, bin/install-playwright-laravel.sh och bin/install-chrome-headless.sh) är nu tåligare på Ubuntu-/Debian-hostar där någon extern APT-repo är trasig. De isolerar nu sina paketinstallationer till de distro-/leverantörskällor som faktiskt behövs i stället för att falla bara för att en orelaterad PPA är otillgänglig, och Chrome-installern autodetekterar nu också den aktuella Laravel-applikationsroten i stället för att anta en äldre standardväg.
- Firewall Live Control exponerar nu också interna runtime-endpointsen för route-konfiguration för hostar som gateway (
/api/firewall/runtime/{host} plus /api/firewall/runtime/{host}/run-after.conf). Adminsidan /firewall/live kan nu visa den grupperade genererade run-after-konfigurationen tillsammans med synkade netplan- och äldre network-interface-filer när den delade serverinformation-sökvägen är mountad på den aktuella Tools-hosten.
- Den gemensamma footern som redan visar antalet användare online kan nu också visa en liten indikator för serverns load average, så det blir lättare att upptäcka hög hostbelastning utan att öppna de fulla adminsidorna för runtime.
- Den publika översikten
/feed gör nu mindre upprepat count-arbete per sidladdning. Antal inlägg per feed, första/senaste upptäckt och räknarna för redigerade poster aggregeras nu effektivare och cacheas kortvarigt, vilket minskar den seghet som kunde uppstå när översiktssidan räknade om samma statistik för varje synlig feedrad.
- Browserbots SocialGPT-playback kan nu överleva Snap-hanterad Chromium på Linux-hostar där den sparade Tools-browserprofilen ligger utanför Snaps skrivbara sandbox. Wrappern speglar nu profilen till en Snap-säker runtime-sökväg under körningen och synkar tillbaka uppdaterad sessionsdata efteråt, vilket undviker det vanliga felet
Chromium cannot read and write to its data directory.
2026-05-20
- Den centrala exception-handlern riskerar inte längre att krascha en andra gång bara för att Tools buggrapportering eller själva ramverkets logger fallerar under felrapporteringen. Misslyckad loggning faller nu tillbaka säkert i stället för att förvandla ett verkligt fel till en fatal
Class "Log" not found-kaskad.
- DNS-editorn kan nu fortsätta visa utvalda zoner även när de ska hanteras via Cloudflare i stället för de lokala BIND-filerna. Externa zonmappningar kan registreras i Tools admin, zonlistan visar nu de mappade zonerna, och editorns läsningar/skrivningar för de zonerna routas via Cloudflare-API:t medan det befintliga refresh-flödet behålls.
- Fallbacken för immutable hostar täcker nu mer än bara Blade compiled views: när Laravels vanliga cachemanifest- eller loggfilvägar inte är skrivbara kan Tools nu styra om de runtimefilerna till en skrivbar temporär runtimeyta i stället för att krascha på read-only
bootstrap/cache eller storage/logs.
- Maintenancehjälparna som städar/reparerar Laravels runtimeyta förbereder nu också de resolverade fallbackkatalogerna/-filerna för logg/cache/views och verifierar att den riktiga webbanvändaren faktiskt kan skriva dit, så en gammal read-only-runtimeväg är mindre benägen att överleva en vanlig cleanup utan att märkas.
- Publika RSS-utgående redirects (
/out/{contentId}) riskerar nu inte längre att förvandla en valfri analytikloggning av RSS entry clicked till ett internt fel när den vanliga Laravel-loggkanalen är otillgänglig på en read-only-host.
- Den lätta callbacken
/me.php försöker inte längre skriva sin temporära IP-markör direkt i den publika webbroten, så endpointen fortsätter nu fungera även när den deployade public/-mounten är read-only.
- VirtualBox Manager är nu mer WSDL-medveten för wrapped/document-literal-SOAP-anrop. Den kan läsa både
__getFunctions() och __getTypes(), prova wrapper-baserade login/logoff-requestobjekt före rå positional-argument och exponerar nu också en admin-only-åtgärd Debug SOAP med sanitiserad WSDL/funktions/typ/request-diagnostik när en host fortfarande vägrar logga in.
- Det adminbegränsade verktyget User mailout är nu lättare att hitta: den gamla posten Mail all users har tydligare namn, och admins får nu också direkta genvägar från huvuddashboarden och den administrativa delen av den publika sidan Services.
- Tools faller nu automatiskt tillbaka till en skrivbar temporär compiled-view-katalog när den vanliga Blade-cachen under
storage/framework/views är read-only på hosten, så förfrågningar inte längre kraschar bara för att deploy-mounten är immutable.
- Själva sidan User mailout har nu också en mer genomarbetad utskicksarbetsyta med tydligare kompositörshierarki, sidopaneler för arbetsflöde och mottagarräknare, samt en större separat previewyta för granskning före skick.
- Åtgärden AI helper draft på User mailout kör nu asynkront, så utkast, hjälparstatus och previewpanel kan uppdateras direkt på sidan utan full omladdning.
- Riktiga User mailout-utskick och Send test to me only läggs nu på den dedikerade bakgrundskön
user-mailout, och browserns send/test-flöden kan därför svara direkt i stället för att vänta på att hela mailkörningen ska avslutas inline.
- User mailout innehåller nu åtgärden AI helper draft, som kan generera ett första mailutkast utifrån en instruktion plus valt mottagarurval, samtidigt som det normala säkerhetsflödet med preview / dry run / testmail finns kvar.
- Användarutskick och testmail går nu ut från den konfigurerade supportavsändaren (
SUPPORT_EMAIL, support@tornevall.net som standard) i stället för att bara luta sig mot ramverkets generiska standardavsändare.
- Att öppna
/openai/access/request direkt skickar nu inloggade användare tillbaka till den inbyggda ansökningsrutan i stället för att falla igenom till en generisk felsida, och misslyckade ansökningar ger nu ett begripligt felmeddelande i stället för en stum 500-liknande återvändsgränd.
- Admins/granskare får nu en liten fast reminder-overlay på vanliga inloggade sidor när en eller flera OpenAI-ansökningar fortfarande väntar, med direktlänk tillbaka till
/admin/openai.
- My API Keys kan nu skapa flera separata Tools OpenAI forwarder-token (
provider_tools_openai) för olika interna AI-uppdrag. Varje token kan namnges per uppdrag och roteras eller dödas individuellt, medan den riktiga uppströmsnyckeln mot OpenAI ligger kvar server-side i Tools.
- De nya Tools OpenAI forwarder-token styrs av den redan befintliga adminhanterade OpenAI-behörigheten (
provider_openai), så godkända användare kan dela upp intern Tools AI-användning på flera uppdragsspecifika bearer-token i stället för att återanvända en enda delad token överallt.
2026-05-19
- Den publika vBulletin-endpointen för invite-complete (
POST /api/vbulletin/onboarding/invite/complete) är nu uttryckligen dokumenterad som en tokenfri frontend-hook-endpoint, och den accepterar nu både ren invite-kod och en hel onboarding-URL i invite_code genom att Tools först plockar ut själva tokenen före lookupen.
- Den publika dokumentationen innehåller nu också en särskild frontend-guide för att hoppa över den separata onboarding-sidan efter forumregistrering, inklusive rekommenderade
header_head-arguments, anpassad bootstrapkod för field66, ett direkt fetch()-exempel och en stylad success-popup.
- Samma frontend-guide innehåller nu också det fulla, färdiga Snowball-autoverify-exemplet med session-cache, tyst
invite code not found-stopp, FormData-POST mot Tools och popup-feedback för både lyckad och misslyckad verifiering.
- SocialGPT Toolbox blir inte längre visuellt inlåst i vissa rich text-editors. När editorn ligger i en redigerbar same-origin-iframe försöker tillägget nu placera Toolbox på den omgivande sidytan i stället för att lämna den inne i editorboxen.
- SocialGPT Toolbox har nu också två högre companion-lägen för dockning: Companion till höger och Companion till vänster.
2026-05-18
- Den publika dokumentationen innehåller nu också en särskild teknisk anteckning för Snöbollseffektens vBulletin-integration, inklusive redirecten
/snowball -> /snowball/forum, loggbytet från header_head, tidig CSS för dold originallogga, preload/preconnect-hints för Tools-bundlen och den nuvarande medlemswidget-lösningen.
- Tools exponerar nu
POST /api/vbulletin/onboarding/invite/complete för ett framtida vBulletin-frontendscript som körs efter slutförd registrering. Endpointen kan återanvända eller skapa rätt onboardingförfrågan från en invite-kod plus forumidentitetshints, kräver träff i det konfigurerade invite-code-profilfältet när ett sådant används, och autoaktiverar bara forumåtkomst när den befintliga onboarding-configen redan tillåter säker automatisk approve.
- vBulletins invite-kompositör och mallrendering stöder nu också
{{tools_support_email}}, så invite-mail kan peka på den delade supportadressen (support@tornevall.net som standard) utan att ersätta den befintliga platshållaren {{tools_user_email}} för det aktuella Tools-kontot.
- De publika vBulletin-onboardingsidorna använder nu enklare språk för inbjudna användare, föredrar “inbjudningskod” konsekvent och visar tydligt vilket profilfält koden ska klistras in i innan man går vidare.
- Filtret Group / source i Facebook Admin Tools förklarar nu tydligare när flera ägare visas: bekräftade admin-konton kan se ägarnamn där när dashboarden spänner över flera ägare, medan vanliga icke-admin-användare fortfarande bara ser sina egna spårade grupper.
- Mail Support Assistants fristående webb-dashboard renderar nu först ett lättviktigt skal och laddar därefter tyngre Tools-config + live-preview av olästa IMAP-mail direkt efter första page paint, så inloggningen inte längre känns blockerad av hela dashboardbygget.
- Multipart-baserade inkommande mail i den fristående Mail Support Assistant väljer nu den rikaste läsbara MIME-delen i stället för att blint behålla första icke-tomma delen, vilket löser fall där vissa mail tidigare såg ut att tappa nästan hela sitt synliga innehåll.
- Recent-case-korten på
/admin/mail-support-assistant försvinner nu direkt efter radering i stället för att vänta på en full sidomladdning, och den trådade Tools-ärendesidan faller nu tillbaka till den fylligare lagrade plain-text-bodyn när äldre reply-aware-bodyfält ser för hårt trimmade ut.
2026-05-17
- vBulletin-onboardingens invite-nycklar kan nu markeras som Testkod / endast dry run. De kan fortfarande användas för att gå igenom hela onboardingflödet, men ett godkännande ger inte längre någon riktig forumåtkomst eller skarpa vBulletin-grupper när nyckeln körs i dry-run-läge.
- SocialGPT Toolbox och de andra flytande SocialGPT-kontrollerna blir inte längre en redigerbar del av sidan när de öppnas från rich text-editors eller andra redigerbara iframe-/dokumentsytor. Tillägget mountar nu det flytande UI:t i en särskild icke-redigerbar overlay-root i stället.
2026-05-16
- Adminsidan Onboarding keys & presentation för vBulletin kraschar inte längre på striktare/äldre PHP-hostar när invite-länksblocken renderas. Operatörer kan nu öppna
/admin/security/vbulletin/onboarding/keys igen utan det tidigare Blade-syntaxfelet.
- Mail Support Assistant låter nu operatörer ignorera återkommande avsändare per mailbox direkt från den trådade ärendesidan, recent-case-korten eller mailboxsektionen i
/admin/mail-support-assistant. Operatören kan samtidigt välja att radera redan lagrade synkade trådar för samma avsändare, och standalone-klienter får nu samma mailboxnivålista via GET /api/mail-support-assistant/config så framtida mail från de avsändaradresserna hoppas över direkt.
- Admineditorn för användare visar nu en tydlig historik för lösenordsåterställningar. Operatörer kan se när en reset-länk skickades, om den kom från admineditorn eller den vanliga sidan Forgot password, och när användaren faktiskt slutförde återställningen. Det gör manuellt triggrade reset-mail mycket lättare att följa upp.
- Messenger-genvägen i vBulletins invite-kompositör öppnar nu den vanliga sidan för Facebook Messages (
facebook.com/messages) i stället för den separata sajten messenger.com.
- vBulletins invite-/nyckelsidor har nu en This is a trusted user-toggle för e-postbaserade inviter. När en sådan invite senare blir godkänd kan Tools låsa upp
/vbulletin/onboarding/keys för samma mottagaradress och skicka ett uppföljningsmail med den delegerade nyckelsidan plus den aktuella invite-listan för sluggen. Invite-kompositören väntar nu också tills du lämnar det aktuella mall-/avsändarfältet innan den sparar, så längre textredigeringar inte längre kastar ut markören ur textarea mitt under skrivandet.
- Den dedikerade nyckelgeneratorn för vBulletin har nu också ett exportblock för Google Docs för aktiva invite-koder. Operatörer kan kopiera en färdig sektion med rubrik, två korta registreringsinstruktioner och en riktig tabell med
Kod, Länk och Person?, antingen som rik HTML för inklistring i Google Docs eller som ren text-fallback.
- Whisper-uppladdningar rapporterar nu betydligt tydligare filfel. När en mediafil är för stor för den aktuella hosten, bara laddas upp delvis eller stoppas av PHP-/temp-lagringsgränser returnerar Whisper-UI:t och API:erna nu ett direkt valideringsfel på
media_file i stället för bara det generiska “failed to upload”-meddelandet. Whisper-statuspayloads visar nu också den effektiva upload-gränsen efter att PHP:s body-/uploadgränser räknats in.
2026-05-14
- SocialGPTs hjälpruta för Facebooks deltagarförfrågningar fortsätter nu att autoskanna matchad preview-/originalinläggskontext även när Facebook monterar dessa dialoger utanför
body i separata mount_*-rötter. Det gör att senare preview-/originalinläggstext mycket mer sällan stannar upp tills operatören måste trycka på Find preview element manuellt.
- Det finns nu ett nytt admin-only-kontrollrum Support & AI Budget där Tools-operatörer kan koppla en användare till en Ko-fi-lik medlemsnivå, spara Ko-fi-namn/e-post/referens, registrera medlems-/tips-/manuella ledger-rader och följa intern Tools AI-reserv både i euro och token.
- De publika sidorna Donate och Contact länkar nu båda direkt till Ko-fi-crowdfundingen utöver den tidigare PayPal-vägen, och donationsflödet har nu också en egen
/donate-landningssida i stället för att navbaren bara skickar vidare till PayPal.
- Social Media Tools och My Profile visar nu en kompakt sammanfattning av medlemskap / Tools AI-reserv när ett konto har kopplats till intern support-accounting-data, så SocialGPT-nära användare kan se aktuell nivå, intern AI Budget, kvarvarande reserv och spårat token-saldo på ett ställe.
- Den publika dokumentationssidan Stöd Tools innehåller nu en särskild sektion/tabell för AI Budget för alla sex medlemsnivåer, plus tydlig text om att all AI-assisterad användning körs server-side genom Tornevall Networks Tools och att Ko-fi-tips kan användas som interna top-ups för Tools AI-reserv i stället för som direkt OpenAI-access.
- Browserbot/SocialGPT-playback och andra Playwright-baserade browserbot-körningar hanterar nu ett vanligt Linux-serverfel tydligare: när
chromium-browser bara finns som en Snap-wrapper och servicekontots konfigurerade hemkatalog faktiskt inte finns, hoppar browserbot nu över den trasiga Chromium-vägen när det går, faller tillbaka till riktig Chrome om den är installerad, och förklarar annars att den verkliga lösningen är att skapa kontots hemkatalog eller köra under en användare med giltig hemkatalog.
- SocialGPTs ruta för Facebooks deltagarförfrågningar under Analyze user stänger nu sig själv när du lämnar
/groups/*/participant_requests, och gammalt uppföljningsläge för deltagaranalysen rensas så en äldre analys inte ligger kvar ovanpå andra Facebook-sidor.
- SocialGPTs hjälpruta för Facebooks deltagarförfrågningar fångar nu också strukturerade kommentarstrådar från originalinlägget när senare preview-/bild-GraphQL-svar (till exempel
CometPhotoRootContentQuery) laddas, och de flytande detected-context/debug-vyerna visar nu tydliga räknare och kommentarexempel så det blir lättare att se att den djupare trådkontexten verkligen följde med in i Analyze user.
- SocialGPTs hjälpruta för Facebooks deltagarförfrågningar kraschar inte längre på den saknade hjälparkedjan
getParticipantHistoryForSummary när tidigare modereringshistorik ska visas som badge eller matas in i Analyze user-kontexten.
- SocialGPTs hjälpruta för Facebooks deltagarförfrågningar använder nu också de inbyggda Facebook-profil-URL:erna i kortet (
/groups/<id>/user/...) som fallback-signal för kortidentitet och klättrar högre upp genom Facebooks djupare modereringsmarkup, så synliga request-kort inte lika lätt försvinner när Meta ändrar omgivande wrappers igen.
- SocialGPTs hjälpruta för Facebooks deltagarförfrågningar fortsätter nu att kontrollera klickade preview-/originalinläggsdialoger i några extra sekunder, så långsammare Facebook-laddningar inte lika lätt missar nytt Visa ursprungligt inlägg-innehåll efter den första snabba previewträffen.
- Facebooks admin-dashboard för modereringsstatistik är nu lättare både vid filteruppdateringar och vid första chartrenderingen: dolda charts tvingar inte längre fram en full omräkning av chart-data vid varje filtersubmit, och repeat-rejections-chartsen lägger inte längre extra PHP-tid på att sortera stora Eloquent-resultat i minnet innan de ritas.
- RSS-prenumerationsnotifieringar och X-bots auto-post-kö använder nu mer indexvänliga hot paths för sina version-count- respektive queued-reply-kontroller, vilket minskar en del av slow-query-trycket under feeduppdateringsburstar och X-botens reply-cykler.
- Browserbots interaktiva
--open-läge tvingar nu fram ett rimligt synligt browserfönster som standard (1600x1000 vid 40,40), så äldre persistenta profiler som mindes ett pyttelitet eller off-screen Chrome-fönster inte längre öppnas igen som en nästan osynlig tom ruta. Geometrin kan fortfarande justeras eller stängas av via BROWSERBOT_WINDOW_SIZE, BROWSERBOT_WINDOW_POSITION och BROWSERBOT_DISABLE_DEFAULT_WINDOW_BOUNDS.
- SocialGPTs Facebook-hjälp för deltagarförfrågningar fortsätter nu att följa och skanna samma matchade preview-dialog efter första träffen, så senare förändringar i previewn — även när operatören klickar vidare till Visa ursprungligt inlägg där inne — fortfarande kan bygga ut användaranalysens kontext.
- Valet av preview-kontext är nu också mer deltagarnamnsmedvetet, vilket gör att utspridda kommentar-/inläggsrader som hör till den analyserade personen lättare stannar kvar i analyskontexten medan generiskt preview-UI-brus filtreras bort hårdare.
- Analyze user för Facebooks deltagarförfrågningar kör nu ett uppslag utan webbsökning parallellt med ett uppslag med webbsökning både i första kortpasset och i senare preview-/originalinläggs-followups, så det snabbaste användbara svaret kan visas först medan rikare senare resultat fortfarande kan ersätta det när de tillför mer verifierat värde.
- Hjälpens åtgärd Find preview element tvingar nu också fram en extra preview-/kommentaromskanning efter att den fokuserat den matchade dialogen, vilket hjälper när Facebook redan har laddat mer av tråden men den vanliga DOM-bevakningen inte hann upptäcka förändringen i tid.
- Den första, synliga kortbaserade participant-analysen går nu på en snabbare väg utan webbsökning, medan senare preview-/originalinläggs-followups fortfarande kan använda webbsökning igen när den rikare kommentarkontexten innehåller påståenden som bör kontrolleras. Dessa uppföljningar lägger också tydligare analysvikt på personens egen synliga kommentar i relation till sparad gruppinfo/regler, och browsernotisen fastnar inte lika lätt i ett statiskt “vänta några sekunder till”-läge när Facebook redan slutat ändra sig.
- SocialGPTs hjälpruta för Facebooks deltagarförfrågningar frågar nu också Tools efter tidigare godkända/avvisade modereringsrader när ett synligt deltagarnamn/en synlig profil matchar rader som redan loggats via den separata Facebook admin-activity-ingesten. Matchande request-kort kan visa kompakta badgear för tidigare beslut, och Analyze user får samma sammanfattning som extra modereringskontext.
- Hjälpen för deltagarförfrågningar kraschar inte längre på en saknad funktion
collectParticipantContextNeighborhoodLines medan preview-/kommentar-followup-kontext byggs upp.
- Kortdetekteringen för Facebooks deltagarförfrågningar är nu tolerant igen: hjälpen klättrar högre upp från godkänn-knapparna, ignorerar preview-dialogytor under kortmatchningen och faller tillbaka till en bredare helsidesskanning när Facebooks participant-request-root blir för strikt, så synliga request-kort inte lika lätt fastnar på
Cards enhanced: 0.
- Deltagarhjälpen visar nu också direkta åtgärder för Open Toolbox och Verify fact igen både inline på upptäckta request-kort och i den flytande fallback-listan, i stället för att bara lämna kvar den nyare Analyze user-vägen där.
- Browserbot/SocialGPT-playback använder nu samma gemensamma Chromium-startflaggor som open mode:
--no-first-run plus --no-default-browser-check alltid, samt --no-sandbox plus --disable-setuid-sandbox automatiskt när starten körs som root. Samma delade launch-builder håller nu också den explicita laddningen av unpacked SocialGPT-extensionen (--disable-extensions-except=... / --load-extension=...) i synk mellan browserbots open mode, SocialGPT-playback och de persistenta Playwright-hjälparna för record/run.
- VirtualBox Manager försöker nu automatiskt igen mot samma VirtualBox-endpoint via en non-WSDL SOAP-klient när den genererade
?wsdl-adressen går att nå men PHP SOAP fallerar med ett Parsing WSDL- / Couldn't bind to service-liknande bindningsfel.
- VirtualBox Manager prioriterar nu de explicit interface-kvalificerade SOAP-metodnamnen från VirtualBox API före kortare alias som vanlig
logon, vilket löser anslutningar mot värdar som tidigare svarade med Method 'ns1:logon' not implemented trots att själva WebService-endpointen gick att nå.
- Den publika dokumentationen har nu också en särskild sida Stöd Tools, länkad från docsindex och den publika servicesidan, som förklarar vad som redan finns i plattformen, varför driftkostnaden växer och hur Ko-fi-nivåerna är tänkta att hjälpa.
- RSS-feed-endpoints kraschar nu inte längre bara för att en feedrad har tom sparad titel. När Tools inte kan få fram en användbar icke-tom feedtitel från källraden, kategorimetadatan eller selektorn faller den nu tillbaka till en säker generisk titel i stället för att dö i Atom-writern.
- Browserbots headed open-/record-/SocialGPT-playback-körningar kapslas nu automatiskt in i
xvfb-run när hosten saknar DISPLAY/WAYLAND_DISPLAY, så server-side-flöden som socdemo-play och prepare-socdemo-profile inte längre går rakt in i Chromes/Playwrights råa “Missing X server or $DISPLAY”-krasch när xvfb finns installerat.
2026-05-13
- SocialGPT låter inte längre webbläsartillägget välja egen modell för Verify fact. Tools bestämmer nu verifieringsmodellen server-side, och när webbsökning ingår i verifieringsflödet kan
gpt-4o väljas som primär modell.
- SocialGPTs flöde Analyze current preview för Facebooks deltagarförfrågningar behandlar nu den öppna preview-dialogen som primär textkälla när dialogen faktiskt är matchad, så rena kortsvar/kommentarer som inte syns i previewn dras inte längre automatiskt med i preview-uppdateringar.
- Preview-drivna rutor för SocialGPTs användaranalys förankras nu mot själva Facebook-preview-dialogen i stället för att driva iväg mot ett större omgivande DOM-block, vilket gör att den flytande analysrutan ligger bredvid previewn mycket mer tillförlitligt.
- SocialGPTs hjälppanel för Facebooks deltagarförfrågningar initierar nu sin flytande panel/rules-ruta mer defensivt, så konstiga DOM-race inte längre ska kunna krascha tillägget med
Cannot set properties of undefined (setting 'position') när hjälpen startar.
- SocialGPTs Rules / group info på Facebooks deltagarförfrågningar är nu gruppbunden per
/groups/<id> i stället för att återanvända samma regeltext för alla grupper. Den gruppbundna rules-mappen sparas nu också via Tools extension-inställningar så den kan synkas mellan installationer för samma användare/token, och på själva deltagarförfrågningssidan visas/används bara exakt den aktuella gruppens sparade regler.
- Browser Automation/SocialGPT för
fb-socdemo2-stats förklarar nu tydligare vad som faktiskt måste finnas på en ny server: profilseeden under storage/app/browser-automation/profile-seeds/... bär bara cookies/session/local state, medan själva SocialGPT-extensionen fortfarande laddas som unpacked kod från projects/socialgpt-chrome. Hjälpscripten försöker nu initiera submodulen tydligare och play/socdemo-doctor.sh visar exakt om det är submodulen, profilseeden eller runtime-profilen som saknas.
- Browser Automations vanliga
browserbot.sh --open-flöde är nu mer förlåtande på Linux-hostar där chromium saknas men Chrome finns installerat: en begäran om chromium kan nu falla tillbaka till installerad Chrome i stället för att stoppa direkt, och startutskriften visar både önskad browser och faktisk browser/exekverbar fil. SocialGPTs socdemo-hjälptexter har samtidigt rättats så de inte längre utgår från att varje checkout git-ignorerar fulla runtime-profiler; profilseeds är fortfarande den rekommenderade cache-strippade varianten när sessioner ska flyttas mellan hostar.
- SocialGPTs socdemo-hjälpscript löser nu samma browser-fallback redan innan browserbot anropas, så
play/prepare-socdemo-profile.sh och play/socdemo-play.sh inte längre dör direkt bara för att chromium saknas på en host som redan har Chrome installerat.
- Live-entrypointen
play/socdemo-play.sh är nu också självbärande för själva driftspåret i stället för att behöva den extra delade socdemo-helperfilen bara för att återställa seed, hitta SocialGPT-extensionen och lösa browser-fallback innan browserbot startar.
- Browser Automations opensessioner hanterar nu också det vanliga Linux/root-fallet bättre:
browserbot.sh --open lägger automatiskt till Chromium-familjens no-sandbox-flaggor när den startas som root, och play/prepare-socdemo-profile.sh avbryter inte längre hela klonings-/exportflödet bara för att ett browser-open-steg misslyckas.
- Laravel-/browserbot-installern kan nu också lägga in en riktig system-
chromium när det efterfrågas: INSTALL_CHROMIUM=true bash bin/install-playwright-laravel.sh (eller samma via bin/install-browserbot-stack.sh) provar nu hostens apt-paketnamn chromium-browser / chromium i stället för att varje host måste få Chromium installerat helt manuellt.
- Browserbots interaktiva opensessioner för unpacked extensions lägger nu också till Chromes debugflaggor för unpacked extensions, och runtime-loggen förklarar att en Chrome Web Store-banner som Installation is not enabled är väntad i just det sideload-läget i stället för att vara bevis på att den redan laddade unpacked-extensionen misslyckades.
- SocialGPTs profilförberedelseflöde låtsas nu inte längre att en tillfällig
--load-extension-sideload är samma sak som en riktig profilinstallation. play/prepare-socdemo-profile.sh öppnar nu source-profilen på chrome://extensions/ för en riktig Load unpacked-installation, och den senare target-verifieringen öppnas utan --with-socialgpt så den kopierade profilen testas i samma persistenta extension-state som playback faktiskt kommer använda.
- SocialGPT/OpenAI-timeouter är nu tydligare för klienter:
POST /api/ai/socialgpt/respond kan nu returnera ett mer användarvänligt user_message tillsammans med additiv metadata som retryable, error_code och upstream när Tools träffar en tillfällig OpenAI-timeout eller anslutningsstörning, i stället för att bara exponera ett rått transportfel. Verify-/källkontrollflöden kan dessutom behålla ett preliminärt svar och skicka med en notice när bara sista OpenAI-förfiningssteget timeoutar.
- Browser Automation kan nu exportera en cache-strippad profilseed för Git-vänlig återanvändning:
browserbot.sh --export-profile-seed skriver den återanvändbara delen av en förberedd browserprofil till storage/app/browser-automation/profile-seeds/<namn> medan browsercache och runtime-lås hoppas över, och browserbot.sh --copy-profile-from-seed kan återställa en live-profil från den exporterade seeden på en ny värd. SocialGPT-hjälpscripten använder nu samma flöde automatiskt.
- Browser Automation-installerkedjan är nu robustare på fjärrvärdar med Linux:
bin/fixnode.sh återinstallerar NodeSource-repot med explicit keyring och signed-by=-källrad i stället för att förlita sig på det äldre setup-scriptet via pipe, vilket löser det vanliga felet NO_PUBKEY 2F59B5F99B1BE0B4, och Chrome-hjälpen levereras nu med normaliserade shell-radbrytningar så bin/install-chrome-headless.sh inte längre fastnar på ett parserfel innan browserinstallationen ens har börjat.
- VirtualBox Manager pratar nu med VirtualBox via den reverse-proxade
vboxwebsrv-endpointen över SOAP i stället för via SSH/VBoxManage. Serverkorten använder nu port 8443 som standard, inloggningsfälten är märkta som API-inloggning, och hjälptexterna/dokumentationen förklarar att host/port ska peka på WebService-proxyn.
- RSS Watchs feedfrågesvar sparar nu kvar sina konkreta referensträffar tillsammans med svaret, och följdfrågor kan återanvända dessa sparade referenser i stället för att bara utgå från den tidigare frågetexten och retrieval-termerna. Rutorna för senaste svar på
/feed och i site-specifika feedpaneler visar nu också när webbsökning faktiskt användes och listar eventuella retur-citations/källänkar.
- RSS Watchs vBulletin-liknande RSS2-import är nu robustare: item-fält som
content:encoded, dc:creator, guid, pubDate och kategori hanteras mer försiktigt, HTML som är entitets-escapad normaliseras utan aggressiv strippning, och duplicate-kontrollen kan nu prioritera GUID-identitet innan den faller tillbaka till den äldre länkbundna matchningen.
- RSS Watchs progress-UI för feedfrågor är nu lättare mot servern vid långkörande svar: webbläsaren staplar inte längre överlappande
/status-anrop, fastnade poll-anrop avbryts och körs om med backoff, bakgrundsflikar hanteras renare, och webbläsaren tar nu ett färdigt bakgrundssvar från process direkt när det redan innehåller slutsvaret.
- Återkommande browserbot-/Playwright-beroendefel komprimeras nu efter det första fullständiga varningsblocket, så cronloggar inte längre fylls med exakt samma Node/npm/Playwright-reparationsmeddelande vid varje misslyckad körning.
- SocialGPTs Facebook-flöde för Analyze user på deltagarförfrågningar fortsätter nu lyssna på preview-dialogens GraphQL-svar även när den separata admin-activity-insamlingen är avstängd, och hjälpen extraherar nu en kompakt deltagarspecifik sammanfattning av kommentar-/inläggspreview i stället för att dra in stora råa payload-dumpar i analyskontexten.
- SocialGPTs hjälp för Facebooks deltagarförfrågningar fortsätter nu också följa en öppen förhandsgranskningsdialog som aktiv deltagaryta även om Facebook renderar om den underliggande kortlistan, så hjälpen faller inte längre tillbaka till ett falskt läge där den påstår att inga synliga kort matchade medan rätt preview fortfarande visas.
- SocialGPTs deltagarhjälp visar nu också en liten Detected context-lista i den flytande panelen, med aktuell deltagare/profilinfo samt synliga grupp-/vän-/profilsignaler, preview-ledtrådar och originallänkar när de finns, och hjälpen kan nu köra Analyze current preview från den fallback-kontexten även när inga synliga request-kort just då matchas.
- SocialGPTs deltagarhjälp hittar nu också root-mountade preview-dialoger mer tillförlitligt genom att läsa dialogernas label-metadata inne i Facebooks separata
mount_*-rötter, och den flytande hjälpen har nu en ny Find preview element-åtgärd som scrollar fram och markerar den dialog som just nu är matchad.
- SocialGPTs verify-liknande laddningsruta för Analyzing user… visar nu en tydligare live-progress med stegnummer, förfluten tid och en rörlig progressbar i stället för att mest stå still på den gamla statiska
Checking now…-spinnern.
- SocialGPTs parser för Facebooks participant-preview extraherar nu också rikare GraphQL-text-/messagefält och källmetadata — inklusive
preferred_body.text, body_renderer.text, originalinläggets message-text, author names, tidsstämplar, comment/post-id:n och Facebook-URL:er — och slår ihop den normaliserade preview-kontexten med användaranalys-requestet innan DOM-only-fallback används.
browserbot.sh prioriterar nu en installerad Chrome-binär för SocialGPT-/tilläggsbaserade Playwright-körningar när ett script fortfarande säger chromium men Playwrights bundlade Chromium saknas, och startloggen visar nu både önskad browser och faktisk browser/sökväg för körningen.
2026-05-12
- SocialGPTs flytande verify-/analyze-resultatruta animerar nu sin lila laddningsspinner korrekt igen i stället för att lämna den fast i ett statiskt läge medan kontrollen körs.
- SocialGPTs flytande browser-UI monteras nu mer defensivt när en sida fortfarande ligger i ett tidigt eller tillfälligt DOM-läge, vilket minskar
appendChild-liknande tilläggskrascher på sidor som forumtrådar.
- SocialGPTs fakta-/användaranalysrutor tolererar nu också lite stökigare AI-formatering bättre, inklusive indragna rubriker, numrerade listor och enkla HTML-radbrytningar som blandas in i markdown-liknande svar.
- SocialGPT-popupens checkbox Use dev / beta server ligger nu kvar avstängd som standard och kan inte längre råka bli aktiverad av äldre sparade värden som ser sanningslika ut.
- Skyddade webbsidor som
admin/social-media-tools skickar nu åter utloggade besökare till det vanliga inloggningsflödet i stället för att visa den generiska profilerade publika 500-felsidan.
- Publika/browserbaserade 500-fel referenskoder återanvänds nu i det interna felmailet och i Laravel-loggkontexten, så support lättare kan matcha en referens från en skärmbild mot rätt backendfel.
- SocialGPTs Facebook participant-request Analyze user skickar nu med den synliga request-korttexten från början, inklusive medlemsfrågor, synliga svar/regler, grupp-/profilledtrådar och preview-/kommentarmarkörer. Analysboxen visar nu mer interaktiva progress-steg och kan erbjuda Update analysis när Facebook laddar extra kommentar-/inläggspreview eller relevant Graph/XHR-kontext efter klick i kortet.
- DNSBL removal audit-mail begränsas nu till externt hanterade site-/pluginintegrationer, till exempel WordPress-pluginförfrågningar, i stället för att maila varje intern already-not-listed/no-op-cleanup. Dessa mail kan också innehålla DNS-sidoinfo, som reverse DNS för inskickad IP och uppslagna adresser för källsajtens host, så site-origin review blir lättare.
- Publik/browserbaserad felhantering är nu striktare: icke-adminbesökare får inte längre ramverkets debugdetaljer även om debugläge råkar vara aktivt, medan interna exception-detaljer kan mailas till konfigurerad supportadress för uppföljning.
- SocialGPT har nu ett dedikerat personligt tokenflöde (
provider_socialgpt) som kan skapas för Chrome-tillägget utan att kontot får direkt OpenAI API-access. Direkta OpenAI-backade endpoints kräver fortfarande separat OpenAI-accessansökan och godkännande.
- Direkta OpenAI-accessansökningar skickar nu en supportnotis när användare skickar in eller uppdaterar en ansökan, så API-accessbehov syns även utanför adminsidan.
- Adminverktyget för mailutskick stöder nu personaliseringsvariabler, läser standardutkast från
docs/pre-email.md, och har en Send test to me only-åtgärd så admin kan provskicka ett riktigt mail till sig själv innan utskick till användare.
dnsbl-engine-rapporter kan nu skickas direkt, timvis eller dygnsvis via SPAM_REPORTS_FREQUENCY, så brusiga körningsrapporter kan samlas till digest-mail.
- Publika Tools-felsidor i browsern använder nu en generisk profilerad sida i stället för ramverkets debug-renderare på publika hostar. Sidan visar ett begripligt meddelande, HTTP-status och en kort referenskod utan att exponera stacktraces, SQL-frågor, lokala sökvägar eller serverinfrastruktur.
- Användarhanteringen har nu ett adminbegränsat Mail all users-flöde med mottagarräkning, preview, dry run och obligatorisk
SEND TO USERS-bekräftelse innan ett riktigt massutskick skickas.
- SocialGPTs verifierings- och användaranalysflöden använder nu ett säkrare trestegsupplägg: ett vanligt preliminärt AI-svar, en separat webbsökningslookup när requestet kräver det, och ett sista svarspass som kan rätta eller skärpa det preliminära svaret med källunderlag. Om webbsökningen misslyckas eller inte tillför användbart underlag kan det preliminära svaret fortfarande returneras, men metadata markerar tydligt att oberoende verifiering saknas eller misslyckades i stället för att låtsas att svaret är verifierat.
- SocialGPTs fakta-/användaranalysruta renderar nu säkra markdown-länkar som klickbara länkar och visar även strukturerade källänkar från Tools, samtidigt som osäkra URL-scheman och script-liknande markup blockeras.
- SocialGPTs fakta-/användaranalysruta renderar nu också det första markdown-svaret som säker HTML (till exempel rubriker, fetstil och listor) i stället för rå markdown, och den första Analyzing user… / Verifying facts…-vyn använder nu en snyggare förhandsvisningsruta i stället för att platta ut all importerad kontext till en enda textvägg.
- Facebook-hjälpen för
participant_requests har nu också en inbyggd ruta för Regler / gruppinfo direkt i browsern, så operatörer kan uppdatera den extra gruppspecifika modereringskontext som används av Analysera användare utan att lämna den aktuella Facebook-sidan. När en Tools bearer token finns konfigurerad synkas samma regeltext tillbaka till Tools.
- SocialGPTs fakta-/användaranalysruta håller nu längre svar läsbara genom att bara svarstexten och källänkarna scrollar internt medan rubrik och åtgärdsknappar ligger kvar. Verifieringsanrop använder också en större svarsbudget, så källstödda faktakontroller löper mindre risk att sluta mitt i en mening.
- ToolGPT/X-botens frågor om dokumentation, changelog och stöd nu söker tydligare i de publika Tools-dokumenten och ändringsloggarna innan svar byggs, så påståenden som “det finns ingen dokumentation” eller “ToolGPT stödjer inte detta” i mindre grad faller tillbaka till felaktiga generella gissningar.
- Browser automation / Playwright-installation på Linux-hostar fallerar nu tydligare när servern fortfarande kör en gammal Node-runtime eller har trasig npm/npx-kedja, och SocialGPT-browserbot-playback stoppar nu med ett direkt “project-local Playwright is not installed”-fel i stället för att bara bubbla upp ett rått Node-
Cannot find module 'playwright'-stacktrace.
- Startsidan för Social Media Tools är nu öppen för alla inloggade användare, så vanliga extension-användare kan öppna installationsguiden och skapa eller rotera sin personliga Tools AI-token utan att behöva management-behörigheten för Social Media Tools. Facebook-/X-operatörsytor och audit-vyer kräver fortfarande behörighet.
- Startsidan för Social Media Tools har nu ett eget ansökningsflöde för SocialGPT/OpenAI-access. Användare som ännu inte är godkända kan skicka ansökan direkt från extension-/token-sidan, och felmeddelanden vid token/API-anrop pekar nu tillbaka dit.
- Användarens profilsida och startsidan för Social Media Tools visar nu kontots SocialGPT/OpenAI-begränsningar direkt, inklusive accessläge, dagsbudget/kvarvarande användning, API-requestlimit, standardmodell/outputbudget och om webbsökning är tillgänglig.
- Laravel-timeouter från
tools.tornevall.com forwardas inte längre till Laravel error-notifieringen när de är den brusiga typen Maximum execution time ... exceeded; andra hostar och andra feltyper kan fortfarande rapporteras.
2026-05-11
- SocialGPTs Facebook-helper för deltagarförfrågningar är nu striktare låst till top-level Facebook-sidor för deltagarförfrågningar, så orelaterade sidor som Threads activity-vyer inte längre initierar participant-scannern eller ger
ReferenceError-fel från participant-scanner-koden.
- SocialGPTs verify-/fact-check-anrop som kräver oberoende verifiering tvingar nu OpenAI Responses API:s webbsökningsverktyg mer pålitligt i stället för att bara hoppas att standardinställningen lägger till det. Verktyget känner nu också igen nästlade webbsökningsanrop bättre, vilket minskar falska
independent_verification_missing-utfall som tidigare kunde bero på adapterns payload-/detekteringslogik.
- SocialGPTs helper för Facebooks deltagarförfrågningar är nu lättare på tunga modereringssidor under
/groups/*/participant_requests: skanningen av synliga kort är mer försiktig, kortpoäng cachas mer aggressivt, den flytande scannern visar nu skanningstid och inline-åtgärderna försöker nu hellre lägga sig nära kortets befintliga action-/...-yta när Facebook erbjuder en stabil ankaryta där.
- ToolGPT/X-botten har nu ett andra repetitionsskydd som riktar sig mot vanliga mänskliga diskussioner, inte bara AI-till-AI-loopar: när de senaste 5–7 synliga posterna tydligt bara går runt i samma poäng kan Tools nu antingen styra nästa svar mot att föra diskussionen framåt med en ny vinkel eller klargörande fråga, eller pausa tråden helt när den senaste växlingen har blivit en repetitiv återvändsgränd.
- Tools exponerar nu en verkligt generell Microsoft-authyta utöver den befintliga Microsoft To Do-integrationen: de föredragna browser-rutterna är nu
/oauth/microsoft/*, en ny generisk status-endpoint finns på GET /api/microsoft/auth/status, och den delade Microsoft-/Graph-appen rapporterar nu både stöd för personliga konton och Microsoft Entra-konton för arbete/skola. Äldre /oauth/microsoft-todo/* och /api/microsoft-todo/oauth/start finns kvar som kompatibilitetsalias.
- X-botten kör nu en sista ”ser det här fortfarande avhugget ut?”-failsafe precis innan ett reply postas till X. Om den sparade kandidaten fortfarande ser ut som ett halvfärdigt nära-max-fragment försöker Tools först göra en sista ren trimning och blockerar sedan postningen helt i stället för att publicera en halv mening.
- ToolGPT/X-botten håller nu en något mjukare lokal reply-målgräns under X:s hårda 260-teckensgräns, och sista trimsteget försöker nu avsluta på hela meningar i stället för att pressa kandidatsvaret ända upp mot maxlängden. Synlig
@author-taggning räknas fortfarande in i den slutliga postade längden.
- ToolGPT tolkar nu också bredare frågor i stil med ”vilka är de relevantaste/senaste nyheterna från nyhetsflödet idag?” som en RSS-/feedarkiv-lookup, även när posten aldrig bokstavligen säger
sök i RSS. När den typen av allmän feedsammanfattning saknar riktiga ämnesnyckelord faller Tools nu tillbaka till färska feedposter i stället för att missa RSS-intentionen helt.
- Publika RSS-översikter cachar nu de dyrare edited-post-räknarna en kort stund i stället för att räkna om samma
COUNT(DISTINCT content_hash)-aggregat vid varje närliggande sidladdning. Manuella RSS-purgeåtgärder nollställer nu också dessa cachade räknare direkt efter cleanup.
- RSS-duplicate-cleanupen är nu bättre på att slå ihop brus från återkommande importer där embed-/player-script varierar mellan körningar. Auto-purge för cautious links och den manuella åtgärden Purge noisy duplicates räknar nu om signaturer från själva artikeltexten och ignorerar script/style-block som aldrig borde ha räknats som riktiga innehållsrevisioner.
- On-demand-speglad Slack-loggning för X-bottens audit-event är nu smalare: att aktivera
audit_x_bot skickar inte längre rutinmässigt poll-brus till Slack, utan speglingen reserveras nu för faktiska reply-resultat som verkligen har postats.
- Kövägen för X-bottens reply-postning och RSS-importens duplicate-kontroll har stramats upp för tyngre trafik. Tools använder nu ett mer riktat index för X-bottens queued/rate-limited-kontroller, och RSS-importören föredrar nu hash-baserad duplicate-detektering i stället för att upprepat köra den äldre dyra exact-text-frågan mot stora artikelkroppar.
- Den publika guiden för ToolGPT/X-botten listar inte längre råa bootstrap-hemligheter eller namn på miljövariabler för X-integrationen. Samma guide beskriver nu också keyword-styrningen som en hjälpsamhets-/prioriteringsmodell — till exempel att "svara om X-botten själv först" eller "prioritera fact-check-svar först" — i stället för att få keyword-regler att låta som rigida ideologiska overrides.
- X-bot-aktivitet kan nu speglas till Slack på begäran via Slack log routing-kategorin
audit_x_bot, även när den vanliga Slack-togglen för manuell review är avstängd. Därmed går den registrerade modererings-/runtime-strömmen att använda som auditflöde i Slack i stället för att bara finnas som direkta review-notiser.
- ToolGPT/X-botten strippar nu bort oavsiktliga råa JSON-kuvert innan ett reply sparas eller postas, så ett publikt X-svar inte längre riskerar att läcka ut som en bokstavlig
{ "message": ... }-payload när ett recovery-/rewrite-steg råkade svara maskinläsbart i stället för med ren text.
- Den schemalagda X-bot-pollern eskalerar nu automatiskt när körningen fastnar på provider-sidans budgetblockering: om botten stannar därför att det aktiva X-/providerprojektet träffat ett spend-cap eller ett credits-exhausted-läge skickar Tools nu ett varningsmail till konfigurerad supportmottagare och kan dessutom skicka ett SMS till konfigurerat mobilnummer för sajtägaren. Larmet dedupliceras för den aktuella incidenten och nollställs automatiskt efter nästa lyckade X-bot-körning.
- Publika
/out/{contentId}-omdirigeringar för RSS-artiklar cachar nu färdigupplösta externa länkar och hoppar över onödiga feed-uppslag när den sparade länken redan är absolut. Återkommande artikelklick blir därmed mycket mindre beroende av RSS-databasen och risken för timeout minskar vid tyngre crawlertrafik.
- Invite-kompositören för vBulletin visar nu varje sparad invite-nyckels aktuella status direkt i mottagarlistan, och nycklar som redan är förbrukade, utgångna eller inaktiva ligger kvar bara för granskning medan mottagarredigering samt Messenger-/mailutskick låses.
2026-05-10
- Browserbots SocialGPT-playback kan nu överleva Snap-hanterad Chromium på Linux-hostar där den sparade Tools-browserprofilen ligger utanför Snaps skrivbara sandbox. Wrappern speglar nu profilen till en Snap-säker runtime-sökväg under körningen och synkar tillbaka uppdaterad sessionsdata efteråt, vilket undviker det vanliga felet
Chromium cannot read and write to its data directory.
- SocialGPT-hjälpen för Facebook
participant_requests försöker nu först fästa sig vid stabila moderationsrader i vänsterspalten, som kommentars-/förhandsgranskningsraden eller raden för obesvarade frågor, innan den faller tillbaka till ...-ytan uppe till höger. DOM-bevakningen hålls nu också till själva deltagarförfrågningsytan så tunga moderationssidor orsakar färre onödiga omskanningar.
- Den flytande Facebook-popupen för participant scanner går nu att dra runt och kommer ihåg sin senaste position i stället för att alltid hoppa tillbaka till nedre högra hörnet.
- Den gamla otydliga
SG-etiketten för participant requests är nu borta: huvudknappen heter tydligt Analysera användare, och Toolbox-importen strukturerar nu synliga grupp-/vänledtrådar, medlemsfrågor, tecken på obesvarade frågor samt profil-/bakgrundsledtrådar innan råkortets text listas.
- Omskanning av participant requests beror nu inte längre bara på den manuella skanningsknappen: hjälpen försöker nu också skanna om automatiskt efter scroll/load-more-stopp samt via en lätt timer-fallback, och popupen dubblar inte längre Facebook-kontrollerna Skicka köade / Release stuck som redan finns på ingest-sidan.
- Deltagarhjälpen visar nu bara Visa kort och Analysera användare i själva Facebook-korten, startar dockad uppe till höger i stället för långt ned på sidan, och verify-läget faller nu tillbaka mjukare när OpenAIs webbsökning strular så att verifieringen inte bara tvärstannar.
- ToolGPT/X-botten kör nu alltid ett internt RSS-/arkivpass när RSS-evidens är aktiverat: OpenAI föreslår först de mest relevanta sökorden, Tools gör sedan en lokal SQL-sökning i RSS-arkivet, och eventuella träffar hålls som valfri stöd-kontext i stället för att automatiskt ta över förstasvaret.
- X-bottens adminsida kraschar nu inte längre när Recent interactions lägger sitt synlighetsfilter direkt på kontots relationsfråga, och när operatören uttryckligen väljer att visa icke-publicerbara rader ligger de verkligt hårdblockerade diagnostikraderna nu i en egen sektion i stället för att blandas tillbaka in i den vanliga granskningskön.
- Microsoft To Do-sidan visar nu en riktig direkt auth-startlänk i browsern utöver callback-URL:en, så operatören kan kopiera eller öppna en faktisk Tools-sidig OAuth-start-URL i stället för att bara få callback-endpointen visad.
- Manuellt skapade användarkonton markeras nu som e-postverifierade som standard i adminflödet för att skapa användare, och samma användareditor har nu också en tydlig toggle för e-postverifiering så att äldre manuellt skapade konton kan rättas direkt utan att vänta på ett separat klickflöde via e-post.
- X-bottens adminsida är nu lättare att söka i och skanna: rå serialiserad interaktionspayload laddas först när operatören uttryckligen öppnar den, och den stora händelseloggsektionen ligger nu hopfälld tills den efterfrågas i stället för att fylla sidan direkt.
- Tydligt icke-publicerbara X-bot-rader döljs nu som standard i Recent interactions, med en uttrycklig visa-toggle för diagnostik. Samma uppenbart oengagerade uppföljningstrådar blockeras nu dessutom innan Tools lägger pengar på AI-generering av svar, i stället för att först skapa ett kandidatsvar som X ändå aldrig skulle acceptera.
- X-bottens händelselogg har nu också en egen adminsida, så den vanliga X-bot-konsolen inte längre behöver bära hela runtimehistoriken inline. Spend-cap-varningar där och i huvuddiagnostiken förklarar nu också att blockeringen kan komma från ett separat project/account-spend cap även när förbetalda provider-credits fortfarande finns kvar.
- SocialGPTs hjälp för Facebooks deltagarförfrågningar har nu en starkare fallback när Facebooks layout är besvärlig: den flytande SG participant-scannern kan lista de synliga korten, hoppa till rätt kort och starta Analysera i Toolbox / Verifiera fakta direkt därifrån. Samma åtgärder fäster nu också Toolboxen/faktarutan mot det valda kortet i stället för att öppnas i ett generiskt löst hörn.
- Microsoft To Do-callbacken återställer nu rätt Tools-webbsession från den signerade OAuth-state:n innan användaren skickas tillbaka till
/settings/integrations/microsoft-todo, så en lyckad callback inte längre fastnar bakom en ny inloggningsvägg bara för att den gamla webbsessionen hann försvinna.
- Invite-kompositören för vBulletin-registreringen behandlar nu Messenger-mallen som primär källa även för standardmailet: när sparad HTML fortfarande bara var den härledda standardversionen regenereras e-postmallen nu automatiskt när Messenger-texten ändras, ända tills en operatör skriver en egen separat HTML-version.
- X-botten fastnar nu mindre lätt bakom en ogenomskinlig intern non-replyable-/policyblockering: när den strukturerade reply-stegen slutar i ett generiskt non-replyable-resultat utan begriplig förklaring behåller Tools nu den riktiga provider-feltexten när den finns och gör dessutom ett sista plain-text-försök att rädda fram ett direkt svar innan interaktionen lämnas blockerad.
- Området Recent interactions på X-bottens adminsida är nu AJAX-paginerat, så operatören kan bläddra sida för sida i lagrad interaktionshistorik utan att hela adminsidan laddas om.
- X-bottens interaktionskort i admin markerar nu hårda refusals betydligt tydligare: när ett kandidatsvar är non-replyable eller när X ändå skulle neka postningen (till exempel för att botten inte faktiskt engagerades i tråden) visar kortet nu en egen varnings-/felruta med den konkreta orsaken och håller Approve/post avstängd i stället för att låta operatören klicka rakt in i samma refusal igen. Fältet Structured reply max attempts ger nu också en direkt förklaring av intervallet 1–5 i stället för ett vagt invalid-data-fel.
- X-bottens adminpanel har nu en starkare opt-out-hantering: operatörer kan granska alla sparade opt-outs, opta in ett konto igen direkt, konfigurera användarnamn/X-user-id:n som alltid ska åsidosätta opt-out, eller tillfälligt ignorera alla sparade opt-outs globalt.
@Tornevall betraktas nu alltid som skyddad och kan inte längre effektivt blockeras av X-bottens opt-out-logik.
- ToolGPT fastnar nu mindre lätt i Grok eller andra kända AI-konton när vanliga människor också är aktiva i samma tråd: i blandade konversationer tonar Tools ner AI-kontot som reply-fokus och försöker i stället svara de icke-AI-deltagare som faktiskt är inblandade. Avsaknad av keyword-regel markeras nu också tydligare som ett normalt fallback-läge i stället för något som i sig ska blockera ett svar.
- X-bottens adminpanel låter nu operatörer styra hur många strukturerade publika reply-försök Tools ska göra innan den ger upp. Det nuvarande stödda intervallet är 1–5, vilket täcker den befintliga GPT-5.4-stegen för reasoning plus den sista
gpt-4o-fallbacken.
- ToolGPT markerar nu fler X-svar som Publicera inte redan innan operatören träffar X-API:ets refusal: om en sparad uppföljningstweet inte faktiskt var en direkt mention eller ett direkt svar till boten visas interaktionen nu som icke-publicerbar i stället för att se publicerbar ut ända tills X nekar postningen.
- ToolGPTs regel-override är nu mindre ivrig på extremt tunna tweets som bara innehåller en mention och en länk. Där används fallback-instruktion/fallback-stämning oftare i stället för att ärva en äldre trådregel bara för att omgivande kontext råkade innehålla matchande nyckelord.
- ToolGPTs skydd mot repetitiva AI-loopar fokuserar nu på den senaste växlingen i tråden i stället för gammal kontext, så en äldre Grok-lik upprepning blockerar mycket mer sällan en konversation som redan har gått vidare.
- ToolGPT/X-bottens opt-out-detektering är nu striktare med avsikten: generiska klagomål som bara råkar innehålla ord som
stop eller svenska sluta behandlas inte längre som opt-out-kommandon om formuleringen inte tydligt ber botten att sluta svara/engagera sig. Ensamma stop / sluta räknas inte heller längre som opt-out. Äldre automatiskt sparade falska positiva opt-outs kan nu dessutom släppa automatiskt när samma person senare faktiskt engagerar botten igen med en normal mention. Adminens interaktionskort har fortfarande en åtgärd för Opt in again när man vill återställa manuellt.
- ToolGPT/X-botten faller nu tillbaka till ett normalt kontextbaserat svarsläge när en verifieringslik prompt ville använda webbsökning men webbsökningsverktyget faktiskt inte användes, i stället för att posta samma standardsats om saknad verifiering direkt i den publika tråden.
- X-botten presenterar nu Required closing hashtags tydligare som ett valfritt avancerat fält i stället för att fasta brandade hashtags ska se ut som en normal standardsstrategi för replies.
- Verifieringstunga AI-flöden är nu striktare med vad som får räknas som verifierat: när en förfrågan kräver riktig web search och OpenAI inte faktiskt använder web search-verktyget returnerar Tools nu ett tydligt utfall av typen oberoende verifiering saknas i stället för att låtsas att svaret blev oberoende verifierat.
- Microsoft OAuth har nu också en mer plattformsneutral API-startpunkt på
GET /api/microsoft/oauth/start. Den äldre vägen GET /api/microsoft-todo/oauth/start fungerar fortfarande för bakåtkompatibilitet, men den generiska vägen är nu den rekommenderade när samma Microsoft-appregistrering ska kunna användas bredare i Tools-plattformen.
- SocialGPT-webbläsartillägget skriver nu betydligt mindre aggressivt till Chromes extension-lagring under bakgrundsloggning och inställningsrefresh, vilket minskar
MAX_WRITE_OPERATIONS_PER_MINUTE-fel i tilläggets background worker.
- ToolGPT har nu en safeguard mot repetitiva bot-till-bot-återvändsgränder: när en känd AI-deltagare som Grok fortsätter att upprepa samma eller nästan samma svarsmönster och tråden inte längre går framåt på ett meningsfullt sätt kan Tools nu markera den tråden som färdigbehandlad i stället för att låta samma utbyte fortsätta i timmar.
- X-botten känner nu igen svensk/engelsk verifieringsformulering tydligare, så mentions om att kolla fakta, källor, belägg eller RSS-/feedinnehåll kan gå in i ett starkare fact-check-spår i stället för att ligga kvar som ett generiskt svarsläge. När den typen av fråga ställs kan prompten nu också få med matchande evidensutdrag från Tools RSS-arkiv.
- Verifieringstunga OpenAI-flöden behandlar nu reasoning effort och web search som två olika reglage: när aktuell miljö stöder OpenAI Responses API:s web search-verktyg kan Tools nu begära riktig webbsökning för current-info-kontroller i stället för att bara höja reasoning-nivån.
max_reply_length=0 betyder inte längre att för långa replies lämnas orörda: Tools håller nu fortfarande den normala hårda X-gränsen före postning även när den extra lokala Tools-cappen är avstängd.
- X-bottens regelval är nu mindre benäget att fastna på första svaga keyword-träffen: Tools poängsätter nu aktiva regler, väljer den bäst matchande regeln och låter fastnade interaktioner processas om med de senaste inställningarna och den nya regelanalysen.
- Den publika dokumentationen innehåller nu också en egen ToolGPT-ändringslogg under
/docs/sv/toolsgpt-changelog, tänkt som den publika referensen när människor undrar hur X-botten har utvecklats över tid utan att intern runtime-information exponeras.
- Facebooks helper för deltagarförfrågningar är nu betydligt tåligare mot den nuvarande
participant_requests-layouten: kortknapparna Analysera i Toolbox / Verifiera fakta letar nu bredare i DOM:en, hoppar säkrare över bulkverktygsraden och återställer sparad Tools-state för checkboxarna på Facebook Admin Tools-sidan mer konsekvent. Samma adminsida visar inte heller längre samma gröna bekräftelseruta två gånger.
- Microsoft To Do har nu en särskild autentiserad API-startpunkt för OAuth på
GET /api/microsoft-todo/oauth/start, och callback-URL:en kan nu slutföra kopplingen även om webbläsaren tappat sin aktiva Tools-webbsession så länge den signerade OAuth-state:n fortfarande matchar rätt användare/transaktion. Integrationssidan förklarar nu också tydligare det vanliga unauthorized_client-felet när tenant-valet inte matchar Azure-appens kontotypsstöd.
- Facebook Admin Tools-sidan sparar nu sina två viktigaste Tools-styrda huvudväxlar direkt när du klickar på dem, och tillägget följer nu dessa Tools-värden striktare vid laddning/routbyten: admin activity-hjälpen fortsätter inte längre bara på grund av gammal lokal cache, och participant-hjälpen på
/groups/*/participant_requests vaknar nu betydligt säkrare när participant-scannern är aktiverad i Tools.
- Den trådade svarsrutan i Tools för Mail Support Assistant är nu lättare att styra per utkast: operatören kan välja en tillfällig mood/ton, modell och reasoning effort innan ett direktutkast genereras, och Tools normaliserar nu också hälsning samt avslutande footer/signatur automatiskt så genererade eller manuellt justerade svar inte råkar skickas utan ordentlig inledning eller avslutning.
- X-botten fortsätter nu att bevaka redan engagerade trådar smartare: när botten redan dragits in i en konversation behöver senare uppföljningssvar i samma tråd inte längre upprepa
@ToolGPT bara för att hamna i Tools för granskning/svarshantering, och explicita mentions felklassas inte längre som keyword-only bara för att ett bevakningsord också råkade matcha.
- SocialGPT-webbläsartillägget kan nu hjälpa till på Facebook-gruppers
participant_requests-sidor när funktionen aktiveras från Tools: synliga deltagarförfrågningskort får kompakta åtgärder för Analysera i Toolbox och Verifiera fakta, och participant-scannerns av/på-läge styrs från Facebook-inställningarna i Tools i stället för från en separat lokal popup-växel.
- X-botten har nu en dedikerad inställning för Required closing hashtags i AI-panelen. När en eller flera hashtags läggs in där flyttar Tools nu alltid samma hashtags till allra sist i det slutliga svaret, i samma ordning, även efter lokal förkortning eller förberedelse inför repost/postning.
- Arbetsflödet för vBulletin-registreringens invite-nycklar är nu enklare att lämna över:
/admin/security/vbulletin är nu den tydliga förkonfigureringssidan för grupper, mallar, destination och andra standardvärden, medan adminens och de delegerades nyckelsidor nu fokuserar på att välja ett onboardingflöde, en mottagare och bara valfria avancerade overrides. De tidigare bulkblocken för att kopiera aktiva nycklar/direkta URL:er har tagits bort från nyckelsidorna.
- Invite-kompositören för vBulletin registreringsutskick märker nu testutskicket tydligt som en riktig dry run till det inloggade Tools-kontot, så operatören kan kontrollera e-postmallen säkert innan den riktiga invite-mailet skickas till den sparade mottagaren.
- X-bottens adminsida visar nu en kvarstående varningsruta när en provider-side billing/spend cap blockerar botten, och den varningen försvinner automatiskt igen efter nästa lyckade X-bot-körning.
- Den detaljerade online-adminvyn kan nu göra mer än att dölja betrodda IP-/CIDR-rader: admins kan också lägga till egna regler av typen user-agent innehåller (till exempel
dnsbl-engine-tools-client) så att interna verktyg eller automationsklienter räknas som botar/crawlers överallt där live-räknarna visas, och botraderna visar nu tydligare botnamn och kategorier i både /online och adminvyn.
- vBulletin-registreringen använder nu tydligare registreringsord på publika sidor, i services-/startsidesgenvägarna och i huvuddokumentationen i stället för att luta så hårt på ordet onboarding.
- Tools har nu också en kort changelog för vBulletin-registreringen under
/docs/sv/vbulletin-registration-changelog, tänkt som en kompakt operatörssammanfattning som enkelt kan kopieras över till egna anteckningar eller ett separat Google Drive-dokument.
- De inbyggda Messenger-/e-postmallarna för vBulletin-registreringen är nu mer pedagogiska som standard: de förklarar att mottagaren ska slutföra forumregistreringen, spara sin statussida i Tools efteråt och kontakta
support@tornevall.net plus inbjudaren om länken eller koden inte fungerar.
- Auditloggen i vBulletin-admin visar nu tydligare när den publika registreringssidan och den personliga registreringsstatusen öppnades, och loggen för invite-kodsanvändning är också tydligare med när en riktig registreringsförfrågan skapades.
- Tools har nu också en dedikerad Playwright-guide under
/docs/sv/playwright, särskilt fokuserad på när du ska använda lagrade browser-automation-script, browserbot.sh, record/open/profile-clone-flöden och projektets Playwright E2E-runner.
- Mail Support Assistants svar som skickas direkt från den trådade ärendesidan i Tools genererar och sparar nu också ett stabilt reply issue-id när ett äldre överlämnat uppföljningsärende fortfarande saknade ett, så utgående Tools-svar åter får samma ämnestagg i stil med
[Ärende MSA-…] i stället för att skickas med ett vanligt Re:-subject.
2026-05-09
- Mail Support Assistants uppföljningstrådar kan nu besvaras direkt från Tools: den trådade adminärendesidan har nu ett operatörsinstruktionsfält, AI-utkast, en redigerbar svarstext och en Send reply via Tools-åtgärd, och när en skippad/omatchad/
reply not sent-tråd väl har lämnats över till detta centraliserade uppföljningsflöde kan standalone-runnern nu markera mailboxkopian som läst så att samma olästa mail inte fortsätter återförsökas utanför Tools. Den lyckade överlämningen upprepar nu inte heller samma IMAP-markering som läst en andra gång.
- Mail Support Assistants case-sync tolererar nu även tomma selected-rule-platshållare: när ingen matchad regel finns ännu kan standalone-/runtimeklienter fortsatt utelämna
selected_rule*-fälten, och äldre payloads som fortfarande skickar selected_rule_id=0 normaliseras nu i stället för att avvisas med ett generiskt 422, så omatchade mailboxmail fortfarande kan synas i den centrala ärendevyn i Tools.
- SocialGPTs hjälp för Facebooks
participant_requests fortsätter nu också att följa en öppen Preview comment-/förhandsgranskningsdialog som aktiv deltagaryta även om Facebook renderar om den underliggande kortlistan, så hjälpen faller inte längre tillbaka till ett falskt läge där den påstår att inga synliga kort matchade medan rätt GraphQL-preview fortfarande visas.
browserbot.sh stöder nu uttrycklig profilseedning/kloning för Playwright-upplägg med flera konton: --profile finns som kortare alias till --profile-directory, --copy-profile-from kan seeda en persistent profil från en annan före open/record/run, och --clone-profile kan kopiera en färdig basprofil till en ny målprofil utan att browsern startas ännu.
- Den fristående Mail Support Assistant sanerar och längdbegränsar nu sina Tools-payloads för case-sync innan de skickas, så märkliga mailbox-encodingar eller för långa body-/headerfält mycket mindre lätt försvinner bakom ett generiskt
422 när olästa mail ska rapporteras tillbaka till den centrala ärendevyn i Tools.
- RSS Watch har nu en dedikerad posting queue för operatörer med den separata behörigheten
rss.posting.handle. Det nya gränssnittet på /feed-admin/posting-queue och /rss/posting-queue listar senaste poster per feed/kategori med AJAX-checkboxar för Handle group, Handle page, Handled group och Handled page, och matchande webbsessions-API-endpoints finns nu under /api/rss/posting-queue/items* så browserautomation eller ett annat internt gränssnitt kan markera poster som handled direkt efter publicering.
- Browser Automation har nu också genvägen
browserbot.sh --open-socialgpt, som öppnar riktiga Chrome med den lokala extensionen projects/socialgpt-chrome och den delade persistenta default-profilen, så att SocialGPT enklare kan hållas tillgänglig från standardprofilen för återanvänd browser automation.
- Browser Automation förklarar nu tydligare det säkrare extensions-/inloggningsflödet: Chrome Web Store och Google-inloggning bör först förberedas i
browserbot.sh --open --browser chrome med samma persistenta profil, medan unpacked lokala extensions kan laddas direkt från en lokal katalog utan att gå via Chrome Web Store.
- Browser Automation använder nu sparade persistenta profiler som standard i stället för tillfälliga körningar. När ett lagrat script saknar explicit
profile_directory faller Tools nu automatiskt tillbaka till scriptets key som sparat profilnamn, och en ren engångskörning kräver nu en uttrycklig --fresh-profile.
- Installationshjälparna för Browser Automation är nu robustare på fjärr-Linuxvärdar:
bin/fixnode.sh väntar nu på aktiva apt-/dpkg-lås innan Node.js repareras, verifierar att node, npm och npx verkligen finns efter installationen, och Playwright-installeraren pekar nu tydligare på Node-repair-scriptet när npm-verktygen fortfarande saknas.
- Browser Automation har nu också en wrapper i projektroten,
browserbot.sh, så admins kan starta ett lagrat browserscript från shell via scriptnyckel eller exakt namn utan att bygga Playwright-kommandot manuellt. Browser Automation-sidorna i admin visar nu kopierbara shellkommandon, och återanvänd login/cookies är nu tydligare dokumenterat runt det lagrade fältet profile_directory.
- Facebook Admin Tools har nu också ett sammanslaget diagramläge för moderering där manuella och automatiska approvals/rejects slås ihop till de fyra huvudgrupperna (
Approvals · join requests, Approvals · pending posts, Rejects · join requests, Rejects · pending posts) för snabbare överblick, samtidigt som den äldre detaljvyn med separat auto/manuell uppdelning fortfarande finns kvar.
- Adminens användareditor kan nu skicka ett vanligt password-reset-mail direkt från kontrollcentret för ett enskilt konto, och webbinloggningen har nu också ett publikt forgot-password/reset-password-flöde så att användare kan återställa sitt konto utan att någon manuellt sätter ett nytt lösenord åt dem.
- Live-räknarna för onlinebesök kan nu dölja betrodd intern trafik via IP eller CIDR. Admins hanterar den whitelistan från den detaljerade onlinevyn, och matchande adresser räknas bort från den lilla delade online-widgeten, onlinekortet i Site Statistics och båda
/online-vyerna.
- Mail Support Assistant rapporterar nu varje relevant upptäckt oläst mailboxmail direkt till Tools redan innan svar/no-match-hanteringen är klar, så admin fortfarande kan se mailet i den trådade ärendevyn i Tools även när inget automatiskt svar skickades.
2026-05-08
- X-bottens kandidatsvar normaliseras nu från Markdown till ren plain text innan de sparas eller postas, så råa URL:er visas korrekt som vanliga länkar på X i stället för att ligga kvar i Markdown-länksyntax.
- X-bottens strukturerade replygenerering fortsätter nu genom hela femstegs-stegen när inget användbart svar hittas ännu (fyra GPT-5-försök med starkare reasoning och därefter ett sista fallback-försök med GPT-4o), och replies som redan postats visas nu som Already posted i adminbadgarna i stället för att se ut som ett nytt Do not publish-block.
- Den delade onlinesammanfattningen i fronten delar nu upp aktiv trafik i botar, gäster och inloggade användare i stället för bara gäster kontra användare, och adminsidan Site Statistics visar nu samma rikare onlineuppdelning i en tydligare kortbaserad runtimeöversikt.
- Site Statistics är nu lättare att både hitta och läsa: äldre länkar till
/admin/site-statistics skickas nu vidare till den aktuella routen /admin/security/site-statistics, admin-/startsidesgenvägarna pekar rätt och sidan har nu en tydligare kontrollrumsstil med snabbknappar till närliggande adminverktyg.
- Tools har nu också en admin-only Playwright E2E-runner under
/admin/browser-automation/playwright för projektets tests/e2e-svit. Administratörer kan läsa testfiler, köra hela sviten eller en tillåten enskild spec, välja base URL / skip-webserver / persistent profil och därefter granska sparad körhistorik med stdout, stderr, exit code, HTML-rapport samt länkar till screenshots, video och traces när sådana artefakter finns.
- Laravel-hjälparna för Playwright inkluderar nu en persistent-session-anpassad config under
storage/playwright/*, en återanvändbar test-helper för specs som ska behålla inloggningsläge mellan körningar, en särskild codegen-helper i bin/playwright-record-persistent.sh och ett matchande npm-alias test:e2e:codegen utan att störa projektets befintliga Mix/Vite-script.
- SocialGPTs Facebook-adminflöde är nu lättare att hitta från Tools: dashboard/profil/startsida har direkta genvägar till Facebook Admin Tools, Social Media Tools-startsidan lyfter nu fram vyn tydligare och Tools-inställningarna har nu också en riktig sparad på/av-switch för Facebook-adminaktivitet som tillägget kan spegla vid synk.
- X-botten paginerar nu djupare genom tidigare poster i samma X-tråd innan svarskontexten byggs, sparar mer av den tidigare trådhistoriken i den lokala interaktionsarkiveringen, ignorerar svar som publicerades senare än den aktuella mentionen och visar nu grundläggande trådfångstdiagnostik i Recent interactions så att admins ser hur mycket same-thread-kontext som faktiskt hämtades.
- Den publika dokumentationen lyfter nu också fram X-botten tydligare: docs-index länkar direkt till
/docs/sv/x-bot, services-sidan länkar till guiden och dokumentationen förklarar nu uttryckligen att ToolGPT på X är den publika kontidentiteten för den Tools-drivna X mention-botten.
- X-bottens replies går nu genom ett strukturerat JSON-beslutskontrakt (
message, can_reply, status) i stället för bara rå löptext, så senaste interaktioner och API-konsumenter kan se om ett kandidatsvar faktiskt går att posta, varför en vägran uppstod, vilken GPT-5/GPT-4-väg som valdes och vilka alternativa kandidater som prövades. GPT-5-genereringen trappar nu upp reasoning effort stegvis innan Tools faller tillbaka till gpt-4o, senaste interaktioner visas nu som badge-tunga expanderbara kort för beslut/omkörningar i stället för en trång tabellrad, och Facebook-adminkön i SocialGPT-webbläsartillägget försöker nu skicka direkt till Tools när den vanliga extension-runtime-överlämningen hänger sig.
- Publika
/feed och /feed/cards/{categorySlug} slår nu ihop kategori-analyser per kategorislug innan den synliga utgåvan väljs, så den nyaste analysen i aktuell bucket fortfarande vinner även när äldre cachade rader för samma kategori råkat sparas under lite olika namn/stavning som Right Wing respektive Right wing.
- Feed Admin sorterar nu kategori-/sitanalyser efter riktig period-bucket före genereringstid, så äldre buckets inte längre hoppar före bara för att de regenererats senare, och kategori-kortsidan visar nu bucketens riktiga etikett/datum tydligare i stället för bara genereringstidpunkten.
- vBulletin-onboardingens inviteflöden sparar nu även mottagarens e-post per nyckel, visar en väljbar invite-kompositör med konfigurerbara messenger-klara och HTML-baserade mailmallar och kan skicka antingen riktigt HTML-mail till sparad mottagare eller en testkopia till det aktuella Tools-kontots e-postadress.
- Min profil kan nu verifiera vBulletin-användarnamn/e-post + lösenord mot forumet innan forumkontot länkas till det aktuella Tools-kontot, så kopplingen mellan Tools och forumet blir självservice i stället för att kräva manuell adminhjälp.
- Raderna för senaste X-bot-interaktioner visar nu hur många längd-omkörningar varje kandidatsvar behövde innan det kom under teckengränsen, tillsammans med en kort historik över de senaste längdförsöken.
- Publika
/feed och feed-kort väljer nu den senast genererade analysen i aktuell bucket före äldre default-markerade varianter, så färska dagsanalyser göms inte längre bakom gamla cachade defaultutgåvor.
- Feed Admin och Scheduled Jobs visar nu tydligare RSS analytics-schedulerresultat per period, inklusive senaste schemalagda slot, anchor date, ok/error-räknare, språk och ett kort outpututdrag från senaste cronstyrda körningen.
- Feed-widgetbundles under
/api/managed-scripts/feed* accepterar nu additiva queryparametrar som feed_ids / feeds, categories / groups / category_slugs och limit, och exponerar de normaliserade värdena tillbaka i bundle/API-svaret som query_context.filters.
- vBulletin-feeddetekteringen behåller nu querystyrda external-parametrar (till exempel
nodeid / forumids) när Tools provar syskonkandidater för rss2/rss/atom, och själva feedproben följer nu omdirigeringar mer konsekvent för dessa external-feed-URL:er.
- Mail Support Assistant låter nu obesvarade eller omatchade synkade mailtrådar ligga kvar tydligt i Tools som uppföljningsärenden, markerar dessa
needs_attention-trådar tydligare i admin och låter admins radera enskilda synkade trådar eller bulkstäda äldre synkade trådar efter ålder/status från /admin/mail-support-assistant.
- vBulletin-onboardingens nyckelsidor låter nu både admins och delegerade nyckelskapare märka upp varje invite-nyckel med ett eget mottagar-/tilldelningsnamn, och det lätta fältet sparas direkt via AJAX på nyckelkortet så att det blir enklare att se vem som redan har fått vilken invite-länk.
- RSS-editorns 🤖 Auto-feeddetektering känner nu igen vBulletin-liknande externa RSS-länkar som
external?type=rss2... och external.php?type=RSS2..., inklusive relativa feedlänkar som hittas på forumsidor, så sådana källor sparas nu som vanliga rss-feeds i stället för att onödigt falla tillbaka.
- Snöbollseffektens skärmdumpsguide har nu förenklats så att registreringen och invite-koden lyfts fram som de första riktiga stegen, medan Tools-sidan kommer in först när forumkontot redan finns klart.
- Skärmdumpsguiden för Snöbollseffekten förklarar nu slutbilden ännu tydligare och säger uttryckligen att användaren bekräftar där att åtkomsten är klar och därefter klickar vidare manuellt via den synliga länken/knappen.
- Skärmdumpsguiden för Snöbollseffekten matchar nu åter den uppdaterade slutbilden, så sista steget beskriver den färdiga onboarding-/statussidan tydligare.
- Publika vBulletin-onboardingens statussidor auto-redirectar inte längre när forumåtkomsten blir klar. Sidan fortsätter fortfarande polla i bakgrunden, men när sökanden väl är godkänd stannar användaren kvar på statussidan och får i stället en tydlig knapp/länk för att klicka vidare manuellt till den konfigurerade forumdestinationen.
- Den publika sidan
/online separerar nu sannolika botar och crawlers i en egen sektion, visar en separat boträknare och håller automatiserad trafik borta från den vanliga gästlistan så att översikten över riktiga besökare blir lättare att läsa.
- vBulletin-onboardingens nyckelhantering skiljer nu tydligare mellan den återanvändbara invite-/referrallänken och engångsnyckeln, både adminens och den delegerade nyckelsidan kan nu radera invite-nycklar via AJAX utan full sidreload, varje invite-nyckel kan nu valfritt skriva över redirect-URL/knapp för lyckad onboarding på den publika statussidan, och huvudsidan för vBulletin-admin kan nu generera färdiga HTML-block för två hostade forumwidgets: senaste medlemmen per valda grupp(er) och aktuellt medlemsantal per valda grupp(er).
- vBulletin-onboardingflöden kan nu få ett eget publikt välkomstmeddelande på invite-sidan, döljs nu från den publika onboardinghubben om de inte uttryckligen markerats för listning där, och både adminens samt den delegerade nyckelskaparsidan kan nu radera äldre referral-/engångsnycklar och kopiera aktiva nycklar eller direkta invite-URL:er som färdiga listor för massinbjudningar. Dokumentationen innehåller nu också en separat skärmdumpsguide för Snöbollseffekten med tydlig notis om att texten i bilderna kan skilja sig något från nuvarande UI.
- Publika vBulletin-onboardingens statussidor visar nu en enda primär statusruta i stället för två gröna success-rutor, kan fortsätta polla i bakgrunden medan Tools väntar på forumåtkomst och växlar till ett tydligt klart-/åtkomst-redo-läge med forumknapp plus automatisk redirect när rätt forumgrupper blivit aktiva. Varje onboarding-config kan nu också spara en egen forumdestination (URL + knappetikett) för det sista steget, med
https://forum.tornevall.net som fallback när inget mer specifikt är konfigurerat.
- Publik vBulletin-onboarding kraschar nu inte längre hårt när det automatiska forumgodkännandet misslyckas (till exempel om forumets fjärr-API svarar
403). Tools behåller nu onboardingförfrågan, länkar forumkontot när det går och flyttar därefter förfrågan till Pending review så att en administratör kan slutföra godkännandet senare i stället för att sökanden möts av en rå exceptionsida.
- vBulletin-onboardingens gruppwrites uppdaterar nu forumets cachestatus med en separat-host-säker strategi efter den scoped groupsaven, där Tools i första hand använder en dedikerad fjärr-refreshendpoint eller direkt rensning av forumets cachetabeller via den konfigurerade forumdatabasanslutningen i stället för att anta att forumets core ligger på samma server som Tools.
- vBulletin-onboardingens gruppwrites anropar nu också forumets egen
core/api.php-saveväg efter den scoped ändringen av sekundärgrupper, så det berörda forumkontot byggs om direkt och den gamla manuella nödlösningen att öppna användaren i vBulletin och klicka Save normalt inte längre ska behövas.
- Dropdownen för vBulletin-onboardingens profilfält följer nu åter forumets
profilefield-poster i stället för att begränsas av rå upptäckt av userfield-kolumner, så konfigurerade custom fields som field66 kan dyka upp igen i onboarding-adminens och nyckelgeneratorns val även när gamla kvarvarande userfield-kolumner annars gjorde listan missvisande.
- vBulletin-onboarding faller nu tillbaka till forumgrupp
155 när en onboarding-config saknar egen lista med tillåtna grupper, och både adminens nyckelgenerator och den delegerade nyckelskaparsidan kan nu skapa invite-länkar i bulk med antingen ingen expiry, ett exakt slutdatum eller en giltighetstid som förlängs i antal dagar. Batchskapade labels numreras automatiskt, medan kontobundna profilfältswrites medvetet fortfarande är begränsade till en nyckel åt gången så att samma forumprofil inte skrivs över om och om igen.
- vBulletin-adminsidan läser nu in riktiga forumgrupper från tabellen
usergroup när bounced-email-hanteringen konfigureras, så administratören kan välja mål- och undantagsgrupper med riktiga namn i stället för att gissa numeriska id:n. Samma sida förklarar nu också exakt hur membergroupids skrivs: ett ensamt id när fältet var tomt, annars en kommaseparerad lista utan mellanslag.
- Texten i vBulletin-onboarding för befintliga konton låtsas nu inte längre att ett exakt invite-profilfält redan är känt för varje flöde: när ett särskilt fält faktiskt är konfigurerat visas det fortfarande tydligt på sidan, men den generella instruktionen faller nu tillbaka till formuleringar om profilen i stället för att peka på ett konfigurerat fält som fortfarande kan vara osatt.
- Den delade toppnavigeringen visar inte längre genvägen Invite Keys. Själva invite-nyckelhanteringen finns kvar, men hittas nu från mer relevanta användar-/adminytor i stället för att ta plats i huvudnavigeringen.
- vBulletin-onboarding för befintliga forumkonton kräver nu inte längre att sökanden fyller i namn och e-post igen på Tools-sidan: invite-sidan visar först profilfältsinstruktionerna, visar den exakta invite-koden tydligt och därefter en minimal knapp för att Starta onboardingen när invite-koden väl sparats i forumprofilen. Profilfältsbundna invite-länkar använder nu samma befintligt-konto-först-flöde även när nyckeln redan pekar på en känd forumanvändare.
- Migreringen
2026_05_02_150000_create_vbulletin_onboarding_key_profile_assignments_table är nu extra defensiv när tabellen redan finns, så upprepade eller delvis genomförda deployer inte längre fastnar på ett duplicate-table-fel bara för att en miljö hann skapa tabellen innan migrationsraden skrevs. Skyddet fångar nu också omslutna felkedjor i stället för att bara lita på en enda direkt exception-typ.
- Adminlänkar som öppnar ett användarkonto från andra tjänstesidor går nu tillbaka till samma fulla kontrollcenter som användarlistan öppnar, i stället för att hoppa till den äldre snabbredigeringssidan.
- Delegerade skapare av vBulletin-onboardingnycklar kan nu se alla invite-nycklar för de slugs de får hantera, och Tools sparar nu också en liten historik för profilfältsersättningar som kopplar äldre överskrivna invite-värden till den nyare Tools-nyckeln och berört vBulletin-användarnamn.
- vBulletin-onboardingflöden kan nu konfigureras för redan registrerade forumkonton: den publika invite-sidan kan börja med ett välkomst-/instruktionssteg plus en AJAX-laddad knapp Onboarda ditt konto här, invite-nyckelmatchningen kan nu läsa det konfigurerade vBulletin-profilfältet, och Tools rensar nu den sparade invite-nyckeln från samma profilfält efter godkännande och grupptilldelning.
- vBulletin-onboarding-configs kan nu valfritt mappa invite-koder till ett specifikt vBulletin-profilfält (till exempel
field66), och nya invite-nycklar kan nu peka på en känd forumanvändare så att koden skrivs in i just den användarens profilfält och onboardingförfrågan kan länkas direkt till rätt forumkonto innan den konfigurerade sekundärgruppen tillämpas.
- vBulletin-onboardinglänkar kan nu skapas med valt publikt språk (
English eller Svenska), och den publika slug-sidan, onboardingformuläret samt den bokmärkningsbara statussidan öppnas nu på svenska när en svensk onboardingnyckel/-länk delas.
- Tjänstekatalogen förklarar nu tydligare vad onboarding-relaterade rutor betyder, den publika onboardinghubben visar nu mer av slugens konfigurerade intro-/regeltext med bevarade radbrytningar, och admins har nu en egen sida för onboardingens nyckelgenerator på
/admin/security/vbulletin/onboarding/keys med fokus på referral-/engångsnycklar och hur välkomstmeddelanden presenteras.
- vBulletin-onboarding stöder nu både
/vbulletin/onboarding/{slug} (ange nyckeln manuellt) och /vbulletin/onboarding/{slug}/{inviteKey} (nyckeln redan ifylld), äldre token-länkar kan styras om till den kanoniska slug-URL:en, och felaktiga/utgångna nycklar faller nu tillbaka till en vänligare nyckelsida i stället för att visa ett rått exceptionsfel.
- vBulletin-onboarding-configs kan nu delegera skapning av invite-nycklar till vanliga Tools-användare per slug, och dessa användare får en egen autentiserad nyckelhanteringssida på
/vbulletin/onboarding/keys.
- Editorn för onboardingens invite-nycklar är nu lättare att hitta från Users, dashboarden, vBulletin-adminsidan, tjänstekatalogen och huvudnavigeringen när det aktuella kontot får skapa sådana nycklar.
- Användarredigeraren för administratörer visar nu en tydligare kontoöversikt (mobilnummer, föräldralänk, antal länkade barn, Google-koppling och aktiva personliga API-nycklar), och formuläret för att skapa användare kan nu spara mobilnummer och ett valfritt föräldrakonto direkt.
- Mensövervakning stöder nu valfria påminnelse-SMS som skickas via det befintliga SMS-API:t, med valbar tid i förväg från 1 till 7 dagar före uppskattad nästa cykel.
- Cykelberäkningen hanterar nu stora rapporteringsglapp smartare genom att dela upp sannolikt missade registreringsfönster i mindre rimliga intervall i stället för att blåsa upp den genomsnittliga cykellängden.
- Konton kan nu länkas i en enkel förälder/barn-relation så att en länkad förälder också kan få barnets menspåminnelse via SMS när den är aktiverad.
- Min profil är nu en bredare inställningshub med mobilnummerhantering, länkar till barnkonton och direktgenvägar till de tjänster som det aktuella kontot redan kan använda.
- Ett nytt tokenbaserat Whisper-transcribe-API finns nu under
/api/whisper/transcribe/*, med obligatorisk callback_url, terminala callbacks och metadata som visar vilket köspår jobbet kommer från (queue_channel).
- Whisper-köerna och de autentiserade jobbsvaren visar nu om ett jobb kommer från den vanliga webbkön eller från det nya API-köspåret, och färdiga API-jobb kan innehålla en direkt publik transcript-share-länk.
- Publik dokumentation för Whisper och tokenflödet har uppdaterats så att den fokuserar på det externa kontraktet och den nya
whisper.api-behörigheten i stället för interna runtime-/driftdetaljer.
- Whisper-köformuläret skiljer nu på Whispers eget språkhintfält för transkriberingen och ett nytt köat
analysis_language, stöder multiselect translation_target_languages[] för automatiska OpenAI-översättningar efter sparat transcript, behandlar diarization som påslaget per jobb som standard om operatören inte uttryckligen stänger av det för just det jobbet och visar nu tydligare heartbeat-baserade progressuppdateringar medan Whisper fortfarande transkriberar mellan råa outputrader.
- Whisper accepterar nu PATH-baserade
WHISPER_YTDLP_JS_RUNTIMES=node / deno utöver runtime:/full/path, php artisan whisper:doctor rapporterar nu exakt vilken runtime-path som saknas eller inte är körbar i stället för bara ett generiskt JS-runtime-fel, och bin/install-whisper-venv.sh skriver nu även ut browser-/proxy-nycklar samt validerar nuvarande .env-paths för Node/Deno/browser mot de binärer skriptet installerade.
php artisan whisper:doctor visar nu Laravel-configvärde, process-env-värde och effektivt WHISPER_YTDLP_PROXY separat, medan Whispers runtime-rader visar proxy=(not configured) när artisan-workern faktiskt inte fick någon proxy; det gör stale config-cache / fel runtime-env tydligt när manuellt yt-dlp --proxy ... fungerar men köade Whisper-jobb ändå får YouTube 429.
- Whispers yt-dlp-runner skickar nu vidare
WHISPER_YTDLP_BROWSER_PATH till yt-dlp som --browser-location när browser-cookie-läget är aktivt, behåller vanliga temporära/filbaserade cookiefallbacks bakom browser-fasen i stället för att göra browser-läget allt-eller-inget, exporterar WHISPER_YTDLP_PROXY till child-processernas proxy-env utöver CLI-flaggan och sammanfattar upprepade YouTube-429-/bot-check-/runtime-fel betydligt renare i den sparade operatörsfeltexten.
- Whispers yt-dlp-runner kan nu läsa en valfri proxy från
WHISPER_YTDLP_PROXY, kan föredra --cookies-from-browser via env (WHISPER_YTDLP_COOKIES_FROM_BROWSER plus valfri WHISPER_YTDLP_BROWSER_PATH) i stället för hårdkodade browser-path-kontroller, faller tillbaka rent till Netscape-cookiefiler när browser-proben inte finns, och URL-titelprefetch använder nu Laravel-8-kompatibla HTTP-klientoptions i stället för det icke stödda anropet PendingRequest::connectTimeout().
- Whisper föredrar nu riktig hämtad sidtitelmetadata när
source_label föreslås för inklistrade media-URL:er, kan låta OpenAI korta ned stökiga/överlånga sidtitlar från hämtat head/body-innehåll innan en generisk URL-label används, låter transcriptägaren köa rena diarization-omkörningar från detaljvyn via AJAX och försöker nu köra transcript-analysen via gpt-5.4 med reasoning innan den faller tillbaka till den vanliga 4o-vägen samtidigt som svenska transcript hålls mycket hårdare på svenska.
- Whisper-detaljsidor låter nu ägaren av transcriptet redigera den människoläsbara titel-/beskrivningsmetadatan (
source_label / source_note) helt via AJAX, och när ett färdigt transcript finns kan samma ägare också låta OpenAI föreslå bättre text direkt in i fälten innan de sparas.
- Det inloggade Whisper-formuläret för kön försöker nu prefetcha en renare
source_label från inklistrade fjärr-URL:er (YouTube/oEmbed först, annars sidmetadata som og:title / twitter:title / <title>), faller tillbaka till den befintliga URL-baserade etikettstilen när någon ren titel inte går att hämta, respekterar manuellt redigerade etiketter i stället för att skriva över dem och använder nu en tydligare responsiv formulärlayout för URL/upload/modell/språk.
- Whisper försöker nu köra best-effort speaker diarization automatiskt efter varje lyckad transcriptsparning när
WHISPER_DIARIZATION_ENABLED=true, lagrar additiv diarization-metadata samt speaker_aware_transcript / transcript_segments[].speaker_label, låter completed-transcript ligga kvar även när diarization failar och utökar php artisan whisper:doctor med maskerad Hugging Face-tokenstatus samt importkontroller för pyannote.audio och torch.
- Whisper läser nu transcript först både på den nya publika share-sidan och i de inloggade detaljvyerna, medan transcript-analysen kommer efteråt och återstående källa/share-info flyttas längre ned på den publika sidan för renare delning.
- Whisper-transcriptanalysen följer nu uttryckligen jobbets lagrade transkriptspråk när det finns, med engelska som fallbackspråk i stället för att bara gissa från textinnehållet.
- Färdiga Whisper-jobb kan nu skapa en avstängningsbar publik share-sida under
/shared/whisper/transcript/{token}, så operatören kan dela en ren transcriptvy med bara titel/källinfo, transcript-analys och full transcript-text utan att exponera vanliga jobb-/runtime-UI:t.
- Whisper-detaljvyer och API-jobbpayloads visar nu också
cpu_threads_configured, processing_elapsed_seconds / processing_elapsed_human samt observed_throughput_multiplier / observed_throughput_summary, samtidigt som den live kördetaljen nu loggar aktiv modell/språk/trådantal/klipplängd före transkribering och rapporterar elapsed tid plus realtime-throughput när Whisper är klar.
- Whisper-jobb lagrar nu även mediets längd när hosten kan proba den efter upload/download, och kö-/detalj-/API-ytorna visar nu detta som
source_duration_seconds plus en mer mänsklig source_duration_human, så operatören kan se klipplängden innan hela transcriptet öppnas.
- CPU-bunden Whisper-transkribering kan nu trimmas explicit via
WHISPER_CPU_THREADS, vilket lägger till --threads <n> på den nuvarande Python-CLI:n openai-whisper och speglar samma gräns i vanliga CPU-math-env-vars så att en host med 4 vCPU mer förutsägbart kan köras med 4 transkriberingstrådar.
- Whisper-köns detaljvyer, runtime-snuttar och mail döljer nu interna storage-/cache-paths betydligt hårdare, så stage details och felrader inte längre läcker exakt var Whisper-jobb eller Laravel-cache ligger på filsystemet.
- Whisper-transkriberingsjobb accepterar nu också valfri
source_label och source_note, så URL-jobb kan få en tydlig titel och fritextkontext när själva fetchen eller URL:en inte säger nog om innehållet.
- Systemcron-exemplet kör nu Laravel/Whisper-Artisan som den riktiga webb-runtimeanvändaren i stället för att lämna root-ägda cachelås efter sig, och nya hjälparen
bin/repair-laravel-runtime-permissions.sh kan automatiskt reparera rättigheter/ägarskap för storage/* och bootstrap/cache från cron.
- Whisper försöker nu köra transcript-analysen automatiskt direkt när en transkribering blir klar, så completed-jobb ofta redan har ifylld
analysis-metadata innan någon manuell analysera-åtgärd körs.
- Whisper-mejl till jobbägaren är nu stylade HTML-mail med plain-text-fallback, och completed-mail innehåller nu både den genererade analysen och själva transcript-texten i stället för bara en kort statusrad.
- DNS-zone-editorns sökning frågar nu den cachade zondatan över alla sidor i stället för att bara filtrera den aktuellt renderade sidan, och pagineringsknapparna i editorn byter nu sida korrekt både i normalt läge och under sökning.
php artisan whisper:process tar nu även ett värdlokalt icke-blockerande flock utöver det befintliga Laravel-cachelåset, så cron-/terminalkörningar på samma host inte kan överlappa ens innan kölåset nås.
- Whisper visar nu tydligare progress även under själva transcribe-steget, så jobb inte längre ser lika fastfrusna ut mellan nedladdning och färdig transcript-fil.
- När ett Whisper-jobb reclaimas som stale efter heartbeat-timeout försöker runnern nu också döda eventuella kvarhängande child PID/processgrupper innan raden köas om eller failas, vilket hjälper till att frigöra låsta yt-dlp-/Whisper-processer på hosten.
- Whisper-exekvering är nu endast CLI-/cron-baserad: webb- och API-anrop kör inte längre Whisper eller yt-dlp direkt,
restart köar nu bara om jobbet för nästa worker-pass, och admin/API-hjälparna för run-now är nu bara för kö-/reset-status så att terminal/cron förblir enda exekveringsmiljön.
- Whisper skickar nu terminalstatus-mejl till ägaren av requesten när ett transkriberingsjobb avslutas som
completed eller når slutligt failed, med jobbid/status/källa och senaste feltext när det finns.
- Whisper-routingen för URL-jobb är nu yt-dlp-först för alla URL:er (inte host-gated): varje URL försöks alltid med yt-dlp först, medan direkt HTTP bara används som sista panikfallback för sannolika direkta media-URL:er och nu kräver strikt mediaverifiering så att HTML/login/captcha/JSON aldrig sparas som indata.
- Whisper-kön/runtime använder nu explicit processmiljö (
WHISPER_PROCESS_PATH, WHISPER_PROCESS_HOME) för yt-dlp- och Whisper-subprocesser så att webb/queue-körningar bättre kan matcha terminalbeteende.
- Whisper yt-dlp-runtimeupplösning är nu Node-först med verifierade körbara filer och Deno som sista fallback (
WHISPER_YTDLP_DENO_BIN), med tydligare diagnostik när konfigurerade JS-runtimes är ogiltiga eller saknas.
- Whisper har nu
php artisan whisper:doctor för runtime-diagnostik (binärvägar, versionskontroller, effektiv PATH/HOME, JS-runtime-tillgänglighet, cookie-filberedskap och skrivrättigheter för whisper storage).
- Whispers yt-dlp-väg för YouTube börjar nu med en avsiktligt plain/basic
anonymous_temp-körning innan de nyare JS-runtime-, extractor- och format-fallbacksen tar vid, i linje med den säkrare operatörsförväntningen att ett enkelt public-video-försök ska ske först.
- Whispers yt-dlp-väg för YouTube stöder nu också explicit JavaScript-runtime-konfiguration via
WHISPER_YTDLP_JS_RUNTIMES och WHISPER_YTDLP_NODE_BIN, och försöker autodetektera node / nodejs från PATH för YouTube-liknande nedladdningar när ingen uttrycklig runtime-override är satt.
- Whispers yt-dlp-cookiepolicy börjar nu alltid med
anonymous_temp (en tom temporär cookiejar), faller bara tillbaka till db_temp och därefter raw_file_temp vid uttryckliga åtkomstfel och ger alltid yt-dlp en ny temporär cookiefil i stället för originalet från databasen eller den råa cookiefilen i storage.
- Whispers yt-dlp-felloggning har nu bantats till sanerad stdout/stderr plus metadata om cookiekälla/fallback, så operatörer kan felsöka YouTube-fel utan att cookieinnehåll eller råa tempfilsvägar läcker ut.
- Whispers yt-dlp-retryväg för YouTube bygger inte längre dubbla
-f-argument, håller nu första normala försöket fritt från den felaktiga tvingade bestvideo+bestaudio-selektorn och kan uttryckligen prova databaslagrade cookies först och WHISPER_YTDLP_COOKIES_FILE som senare fallbackfas för samma jobb innan det slutligen failas.
- Whispers sparade YouTube-hints för
n challenge förklarar nu tydligare att detta är YouTubes obfuskerade player-kontroll och att yt-dlp därför ibland behöver en fungerande JavaScript-runtime som Node.js för att kunna utvärdera den, beroende på aktuell extractorväg i yt-dlp.
- Whisper-transcriptanalys försöker nu en gång till utan
reasoning_effort när den aktiva OpenAI-chatmodellen nekar just det argumentet, så /api/whisper/jobs/{jobId}/analyze och webbens detaljvy inte längre faller direkt på modeller/providers som saknar sådana reasoning-kontroller.
- Whisper gör nu ett inbyggt automatiskt yt-dlp-fallbackförsök för kända YouTube-extractorfel som
n challenge solving failed, Only images are available for download och Requested format is not available, med säkrare kombination av player client och ljud-först-formatval innan jobbet slutligen markeras som failat.
- Whisper-jobb exponerar nu additiv
liveness-heartbeat-metadata (state, summary, heartbeat_at, last_output_at, runner_id, current_step, stale_after_seconds, is_stale) i webb/API-köpayloads, så operatören kan se om en rad i downloading / transcribing / finalizing fortfarande lever, bara är tyst eller troligen har kraschat.
- Whisper-runnern tar nu också tillbaka stale aktiva rader automatiskt vid senare körningar: om ett gammalt processing-jobb gått för länge utan runner-heartbeat köas det om eller failas med ett tydligt stale-job-fel i stället för att tyst blockera kön för alltid.
- Whisper-jobb som hänger sig i
downloading / transcribing / finalizing kan nu avbrytas säkert från webb/API innan de raderas. Workern ser en lagrad cancel-begäran, stoppar den aktiva yt-dlp-/Whisper-processen kooperativt, markerar raden som stoppad i stället för att retry:a den och tillåter först därefter vanlig delete/restart-hantering.
- Whisper-transcriptanalysen är nu härdad mot array-formad OpenAI-content, så detaljvyer och lagrad jobmetadata inte längre kraschar med
Array to string conversion när OpenAI returnerar strukturerade content-block i stället för en enda vanlig sträng. Adminens cookiebox kan nu också append/merge:a nyinklistrade Netscape-cookie-rader in i den lagrade yt-dlp-jären i stället för att bara ersätta allt.
- Whisper känner nu igen YouTube-liknande yt-dlp-varningar som
n challenge solving failed / saknad JavaScript-runtime tydligare, sparar en mer handlingsbar operatörshint i live-progressen och stöder en valfri host-override via WHISPER_YTDLP_EXTRA_ARGS för envisa YouTube player-client-/extractorproblem efter att själva yt-dlp först har uppdaterats.
- Whisper-webbgränssnitten visar nu grupperade livekort i stället för den tidigare breda tabellen, delete/restart körs nu via AJAX, och varje jobb har nu en egen detaljsida där operatören kan följa live-progress, läsa fullständigt transcript, se en längre runtime-logg och köra om en OpenAI-sammanfattning av innehållet.
- Whisper-admin har nu ett eget yt-dlp-cookiefält: operatören kan klistra in en Netscape-formaterad cookie-export på
/admin/whisper, kön lagrar den säkert, yt-dlp använder en temporär cookie-fil under stödda YouTube-/loginbundna nedladdningar, och GET /api/whisper/status exponerar nu additiv config.ytdlp_cookies.
php artisan whisper:process låser nu sig självt även utanför Laravel-schedulern, så en minutvis cronrad inte längre kan ta över medan en annan Whisper-körning fortfarande pågår. Kommandot loggar nu som standard till storage/logs/whisper-queue.log i stället för att vara beroende av terminalutskrift, och upptagna låskollisioner loggas som warnings i stället för att starta en andra runner.
- Whisper föredrar nu åter den bästa standardmodellen:
WHISPER_DEFAULT_MODEL faller tillbaka till large, webbgränssnittet förväljer därmed den kvalitetsstarkaste modellen, och API:t exponerar nu också POST /api/whisper/jobs/{jobId}/analyze samt additiv analysis-metadata på jobbsvaren för on-demand-sammanfattningar av transcript.
- Password Manager har nu ett första publikt autentiserat API-kontrakt under
/api/password-manager/*, med list/read/create/update/delete för den inloggade ägarens egna krypterade vault-poster.
- Det första Password Manager-API:t accepterar just nu antingen vanlig inloggad webbsession eller JWT bearer-auth från
/api/account/login, returnerar maskerade listrader som standard, exponerar bara dekrypterad secret_payload vid explicit detail/create/update och märker responserna med Cache-Control: no-store, private.
- X-botten kör nu en extra direkt-svarsreparation när ett genererat utkast fortfarande öppnar med frikopplad parafras som
The message expresses... eller The post suggests..., så vanliga ask/explain-svar pressas tillbaka mot ett konkret svar i stället för att bara berätta vad posten sade.
- När X-botten postar en trådad reply medan Prefix replies with @author fortfarande är avstängt ber Tools nu också X att exkludera författarens synliga reply-mention i själva livepostningen, så svar kan ligga kvar i tråden utan att automatiskt börja med en onödig synlig
@username-tagg.
- Slack-vidarebefordran för API-audit behandlar nu vanliga 4xx-auth-/klientfel som WARNING i stället för ERROR, lägger till tydligare suffix som
401 (authentication rejected) och rapporterar authorization_header_present / bearer_token_present explicit i stället för det tidigare tvetydiga tomma fältet Has bearer token.
- X-botten respekterar nu åter toggle-fältet Prefix replies with @author pålitligt: när admin/API-konfig sparas persisteras
reply_prefix_with_author äntligen korrekt, så synlig @username-taggning förblir avstängd om inte operatören uttryckligen slår på den.
- Whisper-kön sparar nu operatörsvänlig runtime-progress som
stage_label, stage_detail och en kort runtime_log-svans, så användar-/admin-köerna och CLI-körningen äntligen kan visa vad yt-dlp eller Whisper faktiskt gjorde i stället för att bara sluta med ett generiskt felmeddelande.
- Tools-bootstrap/runtime förstår nu också
PHP_DEPRECATED_NOTICES=0 som ett direkt sätt att tysta PHP-deprecation-brus på nyare runtider, samtidigt som den äldre kompatibilitetsflaggan PHP_SUPPRESS_DEPRECATIONS fortfarande stöds.
- Ett första inloggningsstyrt Password Manager-slice finns nu under
/password-manager, med krypterade per-user-vaultposter för logins, secure notes och ett försiktigt första payment-card-läge. Ingen extra behörighet krävs, delning finns inte ännu och lagring av CVV/CVC blockeras medvetet.
- Äldre Whisper-jobb kan nu raderas från användar-/adminkön och via
DELETE /api/whisper/jobs/{jobId}. Detta är särskilt tänkt för failade jobb som inte längre behövs, och backend raderar nu jobbraden tillsammans med dess sparade Whisper-projektkatalog samt säkra lokala upload-/transcript-filer, samtidigt som radering av aktivt processande jobb fortfarande nekas.
- Whisper-kön använder nu
yt-dlp för YouTube och andra uttryckligen stödda sid-/video-URL:er i stället för att försöka transkribera nedladdad HTML, direkta HTTP-mediahämtningar nekar nu uppenbart icke-media Content-Type innan input.bin sparas, Python-vägen -m whisper provas nu före den vanliga whisper-binären, lyckade men tomma Whisper-körningar rapporterar nu förväntad TXT-sökväg plus stdout/stderr/hittade filer, och GET /api/whisper/status kan nu exponera additiv config.ytdlp_configured.
- Whisper-kön kan nu återställa och starta om failade/exhausted jobb betydligt renare:
php artisan whisper:process stöder nu --restart-failed och --job-id=<id>, API:t exponerar nu POST /api/whisper/jobs/{jobId}/restart, admin/API-run-now kan nu också ta reset_failed=true, failat jobbtillstånd återställs korrekt före retry, och sparade exekveringsfel innehåller nu en tydligare installationshint när hosten saknar fungerande Whisper-binär/modul. Den inbyggda fallback-defaulten för modell är nu turbo i stället för small för nya miljöer, även om en explicit WHISPER_DEFAULT_MODEL-inställning fortfarande vinner.
- X-botten bevarar nu den rikare live-raden från X API när samma post också finns i det lokala konversationsarkivet, så bifogade bilder/media inte längre tappas bort bakom en lokal dubblett som bara bar den interna attachment-länken
.../photo/1. Interna X/Twitter-attachment-URL:er som /status/.../photo/1 och /video/1 behandlas nu heller inte längre som vanliga linked-page-URL:er när riktig tweetmedia redan är bifogad.
- X-botten behandlar nu direkta svar som en ännu hårdare toppregel: utanför explicit summary-läge ska den inte öppna med frikopplade tredjepersonsrecaps som
the commenter believes, the post says eller the tweet criticizes, och efterprocessningen strippar nu sådana metasammanfattande öppningar när de ändå slinker igenom.
- X-botten känner nu igen X-felet
Reply to this conversation is not allowed because you have not been mentioned or otherwise engaged... som en tråd-engagement-restriktion: keyword-only-svar på publika poster hålls manuella som standard, reprocess kan fortfarande köras och den lagrade feltexten förklarar nu att botkontot aldrig uttryckligen drogs in i just den konversationen.
- X-bottens interaktionslista i admin faller nu tillbaka till den konfigurerade lokala reply-gränsen (
260 som standard) när äldre rader saknar sparad längdmetadata, i stället för att vilseledande visa 280 för dessa legacy-rader.
- X-bottens bild-/public-figure-guidning är nu mindre överförsiktig: när tråden redan namnger eller tydligt diskuterar en offentlig person instrueras AI:n att diskutera den personen kontextuellt i stället för att reflexmässigt svara med generiska
I cannot identify individuals-vägranden.
- X-bottens keyword-regelpanel sparar nu Add rule / Save rule / Delete rule via AJAX som resten av adminsidan i stället för att kräva full sidreload för varje ändring i en svarsprioritetsprofil.
- X-botten behandlar nu
@author-prefix i replies som valfritt kompatibilitetsbeteende i stället för ett krav för reply-trådning, eftersom livepostning redan trådar via X-payloaden in_reply_to_tweet_id. Nya/default-inställningar lämnar därför prefixet avstängt om operatören inte uttryckligen slår på det.
- X-botten försöker nu först köra en kort AI-omskrivningsloop när ett genererat kandidatsvar fortfarande är för långt för den effektiva reply-gränsen (lokal Tools-cap kontra X:s hårda maxgräns), så formuleringen kan krympas innan systemet i sista hand faller tillbaka till hård trimning med
….
- X-bottens interaktionslista i admin visar nu lagrat kandidat-svars teckenlängd tillsammans med den effektiva gränsen och behåller även senast lagrade postningsfelet synligt i raden, så operatören lättare ser om ett misslyckat Approve/post faktiskt var ett längdproblem eller något annat.
- När X returnerar exakt felet
You are not permitted to perform this action. förklarar Tools nu att detta normalt är ett X-side-problem med write/reply-behörighet för appen eller bottens tokenpar, inte ett teckenlängdsproblem.
- X-botten behandlar nu “gå rakt på svaret” som en override med högsta prioritet i alla modes: replyn ska börja direkt med det konkreta svaret eller omdömet, hoppa över preambler/scenbygge och undvika punktlistor eller numrerade minisammanfattningar så svaret passar bättre i trångt X/Twitter-utrymme.
- X-botten behandlar nu en ren bottaggning som en implicit begäran om att läsa den tidigare tråden och kommentera den, i stället för att bete sig som om själva taggen vore hela meddelandet när tidigare trådkontext finns tillgänglig.
- X-botten accepterar nu
max_context_posts upp till 50, och max_reply_length=0 betyder nu “ingen lokal Tools-begränsning i antal tecken” i stället för att fastna i validering eller tvingas tillbaka till det gamla trim-intervallet.
- X-botten behandlar nu explicita kortsvarsönskemål som
Kortfattat!, briefly, short answer och one sentence som en starkare concise-intent-signal: prompten skärper korthetsreglerna, AI-tokenbudgeten sänks och det genererade svaret meningstrimmas innan slutlig postning.
- X-botten loggar nu explicita runtimehändelser
webhook_crc_failed / webhook_receive_failed när CRC-verifiering eller signerad delivery-hantering kraschar, sparar senaste webhookfelet i runtime-inställningarna och kan vidarebefordra sådana webhookfel till Slack via audit_x_bot även utanför det vanliga manual-review-flödet.
- X-bottens prompt behandlar nu tidigare medskickade trådposter som implicit relevanta som standard och instrueras uttryckligen att inte svara som om tidigare diskussion saknas när tidigare kontext redan finns i prompten.
- X-botten behandlar nu directed-account-targets som en denylist i stället för en allowlist: operatören kan hålla en kort lista över konton som botten inte får approacha via directed-account-läget, medan vanliga publika svar fortfarande är tillåtna så länge ingen annan säkerhetsregel stoppar dem. Samma config stödjer nu också trusted admin X usernames som förblir behöriga för directed-account-kommandon även utanför den vanliga delegatlistan.
- X-bottens adminsida skickar nu inline-sparningar av config och modererings-AJAX för interaktioner via de autentiserade webbrutterna under
/admin/social-media-tools/x-bot* i stället för att vara beroende av sessionsflödet på /api/social-media-tools/x-bot/*, vilket fixar de kvarvarande 401 Unauthorized-felen vid blur/change-sparningar för inloggade operatörer samtidigt som de publika API-endpointsen lämnas intakta.
- X-bottens admin/diagnostik, polling, webhook-ingest och hämtning av länkade sidor/media fångar nu transportfel från X/HTTP/SSL och returnerar strukturerade fel i stället för att låta sådana nätverksundantag bubbla upp som råa 500-fel.
- X-botten bevarar nu också normaliserad extern länkmetadata från synliga trådposter, hämtar några länkade sidor server-side när link handling är aktiverat och matar in kompakta titel-/excerpt-sammanfattningar i AI-kontexten så svar kan reagera på uppföljningar i stil med “läs artikeln” mot faktiskt hämtad sidtext.
- Samma X-bot försöker nu i första hand bädda in vidarebefordrade bilder som inline-data-URL:er i det multimodala OpenAI-anropet när servern kan hämta dem säkert, men faller fortfarande tillbaka till vanliga remote bild-URL:er när inline-hämtningen inte går eller blir för stor.
- X-bottens adminsida tvingar nu inline-AJAX-sparningar och modereringsåtgärder till same-origin relativa URL:er, vilket fixar tidigare
.com/.net-drift som kunde ge 419 CSRF token mismatch och bara visa ett rått [object Object] i stället för begriplig feltext.
- Samma X-bot upprätthåller nu också
max_reply_length hårt inte bara när ett nytt AI-kandidatsvar genereras första gången, utan igen när kandidatsvaret sparas/finaliseras och precis innan det postas till X, så att äldre lagrade kandidater inte kan smita förbi en senare sänkt längdgräns.
- X-botten kan nu skicka sin trådkontext till OpenAI antingen som äldre platt text eller som ett nästlat strukturerat JSON-paket, och JSON-läget är nu standard så att inkommande postdata, mode-metadata, reply constraints och kontextposter hålls tydligare för modellen.
- När X exponerar användbara media-URL:er kan samma X-bot nu också vidarebefordra dessa bild-URL:er till OpenAI som multimodala
image_url-inputs i stället för att bara luta sig på mediasummeringar / alt-text, samtidigt som operatören fortfarande kan stänga av den vidarebefordran explicit i configen.
- Samma X-bot bevarar nu också trådstartens ankare tillsammans med de senaste svaren när en konversation är längre än det konfigurerade kontextfönstret, och prompten säger nu uttryckligen åt modellen att tolka korta uppföljningar som “Ping”, “Try again” eller “What did we talk about?” mot den tidigare synliga tråden i stället för som isolerade enradare.
- X-botten har nu också ett lokalt per-konversationsarkiv inne i interaktionsmetadata, så äldre diskussionsinnehåll och tidigare genererade botsvar fortfarande kan återanvändas även om delar av den externa X-tråden senare raderas eller blir otillgängliga.
- Operatören kan nu konfigurera
historical_context_max_posts separat från det mycket mindre promptfönstret, inklusive 0 för i praktiken obegränsat lokalt arkivdjup medan max_context_posts fortfarande styr hur mycket som skickas till OpenAI i ett enskilt anrop.
- En ny publik
/docs/terms-of-service-sida finns nu för hela Tools-plattformen, med villkor för webbplatsanvändning, API:er, AI-stödda flöden, automationsfunktioner, credentials, tredjepartsleverantörer och tillåten användning.
- Tools exponerar nu också en publik X-callbackplaceholder på
/oauth/x/callback samt /oauth/x/callback-url, så att det finns en konkret callback-URL att ange vid X-appregistrering trots att den nuvarande X-botten fortfarande använder statiska server-side-X-credentials i stället för ett webbläsarbaserat OAuth-slutsteg.
- X-konfigurationen har nu också reserverat utrymme för framtida OAuth 2.0-klientuppgifter, så att operatören kan hålla den vägen separat från de nuvarande postningscredentials som används idag.
- X-bottens diagnostik/adminpanel speglar nu också OAuth2-kapabilitetsmetadata tydligare, inklusive konfigurerade scopes och om OAuth2 client/access/refresh-tokenvärden finns, så att UI:t kan återge det X-dashboarden erbjuder utan att låtsas som att postningsvägen redan bytt bort från OAuth1.
- X-botten överlever nu också äldre miljöer där den nya tabellen
x_bot_rules ännu inte migrerats: sidan kraschar inte längre, regelpanelen förklarar att php artisan migrate fortfarande behövs, och fallback instruction/mood fortsätter fungera tills tabellen finns.
- Manuell polling från shell/admin kan nu åsidosätta den lagrade lokala interval-gaten via
php artisan x-bot:poll-mentions --now (och de befintliga run-x-bot*-wrapperskripten), medan adminknappen Poll mentions now nu också ignorerar intervallet och direkt kör varvet för förfallna auto-approvals.
- X-bottens lokala reply-cappar är nu tydligare märkta som Tools-sidans egna säkerhetsgränser, och adminägda bottar bypassar nu dessa lokala cappar helt så att bara riktiga externa X-rate-limits återstår.
- X-bottens inställningssida förklarar nu också fält som Max context posts, hur poll-intervallet kan åsidosättas, hur AI-konto-/target-listor töms helt, samt skillnaden mellan Manual approval required = No och den separata randomiserade auto-approve-delay-togglen.
- X-botten exponerar nu också en första publik webhook-ingest-endpoint på
/api/x-bot/webhook, med CRC-verifiering på GET, signerad POST-hantering, köbaserad processing och adminsynlig webhookdiagnostik som senaste mottagna/processade/felstatus.
- Samma X-bot lagrar nu också senast sedda externa X read/write-rate-limit-headers och visar dem i adminpanelen samt i config/status-payloads, så polling och reply-postning kan pausa automatiskt tills reset-fönstret passerat i stället för att bara försöka igen för tidigt.
- X-bottens adminsida sparar nu också centrala konfigfält inline via AJAX, kör reprocess/approve/skip utan full sidreload och låter operatören faktiskt tömma textarea-baserade listor som known AI accounts och directed targets rent.
- Samma X-bot kan nu också polla publika X-poster som matchar konfigurerade bevakningsord som
Tornevall när Only explicit @mentions är av, och dessa keyword-triggade poster går igenom samma hjälpsamhets-/prioriteringsbaserade routing som direkta mentions.
- X-botten går nu också bakåt i reply-kedjor, bär med media-metadata/alt-text till AI-kontexten när X exponerar det, normaliserar interpunktion i IF-keywords och kan identifiera sig som en konfigurerbar
ToolsGPT-vX.Y.Z-etikett när användaren uttryckligen frågar.
2026-04-27
Whisper - yt-dlp-baserade sid-/videonedladdningar fungerar nu i transkriberingskön
- URL-baserade Whisper-jobb skiljer nu mellan direkta mediafiler och stödda sid-/video-URL:er som YouTube i stället för att försöka hämta allt via vanlig HTTP GET.
- YouTube-liknande jobb laddas nu ner/extraheras via
yt-dlp in i jobbets katalog innan Whisper startar, så media_path pekar på den riktiga extraherade ljudfilen i stället för en sparad HTML-sida.
- Uppladdade filer är oförändrade och bypassar fortfarande
yt-dlp helt; de fortsätter använda den lagrade upload-vägen direkt.
- Direkta HTTP-hämtningar är nu också hårdare så att uppenbara webbsvar (
text/html, JSON och andra icke-media-content types) fallerar med tydligt fel innan input.bin skrivs.
- När Whisper avslutas framgångsrikt men ändå inte lämnar någon
.txt-fil innehåller den sparade feltexten nu förväntad transkriptsökväg, output-katalog, hittade filer samt fångad stdout/stderr från den lyckade körningen.
- Kö-/statuspayloads kan nu också exponera additiv
ytdlp_configured=true|false, vilket gör det lättare för klienter och operatörer att se om hosten förväntas kunna hantera YouTube-liknande URL:er.
vBulletin-admin - första riktiga onboarding-/gransknings-/gruppadministrationsskiktet ligger nu ovanpå den befintliga säkerhetskonsolen
- vBulletin-onboardingen exponeras nu också via en egen separat och stylad publik sida på
/vbulletin/onboarding, så människor inte längre behöver hitta flödet indirekt via den inbäddade adminytan för vBulletin.
- Den nya publika onboarding-hubben kan nu länkas från startsidan och Services-sidan, förklarar onboardingprocessen i normal användarspråk och låter användaren klistra in antingen en full onboarding-URL eller bara token innan formuläret öppnas.
/admin/security/vbulletin innehåller nu ett första onboarding-/adminlager utöver den tidigare failed-login-cleanern och sektionen för frontend script boxes.
- Tools kan nu lagra onboardingkonfigurationer med introduktionstext, regler, tillåtna vBulletin-grupp-ID:n, referral-krav, manual-review-flaggor och valfritt auto-approve-beteende.
- Admin/operatörer med
vbulletin.manage kan nu skapa referral- eller engångsnycklar, och varje skapad nyckel får en publik onboarding-URL under /vbulletin/onboarding/{token}.
- Det publika onboardingflödet lagrar nu en egen request/statussida per person, och statussidan ligger under
/vbulletin/onboarding/status/{statusToken}.
- Samma adminsida har nu granskningskö, manuell länkning av forumanvändare via
forum_user_id och begränsade approve/reject/revoke-flöden som bara lägger till eller tar bort de konfigurerade sekundära vBulletin-grupperna.
- Det finns nu också en AJAX-sökbar vBulletin-användarsökning i adminsidan tillsammans med scoped grant/revoke-åtgärder för vald onboardingkonfiguration.
- Tools kör nu
php artisan vbulletin:onboarding-sync var femte minut så att exakta matchningar på e-post/användarnamn kan länka forumkonton automatiskt och valfritt auto-approve när configen tillåter det.
- Welcome/info-banner-meddelanden för vBulletin kan nu hanteras i Tools och renderas via
/vbulletin/onboarding/messages.js, avsett för direkt användning i vBulletin-template/snippet eller via den befintliga vBulletin-ytan för managed scripts.
Whisper - transkriberingsjobb kan nu ta emot uppladdade filer utöver URL:er
- Whisper-kön accepterar nu uppladdade ljud-/videofiler som ett andra inmatningsläge i stället för att kräva att varje jobb pekar på en publik media-URL.
POST /api/whisper/jobs stöder nu både det äldre JSON/form-flödet med source_url och multipart/form-data-uppladdningar via media_file, samtidigt som anrop som försöker skicka båda samtidigt fortfarande nekas.
- Användarsidan
/whisper har nu ett uppladdningsfält bredvid URL-fältet, så lokala inspelningar och andra icke-publika filer kan köas direkt från webbläsaren.
- Whisper-jobb och polling-svar exponerar nu additiv source-metadata som
source_type, source_label, source_mime och source_size_bytes, så det blir tydligt om ett jobb kommer från en URL eller en uppladdad fil.
- Adminvyn under
/admin/whisper renderar nu uppladdade filnamn och MIME-information i stället för att anta att source-kolumnen alltid innehåller en URL.
ACME / Let's Encrypt DNS-flödet - säkrare consolekonsolidering och nya DNS-hjälpendpoints
- Tools exponerar nu dedikerade DNS-sidiga ACME-hjälpare under
/api/dns/acme/*, så consoleverktyg kan lägga till, städa bort och explicit stale-rensa _acme-challenge-TXT-rader utan att låtsas som att ett separat äldre ACME-subsystem fortfarande finns kvar.
- De nya endpointsen är
POST /api/dns/acme/present, POST /api/dns/acme/cleanup och POST /api/dns/acme/cleanup-stale, och de återanvänder samma /api/dns/*-auth- och zonrättighetsmodell som vanliga DNS-write-anrop.
cleanup-stale stödjer nu keep-lista samt dry-run/cache-refresh-flaggor, vilket ger operatören ett kontrollerat sätt att rensa äldre _acme-challenge-TXT-rader samtidigt som de aktuella challenge-värdena bevaras.
- Tools innehåller nu också en Artisan-hjälpare
php artisan dns:acme:cleanup-stale <domän> för samma stale-cleanup per owner-namn, så shell-/cronunderhåll inte behöver gissa sig fram med råa nsupdate-kommandon.
- Det publika DNS-exempelskriptet och DNS-dokumentationen städades samtidigt så att de inte längre pekar på de äldre icke-existerande
/api/acme/challenge/*-rutterna.
Frontend Script Boxes - återanvändbara vBulletin- och feedbundles med AJAX-autosave och publik API-leverans
- Tools har nu delade Frontend Script Boxes för både
/admin/security/vbulletin och /feed-admin, så operatören kan hålla små frontendanpassningar i JavaScript samlade i Tools i stället för utspridda i lösa snippets.
- Varje scriptbox stöder nu titel, valfri extern
script src, AI-instruktion, inline JavaScript-body, enabled/disabled och sort order.
- vBulletin-adminsidan har nu en dedikerad sektion för vBulletin frontend script boxes för forum/htmlsnippet-anpassningar som frontendtweaks och återanvändbara hjälpskript.
/feed-admin har nu också en sektion för Feed script snippets / embeddable widgets för /feed-relaterade widgets och externa nyhetsrutor.
- Båda adminsektionerna kör nu över AJAX: Add script skapar en ny box direkt, fält autosparas på blur/change, Save now tvingar sparning, AI → script kan generera inline-scriptet från AI-instruktionen och Delete tar bort boxen utan full sidreload.
- Nya publika API-endpoints exponerar nu aktiva scriptboxar per yta som antingen separata rader eller en mergad bundle:
GET /api/managed-scripts/{surface} och GET /api/managed-scripts/{surface}/bundle.js för vbulletin och feed.
- Den mergade bundlen laddar nu externa
script src-rader, kör inline-snippets i konfigurerad ordning och skyddar mot dubbel initiering av samma inline-/externa script på samma sidladdning.
2026-04-25
X mention-bot - första dry-run/admin/API-grunden för explicit mention-hantering är nu på plats
- Tools har nu en första grund för en X mention-bot under Social Media Tools, med en dedikerad adminsida för botstatus, polling, dry-run-kandidatsvar, opt-outs och diagnostik.
- Samma X-botpanel stödjer nu också fallback-custom instruction + mood samt keyword-baserade svarsprioritetsprofiler, så inkommande mentions kan routas olika beroende på vilken svarsriktning som är mest hjälpsam för orden eller fraserna i mention-texten.
- X-botten kan nu också bevaka konfigurerbara publika triggerord som
Tornevall utanför direkta mentions när Only explicit @mentions sätts till No, och dessa poster lagras/granskas via den vanliga interaktionskön.
- X-bottens polling går nu igenom flera resultatsidor från X per körning i stället för bara första sidan, vilket minskar risken att burstig mention-trafik bara delvis ingestas och sedan missas tyst.
- Operatören kan nu aktivera fördröjd auto-approval för köade X-svar med randomiserade min/max-sekundfönster, så cronstyrda svar inte behöver skjutas iväg på exakt samma sekund varje gång.
- När manuell approval fortfarande krävs kan X-botten nu också notifiera operatören via mail och/eller Slack för riktiga runtime-händelser som nya ingests, review-klara kandidatsvar, postningsförsök och auto-approve-varv.
- Services-sidan, startsidans verktygsgenvägar och den inloggade dashboarden visar nu också en dedikerad X Mention Bot-genväg så operatören slipper hitta den enbart via den bredare Social Media Tools-hubben.
- Själva X-botens adminsida är nu stylad som en riktig operatörsdashboard i stället för en nästan oformatterad Bootstrap-lik formdump, med tydligare statuskort, grupperade konfigurationspaneler, mer läsbar diagnostik och tätare modererings-/händelsetabeller.
- Samma X-bot-adminsida förklarar nu också read-vs-write-credential-skillnaden tydligare, så operatören direkt ser när mentions kan ingestas men replies fortfarande inte kan postas därför att nödvändiga X-sidiga user-context-skrivcredentials saknas.
- Centrala X-botfält på sidan sparas nu inline via AJAX vid blur/change, senaste interaktionsåtgärder som Reprocess / Approve/post / Skip kör nu också via AJAX, och list-textareas kan nu tömmas rent via explicita clear-åtgärder.
- X-bot-dokumentationen och diagnostiktexterna säger nu också uttryckligen att dessa saknade write-credentials hör till själva botkontot på X-sidan, inte till Tools API-nycklar eller interna Tools-tokens.
- Samma diagnostik-/eventtexter förklarar nu också nästa vanliga postningsblocker tydligare: om X returnerar ett oauth1 app-permissions-fel trots att tokens finns, behöver X developer-appen sannolikt fortfarande Read and write-behörighet och user-token-paret brukar behöva regenereras efter den ändringen.
- Händelseloggen på sidan är nu också mer human readable, med summerade diagnostic-/posting-/pollingutfall och expanderbar rå payload i stället för bara stora råa JSON-block.
- X-bottens AI-defaults riktas nu mot
gpt-5.4 med reasoning aktiverad som standard och automatisk fallback till gpt-4o-mini när primärmodellen fallerar, nekar reasoning-flaggan eller returnerar ett tomt svar.
- X-bottens adminsida har nu också en persistent händelselogg så operatören kan se vad som faktiskt hänt under diagnostik, polling, processing, opt-out-åtgärder och postningsförsök i stället för att bara se den senaste skärmbilden.
- Backend kan nu lagra ett primärt botkonto plus idempotenta mention-/interaktions-/opt-out-rader, polla nya mentions från X, sanera synlig trådkontext och generera AI-kandidatsvar utan att tvinga omedelbar postning.
- Trådkontexten är nu också starkare: botten går nu bakåt i reply-kedjor, sorterar den synliga promptkontexten oldest-first och låter keyword-baserade svarsprioritetsprofiler matcha mot den inhämtade trådhistoriken i stället för bara senaste posttexten.
- X-uppslag för tweets innehåller nu också media-metadata och alt-text när plattformen exponerar det, så svar kan förhålla sig ärligare till bifogade bilder/video samtidigt som botten tydligt säger till när råa bilddetaljer saknas.
- X-botten kan nu svara på explicita frågor om namn/version med etiketter som
ToolsGPT-v0.1.0, där namnet hämtas från den synkade X-kontoidentiteten och bara versionssuffixet är operatörskonfigurerbart.
- Nya ToolsAPI-endpoints exponerar nu X-botens status/config, diagnostik, senaste interaktioner, enskild interaktion, reprocess/approve/skip samt opt-out-hantering för behöriga Tools-operatörer.
- Underliggande X-sidiga credentials hålls fortfarande på serversidan, medan själva reply-/polling-beteendet fortsatt styrs från Tools-inställningarna.
- Operatören kan nu också köra botten direkt från konsol via
php artisan x-bot:poll-mentions eller de nya hjälpskripten i repository-roten run-x-bot, run-x-bot.sh och run-x-bot.bat, och X-bot-dokumentationen beskriver nu även manuellt --no-dispatch-läge samt scheduler-flödet.
Besöksstatistik - webbbesök och API-trafik delas nu tydligare upp, medan exkluderad automation fortsatt hålls utanför
- Sidan
/visit-stats visar nu vanliga webbbesök och spårade API-anrop som två tydligt separerade trafikgrupper i stället för att låta dem flyta ihop som ett blandat användningsmått.
- API-paths som inte ska vara med i besöksstatistiken alls hålls nu fortsatt exkluderade både vid insamling och i rapporteringen, så äldre och nya
/api/rss/*-anrop från scrapers inte läcker tillbaka in i synliga API-totaler och trender.
- Statistikvyn visar nu också explicit vilka API-prefix som är permanent exkluderade, så operatören direkt ser vilka automatiserade endpointfamiljer som medvetet inte räknas.
Brandvägg - asynkron host-list-refresh, CIDR-expansion för bokstavliga IP:n och säkrare scoped full on/off
- Host-list-refresh i
/firewall/live startar nu asynkront och exponerar spårad progress/status via polling, så admin-sidan kan visa tydlig per-list-status utan att hela webbförfrågan blockeras medan DNS- och RDAP-/nätuppslagningar körs.
- Bokstavliga IP-poster i firewall host block lists går nu igenom samma RDAP-/nätintervallsexpansion som hostnamnsupplösta adresser, vilket gör att en inklistrad service-IP fortfarande kan bli ett bredare lagrat CIDR-nät när registerdata visar det.
- Scoped full off/full on för barn är nu konsekvent per barn-IP: selected-IP full off tar först bort matchande regeldata bara för de valda barn-IP:na innan den nya starka regeln skrivs, och selected-IP full on tar bara bort matchande starka/selektiva targets i stället för att radera orelaterade regler för andra barn-IP:n.
fwmaker och Laravel-sidans live-rule-rendering använder nu båda explicit prioritet per target-IP, så full_block vinner över internet_block, som vinner över allow_only_local, oavsett skapelseordning, samtidigt som CIDR-destinationer bevaras i genererad output.
Mail Support Assistant - Tools-ärenden lagrar nu läsbara headers och synkar hanterade/ignorerade mail säkrare
POST /api/mail-support-assistant/cases/sync accepterar nu också additiva headers_raw, headers_map och body_text_raw, och Tools lagrar dessa centralt på ärendemeddelanden så fjärroperatörer kan läsa headers samt rå/plain/HTML-body i stället för bara utdrag.
- Tools admin-ärendesidan på
/admin/mail-support-assistant/cases/{id} visar nu lagrade råa headers, parsade headerkartor, rå plain-text-body, normaliserad plain-text-body och HTML-body under meddelandedetaljerna.
- Standalone-runnern försöker nu fortfarande synka Tools-ärenden för hanterade/ignorerade/manuella utfall även när mailet saknar en stabil lokal message-state-nyckel, vilket fixar fall där mailet såg processat ut lokalt men aldrig dök upp i den fjärrlagrade Tools-tråden.
2026-04-24
Brandvägg - live-styrning för barn med tabeller, Tools-editor, API och fwmaker-output
- Tools har nu ett dedikerat live-lager för barns nätstyrning under
/firewall/live, separat från den äldre generiska editorn för brandväggstabeller, där operatören kan hantera barn, deras IP-adresser, host block lists, upplösta blockmål och live-regler från ett och samma ställe.
- Barnvyn i editorn har nu också en barncentrerad multi-select/listbox för host block lists, så selektiv internetspärr kan sparas direkt som “vilka listor ska just detta barn spärras mot?” i stället för att bara bygga på generella enable/disable-flöden för regelrader.
- Tools exponerar nu en första
/api/firewall/*-yta för funktionen, inklusive listning/uppdatering av barn, hantering av barns IP-adresser, hantering av host block lists, live-regler, snabb blockering/upplåsning av barn samt en sync-endpoint för brandväggsomskrivning.
GET /api/firewall/children kan nu också innehålla additiva selected_host_block_list_ids, och Tools accepterar nu PUT /api/firewall/children/{child}/host-block-lists så klienter kan spara det barncentrerade selektionsläget direkt.
- Uppdatering av host block lists gör nu också en best-effort-uppslagning mot RDAP/nätregister för hostnamnsupplösta IP-adresser, så Tools kan lagra CIDR-liknande servicenät när registersvaret visar dem i stället för att bara spara en enda upplöst hostadress.
- Snabb blockering av barn och synk av selektiva host block lists kan nu riktas mot antingen alla barnets IP-adresser eller bara utvalda barn-IP:n, och firewall-API:t accepterar nu additiva
target_scope samt child_ip_address_ids[] för dessa flöden.
GET /api/firewall/children och GET /api/firewall/live-child-rules kan nu returnera additiv target-metadata som selected_host_block_list_target_scope, selected_host_block_list_child_ip_address_ids, target_child_ip_address_ids, target_ip_addresses och target_scope_summary så klienter säkert kan rendera exakt per-IP-omfång.
- Det nya live-state:t lagras nu i dedikerade tabeller i firewall-databasen (
child, child_ip_addresses, host_block_lists, host_block_list_addresses, live_child_rules) i stället för att försöka pressa in funktionen i de äldre brandväggstabellerna.
- Live-schemat innehåller nu också
live_child_rule_ip_targets, vilket gör att en live-regel kan gälla alla barnets IP:n eller bara en vald delmängd utan att systemet behöver låtsas att hela barnet har samma blockläge.
fwmaker läser nu detta live-state och genererar en dedikerad child_live-chain i FORWARD-flödet, så starka barnblockeringar och selektiva hostlist-blockeringar faktiskt blir iptables-output i stället för bara databasrader.
- Själva brandväggsgeneratorn har också moderniserats internt:
fwmaker använder nu den extraherade helpern firewall_pdo.php i stället för det äldre TorneDB-beroendet, de gamla templateplatshållarna har normaliserats för nyare PHP-versioner, den aktiva bitcom-genereringen har tagits bort, runfwmaker faller nu tillbaka mellan installerade PHP-binärer i stället för att bara dö när php7.2 saknas, och wrappern dämpar nu föråldrade CLI-varningar om mapi.so genom att använda tom PHP scan-dir när pdo_mysql fortfarande finns tillgängligt.
DNSBL-whitelist - ny publik statussida och lokalnäts-rensning
- Tools har nu en ny publik sida på
/dnsbl/statistics, där besökare/operatörer kan se DNSBL-räknarna tillsammans med de aktiva whitelist-raderna som läses från DNSBL_V5.ipwhitelist.
- Whitelistdelen visar nu radbeskrivningar när de finns, och rader markerade med
is_local_network lyfts fram som blacklist-undantagna lokalnätsrader som normalt ska rensas bort om de ändå dyker upp i DNSBL-zonerna.
/admin/dnsbl/engine-settings visar nu samma whitelist-/lokalnätsöversikt och har också en dedikerad åtgärd Purge local networks now som tar bort listade blacklist owners vars dekodade IP matchar de aktiva lokalnätsraderna av typen IP/CIDR.
- Den tidigare RFC1918-baserade hygiene purge finns fortfarande kvar separat, så operatören kan fortsätta rensa både hårdkodade privata nät och tabellstyrda lokalnätsundantag.
DNSBL API - ny stats-endpoint för query-/add-/remove-räknare
- Tools exponerar nu
GET /api/dnsbl/stats, som returnerar API-läsbara räknare för /api/dnsbl/*-trafik samt databasbackade logiska DNSBL-utfall för add/delete/update.
- DNSBL-adminsidan för engine settings visar nu samma räknare direkt i DNSBL-sektionen, så operatören snabbt kan se hur många additions, removals, dry-runs och
already_not_listed-delete-no-ops som har registrerats.
- Befintliga DNSBL-loggar/audits var redan användbara för manuell felsökning, men de var inte en stabil API-läsbar räknarkälla för POST-baserad add/delete-aktivitet; den nya statspersistensen är nu den kanoniska räknarytan framåt.
DNS- och DNSBL-dokumentation - säkrare publik rendering och tydligare API-exempel
- Den publika DNS API-guiden (
/docs/sv/dns-api) skrevs om för att ta bort trasiga markdown-/exempelblock, justera exemplen till de faktiska /api/dns/*-endpointsen och förklara nuvarande auth-, cache-, sök- och write-flöden tydligare.
- Den publika DNSBL / FraudBL-guiden (
/docs/sv/dnsbl-api) har nu en tydligare snabbstart samt mer praktisk vägledning för tokenkontroll, liveinspektion, add/update, delete och dry-run i dagens ToolsAPI-integrationer.
- Docs-vyn wrappar nu långa inline-kodsnuttar, URL:er, tabeller och kodblock säkrare så stora API-exempel i mindre grad spräcker layouten i webbläsaren.
2026-04-23
DNSBL-engine - delistkörningar packar nu upp RESEND-wrappermail utan att auto-köra återställda mail
dnsbl-engine skannar nu också en dedikerad RESEND-spool under delist/reply-körningar och packar upp bifogade/originala .eml-mail som till exempel ForwardedMessage.eml, så att den yttre SpamAssassin-/Thunderbird-wrappern inte längre blir det som operatören fortsätter att se och återköra.
- Återställda mail får nu stabila filnamn baserade på
Message-ID när det går, vilket gör manuella resend-/omkörningsflöden lättare att följa i spoolen.
RESEND är nu unpack-only: de återställda/originala mailen lämnas kvar i RESEND-spoolen och skickas inte automatiskt vidare in i samma delist/reply-körning.
- När
RESEND är en Maildir-sökväg och runnern skannar cur/ skrivs återställda mail nu tillbaka till syskonmappen new/, så mailklienten kan visa det uppackade originalet som ett separat meddelande.
- Icke-mailbifogningar från dessa wrappermail sparas fortfarande under
RESEND/__attachments/ för operatörsinspektion, medan själva wrappermailet städas bort efter lyckad uppackning.
- Delistläget loggar nu också tydligare att det separata
FORUM-bounce-segmentet fortfarande körs tillsammans med delist/reply-hanteringen, så forummottagarstudsar fortsätter att ingå i samma operatörspass.
2026-04-21
Mail Support Assistant - central ärendehistorik lagrar nu full body, och standalone kan kringgå trasig lokal TLS-verifiering
POST /api/mail-support-assistant/cases/sync accepterar nu additiva full-body-fält (body_text, body_text_reply_aware, body_html, reply_body_text, reply_body_html), och Tools admin-ärendesidan visar nu detta centralt lagrade innehåll i stället för att bara luta sig mot korta utdrag.
- Synkade ärenderader bär nu också metadata om source-instance/source-host, vilket gör det tydligare i Tools admin vilken standalone-runner/server som hanterade eller besvarade ett meddelande.
- Standalone-runnern uppdaterar nu en stabil lokal message copy för varje skannat mail, så dashboarden/manualhanteringen ser betydligt mindre ut som att body-texten försvunnit mellan körningarna.
- Standalone har nu också explicita env-flaggor för TLS-override både för Tools API-anrop och direkt SMTP (
MAIL_ASSISTANT_TOOLS_SSL_VERIFY, MAIL_ASSISTANT_TOOLS_CA_BUNDLE, MAIL_ASSISTANT_SMTP_SSL_VERIFY, MAIL_ASSISTANT_SMTP_CA_FILE), vilket hjälper WSL-/self-signed-miljöer när lokal CA-trust är trasig.
RSS Watch - publika /feed länkar nu direkt till support för frågor, klagomål och rättelser
- Den publika RSS-sidan visar nu en tydlig support-/kontaktsektion intill befintliga läsar-/disclaimer-delar.
- Besökare hänvisas nu både till vanliga kontaktsidan och direkt till
support@tornevall.net, så feedrelaterade frågor, klagomål och rättelser kan gå rakt in i supportflödet.
Mail Support Assistant - Tools lagrar nu trådade supportärenden och standalone kan rapportera obesvarade mail
- Den fristående Mail Support Assistant-klienten kan nu synka behandlade inkorgsutfall tillbaka in i Tools som trådade supportärenden, vilket gör konversationerna synliga från
/admin/mail-support-assistant i stället för bara i en lokal latest-run-fil.
- Tools exponerar nu
GET /api/mail-support-assistant/cases samt POST /api/mail-support-assistant/cases/sync så standalone-klienten kan hämta nyligen lagrade ärenden och uppdatera ett trådsnapshot tillbaka in i Tools.
- Standalone-dashboarden kan nu också blanda in en live-preview av olästa IMAP-mail, så oläst supportmail kan dyka upp i assistentens webbgränssnitt även innan en ny sparad körning har hunnit skrivas.
- Utgående assistentsvar kan nu bifoga en publik Tools-länk för ärendespårning till mottagaren när ärendet hunnit förberedas före leveransen.
- Standalone kan nu också skicka ett operatörsmejl som sammanfattar vilka meddelanden som inte besvarades under körningen när
MAIL_ASSISTANT_UNANSWERED_REPORT_ENABLED är aktiverad.
DNSBL / forumadmin - studsade forummottagare kan nu grupperas automatiskt via ett eget FORUM-spool/API-flöde
dnsbl-engine har nu ett dedikerat FORUM-spoolsegment för bounce-/mailer-daemon-mail som är separat från vanlig DNSBL add/delist-hantering, på samma sätt som det tidigare separata DMARC-segmentet.
- Tools exponerar nu
POST /api/dnsbl/forum/bounce, där avvisade mottagaradresser från dessa bounce-mail kan matchas mot vBulletin-användare och läggas i en konfigurerbar forumgrupp för studsad e-post som sekundär grupp.
- Aktuell grupp-ID för studsad e-post och undantagna forumgrupper är nu konfigurerbara från Tools vBulletin-adminsida, så admin-/operatörsgrupper kan lämnas utanför det automatiska grupperingflödet.
- Tools exponerar nu också
GET /api/dnsbl/engine-settings, som returnerar de normaliserade runtime-inställningarna som dnsbl-engine använder, inklusive forum-bounce-flaggan och gruppkonfigurationen.
Mail Support Assistant - standalone-dashboarden stöder nu manuell hantering, quota-alerts och terminala no-match-stopp
- Den fristående dashboarden för Mail Support Assistant beter sig nu mer som en lightweight operatörsmailklient: meddelandekorten från senaste körningen kan välja lokal regelkontext, skicka manuellt svar eller markera ett mail som manuellt hanterat/läst utan att invänta nästa cronkörning.
- Manuella operatörssvar återanvänder nu samma plain-text + stylade HTML-svarspipeline som de automatiska svaren, så manuellt skickade supportsvar får samma synliga format och samma bifogade request-sammanfattning.
- AI-quota-/billingfel lyfts nu upp som tydliga runtime-alerts i standalone-dashboarden, och standalone kan valfritt skicka cooldown-begränsad operatörsnotis när
MAIL_ASSISTANT_QUOTA_ALERT_EMAIL är konfigurerad.
- När den strikta AI-/slutfallbacken för omatchade mail verkligen har utvärderats men ändå slutar i ett terminalt reject-/error-utfall markerar standalone-runnern nu meddelandet som läst för manuell uppföljning, så pollningen av olästa mail inte fortsätter att köra samma no-match-AI i all evighet.
Mail Support Assistant - standalone-körningar är nu overlapsäkra och återanvänder ett stabilt ärende-id i ämnesraden
- Fristående CLI-/dry-run-körningar tar nu en lokal run lock innan olästa mail pollas, så överlappande cron-/dashboard-invokeringar hoppas över rent i stället för att samma assistentinstans dubbelbehandlar samma mailbox.
- Overlap-vägen returnerar nu en strukturerad
runner_already_active-konflikt tillsammans med metadata om den aktuella låshållaren, vilket gör operatörsfelsökning enklare när en tidigare körning fortfarande pågår.
cron-run.sh håller nu också ett eget PID-medvetet shell-lås med städning av stale-lås, så överlappande cronkörningar kan stoppas redan innan PHP-runnern ens startar.
- Utgående standalone-svar kan nu stämpla in en stabil ärende-/case-tagg i ämnesraden (standardstil ungefär
[Ärende MSA-ABC12345]), och senare svar i samma konversation återanvänder samma tagg i stället för att lägga till ett nytt ärende-id varje gång.
Mail Support Assistant - stylade HTML-svar renderar nu markdown i stället för rå markdown-syntax
- Den stylade HTML-delen i standalone-assistentens utgående svar konverterar nu vanlig markdown från AI-/operatörstext till riktig HTML-struktur som rubriker, listor, länkar, betoning och inline-kod.
- Plain-text-delen finns fortfarande kvar för kompatibilitet, men HTML-kapabla mailklienter ser nu formaterat innehåll i stället för rå markdown som
**fetstil** eller - listpunkter.
OpenAI- / SocialGPT-auditing - Slack-audit visar nu aktör, IP och läsbar felorsak
- Operatorriktade Slack-auditposter för SocialGPT/OpenAI-requester visar nu löst användaridentitet (namn/e-post när det finns), request-IP och en läsbar
error_reason när ett upstream-/provideranrop misslyckas.
- Sammanfattningen för social media-audit visar nu också aktör och IP direkt i audittexten så det blir lättare att se vem som utlöste requesten som skapade ett svar eller fel.
SocialGPT-svarsendpointen - strukturerade providerfel bryter inte längre fallback-flödet
POST /api/ai/socialgpt/respond normaliserar nu strukturerade upstream-fel från OpenAI/provider till vanlig feltext innan retry/fallback-logiken körs.
- Det förhindrar upprepade
Array to string conversion-fel när providern returnerar nästlade JSON-felobjekt i stället för en enkel sträng, samtidigt som det befintliga fallback-flödet fortsätter fungera.
Mail Support Assistant - HTML-/icke-UTF8-body används nu säkrare i matchning och AI-kontext
- Den fristående mailklienten dekodar nu HTML-baserade inkommande mail till läsbar plain text innan regelmatchning, AI-triage för omatchade mail, bifogade request-sammanfattningar och sparade lokala message copies byggs.
- MIME-bodydekodningen är nu charset-medveten, vilket förbättrar läsbarheten för icke-UTF8 eller på annat sätt trasiga supportsvar i stället för att det ska se ut som om bara subject användes.
- Den strikta JSON-parsern för omatchade mail tolererar nu också några vanliga mindre formateringsfel från provider/modell (till exempel smart quotes eller trailing commas) innan svaret slutligen klassas som malformed JSON.
DNS-editorn - cachade sidor visas nu direkt medan AXFR kör i bakgrunden
- När DNS-editorn redan har cachade rader för en zonsida renderas den cachade tabellen nu direkt i stället för att hela sidan blockeras tills AXFR är klar.
- När bara en utgången/stale cachad sida finns kvar returnerar cache-endpointen nu ändå den sidan direkt (
source="from_database_stale") så editorn kan visa något användbart omedelbart i stället för att bara fastna på AXFR-snurran.
- Editorn byter nu bara ut den synliga tabellen när det färdiga AXFR-resultatet faktiskt ändrar den visade sidan eller pagineringsläget.
- Om AXFR blir exakt samma synliga resultat som den cachade sidan lämnas tabellen orörd för att undvika onödigt redraw/flimmer.
2026-04-20
Mail Support Assistant - strikt Tools-konfigurerad sista fallback för omatchade mail
/admin/mail-support-assistant visar nu en strikt mailboxnivå-fallback för helt omatchade mail med en tydlig aktiveringskryssruta samt egna textfält för allow-condition och sista instruktion.
- Den fallbacken får nu bara aktiveras när mailboxens checkbox uttryckligen är påslagen i Tools-konfigurationen; gamla miljöflaggar räcker inte längre för att slå på den.
- Avancerade omatchade IF-rader stöds fortfarande, men de utvärderas nu före mailboxens egen sista fallback.
- När denna strikta omatchade fallback faktiskt skickar ett svar markerar standalone-runnern nu mailet som läst direkt så att det inte hanteras igen vid nästa pollning av olästa mail.
- Mailboxformuläret skickar nu också ett explicit falskt värde när checkboxen inte är ikryssad, och standalone-runnern vägrar utvärdera några omatchade AI-rader alls när Tools säger att checkboxen är avstängd, även om äldre omatchade textfält fortfarande innehåller värden.
- Omatchade AI-requester inkluderar nu också källmetadata (
advanced_row_rule respektive mailbox_final_fallback) i requestkontexten så upstream-loggar från SocialGPT/OpenAI blir lättare att koppla till rätt omatchad fallback-väg.
DNS-editorn - inline-raden för uppdatering stängs nu korrekt efter lyckad sparning
- Den inline-visade Update Record-editorn i
/dns/editor/{zone} stängs nu direkt igen efter en lyckad DNS-uppdatering i stället för att ibland lämna edit-raden kvar på sidan.
- DNS-editorn bygger nu den inline-editorn som en riktig tabellrad, vilket också gör upprepade editera/avbryt/spara-flöden stabilare.
DNS-editorn - cachad/AXFR-laddning av zoner rensar nu null-bytes före IP-normalisering
- DNS-editorn och zoncache-flödet sanerar nu inbäddade null-/kontrolltecken innan reverse-owner-avkodning och IP-normalisering via
inet_pton() körs.
- Det förhindrar att zonsidor som
/dns/editor/tornevall.net kraschar med inet_pton(): Argument #1 ($ip) must not contain any null bytes när felaktig äldre cache-/zondata förekommer.
SpamAssassin-editorn - rena whitelist-domäner expanderas åter till det äldre wildcard-paret
- I whitelist-editorn för SpamAssassin återställs nu det tidigare beteendet: om man bara anger en domän som
openai.com läggs både *@openai.com och *@*.openai.com till automatiskt.
- Remove-flödet för whitelist behandlar nu också dessa genererade wildcard-rader som ett gammalt domänpar igen, så om man tar bort någon av de genererade
openai.com-raderna försvinner även den tillhörande kompanjonraden.
OpenAI-admin + kontoregistrering + API-whitelist - adminvyerna är nu stabilare och mer lättlästa
/admin/openai använder nu en säkrare renderingsväg för JavaScript-delen som uppdaterar modellkatalogen, vilket gör att adminsidan åter kan renderas stabilt efter de senaste OpenAI-dashboardändringarna.
- Det publika registreringsformuläret på
/register har nu en valfri fråga: Where did you hear about us?.
- Svaret sparas nu på användaren, följer med i e-postnotisen om nytt konto och visas för admin i
/users och /users/{user}/edit tillsammans med registrerings-IP.
/admin/security/api-ip-whitelist har stylats om för att bättre matcha övriga admin-UI:t och innehåller nu inline-redigering i stället för den tidigare trasiga edit-knappen.
DNSBL - privata RFC1918-adresser kan nu rensas från admin och blockeras vid framtida writes
/admin/dnsbl/engine-settings innehåller nu en hygien-purger som tar bort reverse-owner-poster i DNSBL / FraudBL för privata IPv4-nät i 10.0.0.0/8, 172.16.0.0/12 och 192.168.0.0/16.
- DNSBL/FraudBL-skrivlagret blockerar nu också nya add/update-publiceringar för dessa RFC1918-nät så privata adresser inte kan återinföras via normala Tools-writes.
- DNSBL add/update-anrop som träffar detta skydd returnerar nu
422 med reason="private_ipv4_not_allowed_in_dnsbl".
Mail Support Assistant - standalone-dashboarden förklarar nu config-only-mailboxar och visar läsbara Tools-regelrader
- Den fristående Mail Support Assistant-dashboardens Refresh dashboard använder nu åter den stödda reload-vägen i stället för att visa
Unknown ajax action..
- Aktivitetsfliken listar nu fortfarande konfigurerade mailboxkort även innan någon sparad dry-run/riktig körning finns, samtidigt som den tydligt förklarar att detta är en operatörsinbox för senaste körningen och inte en full live-IMAP-klient.
- Fliken för Tools-config visar nu läsbara matchade regelrader, fallback-regeldetaljer och omatchade AI/IF-rader (inklusive footer, AI-modell och reasoning effort) utan att operatören måste förlita sig enbart på rå JSON.
Browser Automation - Playwright-baserade lagrade scripts kan nu köras från Tools admin och cron
- Tools har nu en ny adminyta för Browser Automation där operatören kan lagra Playwright-baserade browserscript direkt i databasen.
- Script kan använda Chrome / Chromium / Microsoft Edge, återanvända valfria persistenta browserprofiler för inloggningstunga sajter som Facebook och spara screenshots / JSON / textartefakter under
storage/app/browser-automation/.
- Operatören kan köra ett sparat script direkt från admin-UI:t, anropa det via
php artisan browser-automation:run <key> eller schemalägga det via det befintliga DB-baserade jobbflödet med App\Jobs\Handlers\BrowserAutomationScheduledJobHandler.
- Laravel-schedulern kör nu också
jobs:run varje minut, så cronbaserade schemalagda jobb kan gå via vanlig schedule:run i stället för att enbart vara beroende av opportunistisk webbtrafik.
- Create/edit-sidan på
/admin/browser-automation/create är nu stylad som ett tydligare adminformulär med klarare runtime-sektioner, inbyggt smoke-testexempel och sidokolumn med testvägledning för första verifieringen.
DNSBL-plugin för WordPress - publik removal-Turnstile kan nu fail-openas automatiskt vid driftstörningar
- WordPress-pluginet för DNSBL har nu en andra removal-side-Turnstile-checkbox som tillfälligt bypassar den publika delist/removal-challengen när själva Turnstile-widgeten inte kan initieras eller när Cloudflares verifiering har ett operativt fel.
- Det här fail-open-beteendet gäller bara den publika delist/removal-flowen; kommentar- och registreringsskyddet för Turnstile fortsätter att styras av sina egna inställningar.
- En senare frisk Turnstile-verifiering stänger automatiskt den temporära bypassen igen.
DNSBL-plugin för WordPress - Turnstile på den publika avlistningssidan styrs nu separat
- WordPress-pluginet för DNSBL har nu en egen admin-inställning för Cloudflare Turnstile på den publika delist-/removal-sidan.
- Removal-sidan ärver inte längre Turnstile automatiskt bara för att kommentar- eller registreringsskyddet använder det.
- Det gör att operatören snabbt kan stänga av just removal-sidans challenge när
challenges.cloudflare.com är instabilt, samtidigt som skyddet för kommentarer och kontoregistrering kan lämnas oförändrat.
Mail Support Assistant - uppföljningsmail i reply-kedjor återanvänder nu tidigare supportspår smartare
- Den fristående Mail Support Assistant kan nu återanvända den tidigare matchade regeln när ett nytt oläst uppföljningsmail tydligt hör till en redan hanterad konversation via
In-Reply-To / References.
- Uppföljningsmail som tidigare hanterades via no-match-AI kan nu också prioritera den tidigare använda
generic_no_match_rules[]-raden först i stället för att alltid börja om från rad 1, vilket hjälper kortare repository-/API-följdfrågor att stanna på samma svarsspår.
- Lokala trådsammanfattningar som skickas in i AI-kontexten innehåller nu också metadata om tidigare vald regel / tidigare matchad no-match-rad, vilket gör reply-kontinuiteten tydligare både för operatören och för AI-klassificeringen.
- Standalone-skickade svar sparar nu också ett genererat utgående
reply_message_id i lokal state, vilket förbättrar kontinuiteten när senare Gmail-/Outlook-följdmail refererar till assistentens skickade mail i stället för originalmailet.
- Om ett uppföljningsmail kommer i ett äldre format eller har skrivits om på vägen så att användbara
In-Reply-To / References saknas kan standalone-runnern nu ändå prova en fallback via normaliserat subject + samma deltagare innan mailet behandlas som en ny no-match-konversation.
- Om en no-match-tråd redan godkänts tidigare och ett senare följdmail är uttryckligt länkat via reply-headers kan standalone-runnern nu fortsätta direkt på samma tidigare använda no-match-rad i stället för att be den första allow-condition-klassificeraren godkänna samma tråd på nytt.
- Per-message-diagnostik i standalone-körresultat visar nu också
thread_key, in_reply_to och references[], vilket gör reply-chain-felsökning betydligt tydligare när mail oväntat faller ner till no-match.
Mail Support Assistant - standalone-dashboarden är nu mer lättläst
- Den fristående dashboarden för Mail Support Assistant renderar nu en mer mailklientlik operatörsvy i stället för att mest visa råa JSON-block.
- Senaste körningens mailboxaktivitet visas nu som expanderbara meddelandekort med subject/from/to/date, previewtext, vald regel/no-match-diagnostik och trådmetadata.
- När en lokal cachad message copy finns kan dashboarden nu också visa sparade headers/body-preview i expanderbar diagnostik i stället för att operatören måste läsa råfiler manuellt.
Mail Support Assistant - klartextsammanfattningar från kontaktformulär behåller nu själva problemtexten
- Den fristående Mail Support Assistant trunkerar inte längre klartextmail från kontaktformulär till bara första
From:-liknande raden när den strukturen ligger inne i själva bodyn.
- Requestsammanfattningar, bifogade Summary of your request-utdrag och AI-kontext bevarar nu i stället själva fel-/problemtexten samt hjälpfält som avsändar-IP när inkommande mail använder den typen av strukturerat klartextformat.
DNSBL / DMARC - DMARC-intagning kräver nu aktiv DNSBL-token med add-rätt
POST /api/dnsbl/dmarc/report accepterar inte längre anonyma/interna uppladdningar, adminsessionsfallback eller vanlig Tools API-nyckelspassthrough.
- DMARC-intagningen lyckas nu bara när anroparen skickar en aktiv DNSBL-token vars effektiva add-rätt är aktiverad (
can_add=true).
- Aktiva DNSBL-provider keys (
provider=tornevall_dnsbl) och aktiva adminägda Tools API-nycklar accepteras nu åter för DMARC-upload via samma X-Dnsbl-Token / dnsbl_token-transport, i linje med övrig DNSBL-write-auth.
- Saknade/ogiltiga/inaktiva DNSBL-token ger nu
401, medan aktiva DNSBL-token utan add-scope ger 403 reason="insufficient_dnsbl_scope".
projects/dnsbl-engine lämnar nu DMARC-filer kvar i spoolen när upload nekas, och DMARC-only-körningar verifierar nu först att det konfigurerade DNSBL-tokenet verkligen har add-rätt innan körningen fortsätter.
- DMARC-parsern extraherar nu också XML korrekt från vidarebefordrade/wrappade
message/rfc822-mail där själva DMARC-rapporten ligger som nästlad ZIP-attachment, vilket fixar falska invalid_dmarc_report-fel för den typen av inbound-mail.
- Dubblettuppladdningar av samma DMARC-payload är nu idempotenta även när identiska payloads når samma unika
payload_hash samtidigt; endpointen returnerar nu den redan sparade rapporten med duplicate: true i stället för att exponera ett rått SQL-duplicate-entry-fel.
- DMARC-parsern accepterar nu också notice-/forensic-liknande DMARC-mail som sammanfattar
Sender Domain, Sender IP Address, SPF Alignment, DKIM Alignment och DMARC Results tillsammans med kopierade headers, så att även dessa rapporter kan hamna i samma adminkö när aggregate-XML saknas.
- DMARC-granskningskön i admin resolvar nu också reverse-DNS-hostnames för rapporterade käll-IP-adresser och visar rapporttyp (
Aggregate XML respektive Forensic notice) för att förenkla operatörens triage.
Mail Support Assistant - omatchade IF-rader kan nu raderas direkt i sidan
/admin/mail-support-assistant tar nu bort omatchade fallback-IF-rader via AJAX utan att hela sidan måste laddas om.
- Tomläget för omatchade rader återställs direkt när den sista raden raderas.
- Samma omatchade IF-rader sparas nu också direkt via AJAX med radlokal busy-/success-status under spara-knappen i stället för att bara luta sig mot sidans globala statusrad.
Mail Support Assistant - förutsättningar och supportväg är nu tydligare dokumenterade
- Dokumentationen för Mail Support Assistant beskriver nu tydligare vad som faktiskt krävs för en fungerande installation, inklusive riktigt Tools-konto, åtkomst till
/admin/mail-support-assistant, giltig personlig Tools-token, mailboxkonfiguration i Tools, nåbar Tools base URL och vald utgående mailtransport.
- Dokumentationen länkar nu också vidare till den fristående klientens GitHub tickets-sida för buggar, installationsfrågor och feature requests.
2026-04-19
DNSBL - delist/removal-auditering visar nu käll-/sajtdata och kan också skickas via mail
POST /api/dnsbl/records/delete och delete-poster i POST /api/dnsbl/records/bulk berikar nu den dedikerade DNSBL-removal-auditen med källmetadata som source_type, source_name, sajt-URL/värd, page-URL, request-headers som Origin och Referer, samt user-agent när sådan information finns.
- Själva auditmeddelandet för DNSBL-removals visar nu också en tydligare sammanfattning av källa/anropare så operatören kan se inte bara vilken IP/zon som delistades utan även varifrån begäran kom.
- DNSBL-removal-auditen fortsätter att kunna forwardas till den separata Slack-kategorin DNSBL removal audit och kan nu också skicka plain-text-auditmail till mottagarlistan i
DNSBL_REMOVAL_AUDIT_EMAIL.
- WordPress-pluginet för DNSBL stämplar nu sina Tools write/check-anrop med sin egen sajtkontext, så removal-auditen kan visa vilken sajt som skickade en delist även när anropet sker server-till-server.
- DNSBL-delete för IP-adresser som redan inte är listade någonstans returnerar nu en accepterad no-op-respons (
reason="already_not_listed", forced_success=true) i stället för ett hårt invalid_dnsbl_publication-fel, vilket gör delist-cleanup idempotent för klienter som dnsbl-engine.
DNSBL / DMARC - DMARC-intagning och granskningskö har lagts till
POST /api/dnsbl/dmarc/report tar nu emot DMARC-XML / gzip / ZIP-payloads för granskning när anropet görs med en aktiv DNSBL-token, adminsession eller en aktiv adminägd Tools API-nyckel via DNSBL-token-transporten.
- Tools lagrar nu normaliserad DMARC-rapportmetadata samt separata rader per rapporterad käll-IP så att dessa rapporter kan hanteras i
/admin/dnsbl/dmarc i stället för att behandlas som vanliga blacklistmail.
- Den nya DMARC-kön i admin låter sajtägaren publicera en rapporterad käll-IP till DNSBL som antingen
spam (16) eller spam + fraud (84), och även markera rader som ignorerade när ingen publicering ska ske.
projects/dnsbl-engine/run skannar nu också en dedikerad DMARC-spoolfolder, laddar upp payloads till den nya Tools-endpointen och skickar en supportpåminnelse stämplad med X-Tornevall-Mail-Assistant: sent när DMARC-filer finns i kön.
projects/dnsbl-engine/run stöder nu också dmarc / --dmarc-only, medan projects/dnsbl-engine/start.sh dmarc och projects/dnsbl-engine/start-dmarc.sh ger en separat DMARC-only-körning med egen PID-låsning.
dnsbl-engine - blacklistkörningar kastar nu bort uppenbara delivery-status / mailer-daemon-mail
- Vanliga
Fraud- / Spam-pass i mailmotorn städar nu bort uppenbara bounce-/DSN-/mailer-daemon-mail i stället för att blacklista relay-hopp eller avsändar-IP som råkar nämnas i dessa rapporter.
- Skippen riktar sig mot klassiska delivery subsystem-signaler som
Delivery Status Notification, Mail Delivery Subsystem, mailer-daemon, Reporting-MTA, Final-Recipient, Action: failed och Diagnostic-Code.
- Samma cleanup-only-detektor känner nu också igen
Auto-Submitted: auto-generated, Exchange- / Office 365-NDR, Gmail-bounces samt daemonrapporter i qmail-, exim- och postfix-format.
dnsbl-engine - runspam spam har nu standardtak för hur många mail som tas per pass
projects/dnsbl-engine/runspam spam skickar nu vidare en standardgräns på 1000 mail per körning till den vanliga blacklist/add-passen i stället för att lämna batchstorleken obegränsad.
- Hjälpskriptet accepterar också ett valfritt andra numeriskt argument, till exempel
runspam spam 500, när operatören vill sätta ett annat tak.
Mail Support Assistant - utgående svar får nu anti-loop-header
- Utgående svar från standalone och Tools-relay stämplas nu med
X-Tornevall-Mail-Assistant: sent.
- Standalone-pollning hoppar nu över olästa meddelanden som redan bär den markören före regelmatchning/svar och markerar dem lästa, vilket förhindrar självsvarsloopar.
Fristående Mail Support Assistant - no-match-rader fortsätter nu falla vidare även efter radlokala fel
- Standalone-runnern för omatchade mail avbryter inte längre hela no-match-loopen bara för att en enskild fallback-rad träffar ett radlokalt AI-/API-fel.
- Senare aktiva no-match-rader provas fortfarande i
sort_order, vilket nu matchar samma fall-through-beteende som redan gällde när en tidigare rad bara blev normalt avvisad av den strikta AI-triagen.
- Standalone-diagnostik för no-match-vägen visar nu också
generic_ai_decision.evaluated_no_match_rules[], så operatören kan se exakt vilka fallback-rader som utvärderades innan mailet besvarades eller lämnades oläst.
Mail Support Assistant - mailbox-tröskel för spam score kan nu stoppa svar och lämna mail olästa
- Mailbox-defaults i
/admin/mail-support-assistant har nu fältet spam_score_reply_threshold för att undertrycka svar vid för höga score-nivåer.
GET /api/mail-support-assistant/config returnerar nu additivt mailboxfältet defaults.spam_score_reply_threshold.
- Standalone-runnern läser nu
X-Spam-Score som extra score-källa när X-Spam-Status saknar parsebar score=-metadata.
- Om ett mails score ligger över mailboxens konfigurerade tröskel undertrycks svarshanteringen och mailet lämnas uttryckligen oläst.
Fristående Mail Support Assistant - dubbla avslut/signoffer rensas nu före footer-append
- När statisk footer används rensar standalone-runnern nu bort trailing AI-genererade signoff-block upprepade gånger innan mailbox-/regelfootern läggs på.
- Det förhindrar dubbla avslut i samma svar, till exempel både
Best regards och Regards.
Mail Support Assistant - ogiltiga tomma no-match-rader städas nu bort och filtreras bort
- En uppföljande städning tar nu bort ogiltiga no-match-rader där
if eller instruction är tomt, eftersom sådana rader aldrig kan passera strikt no-match-triage.
GET /api/mail-support-assistant/config filtrerar nu defaults.generic_no_match_rules[] så att endast giltiga rader (icke-tomma if + instruction) returneras.
- Om en mailbox bara hade ogiltiga rader försöker städningen backfilla en giltig rad från legacy-fälten när dessa innehåller båda värdena.
Fristående Mail Support Assistant - skippade mail trycks tillbaka till oläst och lokal state kan nu hjälpa trådkontinuitet
- När standalone-runnern skippar ett oläst mail utan att skicka svar försöker den nu uttryckligen rensa
\\Seen igen när IMAP-servern stöder det, i stället för att bara anta att mailet förblev oläst.
- Lokal
message-state.json används inte längre som unread skip-/dedupe-logik, men kan fortfarande spara lätta trådutdrag så senare AI-svar får mer realistisk konversationskontinuitet.
- Historiktyngda diagnosfält i standalone-CLI:t är fortfarande opt-in via
php run --include-history.
Mail Support Assistant - no-match-fallback använder nu add-row-baserade If... + Instructions...-regler
/admin/mail-support-assistant stöder nu mailboxnivåns add-row-regler för omatchade fallback-svar i stället för ett enda generiskt IF/instruction-par.
- Admin kan nu skapa, redigera, sortera, aktivera/inaktivera och radera flera no-match-rader per mailbox.
GET /api/mail-support-assistant/config returnerar nu additivt defaults.generic_no_match_rules[] med sorterade radobjekt (id, sort_order, is_active, if, instruction, footer, ai_model, ai_reasoning_effort).
- Bakåtkompatibilitet finns kvar: legacy-fälten
defaults.generic_no_match_if, defaults.generic_no_match_instruction och defaults.generic_no_match_footer returneras fortfarande och mappar nu till första aktiva no-match-raden när sådan finns.
- Standalone-flödet för omatchade mail utvärderar nu raderna i ordning och kan falla vidare till senare rader när en tidigare rad avvisas av den strikta AI-triagen.
2026-04-18
Mail Support Assistant - omatchade mail kan nu gå genom strikt AI-triage med If... + Instructions... i stället för ett löst generiskt svar
/admin/mail-support-assistant låter nu admin konfigurera två separata mailboxfält för no-match-AI: ett If...-villkor som beskriver vilka annars omatchade mail som över huvud taget får besvaras, och separata Instructions... som beskriver hur svaret ska skrivas när villkoret faktiskt är uppfyllt.
GET /api/mail-support-assistant/config returnerar nu också additivt defaults.generic_no_match_if per mailbox.
- Den fristående Mail Support Assistant skickar inte längre ett generiskt AI-svar på omatchade mail bara för att modellen råkade skriva något som såg rimligt ut. Den kräver nu i stället ett strikt JSON-beslut från AI och svarar bara när modellen uttryckligen säger att mailet får besvaras med hög säkerhet.
- Avvisade eller otillräckligt säkra no-match-beslut tömmer nu också eventuell kvarvarande reply-payload internt, så bara verkligt godkända high-certainty-beslut kan fortsätta till svarssteget.
- Wrapper-liknande SpamAssassin-text ignoreras fortfarande som yttre brus i det beslutet, men SpamAssassin-score/tester finns kvar som risksignaler så misstänkt försäljnings-/bedrägerimail lättare kan avvisas säkert.
- Mailbox-/regelformulären i Tools admin använder nu lättviktig AJAX-sparning för vanliga create/update/delete-ändringar, vilket gör Mail Support Assistant-justeringar snabbare i praktiken.
- Fokuserad regressionstäckning i den fristående klienten bevakar nu också denna strikta no-match-väg, inklusive regeln att avvisade AI-beslut måste lämna mailet oläst.
Fristående Mail Support Assistant - live CLI-diagnostik, fallback vid tomma AI-svar och tydligare unread/reply-state
- Den fristående runnern i
public/tornevall-tools-mail-assistant speglar nu live-loggrader till stdout vid CLI-/manuella körningar, så bash cron-run.sh visar progress medan mailboxpasset fortfarande kör i stället för att bara skriva ut slutlig JSON när allt redan är klart.
- AI-svarsgenereringen försöker nu också med den konfigurerade fallbackmodellen när primärmodellen returnerar en tom svarskropp, inte bara när requesten kastar ett transport-/API-fel.
- Körsammanfattningar innehåller nu per-meddelande-diagnostik i
message_results[], så det blir tydligare om varje oläst meddelande blev hanterat, skippat, state-skippat, varnat eller felade.
- Om samma olästa IMAP-meddelande redan har en tidigare lokal post som visar att ett svar faktiskt skickades, hoppar runnern nu över automatisk omsändning med reason
previous_reply_recorded_unread för att undvika dubblettsvar.
- Om ett svar skickas men IMAP-finaliseringen efteråt (
markSeen, move eller delete) misslyckas, sparar runnern nu en explicit varningsreason i stället för att tyst se helt färdighanterad ut.
- Utgående HTML-svarskort använder nu starkare explicita textfärger och light-only color-scheme-hintar så manuella replies/citerad historik mindre lätt blir vit text på vit bakgrund i mailklienter.
- Svarsleveransen normaliserar nu också
to / cc / bcc mer defensivt innan SMTP eller Tools-relay används, vilket förbättrar BCC-vidarebefordran när adresser kommer in med display-name-formattering.
- Om varken en matchad regel eller mailboxens defaults anger någon BCC kan standalone-runtime nu också falla tillbaka till
MAIL_ASSISTANT_DEFAULT_BCC i sin lokala .env.
DNSBL-engine - cronkörningar visar nu liveprogress och accepterade delistningar beskrivs inte längre som misslyckade i svarsmejl
- Den fristående workern
projects/dnsbl-engine/run tvingar nu fram omedelbar CLI-flush och skriver tidsstämplade progressmarkörer för scan, analyze, lookup/write, cleanup, final whitelist sweep och utskick av operativ rapport, vilket gör cron-/bakgrundskörningar lättare att felsöka medan de fortfarande pågår.
- Längre live-lookupbatcher mot DNSBL visar nu också progress under själva
check-ip-fasen i stället för att vara tysta tills hela lookupmängden är färdig.
- Reply-delist-AI är nu hårdare låst till det maskinbekräftade delete-resultatet och underkänns om den påstår att en redan accepterad delistning "inte gick igenom".
- Lyckade single-IP-bulkdelistningar sammanfattas nu med tydligare text om att själva delist-submissionen accepterades och att nödvändiga delete-operationer skickades, i stället för att bara återge en generisk bulk-success-mening.
Mail Support Assistant - svar på samma språk, renare originalsammanfattningar och synlig AI-budgetmetadata
- Standalone Mail Support Assistant-AI-svar försöker nu uttryckligen svara på samma språk som det inkommande mailet i stället för att bara lita på generell prompttolkning.
- Standalone-fallbackmodellen är nu
o4 som standard, och den fallbackkörningen skickar medvetet inte med reasoning_effort så den beter sig som en vanlig icke-reasoning-fallback.
- Wrapper-liknande inkommande mail rensas nu hårdare före regelmatchning, AI-kontextbygge och citering i utgående svar, vilket gör att SpamAssassin-wrappers, vidarebefordrade
.eml-headerdumpningar och trasiga inbäddade headerblock mer sällan skymmer den verkliga originalförfrågan.
- Utgående svar lägger nu också till ett kompakt utdrag av den ursprungliga inkommande förfrågan, så både operatör och mottagare fortfarande kan se vad avsändaren faktiskt skrev i den skickade svarstråden.
- Mailboxsammanfattningar för misslyckade AI-svar visar nu vilken modellkedja som provades, och
GET /api/mail-support-assistant/config returnerar nu också additiv metadata user.ai_daily_budget så operatören kan se effektiv AI-tokenlimit/återstående budget som Mail Support Assistants SocialGPT-baserade svar använder.
Mail Support Assistant - överlappande regler utvärderar nu alla träffar innan en regel tillämpas
- Den fristående Mail Support Assistant stannar inte längre vid första matchande regel när flera regler överlappar.
- Den utvärderar nu alla matchande regler, väljer först den mest specifika matchen (flest aktiva matchfält, sedan längst sammanlagd matchtext, därefter
sort_order) och sparar både vald regel och övriga matchkandidater i diagnostiken.
- Det gör att överlapp som breda Gmail-regler kontra mer specifika copyright notice-regler blir synliga i stället för att tyst använda den regel som råkade kontrolleras först.
AI- / Mail Support Assistant-API - throttling är nu bearer-medveten med mycket högt tak och effektiv admin-bypass
POST /api/ai/socialgpt/respond, /api/social-media-tools/extension/* och /api/mail-support-assistant/* använder nu användarmedveten throttling i stället för de tidigare låga fasta per-minut-taken.
- Vanliga användare/token får nu mycket högre gränser, medan adminägda requester i praktiken inte throttlas på API-lagret så support-/underhållskörningar inte går sönder vid tillfälliga toppar.
Mensövervakning - administratörer kan nu hantera en annan användares poster direkt
- Administratörer kan nu öppna
/admin/menstrual-tracking/{user} för att redigera en annan användares mensprofil och cykelrader utan att logga in som användaren.
- Användarredigeraren har nu också en direktlänk Menstrual tracking så admin kan hoppa från
/users/{id}/edit direkt till användarens mensvy.
Mail Support Assistant - AI-svar försöker nu om throttling och skickar inte längre den missvisande generiska fallbacken
- Tillfälliga AI-rate-limitfel som
429 / Too Many Attempts försöks nu om automatiskt av den fristående Mail Support Assistant innan AI-spåret överges.
- AI-aktiverade regler utan explicit statisk fallback-template skickar inte längre den gamla generiska meningen
Thank you for your message. We have reviewed it. när AI fallerar; svaret avbryts och loggas i stället för att låtsas att ärendet redan hanterats.
- Ett misslyckat meddelandesvar avbryter inte längre resten av samma mailboxkörning; senare mail i samma mailbox kan fortfarande behandlas.
Mail Support Assistant - utgående svar innehåller nu stylad HTML
- Mail Support Assistant-svar skickas nu som
multipart/alternative, där den ursprungliga plain-text-delen ligger kvar samtidigt som en stylad HTML-version läggs till för mer presenterbara supportmail.
POST /api/mail-support-assistant/send-reply accepterar nu också additivt body_html, så Tools-relay kan bevara den formatterade svarskroppen när standalone-runtime faller tillbaka till relayläge.
Mail Support Assistant - AI på matchade regler använder nu verkligen regelns AI-override-fält
- AI-aktiverade Mail Support Assistant-regler skickar nu sina konfigurerade
responder_name, persona_profile, custom_instruction, vald ai_model och additiva ai_reasoning_effort till Tools som explicita AI-override-fält för just det svaret.
- Mailboxnivåns generiska AI-inställningar för omatchade mail ligger kvar som mailboxdefaults endast för no-match-flödet och ser inte längre ut som källan till svar från matchade regler.
/admin/mail-support-assistant använder nu dropdowns för Mail Support Assistant-modellval och reasoning effort på regel-/mailboxnivå i stället för fria textfält för dessa AI-kontroller.
DNSBL API - fraud-writes speglas nu åter till de vanliga DNSBL-zonerna
- Fraud-liknande DNSBL add/update-publicering speglas nu till
dnsbl.tornevall.org + opm.tornevall.org samtidigt som bl.fraudbl.org uppdateras, vilket återställer det äldre kombinerade DNSBL+FraudBL-beteendet för phishing-/fraudflaggor.
- Commerce-publicering är oförändrad och ligger fortfarande bara i
bl.fraudbl.org + ecom.fraudbl.org utan att speglas till de vanliga DNSBL-zonerna.
DNSBL API - bulk-DNS-writes härdas nu mot avbrutna UDP-läsningar
- Stora DNSBL-bulkrequester förlänger nu sin runtime-budget innan de serversidiga DNS-uppdateringarna körs.
- Den låg-nivåbaserade DNS-sockettransporten försöker nu också igen när en retrybar mottagning avbryts, till exempel
socket_recvfrom(): Interrupted system call, innan körningen till slut markeras som misslyckad.
Mail Support Assistant - no-match-/konfigurationsskippar lämnas nu olästa
- Den fristående
projects/tornevall-tools-mail-assistant markerar inte längre mail som lästa när de bara hoppades över därför att ingen regel matchade eller därför att den generiska fallbacken för omatchade mail var avstängd, inte gick att besvara eller fallerade.
mark_seen_on_skip är nu i praktiken begränsad till medvetna heuristiska skippar, till exempel högscorat SpamAssassin-skräp, vilket gör mailboxfel och missad regelkonfiguration lättare att upptäcka och köra om.
Mail Support Assistant - mailboxnivåinställningar för generiska svar på omatchade mail
/admin/mail-support-assistant har nu mailboxnivåinställningar för ett generiskt AI-fallbacksvar när ett inkommande mail inte matchar någon explicit regel.
- Den additiva mailboxkonfigurationen från
GET /api/mail-support-assistant/config innehåller nu defaults.generic_no_match_ai_enabled, defaults.generic_no_match_ai_model, defaults.generic_no_match_instruction och defaults.generic_no_match_footer.
- Detta gör att standalone-klienten kan besvara omatchade men fortfarande supportrelevanta mail utan att admin måste skapa en separat explicit matchregel för varje sådant fall.
Mail Support Assistant - fallback från lokal MTA och ny relay-endpoint i Tools
- Den fristående
projects/tornevall-tools-mail-assistant stöder nu valbar utgående transport: lokal PHP mail(), eget MTA-kommando eller direkt Tools-relayläge.
- Standalone-transporten stöder nu även direkt SMTP och har
smtp som standard, vilket minskar postdrop-/lokal sendmail-beroenden i cronmiljöer.
- Standalone-körningar kan nu automatiskt falla tillbaka från trasig lokal mailtransport till en ny Tools-endpoint:
POST /api/mail-support-assistant/send-reply.
- Tools exponerar nu relay-endpointen bakom en dedikerad personlig tokenprovider (
provider_mail_support_assistant_mailer) och en ny permissionspärr (mail-support-assistant.relay).
/admin/mail-support-assistant har nu också UI för relay-tokenrotation samt valbar direkt tilldelning av relay-permission till vald tokenägare.
- Standalone-klientens API-felparsning har härdats så att PHP-varningar av typen
Array to string conversion inte längre uppstår när Tools returnerar strukturerade felarrayer.
DNSBL API - delete-guardrails på användarnivå i adminpanel och runtime-kontroll
- DNSBL token-admin stöder nu också en delegerad CIDR-gräns via
delete_min_cidr_prefix, så icke-admin-token kan begränsas till mindre delete-intervall som /25../32 i stället för att få generell CIDR-access.
- DNSBL auth-/tokenmetadata kan nu exponera
can_cidr_delete, och CIDR-delete ger nu explicita felorsakerna delete_cidr_not_allowed eller delete_cidr_prefix_too_broad när intervallet ligger utanför den delegerade gränsen.
- DNSBL token-admin stöder nu användarnära delete-guardrails:
delete_limit_per_day, delete_cidr_limit, delete_throttle_limit och delete_throttle_window_seconds.
- DNSBL-deleteflödet tillämpar nu dessa gränser för token-autentiserade användare både på single-delete och bulk-delete.
- Guardrail-blockeringar returnerar nu tydliga reasons:
delete_daily_limit_exceeded (429), delete_throttle_exceeded (429) och delete_cidr_limit_exceeded (422).
- DNSBL token-info och auth-summary innehåller nu additiv metadata
delete_guardrails så klienter kan visa effektiva gränser före delist-försök.
- Runtime-upplösningen av guardrails faller nu också tillbaka säkert på äldre installationer där de nya
dnsbl_api_tokens-kolumnerna ännu inte migrerats, så delete-endpointen returnerar standard-/inga-guardrails i stället för att krascha.
DNSBL-engine - tomkörningar skickar inte längre operativa rapportmail
projects/dnsbl-engine/run hoppar nu över sammanfattningsmailet helt när en körning inte rörde någon faktisk adressaktivitet, vilket minskar "inget hände"-rapporter från spoolpass utan kandidater.
Fristående Mail Support Assistant - mail som redan är lästa vid inläsning särredovisas nu
- Runner-sammanfattningar innehåller nu
messages_read_skipped / mailbox read_skipped så redan lästa IMAP-mail inte blandas ihop med no_matching_rule-skippar.
- IMAP-payloaden innehåller nu
is_seen, och meddelanden som redan är markerade lästa vid inläsning hoppas över utan att sparas som nya no-match-rader i state.
- Lokal message-state-sammanfattning visar nu också
excluded_read_records och raw_count för tydligare operatörsdiagnostik.
Fristående Mail Support Assistant - olästa mail kan nu omprövas även om de finns i lokal historik
- Den fristående runnern använder inte längre
storage/state/message-state.json som en hård dedupe-spärr för olästa mail.
- Meddelanden som fortfarande är olästa i IMAP kan därför köras om vid senare körningar, vilket gör att nyss tillagda regler kan börja matcha utan att den lokala state-filen först måste rensas.
- Redan lästa mail hoppas fortfarande över direkt, och den lokala state-filen finns kvar endast som diagnostikhistorik.
- Runner-sammanfattningar visar nu också
messages_previously_recorded_unread när en oläst tråd hittades i lokal historik men medvetet omprövades ändå.
DNSBL-tokenansökningar - approval-mail visar nu kontots delete-defaults
- När en admin godkänner en väntande DNSBL-tokenansökan skickar Tools nu ett mail till den sökande om att tokenen är klar och vilka add/delete-scopes som beviljats.
- Samma mail sammanfattar nu också de effektiva delete-guardrails/defaultgränser som just nu gäller för kontot, så delegerade användare ser försiktighetsgränserna innan de börjar delista.
2026-04-17
DNSBL-engine - redan täckta IP-mail städas nu bort, rapporter mejlas och reply-delist kan få AI-förtydliganden
- Den fristående workern i
projects/dnsbl-engine städar nu också bort spoolfiler när en IP hoppas över därför att live-DNSBL redan har samma eller högre bitmask, i stället för att lämna filerna kvar som permanent väntande.
- Add/Fraud-körningar städar nu också bort mail som inte innehåller några användbara IP-/CIDR-kandidater alls, i stället för att låta sådana no-op-mail fastna i mappen.
- Whitelistlagret följer nu env-styrda DNSBL-/firewall-/SpamAssassin-databasnamn och connection-nycklar, så
.env-värden som DB_DNSBL_DATABASE, DB_DNSBL_FIREWALL_DATABASE, DB_DNSBL_CONNECTION och DB_SA_CONNECTION styr den faktiska whitelistkällan.
- När
SPAM_REPORTS_FROM och SPAM_REPORTS_TO är satta skickar add/update-körningar och delist/reply-körningar nu en operativ sammanfattningsrapport via mejl med statistik, whitelistträffar och slutlig whitelist-resweep.
- SpamAssassin-hållningar via avsändarwhitelist är nu också mindre klistriga: om innehållet fortfarande ser tydligt bedrägligt ut auto-override:as
sender_matches_whitelist_from och mailet fortsätter genom vanlig Fraud/Spam-hantering.
projects/dnsbl-engine har nu också en smalare operatörsflagga --force-sender-whitelist-holds som bara bypassar manuella hållningar av typen sender_matches_whitelist_from, utan att stänga av de andra lågscore-/safe-test-skydden.
- Reply-delist använder fortfarande sin vanliga HTML-bekräftelsemall, men otydliga förfrågningar kan nu få ett extra AI-genererat förtydligande från Tools/OpenAI; om AI-steget misslyckas skickas standardmallen ändå oförändrad.
- Reply-delist behandlar nu också targetar som bara hittats via headers som otydliga, så svaret kan förklara att workern bara hittade borttagbara IP-adresser i meddelandeheaders/transportmetadata och vid behov be avsändaren om uttryckliga IP-/CIDR-targets.
- Supporttunga reply-delist-mail kan nu också låta AI skriva det primära DNSBL-fokuserade svaret, men det svaret förankras nu i det faktiska delist-resultatet från körningen så att redan inskickade delists bekräftas i stället för att avsändaren ombeds starta processen igen.
- AI-stödda reply-delist-svar kan nu också lägga till en kort ursäkt när originalmailet är äldre än två dagar, och de styrs nu uttryckligen att hålla sig till DNSBL, DNSBL-API:t, delisting och den publika DNSBL-dokumentationen/removal-flödet.
- Reply-delistens AI-svar begär nu först
gpt-5.4 med medium reasoning effort, och om den körningen kommer tillbaka tom kör workern automatiskt om svaret via fallbackmodellen (gpt-4o-mini) i stället för att skicka en tom AI-del.
- Auto-reply-loggningen säger nu också om den lokala mailtransporten accepterade eller nekade det utgående svaret, vilket gör tysta leveransproblem lättare att felsöka.
- Delisttunga körningar återanvänder nu också chunkade multirequest-delete där det går, i stället för att alltid radera strikt en target i taget.
- Felaktiga icke-JSON-svar vid bulk-writes återhämtas nu också mer aggressivt: workern försöker först rädda inpackad JSON när det går, därefter köra om det trasiga chunken en gång som vanlig bulk-request och till sist falla tillbaka till enskilda requests innan chunken lämnas som misslyckad.
DNSBL reply-rapporter + AI-fallback reasoning - renare sammanfattningar och tydligare felorsaker
- Reply-delistens sammanfattning av inkommande förfrågan rensar nu bort vanlig MIME-/HTML-wrapperbrus mer aggressivt, så rutan "Summary of your request" fokuserar på själva frågan i stället för multipart-gränser eller kopierade transportrader.
- Identiska upprepade frågerader dedupliceras nu också där, så samma avsändarfråga inte ekas två gånger i summary-rutan.
- Proton-/quoted-printable-kopior av samma mail avkodas och städas nu också före summary-extraktion och AI-kontextbygge, vilket gör att tekniska delist-/hjälpfrågor mycket mindre lätt tappas bort bakom MIME-brus.
- DNSBL-reply-AI:n får nu också explicit date-check-kontext (meddelandets ålder plus aktuell svarstid), så modellen själv kan avgöra när en kort ursäkt för dröjt svar är rimlig.
- Längre DNSBL-AI-stycken kapas nu vid säkrare menings-/whitespace-gränser i stället för med en hård mitt-i-ordet-kapning, vilket förhindrar trasiga slut som
Please en i utgående svar.
- DNSBL:s reply-läge tolkar inte längre ett mail som vårt eget autosvar bara för att
support@tornevall.net syns i tråden, vilket gör att riktiga kunduppföljningar på tidigare supportmail kan besvaras normalt.
Fristående Mail Support Assistant - replykedjor och tydligare skip-diagnostik
- Den fristående
projects/tornevall-tools-mail-assistant hanterar nu replykedjor bättre: Re:/Fwd:/Sv:-prefix tas bort före regelmatchning, citerad historik i brödtexten rensas bort före body-matchning och AI-sammanfattning, och utgående svar behåller In-Reply-To / References-headers.
- IMAP-parsningen där lagrar nu riktiga
Message-Id samt en stabil lokal fallback-nyckel när headern saknas, så skipade/hanterade mail faktiskt syns i lokal message-state-sammanfattning.
- No-match-skip loggas nu tydligare med mailbox/from/to/subject-kontext, vilket gör körningar med
scanned men handled=0 mycket lättare att felsöka.
- CIDR-tunga delistresultat visas nu mer kompakt i reply-/rapportmail: i stället för en rad per expanderad IP visas hanterad/misslyckad totalsumma plus exempel på misslyckade targets/reasons.
- Misslyckade bulk-chunks bär nu med sig tydligare diagnostik in i targetresultaten (till exempel HTTP/decode/fallback-detaljer) i stället för att bara visa generiska "One or more bulk chunks failed.".
- IPv6-extraktionen från inkommande mailtext är nu striktare, så etiketter som
IPv6: inte längre råkar ge en felaktig inledande 6: i den bearbetade adresslistan.
- DNSBL reply-delist stöder nu också egna AI-overrides för responder/persona/custom instruction (
DNSBL_AI_RESPONDER_NAME, DNSBL_AI_PERSONA_PROFILE, DNSBL_AI_CUSTOM_INSTRUCTION) för den som vill ha reply-specifik ton oberoende av sparade SocialGPT-inställningar.
- När AI faktiskt skrev det primära DNSBL-svaret upprepar utgående mailet nu inte samma accepted-target-sammanfattning en andra gång i ett generiskt standardstycke.
- SocialGPTs reasoning-effort-stöd omfattar nu även
gpt-4o*-prefix som standard, så gpt-4o/gpt-4o-mini-fallback kan behålla samma reasoningbeteende när det är aktiverat.
- Den fristående
projects/tornevall-tools-mail-assistant följer nu samma modellprofil: sanerade meddelandesammanfattningar, konfigurerbar reasoning effort och ett primary->fallback-försök (gpt-5.4 -> gpt-4o-mini).
Feedfrågor - SQL-matchade rader följer nu med ända in i slutsvaret
- Feed Q&A bär nu med ett eget
matched_entries-lager från SQL-retrievalen in i den slutliga AI-kontexten i stället för att bara använda SQL-träffen som ett dolt filtersteg.
- Det betyder att frågespecifika träffar nu kan behålla konkreta
title-, description-, content-utdrag, publishby, feed_title och länkar hela vägen till svarsfasen.
- För frågor om vem som skriver om en person eller ett ämne instrueras modellen nu uttryckligen att prioritera dessa matchade rader innan den faller tillbaka till aggregerade totalsiffror som antal feeds eller poster.
IRCWatch - fixad lokal action-inferens, nya kanalsvar på ? och eskalering vid frågemissbruk
- IRCWatch innehåller nu faktiskt den lokala hjälpfunktionen för
invite / op / kick-inferens som kanalmention-flödet anropar, vilket fixar runtime-felet om att ircwatchInferStructuredChannelActionFromMessage() saknas.
- Kanalmeddelanden som slutar med
? kan nu ge ett kort botsvar även utan direkt botmention.
- Upprepat frågespam eller aggressivt
?-bait kan nu ge varningar, medan själva ?-svarsflödet inte längre auto-kickar någon alls.
- Vanliga icke-aggressiva frågor ska nu inte längre kunna ge kick bara för att AI-klassningen eller frågeräknaren blev för ivrig.
- Kick-behörighetskontrollen för manuella/infererade kickar räknar nu också vanlig kanal-op / eggdrop-
o, inte bara owner/master-flaggor.
Mail Support Assistant - Tools-adminytan har fått renare kortlayout och mer generiska exempel
- Konfigurationsytan på
/admin/mail-support-assistant har byggts om med tydligare kort, bättre gruppering och mer lättlästa formulär för token, mailboxar och regler.
- Standardexemplen i regel- och mailboxformulären utgår nu från neutrala supportflöden som orderstatus, referensnummer och kundsupport i stället för ett snävt copyright-/juridikscenario.
- Svensk dokumentation och ändringslogg för Mail Support Assistant visar nu åter riktiga
åäö där tidigare translittererad text hade smugit sig in.
Mail Support Assistant - nytt fristående projektnamn plus AJAX/operatorstöd och SpamAssassin-förbättringar
- Den fristående klienten ligger nu under
projects/tornevall-tools-mail-assistant/ i stället för den tidigare tillfälliga sökvägen projects/mail-support-assistant/.
- Mini-webbgränssnittet är nu mer operatorvänligt, med AJAX-uppdatering, self-test och säkra dry-run-körningar som återanvänder exakt samma vanliga PHP-runner som CLI-läget.
- Den fristående klienten förblir framework-fri och databaslös lokalt: mailboxuppgifter ligger kvar i Tools admin, medan klienten bara sparar lokal env/session/logg/sammanfattningsdata.
- Runnern tolkar nu också SpamAssassin-headers så att uppenbart högscorat skräppost kan hoppas över försiktigare, medan wrapper-liknande SpamAssassin-omskrivningar fortfarande kan kopieras lokalt och rensas bort innan regelmatchning / AI-svar.
DNSBL-engine - köade blacklistmail städas inte längre bort innan write-acceptans
- Den fristående workern i
projects/dnsbl-engine behåller nu spoolfiler tills Tools DNSBL-bulkrequest faktiskt har accepterat motsvarande add/update-operationer.
- Dubblettfiler för samma köade IP behålls nu kopplade till den IP:n tills acceptans i stället för att kastas bort tidigt som redan hanterade.
- Headerdrivet message-whitelist-läge är nu avstängt under add-blacklist-körningar, så att lagrad whitelist / SPF-logik fortfarande kan skydda betrodda avsändare utan att SpamAssassin-wrapperheaders kortsluter blacklist-adds.
IRCWatch - strukturerade kanalactioner omfattar nu op/invite tillsammans med topic-liknande actioner
- IRCWatch skickar nu
op, invite och kick genom samma strukturerade kanalaction-lager som redan hanterade topic-liknande actioner, vilket gör PM/manualkörningar mer konsekventa.
- AI-actionkontraktet tillåter nu också strukturerade
Op- och Invite-actioner utöver Topic, Mode och Kick.
Mail Support Assistant - fristående IMAP-klient för supportmail plus Tools-admin/API-konfiguration
- En ny admin-only-konsol för Mail Support Assistant finns nu på
/admin/mail-support-assistant.
- Där kan admin konfigurera IMAP-mailboxar, sorterade hanteringsregler, standardsändare/BCC/footer och per-regel-AI eller statiska autosvar.
- Tools exponerar nu också
GET /api/mail-support-assistant/config, vilket låter den fristående PHP-klienten hämta mailbox-/regelkonfiguration med bearer-token i stället för att behöva en egen lokal databas.
- Den första fristående projektscaffolden ligger nu under
projects/tornevall-tools-mail-assistant/ med egen README.md, CHANGELOG.md, AGENTS.md, env-styrt mini-webbgränssnitt och CLI/cron-runner-skelett.
API-nycklar - AI-mottagartoken håller nu is_ai konsekvent medan provider_openai fortsatt är undantaget
is_ai normaliseras nu mer konsekvent varje gång API-nycklar skapas eller uppdateras i Tools nyckel-UI.
- Äldre/genererade
tools_ai_bearer-token tvingar fortfarande is_ai=1.
- Uppströmssecret
provider_openai undantas nu uttryckligen från is_ai, eftersom den är providerhemligheten som används mot OpenAI och inte en klienttoken som används mot Tools.
- När OpenAI-access avslås eller en användare bannas rensas nu alla personliga AI-mottagartoken för användaren, i stället för att bara radera den gamla
tools_ai_bearer-raden.
Tools AI-auth - personliga AI-kapabla token kan nu autentisera systemspecifika klienter som IRCWatch
- Tools AI-endpoints behöver inte längre förlita sig enbart på den äldre providernyckeln
tools_ai_bearer.
- Personliga API-nycklar kan nu markeras som AI-kapabla, vilket gör att en klient kan behålla sin egen provideridentitet (till exempel
provider_ircwatch) och ändå autentisera mot Tools-hostade AI-endpoints.
- Själva OpenAI-körningen kräver fortfarande att tokenägaren har godkänd
provider_openai-access eller admin-bypass; den AI-kapabla tokenen bevisar bara klientidentitet och användarägarskap.
- SocialGPTs/extensionens validate-token- och smoke-test-endpoints rapporterar nu vilken tokenprovider som faktiskt löstes och accepterar också dessa personliga AI-kapabla token.
IRCWatch - PM-kommandon kan nu ge +o och göra manuella eller AI-stödda kickar
- IRCWatch stöder nu privata operatorförfrågningar som
op #channel och ge mig op på kanal #channel, vilket skickar MODE #channel +o <nick> när avsändaren är behörig för kanalen.
- IRCWatch-owners/masters kan nu också skicka
kick <nick> <#channel> [reason] för en direkt kick med egen vald reason.
- Ett nytt PM-kommando
aikick <nick> <#channel> <motivation> låter IRCWatch fråga Tools/OpenAI efter en kort kickreason innan kicken skickas.
- IRCWatch stöder nu också lokala overrides för responder/persona/instruction, så promptidentiteten behöver inte längre återanvända SocialGPT-extensionens standardvärden.
SocialGPT - Chrome-först-manifestet kan nu bygga paket även för Edge, Opera och Firefox
- SocialGPT-källträdet behåller fortfarande rotfilen
manifest.json som Chrome-först-manifest för utveckling och första testpasset.
- Release-paketeringen går nu via
projects/socialgpt.sh, som bygger webbläsarspecifika arkiv under projects/socialgpt-chrome/dist/ i stället för att zippa källmappen rakt av.
- Chrome-, Edge- och Opera-byggen återanvänder för närvarande samma manifest, medan Firefox-paketet får en build-time-patch för
browser_specific_settings.gecko så att repots manifest kan fortsätta vara Chrome-orienterat.
- SocialGPTs request-telemetri rapporterar nu också ett webbläsarmedvetet
client_platform-värde (chrome_extension, edge_extension, opera_extension eller firefox_extension) i stället för att alltid säga Chrome.
2026-04-16
Feed-analyser i publik vy - /feed visar nu en utgåva per period igen, och feed-admin kan rensa bort extra cachade utgåvor
- Den publika
/feed-översikten visar nu bara den enda valda publika utgåvan för varje kategori-/sajtperiod (daily, weekly, monthly, yearly) i stället för att rendera flera cachade utgåvor inline.
- Det tyngre läget där man granskar alla sparade utgåvor är nu begränsat till kategorikortssidan när man medvetet öppnar
/feed/cards/{categorySlug}?show_all=1.
- Kategori-/sajtkorten i feed-admin har nu också en städåtgärd Keep only selected edition som raderar alla andra cachade analyser för vald period men behåller den utgåva som för tillfället är vald.
Publik feedreader - inbyggda artikellänkar av typen "Read more" återanvänder nu /out/{contentId}
- Den publika feedreadern skriver nu om inbyggda artikellänkar inne i renderade description/content-block när de pekar på samma artikel som posten själv, så sådana "Read more"-länkar går via Tools-redirecten
/out/{contentId} i stället för att exponera den externa URL:en direkt.
- Samma återanvändning av redirecten gäller nu konsekvent i huvudflödet, kategoriflödet och kortvyn för kategorier.
WordPress-checkern för DNSBL - primärtexten säger nu tydligare när svaret kommer från DNS-resolvers
- Den publika checkern säger nu tydligare att det första "listad" / "inte listad"-svaret kommer från pluginets lokala DNS-resolverkontroll, medan den långsammare Tools API-uppföljningen bara är ett extra bekräftelsesteg för delist-detaljer.
- Reset/input-ändringar invaliderar nu också äldre checker/CIDR-callbacks mer aggressivt, vilket minskar risken att gamla resultat målar om formuläret efter att användaren redan har börjat en ny sökning.
WordPress DNSBL-pluginet - lokal CIDR-skanning visar nu liveprogress och träfflista utan att lämna 3.1.0-linjen
- Den avancerade CIDR-kontrollen i WordPress-flödets delistläge stannar nu inne i WordPress i stället för att använda Tools för själva blockskanningen.
- Pluginet går igenom
/24-/32-intervall i små lokala batchar, visar liveprogress under skanningen och håller en synlig träfflista över listade IP-adresser som hittats i blocket.
- Batch-tempot hålls medvetet försiktigt så att resolversidan inte överbelastas, medan den slutliga CIDR-delete fortfarande går via DNSBL-write-endpointen när den lokala skanningen har hittat minst en listad adress.
- Advanced-fältets CIDR-värde är nu också den auktoritativa delete-scopen efter handoffen, så användaren behöver inte längre förankra samma block med en separat single-IP-kontroll innan delist skickas.
- Advanced-handoff väntar nu tills användaren faktiskt klickar på Kontrollera om adressen är listad med ett CIDR kvar i första fältet, så formuläret avbryter inte längre någon som fortfarande håller på att skriva färdigt intervallet.
- Checker- och delist-submit visar nu också en egen spinner/statusrad i det publika WordPress-formuläret så att användaren tydligare ser att livebegäran fortfarande kör.
- CIDR-delete riktas nu bara mot de IP-adresser som den lokala CIDR-skanningen faktiskt hittade som listade, och de delete-anropen skickas nu sekventiellt en IP i taget i stället för i chunkade bulkbatchar.
- Om ett giltigt CIDR skrivs direkt i det första checker-IP-fältet öppnas nu Advanced automatiskt, CIDR-värdet flyttas dit och det värdet blir den fortsatta auktoritativa scopen i stället för att användaren lämnas kvar i ett ogiltigt single-IP-läge.
- Pluginets release-dokumentation har samtidigt normaliserats så att dessa underhållsförbättringar fortsätter ligga under nuvarande
3.1.0-linje i stället för att hitta på en separat versionshöjning.
DNSBL-removals - varje delistförsök får nu en egen dedikerad audithändelse
POST /api/dnsbl/records/delete och delete-poster inne i POST /api/dnsbl/records/bulk skapar nu egna DNSBL-removal-auditloggar i backend, separerade från den bredare generella DNSBL API-requestloggen.
- Removal-auditen innehåller auktoritativ delete-metadata när den finns tillgänglig, till exempel skickad IP, resolved owner-namn, berörda zoner, target-värden, dry-run-status och slutresultat (
success, denied, failed eller valideringsrelaterad blockering).
- En ny Slack-loggkategori DNSBL removal audit kan nu aktiveras när man vill ha riktade delist-notiser utan att slå på hela Slack-strömmen för API /dnsbl requests.
2026-04-15
Feedfrågor - fixad modelluppslagning, kontextkrasch och konsekvent markdown-rendering
- Feed Q&A anropar inte längre en gammal modellkatalogmetod vid val av svarsmodell, vilket tar bort varningen om
ModelCatalogService::getAvailableModels() och gör att vald svarsmodell åter följer den aktuella katalogkontraktet.
- Kontextbyggaren för frågeprocessen definierar nu listan med scoped feed-id:n innan progressrapporteringen använder den, vilket fixar kraschen
Undefined variable $feedIds som annars kunde avbryta vissa frågor innan svarsgenereringen.
- Senaste/nyliga Feed Q&A-svar renderas nu mer konsekvent med samma säkra markdown-format på
/feed, i den site-specifika frågepanelen och i liveuppdaterade AJAX-svar, så markdownlänkar och stycken inte längre visas som råtext på de ytorna.
DNSBL API - delist avgör nu själv vilka blacklist-subzoner som ska raderas
POST /api/dnsbl/records/delete och delete-poster inne i POST /api/dnsbl/records/bulk räknar nu fram de verkligt listade owner-namnen genom en live DNS-inspektion av den skickade IP-adressen innan någon låg-nivå-DNS-delete försöks.
- Klientens
publication_type / bitmask är inte längre sanningskällan för delete-scope; DNSBL-endpointen avgör nu själv vilka av dnsbl.tornevall.org, opm.tornevall.org, bl.fraudbl.org och ecom.fraudbl.org som faktiskt ska delistas.
- Detta flyttar delist-orkestreringen tillbaka till Tools i stället för WordPress-checkern/pluginet och gör att delete alltid följer IP-adressens aktuella live-DNS-läge.
- WordPress-checkern skickar nu bara en delete-begäran per IP-adress (i stället för att expandera samma kontrollerade IP till flera delete-anrop), och misslyckade checker-delistningar nollställer Turnstile-verifieringen så att användaren kan prova igen direkt med en ny token.
- Timeouten på WordPress-sidan för DNSBL-skrivanrop har också höjts så att den nyare serverside-styrda delete-logiken får mer tid att bli klar innan pluginet avbryter anropet.
- I checker-läget visar ett klick på Delist nu skickarstatusen direkt på delist-knappen samtidigt som båda checker-knapparna förblir inaktiverade tills anropet är klart, vilket minskar risken för dubbelklick och dubbla submits.
- Den dynamiska DNS-transporten för blacklist-subzoner uppdaterar nu den verkligt auktoritativa parent-zonen (
fraudbl.org / tornevall.org) samtidigt som de konkreta child-zone-owner-namnen fortfarande tas bort, vilket fixar NOTAUTH-fel där BIND tidigare avvisade bl.fraudbl.org eller opm.tornevall.org som update-zon.
Microsoft To Do - plattformsappens konfiguration syns nu direkt på integrationssidan
/settings/integrations/microsoft-todo visar nu en diagnostikpanel för den delade Microsoft Entra / Graph-appen med information om appen är komplett, vilka obligatoriska fält som saknas och vilken callback-URL som är effektiv/rekommenderad för aktuell host.
- Acknowledged admins kan nu spara/uppdatera den databasbaserade Microsoft To Do-plattformsappen direkt från sidan via AJAX när miljö-värden inte redan styr den.
GET /api/microsoft-todo/status returnerar nu additiv, icke-hemlig platform_app-diagnostik så att autentiserade klienter kan se skillnaden mellan “inte ansluten” och “hostens Microsoft-app är inte konfigurerad ännu”.
Publik entry-historik - /feed/entry kan nu växla till side-by-side-diff
- Historikblocket på
/feed/entry/{contentId} har nu en liten diff-toggle så att man kan växla mellan den befintliga highlight-diffen och en side-by-side-jämförelse av varje intilliggande revisionspar.
- Standardläget är fortfarande den nuvarande inline-diffen, och den råa kronologiska Versions-listan ligger fortfarande kvar under diffblocket för granskning av en revision i taget.
SocialGPT Chrome (v1.2.16) - popup och snabbmeny routas nu till rätt frame
- Popupens Open Toolbox in active tab är inte längre beroende av vilken injicerad frame som råkar svara först.
- Bakgrundsworkern inspekterar nu alla injicerade frames och routar förfrågan till den mest relevanta (befintlig Toolbox-frame, frame med markerad text, frame med fokuserat textfält, annars toppframen).
- Högerklicksflödena Open Toolbox och Verify fact with Toolbox använder nu samma frame-medvetna routing, vilket gör funktionen betydligt stabilare på iframe-tunga eller app-liknande sidor.
2026-04-14
DNS-editorn - zonladdning kraschar inte längre när cacheinställningar aldrig har sparats
- När en zon laddas i DNS-editorn används nu standardvärden för cache-policy även om zonen ännu inte har någon rad i
dns_zone_settings.
- Detta fixar felet
Attempt to read property "last_invalidated_at" on null vid första laddningen för zoner som aldrig har fått egna cacheinställningar sparade.
Publika kategorikort för feed - länken “Show all” visar nu faktiskt alla analysvarianter
- Den publika sidan
/feed/cards/{category} respekterar nu show_all=1 från översiktssidan, så den länkade sidan visar alla sparade analysvarianter för varje period i stället för att tyst falla tillbaka till en enda vald variant.
- Verktygsraden på kortsidan behåller nu
show_all-läget när man ändrar sidstorlek eller historikinställningar, och periodrubriken visar tydligt hur många varianter som visas.
DNSBL-delistning - checker-lägets delist väntar inte längre på bakgrundsuppföljningen, och blacklist-subzoner återanvänder root-TSIG-nycklar
- WordPress-checkern för DNSBL låter nu användaren klicka på Delist direkt så fort den första DNS-kontrollen redan har bekräftat att IP-adressen är listad, även om den långsammare Tools API-uppföljningen fortfarande kör i bakgrunden.
- Checkern fortsätter att visa att bakgrundsuppföljningen pågår, men den blockerar inte längre själva delistningen när listningen redan är bekräftad.
- DNS-uppdateringarnas nyckeluppslag använder nu root-domänen för blacklist-subzoner, så att
bl.fraudbl.org och ecom.fraudbl.org använder nyckelkonfigurationen för fraudbl.org, medan dnsbl.tornevall.org och opm.tornevall.org använder nyckelkonfigurationen för tornevall.org.
- Den root-baserade nyckelmappningen används nu även i den direkta socket-baserade DNS-update-vägen, så add/delete inte längre faller tillbaka till saknade nyckelfiler som
bl.fraudbl.org.conf på system där bara fraudbl.org.conf finns.
RSS-analys - enklare rensning av gamla buckets och rikare genereringsloggning
- Kategori-/sajt-korten i feed-admin har nu en tydlig Purge old buckets-åtgärd för vald period, så det blir enklare att rensa bort äldre cachade analyser som ligger kvar från tidigare bucket-semantik.
- Variantväljare för analyser i både feed-admin och
/feed visar nu sparad bucket-etikett, så äldre cachade varianter blir lättare att identifiera innan de tas bort.
- OpenAI-engine-audit för RSS-analyser skickar nu med rikare körkontext såsom analyssteg, kategori/sajt, periodtyp, bucket, språk, varianttitel och antal poster/flöden.
DNSBL WordPress-checker - lugnare följdtext vid token av fel typ
- WordPress-checkern för DNSBL behåller nu det första DNS-baserade beskedet om att IP-adressen är listad som huvudbudskap även när bakgrundskollen mot Tools API upptäcker att den konfigurerade tokenen tillhör en annan Tools API-provider/token-typ.
- I det läget presenteras tokenproblemet som ett problem att bekräfta delist-rättigheter, i stället för att få det att låta som att själva listningsresultatet plötsligt ändrades.
RSS-analys - kalenderstyrd overwrite och tydligare periodetiketter
- Daglig/veckovis/månadsvis/årsvis analys använder nu kalenderanpassade periodintervall i snapshots:
daily: innevarande dag,
weekly: innevarande ISO-vecka (måndag som veckostart),
monthly: innevarande kalendermånad,
yearly: innevarande kalenderår.
- Val av aktuell period i feed-admin prioriterar nu varianter från aktiv bucket (
period_bucket), så äldre default-varianter från tidigare perioder inte längre skymmer aktuell periodanalys.
- Analyskorten i feed-admin visar nu tydlig periodetikett från bucket-identitet (exempelvis
Week 16 (2026), Month 2026-04, Year 2026) tillsammans med genereringstid.
- Prompttexterna för kategori-/sitanalys matchar nu kalendersemantik (
current ISO week, current month to date) i stället för rullande formuleringar som last 7/30 days.
DNSBL API - CSRF-undantag för alla /api/dnsbl/*-rutter
- Alla
POST /api/dnsbl/*-endpoints (inklusive check-ip, records/add, records/delete, records/update, records/bulk) är nu undantagna från CSRF-verifiering i VerifyCsrfToken.
- Detta löser HTTP 419-fel som uppstod när serverbaserade klienter (WordPress-plugin, Android-app eller annan token-autentiserad API-anropare utan browsersession/CSRF-cookie) skickade förfrågningar till dessa endpoints.
- Sessionsbaserad autentisering för adminanvändare via webgränssnittet påverkas inte —
web-middleware-stacken (och därmed sessioner) är fortfarande aktiv på DNSBL-rutterna.
DNSBL API - tydligare token-diagnostik på write/check-rutter
- Auth-fel på
/api/dnsbl/check-ip och /api/dnsbl/records/* skiljer nu på:
- okänd/återkallad DNSBL-token,
- matchad Tools-token av fel typ/provider (
reason="wrong_token_type"), och
- inaktiv admin-API-nyckel (
reason="inactive_admin_api_key").
- Detta linjerar write/check-diagnostiken med
GET /api/dnsbl/token/info, så klienter kan se när en token faktiskt känns igen men tillhör fel auth-modell.
VirtualBox Manager - nytt web GUI för vboxwebsrv-maskinparker
- Lade till ett nytt behörighetsstyrt admin-GUI på
/admin/virtualbox för att hantera VirtualBox-värdar via vboxwebsrv.
- Användare med
virtualbox.manage kan registrera egna serverendpoints (host, port, username, password) och hålla flera serversegment i samma panel.
- Varje serverkort laddar nu en expanderbar VM-lista med minimalistisk förstavy och direkta VM-åtgärder.
- Stödda VM-åtgärder i den här releasen:
start, stop, restart, delete, plus uppdatering av grundinställningar (memory, cpus, vram, boot1).
- Lade till krypterad lagring av serverinloggning (
virtualbox_servers) och separat permission-migration för virtualbox.manage.
- Lade till tjänstekort på
/services och ny EN/SV-dokumentation (/docs/en/virtualbox-manager, /docs/sv/virtualbox-manager).
VirtualBox Manager - AJAX-styrda operationer + standardvärden vid VM-skapande
-
VirtualBox Manager läser nu först in de faktiska WSDL-funktionerna och prioriterar VirtualBox-specifika SOAP-operationer som IWebsessionManager_logon innan generiska gissningar som logon används.
-
VirtualBox Manager försöker nu logga in via flera SOAP-klientkandidater när WSDL-klienten når servern men fallerar med ett namespace-/metodfel som Method 'ns1:logon' not implemented: method name or namespace not recognized, inklusive båda kända VirtualBox-SOAP-URI:erna.
-
Misslyckade VirtualBox-login visar nu faktisk endpoint, WSDL-URL, vald SOAP-mod, vald SOAP-URI, tillgängliga WSDL-funktioner och hela loginförsökskedjan i raw-debug-payloaden.
-
De flesta VirtualBox-operationer på /admin/virtualbox körs nu via AJAX, så normala åtgärder kräver inte längre full postback/redirect.
-
Lade till direkt VM-skapande per serversegment (Create new VM) för praktisk provisioning även när unattended install inte används.
-
Standardvärden för nya VM är nu: nätverksläge bridged, minne 1024 MB och disk 25 GB.
-
Skapa-VM-formuläret kan nu läsa av serverregistrerade installationsbara DVD/ISO-medier och föreslå sökvägar.
-
Om ISO-inventering inte går att läsa för en server fungerar VM-skapandet ändå med manuell ISO-sökväg (eller utan ISO).
VirtualBox Manager - fix för ogiltiga VBoxManage-flaggor i remote-läge
- Tog bort ogiltiga
VBoxManage-flaggor (-H, -p, -u, -w) som gav Oracle-helptext och fel som Invalid command '-H'.
- Körläget är nu tydligt: nuvarande implementation kör endast lokala
VBoxManage-kommandon.
- Icke-lokala host-värden ger nu ett tydligt driftmeddelande direkt i stället för missvisande credential-/anslutningsfel.
VirtualBox Manager - fjärrvärdar körs nu via SSH
- Fjärrvärdar i VirtualBox Manager körs nu via SSH i stället för att hårdstoppas.
host, port, username och krypterat password från serverkortet används nu för att köra fjärrkommandon med VBoxManage --nologo ....
- SSH-körning följer nu porten som är konfigurerad per server (standard bör vara
22 för SSH, inte äldre 18083).
- Felmeddelanden är nu tydligare för vanliga SSH-fel:
- auth-fel (
sshpass exit code 5) ger credential-vägledning,
- anslutningsfel (
255) ger vägledning om host/port/brandvägg.
- Hjälptexten i
/admin/virtualbox är uppdaterad så den matchar driftläget: lokal körning för localhost och SSH-körning för fjärrvärdar.
2026-04-13
SocialGPT - klientversionsmetadata och starkare skydd mot utlämning av hemligheter
POST /api/ai/socialgpt/respond accepterar nu additiva klientmetadatafält: client_name, client_version och client_platform.
- Lyckade och misslyckade SocialGPT-svar kan nu ekoa tillbaka dessa accepterade klientmetadata i ett additivt
client-objekt, vilket gör det lättare att se vilken extension-/appbuild som skickade requesten.
- Guardrails på Tools-sidan tillåter nu uttryckligen att AI:n berättar vilken modell som används och vilken klientversion som körs när användaren uttryckligen frågar om versions-/modellinformation.
- Samma guardrails blockerar nu uttryckligen försök att få ut interna Tools-detaljer som dolda prompts, källkod,
.env-värden, lösenord, token, API-nycklar och liknande hemligheter.
- När en SocialGPT-interaktion matchar sådana secret-exfiltration-mönster kan Tools nu skicka en incidentrapport via e-post till den konfigurerade supportmottagaren.
DNS-editorn - cache-sökning kraschar inte längre på IP-frågor med null-bytes
- DNS-sökningen mot cachad zondata rensar nu bort null-bytes och andra kontrolltecken från inkommande search-/IP-strängar innan
inet_pton() körs.
- Det rättar DNS-editorfelet
inet_pton(): Argument #1 ($ip) must not contain any null bytes när trasiga/inklistrade sökvärden nådde /api/dns/zones/{zone}/search.
SMS - supportmail för inkommande och utgående aktivitet
- Tools kan nu skicka e-post till
support@tornevall.net (eller den konfigurerade mottagaren för SMS-aktivitet) när ett inkommande SMS sparas eller ett utgående SMS köas.
- Automatiska prefixstyrda svar som läggs i GSM-kön ingår också i samma aktivitetsmailflöde.
2026-04-10
SocialGPT Facebook-dashboard - godkända och avvisade åtgärder delas nu upp mellan medlemsförfrågningar och väntande inlägg
- Facebooks adminstatistik-dashboard härleder nu en andra modereringsklassning från den sparade adminloggtexten, så
Approved och Rejected kan delas upp i medlemsförfrågningar respektive väntande inlägg.
- Godkända/avvisade anonyma väntande inlägg räknas in i totalsumman för väntande inlägg, och sammanfattningskorten visar nu också den anonyma delmängden separat.
- Detta är gjort i rapporteringslagret, vilket betyder att redan inskickade extension-payloads fortsätter fungera utan någon kontraktsändring i SocialGPT-tillägget.
- Den svenska keyword-listan bakom klassningen lagras nu dessutom med riktiga
åäö, medan matchningen fortfarande är accentokänslig så att både förfrågan och ASCII-fallback som forfragan klassas likadant.
- Publika delade Facebook-grafsidor (
/shared/facebook/chart/{token}) uppdateras nu automatiskt varje 60 sekunder (tidigare 300 sekunder), och nedräkningen i visningen följer samma intervall.
DNSBL-delistflödet - ny tokenstödd IP-inspektion och explicit audit-routing
- Lade till
POST /api/dnsbl/check-ip, en live DNS-inspektionsendpoint som returnerar vilka DNSBL/FraudBL-publiceringsfamiljer som just nu är listade för en IP samt vilka delist-kandidater det autentiserade tokenet/sessionen kan agera på.
- WordPress DNSBL-pluginet håller nu första checker-svaret DNS-baserat och omedelbart, och kör sedan den nya Tools-endpointen i bakgrunden när ett DNSBL / Tools API-token finns innan delete-åtgärden låses upp.
- Det betyder att checker-lägets delist nu kan följa rätt publiceringsfamilj (
dnsbl, fraudbl, commerce) i stället för att bara lita på första lokala resolverintrycket.
- DNSBL-write-requester och den nya check-endpointen skriver nu också explicita backendloggar och försöker skicka DNSBL API-aktivitet vidare till konfigurerade audit-/notifieringskanaler när sådana routes/kanaler är aktiverade.
2026-04-09
RSS Watch Feedfrågor - keywordträffar i brödtext följer nu med hela vägen till svaret
- Feedfrågor slår nu alltid ihop deterministiska fallback-sökord med OpenAI:s keyword-plan, så bokstavliga databassökbara termer som
sabah inte tappas bort bara för att AI:n föreslår bredare formuleringar.
- När en person-/byline-riktad filtrering måste falla tillbaka till bredare keyword-retrieval återapplicerar kontextsteget inte längre det gamla bylinefiltret och tömmer evidensmängden av misstag.
- De senaste posterna som skickas till modellen innehåller nu korta keyword-styrda utdrag från beskrivning/innehåll, vilket gör att Ask-a-question-svar lättare ser träffar som hittades i artikeltexten och inte bara i rubriken.
RSS-analytics - overwrite current håller sig nu inom den aktiva vecko-/månadsbucken
- Kategori- och site-analytics härleder nu
period_bucket från den aktiva periodens referensdatum i stället för från startdatumet för rullfönstret.
- Det innebär att overwrite current bara ersätter den aktuella vecko-/månadsbucken och automatiskt går vidare till en ny rad när kalenderperioden byts, i stället för att se ut som att den fortfarande hör till föregående bucket.
WordPress DNSBL-plugin - inbyggd huvudsida för removal kräver nu live delete-behörighet
- WordPress DNSBL-pluginet kan nu rendera en egen inbyggd huvudtemplate för removal-sidan när den valda delisting-sidan inte redan innehåller någon removal-shortcode.
- När den primära delisting-sidan sparas gör pluginet nu ett liveuppslag mot
GET /api/dnsbl/token/info, och sidan accepteras bara när det konfigurerade tokenet just då har delete / delist-behörighet.
- Sajtägarna kan fortfarande bygga egna removal-sidor med
[dnsbl_removal_form] eller [tornevall_dnsbl_removal_form], och de shortcode-formulären visar nu bara de DNSBL-operationer som det konfigurerade tokenet faktiskt får utföra.
RSS Watch Feedfrågor - extra sökord hålls nu querybara i stället för att bli hjälputtryck
- Feedfrågor rensar nu bort generiska hjälp-/kontextsuffix från keyword-planerarens output innan termerna återanvänds i den SQL-baserade retrievalen.
- Flertokensnamn och entiteter hålls därför närmare bokstavliga queryfraser som
Tara Sabah eller Tara Saleh, i stället för konstiga varianter som tara sabah artiklar, tara sabah analys eller tara saleh källor.
- Den readonly-ruta med extra sökord som visas på
/feed speglar nu samma städade fraser, så de synliga tipsen bättre matchar ord/fraser som faktiskt kan förekomma i artikelrubriker, beskrivningar, innehåll eller bylines.
RSS Watch Feedfrågor - användaren kan nu se de bokstavliga sökord som faktiskt användes
/feed visar nu en separat readonly-ruta med sökord som användes under senaste svaret, bredvid den befintliga hjälprutan för extra sökord.
- Den site-specifika frågepanelen för en feed visar nu samma keyword-ruta för senaste svaret på just den feeden.
/feed/user-questions visar nu de bokstavliga retrieval-sökorden i rutan How this answer was analyzed, så användaren kan jämföra exakt vad som söktes efter mot eventuella bredare extratermer.
RSS inbound XPath-import - nullsäker DOM-hantering för trasiga äldre rulesets
- Den äldre XPath-importen som används av
/api/rss/update skyddar nu sina DOM-hjälpanrop mot null-värden, så delvis matchande eller felaktiga elements-rulesets inte längre kraschar hela inbound-konverteringen med method_exists(..., null)-fel.
- XPath-extraktionsfel fångas nu också som fulla PHP-throwables i RSS-pipelinen, vilket betyder att en trasig inbound-rad loggas och hoppas över rent i stället för att avbryta hela uppdateringskörningen.
2026-04-08
OpenAI access-request i adminvyer - miljöer utan tabellen fallerar nu mjukt i stället för att krascha
/users, /users/{id}/edit, /keys/mine och /admin/openai hanterar nu avsaknad av tabellen openai_access_requests utan SQL-exception.
- Modellen
OpenAiAccessRequest är nu explicit kopplad till det riktiga tabellnamnet openai_access_requests, vilket också rättar miljöer där Laravel annars försökte använda det felaktiga namnet open_ai_access_requests.
- Om migreringen ännu inte körts fortsätter de berörda sidorna nu att fungera och visar i stället en adminriktad varning om att ansökningskön tillfälligt inte är tillgänglig.
2026-04-07
RSS Watch Feed Q&A - striktare keyword-extraktion och bättre namnträffar
- Feedfrågor ber nu OpenAI om en striktare JSON-lista med sökord som ordnas från mest specifik fras till bredare stödsökord innan databassökningen körs.
- Tydliga flertokensentiteter som fullständiga personnamn prioriteras nu som hela fraser, vilket minskar fall där en bred förstnamnsträff råkar dra in fel person.
- Generiska frågeord och utfyllnadsord som
har, du, något, spännande, with, about och liknande filtreras nu bort innan SQL-baserad retrieval körs, även om de finns med i den ursprungliga frågan.
- Den icke-AI-baserade fallbacken försöker nu bevara starkare fraskandidater (till exempel citerade fraser och tydliga egennamnssekvenser) och breddar bara med mer specifika efterled som efternamn.
2026-04-06
DNSBL token-info - livekontroll accepterar nu alla icke-tomma tokensträngar
GET /api/dnsbl/token/info avvisar inte längre icke-tomma tokensträngar enbart för att de faller utanför en lokal längd-/formatkontroll.
- Endpointen returnerar fortfarande
401 när inget token skickas alls, men gör annars nu ett faktiskt uppslag innan svar ges.
- Om värdet inte är ett DNSBL write-token men väl matchar en annan Tools-token/provider (till exempel en vanlig Tools bearer-token) returnerar API:t nu ett uttryckligt diagnossvar i stället för ett generiskt formatfel.
- WordPress-pluginets knapp Check token permissions frågar nu alltid API:t direkt om detta, så operatören kan se vad Tools-backenden faktiskt känner igen i stället för att stoppas av pluginets egen gissning.
- När det andra matchade tokenet tillhör en aktiv adminägd Tools-token rapporterar API:t nu tokenet som att det har automatisk effektiv DNSBL-access via samma
X-Dnsbl-Token-flöde, med fulla effektiva behörighetsfält i lyckat svar i stället för den gamla formuleringen om att det "inte är ett dedikerat write-token".
- WordPress-pluginets inställningssida speglar nu samma modell med ett synligt fält för DNSBL / Tools API token i stället för att presentera en splittrad tokenmodell i UI:t.
Min profil + Social Media Tools - direktgenväg från profilen och striktare räkning av upprepade avvisningar
- Användare som har åtkomst till
/admin/social-media-tools kan nu öppna dashboarden direkt från My Profile i stället för att bara behöva hitta den via My API Keys.
- Facebook-dashboarden tolkar nu den tidigare “returning customers”-metriken som personer som blivit avvisade mer än en gång.
- Grafen, sammanfattningskorten och den valfria overlay-serien i aktivitetsgrafen följer nu samma striktare definition som bara baseras på upprepade avvisningar.
Användarsäkerhet / OpenAI-access - online-användare, feed-probing, banningsflöde och ansökningsstyrd AI-access
/admin/security/online-users härleder nu inloggade webbanvändare från sessionspayload och nyliga spårade sidbesök när databasfältet sessions.user_id är tomt, så inloggade användare inte längre ser ut som gäster bara för att default guard är api.
- Samma admin-sida har nu en knapp för Expand all visitors så alla sessionsgrupper kan öppnas samtidigt.
- RSS autoanalys i
/rss använder nu en enda konsekvent och tydlig probe-User-Agent i stället för att blanda en Tools-sträng med generiska Mozilla/5.0-anrop.
- Admin-editorn för användare skiljer nu på Ban user och Delete user. Banning kan lägga till email-/IP-ban, kasta ut aktiva sessioner, återkalla OpenAI-access och ta bort användarens Tools AI bearer-token utan att kontot måste raderas direkt.
- OpenAI-access är nu ansökningsstyrd för vanliga användare:
/keys/mine har ett ansökningsformulär, /admin/openai har granskningskön, och icke-admin-AI-användning kräver nu faktisk godkänd access i stället för att bara råka omfattas av ett dagligt budgettak.
2026-04-05
RSS Watch-analysvyer - localhost-länkar följer nu åter aktiv publik host
- Cachad analys-markdown på
/feed, /feed/c/{categorySlug}, /feed/cards/{categorySlug}, /rss och /feed-admin skriver nu om råkade localhost-/loopback-länkar till den aktuella publika hosten innan de visas på skärm.
- Generering och omöversättning av kategori-/site-analyser normaliserar nu också dessa host-referenser innan texten sparas, så framtida cachade analyser är mindre benägna att behålla gamla localhost-URL:er.
- Den publika kategoriöversikten på
/feed uppdaterar nu overflow-kontrollen igen när ett ihopfällt kort öppnas, vilket återställer Read more-knappen där.
- Publika RSS-artikellänkar absolutiserar nu också lagrade relativa källsökvägar mot den ägande feedens
real_url/url, så att /out/{contentId} inte längre skickar vidare till en ren path-länk när källan bara lagrat /foo/bar.
SocialGPT Chrome-tillägg - 1.2.15 fixar språkregressionen efter runtime-lokaliseringen
- Tillägget håller nu popupens/config-sidans UI-översättningar separerade från de faktiska AI-standarderna och språkvalen för svar.
- Det rättar regressionen där vissa användare med svensk webbläsar-UI kunde få svensk-bias i svaren trots att ett annat svarsspråk var valt.
- Lokaliserad standardtext för svararprofil och testfråga skrivs inte längre in i de redigerbara fälten som om de vore riktiga sparade AI-inställningar.
- Drabbade användare får nu en automatisk reparationsväg när tillägget läser in den sparade svararprofilen igen.
- Popupen/optionsidan har nu en separat väljare för Extension language, och SocialGPTs UI direkt på sidan följer nu samma inställning för Toolbox-chrome, flytande knappar, faktakontrollåtgärder och snabbmenyetiketter.
Per-feed publishby-namnmappningar för författar-ID:n
- Lade till ett nytt RSS-lager för mappning av ofärdiga
publishby-värden (till exempel numeriska eller äldre ID:n) nycklat på urlid + publishby, så att samma råvärde tryggt kan betyda olika personer i olika feeds.
- RSS-editorn har nu en per-feed-sida Authors där operatörer manuellt kan koppla råa
publishby-värden till ett riktigt visningsnamn.
- Upplösta författarnamn används nu i publika feed-/artikelsidor, kategorikort, listan över redigerade poster, Feed Q&A:s kontext/retrieval samt i
/api/rss/feed/{site}-läsare.
- API-/feed-läsare får nu det upplösta visningsnamnet samtidigt som ursprungligt råvärde finns kvar som additiv metadata för klienter som behöver båda.
Feed Q&A - fallback för nyckelord hoppar nu över generiska utfyllnadsord
- När OpenAI-baserad nyckelordsutvinning inte är tillgänglig och Feed Q&A faller tillbaka till enkel tokenisering filtreras nu generiska ord som
article, latest, feed, discussion, nyheter och liknande breda etiketter bort före databassökningen.
- Det gör fallback-retrieval mer förankrat i faktiska entiteter/namn från frågan i stället för att bredda sökningen med brusiga generella ord.
SocialGPT Chrome-tillägg - config-sidan speglar nu popupens inställningar
- Tilläggets större config-/optionsida visar nu samma redigerbara inställningar som popupen och använder samma autosave-/lagringsbeteende.
- Den tidigare scaffold-texten på sidan togs bort, inklusive den inaktuella notisen om
sc4a-insights som companion-modul i just den panelen.
- Config-sidan är nu tänkt som den tydligare fullstora inställningsytan, medan popupen fortsatt fungerar som den kompakta snabbeditorn.
SocialGPT Chrome-tillägg - popup och config-sida lokaliseras nu dynamiskt
- Popupen och config-/optionsidan växlar nu UI-språk dynamiskt vid körning i stället för att vara enbart engelska.
- Svenska stöds nu uttryckligen och väljs automatiskt när webbläsarens UI föredrar svenska, med engelska som fallback för saknade nycklar.
SocialGPT Chrome-tillägg - bearer-token-fält valideras nu inline
- Tokenfälten i popupen och config-/optionsidan visar nu en lättviktig inline-spinner samt ett godkänt/avvisat resultat medan bearer-token kontrolleras mot Tools.
- Lade till en lättviktig extension-API-endpoint för detta flöde:
GET /api/social-media-tools/extension/validate-token.
SocialGPT Chrome-tillägg - avancerad mark-lägeskontext på config-sidan
- Tilläggets config-/optionsida innehåller nu en ny sektion Advanced mark-mode context för Toolbox-användare som behöver mer spårbara markerade block.
- Standardbeteendet är oförändrat: markerad kontext använder fortfarande kompakt
[1], [2]-numrering om användaren inte väljer något annat.
- Avancerade användare kan nu lägga till genererade mark-id:n (till exempel
tn-mark-2), rikare elementbeskrivningar och valfria bredare extraktionslägen som go one parent up eller go one parent up + scan direct child blocks.
- När ett rikare mark-etikettläge är aktiverat visar aktiva markerade element nu också en synlig lokal badge på sidan så att DOM-blocket lättare kan kopplas till kontexten i Toolbox.
SocialGPT Chrome-tillägg - popupgenväg till Toolbox, flyttbar panel och iframe-medveten fångst
- Popupen innehåller nu Open Toolbox in active tab, vilket ger användaren en direkt fallback på sidor där det vanliga högerklicksflödet är opålitligt.
- Om sidan redan har en aktiv textmarkering importerar popupgenvägen den markeringen direkt in i Toolbox i stället för att öppna en tom panel.
- Toolbox-panelens header är nu flyttbar så att panelen kan dras bort från trånga delar av sidans UI.
- Toolboxens stängningskontroll
× fungerar nu igen efter ändringen med flyttbar header.
- Timing för selection-overlay har hårdnats så att
Open Toolbox och Verify fact visas mer tillförlitligt efter korta direktmarkeringar och dubbelklicksmarkering.
- Avancerad mark-lägesextraktion stöder nu också hela den aktuella framens/dokumentets text, och tillägget kör nu sina content scripts i nästlade frames (inklusive matchande
about:blank-child frames) där Chrome tillåter det.
RSS-scraper: väntetrådar vid idle + tidsstämplade loggar
GET /api/rss/urls returnerar nu additiv scraper-idle-metadata (idle) när inga URL:er är due för den anropande agenten.
- Idle-payloaden innehåller reason,
wait_seconds, wait_minutes, next_poll_at och identiteten för nästa väntade URL så scraper-workers kan se när arbete sannolikt återkommer.
- Den medföljande runnern
projects/scraper/scrape.php skriver nu tidsstämplade statusrader och försöker dessutom spara dem till SCRAPE_LOG_FILE eller /var/log/tools-scraper/scrape.log när sökvägen är skrivbar.
- Körningar utan arbete avslutas nu rent i stället för att behandlas som fel, och scrapern loggar backendens väntetråd när den finns.
RSS Watch-dokumentation: front matter-fix + crawler-intro
- Fixade en delimiter-typo i front matter i
docs/en/rsswatch.md som gjorde att metadata visades som vanlig text i docs-renderingen.
- Lade till ett nytt inledande segment som beskriver vad RSS Watch är (publik läsare + ingest-pipeline) och dokumenterar aktuella User-Agent-mönster för scrape/trigger-workers.
Moderniserad scraper User-Agent (ingen ändring av rapporteringsnyckel)
- Ersatte äldre UA-format
RssWatch-2.0/<hostname> i scraper-runners med crawler-liknande RSSWatchBot-strängar inklusive docs-URL.
- Agentattribuering/schemarapportering är oförändrad eftersom den fortsatt använder
agent_id=<hostname> i API-anrop.
Publik kategorikortvy - analyser först + artiklar/historik tillbaka
/feed/cards/{categorySlug} renderar nu AI-analyser överst och därefter kategorins artikelström under (i stället för enbart analysfokus).
- Analysvalet är nu balanserat per period: en vald variant vardera för
daily, weekly, monthly och yearly när sådana finns.
- Artikelrader i kortvyn har nu samma versionshistorik- och diffbeteende som den klassiska kategorivyn.
- Kortvyn har nu dessutom ett mer redaktionellt/tidningslikt uttryck med masthead-liknande toppsektion och huvudartikel först.
Feed Q&A - författare-först via publishby för personinriktade frågor
- Feed-frågor detekterar nu explicit personfokus i frågetexten (till exempel "artiklar som Andreas Magnusson skrivit").
- När personfokus hittas kör retrieval ett förstapass med filter mot
rss.content.publishby för att minska sammanblandning mellan olika skribenter.
- Om det inte blir träff i det författarfiltrerade passet (till exempel äldre rader med ID-liknande byline) växlar systemet automatiskt tillbaka till bredare keyword-retrieval.
- Retrieval-metadata sparar nu om författarfilter begärdes, tillämpades och om fallback användes.
2026-04-04
Feed Q&A – artikellänkar i AI-svar
- AI-analysens kontext inkluderar nu artikellänkar (
link-fältet) för de senaste inläggen och versionshistorikens artiklar.
- När AI:n citerar specifika artiklar formateras de som markdown-hyperlänkar
[Titel](url) om artikelns URL finns i kontexten.
- Det inbyggda svarspanelet på
/feed renderar nu markdown-länkar som klickbara hyperlänkar.
- Session-flash-svaret (som visas efter sidinladdning) renderar också med full markdown, konsekvent med historikssidan.
- Dolda flöden är skyddade: deras artikellänkar skickas aldrig till AI-kontexten.
Feed Q&A – varning om datanoggrannhet
- Ask AI-panelen på
/feed visar nu en liten notis under beskrivningen som påminner användare om att svar baseras på tillgängligt indexerat innehåll, att vissa sajter kan ha begränsad historik, och att svar inte alltid är fullständiga eller helt exakta.
- Varningen är fullständigt översatt på alla fem stödda gränssnittsspråk (EN, SV, DA, NO, FI).
Feed Q&A – progressdetaljfraser är nu översättningsbara
- Progressdetaljmeddelanden som visas under analys (t.ex. "Förfinar underlaget…", "Tar fram sökord…") hämtas nu från phraseöversättningssystemet.
- Svenska och övriga stödda språk visar nu sin egen översatta text för dessa detaljmeddelanden i stället för den engelska fallbacken.
Feed-fraser – saknade översättningar ifyllda
- Korrigerade saknade phraseöversättningar för alla stödda språk:
- Svenska:
ask_error_required, ask_error_captcha, ask_error_generic, site_analytics_title (föll tillbaka på engelska).
- Danska:
ask_error_required, ask_error_captcha, ask_error_generic.
- Norska:
ask_asking, ask_error_required, ask_error_captcha, ask_error_generic.
- Finska:
ask_error_required, ask_error_captcha, ask_error_generic, site_analytics_title.
DNSBL token-informationsendpoint
- Ny
GET /api/dnsbl/token/info-endpoint låter klienter kontrollera behörigheterna för ett konfigurerat DNSBL-token utan att kräva inloggad session.
- Skicka token via
X-Dnsbl-Token-header eller ?dnsbl_token= query-parameter.
- Returnerar tokenets namn, status, add/delete-scope, adminstatus, godkännandetidpunkt samt de zoner tokenet får verka i.
- Fungerar för token i valfritt tillstånd (active, pending, revoked) så klienter kan se exakt varför ett token inte fungerar.
- WordPress DNSBL-pluginets adminpanel visar nu en "Check token permissions"-knapp bredvid det konfigurerade tokenfältet. Ett klick gör en live-kontroll och renderar en behörighetstabell direkt på sidan utan att ladda om.
WordPress DNSBL-plugin - fix av oändlig loop i sanitize-callback
- Åtgärdade en fatal stack overflow som uppstod när inställningar sparades med ett skriven token konfigurerat.
sanitize_option-callbacken anropade update_option vilket åter triggade samma filter och skapade oändlig rekursion. En statisk re-entrancy-guard lades till för att förhindra detta.
DNSBL write API - dry-run-kvittenser för säkrare tester av delist/list
POST /api/dnsbl/records/add, /delete, /update och /bulk accepterar nu valfri dry_run.
- Dry-run-requester validerar token-scope, payload och zonbehörighet och returnerar sedan en kvittens utan att skriva DNS-ändringar.
- Svar innehåller nu
dry_run och dry_run_accepted för att bekräfta att backend körde simuleringsläge.
WordPress DNSBL-plugin - shortcode-baserat delistformulär
- DNSBL-pluginet för WordPress stöder nu ett inbäddningsbart formulär via shortcode (
[dnsbl_removal_form]) med HTML/AJAX-submission via WordPress-backendproxy.
- Formuläret stöder både lokalt WordPress dry-run och Tools API dry-run-kvittens för säkrare preflight-tester.
Feedfrågor - rikare analysmetadata per fråga för breda scope
- Feedfrågor sparar nu en rikare analysmetadata per fråga, inklusive scope-läge, broad-scope-indikator, kontextstorlek, blockmetadata och retrievalstrategi.
- Det här är särskilt användbart när ingen kategori/sajt är vald eller när många sajter ingår, där blockanalys kan samla större underlag.
Feedfrågehistorik - ruta för "Hur svaret analyserades"
/feed/user-questions visar nu en kompakt analysruta per färdig fråga.
- Rutan visar analysmetod (single-pass vs block/chunked), scope-/retrievaldetaljer samt extra sökord som användes före slutsvaret.
Publika /feed-kategorier – kompakt kortvy och visningstak per period
- Ny publik route:
/feed/cards/{categorySlug} för en kompakt, kortbaserad AI-analysvy.
- Klassiska kategorirouten
/feed/c/{categorySlug} är kvar oförändrad och har nu en snabb länk till kortvyn.
- Kategori-analyser på
/feed visar nu max 3 varianter per period (daily/weekly/monthly/yearly), med direkt "Show all"-länk vidare till kortvyn.
RSS-analyticsgenerering – djupare schemalagd analys via segmenterade block
- Kategori- och sajtanalytics kan nu köra segmenterade blockpass före slutsyntes när perioddatasetet är stort.
- Gäller schemalagda/CLI/API-genererade daily-, weekly-, monthly- och yearly-körningar och ger djupare samt jämnare resultat på större underlag.
Publik feedsökning – byline/författarträffar inkluderar nu publishby
- Fritextsökningen på
/feed inkluderar nu content.publishby i fallback-LIKE-matchning och poängsättning, vilket förbättrar personnamnssökningar.
RSS-import – creator/author-metadata fångas nu säkrare
- RSS/Atom-importen sparar nu
creator/author tydligare i content.publishby när feeden exponerar fältet (inklusive fler feedvarianter där detta tidigare kunde tappas).
- Ny RSS-DB-migration skapar
content.publishby om kolumnen saknas, så byline kan lagras i stället för att försvinna.
- Dubblettskyddet ignorerar nu uttryckligen byline-only-ändringar: om
link + title + description + content är oförändrat skapas ingen ny rad bara för att publishby tillkommer, försvinner eller ändras.
e ### RSS-scrapern – Centerpartiets textextraktion normaliserar nu osäker teckenkodning säkrare
- Centerpartiets specialscraper normaliserar nu hämtad HTML och extraherad text till UTF-8 före scriptparsing, textstädning och DOM-fallback-parsing.
- Det minskar risken att svenska tecken blir trasiga när källsidan eller transportbytes inte är ren UTF-8.
RSS-import – XPath pass-through förstör inte längre redan UTF-8-kodad text
- RSS-importens XPath-pass-through kör inte längre
utf8_decode(...) på renderade radvärden före insert.
- Det stänger en korruptionsväg där redan UTF-8-kodade titlar, beskrivningar och andra extraherade fält kunde tappa svenska tecken vid import från syntetiska HTML-källor.
2026-04-03
Publika /feed – kategorikort startar ihopfällda och kan färgkodas
- Kategorikorten på
/feed startar nu ihopfällda som standard när ingen tidigare preferens finns sparad.
- Sidan minns nu bara senast öppnade kategorikort i en cookie och återställer det kortet vid nästa besök i stället för att öppna flera gamla sektioner samtidigt.
- Feed Admins kategoriinställningar stöder nu en publik accentfärg per kategori. Den publika feeden mjukar automatiskt upp färgen så att mörk text fortfarande är lättläst i light mode.
RSS-editorn – WordPress auto-detect faller nu tillbaka rent när wp-json är låst
- Add-feed-autodetect behandlar nu
401 och 403 från /wp-json/wp/v2/posts som otillgänglig WordPress REST-data.
- När det händer fortsätter analysen med vanlig feedupptäckten (
<link rel="alternate">, /feed, /rss.xml osv.) i stället för att anta att WordPress REST-endpointen kan användas.
RSS-scrapern – stöd för Centerpartiets nyhetssida via AppRegistry och syntetisk HTML
- Scraperprojektet kan nu specialhantera nyhetssidor på
centerpartiet.se före det vanliga RSS/XPath-importsteget.
- I stället för att bara läsa synlig HTML extraheras nu rätt
AppRegistry.registerInitialState(...) dynamiskt från sidans bootstrap-script och byggs om till stabil syntetisk HTML.
- Den syntetiska HTML-strukturen är avsedd för manuella
sitetype=xpath-regler, vilket gör Centerpartiets nyhetslista enklare att mata in i befintlig importerare utan att /api/rss/update behöver lära sig ett nytt råscript-format.
- Om script-state-extraktionen misslyckas faller scrapern tillbaka till att läsa redan renderade
<article>-noder från sidan.
RSS-editorn XPath Lab – legacy-kompatibilitetsvy för href/attributproblem
/rss/xpath-lab visar nu både en snabb labbpreview och en separat Production / legacy scraper compatibility preview som kör samma XPath-renderare som liveimporten använder.
- Kompatibilitetspanelen markerar nu ett vanligt fel där icke-
value-extraktorer som href tyst hoppas över eftersom legacy-renderaren förväntar sig matchande extractor-nycklar i pipeline[3].
- Labbet varnar nu uttryckligen för den mismatchen och rekommenderar ett säkrare mönster: extrahera attributnoder direkt (
/@href, /@src, /@datetime) och mappa dem via "value".
- OpenAI-prompten för att generera XPath-regler har också uppdaterats så att AI:n i första hand föreslår det säkrare attributnod-mönstret.
Feedfrågor – live-progress och tydligare återkoppling för långsamma frågor
/feed och den site-specifika feedfrågepanelen växlar nu submit-knappen till ett tydligt spinnerläge medan en fråga analyseras.
- Webbläsaren poll:ar nu dedikerade webb-endpoints för status så att UI:t kan visa aktuell backendfas, förfluten tid, föranalys-pass och blockprogress för större frågor.
- Det gör att långa flerpassfrågor känns betydligt mindre "hängda", särskilt när backenden fortfarande arbetar igenom sekventiell blockanalys.
Feedfrågor – senaste svar-rutan visar nu relaterade extrasökord
- När
/feed har breddat retrieval med extra relaterade uttryck visar rutan för senaste svar nu dessa ord i en readonly-hjälpruta under svaret.
- Texten är medvetet användarnära och förklarar att uttrycken användes för att hitta mer relevanta inlägg innan slutsvaret skrevs.
RSS Watch – permalinkhistorik hardad mot patologiska dubblettlänkar
/feed/entry/{contentId} scope:ar nu historikuppslag till samma feed (urlid + link) i stället för att scanna på enbart länk.
- Historikrenderingen på entry-sidan är nu begränsad till de 200 senaste lagrade revisionerna per inläggssida, samtidigt som totalt antal revisioner fortfarande visas.
- Ett nytt RSS-DB-index har lagts till för permalinkhistorikfrågan så att dubblettunga länkar laddar betydligt snabbare och löper mindre risk att slå i PHP:s max-exekveringstid.
RSS Watch – AJAX-baserad fritextsökning på /feed
- Lade till en ny ruta Sök inlägg högst upp på
/feed.
- Sökningen körs asynkront och låter användaren stanna kvar på
/feed medan matchande feedinlägg hämtas.
- Resultaten grupperas per kategori och visar genvägar för att öppna inlägget, feeden eller originalkällan.
- När sökresultat visas döljs den vanliga feed-/kategori-/sajtöversikten tillfälligt så att sidan håller fokus på resultatlistan.
Social Media Tools-tillägget – Chrome Web Store-anpassning (v1.2.12)
- Behörigheter omstrukturerade: standardbehörigheten
host_permissions begränsas nu till Tools API-servrarna (tools.tornevall.net, tools.tornevall.com). <all_urls> har flyttats till optional_host_permissions.
- Statisk content script-injektion begränsad: scripts injiceras nu bara automatiskt på Facebook, SoundCloud och X / Twitter. Godtyckliga sidor påverkas inte i basläge.
- Globalt webbläsarövergripande AI-läge tillagt: användare med giltig Tools-token kan aktivera ett nytt alternativ i tilläggets popup: "Enable global browser-wide AI mode". Vid aktivering visas Chromes inbyggda behörighetsdialog för
<all_urls>. Om användaren godkänner registreras content scripts på alla webbplatser. Inaktivering tar bort registreringen och den frivilliga behörigheten direkt.
- Kontextmeny-fallback-injektion: "Open Toolbox" och "Verify fact" i högerklicksmenyn fungerar nu på alla sidor — bakgrunden injicerar scripts tillfälligt via
activeTab när användaren klickar på ett menyalternativ på en sida utan befintligt content script.
CHROME_WEB_STORE_PRIVACY.md tillagd i tillägets källkatalog som källdokument för Chrome Web Store-inskickning.
docs/en/socialgpt-chrome.md tillagd som användardokumentation för tilläggets behörighetsmodell, funktioner och lagringsanvändning.
- Runtime-fix: löste en panelregression som kunde kasta
resetReplyTransientFieldsButKeepContext is not defined i tilläggets loggar efter AI-svar.
Dokumentation - publika integritetspolicysidor for Chrome Web Store
- Lade till en dedikerad publik integritetspolicysida pa engelska:
/docs/en/privacy-policy.
- Lade till en matchande svensk integritetspolicysida:
/docs/sv/privacy-policy.
- Uppdaterade docs-indexsidorna (
/docs/en och /docs/sv) med ett synligt juridikavsnitt och direktlankar till integritetspolicyn.
- Policyn forklarar nu uttryckligen tokenanvandning for autentisering, anvandarinskickat innehall for AI/faktakontroll, uttalande om fjarrkod samt no-sale/no-advertising-linje for datadelning.
- Policyn forklarar nu ocksa att anvandare nar som helst kan begara radering/purge av sin lagrade data.
Dokumentation - autodiscover av publika markdown-sidor
DocsController autodiscoverar nu publika docs-slugs från språkmappar (docs/en/*.md, docs/sv/*.md) i stället för en manuellt underhållen allowlist.
- Nya markdown-sidor blir nu routbara/listade utan controller-ändringar.
- Interna docs spärras nu via front matter (
visibility: admin eller access: internal) i stället för en hårdkodad slug-denylist.
Feedfrågor - keyword-first retrieval och tydligare orkestrering
- Frågeflödet på
/feed börjar nu med ett keyword-uttag: OpenAI tar fram kompakta sökord från användarens fråga innan full kontext byggs.
- Backend smalnar nu först av kandidatrader i
rss.content via sökträffar i title/description/content och bygger därefter kontextblock + versionshistorik från relevanta rader.
- Periodstyrda träfftak är nu mer generösa för kortare fönster (
daily/weekly/monthly) och striktare för yearly för att hålla promptstorleken kontrollerad.
- Feedfrågorna har nu också fått en ny period
all_time för analys över hela databasen, så frågor kan söka över hela den lagrade RSS-historiken i stället för att stanna vid innevarande års fönster.
- Keyword-expansionen är nu mer scope-medveten: planner-föreslagna extrasökord måste hålla sig förankrade i originalfrågan och aktivt kategori-/site-scope, och generiska glidtermer filtreras bort innan SQL-retrieval körs.
- Användare kan nu välja sökordsbredd per fråga (
strict, balanced, expansive), medan admin kan definiera standardläget på /feed och i site-specifika feedfrågor.
- Orkestreringen för feedfrågor har refaktorerats med tydligare hjälpfunktioner för settings/meta och datablock, vilket förenklar vidare utbyggnad av flerpassfrågor.
- Keyword-retrieval kör nu stegvis återhämtning (
strict fulltext -> relaxed fulltext -> LIKE fallback) och rankad sammanslagning av träffar, vilket förbättrar smala ämnesfrågor som tidigare gav för få träffar.
- Feedfrågor stöder nu en begränsad och konfigurerbar föranalys-loop före slutsvaret, så OpenAI kan föreslå ytterligare SQL-baserad retrieval i upp till 5 pass som standard innan slutrapporten ändå genereras.
2026-04-02
RSS-editorn (/rss) – URL-mappning i add-form + kategoriväljare
- Add URL-formuläret sparar nu den först angivna sid-URL:en som
real_url och använder den auto-upptäckta feed-URL:en som url.
- 🤖 Auto fyller nu
URL med upptäckt feed-endpoint men behåller den inmatade källsidan i Real URL.
- Kategorifältet i add-form består nu av:
- en dropdown med befintliga kategorier, och
- ett fritextfält för ny kategori.
- Om fritextfältet är ifyllt prioriteras det över dropdown-valet. Om fritext är tom används dropdown-värdet.
2026-04-01
XPath Lab – pipeline-regeltest och AI-förslag
- XPath Lab på
/rss/xpath-lab stöder nu inklistering och testning av hela det 5-elements pipeline/elements JSON-formatet som används av sitetype=xpath-feeds.
- Resultatpanelen visar vilken radselector som matchade, hur många rader som extraherades och de extraherade fältvärdena per rad.
- Om en pipeline angetts men ger 0 rader triggas AI-förslag automatiskt (OpenAI genererar nya regelkandidater från HTML-snippeten).
- Ask AI-kryssrutan kan också trigga regelgenerering när som helst, även om resultat redan hittats.
- AI-genererade regler visas med radselectors och output-fältförhandsvisning; en "Fill pipeline field"-knapp kopierar dem tillbaka till pipeline-fältet för omedelbar omtestning.
- Pipeline-textfältet har nu en placeholder med hela 5-elements-formatet och ett kommenterat exempel.
Feed Q&A – versionshistoriken visar nu fler versioner per artikel
VERSION_SAMPLE_LIMIT_BROAD höjdes från 4 till 6 och VERSION_SAMPLE_LIMIT_NARROW från 6 till 12.
- Effekt: artiklar med upp till 12 versioner (i smalt/site-fokuserat läge) visar nu alla versioner istället för ett urval. AI-analysen kan därmed se hela redigeringshistoriken utan att noteras som trunkerad.
- För artiklar med fler versioner än gränsen väljs fortfarande representativa urval spridda över hela historikspannet.
Dokumentation – RSS Watch API-referens utökad
docs/en/rsswatch.md och docs/sv/rsswatch.md har nu en komplett API-referens med alla /api/rss/*-endpoints, request/response-scheman, autentisering och parameterTabeller.
- Nytt avsnitt:
elements / Pipeline JSON-format med ett komplett kommenterat exempel på XPath-regler i Socialdemokraterna-stil.
- Nytt avsnitt: Feed Q&A API med request/response-detaljer och focus selector-beteende.
- Nytt avsnitt: Versionshistorik i context med beskrivning av
version_history.articles JSON-strukturen som skickas till OpenAI.
- XPath Lab-avsnittet har uppdaterats för att beskriva pipeline-testningsflödet.
RSS publik feed – delbara kategorisidor (/feed/c/{categorySlug})
- Lade till en ny publik kategorisida på
/feed/c/{categorySlug}.
- Sidan visar inlägg från alla synliga feeds i vald kategori och behåller samma versions-/diffvisning som vanliga feedsidor.
- Kategorianalyskorten på
/feed har nu en Share-knapp (bredvid adminåtgärder) som öppnar rätt kategorisida direkt.
- Kategorisidan visar även en genväg till kategori-API-flödet (
/api/rss/feed/{categorySlug}).
2026-03-31
RSS-editorn – nytt visuellt XPath Lab
- Lade till ett nytt XPath-verktyg nära editorn på
/rss/xpath-lab (behörighet: rss) för felsökning och framtagning av XPath-regler från inklistrade HTML-snippets.
- Sidan visar en visuell DOM-översikt med XPath per nod, nyckelattribut och textpreview för snabbare selektorsökning.
- Lade till valfri körning av XPath-uttryck på samma sida (
xpath_query) med direkt visning av träffar (nodsökväg, tagg, text och snippet).
- Lade till en SimpleXML-liknande XML-preview så parserträdet kan granskas innan
elements-regler skrivs.
- Lade till snabblänk från
/rss till labbet samt hjälplänk i auto-detect-fältet för HTML-kontext.
Feedfrågor – rikare versionsutdrag + navbar-städning
- Versionsutdrag innehåller nu textunderlag:
version_history.articles[*].versions[*] innehåller nu även description och villkorligt content (när content finns), inte bara titelrader.
- Payloaden hålls fortfarande kompakt: utdragen trimmas och går fortsatt genom kontextbudgeteringen för att undvika för stora AI-requester.
- Städad toppnavbar: tog bort genvägarna
My To Do, Whisper och Whisper Admin från den globala navbaren.
- Tjänstekatalogen gäller fortsatt: Microsoft To Do och Whisper finns kvar under
/services med behörighetsstyrda kort.
Feed admin – konfigurerbar standardsidstorlek för /feed
- Lade till en ny global feed-admin-inställning för Public
/feed default feeds per page.
- Den publika feedsidan använder nu det sparade värdet när
per_page saknas i query-parametrar.
- Explicit query-override fungerar fortsatt (
/feed?per_page=...) och värden klammas fortfarande till säkra gränser.
RSS entry admin – ignorera vid import + hård purge till en rad
- Lade till entry-baserade adminkontroller på
/feed/entry/{contentId} för brusiga inlägg:
- Ignore this post at import (feed-scope eller globalt), implementerat som blockregel på länk.
- Allow import again för att ta bort ignorera-regeln.
- Purge all except one latest row för länken (hård reset).
- Befintligt cautious-läge för dedup-purge finns kvar och kan nu användas tillsammans med import-ignore för länkar som fortsätter cykla.
Feedfrågor – JSON-kontext, versionshistorik och periodfix
- Timeout åtgärdad: Versionshistorik-kontext för webbplatsfokuserade frågor cachelagras nu (5 minuters TTL per webbplats), vilket eliminerar 30-sekunders körningstid på
/feed/{urlid}-frågepanelen.
- Månadsperiod korrigerad till rullande 31-dagarsfönster: Månadskontext täcker nu 31 dagar (idag minus 30 dagar) istället för tidigare 30 dagar.
- Strukturerad JSON-kontext för webbplatsfokuserade frågor: När en fråga riktas mot ≤10 specifika webbplatser levereras AI-kontexten nu som strukturerat JSON med nycklarna
feeds, recent_entries, version_history, top_terms och stats.
- Versionshistorik är periodoberoende:
version_history.articles täcker ALL registrerad tid oavsett valt period (dag/vecka/månad/år), så AI:n kan besvara frågor om artikelredigeringar som sträcker sig över valfri tidsperiod.
- AI-prompten uppdaterad för JSON-kontext: AI:n instrueras explicit att använda
version_history.articles för frågor om redigeringar, innehållsändringar, titeländringar och publiceringshistorik.
- Indexoptimering för RSS-frågekontext: Lade till nya index i RSS-databasen för
buildContextSnapshotFresh() och versionshistorik-frågor för att minska latens/timeouts vid filtrerade frågor:
content(urlid, pubdate, contentid) för periodfönster + sortering
content(urlid, link, content_hash) för gruppering av versionsantal
content(urlid, link, pubdate, contentid) för hämtning av versionshistorik
urls(deleted, is_hidden, category, title, urlid) (eller urls(deleted, category, title, urlid) om is_hidden saknas)
- Skydd mot för stora AI-requester: JSON-kontexten för feedfrågor komprimeras nu innan den skickas till OpenAI för att undvika TPM-/inputgränsfel.
- Versionshistorik samplas i stället för att expandera alla versioner: Varje redigerad artikel behåller total
version_count, title_change_count, first_published, last_published och en kompakt samplad versions[]-lista i stället för varje lagrad revision.
- Kontextbudgetering: Stora filtrerade frågor trimmar först lågprioriterade delar (
debug_summary, domäner, vissa källor/termer/feeds/recent entries) och minskar sedan version_history.articles` tills JSON-payloaden ryms inom teckenbudgeten.
2026-03-30
- Lade till ett nytt Whisper-verktyg för behöriga användare på
/whisper (permission:whisper.use).
- Lade till adminkonsol på
/admin/whisper (permission:whisper.manage) med översikt över alla jobb och run-now-körning.
- Lade till autentiserade API-endpoints under
/api/whisper/*:
GET /status
GET /jobs
POST /jobs
GET /jobs/{jobId}
POST /run-now (manager/admin)
- Lade till lagringstabellen
whisper_transcriptions med status/progress, retry-metadata, transkriptlagring och ägarkoppling.
- Lade till schemalagd köbearbetning (
whisper:process --limit=1, varje minut) och miljöinställningar (WHISPER_*) för binärsökväg, timeouts, retries och SSL-beteende.
Facebook-moderationsdiagram – starkare stapelfärger
- Höjde kontrast och fyllnadsstyrka i färgpaletten för moderation/returning-diagrammen.
- Ökade linje-/kanttjocklek för bättre läsbarhet i mörkt tema och vid skärmdumpar.
Microsoft To Do – användargränssnitt + autentiserat API med tvåvägssynk
- Lade till en ny personlig Microsoft To Do-integration för inloggade användare på
/settings/integrations/microsoft-todo.
- Användare kan nu koppla sitt Microsoft-konto, visa synkade listor, skapa/redigera/ta bort listor och skapa/redigera/ta bort uppgifter direkt i Tools.
- Lade till autentiserade API-endpoints under
/api/microsoft-todo/* för status, synk, listläsning, uppgiftsläsning och list/uppgiftsändringar.
- Synken går nu åt båda håll: ändringar i Tools pushas till Microsoft To Do och fjärrändringar från Microsoft To Do pullas tillbaka till Tools.
- Lade till en lokal spegel för listor/uppgifter samt ett schemalagt synkjobb (
microsoft-todo:sync) som körs var 15:e minut.
- Lade även till dokumentation, OAuth-referens, länkar i tjänstekatalogen och Android-kontraktsnoteringar för den nya endpoint-familjen.
Social Media Tools – SocialGPT-specifik historik i dashboard + separat full historik
- Panelen AI prompt and response history i Social Media Tools-dashboarden visar nu enbart historikrader från SocialGPT.
- Filtreringen för SocialGPT använder request-loggmetadata (
source=social_media_extension, SocialGPT tool slug och feature_slug=gpt) för både lista och detaljvisning.
- Lade till en separat adminsida för komplett historik:
/admin/social-media-tools/audit/complete.
- Den kompletta historiksidan stöder filtrering på source, tool slug, feature slug, user, status, modell och request mode.
- Själva loggskapandet/sparandet är oförändrat: alla request-loggar fortsätter att sparas som tidigare.
RSS – Återställda hjälpfunktioner för inbound-bearbetning och feedgenerering
- Återställde borttagna interna hjälpfunktioner i
RssController som hade orsakat runtime-fel under RSS-inbound-konvertering.
- Fixade krascher i
/api/rss/update som uppstod eftersom canQuery() och handleWordPressRestApi() saknades.
- Återställde även den relaterade kedjan för innehållsdeduplicering, importregel-filtrering, JSON/XML-konvertering och feedgenerering som RSS-flödet använder.
- Det återställer också controllersidans hjälparflöde för
/api/rss/feed/* och analytics-selektorer efter att metodblocket råkat tas bort.
2026-03-29
Publikt flöde – Buggfixar för språkväxlaren
- Fixade saknade översättningar i Ställ en fråga-panelen för alla språk när man byter språk i flödet.
- JS-formulärhanteraren använder nu aktivt språk för alla statustexter, knapptext (
Frågar…), återrenderade svarsrubriker (Senaste svar, F:, S:), success-text och felmeddelanden – i stället för att alltid visa engelska.
- Lade till fem nya översättningsnyckelord för alla språk (
en, sv, da, no, fi):
ask_error_required – visas när frågefältet är tomt.
ask_error_captcha – visas när captcha inte är ifylld.
ask_success_answered – visas efter att ett svar tagits emot.
ask_error_generic – visas vid nätverks-/serverfel.
- Fixade saknad
ask_asking-fras i norskan (no).
- Webbplatsspecifika analytikperiodrubriker (
Daglig, Veckovis osv.) och Läs mer / Visa mindre-knappar svarar nu på språkväxlaren.
- Lade till
site_analytics_title-fras (rubrik för webbplatsspecifik AI-analys) för alla språk.
nginx – TLS-härdning
-
Uppdaterade TLS-konfigurationen i nginx/tools.tornevall.net.conf för att ta bort föråldrade TLSv1 och TLSv1.1.
-
Accepterar nu enbart TLSv1.2 och TLSv1.3.
-
Uppdaterade cipher suite till modern ECDHE/CHACHA20/AES-GCM-uppsättning och satte ssl_prefer_server_ciphers off.
-
Uppdaterade URL-urvalet för scraper så att always=0 nu är agent-specifikt i stället för globalt styrt av urls.lastscrape.
-
Varje scraper-agent (agent_id) får nu per-URL-spårning: när agenten senast såg en URL och när den får hämta den nästa gång.
-
Intervallkontrollen för always=0 använder nu URL:ens readinterval tillsammans med agentens egna seen-state.
-
always=1 returnerar nu alla RSS-URL:er som inte är borttagna/markerade med noscrape (ingen intervallfiltrering).
-
Lade till backend-tabellen rs_agent_url_seen (RSS-DB) för schemaläggning per agent och URL.
Facebook-statistik – Åtgärdstypsfilter för diagram
- Lade till ett Visade åtgärdstyper-multival i filterrutan för Facebook-moderationsdiagrammen.
- Välj en eller flera utfallstyper (Approved, Rejected, Removed, Edited, Added, Blocked, Revoked, Observed) för att begränsa diagrammen till just dessa händelsekategorier.
- Tom markering visar alla typer (befintligt standardbeteende behålls).
- Filtret påverkar alla tre diagrammen (moderationsaktivitet, utfallsfördelning, återkommande kunder).
- Aktiva utfallsfilter visas i filterstatustexten (t.ex. "Types: Approved, Rejected").
- Utfallstypsval bevaras i delade diagram-URL:er.
- Fixade dashboardflödet så val av åtgärdstyper + Apply filters / Show charts stannar i AJAX-flödet (ingen hel sidomladdning).
- Fixade persistens för valda åtgärdstyper så multivallistan inte töms efter uppdatering/diagramrendering.
Publiceringsguider för pre-text (docs/pre-facebook.md, docs/pre-wordpress.md)
- Förtydligade den interna styrningen för pre-texter per publiceringsyta och sajt.
pre-facebook kräver nu uttryckligen kort, enkel och styckebaserad text under rätt rubrik i ## The Content.
pre-wordpress beskriver nu avsedd ton och målgrupp för generic, www.tornevalls.se, developer.tornevall.net och www.tornevall.net.
AGENTS.md pekar nu också ut rätt rubriker och förklarar att Facebook-pretext ska hållas lätt och enkel medan WordPress-pretext får vara längre när det passar.
Publik Feedreader – Språkväljare (/feed)
- Lade till en webbläsarstyrd språkväljare i rubrikkortet Tornevall Networks Feedreader på den publika
/feed-sidan.
- Stödda språk: Engelska (EN), Svenska (SV), Danska (DA), Norska (NO), Finska (FI).
- Språk identifieras automatiskt från webbläsarens
navigator.languages-inställning vid första besöket och sparas sedan i localStorage.
- Flagg+kod-knappar i rubrikkortet låter besökare byta språk när som helst utan sidomladdning.
- Alla viktiga UI-fraser översätts dynamiskt: sidtitel, underrubrik, Ask-AI-panelen (etiketter, platshållare, knappar), kolumnrubriker, kategoriknapparna, analysavsnittet, senaste-frågor-kortet och läs-mer-funktionerna.
- Inbyggda standardfraser finns i
config/feed_phrases.php (redigerbara direkt i koden).
- Administratörer kan åsidosätta enskilda fraser per språk utan driftsättning via den nya Phraseeditor i Feed Admin (
/rss-admin → 🌐 Public feed phrase editor).
RSS inbound-köstädning (/api/rss/update)
- Uppdaterade inbound-underhållet så rader med
handled=1 nu rensas bort så fort de är upplåsta (processlock=0) vid update-körningar.
- Tog bort tidigare retention på ett dygn för hanterade inbound-rader för att hålla
inbound-tabellen lättare vid kontinuerlig feedtrafik.
- Förtydligade låssäkert beteende: aktiva/låsta rader (
processlock=1) rensas inte.
- Lade till en konfigurerbar tidsgräns för att släppa fastnade inbound-lås (
processlock=1) i RSS-admin (/feed-admin, alias /rss-admin) via inställningsnyckeln feed_admin.inbound.processlock_release_minutes.
- Standardvärdet är nu 30 minuter (begränsat till
5..720 minuter) och används för både hanterade och ohanterade fastnade inbound-lås.
- Frisläppning av fastnade lås utgår nu från lås-ålder (när raden faktiskt låstes) i stället för enbart radens registreringstid, vilket minskar risken att äldre men aktivt bearbetade rader låses upp för tidigt.
- Låsflödet rensar nu lås-tidsstämpel konsekvent när rader markeras hanterade/upplåsta inför städning.
Publik Feedreader – kategorikort på /feed
- Den publika feedlistan är nu omstrukturerad till tydligare kort per kategori så varje kategori blir visuellt avgränsad och enklare att skanna.
- Behöll befintligt beteende för expand/collapse av kategorier samt interaktiva funktioner (prenumerationer, variantval för analyser, read-more och AJAX-flöden).
- Samma feedrader och analysdata visas som tidigare, men med tydligare hierarki och bättre läsbarhet i gränssnittet.
- Kategorisektioner är nu imploderade som standard och använder accordion-beteende (öppnar du en kategori imploderas övriga) för en renare vy.
- Kategorikort öppnas/stängs nu via klick på rubrikraden eller pilen (även tangentbordsstöd), i stället för separat Show details-knapp.
- Knappar i kategorirubriken har fått en enhetlig storlek/stil för jämnare layout.
Feedfrågor – standardmodell och resonemang (/feed)
- Standardmodell för feedfrågor är nu
gpt-5.4.
- Feedfrågor skickar nu
reasoning_effort=medium för modeller som stödjer resonemang (gpt-5*, o1*, o3*, o4*).
- Höjde maxnivån för output-tokens i feedfrågesvar för bättre stöd vid mer resonemangsintensiva svar.
RSS update-trigger – valfritt urlid-filter (/api/rss/update)
- Lade till valbar query-parameter
urlid på GET /api/rss/update för riktad hantering av inbound-rader för ett specifikt feed-id.
- När
urlid inte anges kör inbound-konverteringen nu en rättvis round-robin-ordning per urlid, så en problematisk feed inte lika lätt blockerar övriga i samma körning.
- Svaret innehåller nu
urlid_filter för tydlighet när riktad körning används.
2026-03-28
RSS-editorn – förbättrad auto-detect, AI-fallback och Blogspot-stöd
- WordPress-prioritering: "🤖 Auto"-knappen i
/rss-editorn testar nu WordPress REST API (/wp-json/wp/v2/posts?per_page=100) först av alla metoder. Om sidan svarar med giltiga WP-JSON-poster sätts real_url till REST-API-adressen med ?per_page=100 (ger fler poster än RSS-feeden) och sitetype till wp. Faller igenom till vanlig RSS-detektering om wp-json är avstängt.
<link rel="alternate">-extraktion från HTML: Om WordPress REST API inte finns, hämtas sidans HTML och alla <link rel="alternate" type="application/rss+xml|atom+xml">-taggar parsas för att hitta den kanoniska feed-URL:en som webbplatsen deklarerar.
- Blogspot/Blogger-detektering: Webbplatser på
*.blogspot.* flaggas nu i auto-detect-svaret och en varning visas i editorns statusrad om att Blogspot RSS är minimal och att full HTML-scrape kan tillkomma i framtiden.
- OpenAI AI-fallback: Om alla strukturella metoder misslyckas anropas OpenAI (
gpt-4o-mini via konfigurerad OpenAI-leverantör) med en avskalad ögonblicksbild av sidans innehåll och AI:n ombeds föreslå en feed-URL. Resultatet visas med tydlig "🤖 AI-föreslagen URL – verifiera"-märkning. Hoppas tyst om OpenAI inte är konfigurerat.
- Bloggers standard-Atom-feed (
/feeds/posts/default) tillagd i listan med vanliga feed-URL-mönster.
- Statusraden berikad: Auto-detect-statusen skiljer nu på AI-föreslagen, Blogspot, helautomatisk och fallback-utgång med färgkodade meddelanden och ett valfritt detaljtips.
Tabell för extrainnehåll i RSS-databasen (extra_content)
- Ny tabell
extra_content i RSS-databasen (migration 2026_03_28_100000_create_rss_extra_content_table).
- Syfte: lagra extra skrapad data för feeds med minimalt RSS-utfall (t.ex. Blogspot) – HTML-ögonblicksbilder (
html_blob) och skärmdumpsreferenser (filepath).
- Kolumner:
urlid, contentid, link, content_hash, scrape_type, filepath, html_blob, scraped_at.
- Ingen skraper skriver till tabellen ännu; schemat är förberett för framtida extra-scrape-flöden.
Feedfrågor: period och fokus (/feed)
- Lade till en valbar Question period per fråga på
/feed (daily, weekly, monthly, yearly) så varje fråga kan styra tidsfönstret utan att globala admininställningar ändras.
- Uppdaterade kontextbyggnaden för feedfrågor så att bredare perioder använder ett större kontextunderlag.
- Lade till daglig cache-återanvändning för årlig kontext (
yearly) för att minska tunga upprepade kontextbyggen under samma dygn.
- Uppdaterade publika listan Focus sites (optional) så att hidden feeds inte visas i valen.
- Uppdaterade standardbeteendet så att om inga fokusval görs kan frågekontexten läsa alla icke-borttagna feeds (inklusive hidden) för bredare analys, samtidigt som länkar/nycklar till hidden feeds fortsatt inte exponeras i kontexttexten.
RSS-scraper och ingestdiagnostik (/api/rss/data)
- Uppdaterade scraperns körloggar så att de visar feedtitel tillsammans med
urlid och URL under batchkörning.
- Uppdaterade svaret från
POST /api/rss/data så att varje post i received nu även innehåller feedens title (urls.title).
- Förbättrade diagnostik för RSS/Atom-konvertering med tydlig sammanfattningslogg per inbound-rad (
candidates, converted och skip-räknare) för enklare felsökning när 0 poster importeras.
- Lade till fallback för länkextraktion i Atom/RSS samt normalisering av Google Alerts-redirectlänkar (
https://www.google.com/url?...) så mållänken bevaras bättre vid import.
2026-03-27
Min profil (självservice för kontoinställningar)
- Lade till en ny inloggningsskyddad sida My Profile på
/users/profile där användare kan uppdatera sitt eget namn och e-post.
- Lade till valfri hantering av lösenord (sätta/byta) på samma sida; nuvarande lösenord krävs vid känsliga ändringar när lösenord redan finns.
- Flyttade koppling/avkoppling av Google-konto från Mina API-nycklar till My Profile så att inloggningsinställningar finns samlat.
- Lade till en ny My Profile-länk i navbaren för inloggade användare.
- Justerade navbarens spacing/wrapping så att den nya länken får plats utan overflow på mindre bredder.
Stabilitetsfixar (RSS + MCU-sidor)
- Fixade location-visning på adminsidans
/online så att spårade request-URI:er nu matchas mer robust mot aktiva sessioner. Skrivning till page visits tål nu delvis migrerade valfria kolumner bättre, och matchningen har säkrare fallback för user/session/user-agent.
/online är nu åter publik som en enkel översiktssida utan IP-adresser eller interna request-URI/location-detaljer. Den detaljerade location-vyn ligger kvar på den skyddade admin-routen.
- Tog bort avvecklade kontroller för
protected/useProtected i RSS-editorns tabell på /rss så att synlighetshantering nu fokuserar på is_hidden och public_hash.
- Ändrade åtkomstbeteendet för RSS-admin så att användare utan RSS-adminbehörighet skickas vidare till
/feed när de besöker /rss, /feed-admin eller /rss-maintenance-admin, istället för inloggning/403-sidor.
- Lade till migrationen
2026_03_27_230000_drop_protected_columns_from_rss_urls.php för att avveckla urls.protected och urls.useProtected i RSS-databasschemat.
- Uppdaterade inline-fältet
is_hidden i RSS-editorn på /rss från fritextfält till checkbox, där AJAX-spar nu skickar explicita 1/0-värden.
- RSS Analytics Scheduler i
/admin/jobs är nu redigerbar (enabled + run_at per period) och har en manuell knapp för "Run Scheduler Check Now".
- Lade till strikt scheduler-fönsterkontroll i
rss:generate-analytics: direkta cron-körningar respekterar nu periodernas enabled + run_at, skippar före tidslot och skippar redan körd periodnyckel; manuell override finns via --ignore-scheduler-window.
- Uppdaterade
/mcu-webbrouten så den nu skickar vidare till den controller-drivna MCU-editorrouten (mcu.index) istället för att rendera editorn utan nödvändiga view-data (vilket gav odefinierade variabler som $perPage).
Google OAuth-inloggning / registrering
- Användare kan nu logga in eller registrera sig med sitt Google-konto direkt från inloggnings- och registreringssidorna.
- Nya användare som registrerar sig via Google är automatiskt e-postverifierade; inget verifieringsmejl skickas.
- Kontolänkning / synk: om du loggar in med Google och din e-postadress redan finns i systemet kopplas Google-kontot automatiskt till ditt befintliga konto vid första Google-inloggningen.
- Redan inloggade användare kan koppla sitt Google-konto från sidan Mina API-nycklar (
/keys/mine) → avsnittet "Google Account".
- Länkade konton kan logga in med antingen Google eller e-post/lösenord.
- Avlänkning sker från samma sida; kräver att ett lösenord är satt.
- En enda redirect-URI (
/auth/google/callback) hanterar både inloggning och länkningsflödet.
- Konfiguration: lägg till
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET och GOOGLE_REDIRECT_URI i .env (se .env.example).
Besöksstatistik – exkludering av RSS-scrapern
- API Requests Trend-grafen och den totala API-räknaren på
/admin/visit-stats exkluderar nu RSS-scraper/cron-anrop som standard.
- Exkluderade sökvägar:
/api/rss/data, /api/rss/urls, /api/rss/update, /api/rss/feed/analytics-*, /api/rss/analytics/run.
- En växlingsknapp ("🤖 Scrapers: excluded / included") visas intill datumväljaren för att byta läge.
- Grafens rubrik och sammanfattningskortet speglar aktuellt filterläge.
MCU Timeline – info- och supportlänkar
- Lade till länk "More info & live API" till
tools.tornevall.net och "GitHub / Support" till https://github.com/Tornevall/mcu-timeline-api högst upp på MCU Timeline-editorsidan.
DNS Editor / DNS API cache-prestanda
- Byggde om DNS-zoncachen från en serialiserad bulkblob per zon till radvis cachelagring (
dns_zone_cache_records) för snabbare paginerad läsning även för mycket stora AXFR-zoner.
- Lade till extra IP-index-tabell (
dns_zone_cache_ip_extras) som fylls med både vanliga A/AAAA-IP och rättvända IP från reverse-owner (DNSBL/OPM), som grund för CIDR-sökningar/rensningar.
- Ändrade mutationsflödet för
POST /api/dns/records/add|delete|update|bulk så att cachen synkas radvis efter bekräftad lyckad uppdatering mot master DNS, istället för att hela zoncachen rensas.
- Lade till zonvisa invalidate-inställningar i
dns_zone_settings:
cache_invalidate_enabled (default false)
cache_invalidate_interval_seconds (default 259200, dvs var tredje dag när aktiverad)
last_invalidated_at
- Lade till schemalagt kommando
dns:cache:invalidate (timvis scheduler-hook) som endast invaliderar zoner där policyn är aktiverad och due.
- Zoninställningarna i DNS-admin visar nu invalidate-policy per zon (
enabled + intervall), och editorns manuella Clear cache-åtgärd är avstängd tills policyn uttryckligen aktiveras för zonen.
2026-03-26
Tidsstyrning för RSS Analytics-scheduler
- Skärpte den inbyggda analytics-schedulern så att en period endast körs på sin konfigurerade tid eller så snart som möjligt efter den tiden om körningen missats.
- First-run körs inte längre direkt på godtyckliga klockslag utan väntar tills periodens konfigurerade körslot faktiskt är due.
- Lade till ett statiskt scheduler-kort på
/admin/jobs som visar periodvis analytics-konfiguration (enabled, run_at) och senaste scheduler-status (last_run_at, status, key/reason), så att driftläget syns direkt utan att man behöver gå till Feed Admin först.
- Uppdaterade
tornevall-tools-cron så att php artisan schedule:run körs varje minut, vilket gör att analytics-schedulerns konfigurerade tider faktiskt efterlevs.
Publik landningssida (/)
- Utökade den inloggade "Your available tools"-ytan med betydligt fler behörighetsstyrda genvägar (RSS, DNS, jobb/admin, säkerhet, meddelanden, integrationer och användarverktyg).
Onlinesessioner (/online adminvy)
- Adminvyn för online-sessioner visar nu besökarens senast spårade location (request URI) när den finns tillgänglig.
- Lade till en kort backtrack-lista med de senaste sökvägarna så att admin kan se var besökaren nyss har rört sig i systemet.
- Besöksspårningen sparar nu autentiserad
user_id konsekvent och kan även spara Laravel-session_id för mer träffsäker koppling mellan session och location.
2026-03-25
Feed User Questions (/feed + /feed/user-questions)
- Fix för gäst-captcha: Fixade gästinlämningar på
/feed så att frågeformuläret nu återanvänder den delade globala Turnstile-nyckeln när den äldre feed-specifika provider-nyckeln saknas. Sidan blockerar nu också submit tills en captcha-token finns och visar ett tydligare tillfälligt otillgängligt-meddelande i stället för att misslyckas tyst när captcha-nycklar inte är korrekt konfigurerade.
- Fokus-väljare per fråga: När man ställer en fråga på
/feed kan användaren nu valfritt fokusera AI:ns analys på specifika kategorier eller webbplatser med två nya flervalslistrutor:
- Fokus på kategorier (valfritt): Välj en eller flera kategorier för att begränsa kontextutdraget (hjälper till att deprioritera mindre intressanta feeds som allmänna nyheter).
- Fokus på webbplatser (valfritt): Välj en eller flera feeds för att fokusera på specifika källor.
- Om båda lämnas tomma används alla synliga feeds (standardbeteende). Om båda är valda använder AI antingen match ("eller"-logik).
- Dessa val åsidosätter de globala admin-inställningarna för just den enskilda frågan och sparas i fråghistoriken för granskning/uppspelning.
- Skärpt fokussemanik för frågor: När
focus_site_ids[] väljs för en fråga på /feed prioriteras webbplatsurvalet över kategorifilter för just den frågan. Detta håller query/context strikt kopplat till vald sajt och minskar onödigt stor prompt.
RSS Analytics CLI / Scheduler
--force tvingar nu faktiskt overwrite: php artisan rss:generate-analytics hoppar nu över oförändrade bucket+variant-signaturer som standard och återanvänder den cachade raden i stället för att lägga extra AI-anrop på identiska snapshots.
- Lade till
--overwrite-current som tydligare alias till --force när operatören uttryckligen vill köra om och skriva över den aktuella bucketraden.
- Admin-konfigurerbar schedulerstyrning:
/feed-admin innehåller nu per-periodkontroller (daily/weekly/monthly/yearly) med aktivera/inaktivera och körtidsfält. Ett minutbaserat schedulerkommando (rss:run-scheduled-analytics) hanterar nu due/catch-up från cron.
- Robust catch-up + first-run-beteende: Om en period saknar tidigare timestamp (aldrig körd) körs den direkt en gång. Om en konfigurerad körningstid missats körs den så snart som möjligt efteråt.
- Automatisk körningsidentitet + overwrite-semantik: Scheduler-triggade körningar använder en dedikerad auto-varianttitel (
[AUTO] Scheduled analytics) och skriver alltid över den aktuella automatiska bucket-varianten på plats.
- Tidsstämplad analytics-logg:
rss:generate-analytics prefixar nu utdata med datum/tid, vilket gör rss-analytics.log tydligare för revision per generering.
Publik landningssida / Tjänster (/ och /services)
- Förenade upptäcktsvyerna så att både
/ och /services nu renderar samma landningsvy.
- Tog bort den separata inloggade "admin-kortväggen" från landningssidan för att hålla startsidan fokuserad på publika tjänster.
- Behåller nu en enda underhållen kortlayout för publika tjänster istället för dubla vyer.
- Förenklade navbar-länkar för Home/Services till vanliga rutlänkar (ingen startsides-specifik JavaScript-gren).
2026-03-24
Mensövervakning (/menstrual-tracking)
- Lade till ett nytt verktyg for inloggade anvandare for mens- och cykelovervakning med enkelt webbgranssnitt.
- Anvandaren kan spara profilens basdata (
birth_date, first_period_started_on) och registrera cykelstarter med exakt datum eller pa manadsniva.
- Verktyget visar nu en enkel cykeloversikt: genomsnittlig cykellangd, senaste start, uppskattad nasta start och aktuell cykeldag.
- Lade till paginerad historik med mojlighet att ta bort enskilda cykelrader.
- Lade till upptackbarhet via
/, /services, dashboard-kort och navbar.
- Lade till EN/SV anvandardokumentation:
/docs/en/menstrual-tracking och /docs/sv/menstrual-tracking.
Cron / Runtime-stabilitet
- Lade till valbar runtime-flagga
PHP_SUPPRESS_DEPRECATIONS i bootstrap for att tysta brusiga PHP-deprecation-notiser (E_DEPRECATED, E_USER_DEPRECATED) pa PHP 8.4+ vid korning av aldre vendor-stack.
- Lade till dokumentation for flaggan i
.env.example.
- Lade till felsokningsavsnitt i
docs/cron.md for deprecation-varningar i cron-output.
RSS scraper-URL-claiming (GET /api/rss/urls)
- Hardade samtidig scraper-claiming for att minska
SQLSTATE[40001] deadlocks vid uppdatering av urls.lastscrape.
getUrls() claimar nu rader i en och samma transaktion med lockForUpdate() och uppdaterar lastscrape/lastrequestfrom i samma transaktion.
- Lade till starkare deadlock-retry for denna kodvag (5 forsok) for battre robusthet vid scraper-toppar.
2026-03-23
RSS-prenumerationer (/feed/subscriptions) — Striktare dubblettfiltrering
- Förhindrar återleverans av cyklande versioner: Prenumerationsnotifieraren spårar nu varje
content_hash som någonsin levererats för varje länk inom en prenumeration. Om en ny importrad har samma hash som en tidigare rapporterad version av den länken (även om den fått ett nytt contentid p.g.a. cyklande innehåll — A→B→A) hoppas den tyst över och rapporteras inte igen. Detta förhindrar notifikationsspam från feeds som upprepat publicerar mindre eller nästan identiska variationer.
RSS-import — Global versionsdubblettfiltrering
- Cycle-safe global hashkontroll i importen: Importens dubblettskydd (
canQuery) kontrollerar nu även om den nya postens content_hash eller meaningful_hash redan existerar i någon tidigare rad för den länken — inte bara den senaste raden. Det täpper till A→B→A-cykelhålet där version A infogades igen i content-tabellen trots att den redan fanns i äldre historik. Både content_hash och meaningful_hash kontrolleras globalt via indexerade EXISTS-frågor, vilket förhindrar okontrollerad versionstillväxt från feeds med cyklande eller nästan identiskt innehåll.
Disney / BAMGRID-scraper (projects/scraper/ondisney.php)
original_url-fallback sätts alltid: Disney-sitemapURLer har alltid ett lokaltprefix (t.ex. en-be, nl-nl). Scrapern satte tidigare bara original_url i det sällsynta fallet att en URL saknade lokaltprefix, vilket innebar att de flesta poster aldrig fick original_url inställt och tyst förkastades av importmotorn. Nu faller scrapern tillbaka på en föredragen engelsk lokal (en-us → en-gb → en-ca → första en-* → första tillgängliga) och sätter alltid original_url (och original_title om det saknas) på varje post. Befintlig elements-JSON i databasen för site 8 är oförändrad; fixen ligger i scraperoutputen.
Utveckling & Dokumentation
- RSS
elements-format fullt dokumenterat: Lade till en komplett referens i de interna BAMGRID-anteckningarna (docs/en/bamgrid-sitemap-extraction-notes.md, docs/sv/bamgrid-sitemap-extraction-notes.md) som förklarar båda elements-JSON-formaten:
- Format A (
begin/table): JSON-traversering — begin navigerar från roten till postlistan; table mappar content-kolumner till källnycklar (sträng = direktnyckel, array = nästlad traversering).
- Format B (XPath-pipeline): 4-elements array — rad-selector-XPath, per-fält delselectorer, värdetyplista, transformtabell. Används för rå HTML/XML-feeds.
- Inkluderar korrekt
elements-DB-JSON för Disney/BAMGRID site 8 med fältmappningstabell och förklaring av varför alla lokaler måste beaktas.
RSS Underhållsadmin (/rss-maintenance-admin)
- "Markera som försiktig"-flagga: Varje misstänkt länkrad har nu en ⚠ Markera som försiktig-knapp. Att markera en länk skapar en permanent flagga (
rss_cautious_links) och gör att framtida importerade inlägg för den länken automatiskt körs igenom dedup/rensningspasset efter varje ny infogning — bara distinkta meningsfulla versioner behålls.
- Ta bort försiktig-flagga: En ✓ Unmark cautious-knapp visas på redan flaggade rader för att ta bort flaggan.
- Visuell indikator: Försiktiga rader markeras i tabellen och visar ett märke bredvid länken.
- AJAX-först i adminvyn: Filteruppdatering, dry-run purge, purge now, mark cautious och unmark cautious körs nu asynkront i
/rss-maintenance-admin (med fallback till vanliga formulärpostningar om JavaScript saknas).
- Fix för mark-cautious-bugg:
POST /rss-maintenance-admin/mark-cautious hanterar nu uteblivet reason säkert (ingen mer Undefined array key "reason" när fältet inte skickas).
RSS-inläggsvy (/feed/entry/{contentId})
- Adminåtgärder: Administratörer (användare med
permission:rss) ser nu ett Admin actions-block längst ner på varje inläggspermalänkssida med:
- ⚠ Markera som försiktig — flagga inläggets länk så att framtida importer automatiskt rensar brus-dubbletter.
- ✓ Ta bort en försiktig-flagga — ta bort en befintlig försiktig-flagga.
- 🗑 Rensa brus-dubbletter — rensa redundanta versioner av just det här inlägget direkt, och behåll den nyaste raden per distinkt meningsfull hash. Inget mer manuellt MySQL-arbete.
RSS-prenumerationer (/feed/subscriptions)
- Fixat: spara med alla kanaler avbockade fungerar nu — tidigare orsakade det ett valideringsfel att bocka av alla kanaler (E-post, Slack, Discord) och formuläret kunde inte sparas. Nu tillåts att spara med noll kanaler och inaktiverar all notifiering för den prenumerationen.
- Autosave för kanaler (AJAX-first) — kanal-checkboxar sparas nu direkt, webhook-/textfält sparas på blur, och kanalchips/status uppdateras inline utan att man behöver manuellt "Save channel settings" varje gång.
- Tom kanallista sparas korrekt — explicit
channels_json=[] ligger kvar som "alla kanaler avstängda" i stället för att UI återgår till Email (mail).
Feed Admin (/feed-admin)
- Kolumnsynlighet för publikt flöde flyttad till feed-admin: Inställningen "Public column visibility" finns nu under
/feed-admin i stället för att vara inbakad på den publika /feed-sidan. All RSS-konfiguration för admins samlas nu på ett och samma ställe. Kolumnlayouten på publika flödessidan fungerar precis som tidigare.
- Segmentspecifika ankardatum i genereringskorten: Kategori- och site-kort för generering har nu valfria ankardatum per segment. Prioritet vid körning är nu
segment anchor -> global anchor -> dagens datum, så historiska körningar blir tydliga per kort.
RSS-redigeraren (/rss)
- XPath-only visning av
elements: Den stora elements-editorn visas nu bara för rader där sitetype är xpath, vilket minskar tabellens bredd för vanliga RSS/WP-rader.
- Kollapsbar
elements-editor: XPath-regler redigeras nu i en expanderbar/kollapsbar panel per rad så huvudlistan blir mer kompakt.
elements sparas på blur (AJAX): Ändringar i elements-textarea sparas nu när fältet tappar fokus; övriga inline-fält fortsätter spara direkt via AJAX vid ändring.
RSS Feed Analytics
- Ankardatum-kalender för generering: Kategori-/site-generering i
/feed-admin har nu ett fält för Anchor date. Admin kan generera daily/weekly/monthly/yearly för äldre perioder (t.ex. förra veckan) om ett cronjobb missats.
- Uppdaterad genereringspayload (webb-UI): Feed-admin skickar nu valfritt
anchor_date (YYYY-MM-DD) för att rikta historiska period-buckets vid create/replace av cachade analysvarianter.
- Schemalagd körning justerad till 20:00 dagligen:
app/Console/Kernel.php schemalägger nu rss:generate-analytics --period=daily en gång per dag klockan 20:00. Weekly/monthly/yearly finns kvar för manuell CLI/API-körning.
- Tydliggjort overwrite-beteende: Om samma variant körs igen i samma period-bucket uppdateras/skrivs samma rad över (ingen extra dubblett för samma variant+bucket).
- Fixad replace-UI för alla perioder:
/feed-admin visar nu cachade daily-varianter tillsammans med weekly/monthly/yearly, och regenerate/replace uppdaterar sidan efter sparning så överskrivna kategori-/sitevarianter syns direkt.
Utveckling & Dokumentation
- BAMGRID sitemap-uttag (internt): Lade till intern dokumentation i
docs/en/bamgrid-sitemap-extraction-notes.md och docs/sv/bamgrid-sitemap-extraction-notes.md med verifierad Disney-sitemapstruktur, namespace-säkra XPath-kandidater (url/loc/lastmod/xhtml:link), uppmätt språk-täckning (en-*-only skulle tappa ~37.1% av unika ID:n), samt rekommenderad väg mot en dedikerad bamgrid-importtyp med canonicaliserad output per content-id.
- Hårdare xpath/json-regler i RSS-redigeraren:
/rss visar nu explicit xpath/json i Add URL-flödet, stödjer inline-redigering av elements-JSON när kolumnen finns, validerar elements server-side och kräver elements när sitetype=xpath.
Publik feed-UX
- AJAX-submit för feedfrågor: Kortet Ask about all open feeds på
/feed skickar nu frågor inline med JSON-svar och visar status/svar direkt på sidan (ingen full omladdning). Fallback utan JavaScript finns kvar.
- Uppgraderad frågekontext + profil-fallback: Feed-Q&A bygger nu promptunderlag med analyslik sammanställning från lagrat
rss.content för alla icke-dolda feeds (kategorier, källor, domäner, termer, exempelposter). Lade även till fallback för promptprofil så saknad profil inte längre stoppar körningen med "No prompt profile configured".
- Konfigurerbart scope för feedfrågor: Admin kan nu begränsa frågeunderlaget på
/feed via period, tillåtna kategorier, tillåtna site-id:n, context-cap för antal poster, max antal meningar i svaret och storlek på mini-historiken. Själva /feed-kortet visar också senaste färdiga frågor inline.
- Paginering på frågehistorik:
/feed/user-questions har nu praktisk paginering med valbart antal rader per sida för att hantera stora/spammiga historiklistor.
- AJAX-delete av frågerader (admin): Admin kan nu ta bort frågerader inline på
/feed/user-questions via AJAX (DELETE /feed/user-questions/{question}), med fortsatt redirect-fallback utan JavaScript.
- Inställningar för svarmodell + tonalitet: Feed-frågornas admininställningar innehåller nu val av svarsmodell och tonalitet (finns både på
/feed/user-questions och i motsvarande block på /feed-admin), och dessa används vid OpenAI-svarsgenerering.
- Adminfilter på frågehistorik:
/feed/user-questions kan nu filtrera på status, user_id (eller guest), ip och deleted-scope (active/deleted/all) för snabbare moderering av brusig historik.
- Bulk-delete med valbar mode: Admin kan nu ta bort markerade frågerader i bulk (
POST /feed/user-questions/bulk-delete) och välja hard (permanent) eller soft delete.
- Soft-delete-lagring för frågor:
feed_user_questions lagrar nu modereringsmetadata för soft-deletade rader (deleted_at, deleted_by_user_id, deleted_reason) samtidigt som hard delete finns kvar för irreversibel städning.
- Restore/undo för soft-deletade frågor: Admin kan nu återställa soft-deletade rader från
/feed/user-questions (POST /feed/user-questions/{question}/restore), inklusive AJAX-restore inline i historikvyn.
Feed-användarfrågor (/feed mini-kort + /feed/user-questions)
- "Läs mer"-knapp för långa svar: De senaste frågorna på
/feed-sidan visar nu en förkortat förhandsvisning (280 tecken) av varje svar. Om ett svar är längre visas en läs mer / läs mindre-knapp som gör att du kan expandera inuti sidan utan att navigera.
- Anpassad AI-svartom (valfritt): Inställningssidan för matfrågor tillåter nu att ton lämnas tomt (inte längre obligatoriskt). En tom ton faller tillbaka till standardneutrala instruktionen när frågorna besvaras. Administratörer kan fortfarande välja: Neutral, Analytisk, Kort, Vänlig eller Kritisk från rullemenyn.
- Fler AI-modeller tillgängliga: Svarmodellväljarenär nu en rullmeny i stället för ett fritextfält, med alternativ:
- gpt-4o-mini (standard, snabb)
- gpt-4o (general purpose)
- o1-mini (resonemang)
- o1 (avancerat resonemang)
- o3-mini (utökat resonemang)
- Resonemangsmodeller (o1/o3) faller automatiskt tillbaka till gpt-4o-mini om modellen inte är tillgänglig eller misslyckas, för att säkerställa en graciös återställning utan användarfel.
Utveckling & Dokumentation
- AGENTS.md: Förtydligade kritiska sessionsriktlinjer för AI-agenter som arbetar på kodbasen
- Betona att AGENTS.md måste läsas vid början av VARJE session, inte bara en gång per workspace-initialisering
- Lade till explicita WSL-sökväg-handlingsregler: Windows-sökvägar (
K:\Apps\...) är förbjudna i terminalkommandon; måste använda WSL-sökvägar (/mnt/k/Apps/...)
- Förstärkte terminal-sessionsrenningskrav: alla terminalkommandokörningar måste avslutas med
exit för att korrekt stänga WSL-sessioner och förhindra tillståndsläckage
2026-03-19
RSS Feed Analytics
- Lade till rikare RSS-kategorianalyser i
/feed, /rss och /feed-admin
- Feed-admin kan nu autogenerera saknade instruktioner/beskrivning för kategori från aktuellt flödesinnehåll via AJAX (English-first)
- Tittelhanteringen i feed-admin är nu dynamisk: föreslagen analystitel byggs från aktuella instruktioner/beskrivning i realtid när titel saknas
- Långa publika analyser kan nu expanderas med Read more / Show less
- Analytics-kort är visuellt separerade per period
- Markdown i analyser renderas som läsbar HTML
- Vecko-, månads- och årsanalyser stöds
- Manuell återgenerering uppdaterar nu samma periodpost i stället för att skapa dubletter
- Lade till valfri analyst guidance före generering (
watch_for)
- Lade till kategorispecifikt fokus som kan kombineras med globalt fokus
- Lade till stöd för namngivna analysvarianter med olika språk, ton och syfte
- Publika
/feed kan visa olika sparade analysvarianter via titel-/språkval
- Analyssektionerna i publika
/feed är stängda som standard och expanderas per kategori
- RSS-admin kan nu radera cachade kategori-analyser direkt på
/feed via AJAX
- Analys-prompten innehåller nu exempel-länkar och tydligare aktivitetssignaler
- Lade till ett andra analysverktyg för site-nivå (per skribent/nyhetssajt)
Feedvisning
- Publika
/feed sorteras nu i kategoriordning
First Discovery och Last Discovery visas för feeds
- Legacy-filter för protected feeds är avvecklat; feeds behandlas nu som publika som standard
- Scraper Agent Activity exkluderar nu gamla agenter från total/lista och kan rensa gamla rader
- Agent-alias kan hanteras av admin via AJAX och visas publikt med alias fallback till name
Dokumentation
- Standardiserade publika dokumentationsslugs mellan engelska och svenska
- Lade till saknade publika sidor för paritet mellan
docs/en och docs/sv
- Fokuserade dokumentationen på API-användning och UI-flöden i stället för interna implementeringsdetaljer
- Uppdaterade changeloggen till aktuell release
2026-03-16
Social Media Tools
- Förbättrade extension-inställningar för snabbare autosave och renare setup
- Förfinade SoundCloud-flöden och release notes-kontinuitet
2026-03-02
IRC Log Rollback
- Fixade åtkomsthanteringen för rollback-funktioner så att behöriga användare kommer in korrekt
- Förbättrade felmeddelanden kring rollback-flöden
2026-03-01
IRC Log Management
- Lade till rollback-stöd för importmisstag
- Förbättrade importgranskning och formatval
- Gjorde rollback-flöden tydligare och säkrare för administratörer
2026-02-13
DNS API och åtkomst
- Lade till DNS-zondiscovery och verktyg för zonvisning
- Förbättrade API-nyckelautentisering och åtkomstkontroll
- Lade till IP-baserad allowlist för utvalda endpoints
- Utökade adminverktyg för nyckelhantering och DNS-åtkomst
OpenAI och plattforms-UX
- Förbättrade OpenAI-testning och modellval i admin-UI:t
- Gjorde dashboard och services tydligare så verktyg är lättare att hitta
- Lade till registreringsspårning och mer flexibel lokal SSL-hantering för utvecklingsmiljöer
2026-02-11
Säkerhet och administration
- Lade till Turnstile CAPTCHA i autentiseringsflöden
- Förbättrade adminvarningar och hantering av access bans
- Förbättrade skärmar för användarhantering och API-nycklar
- Fortsatta förbättringar i OpenAI-admin-UI:t
2026-02-10
Dashboard och editors
- Förbättrade dashboard/service-navigering och generell admin-konsistens
- Utökade MCU-editorflöden och editor-användbarhet
- Förbättrade mörkt läge och formulärläsbarhet
- Förfinade RSS-listning och generell navigering
2026-02-09
Behörigheter och dokumentation
- Införde behörighetsbaserad åtkomstkontroll i skyddade verktyg
- Standardiserade navigation och layout över plattformen
- Lade till markdown-baserad dokumentation med stöd för engelska och svenska
2026-02-08
RSS Watch
- Utökade den publika RSS-feedvisaren
- Lade till historikmedveten feedvisning och upptäckte redigerade inlägg
- Förbättrade feedbläddring, utgående länkar och flexibel API-utmatning
Tidigare grundarbete
Tidigare releaser etablerade plattformens grund för:
- RSS-aggregering och feedleverans
- MCU timeline-visning
- autentisering, sessioner och åtkomstkontroll
- stöd för flera databaskopplingar mellan tjänster
- markdown-dokumentation och publicerade API-guider
Underhålls av: Tornevall Networks
Senast uppdaterad: 2026-04-18