UNFDd-Q@geopod-ismtpd-0> Subject: The Woman Dating Twins Reply-To: VICE Feedback-ID: =?us-ascii?Q?e0ed2346-9f68-4970-8cb6-cd85aa90e466=3Anewsletter=3Ad4440be6-495e-?= =?us-ascii?Q?47bb-bf01-532601ab1021=3Aad412c4590bef55?= List-Unsubscribe: =?us-ascii?Q?=3Cmailto=3Ad4440be6-495e-47bb-bf01-532601ab1021+240a24fb-cbab-42b?= =?us-ascii?Q?8-889f-25080a54d4a8+e0ed2346-9f68-4970-?= =?us-ascii?Q?8cb6-cd85aa90e466=40unsub=2Ebeehiiv=2Ecom=3E=2C?= =?us-ascii?Q?_=3Chttps=3A=2F=2Fvicenewsletter=2Ebeehiiv=2Ecom=2Funsubscribe=2FeyJ0eXAiOiJKV1?= =?us-ascii?Q?QiLCJhbGciOiJIUzI1NiJ9=2EeyJzdWJzY3JpYmVy?= =?us-ascii?Q?X2lkIjoiMjQwYTI0ZmItY2JhYi00MmI4LTg4OWY?= =?us-ascii?Q?tMjUwODBhNTRkNGE4IiwicG9zdF9pZCI6ImUwZW?= =?us-ascii?Q?QyMzQ2LTlmNjgtNDk3MC04Y2I2LWNkODVhYTkwZ?= =?us-ascii?Q?TQ2NiIsImxhc3RfcmVzb3VyY2VfZ3VpZCI6IlBv?= =?us-ascii?Q?c3Q6ZTBlZDIzNDYtOWY2OC00OTcwLThjYjYtY2Q?= =?us-ascii?Q?4NWFhOTBlNDY2In0=2Em80RTRmQ8u=5FLksKQca2LgU?= =?us-ascii?Q?hePkrJCXZDpzmNvw3CcTE=3E?= List-Unsubscribe-Post: List-Unsubscribe=One-Click sId: d4440be6-495e-47bb-bf01-532601ab1021 x-beehiiv-ids: =?us-ascii?Q?{=22account=5Fname=22=3A=22https=3A=2F=2Fvicenewsletter=2Ebeehiiv=2Ecom=2F=22=2C=22campaig?= =?us-ascii?Q?n=5Fid=22=3A=22e0ed2346-9f68-4970-8cb6-cd85aa90?= =?us-ascii?Q?e466=22=2C=22category=22=3A=22newsletter=22=2C=22email=5Fge?= =?us-ascii?Q?nerated=5Fat=22=3A1769104893=2C=22user=5Fid=22=3A=22d4440?= =?us-ascii?Q?be6-495e-47bb-bf01-532601ab1021=22}?= x-beehiiv-type: newsletter x-list-id: d4440be6-495e-47bb-bf01-532601ab1021 x-list-owner: x-newsletter: https://vicenewsletter.beehiiv.com/p/the-woman-dating-twins x-newsletter-id: https://vicenewsletter.beehiiv.com/ x-newsletter-signup: https://vicenewsletter.beehiiv.com/subscribe X-SG-EID: =?us-ascii?Q?u001=2E2cOfsjUAtKYODgwhyssu7td4U+Jhr7tqpwSmGFRXLuO32inkdPTWEXQ65?= =?us-ascii?Q?9fU1bnhLVH8hCKo8BlUX0etKzQCZ8msK3j7fyFQ?= =?us-ascii?Q?0rbjm8v2Op4AHhPV5cvetoU85=2FrcTtMhrb3ogI+?= =?us-ascii?Q?+=2FeS+MKKsjyFt8KSW6A7UFfv1L9oRPbjXpxEaNB?= =?us-ascii?Q?s2aJwaHSuUhKNZurJ1WXTcRMnEMDpKX1BaA8hdK?= =?us-ascii?Q?BLptBYp9aMCKX8m=2FlRNmnU=3D?= X-SG-ID: =?us-ascii?Q?u001=2ESdBcvi+Evd=2FbQef8eZF3BpTL9BgbK5wfSJMJGMsmprC4cBUZJCrQVYjCO?= =?us-ascii?Q?0A=2FxUMB8BfE17Jcs0fNN=2FJKhCA6H5cjrCAg7QHr?= =?us-ascii?Q?X1Y6i963MvuzaNYTuszaNV6laDSeb8uancxasJo?= =?us-ascii?Q?rR4Ss0eDpUugbIjYKOa+WCbB1bootScpK8bCMxp?= =?us-ascii?Q?yN=2FgOZtnxXlE14RcwcFedtn8LOYDz7yL6w52RDD?= =?us-ascii?Q?rJtxtFvlAqlSjf+uzLgEKduhrA=2Fu+gJtw2fsjMf?= =?us-ascii?Q?U143VgwR0vwQavyj2h7pjm0nuolVm5UTL5tAy20?= =?us-ascii?Q?BMiD784va3bRBNYZM3AwgsclwBA83BcvAtc=2FvnB?= =?us-ascii?Q?o1A2XIS=2F9de83jM1G5g6JZC2QYhBOF2M=2FRnwVgW?= =?us-ascii?Q?Kd+zBhzyyAfoPlEdGuFTNTK=2FkSr5HQjx9zimBOp?= =?us-ascii?Q?XICIkreP+k0VeycBrdurzPHdZsM9ip3O02zTD+7?= =?us-ascii?Q?GZXkAy0bUCYfJQJB3OnYeZsy+BGFRtGwtAk0Z3E?= =?us-ascii?Q?3sLbI=3D?= To: "hi@josie.lol" X-Entity-ID: u001.NByrdwNjJF8HzJ5pdH9B7g== X-DKIM: signer='newsletter.vice.com' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 1.4 (+) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (1.4 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: beehiiv.com] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [149.72.186.207 listed in list.dnswl.org] 0.0 HTML_IMAGE_RATIO_04 BODY: HTML has a low ratio of text to image area 1.5 HTML_MESSAGE BODY: HTML included in message -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.0 T_KAM_HTML_FONT_INVALID Test for Invalidly Named or Formatted Colors in HTML SpamTally: Final spam score: 14 --e26ecaf002cc18c9072edb91fa97df91f9782c450c5158c7edf002629878 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 ---------- View image: (https://media.beehiiv.com/cdn-cgi/image/fit=3Dscale-down,forma= t=3Dauto,onerror=3Dredirect,quality=3D80/uploads/asset/file/9415471e-e7e4-4= f1d-a7e2-02f0520379fb/vice-banner.png?t=3D1757704107) Follow image link: (https://www.vice.com/) Caption:=20 -------------------- View image: (https://media.beehiiv.com/cdn-cgi/image/fit=3Dscale-down,forma= t=3Dauto,onerror=3Dredirect,quality=3D80/uploads/asset/file/d969507b-f53b-4= 027-8772-fa90c0264313/This-Woman-Is-Dating-Identical-Twin-Brothers.-Yes-Bot= h-of-Them.png?t=3D1769095380) Follow image link: (https://www.vice.com/en/article/this-woman-is-dating-id= entical-twin-brothers-yes-both-of-them/) Caption:=20 # This Woman Is Dating Identical Twin Brothers. Yes, Both of Them. As if dating wasn=E2=80=99t already confusing enough, try adding identical = faces and double the emotional labor to the equation. Read Now (https://www.vice.com/en/article/this-woman-is-dating-identical-tw= in-brothers-yes-both-of-them/) -------------------- View image: (https://media.beehiiv.com/cdn-cgi/image/fit=3Dscale-down,forma= t=3Dauto,onerror=3Dredirect,quality=3D80/uploads/asset/file/d16a67e9-0646-4= 53a-93a0-99c009311c8f/Will-Earth-Really-Lose-Gravity-in-2026.jpg?t=3D176909= 5961) Follow image link: (https://www.vice.com/en/article/will-earth-really-lose-= gravity-in-2026/) Caption:=20 # Will Earth Really Lose Gravity in 2026? People are now believing that the earth will allegedly =E2=80=9Close gravit= y=E2=80=9D for seven seconds on August 12, 2026. Yes, really. Read Now (https://www.vice.com/en/article/will-earth-really-lose-gravity-in= -2026/) -------------------- View image: (https://media.beehiiv.com/cdn-cgi/image/fit=3Dscale-down,forma= t=3Dauto,onerror=3Dredirect,quality=3D80/uploads/asset/file/72b46313-5a75-4= 2b8-842e-f69ad5385371/Coyote-Spotted-Swimming-to-Alcatraz-Island-for-the-Fi= rst-Time.jpg?t=3D1769095952) Follow image link: (https://www.vice.com/en/article/coyote-spotted-swimming= -to-alcatraz-island-for-the-first-time/) Caption:=20 # Coyote Spotted Swimming to Alcatraz Island for the First Time Only time will tell whether the coyote makes the trek back to the mainland = or calls Alcatraz Island its new home. Read Now (https://www.vice.com/en/article/coyote-spotted-swimming-to-alcatr= az-island-for-the-first-time/) -------------------- View image: (https://media.beehiiv.com/cdn-cgi/image/fit=3Dscale-down,forma= t=3Dauto,onerror=3Dredirect,quality=3D80/uploads/asset/file/3f8367e1-5429-4= fe2-b7b5-52bd81366519/Veronika-Is-The-Incredible-Cow-That-Can-Use-Tools.jpg= ?t=3D1769095721) Follow image link: (https://www.vice.com/en/article/meet-veronika-the-incre= dible-cow-that-can-use-tools/) Caption:=20 # Meet Veronika, the Incredible Cow That Can Use Tools Long-time fans of the Far Side (like me) can say that Gary Larson=E2=80=99s= legendary comic strip predicted this long ago. Read Now (https://www.vice.com/en/article/meet-veronika-the-incredible-cow-= that-can-use-tools/) ---------- =E2=80=94=E2=80=94=E2=80=94 You are reading a plain text version of this post. For the best experience,= copy and paste this link in your browser to view the post online: https://vicenewsletter.beehiiv.com/p/the-woman-dating-twins --e26ecaf002cc18c9072edb91fa97df91f9782c450c5158c7edf002629878 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 Mime-Version: 1.0 The Woman Dating Twins<= body class=3D"a" style=3D"margin:0px auto;padding:0px;word-wrap:normal;word= -spacing:normal;background-color:#F2F2F2;">
The l= atest from VICE.  ‌ ‌ ‌ ‌ = ‌ ‌ ‌ ‌ ‌ ‌= 60;‌ ‌ ‌ ‌ ‌ ‌=  ‌ ‌ ‌ ‌ ‌ R= 04; ‌ ‌ ‌ ‌ ‌ &= #8204; ‌ ‌ ‌ ‌ ‌= 0;‌ ‌ ‌ ‌ ‌ ‌&= #160;‌ ‌ ‌ ‌ ‌ ̴= 4; ‌ ‌ ‌ ‌ ‌ &#= 8204; ‌ ‌ ‌ ‌ ‌ = ;‌ ‌ ‌ ‌ ‌ ‌&#= 160;‌ ‌ ‌ ‌ ‌ ‌= ; ‌ ‌ ‌ ‌ ‌ = 204; ‌ ‌ ‌ ‌ ‌ = ‌ ‌ ‌ ‌ ‌ ‌= 60;‌ ‌ ‌ ‌ ‌ ‌=  ‌ ‌ ‌ ‌ ‌ R= 04; ‌ ‌ ‌ ‌ ‌ &= #8204; ‌ ‌ ‌ ‌ ‌= 0;‌ ‌ ‌ ‌ ‌ ‌&= #160;‌ ‌ ‌ ‌ ‌ ̴= 4; ‌ ‌ ‌ ‌ ‌ &#= 8204; ‌ ‌ ‌ ‌ ‌ = ;‌ ‌ ‌ ‌ ‌ ‌&#= 160;‌ ‌ ‌ ‌ ‌ ‌= ; ‌ ‌ ‌ ‌ ‌ = 204; ‌ ‌ ‌ ‌ ‌ = ‌ ‌ ‌ ‌ ‌ ‌= 60;‌ ‌ ‌ ‌ ‌ ‌=  ‌ ‌ ‌ ‌ ‌ R= 04; ‌ ‌ ‌ ‌ ‌ &= #8204; ‌ ‌ ‌ ‌ ‌= 0;‌ ‌ ‌ ‌ ‌ ‌&= #160;‌ ‌ ‌ ‌ ‌ ̴= 4; ‌ ‌ ‌ ‌ ‌
<= table role=3D"none" width=3D"100%" border=3D"0" cellspacing=3D"0" align=3D"= center" cellpadding=3D"0" class=3D"gg">
3D""
=
 
3D""
<= /td>
 
 
= <= /table><= /tr><= /tr>
=
  <= /td>
3D""

This Woman Is Dating Identical Twin Brothers. Yes,= Both of Them.

As if dating wasn=E2=80=99t al= ready confusing enough, try adding identical faces and double the emotional= labor to the equation.

<= /tr>
Read Now
 
 
=
<= tr>
 
  <= table role=3D"none" width=3D"100%" border=3D"0" cellspacing=3D"0" cellpaddi= ng=3D"0">
3D""

Will Earth Re= ally Lose Gravity in 2026?

=

People are now be= lieving that the earth will allegedly =E2=80=9Close gravity=E2=80=9D for se= ven seconds on August 12, 2026. Yes, really.

Read Now
 
 
=
 
=
 
3D""

Coyote Spotted Swimming to Alcatraz= Island for the First Time

=

Only time will te= ll whether the coyote makes the trek back to the mainland or calls Alcatraz= Island its new home.

<= /tr>
Read Now
 
 
<= /tr>=
=
=
 
 
3D""

Meet Veronika, the Incredible Cow That Can Us= e Tools

Long-time fans of the Far Side (like = me) can say that Gary Larson=E2=80=99s legendary comic strip predicted this= long ago.

<= tr>
Read Now
 
 
&n= bsp;
 
 
3D""

Update your= email preferences or unsubscribe here

© 2026 VICE Digital Publishing LLC

1402 3rd = Ave N
Nashville, TN 37208, United States

Terms of Service
<= /div> --e26ecaf002cc18c9072edb91fa97df91f9782c450c5158c7edf002629878-- From - Thu Jan 22 18:02:02 2026 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id gOCKIxhmcmklgAgAYBR5ng (envelope-from ); Thu, 22 Jan 2026 18:02:00 +0000 Return-path: Envelope-to: pfeifferj@archlinux.ch Delivery-date: Thu, 22 Jan 2026 18:02:00 +0000 Received: from o14.ptr1576.mail.beehiiv.com ([159.183.141.183]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1viz0J-00000003uVN-3ec4 for pfeifferj@archlinux.ch; Thu, 22 Jan 2026 18:02:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=newsletter.vice.com; h=content-type:date:from:mime-version:subject:reply-to:list-unsubscribe: list-unsubscribe-post:to:cc:content-type:date:from:subject:to; s=22f; bh=mwDCSZFWGfm3QD8Qsu3Gf3SIinfObNcUj4Ch68xwKIo=; b=y4qNmplukSdhJsWMRTWeRq0HzDWTijOnkFrXs2Sr8GgL5ce+k0Aekgg6IDNk+AABpta+ ZEGdTRiZluibtF0PL7f6peuZ4ZQ94JuJDTlVnrDORRaqSrzKMA5jug9kzMN4SCO+PRQRcl TT8ROU3x6Jx4+ZkB2y/k2J/D576EwG56uz+a4ENapKXKcXQMUTFps7MqsW8igKm8quv6qg l1GWhijwmWD2IW3gkbmotWq2RCD6R6qTFhPoX9EBBcFTWnXWUnhAnvCnFE5XDHhqI8d5bU hiNZcvLfKF74c0EKQaKa12+JC7TP1ItTvu6xjiHaJN0pc4CUX2uCN4xyzNeM6ySQ== Received: by recvd-56f8f4f4b8-fgxwf with SMTP id recvd-56f8f4f4b8-fgxwf-1-697265FE-9B 2026-01-22 18:01:34.233473853 +0000 UTC m=+3095262.976011397 Received: from NTEzMDg0Mjg (unknown) by geopod-ismtpd-37 (SG) with HTTP id VZ2jHb_GRfqwO7reXBhNOg Thu, 22 Jan 2026 18:01:34.199 +0000 (UTC) Content-Type: multipart/alternative; boundary=b335482d0893febd8f138ecc4d486cb1496ab61da8d2689dcb2ddd3c6622 Date: Thu, 22 Jan 2026 18:01:58 +0000 (UTC) From: VICE Mime-Version: 1.0 Message-ID: Subject: The Woman Dating Twins Reply-To: VICE Feedback-ID: =?us-ascii?Q?e0ed2346-9f68-4970-8cb6-cd85aa90e466=3Anewsletter=3Ad4440be6-495e-?= =?us-ascii?Q?47bb-bf01-532601ab1021=3Aad412c4590bef55?= List-Unsubscribe: =?us-ascii?Q?=3Cmailto=3Ad4440be6-495e-47bb-bf01-532601ab1021+b10cc825-51ef-4ac?= =?us-ascii?Q?2-a631-e0fa87a3c03b+e0ed2346-9f68-4970-?= =?us-ascii?Q?8cb6-cd85aa90e466=40unsub=2Ebeehiiv=2Ecom=3E=2C?= =?us-ascii?Q?_=3Chttps=3A=2F=2Fvicenewsletter=2Ebeehiiv=2Ecom=2Funsubscribe=2FeyJ0eXAiOiJKV1?= =?us-ascii?Q?QiLCJhbGciOiJIUzI1NiJ9=2EeyJzdWJzY3JpYmVy?= =?us-ascii?Q?X2lkIjoiYjEwY2M4MjUtNTFlZi00YWMyLWE2MzE?= =?us-ascii?Q?tZTBmYTg3YTNjMDNiIiwicG9zdF9pZCI6ImUwZW?= =?us-ascii?Q?QyMzQ2LTlmNjgtNDk3MC04Y2I2LWNkODVhYTkwZ?= =?us-ascii?Q?TQ2NiIsImxhc3RfcmVzb3VyY2VfZ3VpZCI6IlBv?= =?us-ascii?Q?c3Q6ZTBlZDIzNDYtOWY2OC00OTcwLThjYjYtY2Q?= =?us-ascii?Q?4NWFhOTBlNDY2In0=2Emp=5F8GF6CMDyxUKWdewUnSF?= =?us-ascii?Q?f9Dmab2VJUyvg6HrNfZaQ=3E?= List-Unsubscribe-Post: List-Unsubscribe=One-Click sId: d4440be6-495e-47bb-bf01-532601ab1021 x-beehiiv-ids: =?us-ascii?Q?{=22account=5Fname=22=3A=22https=3A=2F=2Fvicenewsletter=2Ebeehiiv=2Ecom=2F=22=2C=22campaig?= =?us-ascii?Q?n=5Fid=22=3A=22e0ed2346-9f68-4970-8cb6-cd85aa90?= =?us-ascii?Q?e466=22=2C=22category=22=3A=22newsletter=22=2C=22email=5Fge?= =?us-ascii?Q?nerated=5Fat=22=3A1769104894=2C=22user=5Fid=22=3A=22d4440?= =?us-ascii?Q?be6-495e-47bb-bf01-532601ab1021=22}?= x-beehiiv-type: newsletter x-list-id: d4440be6-495e-47bb-bf01-532601ab1021 x-list-owner: x-newsletter: https://vicenewsletter.beehiiv.com/p/the-woman-dating-twins x-newsletter-id: https://vicenewsletter.beehiiv.com/ x-newsletter-signup: https://vicenewsletter.beehiiv.com/subscribe X-SG-EID: =?us-ascii?Q?u001=2E2cOfsjUAtKYODgwhyssu7td4U+Jhr7tqpwSmGFRXLuO32inkdPTWEXQ65?= =?us-ascii?Q?9fU1bnhLVH8hCKo8BlUX0etKzQCZ132Sen0MzQz?= =?us-ascii?Q?+sU3PAEru2VGG4z9q6eWWlQRF5XVT6VlAp5zB40?= =?us-ascii?Q?7UCzcgwEq1JW0rV=2FAikOEx8qYZUUZSOypGjHm55?= =?us-ascii?Q?XJr0hUYJN5+jIDoNb1kktts0E=2FEhKFhVyx6Z8En?= =?us-ascii?Q?vVzTEzVhMK4j71+YSs+VeQvnl2U4SV7rpcVGFBk?= =?us-ascii?Q?wEhi?= X-SG-ID: =?us-ascii?Q?u001=2ESdBcvi+Evd=2FbQef8eZF3BpTL9BgbK5wfSJMJGMsmprC4cBUZJCrQVYjCO?= =?us-ascii?Q?0A=2FxUMB8BfE17Jcs0fNN=2FJKhCA6H5cjrCAg7QHr?= =?us-ascii?Q?X1Y6i963MvuzaNYTuszaNV6laDSeb8uancxasJo?= =?us-ascii?Q?rR4Ss0eDpUugbIjYKOa+WCbB1bootScpK8bCMxp?= =?us-ascii?Q?yN=2FgOZtnxXlE14RcwcFedtn8LOYDz7yL6w52RDD?= =?us-ascii?Q?rJtxtFvlAqlSjf+uzLgEKduhrA=2Fu+gJtw2fsjMf?= =?us-ascii?Q?U143VgwR0vwQavyj2h7pjm0nuolVm5UTL5tAy20?= =?us-ascii?Q?BMiD784va3bRBNYZM3AwgsclwBA83BcvAtc=2FvnB?= =?us-ascii?Q?o1A2XIS=2F9de83jM1G5g6JZC2QYhBOF2M=2FRnwVgW?= =?us-ascii?Q?Kd+zBhzyyAfoPlEdGuFTNTK=2FkSr5HQjx9zimBOp?= =?us-ascii?Q?XICIkreP+k0VeycBrduONeYD+33+5Df6qm2kxlU?= =?us-ascii?Q?z2lKmh2ZFvEGX4JeHOi7sNblIMZWTEZ2qagG2Ex?= =?us-ascii?Q?iU5Dw=3D?= To: "pfeifferj@archlinux.ch" X-Entity-ID: u001.NByrdwNjJF8HzJ5pdH9B7g== X-DKIM: signer='newsletter.vice.com' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 1.4 (+) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (1.4 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: beehiivstatus.com] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [159.183.141.183 listed in list.dnswl.org] 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [159.183.141.183 listed in wl.mailspike.net] 0.0 HTML_IMAGE_RATIO_04 BODY: HTML has a low ratio of text to image area 1.5 HTML_MESSAGE BODY: HTML included in message -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders 0.0 T_KAM_HTML_FONT_INVALID Test for Invalidly Named or Formatted Colors in HTML SpamTally: Final spam score: 14 --b335482d0893febd8f138ecc4d486cb1496ab61da8d2689dcb2ddd3c6622 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 ---------- View image: (https://media.beehiiv.com/cdn-cgi/image/fit=3Dscale-down,forma= t=3Dauto,onerror=3Dredirect,quality=3D80/uploads/asset/file/9415471e-e7e4-4= f1d-a7e2-02f0520379fb/vice-banner.png?t=3D1757704107) Follow image link: (https://www.vice.com/) Caption:=20 -------------------- View image: (https://media.beehiiv.com/cdn-cgi/image/fit=3Dscale-down,forma= t=3Dauto,onerror=3Dredirect,quality=3D80/uploads/asset/file/d969507b-f53b-4= 027-8772-fa90c0264313/This-Woman-Is-Dating-Identical-Twin-Brothers.-Yes-Bot= h-of-Them.png?t=3D1769095380) Follow image link: (https://www.vice.com/en/article/this-woman-is-dating-id= entical-twin-brothers-yes-both-of-them/) Caption:=20 # This Woman Is Dating Identical Twin Brothers. Yes, Both of Them. As if dating wasn=E2=80=99t already confusing enough, try adding identical = faces and double the emotional labor to the equation. Read Now (https://www.vice.com/en/article/this-woman-is-dating-identical-tw= in-brothers-yes-both-of-them/) -------------------- View image: (https://media.beehiiv.com/cdn-cgi/image/fit=3Dscale-down,forma= t=3Dauto,onerror=3Dredirect,quality=3D80/uploads/asset/file/d16a67e9-0646-4= 53a-93a0-99c009311c8f/Will-Earth-Really-Lose-Gravity-in-2026.jpg?t=3D176909= 5961) Follow image link: (https://www.vice.com/en/article/will-earth-really-lose-= gravity-in-2026/) Caption:=20 # Will Earth Really Lose Gravity in 2026? People are now believing that the earth will allegedly =E2=80=9Close gravit= y=E2=80=9D for seven seconds on August 12, 2026. Yes, really. Read Now (https://www.vice.com/en/article/will-earth-really-lose-gravity-in= -2026/) -------------------- View image: (https://media.beehiiv.com/cdn-cgi/image/fit=3Dscale-down,forma= t=3Dauto,onerror=3Dredirect,quality=3D80/uploads/asset/file/72b46313-5a75-4= 2b8-842e-f69ad5385371/Coyote-Spotted-Swimming-to-Alcatraz-Island-for-the-Fi= rst-Time.jpg?t=3D1769095952) Follow image link: (https://www.vice.com/en/article/coyote-spotted-swimming= -to-alcatraz-island-for-the-first-time/) Caption:=20 # Coyote Spotted Swimming to Alcatraz Island for the First Time Only time will tell whether the coyote makes the trek back to the mainland = or calls Alcatraz Island its new home. Read Now (https://www.vice.com/en/article/coyote-spotted-swimming-to-alcatr= az-island-for-the-first-time/) -------------------- View image: (https://media.beehiiv.com/cdn-cgi/image/fit=3Dscale-down,forma= t=3Dauto,onerror=3Dredirect,quality=3D80/uploads/asset/file/3f8367e1-5429-4= fe2-b7b5-52bd81366519/Veronika-Is-The-Incredible-Cow-That-Can-Use-Tools.jpg= ?t=3D1769095721) Follow image link: (https://www.vice.com/en/article/meet-veronika-the-incre= dible-cow-that-can-use-tools/) Caption:=20 # Meet Veronika, the Incredible Cow That Can Use Tools Long-time fans of the Far Side (like me) can say that Gary Larson=E2=80=99s= legendary comic strip predicted this long ago. Read Now (https://www.vice.com/en/article/meet-veronika-the-incredible-cow-= that-can-use-tools/) ---------- =E2=80=94=E2=80=94=E2=80=94 You are reading a plain text version of this post. For the best experience,= copy and paste this link in your browser to view the post online: https://vicenewsletter.beehiiv.com/p/the-woman-dating-twins --b335482d0893febd8f138ecc4d486cb1496ab61da8d2689dcb2ddd3c6622 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 Mime-Version: 1.0 The Woman Dating Twins<= body class=3D"a" style=3D"margin:0px auto;padding:0px;word-wrap:normal;word= -spacing:normal;background-color:#F2F2F2;">
The l= atest from VICE.  ‌ ‌ ‌ ‌ = ‌ ‌ ‌ ‌ ‌ ‌= 60;‌ ‌ ‌ ‌ ‌ ‌=  ‌ ‌ ‌ ‌ ‌ R= 04; ‌ ‌ ‌ ‌ ‌ &= #8204; ‌ ‌ ‌ ‌ ‌= 0;‌ ‌ ‌ ‌ ‌ ‌&= #160;‌ ‌ ‌ ‌ ‌ ̴= 4; ‌ ‌ ‌ ‌ ‌ &#= 8204; ‌ ‌ ‌ ‌ ‌ = ;‌ ‌ ‌ ‌ ‌ ‌&#= 160;‌ ‌ ‌ ‌ ‌ ‌= ; ‌ ‌ ‌ ‌ ‌ = 204; ‌ ‌ ‌ ‌ ‌ = ‌ ‌ ‌ ‌ ‌ ‌= 60;‌ ‌ ‌ ‌ ‌ ‌=  ‌ ‌ ‌ ‌ ‌ R= 04; ‌ ‌ ‌ ‌ ‌ &= #8204; ‌ ‌ ‌ ‌ ‌= 0;‌ ‌ ‌ ‌ ‌ ‌&= #160;‌ ‌ ‌ ‌ ‌ ̴= 4; ‌ ‌ ‌ ‌ ‌ &#= 8204; ‌ ‌ ‌ ‌ ‌ = ;‌ ‌ ‌ ‌ ‌ ‌&#= 160;‌ ‌ ‌ ‌ ‌ ‌= ; ‌ ‌ ‌ ‌ ‌ = 204; ‌ ‌ ‌ ‌ ‌ = ‌ ‌ ‌ ‌ ‌ ‌= 60;‌ ‌ ‌ ‌ ‌ ‌=  ‌ ‌ ‌ ‌ ‌ R= 04; ‌ ‌ ‌ ‌ ‌ &= #8204; ‌ ‌ ‌ ‌ ‌= 0;‌ ‌ ‌ ‌ ‌ ‌&= #160;‌ ‌ ‌ ‌ ‌ ̴= 4; ‌ ‌ ‌ ‌ ‌
<= table role=3D"none" width=3D"100%" border=3D"0" cellspacing=3D"0" align=3D"= center" cellpadding=3D"0" class=3D"gg">
3D""
=
<= /tr>
 
3D""
<= /td>
 
 
=
  <= /table>
3D""

This Woman Is Dating Identical Twin Brothers. Yes, Both of Them.

As if dating wasn=E2=80=99t already confusing enough,= try adding identical faces and double the emotional labor to the equation.=

Read Now
 
 
=
<= /td>
 
 
3D""<= /td>
= Will Earth Really Lose Gravity in 2026?

People are now believing that the earth will allegedly =E2=80= =9Close gravity=E2=80=9D for seven seconds on August 12, 2026. Yes, really.=

Read Now
 
 
 
  =
3D""

Coyote Spotted Swimming to Alcatra= z Island for the First Time

=

Only time will te= ll whether the coyote makes the trek back to the mainland or calls Alcatraz= Island its new home.

<= /tr>
Read Now
 
 
 
=
 
=
3D""

Meet Veronika, the Incredible Cow That Can Use Tools

Long-time fans of the Far Side (like me) can say that Gary La= rson=E2=80=99s legendary comic strip predicted this long ago.

Read Now
 
 
 
 
3D""
 
=
=

Update your email preferences or u= nsubscribe here

©= 2026 VICE Digital Publishing LLC

1402 3rd Ave N
Nashville, TN = 37208, United States

Terms of= Service
--b335482d0893febd8f138ecc4d486cb1496ab61da8d2689dcb2ddd3c6622-- From - Thu Jan 22 18:30:10 2026 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id CByhOq5scmmODxEAYBR5ng (envelope-from ) for ; Thu, 22 Jan 2026 18:30:06 +0000 Return-path: Envelope-to: sf@josie.lol Delivery-date: Thu, 22 Jan 2026 18:30:07 +0000 Received: from sp01468.mtaspg.email ([18.215.109.89]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1vizRW-00000004lPi-2e1h for sf@josie.lol; Thu, 22 Jan 2026 18:30:06 +0000 Received: from sp01468.mtaspg.email (SendPost) by witcher.mxrouting.net with SMTP id sp01468.mtaspg.email-1769106606; Thu, 22 Jan 2026 18:30:06 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=sp-dkim; d=deals.secretflying.com; h=from:subject:date:message-id: list-unsubscribe-post:list-unsubscribe; bh=QXdMaVIybkkWY27UJNWDq6whe7ZRZ6hXPbjjqGV/QMk=; b=WEcCPUEW0p1rVzNIp/R/qtd/lU9/KAoZlFEIY6ipVHb8qq/jufdNdkE+M5pdab+UTn0Lwc MK0AWqsxcY68MEooeLQ+0hH1IoV7wRrgaQzTvPc9atDhwh8keDcmV41dazJU/Fh58eIbyQ 3U3h1Cgl36eVZuzDozLVRei585PJzCo= MIME-Version: 1.0 Date: Thu, 22 Jan 2026 18:15:51 +0000 From: "Secret Flying" Reply-To: "Secret Flying" To: "Foo" Subject: Non-stop from US cities to Lisbon, Portugal from only $386 roundtrip Message-ID: List-Unsubscribe: List-Unsubscribe-Post: List-Unsubscribe=One-Click Feedback-ID: 29799:deals.secretflying.com:20260122:sendpost X-Sendpost-Account-IP-Pool-ID: 495 X-Sendpost-Message-UUID: ad71bf56-a8f5-4b1f-bc94-34b0f1001cfd X-Sendpost-SubAccount-ID: 29799 X-SendPysis details: (4.1 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: www.gov.uk] 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [85.115.54.190 listed in wl.mailspike.net] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [85.115.54.190 listed in list.dnswl.org] 1.0 HTML_FONT_LOW_CONTRAST BODY: HTML font color similar or identical to background 1.5 HTML_MESSAGE BODY: HTML included in message 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.0 FROM_GOV_DKIM_AU From Government address and DKIM signed 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders 1.8 MISSING_SUBJECT Missing Subject: header -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: 41 --f6e454f24667d4a76d1e0243b8610decb1b4fe069747f9c4fab05d57c3aa Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 New registered email address Companies House: New registered email address This email address has been provided as the registered email address for MA= GICKLY LLP (OC450630). Emails sent from Companies House to this email address are expected to come= to the attention of someone acting on behalf of the company. Contact Companies House if you think there has been a mistake. Contact Centre tel +44 (0)303 1234 500 or email enquiries@companieshouse.gov.uk This email was sent from a notification-only email address which cannot acc= ept incoming mail. Please do not reply directly to this message. =0AThis message and any attachments are intended for the persons named as addressees only and may contain confidential information. In addition they may be protected by copyright.=0A=0AIf you receive it in error, notify us, delete it and do not make use of or copy it. You must not copy, disseminate or otherwise distribute or publish this message, except for the purposes for which this message is intended, without our consent.=0A=0APlease note that this e-mail has been created in the knowledge that Internet e-mail is not a 100% secure communications medium. We advise that you understand and accept this lack of security when e-mailing us.=0A=0AFor company information, guidance and how to file documents online, please see our website www.companieshouse.gov.uk.=0A=0AThis message has been scanned for viruses by Hosted Security, a service from Websense.=0A=0A --f6e454f24667d4a76d1e0243b8610decb1b4fe069747f9c4fab05d57c3aa Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=UTF-8 =20 New registered email address
=20 3D"Companies Companies= House

Co= mpanies House: New registered email address

This email ad= dress has been provided as the registered email address for MAGICKLY LLP (O= C450630).

Emails sent f= rom Companies House to this email address are expected to come to the atten= tion of someone acting on behalf of the company.

Contact Compa= nies House if you think there has been a mistake.

Contact Centre tel +44 (0)303 1234 500
or email enquiries@companieshouse.gov.uk.

This email was sent from a notification-only email addres= s which cannot accept incoming mail. Please do not reply directly to this m= essage.


= =0AThis message and any attachments are intended for the persons named as addressees only and may contain confidential information. In addition they may be protected by copyright.=0A=0AIf you receive it in error, notify us, delete it and do not make use of or copy it. You must not copy, disseminate or otherwise distribute or publish this message, except for the purposes for which this message is intended, without our consent.=0A=0APlease note that this e-mail has been created in the knowledge that Internet e-mail is not a 100% secure communications medium. We advise that you understand and accept this lack of security when e-mailing us.=0A=0AFor company information, guidance and how to file documents online, please see our website www.companieshouse.gov.uk.=0A=0AThis message has been scanned for viruses by Hosted Security, a service from Websense.=0A=0A
= --f6e454f24667d4a76d1e0243b8610decb1b4fe069747f9c4fab05d57c3aa-- From - Tue Jan 13 11:14:04 2026 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id aK/1JOsoZmlDTREAYBR5ng (envelope-from ) for ; Tue, 13 Jan 2026 11:13:47 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Tue, 13 Jan 2026 11:13:47 +0000 Received: from cluster-a.mailcontrol.com ([85.115.52.190]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1vfcLL-00000004pKl-0kaF for hi@josie.lol; Tue, 13 Jan 2026 11:13:47 +0000 Received: from ch-mail1.live.aws.internal (ws-ll-mail1.companieshouse.gov.uk [3.8.246.142]) by rly07a.srv.mailcontrol.com (MailControl) with ESMTPS id 60DBDgw84032217 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 13 Jan 2026 11:13:43 GMT Subject: Filing to provide identity verification details for a PSC received for MAGICKLY LLP (OC450630) DKIM-Filter: OpenDKIM Filter v2.11.0 ch-mail1.live.aws.internal 06C3A1AA1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=companieshouse.gov.uk; s=ch-mail; t=1768302822; bh=WZV91v3cjFLziwiALW9kZ0QolRS1ZUkgl4VbM/Wi39w=; h=From:Date:To:From; b=Wbj7Uv0Qj5gg3eroymlZUgyjmlTbEDw7aCJJO3ijJM8Sjpo7yuCY26taSwG1Ccabz oa4HPkXIw/ccuNNoV+XgVa+Yr3bbFpYmKcrHWUe2I9jT+FiOzl9wZ60J/FpVxv0Yoe v/V0ydtHg+KuifAdib9iECRKUYGz2JtHnkrqFFPXE2nteFOP4fXTK6oN6CTTh+PlsM OGXWdMWcVQOnicXGe95QGD14XgUs2NDDGXAo+uEB0EG+OZVYm8Q4xEE0ZYNuCWts3h xARnDpCV0gDBEbjFEGZMtp+ql1uM/J33FzE4dEjNcKmgmR74gzCLUDhNmX9vS/8klO KvMSkdnw4rlzQ== DKIM-Filter: OpenDKIM Filter v2.11.0 ch-mail1.live.aws.internal EBF851A9D Message-ID: <1768302821956909732.1.1941915996223061339@companieshouse.gov.uk> From: "Companies House" Date: Tue, 13 Jan 2026 11:13:41 +0000 Mime-Version: 1.0 Content-Type: multipart/alternative; boundary=98727a8b05664b4ec6211cc59f0d4069092367ecb186f62ac78a6f8ffc28 To: X-MailControlDKIMCheck: cGFzcyBjb21wYW5pZXNob3VzZS5nb3YudWsgW3Bhc3Nd X-MailControl-OutInfo: MTc2ODMwMjgyNTpGUEtleTEucHJpdjonLuI/f25Nl1s//6krWRZsQ1TMRK2L6dBUD78Mnt+0+nffOGFATr0vBPtvFPutsrzjnhP0OkPKffE5CwPd63L7UvmGC43OVMOcPLuT33cXyizpNAjwZZfflmH7ndv4+lg/Tyv4ad9kj86oOEW1IfegmqQ/kG5ahZsDc4UjGnZk+9nrdTePLUt7mO9xU3n7/cG4+fT/DdeLMibiss/XKY1yorq4rLdl3v0qOfsyBzWHXlwklaMmD2Tqi0bzGib8r1zvKbaf1pn43z/Ty1P7MiAAjuH4OC5BjrJXDAAZB0+Wp7M1nCBD6RpuYQBN3gFwqDNt7WZCNaz8FnZvUmxWQ1Ca X-Scanned-By: MailControl 20251117165329 (www.mailcontrol.com) on 10.65.0.117 X-DKIM: signer='companieshouse.gov.uk' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 2.3 (++) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (2.3 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: service.gov.uk] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [85.115.52.190 listed in list.dnswl.org] 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [85.115.52.190 listed in wl.mailspike.net] 1.0 HTML_FONT_LOW_CONTRAST BODY: HTML font color similar or identical to background 1.5 HTML_MESSAGE BODY: HTML included in message 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.0 FROM_GOV_DKIM_AU From Government address and DKIM signed 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: 23 --98727a8b05664b4ec6211cc59f0d4069092367ecb186f62ac78a6f8ffc28 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Submission confirmation Submission Received This email confirms that your submission for MAGICKLY LLP (OC450630) was re= ceived on 13 January 2026. Reference number Filing type 124466-090017-683027 Filing to provide identity verification details= for a PSC We will email you within 2 working days to confirm acceptance or rejection = of this filing. All documents filed online are available from 'Your filings' for 30 days af= ter submission: https://find-and-update.company-information.service.gov.uk/user/transaction= s Help us improve your online filing experience by completing our quick surve= y: https://www.research.net/r/chfiling Contact Centre tel +44 (0)303 1234 500 or email enquiries@companieshouse.gov.uk This email was sent from a notification-only email address which cannot acc= ept incoming mail. Please do not reply directly to this message. =0AThis message and any attachments are intended for the persons named as addressees only and may contain confidential information. In addition they may be protected by copyright.=0A=0AIf you receive it in error, notify us, delete it and do not make use of or copy it. You must not copy, disseminate or otherwise distribute or publish this message, except for the purposes for which this message is intended, without our consent.=0A=0APlease note that this e-mail has been created in the knowledge that Internet e-mail is not a 100% secure communications medium. We advise that you understand and accept this lack of security when e-mailing us.=0A=0AFor company information, guidance and how to file documents online, please see our website www.companieshouse.gov.uk.=0A=0AThis message has been scanned for viruses by Hosted Security, a service from Websense.=0A=0A --98727a8b05664b4ec6211cc59f0d4069092367ecb186f62ac78a6f8ffc28 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=UTF-8 =20 Submission confirmation =20
=20 3D"Companies Co= mpanies House

Submission confirmation

This email confirms that your submission for MAG= ICKLY LLP (OC450630) was received on 13 January 2026.

Reference number Filing type
124466-090017-683027 Filing to provide identity verification details for a PSC

We will email you within 2 working days to confi= rm acceptance or rejection of this filing.

All documents filed online are available from 'Yo= ur filings' for 30 days after submission: https://find-and-up= date.company-information.service.gov.uk/user/transactions

Help us improve your online filing experience b= y completing our quick survey: https://www.smartsurvey.co.uk/s/filingemail/

Contact Centre tel +44 (0)303 1234 500
or email enquiries@companieshouse.gov.uk.

This email was sent from a notification-only ema= il address which cannot accept incoming mail. Please do not reply directly = to this message.

=20
= =0AThis message and any attachments are intended for the persons named as addressees only and may contain confidential information. In addition they may be protected by copyright.=0A=0AIf you receive it in error, notify us, delete it and do not make use of or copy it. You must not copy, disseminate or otherwise distribute or publish this message, except for the purposes for which this message is intended, without our consent.=0A=0APlease note that this e-mail has been created in the knowledge that Internet e-mail is not a 100% secure communications medium. We advise that you understand and accept this lack of security when e-mailing us.=0A=0AFor company information, guidance and how to file documents online, please see our website www.companieshouse.gov.uk.=0A=0AThis message has been scanned for viruses by Hosted Security, a service from Websense.=0A=0A
= --98727a8b05664b4ec6211cc59f0d4069092367ecb186f62ac78a6f8ffc28-- From - Tue Jan 13 11:14:36 2026 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id qPICDRopZmm26hAAYBR5ng (envelope-from ) for ; Tue, 13 Jan 2026 11:14:34 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Tue, 13 Jan 2026 11:14:34 +0000 Received: from cluster-j.mailcontrol.com ([85.115.54.190]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1vfcM5-00000004rLe-3HvG for hi@josie.lol; Tue, 13 Jan 2026 11:14:34 +0000 Received: from ch-mail1.live.aws.internal (ws-ll-mail1.companieshouse.gov.uk [3.8.246.142]) by rly18j.srv.mailcontrol.com (MailControl) with ESMTPS id 60DBES0g3832123 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 13 Jan 2026 11:14:29 GMT Content-Type: multipart/alternative; boundary=ac7862b6a270a018b731c6132e1ec385734174c5ffb0ea34ba16134bdcb1 DKIM-Filter: OpenDKIM Filter v2.11.0 ch-mail1.live.aws.internal 2089C1AA5 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=companieshouse.gov.uk; s=ch-mail; t=1768302868; bh=NU30aYQjukwoHIqroefDALbAKNCMLMxjwC+AJ+Km5Mk=; h=To:Subject:From:Date:From; b=f0CJQnMJlqx7eNYQJT7sZYeY4Bmei65BWTy4BFy092tjAL8rbRqQbGjIp/1bAF3Db 6PhOBsionumln6JoK+A7tsjohx2Exj3dYGpAaGXmo+KhfnMcQ5WpPMGiIEfrL9HiQ6 1zTAQUQCagcGTmfRhuArSPwUtvrL7PXPPwQ0QUC/CP7OJGBfbJgtvYPa2AMrRpyoRs JtAEYO4i/MIkbuWgTP9qiIdL46NWradh03bULDTEg162sTaG0iiwRmt5iWYK8MXqkI pjzlYI3mPL2sGy1RMFcR3/Dd0uKp9ctmmuVl7h9tVxgkzjaqAO/TJOWE+h1x2pOkEt D5XdDR4i8RrKQ== DKIM-Filter: OpenDKIM Filter v2.11.0 ch-mail1.live.aws.internal DDD788FB1C To: Subject: Filing to provide identity verification details for a PSC accepted for MAGICKLY LLP (OC450630) Message-ID: <1768302862190344440.1.8243855665737347647@companieshouse.gov.uk> From: "Companies House" Date: Tue, 13 Jan 2026 11:14:22 +0000 Mime-Version: 1.0 X-MailControlDKIMCheck: cGFzcyBjb21wYW5pZXNob3VzZS5nb3YudWsgW3Bhc3Nd X-MailControl-OutInfo: MTc2ODMwMjg3MTpGUEtleTEucHJpdjowtYa1kpLw2hxJ/fK9xdPTHMT0m9HcCSIzpSfZM1gVza3nu7PmbJM4QozRfflRXechyFiRQYJ6niraqxjYSobAEfbJZLZbLoYmoXSiefsvXWspqccrNN3lm3X+n7d4j694zIfpKvVRS4eEKvWp5RabMUmnrjr5KRYLJSBMZ1Q0HETjiVHaG3sjr+oC0Oj5VDUeSg/T6qDICY3yNawHPMq+Ge+I+eDRXp28KlqGi89oXTDbamliXSevHGWBTlG/LA71fl9lEKvap7l96172E+2WGPIb7oJ42Ou1qCtC+VSwJefce7RgNND0mO6Ig3TpxkRhZSVdqOazz75N3XJooAmd X-Scanned-By: MailControl 20251117165329 (www.mailcontrol.com) on 10.74.0.128 X-DKIM: signer='companieshouse.gov.uk' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 2.3 (++) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (2.3 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: companieshouse.gov.uk] 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [85.115.54.190 listed in wl.mailspike.net] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [85.115.54.190 listed in list.dnswl.org] 1.0 HTML_FONT_LOW_CONTRAST BODY: HTML font color similar or identical to background 1.5 HTML_MESSAGE BODY: HTML included in message 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.0 FROM_GOV_DKIM_AU From Government address and DKIM signed 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: 23 --ac7862b6a270a018b731c6132e1ec385734174c5ffb0ea34ba16134bdcb1 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Submission accepted Submission accepted This email confirms that your submission for MAGICKLY LLP (OC450630) was ac= cepted on 13 January 2026. Reference number Filing type 124466-090017-683027 Filing to provide identity verification details f= or a PSC This information is available from the company filing history: https://find-and-update.company-information.service.gov.uk/company/OC450630= /filing-history Sign up for free email reminders for accounts and confirmation statement fi= lings: https://www.gov.uk/government/news/email-reminders-help-companies-file-on-t= ime Help us improve your online filing experience by completing our quick surve= y: https://www.research.net/r/chfiling Contact Centre tel +44 (0)303 1234 500 or email enquiries@companieshouse.gov.uk This email was sent from a notification-only email address which cannot acc= ept incoming mail. Please do not reply directly to this message. =0AThis message and any attachments are intended for the persons named as addressees only and may contain confidential information. In addition they may be protected by copyright.=0A=0AIf you receive it in error, notify us, delete it and do not make use of or copy it. You must not copy, disseminate or otherwise distribute or publish this message, except for the purposes for which this message is intended, without our consent.=0A=0APlease note that this e-mail has been created in the knowledge that Internet e-mail is not a 100% secure communications medium. We advise that you understand and accept this lack of security when e-mailing us.=0A=0AFor company information, guidance and how to file documents online, please see our website www.companieshouse.gov.uk.=0A=0AThis message has been scanned for viruses by Hosted Security, a service from Websense.=0A=0A --ac7862b6a270a018b731c6132e1ec385734174c5ffb0ea34ba16134bdcb1 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=UTF-8 =20 Submission accepted =20
=20 3D"Companies Co= mpanies House

Submission accepted

This email confirms that your submission for MAG= ICKLY LLP (OC450630) was accepted on 13 January 2026.

Reference number Filing type
124466-090017-683027 Filing to provide identity verification details for a PSC

This information is available from the company f= iling history: https://find-and-update.company-= information.service.gov.uk/company/OC450630/filing-history

Sign up for free email reminders for accounts= and confirmation statement filings: htt= ps://www.gov.uk/government/news/email-reminders-help-companies-file-on-time=

Help us improve your online filing experienc= e by completing our quick survey: https://www.smartsurvey.co.uk/s/filingemail/

Contact Centre tel +44 (0)303 1234 500
or email enquiries@companieshouse.gov.uk.

This email was sent from a notification-only= email address which cannot accept incoming mail. Please do not reply direc= tly to this message.

=20
= =0AThis message and any attachments are intended for the persons named as addressees only and may contain confidential information. In addition they may be protected by copyright.=0A=0AIf you receive it in error, notify us, delete it and do not make use of or copy it. You must not copy, disseminate or otherwise distribute or publish this message, except for the purposes for which this message is intended, without our consent.=0A=0APlease note that this e-mail has been created in the knowledge that Internet e-mail is not a 100% secure communications medium. We advise that you understand and accept this lack of security when e-mailing us.=0A=0AFor company information, guidance and how to file documents online, please see our website www.companieshouse.gov.uk.=0A=0AThis message has been scanned for viruses by Hosted Security, a service from Websense.=0A=0A
= --ac7862b6a270a018b731c6132e1ec385734174c5ffb0ea34ba16134bdcb1-- From - Tue Jan 13 11:15:03 2026 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id uK9tDDUpZmn5VBEAYBR5ng (envelope-from ) for ; Tue, 13 Jan 2026 11:15:01 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Tue, 13 Jan 2026 11:15:01 +0000 Received: from cluster-j.mailcontrol.com ([85.115.54.190]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1vfcMW-00000004s6K-3Jql for hi@josie.lol; Tue, 13 Jan 2026 11:15:01 +0000 Received: from ch-mail1.live.aws.internal (ws-ll-mail1.companieshouse.gov.uk [3.8.246.142]) by rly12j.srv.mailcontrol.com (MailControl) with ESMTPS id 60DBEtt33276193 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 13 Jan 2026 11:14:56 GMT Message-ID: <1768302891978406707.1.8108444093313466409@companieshouse.gov.uk> DKIM-Filter: OpenDKIM Filter v2.11.0 ch-mail1.live.aws.internal C249C1AA8 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=companieshouse.gov.uk; s=ch-mail; t=1768302895; bh=y3A/Z70C3Qiuyex4eQHSdeV3fNXtEkReWLNNreq9MnQ=; h=From:Daorg>) for ; Tue, 24 Feb 2026 08:31:04 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Tue, 24 Feb 2026 08:31:05 +0000 Received: from sea.lore.kernel.org ([172.234.253.10]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1vunos-0000000BkA5-3tvC for hi@josie.lol; Tue, 24 Feb 2026 08:31:04 +0000 Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by sea.lore.kernel.org (Postfix) with ESMTP id 68CFA315D122 for ; Tue, 24 Feb 2026 08:27:14 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9696B366827; Tue, 24 Feb 2026 08:27:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="P8j7SPfw"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="T6zislNU"; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b="wNSN+JSW"; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b="beivu7ur" X-Original-To: stable@vger.kernel.org Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 76D6936683A for ; Tue, 24 Feb 2026 08:27:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.135.223.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771921633; cv=none; b=lm9F1xqz4Q6CSeCBUI7CXwy/TL2NXISoOO5FJtG6XmSxT89eSs713+uEL+Gr/8xj0YEYfQ7aDseRsT8/Oy1CX2zJDo+sBrM2znZBpSCl20ZwcxWvXWwwP6C+WO3ENPYxT8Z8xdmyiAH3LVOLjsCHdH7H69hpBZkoC9d5bP8xmPc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771921633; c=relaxed/simple; bh=bWOd/0RGljx0Qd0DKZ4PLGLuukggTJ2N04jWI/zYLF4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TDzNIsGNpY09SYFYkFHDZoIu3AoQLa2+7fv0/IWcGpiOPqV5byel+lmqWhPGFq/jrq5+iJC/QNS49WXKxttQMvfocRlTQ/CxMfq0GvK+NhvUWdYPbDgWhv1OR2p4mRrvKHD2sntUDIbYGhhtmMCYIqJ3960au6aKJxBc/yr2DwY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de; spf=pass smtp.mailfrom=suse.de; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=P8j7SPfw; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=T6zislNU; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.b=wNSN+JSW; dkim=permerror (0-bit key) header.d=suse.de header.i=@suse.de header.b=beivu7ur; arc=none smtp.client-ip=195.135.223.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.de Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 6BB785BCD6; Tue, 24 Feb 2026 08:27:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1771921623; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZEJvkmg44lJ3ZuZwLIsYWxGbbgRv72rWRKmIBKXOmQc=; b=P8j7SPfwvilJvUvQA78ilvKP9xyMS+FugjH8p78/Ai7Skacq285pUoz1Lg6IApCzfuMjhe xvM07Dfys69C0D0gg6FjaXsPkg0dBgQpGSyxaE4PGb/lgbf6ikFrbWf0rDSGBQGQqnxqAc eg9cMOVX4wb411ON+JD0tJEfDNO6RSA= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1771921623; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZEJvkmg44lJ3ZuZwLIsYWxGbbgRv72rWRKmIBKXOmQc=; b=T6zislNU86Wmg9aRkb64GyoaB3Cf1dFQX26kXAgS0bIqjBGFYCJQKkTFMPeOfjGis0QyGC HE3Q3mleJMAnYoDQ== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1771921622; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZEJvkmg44lJ3ZuZwLIsYWxGbbgRv72rWRKmIBKXOmQc=; b=wNSN+JSWq2dhyTxlMxW2JXmv1Ghk+XrQB3767kc9ElXKTCvSirhTFxbtvcK3F0sfz6AwxL hhuFmSHkKA+buNe6MnDKql/zj6+Yym0CG1D1hLd4v39SoZJ+ovqMoupvtPVxReUPlS8fxz 8J07+C/IqSZN/DCOJJqcO6LY/Utrjck= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1771921622; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZEJvkmg44lJ3ZuZwLIsYWxGbbgRv72rWRKmIBKXOmQc=; b=beivu7urdntyuvgOmLcHeg3zLlgGtKq0d8p+OJMy0h39Apqi48zzXDb3Dx+VP93Ydl0URd c0nNME/L3/oW2XCw== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 2C8103EA69; Tue, 24 Feb 2026 08:27:02 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id WC6sCdZgnWnVQAAAD6G6ig (envelope-from ); Tue, 24 Feb 2026 08:27:02 +0000 From: Thomas Zimmermann To: deller@gmx.de, simona@ffwll.ch, jayalk@intworks.biz Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, Thomas Zimmermann , stable@vger.kernel.org Subject: [PATCH v2 1/4] fbdev: defio: Disconnect deferred I/O from the lifetime of struct fb_info Date: Tue, 24 Feb 2026 09:25:54 +0100 Message-ID: <20260224082657.207284-2-tzimmermann@suse.de> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260224082657.207284-1-tzimmermann@suse.de> References: <20260224082657.207284-1-tzimmermann@suse.de> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.80 X-Spam-Level: X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; FROM_HAS_DN(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:email]; FROM_EQ_ENVFROM(0.00)[]; RCPT_COUNT_SEVEN(0.00)[7]; RCVD_COUNT_TWO(0.00)[2]; FREEMAIL_TO(0.00)[gmx.de,ffwll.ch,intworks.biz]; RCVD_TLS_ALL(0.00)[]; TO_DN_SOME(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; FREEMAIL_ENVRCPT(0.00)[gmx.de] X-Spam-Flag: NO X-DKIM: signer='suse.de' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 0.4 (/) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://docs.mxroute.com/docs/expert-spam-filtering.html --- Content analysis details: (0.4 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: suse.de] 0.0 URIBL_DBL_BLOCKED_OPENDNS ADMINISTRATOR NOTICE: The query to dbl.spamhaus.org was blocked due to usage of an open resolver. See https://www.spamhaus.org/returnc/pub/ [URIs: suse.de] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [172.234.253.10 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different 0.0 URIBL_ZEN_BLOCKED_OPENDNS ADMINISTRATOR NOTICE: The query to zen.spamhaus.org was blocked due to usage of an open resolver. See https://www.spamhaus.org/returnc/pub/ [URIs: suse.de] 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager SpamTally: Final spam score: 4 Hold state of deferred I/O in struct fb_deferred_io_state. Allocate an instance as part of initializing deferred I/O and remove it only after the final mapping has been closed. If the fb_info and the contained deferred I/O meanwhile goes away, clear struct fb_deferred_io_state.info to invalidate the mapping. Any access will then result in a SIGBUS signal. Fixes a long-standing problem, where a device hot-unplug happens while user space still has an active mapping of the graphics memory. The hot- unplug frees the instance of struct fb_info. Accessing the memory will operate on undefined state. v2: - use kzalloc_obj() Signed-off-by: Thomas Zimmermann Fixes: 60b59beafba8 ("fbdev: mm: Deferred IO support") Cc: Helge Deller Cc: linux-fbdev@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: # v2.6.22+ --- drivers/video/fbdev/core/fb_defio.c | 178 ++++++++++++++++++++++------ include/linux/fb.h | 4 +- 2 files changed, 145 insertions(+), 37 deletions(-) diff --git a/drivers/video/fbdev/core/fb_defio.c b/drivers/video/fbdev/core/fb_defio.c index ca48b89a323d..93bd2f696fa4 100644 --- a/drivers/video/fbdev/core/fb_defio.c +++ b/drivers/video/fbdev/core/fb_defio.c @@ -24,6 +24,75 @@ #include #include +/* + * struct fb_deferred_io_state + */ + +struct fb_deferred_io_state { + struct kref ref; + + struct mutex lock; /* mutex that protects the pageref list */ + /* fields protected by lock */ + struct fb_info *info; +}; + +static struct fb_deferred_io_state *fb_deferred_io_state_alloc(void) +{ + struct fb_deferred_io_state *fbdefio_state; + + fbdefio_state = kzalloc_obj(*fbdefio_state); + if (!fbdefio_state) + return NULL; + + kref_init(&fbdefio_state->ref); + mutex_init(&fbdefio_state->lock); + + return fbdefio_state; +} + +static void fb_deferred_io_state_release(struct fb_deferred_io_state *fbdefio_state) +{ + mutex_destroy(&fbdefio_state->lock); + + kfree(fbdefio_state); +} + +static void fb_deferred_io_state_get(struct fb_deferred_io_state *fbdefio_state) +{ + kref_get(&fbdefio_state->ref); +} + +static void __fb_deferred_io_state_release(struct kref *ref) +{ + struct fb_deferred_io_state *fbdefio_state = + container_of(ref, struct fb_deferred_io_state, ref); + + fb_deferred_io_state_release(fbdefio_state); +} + +static void fb_deferred_io_state_put(struct fb_deferred_io_state *fbdefio_state) +{ + kref_put(&fbdefio_state->ref, __fb_deferred_io_state_release); +} + +/* + * struct vm_operations_struct + */ + +static void fb_deferred_io_vm_open(struct vm_area_struct *vma) +{ + struct fb_deferred_io_state *fbdefio_state = vma->vm_private_data; + + fb_deferred_io_state_get(fbdefio_state); +} + +static void fb_deferred_io_vm_close(struct vm_area_struct *vma) +{ + struct fb_deferred_io_state *fbdefio_state = vma->vm_private_data; + + fb_deferred_io_state_put(fbdefio_state); +} + static struct page *fb_deferred_io_get_page(struct fb_info *info, unsigned long offs) { struct fb_deferred_io *fbdefio = info->fbdefio; @@ -121,25 +190,46 @@ static void fb_deferred_io_pageref_put(struct fb_deferred_io_pageref *pageref, /* this is to find and return the vmalloc-ed fb pages */ static vm_fault_t fb_deferred_io_fault(struct vm_fault *vmf) { + struct fb_info *info; unsigned long offset; struct page *page; - struct fb_info *info = vmf->vma->vm_private_data; + vm_fault_t ret; + struct fb_deferred_io_state *fbdefio_state = vmf->vma->vm_private_data; + + mutex_lock(&fbdefio_state->lock); + + info = fbdefio_state->info; + if (!info) { + ret = VM_FAULT_SIGBUS; /* our device is gone */ + goto err_mutex_unlock; + } offset = vmf->pgoff << PAGE_SHIFT; - if (offset >= info->fix.smem_len) - return VM_FAULT_SIGBUS; + if (offset >= info->fix.smem_len) { + ret = VM_FAULT_SIGBUS; + goto err_mutex_unlock; + } page = fb_deferred_io_get_page(info, offset); - if (!page) - return VM_FAULT_SIGBUS; + if (!page) { + ret = VM_FAULT_SIGBUS; + goto err_mutex_unlock; + } if (!vmf->vma->vm_file) fb_err(info, "no mapping available\n"); BUG_ON(!info->fbdefio->mapping); + mutex_unlock(&fbdefio_state->lock); + vmf->page = page; + return 0; + +err_mutex_unlock: + mutex_unlock(&fbdefio_state->lock); + return ret; } int fb_deferred_io_fsync(struct file *file, loff_t start, loff_t end, int datasync) @@ -166,15 +256,24 @@ EXPORT_SYMBOL_GPL(fb_deferred_io_fsync); * Adds a page to the dirty list. Call this from struct * vm_operations_struct.page_mkwrite. */ -static vm_fault_t fb_deferred_io_track_page(struct fb_info *info, unsigned long offset, - struct page *page) +static vm_fault_t fb_deferred_io_track_page(struct fb_deferred_io_state *fbdefio_state, + unsigned long offset, struct page *page) { - struct fb_deferred_io *fbdefio = info->fbdefio; + struct fb_info *info; + struct fb_deferred_io *fbdefio; struct fb_deferred_io_pageref *pageref; vm_fault_t ret; /* protect against the workqueue changing the page list */ - mutex_lock(&fbdefio->lock); + mutex_lock(&fbdefio_state->lock); + + info = fbdefio_state->info; + if (!info) { + ret = VM_FAULT_SIGBUS; /* our device is gone */ + goto err_mutex_unlock; + } + + fbdefio = info->fbdefio; pageref = fb_deferred_io_pageref_get(info, offset, page); if (WARN_ON_ONCE(!pageref)) { @@ -192,50 +291,38 @@ static vm_fault_t fb_deferred_io_track_page(struct fb_info *info, unsigned long */ lock_page(pageref->page); - mutex_unlock(&fbdefio->lock); + mutex_unlock(&fbdefio_state->lock); /* come back after delay to process the deferred IO */ schedule_delayed_work(&info->deferred_work, fbdefio->delay); return VM_FAULT_LOCKED; err_mutex_unlock: - mutex_unlock(&fbdefio->lock); + mutex_unlock(&fbdefio_state->lock); return ret; } -/* - * fb_deferred_io_page_mkwrite - Mark a page as written for deferred I/O - * @fb_info: The fbdev info structure - * @vmf: The VM fault - * - * This is a callback we get when userspace first tries to - * write to the page. We schedule a workqueue. That workqueue - * will eventually mkclean the touched pages and execute the - * deferred framebuffer IO. Then if userspace touches a page - * again, we repeat the same scheme. - * - * Returns: - * VM_FAULT_LOCKED on success, or a VM_FAULT error otherwise. - */ -static vm_fault_t fb_deferred_io_page_mkwrite(struct fb_info *info, struct vm_fault *vmf) +static vm_fault_t fb_deferred_io_page_mkwrite(struct fb_deferred_io_state *fbdefio_state, + struct vm_fault *vmf) { unsigned long offset = vmf->pgoff << PAGE_SHIFT; struct page *page = vmf->page; file_update_time(vmf->vma->vm_file); - return fb_deferred_io_track_page(info, offset, page); + return fb_deferred_io_track_page(fbdefio_state, offset, page); } -/* vm_ops->page_mkwrite handler */ static vm_fault_t fb_deferred_io_mkwrite(struct vm_fault *vmf) { - struct fb_info *info = vmf->vma->vm_private_data; + struct fb_deferred_io_state *fbdefio_state = vmf->vma->vm_private_data; - return fb_deferred_io_page_mkwrite(info, vmf); + return fb_deferred_io_page_mkwrite(fbdefio_state, vmf); } static const struct vm_operations_struct fb_deferred_io_vm_ops = { + .open = fb_deferred_io_vm_open, + .close = fb_deferred_io_vm_close, .fault = fb_deferred_io_fault, .page_mkwrite = fb_deferred_io_mkwrite, }; @@ -252,7 +339,10 @@ int fb_deferred_io_mmap(struct fb_info *info, struct vm_area_struct *vma) vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP); if (!(info->flags & FBINFO_VIRTFB)) vm_flags_set(vma, VM_IO); - vma->vm_private_data = info; + vma->vm_private_data = info->fbdefio_state; + + fb_deferred_io_state_get(info->fbdefio_state); /* released in vma->vm_ops->close() */ + return 0; } EXPORT_SYMBOL_GPL(fb_deferred_io_mmap); @@ -263,9 +353,10 @@ static void fb_deferred_io_work(struct work_struct *work) struct fb_info *info = container_of(work, struct fb_info, deferred_work.work); struct fb_deferred_io_pageref *pageref, *next; struct fb_deferred_io *fbdefio = info->fbdefio; + struct fb_deferred_io_state *fbdefio_state = info->fbdefio_state; /* here we wrprotect the page's mappings, then do all deferred IO. */ - mutex_lock(&fbdefio->lock); + mutex_lock(&fbdefio_state->lock); #ifdef CONFIG_MMU list_for_each_entry(pageref, &fbdefio->pagereflist, list) { struct page *page = pageref->page; @@ -283,12 +374,13 @@ static void fb_deferred_io_work(struct work_struct *work) list_for_each_entry_safe(pageref, next, &fbdefio->pagereflist, list) fb_deferred_io_pageref_put(pageref, info); - mutex_unlock(&fbdefio->lock); + mutex_unlock(&fbdefio_state->lock); } int fb_deferred_io_init(struct fb_info *info) { struct fb_deferred_io *fbdefio = info->fbdefio; + struct fb_deferred_io_state *fbdefio_state; struct fb_deferred_io_pageref *pagerefs; unsigned long npagerefs; int ret; @@ -298,7 +390,11 @@ int fb_deferred_io_init(struct fb_info *info) if (WARN_ON(!info->fix.smem_len)) return -EINVAL; - mutex_init(&fbdefio->lock); + fbdefio_state = fb_deferred_io_state_alloc(); + if (!fbdefio_state) + return -ENOMEM; + fbdefio_state->info = info; + INIT_DELAYED_WORK(&info->deferred_work, fb_deferred_io_work); INIT_LIST_HEAD(&fbdefio->pagereflist); if (fbdefio->delay == 0) /* set a default of 1 s */ @@ -315,10 +411,12 @@ int fb_deferred_io_init(struct fb_info *info) info->npagerefs = npagerefs; info->pagerefs = pagerefs; + info->fbdefio_state = fbdefio_state; + return 0; err: - mutex_destroy(&fbdefio->lock); + fb_deferred_io_state_release(fbdefio_state); return ret; } EXPORT_SYMBOL_GPL(fb_deferred_io_init); @@ -352,11 +450,19 @@ EXPORT_SYMBOL_GPL(fb_deferred_io_release); void fb_deferred_io_cleanup(struct fb_info *info) { struct fb_deferred_io *fbdefio = info->fbdefio; + struct fb_deferred_io_state *fbdefio_state = info->fbdefio_state; fb_deferred_io_lastclose(info); + info->fbdefio_state = NULL; + + mutex_lock(&fbdefio_state->lock); + fbdefio_state->info = NULL; + mutex_unlock(&fbdefio_state->lock); + + fb_deferred_io_state_put(fbdefio_state); + kvfree(info->pagerefs); - mutex_destroy(&fbdefio->lock); fbdefio->mapping = NULL; } EXPORT_SYMBOL_GPL(fb_deferred_io_cleanup); diff --git a/include/linux/fb.h b/include/linux/fb.h index 6d4a58084fd5..aed17567fe50 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -218,13 +218,14 @@ struct fb_deferred_io { unsigned long delay; bool sort_pagereflist; /* sort pagelist by offset */ int open_count; /* number of opened files; protected by fb_info lock */ - struct mutex lock; /* mutex that protects the pageref list */ struct list_head pagereflist; /* list of pagerefs for touched pages */ struct address_space *mapping; /* page cache object for fb device */ /* callback */ struct page *(*get_page)(struct fb_info *info, unsigned long offset); void (*deferred_io)(struct fb_info *info, struct list_head *pagelist); }; + +struct fb_deferred_io_state; #endif /* @@ -487,6 +488,7 @@ struct fb_info { unsigned long npagerefs; struct fb_deferred_io_pageref *pagerefs; struct fb_deferred_io *fbdefio; + struct fb_deferred_io_state *fbdefio_state; #endif const struct fb_ops *fbops; -- 2.52.0 From - Tue Feb 24 08:31:09 2026 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id oMs/E8lhnWleAioAYBR5ng (envelope-from ) for ; Tue, 24 Feb 2026 08:31:05 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Tue, 24 Feb 2026 08:31:05 +0000 Received: from tor.lore.kernel.org ([172.105.105.114]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1vunou-0000000BkDy-1kMp for hi@josie.lol; Tue, 24 Feb 2026 08:31:05 +0000 Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by tor.lore.kernel.org (Postfix) with ESMTP id 8ABAA3031B1F for ; Tue, 24 Feb 2026 08:31:03 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 7769F366827; Tue, 24 Feb 2026 08:31:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=foxmail.com header.i=@foxmail.com header.b="ZtjWJuRE" X-Original-To: stable@vger.kernel.org Received: from out162-62-57-210.mail.qq.com (out162-62-57-210.mail.qq.com [162.62.57.210]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 803D013DBA0 for ; Tue, 24 Feb 2026 08:30:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=162.62.57.210 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771921861; cv=none; b=eSLyKsN22/DlsfrWLMRwCXCICBrzyUiPZZrbxfnK0CTZnUuRShFZ3mxUExZENDTn9C+AVrU5LLtUzxhY8VdRhoxmN1o499NttPdljvFTk42X0o50oZsp93g5Q6VAvyt8lGvRZaPJx8ymxSYtYNIFASnZgrStH9oAyGISdabD2Eg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771921861; c=relaxed/simple; bh=WADcdGXCoslAaneV5m2SgHVCPXT/9Ed7MDtsogC7iBM=; h=Message-ID:From:To:Cc:Subject:Date:MIME-Version; b=Lr06BgxFj6j7IC3V6j4I0mmk6Nb1QmoMhMT2IpuVstZnZeqSpBfDir7M5f5D5dpIQEjiO8bQliEbmyPOkPSgBmU4uc5RkbQhtmcc77VJWngJFb/CLH+UljZoJvxpcXsCjUPdILhFAc2zRFexHsZxfRT5PM65eZV1Lc3g2tfbWkU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foxmail.com; spf=pass smtp.mailfrom=foxmail.com; dkim=pass (1024-bit key) header.d=foxmail.com header.i=@foxmail.com header.b=ZtjWJuRE; arc=none smtp.client-ip=162.62.57.210 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foxmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foxmail.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1771921845; bh=Eign7jUK1zEqGWwqMuCmgxU7FIGP40VhdHOKRcXbIxc=; h=From:To:Cc:Subject:Date; b=ZtjWJuREpvjZZLvIglHQx91CHeysIRU8SUUCfGB0FrY8WcPmlRW64rcVk3D4q4Qe7 Jz2iATUAbsUNr4RtKzalzRcnpG4IABeZZ72AAodB9yDqhAsgFF+fAQC7YaL3YIllSf 9pHjqLuq7yBVKDZ2uSVKLs/tltc9aF4p0WMyf6EI= Received: from ubuntu24.corp.ad.wrs.com ([120.244.194.215]) by newxmesmtplogicsvrszb51-0.qq.com (NewEsmtp) with SMTP id 6A3B6442; Tue, 24 Feb 2026 15:26:35 +0800 X-QQ-mid: xmsmtpt1771917995t5oyc3vzs Message-ID: X-QQ-XMAILINFO: MiBwBRx9btb5UID/33LMZq1i8RPYpjDJjyvtEoJ4L5ElFxdFk5mMcjfUnrRyiG c4Q9zYdRs9ekP0lw1yCMXQHjWkLNkI7G+DHCer38crdUBnglV3g9SNph36ff+hHT765bxIY7CKyr fExXJkY2/pyG2mWkTaz9B5iaCCak9ewgHo/mlaq2FAiuzydTSEe2exNmXnCi1YhMYllTvK1c0cEO /3zZcKHUQkUpeKgou7mHUJMLpa9ueKQ/VymlTRJfDeoUFrkEf85nhizekldRFWJMIcqU3xFVojYK 299x3V9sEm17GiM/2WLBIbozHCblkm49ue7V9mzga+YLUdGycA4qGlsv39GdT4tuA4Odk3WoVYQ2 6F200OSiX+Ra+/y71nMJlpBu4HthNJJXAfc2/t7T6OvNxISALAuiWYTK5IRb2t8KlxJlP6n42su5 h1r+LmmvjjYlhfDzRxLQozHEcJDlydZ9Gyi6FhoKHAt5p0a5YnHtGFBZPgGjIwanOOcWxZNyJohc GxD1+UuwOxxjJtpzPoEOMgAlT4Z6uiS46TEeKkxDr/1I2QGtlJYP2UbXkMMHiwDTZPArGJYPz93A GPNBx6BPwa60EbOdmudDirSAYgaBj+IqGtvIMkbdvGnj20Z13yGHSPR3SMBPbgixM+bkVXiVnCvz cyV8yIq/K1sfL+ZPwQaxzg6i7u5Y8z7tNUSLKZKVnhFW1S6hOEetfuxFFsh0+B9LG6ZLUnTSqsAQ zy4Ye/6K5N4wfr8NnlpDHb5XjxHse9LbF6T98X+NL40G2nB5dwDz1zAL0JYa8j8YRX9nihCIzSx4 LKGuDeEe77oQlG3gHOmWyAd8qpjjiETYOMrB69J6290ts74/cFhg4fVi4PSieWJ5M8KuTX5PAxl2 2ahSPL3ycYBcjBczRGyS53z8ATDWvLAby4reMu+hX/8O16o6louEr5uj9GsSwgUWWtVZdnLTd7wq gUoisUpTE7fh4dT2Y/9JLAxgEdeY5DvKzMzUDtjmc6DsA4k6KjX7zBEAcs6G9xosoXdVerDlzQey ClUP9km1OqugoqFqpmS7V1zywwXtq7aWnOI0iedzsejtmHVfHz65GlesIH8onerHOv7RQDlzmFOk ZoWdTf X-QQ-XMRINFO: MPJ6Tf5t3I/ylTmHUqvI8+Wpn+Gzalws3A== From: alvalan9@foxmail.com To: stable@vger.kernel.org, gregkh@linuxfoundation.org Cc: Keith Busch , Ming Lei , Christoph Hellwig , Jens Axboe , Alva Lan Subject: [PATCH 5.15.y] blk-mq: use quiesced elevator switch when reinitializing queues Date: Tue, 24 Feb 2026 07:26:24 +0000 X-OQ-MSGID: <20260224072624.4519-1-alvalan9@foxmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='foxmail.com' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 0.4 (/) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://docs.mxroute.com/docs/expert-spam-filtering.html --- Content analysis details: (0.4 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: foxmail.com] 0.0 URIBL_DBL_BLOCKED_OPENDNS ADMINISTRATOR NOTICE: The query to dbl.spamhaus.org was blocked due to usage of an open resolver. See https://www.spamhaus.org/returnc/pub/ [URIs: foxmail.com] 0.0 RCVD_IN_ZEN_BLOCKED_OPENDNS RBL: ADMINISTRATOR NOTICE: The query to zen.spamhaus.org was blocked due to usage of an open resolver. See https://www.spamhaus.org/returnc/pub/ [172.105.105.114 listed in zen.spamhaus.org] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [172.105.105.114 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [alvalan9[at]foxmail.com] 0.0 URIBL_ZEN_BLOCKED_OPENDNS ADMINISTRATOR NOTICE: The query to zen.spamhaus.org was blocked due to usage of an open resolver. See https://www.spamhaus.org/returnc/pub/ [URIs: foxmail.com] 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.0 FREEMAIL_FORGED_FROMDOMAIN 2nd level domains in From and EnvelopeFrom freemail headers are different -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager SpamTally: Final spam score: 4 From: Keith Busch [ Upstream commit 8237c01f1696bc53c470493bf1fe092a107648a6 ] The hctx's run_work may be racing with the elevator switch when reinitializing hardware queues. The queue is merely frozen in this context, but that only prevents requests from allocating and doesn't stop the hctx work from running. The work may get an elevator pointer that's being torn down, and can result in use-after-free errors and kernel panics (example below). Use the quiesced elevator switch instead, and make the previous one static since it is now only used locally. nvme nvme0: resetting controller nvme nvme0: 32/0/0 default/read/poll queues BUG: kernel NULL pointer dereference, address: 0000000000000008 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page PGD 80000020c8861067 P4D 80000020c8861067 PUD 250f8c8067 PMD 0 Oops: 0000 [#1] SMP PTI Workqueue: kblockd blk_mq_run_work_fn RIP: 0010:kyber_has_work+0x29/0x70 ... Call Trace: __blk_mq_do_dispatch_sched+0x83/0x2b0 __blk_mq_sched_dispatch_requests+0x12e/0x170 blk_mq_sched_dispatch_requests+0x30/0x60 __blk_mq_run_hw_queue+0x2b/0x50 process_one_work+0x1ef/0x380 worker_thread+0x2d/0x3e0 Signed-off-by: Keith Busch Reviewed-by: Ming Lei Reviewed-by: Christoph Hellwig Link: https://lore.kernel.org/r/20220927155652.3260724-1-kbusch@fb.com Signed-off-by: Jens Axboe [ Adjust context ] Signed-off-by: Alva Lan --- block/blk-mq.c | 6 +++--- block/blk.h | 3 +-- block/elevator.c | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/block/blk-mq.c b/block/blk-mq.c index 48827708200b..17795b3ae7f3 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -3732,14 +3732,14 @@ static bool blk_mq_elv_switch_none(struct list_head *head, mutex_lock(&q->sysfs_lock); /* - * After elevator_switch_mq, the previous elevator_queue will be + * After elevator_switch, the previous elevator_queue will be * released by elevator_release. The reference of the io scheduler * module get by elevator_get will also be put. So we need to get * a reference of the io scheduler module here to prevent it to be * removed. */ __module_get(qe->type->elevator_owner); - elevator_switch_mq(q, NULL); + elevator_switch(q, NULL); mutex_unlock(&q->sysfs_lock); return true; @@ -3764,7 +3764,7 @@ static void blk_mq_elv_switch_back(struct list_head *head, kfree(qe); mutex_lock(&q->sysfs_lock); - elevator_switch_mq(q, t); + elevator_switch(q, t); mutex_unlock(&q->sysfs_lock); } diff --git a/block/blk.h b/block/blk.h index e90a5e348512..07f571e1ece0 100644 --- a/block/blk.h +++ b/block/blk.h @@ -189,8 +189,7 @@ void blk_account_io_done(struct request *req, u64 now); void blk_insert_flush(struct request *rq); -int elevator_switch_mq(struct request_queue *q, - struct elevator_type *new_e); +int elevator_switch(struct request_queue *q, struct elevator_type *new_e); void __elevator_exit(struct request_queue *, struct elevator_queue *); int elv_register_queue(struct request_queue *q, bool uevent); void elv_unregister_queue(struct request_queue *q); diff --git a/block/elevator.c b/block/elevator.c index a98e8356f1b8..0d1edf1f0503 100644 --- a/block/elevator.c +++ b/block/elevator.c @@ -581,7 +581,7 @@ void elv_unregister(struct elevator_type *e) } EXPORT_SYMBOL_GPL(elv_unregister); -int elevator_switch_mq(struct request_queue *q, +static int elevator_switch_mq(struct request_queue *q, struct elevator_type *new_e) { int ret; @@ -719,7 +719,7 @@ void elevator_init_mq(struct request_queue *q) * need for the new one. this way we have a chance of going back to the old * one, if the new one fails init for some reason. */ -static int elevator_switch(struct request_queue *q, struct elevator_type *new_e) +int elevator_switch(struct request_queue *q, struct elevator_type *new_e) { int err; -- 2.43.0 From - Tue Feb 24 08:35:35 2026 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id 4PLXMdJinWm3HSsAYBR5ng (envelope-from ) for ; Tue, 24 Feb 2026 08:35:30 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Tue, 24 Feb 2026 08:35:31 +0000 Received: from sin.lore.kernel.org ([104.64.211.4]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1vuntB-0000000BtHO-38u5 for hi@josie.lol; Tue, 24 Feb 2026 08:35:30 +0000 Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by sin.lore.kernel.org (Postfix) with ESMTP id AB551301CABF for ; Tue, 24 Feb 2026 08:35:20 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8AC9E366813; Tue, 24 Feb 2026 08:35:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="fHAqpCi5" X-Original-To: stable@vger.kernel.org Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010020.outbound.protection.outlook.com [52.101.201.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4DD201F30A9; Tue, 24 Feb 2026 08:35:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.20 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771922118; cv=fail; b=B3XsTJsr3BarWT2su4ITQ355Duth+mHR1x6AZ1ROd/Hds26G4/R32p/8FhA+i2JiZqhSRt7Y/AxAHWSRncUqfrnrc9df88ZrUVQCDazITo60juExY8giURHmQhG4BnmE5YMOn1ew5fLY3LJIqENV32V6xUoW6kZy2JR1Bg3zHAU= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771922118; c=relaxed/simple; bh=daDnOZujKP3brDfqHLN07i9xB4Hp+DmwSErRapp for josie.health to ensure the static file serving is set up correctly.","signature":"EpQCCkYICxgCKkAxPG6qi4aul2ASub/npECddTD8pNYehxf8FAXLESmOA3ZO78SUSuprCCiLUtZKzSzXcqqqbYpautK4Hj6cSNktEgyp9ErS1YyNR5nux50aDI3253k7BURzxmyyUiIw8wwHIbZpJXkBkkX8sPUyltPmVcoexA18DCYnpq+JGt5dni2o1HM+zFzqUBQZK1cfKnz9oRo8m4V/NkOsHMvRH3zG/Gzsm+hpSp51wda+sFshjyiDcDmWzX9ZmtDNpsbmLuLxd3hXZR+uEh5MjYdnWwdHpi36FbHKIsFV7qtgI4WdGkreEw9ehTh6KQf+5Tec7xLqIb+ia2Oz3Kl/Srdu7UFRp6In3uVLc1K5QlFmGAE="}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":8,"cache_creation_input_tokens":276,"cache_read_input_tokens":60036,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":276},"output_tokens":1,"service_tier":"standard"}},"requestId":"req_011CXoDTtZjaSyYUnu6ZMhHM","type":"assistant","uuid":"36b66692-c115-4d11-8904-2a73a7dbc09e","timestamp":"2026-02-04T14:50:33.153Z"} {"parentUuid":"36b66692-c115-4d11-8904-2a73a7dbc09e","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot","sessionId":"6d63b5be-290c-4d79-950e-6123e10d728c","version":"2.1.29","gitBranch":"","slug":"purring-rolling-treasure","message":{"model":"claude-opus-4-5-20251101","id":"msg_01LdnCkiDVTZR4ze8CHMdH1z","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01H8Utb8ozkciJnrhFbBtBE8","name":"Bash","input":{"command":"head -100 /home/josie/development/personal/josiedot/health/services/web/src/josie-health-web.cr 2>/dev/null || ls -la /home/josie/development/personal/josiedot/health/services/web/src/","description":"Check Crystal web app source"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":8,"cache_creation_input_tokens":276,"cache_read_input_tokens":60036,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":276},"output_tokens":1,"service_tier":"standard"}},"requestId":"req_011CXoDTtZjaSyYUnu6ZMhHM","type":"assistant","uuid":"82063da8-351a-47d7-ada1-28bcc4b78478","timestamp":"2026-02-04T14:50:34.294Z"} {"parentUuid":"82063da8-351a-47d7-ada1-28bcc4b78478","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot","sessionId":"6d63b5be-290c-4d79-950e-6123e10d728c","version":"2.1.29","gitBranch":"","slug":"purring-rolling-treasure","type":"progress","data":{"type":"hook_progress","hookEvent":"PreToolUse","hookName":"PreToolUse:Bash","command":"python3 ${CLAUDE_PLUGIN_ROOT}/hooks/pretooluse.py"},"toolUseID":"toolu_01H8Utb8ozkciJnrhFbBtBE8","parentToolUseID":"toolu_01H8Utb8ozkciJnrhFbBtBE8","uuid":"fea96817-01a8-43f5-8346-89b32d1754a4","timestamp":"2026-02-04T14:50:34.296Z"} {"parentUuid":"fea96817-01a8-43f5-8346-89b32d1754a4","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot","sessionId":"6d63b5be-290c-4d79-950e-6123e10d728c","version":"2.1.29","gitBranch":"","slug":"purring-rolling-treasure","type":"progress","data":{"type":"hook_progress","hookEvent":"PostToolUse","hookName":"PostToolUse:Bash","command":"python3 ${CLAUDE_PLUGIN_ROOT}/hooks/posttooluse.py"},"parentToolUseID":"toolu_01H8Utb8ozkciJnrhFbBtBE8","toolUseID":"toolu_01H8Utb8ozkciJnrhFbBtBE8","timestamp":"2026-02-04T14:50:34.360Z","uuid":"ea0d5c44-252c-4e27-bba2-a2c477ad8e96"} {"parentUuid":"82063da8-351a-47d7-ada1-28bcc4b78478","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot","sessionId":"6d63b5be-290c-4d79-950e-6123e10d728c","version":"2.1.29","gitBranch":"","slug":"purring-rolling-treasure","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01H8Utb8ozkciJnrhFbBtBE8","type":"tool_result","content":"total 48\ndrwxr-xr-x 5 josie wheel 4096 Jan 9 17:36 .\ndrwxr-xr-x 6 josie wheel 4096 Jan 10 11:31 ..\n-rw------- 1 josie wheel 6640 Jan 9 17:22 api_client.cr\ndrwxr-xr-x 2 josie wheel 4096 Jan 9 20:03 handlers\n-rw------- 1 josie wheel 1196 Jan 9 17:33 main.cr\ndrwxr-xr-x 2 josie wheel 4096 Jan 9 20:22 middleware\n-rw------- 1 josie wheel 11103 Jan 9 17:36 router.cr\n-rw------- 1 josie wheel 4084 Jan 9 17:33 session_manager.cr\ndrwxr-xr-x 9 josie wheel 4096 Jan 7 19:52 views","is_error":false}]},"uuid":"7651419e-b745-450d-b398-b5aec3f8e8a7","timestamp":"2026-02-04T14:50:34.359Z","toolUseResult":{"stdout":"total 48\ndrwxr-xr-x 5 josie wheel 4096 Jan 9 17:36 .\ndrwxr-xr-x 6 josie wheel 4096 Jan 10 11:31 ..\n-rw------- 1 josie wheel 6640 Jan 9 17:22 api_client.cr\ndrwxr-xr-x 2 josie wheel 4096 Jan 9 20:03 handlers\n-rw------- 1 josie wheel 1196 Jan 9 17:33 main.cr\ndrwxr-xr-x 2 josie wheel 4096 Jan 9 20:22 middleware\n-rw------- 1 josie wheel 11103 Jan 9 17:36 router.cr\n-rw------- 1 josie wheel 4084 Jan 9 17:33 session_manager.cr\ndrwxr-xr-x 9 josie wheel 4096 Jan 7 19:52 views","stderr":"","interrupted":false,"isImage":false},"sourceToolAssistantUUID":"82063da8-351a-47d7-ada1-28bcc4b78478"} {"parentUuid":"7651419e-b745-450d-b398-b5aec3f8e8a7","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot","sessionId":"6d63b5be-290c-4d79-950e-6123e10d728c","version":"2.1.29","gitBranch":"","slug":"purring-rolling-treasure","message":{"model":"claude-opus-4-5-20251101","id":"msg_019s9ntoqCfZZjAKq417rW5j","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Let me check the router to see how static files are served.","signature":"EuMBCkYICxgCKkCqe/rn8e9K4yY4wC5iXlvHXzjGlAcfy0xDDCEpcJ7L7o73xruzLxLqZdtQhcOPMTrvyR0bReEcLxFRq4nhw5yfEgxubmOVFO85jBJm6oMaDJoIKb30iMc43fOUWiIwKNybvrVUAM2Rkbsdw7m/UoL2ELFTeMKt7veEe2KyOM+pZzcnChYWjRISfPdi2M/iKkvdIlbG5P3piiPhjGZAAAgZzK5nNmXJUXm+tyEu8+bav56Q7TocdesjOzLfj9LhpdnfcTANDf9I/9ulaSzjSPb4z5x6JmqCO6rLpt0YAQ=="}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":8,"cache_creation_input_tokens":449,"cache_read_input_tokens":60312,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":449},"output_tokens":1,"service_tier":"standard"}},"requestId":"req_011CXoDUAb9824inZQfbK2KL","type":"assistant","uuid":"f5020bd5-1558-44d0-9368-473d9c40f06b","timestamp":"2026-02-04T14:50:36.767Z"} {"parentUuid":"f5020bd5-1558-44d0-9368-473d9c40f06b","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot","sessionId":"6d63b5be-290c-4d79-950e-6123e10d728c","version":"2.1.29","gitBranch":"","slug":"purring-rolling-treasure","message":{"model":"claude-opus-4-5-20251101","id":"msg_019s9ntoqCfZZjAKq417rW5j","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01G72TA29vi9wFiS82Ww6rez","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/web/src/router.cr"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":8,"cache_creation_input_tokens":449,"cache_read_input_tokens":60312,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":449},"output_tokens":1,"service_tier":"standard"}},"requestId":"req_011CXoDUAb9824inZQfbK2KL","type":"assistant","uuid":"a1e9247b-d64d-4dad-a220-1379d450c0e0","timestamp":"2026-02-04T14:50:37.233Z"} {"parentUuid":"a1e9247b-d64d-4dad-a220-1379d450c0e0","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot","sessionId":"6d63b5be-290c-4d79-950e-6123e10d728c","version":"2.1.29","gitBranch":"","slug":"purring-rolling-treasure","type":"progress","data":{"type":"hook_progress","hookEvent":"PreToolUse","hookName":"PreToolUse:Read","command":"python3 ${CLAUDE_PLUGIN_ROOT}/hooks/pretooluse.py"},"toolUseID":"toolu_01G72TA29vi9wFiS82Ww6rez","parentToolUseID":"toolu_01G72TA29vi9wFiS82Ww6rez","uuid":"3acf93fa-43ee-458c-a15c-42c695a38b5a","timestamp":"2026-02-04T14:50:37.234Z"} {"parentUuid":"3acf93fa-43ee-458c-a15c-42c695a38b5a","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot","sessionId":"6d63b5be-290c-4d79-950e-6123e10d728c","version":"2.1.29","gitBranch":"","slug":"purring-rolling-treasure","type":"progress","data":{"type":"hook_progress","hookEvent":"PostToolUse","hookName":"PostToolUse:Read","command":"python3 ${CLAUDE_PLUGIN_ROOT}/hooks/posttooluse.py"},"parentToolUseID":"toolu_01G72TA29vi9wFiS82Ww6rez","toolUseID":"toolu_01G72TA29vi9wFiS82Ww6rez","timestamp":"2026-02-04T14:50:37.272Z","uuid":"44bca1eb-46c7-447a-b375-25193c0d6f8e"} {"parentUuid":"44bca1eb-46c7-447a-b375-25193c0d6f8e","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot","sessionId":"6d63b5be-290c-4d79-950e-6123e10d728c","version":"2.1.29","gitBranch":"","slug":"purring-rolling-treasure","type":"progress","data":{"type":"hook_progress","hookEvent":"PostToolUse","hookName":"PostToolUse:Read","command":"callback"},"parentToolUseID":"toolu_01G72TA29vi9wFiS82Ww6rez","toolUseID":"toolu_01G72TA29vi9wFiS82Ww6rez","timestamp":"2026-02-04T14:50:37.272Z","uuid":"c2ea77a1-56ac-4c02-bedf-3456da630be0"} {"parentUuid":"a1e9247b-d64d-4dad-a220-1379d450c0e0","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot","sessionId":"6d63b5be-290c-4d79-950e-6123e10d728c","version":"2.1.29","gitBranch":"","slug":"purring-rolling-treasure","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01G72TA29vi9wFiS82Ww6rez","type":"tool_result","content":" 1→require \"kemal\"\n 2→require \"ecr\"\n 3→require \"./handlers/auth_handler\"\n 4→require \"./handlers/substance_handler\"\n 5→require \"./handlers/keys_handler\"\n 6→require \"./handlers/account_handler\"\n 7→require \"./handlers/dose_handler\"\n 8→\n 9→module JosieHealth::Web\n 10→ class Router\n 11→ @@redis : Redis?\n 12→ @@session_manager : SessionManager?\n 13→ @@auth_handler : AuthHandler?\n 14→ @@substance_handler : SubstanceHandler?\n 15→ @@keys_handler : KeysHandler?\n 16→ @@account_handler : AccountHandler?\n 17→ @@dose_handler : DoseHandler?\n 18→\n 19→ def initialize(redis : Redis, session_manager : SessionManager)\n 20→ @@redis = redis\n 21→ @@session_manager = session_manager\n 22→ @@auth_handler = AuthHandler.new(redis, session_manager)\n 23→ @@substance_handler = SubstanceHandler.new\n 24→ @@keys_handler = KeysHandler.new\n 25→ @@account_handler = AccountHandler.new\n 26→ @@dose_handler = DoseHandler.new\n 27→ end\n 28→\n 29→ def self.redis : Redis\n 30→ @@redis.not_nil!\n 31→ end\n 32→\n 33→ def self.session_manager : SessionManager\n 34→ @@session_manager.not_nil!\n 35→ end\n 36→\n 37→ def self.auth_handler : AuthHandler\n 38→ @@auth_handler.not_nil!\n 39→ end\n 40→\n 41→ def self.substance_handler : SubstanceHandler\n 42→ @@substance_handler.not_nil!\n 43→ end\n 44→\n 45→ def self.keys_handler : KeysHandler\n 46→ @@keys_handler.not_nil!\n 47→ end\n 48→\n 49→ def self.account_handler : AccountHandler\n 50→ @@account_handler.not_nil!\n 51→ end\n 52→\n 53→ def self.dose_handler : DoseHandler\n 54→ @@dose_handler.not_nil!\n 55→ end\n 56→\n 57→ def setup_routes\n 58→ setup_static_files\n 59→ setup_health_check\n 60→ setup_public_pages\n 61→ setup_auth_routes\n 62→ setup_substance_routes\n 63→ setup_protected_pages\n 64→ setup_account_routes\n 65→ end\n 66→\n 67→ private def setup_static_files\n 68→ public_folder \"static\"\n 69→ end\n 70→\n 71→ private def setup_health_check\n 72→ get \"/health\" do |env|\n 73→ env.response.content_type = \"application/json\"\n 74→ redis_status = begin\n 75→ Router.redis.ping\n 76→ \"connected\"\n 77→ rescue ex\n 78→ \"error: #{ex.message}\"\n 79→ end\n 80→\n 81→ {\n 82→ status: \"ok\",\n 83→ service: \"josie-health-web\",\n 84→ redis_connection: redis_status,\n 85→ }.to_json\n 86→ end\n 87→ end\n 88→\n 89→ private def setup_public_pages\n 90→ get \"/\" do |env|\n 91→ title = \"josie.health\"\n 92→ render \"src/views/home.ecr\", \"src/views/layouts/application.ecr\"\n 93→ end\n 94→\n 95→ get \"/login\" do |env|\n 96→ title = \"login - josie.health\"\n 97→ render \"src/views/auth/login.ecr\", \"src/views/layouts/application.ecr\"\n 98→ end\n 99→ end\n 100→\n 101→ private def setup_auth_routes\n 102→ get \"/auth/discord\" do |env|\n 103→ Router.auth_handler.start_discord_oauth(env)\n 104→ end\n 105→\n 106→ get \"/auth/discord/callback\" do |env|\n 107→ Router.auth_handler.handle_discord_callback(env)\n 108→ end\n 109→\n 110→ get \"/auth/irc\" do |env|\n 111→ title = \"irc login - josie.health\"\n 112→ network, token, error_message = Router.auth_handler.start_irc_auth(env)\n 113→ csrf_token = Random::Secure.hex(16)\n 114→ env.response.cookies << HTTP::Cookie.new(name: \"irc_csrf\", value: csrf_token, path: \"/\", http_only: true)\n 115→ render \"src/views/auth/irc_auth.ecr\", \"src/views/layouts/application.ecr\"\n 116→ end\n 117→\n 118→ post \"/auth/irc\" do |env|\n 119→ title = \"irc login - josie.health\"\n 120→ network = env.params.body[\"network\"]? || \"\"\n 121→ csrf_token = env.params.body[\"_csrf\"]? || \"\"\n 122→\n 123→ if network.empty?\n 124→ error_message = \"please enter a network\"\n 125→ token = nil\n 126→ render \"src/views/auth/irc_auth.ecr\", \"src/views/layouts/application.ecr\"\n 127→ else\n 128→ token, instructions, error_message = Router.auth_handler.request_irc_token(env, network)\n 129→ csrf_token = Random::Secure.hex(16)\n 130→ env.response.cookies << HTTP::Cookie.new(name: \"irc_csrf\", value: csrf_token, path: \"/\", http_only: true)\n 131→ render \"src/views/auth/irc_auth.ecr\", \"src/views/layouts/application.ecr\"\n 132→ end\n 133→ end\n 134→\n 135→ get \"/auth/irc/status\" do |env|\n 136→ env.response.content_type = \"application/json\"\n 137→ token = env.params.query[\"token\"]? || \"\"\n 138→ verified, nick = Router.auth_handler.check_irc_status(env, token)\n 139→ {verified: verified, nick: nick}.to_json\n 140→ end\n 141→\n 142→ post \"/auth/irc/complete\" do |env|\n 143→ token = env.params.body[\"token\"]? || \"\"\n 144→ Router.auth_handler.complete_irc_auth(env, token)\n 145→ end\n 146→\n 147→ get \"/logout\" do |env|\n 148→ Router.auth_handler.logout(env)\n 149→ end\n 150→ end\n 151→\n 152→ private def setup_substance_routes\n 153→ get \"/substances\" do |env|\n 154→ title = \"substances - josie.health\"\n 155→ query, category, substances = Router.substance_handler.search(env)\n 156→ render \"src/views/substances/search.ecr\", \"src/views/layouts/application.ecr\"\n 157→ end\n 158→\n 159→ get \"/substances/interactions\" do |env|\n 160→ title = \"interactions - josie.health\"\n 161→ substance1, substance2, interaction = Router.substance_handler.check_interaction(env)\n 162→ render \"src/views/substances/interactions.ecr\", \"src/views/layouts/application.ecr\"\n 163→ end\n 164→\n 165→ get \"/substances/:name\" do |env|\n 166→ title = \"substance info - josie.health\"\n 167→ name = env.params.url[\"name\"]\n 168→ info, dosage, effects, duration = Router.substance_handler.info(env, name)\n 169→ render \"src/views/substances/info.ecr\", \"src/views/layouts/application.ecr\"\n 170→ end\n 171→ end\n 172→\n 173→ private def setup_protected_pages\n 174→ get \"/doses\" do |env|\n 175→ title = \"doses - josie.health\"\n 176→ user_id = env.get(\"user_id\").as(String)\n 177→ csrf_token = env.get(\"csrf_token\").as(String)\n 178→ doses = Router.dose_handler.list(user_id)\n 179→ success_message = nil\n 180→ error_message = nil\n 181→ render \"src/views/doses/index.ecr\", \"src/views/layouts/application.ecr\"\n 182→ end\n 183→\n 184→ post \"/doses\" do |env|\n 185→ title = \"doses - josie.health\"\n 186→ user_id = env.get(\"user_id\").as(String)\n 187→ csrf_token = env.get(\"csrf_token\").as(String)\n 188→ raw_dose = env.params.body[\"raw_dose\"]? || \"\"\n 189→\n 190→ if raw_dose.empty?\n 191→ error_message = \"please enter a dose\"\n 192→ success_message = nil\n 193→ else\n 194→ success, err = Router.dose_handler.add(user_id, raw_dose)\n 195→ if success\n 196→ success_message = \"dose logged\"\n 197→ error_message = nil\n 198→ else\n 199→ error_message = err || \"failed to log dose\"\n 200→ success_message = nil\n 201→ end\n 202→ end\n 203→\n 204→ doses = Router.dose_handler.list(user_id)\n 205→ render \"src/views/doses/index.ecr\", \"src/views/layouts/application.ecr\"\n 206→ end\n 207→\n 208→ post \"/doses/undose\" do |env|\n 209→ user_id = env.get(\"user_id\").as(String)\n 210→ Router.dose_handler.undose(user_id)\n 211→ env.redirect \"/doses\"\n 212→ end\n 213→\n 214→ get \"/doses/:timestamp/edit\" do |env|\n 215→ title = \"edit dose - josie.health\"\n 216→ user_id = env.get(\"user_id\").as(String)\n 217→ csrf_token = env.get(\"csrf_token\").as(String)\n 218→ timestamp = URI.decode_www_form(env.params.url[\"timestamp\"])\n 219→ dose = Router.dose_handler.get(user_id, timestamp)\n 220→ error_message = nil\n 221→ if dose\n 222→ render \"src/views/doses/edit.ecr\", \"src/views/layouts/application.ecr\"\n 223→ else\n 224→ env.redirect \"/doses\"\n 225→ end\n 226→ end\n 227→\n 228→ post \"/doses/:timestamp/edit\" do |env|\n 229→ title = \"edit dose - josie.health\"\n 230→ user_id = env.get(\"user_id\").as(String)\n 231→ csrf_token = env.get(\"csrf_token\").as(String)\n 232→ timestamp = URI.decode_www_form(env.params.url[\"timestamp\"])\n 233→\n 234→ substance = env.params.body[\"substance\"]? || \"\"\n 235→ amount = env.params.body[\"amount\"]? || \"\"\n 236→ route = env.params.body[\"route\"]? || \"\"\n 237→ note = env.params.body[\"annotation\"]? || \"\"\n 238→\n 239→ success, err = Router.dose_handler.update(user_id, timestamp, substance, amount, route, note)\n 240→ if success\n 241→ env.redirect \"/doses\"\n 242→ else\n 243→ dose = Router.dose_handler.get(user_id, timestamp)\n 244→ error_message = err || \"failed to update dose\"\n 245→ if dose\n 246→ render \"src/views/doses/edit.ecr\", \"src/views/layouts/application.ecr\"\n 247→ else\n 248→ env.redirect \"/doses\"\n 249→ end\n 250→ end\n 251→ end\n 252→\n 253→ post \"/doses/:timestamp/delete\" do |env|\n 254→ user_id = env.get(\"user_id\").as(String)\n 255→ timestamp = URI.decode_www_form(env.params.url[\"timestamp\"])\n 256→ Router.dose_handler.delete(user_id, timestamp)\n 257→ env.redirect \"/doses\"\n 258→ end\n 259→\n 260→ get \"/stats\" do |env|\n 261→ title = \"stats - josie.health\"\n 262→ user_id = env.get(\"user_id\").as(String)\n 263→ grafana_url = ENV[\"GRAFANA_URL\"]? || \"https://josie.health\"\n 264→ render \"src/views/stats/dashboard.ecr\", \"src/views/layouts/application.ecr\"\n 265→ end\n 266→\n 267→ get \"/keys\" do |env|\n 268→ title = \"api keys - josie.health\"\n 269→ user_id = env.get(\"user_id\").as(String)\n 270→ csrf_token = env.get(\"csrf_token\").as(String)\n 271→ keys, limit = Router.keys_handler.list(user_id)\n 272→ new_key = nil\n 273→ error_message = nil\n 274→ render \"src/views/api_keys/manage.ecr\", \"src/views/layouts/application.ecr\"\n 275→ end\n 276→\n 277→ post \"/keys\" do |env|\n 278→ title = \"api keys - josie.health\"\n 279→ user_id = env.get(\"user_id\").as(String)\n 280→ csrf_token = env.get(\"csrf_token\").as(String)\n 281→ name = env.params.body[\"name\"]? || \"unnamed\"\n 282→\n 283→ success, new_key, error_message = Router.keys_handler.create(user_id, name)\n 284→ keys, limit = Router.keys_handler.list(user_id)\n 285→\n 286→ render \"src/views/api_keys/manage.ecr\", \"src/views/layouts/application.ecr\"\n 287→ end\n 288→\n 289→ post \"/keys/:prefix/revoke\" do |env|\n 290→ user_id = env.get(\"user_id\").as(String)\n 291→ prefix = env.params.url[\"prefix\"]\n 292→\n 293→ Router.keys_handler.revoke(user_id, prefix)\n 294→ env.redirect \"/keys\"\n 295→ end\n 296→ end\n 297→\n 298→ private def setup_account_routes\n 299→ get \"/account\" do |env|\n 300→ title = \"account - josie.health\"\n 301→ user_id = env.get(\"user_id\").as(String)\n 302→ csrf_token = env.get(\"csrf_token\").as(String)\n 303→ linked_accounts, primary_account = Router.account_handler.get_linked(user_id)\n 304→ success_message = nil\n 305→ error_message = nil\n 306→ render \"src/views/account/manage.ecr\", \"src/views/layouts/application.ecr\"\n 307→ end\n 308→\n 309→ post \"/account/link\" do |env|\n 310→ title = \"account - josie.health\"\n 311→ user_id = env.get(\"user_id\").as(String)\n 312→ csrf_token = env.get(\"csrf_token\").as(String)\n 313→ secondary_user = env.params.body[\"secondary_user\"]? || \"\"\n 314→\n 315→ if secondary_user.empty?\n 316→ error_message = \"please enter a username to link\"\n 317→ success_message = nil\n 318→ else\n 319→ success, migrated, err = Router.account_handler.link(user_id, secondary_user)\n 320→ if success\n 321→ success_message = \"linked #{secondary_user}, migrated #{migrated} doses\"\n 322→ error_message = nil\n 323→ else\n 324→ error_message = err || \"failed to link account\"\n 325→ success_message = nil\n 326→ end\n 327→ end\n 328→\n 329→ linked_accounts, primary_account = Router.account_handler.get_linked(user_id)\n 330→ render \"src/views/account/manage.ecr\", \"src/views/layouts/application.ecr\"\n 331→ end\n 332→ end\n 333→ end\n 334→end\n 335→\n\n\nWhenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.\n\n"}]},"uuid":"d34e0a12-49c6-4a54-8030-edb418de3b26","timestamp":"2026-02-04T14:50:37.271Z","toolUseResult":{"type":"text","file":{"filePath":"/home/josie/development/personal/josiedot/health/services/web/src/router.cr","content":"require \"kemal\"\nrequire \"ecr\"\nrequire \"./handlers/auth_handler\"\nrequire \"./handlers/substance_handler\"\nrequire \"./handlers/keys_handler\"\nrequire \"./handlers/account_handler\"\nrequire \"./handlers/dose_handler\"\n\nmodule JosieHealth::Web\n class Router\n @@redis : Redis?\n @@session_manager : SessionManager?\n @@auth_handler : AuthHandler?\n @@substance_handler : SubstanceHandler?\n @@keys_handler : KeysHandler?\n @@account_handler : AccountHandler?\n @@dose_handler : DoseHandler?\n\n def initialize(redis : Redis, session_manager : SessionManager)\n @@redis = redis\n @@session_manager = session_manager\n @@auth_handler = AuthHandler.new(redis, session_manager)\n @@substance_handler = SubstanceHandler.new\n @@keys_handler = KeysHandler.new\n @@account_handler = AccountHandler.new\n @@dose_handler = DoseHandler.new\n end\n\n def self.redis : Redis\n @@redis.not_nil!\n end\n\n def self.session_manager : SessionManager\n @@session_manager.not_nil!\n end\n\n def self.auth_handler : AuthHandler\n @@auth_handler.not_nil!\n end\n\n def self.substance_handler : SubstanceHandler\n @@substance_handler.not_nil!\n end\n\n def self.keys_handler : KeysHandler\n @@keys_handler.not_nil!\n end\n\n def self.account_handler : AccountHandler\n @@account_handler.not_nil!\n end\n\n def self.dose_handler : DoseHandler\n @@dose_handler.not_nil!\n end\n\n def setup_routes\n setup_static_files\n setup_health_check\n setup_public_pages\n setup_auth_routes\n setup_substance_routes\n setup_protected_pages\n setup_account_routes\n end\n\n private def setup_static_files\n public_folder \"static\"\n end\n\n private def setup_health_check\n get \"/health\" do |env|\n env.response.content_type = \"application/json\"\n redis_status = begin\n Router.redis.ping\n \"connected\"\n rescue ex\n \"error: #{ex.message}\"\n end\n\n {\n status: \"ok\",\n service: \"josie-health-web\",\n redis_connection: redis_status,\n }.to_json\n end\n end\n\n private def setup_public_pages\n get \"/\" do |env|\n title = \"josie.health\"\n render \"src/views/home.ecr\", \"src/views/layouts/application.ecr\"\n end\n\n get \"/login\" do |env|\n title = \"login - josie.health\"\n render \"src/views/auth/login.ecr\", \"src/views/layouts/application.ecr\"\n end\n end\n\n private def setup_auth_routes\n get \"/auth/discord\" do |env|\n Router.auth_handler.start_discord_oauth(env)\n end\n\n get \"/auth/discord/callback\" do |env|\n Router.auth_handler.handle_discord_callback(env)\n end\n\n get \"/auth/irc\" do |env|\n title = \"irc login - josie.health\"\n network, token, error_message = Router.auth_handler.start_irc_auth(env)\n csrf_token = Random::Secure.hex(16)\n env.response.cookies << HTTP::Cookie.new(name: \"irc_csrf\", value: csrf_token, path: \"/\", http_only: true)\n render \"src/views/auth/irc_auth.ecr\", \"src/views/layouts/application.ecr\"\n end\n\n post \"/auth/irc\" do |env|\n title = \"irc login - josie.health\"\n network = env.params.body[\"network\"]? || \"\"\n csrf_token = env.params.body[\"_csrf\"]? || \"\"\n\n if network.empty?\n error_message = \"please enter a network\"\n token = nil\n render \"src/views/auth/irc_auth.ecr\", \"src/views/layouts/application.ecr\"\n else\n token, instructions, error_message = Router.auth_handler.request_irc_token(env, network)\n csrf_token = Random::Secure.hex(16)\n env.response.cookies << HTTP::Cookie.new(name: \"irc_csrf\", value: csrf_token, path: \"/\", http_only: true)\n render \"src/views/auth/irc_auth.ecr\", \"src/views/layouts/application.ecr\"\n end\n end\n\n get \"/auth/irc/status\" do |env|\n env.response.content_type = \"application/json\"\n token = env.params.query[\"token\"]? || \"\"\n verified, nick = Router.auth_handler.check_irc_status(env, token)\n {verified: verified, nick: nick}.to_json\n end\n\n post \"/auth/irc/complete\" do |env|\n token = env.params.body[\"token\"]? || \"\"\n Router.auth_handler.complete_irc_auth(env, token)\n end\n\n get \"/logout\" do |env|\n Router.auth_handler.logout(env)\n end\n end\n\n private def setup_substance_routes\n get \"/substances\" do |env|\n title = \"substances - josie.health\"\n query, category, substances = Router.substance_handler.search(env)\n render \"src/views/substances/search.ecr\", \"src/views/layouts/application.ecr\"\n end\n\n get \"/substances/interactions\" do |env|\n title = \"interactions - josie.health\"\n substance1, substance2, interaction = Router.substance_handler.check_interaction(env)\n render \"src/views/substances/interactions.ecr\", \"src/views/layouts/application.ecr\"\n end\n\n get \"/substances/:name\" do |env|\n title = \"substance info - josie.health\"\n name = env.params.url[\"name\"]\n info, dosage, effects, duration = Router.substance_handler.info(env, name)\n render \"src/views/substances/info.ecr\", \"src/views/layouts/application.ecr\"\n end\n end\n\n private def setup_protected_pages\n get \"/doses\" do |env|\n title = \"doses - josie.health\"\n user_id = env.get(\"user_id\").as(String)\n csrf_token = env.get(\"csrf_token\").as(String)\n doses = Router.dose_handler.list(user_id)\n success_message = nil\n error_message = nil\n render \"src/views/doses/index.ecr\", \"src/views/layouts/application.ecr\"\n end\n\n post \"/doses\" do |env|\n title = \"doses - josie.health\"\n user_id = env.get(\"user_id\").as(String)\n csrf_token = env.get(\"csrf_token\").as(String)\n raw_dose = env.params.body[\"raw_dose\"]? || \"\"\n\n if raw_dose.empty?\n error_message = \"please enter a dose\"\n success_message = nil\n else\n success, err = Router.dose_handler.add(user_id, raw_dose)\n if success\n success_message = \"dose logged\"\n error_message = nil\n else\n error_message = err || \"failed to log dose\"\n success_message = nil\n end\n end\n\n doses = Router.dose_handler.list(user_id)\n render \"src/views/doses/index.ecr\", \"src/views/layouts/application.ecr\"\n end\n\n post \"/doses/undose\" do |env|\n user_id = env.get(\"user_id\").as(String)\n Router.dose_handler.undose(user_id)\n env.redirect \"/doses\"\n end\n\n get \"/doses/:timestamp/edit\" do |env|\n title = \"edit dose - josie.health\"\n user_id = env.get(\"user_id\").as(String)\n csrf_token = env.get(\"csrf_token\").as(String)\n timestamp = URI.decode_www_form(env.params.url[\"timestamp\"])\n dose = Router.dose_handler.get(user_id, timestamp)\n error_message = nil\n if dose\n render \"src/views/doses/edit.ecr\", \"src/views/layouts/application.ecr\"\n else\n env.redirect \"/doses\"\n end\n end\n\n post \"/doses/:timestamp/edit\" do |env|\n title = \"edit dose - josie.health\"\n user_id = env.get(\"user_id\").as(String)\n csrf_token = env.get(\"csrf_token\").as(String)\n timestamp = URI.decode_www_form(env.params.url[\"timestamp\"])\n\n substance = env.params.body[\"substance\"]? || \"\"\n amount = env.params.body[\"amount\"]? || \"\"\n route = env.params.body[\"route\"]? || \"\"\n note = env.params.body[\"annotation\"]? || \"\"\n\n success, err = Router.dose_handler.update(user_id, timestamp, substance, amount, route, note)\n if success\n env.redirect \"/doses\"\n else\n dose = Router.dose_handler.get(user_id, timestamp)\n error_message = err || \"failed to update dose\"\n if dose\n render \"src/views/doses/edit.ecr\", \"src/views/layouts/application.ecr\"\n else\n env.redirect \"/doses\"\n end\n end\n end\n\n post \"/doses/:timestamp/delete\" do |env|\n user_id = env.get(\"user_id\").as(String)\n timestamp = URI.decode_www_form(env.params.url[\"timestamp\"])\n Router.dose_handler.delete(user_id, timestamp)\n env.redirect \"/doses\"\n end\n\n get \"/stats\" do |env|\n title = \"stats - josie.health\"\n user_id = env.get(\"user_id\").as(String)\n grafana_url = ENV[\"GRAFANA_URL\"]? || \"https://josie.health\"\n render \"src/views/stats/dashboard.ecr\", \"src/views/layouts/application.ecr\"\n end\n\n get \"/keys\" do |env|\n title = \"api keys - josie.health\"\n user_id = env.get(\"user_id\").as(String)\n csrf_token = env.get(\"csrf_token\").as(String)\n keys, limit = Router.keys_handler.list(user_id)\n new_key = nil\n error_message = nil\n render \"src/views/api_keys/manage.ecr\", \"src/views/layouts/application.ecr\"\n end\n\n post \"/keys\" do |env|\n title = \"api keys - josie.health\"\n user_id = env.get(\"user_id\").as(String)\n csrf_token = env.get(\"csrf_token\").as(String)\n name = env.params.body[\"name\"]? || \"unnamed\"\n\n success, new_key, error_message = Router.keys_handler.create(user_id, name)\n keys, limit = Router.keys_handler.list(user_id)\n\n render \"src/views/api_keys/manage.ecr\", \"src/views/layouts/application.ecr\"\n end\n\n post \"/keys/:prefix/revoke\" do |env|\n user_id = env.get(\"user_id\").as(String)\n prefix = env.params.url[\"prefix\"]\n\n Router.keys_handler.revoke(user_id, prefix)\n env.redirect \"/keys\"\n end\n end\n\n private def setup_account_routes\n get \"/account\" do |env|\n title = \"account - josie.health\"\n user_id = env.get(\"user_id\").as(String)\n csrf_token = env.get(\"csrf_token\").as(String)\n linked_accounts, primary_account = Router.account_handler.get_linked(user_id)\n success_message = nil\n error_message = nil\n render \"src/views/account/manage.ecr\", \"src/views/layouts/application.ecr\"\n end\n\n post \"/account/link\" do |env|\n title = \"account - josie.health\"\n user_id = env.get(\"user_id\").as(String)\n csrf_token = env.get(\"csrf_token\").as(String)\n secondary_user = env.params.body[\"secondary_user\"]? || \"\"\n\n if secondary_user.empty?\n error_message = \"please enter a username to link\"\n success_message = nil\n else\n success, migrated, err = Router.account_handler.link(user_id, secondary_user)\n if success\n success_message = \"linked #{secondary_user}, migrated #{migrated} doses\"\n error_message = nil\n else\n error_message = err || \"failed to link account\"\n success_message = nil\n end\n end\n\n linked_accounts, primary_account = Router.account_handler.get_linked(user_id)\n render \"src/views/account/manage.ecr\", \"src/views/layouts/application.ecr\"\n end\n end\n end\nend\n","numLines":335,"startLine":1,"totalLines":335}},"sourceToolAssistantUUID":"a1e9247b-d64d-4dad-a220-1379d450c0e0"} {"parentUuid":"d34e0a12-49c6-4a54-8030-edb418de3b26","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot","sessionId":"6d63b5be-290c-4d79-950e-6123e10d728c","version":"2.1.29","gitBranch":"","slug":"purring-rolling-treasure","message":{"model":"claude-opus-4-5-20251101","id":"msg_012o9zYtrfV8A8VWKN5ri8Cc","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"I see that the Crystal web app uses Kemal and serves static files from the `static` folder via `public_folder \"static\"` at line 68. So the cow.txt I placed in `static/cow.txt` should be served at `/cow.txt`.Now let me verify the MkDocs setup. Looking at the docs, the CNAME file is in docs/ and is served at root. The same should work for cow.txt. But let me confirm by checking how static files work in MkDocs.Actually, MkDocs might process non-markdown files differently. I should check if there's a way to add static files to the root of the MkDocs site.Let me check if there's a way to make MkDocs include raw files at the root. Looking at the config, I don't see any extra_files configuration. I might need to put the cow.txt in a location where it gets copied to the site root.Actually for MkDocs with material theme, any non-markdown file in the docs directory should be copied as-is to the output. The CNAME file works this way. So cow.txt should also work.Let me now commit all these changes. First, let me check which repos need commits.","signature":"EsAJCkYICxgCKkBES9xeBzQYx54XnnsPa5Mu7O3BPGFsjJCeSAKB7PWEb6WSuNInsNBy0vn1HQB1vmyBksCEvCPq3ymFpXafTqTuEgzrVIPIdLTU1oWbKAYaDEwt6FmQ8SNMR0H4uyIw3Je4x4CEJIDH75EpjrpUGlqt0Mp3V4hT2CIRX8MTO2SSxzE1OxrMjttsiqXdLTwdKqcIZIse81/bEYSoaMdhUFiZBGF0ZcOZwkXp2MeCHqyVnrcUDP/IOmGEIMC3qDiuOyiJVVKEQdRqTRiBvBRKLVc9TjJITgflWedjzjwfb7kAnHdpxe4HEFXagQ1MB6lLbYMn4ylOJRQO6otnTofWWZAIC+73QYZMY0b+nIfE6zyJjTw9ikOIjxODObUmzpNtxiXomdlbC8acu//BPMFqLQGcK5CVapRnvIHKRIXZobloGZnS70gibbfW3joKHEX3UQ8pFobrJ+ZBJTMfm3xe3KE0QOtSsHXL1r3ekCumZEgZgl3Au7nm1f6JvwXL+ULa3gvQ8d38v8/eseHpsNR8CU2unO//0qmVWH3DkSakfD1XB+owgz9Yp9lxrn5+q/7BLDKZMkOpHFZ1zvybG4Oo2jEGWkvQu6KkXnWZ/ifZwzLMATFa2LiszDVqOZwrvkzABH1JGtQ+ad/MIkDZ5aEvlGVxRFWseEAu3Wdp0Rrh6s0fwh54fgcZdjyavtem0Jq7jF26UIpnO1GxJcvQS8I2+O6V8kGvW5lLu6qPNxSNTAn9UZXouMYoQDcnHQXvbcysWW9AAWbvARiaCALvjiGubBwUudtRFcEdYUah27cqIZoS+w6NdcLcdKrja1V52U53262+jq+BPIhVkgIgM5JgSei8DHjKNiitpAq3gimOvhkGEXz5c6aHde4J9Cj9S2F4JHS0P0kkcPKs0LTR5iagoKm2QxA3Qcj8ys8du+GyL866GUPeGOTogN3BV0NDy8fhDLy1LUeD9jJGUt364q5PcoPIgd5/7jIiath+AxKF5QFnKBl9O6PdZ+yyZubIxdgJnh1PEZtwgvc74TEU98HwO7a5pag581OXkvBQg29UE7FIJbfadnU1o1Y1Wq8EIzjMs8gOoLvrlLG1/W8y08zAhWC3HZtzsTDin/893zUQgA0vG8klGb5yvSDx7Io/U3xF4jHLCqSUQGcMCqnThELPQKdxe6AZ0+1bcqUGZISMmeXhJNUE9KRLsWJgp+sG6h0EkRy8ygCRcS7Ix/9HBmmMFAG1QWdAYakMdnMzNUGlgOcdRPbGnjUme21WY0s9iWxSFIvhXVajep61+QAt11nfV5R32ojp+kfUTpxXAllN4DU2hpzleTilfHsi9KPx42xAmxjpHBbrQGQ5ixA1t8p82QKPdKRhbjLh3wMyPzpM8jo2VrVz0GTK04zkmCLv+YKRWfueT+e1XWXJ1ZIc+FAEV01pq6GZvY7D5S6+Hs93iFhK7GilyyfgWJ9525G1c7YG6f1hmWm/G6GKG3L7XdLmysV3ASTfS28JF96uL1VIgV2Php22X1Qwu5QHLdGsb78ZfH+J1Kt8l17SAXHegiyI7+PH/AO5F8HKaqaA7T1/18Yp1CKlxtNVZrcI3qmnvyTBg2indTn2tTRh9RgB"}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":8,"cache_creation_input_tokens":9258,"cache_read_input_tokens":60761,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":9258},"output_tokens":3,"service_tier":"standard"}},"requestId":"req_011CXoDUPPL21SZoyY2ocdRr","type":"assistant","uuid":"0f3e2473-78b7-474d-b711-c65ab3a2e081","timestamp":"2026-02-04T14:50:45.962Z"} {"parentUuid":"0f3e2473-78b7-474d-b711-c65ab3a2e081","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot","sessionId":"6d63b5be-290c-4d79-950e-6123e10d728c","version":"2.1.29","gitBranch":"","slug":"purring-rolling-treasure","message":{"model":"claude-opus-4-5-20251101","id":"msg_012o9zYtrfV8A8VWKN5ri8Cc","type":"message","role":"assistant","content":[{"type":"text","text":"Now let me verify all the changes and commit them. Let me check the git status of each repo."}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":8,"cache_creation_input_tokens":9258,"cache_read_input_tokens":60761,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":9258},"output_tokens":3,"service_tier":"standard"}},"requestId":"req_011CXoDUPPL21SZoyY2ocdRr","type":"assistant","uuid":"b1ebf6e3-4c7b-4ea3-a859-81db14e4a5e5","timestamp":"2026-02-04T14:50:46.809Z"} {"parentUuid":"b1ebf6e3-4c7b-4ea3-a859-81db14e4a5e5","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot","sessionId":"6d63b5be-290c-4d79-950e-6123e10d728c","version":"2.1.29","gitBranch":"","slug":"purring-rolling-treasure","message":{"model":"claude-opus-4-5-20251101","id":"msg_012o9zYtrfV8A8VWKN5ri8Cc","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01JGgkbUFZeBZ98Y5YAUg978","name":"Bash","input":{"command":"cd /home/josie/development/personal/josiedot/place && git status --short\ncd /home/josie/development/personal/josiedot/town && git status --short\ncd /home/josie/development/personal/josiedot/health/services && git status --short\ncd /home/josie/development/personal/josiedot/lol && git status --short\ncd /home/josie/development/kubernetes/karpenter-ibm && git status --short","description":"Check git status of all repos"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":8,"cache_creation_input_tokens":9258,"cache_read_input_tokens":60761,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":9258},"output_tokens":3,"service_tier":"standard"}},"requestId":"req_011CXoDUPPL21SZoyY2ocdRr","type":"assistant","uuid":"85e666db-c0f9-4e88-bb6b-f8172d9c9927","timestamp":"2026-02-04T14:50:48.510Z"} {"parentUuid":"85e666db-c0f9-4e88-bb6b-f8172d9c9927","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot","sessionId":"6d63b5be-290c-4d79-950e-6123e10d728c","version":"2.1.29","gitBranch":"","slug":"purring-rolling-treasure","type":"progress","data":{"type":"hook_progress","hookEvent":"PreToolUse","hookName":"PreToolUse:Bash","command":"python3 ${CLAUDE_PLUGIN_ROOT}/hooks/pretooluse.py"},"toolUseID":"toolu_01JGgkbUFZeBZ98Y5YAUg978","parentToolUseID":"toolu_01JGgkbUFZeBZ98Y5YAUg978","uuid":"547561df-0be6-462b-a9d3-252b16980413","timestamp":"2026-02-04T14:50:48.511Z"} {"parentUuid":"547561df-0be6-462b-a9d3-252b16980413","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot","sessionId":"6d63b5be-290c-4d79-950e-6123e10d728c","version":"2.1.29","gitBranch":"","slug":"purring-rolling-treasure","type":"progress","data":{"type":"hook_progress","hookEvent":"PostToolUse","hookName":"PostToolUse:Bash","command":"python3 ${CLAUDE_PLUGIN_ROOT}/hooks/posttooluse.py"},"parentToolUseID":"toolu_01JGgkbUFZeBZ98Y5YAUg978","toolUseID":"toolu_01JGgkbUFZeBZ98Y5YAUg978","timestamp":"2026-02-04T14:51:05.794Z","uuid":"581198ca-ffaa-48ad-878d-c844f772050b"} {"parentUuid":"85e666db-c0f9-4e88-bb6b-f8172d9c9927","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot","sessionId":"6d63b5be-290c-4d79-950e-6123e10d728c","version":"2.1.29","gitBranch":"","slug":"purring-rolling-treasure","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01JGgkbUFZeBZ98Y5YAUg978","type":"tool_result","content":" M web/vite.config.js\n?? CLAUDE.md\n?? web/future-flights-config.js\n?? web/future-flights-config.js.example\n?? web/future-flights.html\n?? web/future-flights.js\n?? web/lib/\n?? web/public/cow.txt\n?? web/public/future-flights-config.js\n?? web/public/future-flights.js\n?? web/public/lib/\n?? web/silent-check-sso.html\n M .pre-commit-config.yaml\n M core/Dockerfile\n M core/shard.lock\n M core/shard.yml\n M core/src/handlers/auth_handler.cr\n M core/src/handlers/metric_handler.cr\n M core/src/handlers/reminder_handler.cr\n D core/src/recurrence.cr\n M core/src/router.cr\n M discord-bot/Dockerfile\n M discord-bot/docs/404.html\n M discord-bot/docs/APIClient.html\n M discord-bot/docs/AliasHandler.html\n M discord-bot/docs/AliasParser.html\n M discord-bot/docs/AnnotateBot.html\n M discord-bot/docs/DTO.html\n M discord-bot/docs/DTO/APIResponse.html\n M discord-bot/docs/DTO/AliasData.html\n M discord-bot/docs/DTO/AliasListData.html\n M discord-bot/docs/DTO/DosageInfo.html\n M discord-bot/docs/DTO/DoseEntry.html\n M discord-bot/docs/DTO/DosesLoggedData.html\n M discord-bot/docs/DTO/HowHighData.html\n M discord-bot/docs/DTO/InteractionResult.html\n M discord-bot/docs/DTO/ListDrugsData.html\n M d