oot-sequence.mmd":{"backupFileName":"ebb7548b18c44a24@v2","version":2,"backupTime":"2026-01-27T12:02:39.952Z"},"notes/diagrams/mermaid-config.json":{"backupFileName":"910f19fef7471e6a@v2","version":2,"backupTime":"2026-01-27T12:05:30.028Z"}},"timestamp":"2026-01-27T12:05:30.012Z"},"isSnapshotUpdate":false}
{"parentUuid":"29663f26-a1e2-45fe-b5a5-e043c0101950","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","type":"user","message":{"role":"user","content":"rebuild the pdf and let me see it"},"uuid":"332eca06-7d0c-4d65-a44b-d06d64a152a0","timestamp":"2026-01-27T12:05:29.920Z","thinkingMetadata":{"maxThinkingTokens":31999},"permissionMode":"default"}
{"parentUuid":"332eca06-7d0c-4d65-a44b-d06d64a152a0","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","message":{"model":"claude-opus-4-5-20251101","id":"msg_01Fg4XvhoGFjo3rdUeyLrKP4","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01X4YEAAbyTVQWGyfsgirYTz","name":"Bash","input":{"command":"TEXINPUTS=\"/home/josie/development/personal/josiedot/design/beamer/:\" pandoc /home/josie/development/archlinux/s390-arch/notes/fosdem-slides.md -d /home/josie/development/personal/josiedot/design/beamer/josie.yaml --resource-path=/home/josie/development/archlinux/s390-arch/notes --include-in-header=/home/josie/development/archlinux/s390-arch/notes/beamer-header.tex --highlight-style=breezedark -o /home/josie/development/archlinux/s390-arch/notes/fosdem-slides.pdf 2>&1","description":"Rebuild PDF","timeout":60000}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":89,"cache_read_input_tokens":106415,"cache_creation":{"ephemeral_5m_input_tokens":89,"ephemeral_1h_input_tokens":0},"output_tokens":20,"service_tier":"standard"}},"requestId":"req_011CXXrQm8R948e6aTX4Mkpc","type":"assistant","uuid":"2a9f8b6c-e380-4609-b1ac-1244cfe22178","timestamp":"2026-01-27T12:05:33.960Z"}
{"parentUuid":"2a9f8b6c-e380-4609-b1ac-1244cfe22178","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","type":"progress","data":{"type":"hook_progress","hookEvent":"PreToolUse","hookName":"PreToolUse:Bash","command":"python3 ${CLAUDE_PLUGIN_ROOT}/hooks/pretooluse.py"},"toolUseID":"toolu_01X4YEAAbyTVQWGyfsgirYTz","parentToolUseID":"toolu_01X4YEAAbyTVQWGyfsgirYTz","uuid":"fa749915-1e2c-4048-a1d2-5dd42ee1c25e","timestamp":"2026-01-27T12:05:34.065Z"}
{"parentUuid":"fa749915-1e2c-4048-a1d2-5dd42ee1c25e","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","type":"progress","data":{"type":"bash_progress","output":"","fullOutput":"","elapsedTimeSeconds":2,"totalLines":0},"toolUseID":"bash-progress-0","parentToolUseID":"toolu_01X4YEAAbyTVQWGyfsgirYTz","uuid":"d37a147b-9db1-4941-ba2c-b155731cfc28","timestamp":"2026-01-27T12:05:39.668Z"}
{"parentUuid":"d37a147b-9db1-4941-ba2c-b155731cfc28","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","type":"progress","data":{"type":"bash_progress","output":"","fullOutput":"","elapsedTimeSeconds":3,"totalLines":0},"toolUseID":"bash-progress-1","parentToolUseID":"toolu_01X4YEAAbyTVQWGyfsgirYTz","uuid":"20b2795e-a464-4752-b40f-6199fc0357e5","timestamp":"2026-01-27T12:05:40.670Z"}
{"parentUuid":"2a9f8b6c-e380-4609-b1ac-1244cfe22178","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01X4YEAAbyTVQWGyfsgirYTz","type":"tool_result","content":"","is_error":false}]},"uuid":"766e2a31-98ad-4722-a5ef-47f993e60288","timestamp":"2026-01-27T12:05:40.994Z","toolUseResult":{"stdout":"","stderr":"","interrupted":false,"isImage":false},"sourceToolAssistantUUID":"2a9f8b6c-e380-4609-b1ac-1244cfe22178"}
{"parentUuid":"766e2a31-98ad-4722-a5ef-47f993e60288","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","type":"progress","data":{"type":"hook_progress","hookEvent":"PostToolUse","hookName":"PostToolUse:Bash","command":"python3 ${CLAUDE_PLUGIN_ROOT}/hooks/posttooluse.py"},"parentToolUseID":"toolu_01X4YEAAbyTVQWGyfsgirYTz","toolUseID":"toolu_01X4YEAAbyTVQWGyfsgirYTz","timestamp":"2026-01-27T12:05:41.035Z","uuid":"56578917-1fe9-4708-9cd7-5532967fe726"}
{"parentUuid":"56578917-1fe9-4708-9cd7-5532967fe726","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","message":{"model":"claude-opus-4-5-20251101","id":"msg_01VRtUSayT7txWSb2CvY3bCK","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01QTkaCswN75tzv4gW4HStpJ","name":"Read","input":{"file_path":"/home/josie/development/archlinux/s390-arch/notes/fosdem-slides.pdf"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":287,"cache_read_input_tokens":106504,"cache_creation":{"ephemeral_5m_input_tokens":287,"ephemeral_1h_input_tokens":0},"output_tokens":25,"service_tier":"standard"}},"requestId":"req_011CXXrRaaSdvx4o7at4vRAH","type":"assistant","uuid":"401d6591-94d0-48e0-b8ac-992d18d5d305","timestamp":"2026-01-27T12:05:44.105Z"}
{"parentUuid":"401d6591-94d0-48e0-b8ac-992d18d5d305","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","type":"progress","data":{"type":"hook_progress","hookEvent":"PreToolUse","hookName":"PreToolUse:Read","command":"python3 ${CLAUDE_PLUGIN_ROOT}/hooks/pretooluse.py"},"toolUseID":"toolu_01QTkaCswN75tzv4gW4HStpJ","parentToolUseID":"toolu_01QTkaCswN75tzv4gW4HStpJ","uuid":"a5e94d2d-6d0e-4c60-a3b4-1a365b8da70a","timestamp":"2026-01-27T12:05:44.172Z"}
{"parentUuid":"401d6591-94d0-48e0-b8ac-992d18d5d305","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01QTkaCswN75tzv4gW4HStpJ","type":"tool_result","content":"PDF file read: /home/josie/development/archlinux/s390-arch/notes/fosdem-slides.pdf (129.3KB)"}]},"uuid":"50bfdf6f-a97d-4ce1-9a7a-1ca7654793f8","timestamp":"2026-01-27T12:05:44.265Z","toolUseResult":{"type":"pdf","file":{"filePath":"/home/josie/development/archlinux/s390-arch/notes/fosdem-slides.pdf","base64":"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TfP29p4+fTrOCADCPQAAAHyys2fPflJ9gUAwT065kJ+0XllaWppKyWg51dygpjZJTrnwVzmcGigOffv2DQwMvHbtWvPmzUvh4a1YscLd3T0iIqJjx44I9wAAAAAVmkQiWbp0aXh4eEJCwosXL+rVq2dtbT148OB+/frl+WiwEydO7Nu37/bt2zdu3KhZs2bTpk2po6XyzDIPDw8fHx+VD1auXNnExGTYsGGurq7U30PLF5XQ0FBDQ0N+FlqEewAAAICKi+O4UaNG7dmzh9Zr1arVokWLW7duUXDftWtX586dDxw4UK1aNeX6K1eunDNnDiMfgkV9gPj4+D/lpk2btnbtWpWNm5ub16lTR/Hy1atXV+WoV7B9+3Y0fkH8/vvvjo6O27Zto9OUZ4V3795FRkZ+8803/Cy0CPcAAAAAFZeXlxcl+5YtW/7666+tW7fm4350dPT06dPPnDkzYsSI4OBgRWVfX19K9oaGhqtWrRo0aJCOjg4jf2AZVfbz8zMyMpo7d67yxp2cnPiegML58+f79OmzY8cOeos6D2j/z3f69On09HQ7O7tSdVT4vQwAAADAF7B7925abt++nU/2jPyW5ebNm4eEhMyePXvDhg2KmqmpqcuXLxcIBAcOHBg5ciSf7Em7du0CAgKMjY0XL178+vXr/HfXoUOH8ePH08rJkyfR+AVx//79/CuEhobS0t7evlQdNq7cAwBARRe9XZtVY6qaSao3Eatr42GrUEKePXtGSwsLC5VyTU3NFStWKJdQ0H/58qWzs3OXLl1UKvNTIdWqVcvQ0PCje+QfM5z7duoCClksYwUyKSfs5cmWfHMdPXp069atUVFRNWvW7Nix46RJk5o0aaJS5+3bt9RWERERV65cqV+/PnV+nJyc8rwTNygo6I8//rh48eKbN2/atm3bvXt3al5qef5dNze31atX8+uKO8v//vvvypUrK2/kxIkTzZo1q1evHsI9AABAKSJUZzOS2WeX1P++r1aloVge8dEqUOzMzMyuXr0aGRnZqVOn/GseP36clg4ODnm+2759+wLuUSKRMPLfDxTyiAUy6vsKhbKwJVKOk9h5apRYW508eXLWrFnVq1c3NTW9efNmdHT0pk2b/vzzz169einq3L59u0ePHomJiXp6elZWVo8ePVon99tvv1HEV97azJkzfX19+VNAfYCQkBDa1Pbt2ymsGxgYUHmDBg1sbW0fPnz44MEDiu/Ug2LkU0UpbyQuLu7evXu0qdL2vUK4BwCAio5jKbFQ3GEz/mYzrmi8faBetaFEnI1L+FC8BgwYQOF+1KhRixcvHjJkiIbGB7My5VRatmjR4jP3eOXKFT7RFjLb//P/HEdLTu2ElyQ1K2Owj34JtBUl74CAgD59+vBdlBUrVnh4eIwfP54SNj9ISSaTjRkzhpK9p5y6ujrfKaLCKVOm2NjYKC7zU46nZN+4cePdu3fzF/WTk5MnT568d+9eV1dX/m7jyXL8vENubm553lBLPQGm9I3JQbgHAIAyQCZhs94LslMZcTorzRJIMllpNiMVs5yM3mI4KSMQsDLZf/VZNRknyckg6joycZp8RVcmThUI1DjaFL0UasmkGQL+XaFIlp2qdCFTxmS+FTy7Ikp4rYWWLwdex6nfC/rnVKpry8TpAlbIcVJWTVsmoXV1GSfO+YYIRZw0+5+vgUDEyeTrapocfdn4Qqrg1HGtu329KnpG8h6hvD+YZ1+RYVlGqWfIMsz/9xM5ThZzSNpsoHDu3LkxMTH8MHqKlV27dm3Tpg2lfGNjY+X62dnZ/OOEFUPtCyEpKem3337z9/fX0tIaNmxY5AZpqE/OVXwZxwhYxYEximv61OHlWEblJ6W/Zf/drEk1hIyWqIT+mvzwww98smfkV9DnzZt3/fp1arqdO3dOnDiRCvkxNoMGDaKekuJTvXr1+umnn0aMGOHl5bVv3z6+cOHChbTcsWOHYrhO5cqVKdPTBqmQorylpWVBDik0NFRbWzv3QCmEewAAAFUZbwVpSYL010JK86nPBZJstrKxlLKXujYn0pEJ1GXq2jkJTKiWcx1RIOBywpRyfvo3mLAChuNDv4BjZGxOMFF6ybIcR9VY7v0ToUzMKmUvRqTF6dSQ4kSUA7pG0upNs//5XvDfBz5t818JRYb9L8z++5byirxC5Lb9RupNelnnDPCQfDhCcfSFVOpq/vet+68Cq2/E8iF1//79u3fvppB67ty5g3Jz5syhSPrzzz/z4+Nz+if/3in7ScNp3OVUCgUCwcqVKxs0aJCiL814m/N3Rqj894YO9d9vvZRRE+b8lP+tyCv83wGw9DePLaG/Jo0aNVIpcXR0pHY7c+YMH+6PHj1KS+q3qFT77rvvnJycgoKCJBIJNXhcXFx0dHTLli2tra2Vq6mrq3///ffz588PDAwsSLjPyso6depUt27d8vl9C8I9AABU9EBPITsnZ0tYSQarU12mZSg1aCir21FW3De5CjU4ccY/6yJdTr+epKZVtixezOzDaSnzNCvL9I2LJoDGvTi/+4rfqiMTPn9TnFJn9Hs5Krl7925ERIS/v//x48cpfVJstbKyogrVq1enVErZlOM+4S+Cyjz3enp6xsbGFIhtbGzoZfPvhYUYeR/iLVFczc85Fqmg5wJhyTwSK/fR1q9fn5b87zTInTt3mH/vGP6/v91CITXFzZs3ExISGjZs+KFqjHycPS3pLBTkeErnJJgI9wAA8OWlvRS+faBGyT47ldWvLa3WWKxfh2OFshI9CPkwClElrko9SQ2rbI1KGG0PJY3Cq7ncuHHjVq9e7ebmNnPmTH7OSkr2lMsfPHjw4sULPtEWRO557j+fQCYfpMOynEzQYwH7ZVuMH1WfkpLyz78kaWlMrntelWu+f/++INUUG8xfqR1wj3APAABfRmay4O94taSbaiIdrkoDiZGVWF1H9qUOhlXjqluKjRDroXSYMWOGh4fH2bNns7Oz+Uef8uH+4cOHBQ/3xYHjGJlQ1tOjVDyNVSwWM0r3IfAr/HRAKvjCSpUqFaSanp5eQfYeGhpqamqaexpThHsAAKhwXsepvb6tLslka1iKGw3MFOnKvvghNXXIwHmBkpeWlqahoZHnVWQqzMzMzMrK4sO9nZ3dqVOnjh492q1bt9yVQ0JCUlNTBw0aVNwHbL/gi+XG3EOS+AE5igE25ubmly5dSkxMzD2rPfWLdHV1+dnoqRotqVruXfBTEhVkKqGEhISYmJgpU6aUzu8VnlALAAAlITtVkBipcXOfdsoztdpts5t+l16tibg0JHuAL+L58+eU1EeOHJn7KvLx48cprJuamiquIk+YMIHWN23aRDlVtbf8+vWsWbMGDx4cHR1djpvr9u3bKiX87DeKyWr69u1Ly+DgYJVqoaGh6enpvXv35jtRFhYWlpaWt27dUnmSl0wm4x8moJiTJx/8mJzSOeAe4R4AAIpd6gvhgxDN24c01bVlTYdm1O+WqVsTE9FARZeWlvbo0aO9e/dSPD116hRfmJSUtGbNmrFjxzLy2WAUlatUqeLk5JSRkdG2bdsdO3bwA8cp1vv5+bVu3frmzZtTpkzh774tr1asWBEYGMivU3do6dKlBw4cqF279ogRI/hC6t7Y2Nhs2LBh4cKF/IgdvptE3Sd1dXV++kve4sWLqe/Ur1+/a9eu8SXJycmjR48+ffo0VVaeKudD9xyX2kkweRiWAwAAxSX5kfDtPbWs9wIjK3GDHhI0CIBCw4YNg4ODKcGfP3++e/fuhoaGDRo0uHjxIv+unZ2dh4eHcn1vb2/K9Fu2bBk1atS4ceMoyl+/fp2/6k+RlLoE5bu55s6dO3z4cA0NDVNT05iYmPfv31Nk37Rpk2LMvUAg2LZtG7UkZXdfX1/+CbX88JutW7cqz6TZv39/V1dXqtOyZUszMzMDAwNqyczMzDZt2vCPrVWoWbMmLVetWrVr1y4jI6OdO3cy8kkwqRvQvn17fX390tlWCPcAAFD0/n6g9uyKSKQrq9VKrF0d1+kB8tC8eXNK8zt27KCUf+fOnUuXLqmpqVlbW0+aNInyusplY0qxmzdv7tev3+HDh2/fvn3jxg1jY2PKrM7OzlRY7tvK3Nz8yJEjGzZsOHv2LP3glK1dXFwUD53lWVhYUO5fv3491aHGpG7AgAEDnJycco/CX716dZcuXQ4ePHj58uV79+7Z29vb2tpSS2pqaipXGzp06M8//xwjR1vjC6Oiol6/fl1qx+Qg3AMAQBF7c1ftxTWRZmVZ/W6Z2oYYUl9W9e3bNzAw8Nq1a7mDERQhfX19F7mCnxd+cHk+vOXKTRMFBAQo1j86EsbAwMDT07Mgm+0nl38dQ0PD3GP9Q0NDmdI6CSbCPQAAFKW399WeXRJpV5M17JmloY+r9R/XqVOniIgIlcIqVapYWFi4u7v3798fTQRQ2lC4NzExKc13OCDcAwDA53r3WO1JlEizCsX6TFqiQT6JjY2N8tTaMTExUVFRAwYM2Lhx4/jx49E+AKXHkydPrly5MmbMmEI83xfhHgAAyoCUZ8InF0Q61WQmtplaVRHrC2PNmjVt27ZVvOQ4jkpmzpzp7u4+cOBAQ0NDNBFAKXHy5EmZTFaaB9wj3AMAQCFlvBU+iRTJpEydDtm6NTAIp8iwLOvq6nr48OGIiIgzZ86UwJOJAKCARsmV8oNEuAcAgE8jyWATIzXE6WwNq2z9uoj1xcLY2JjCvfJzNH///XdHR8eZM2euWrVKuebo0aO3b98eFhbWvXt3voTjuNWrVx89ejQ2NlZNTa1Vq1Y9evSYMmUKdRtu3rzZrFmzXr16HTt2TGWPVL9///65t0/lW7dujYqKqlmzZseOHSdNmqQyRQl5+/bthg0b6ICvXLlSv379du3aKU9RQu9aWlo+ffqUKtAWFJ/6+++/mzZtSsurV69aWFjgpAMUCTzECgAAPsGTCxo3f9euVEdi1jcDyb74JCUl0dLExKQQnx07duysWbPOnj1bt25dCvSBgYEuLi5DhgzJyMigMN24cWPqCVCkVvnUwYMHaeng4KBcePLkSUr8lOxNTU0TEhLWr1/fokUL/kGeCrdv36Yc7+npSdUaNWr08uXLdevWUTXqEvAVDAwMtmzZQiv8Y5gUHxw/fvyzZ8+WLl2KZA9QhHDlHgAACuTlDfWX0erVmoqbj05DaxSrS5cuhYeHm5ub29rafupnL1686O/v3759+/3799eqVYuR36Hr5uaWkpLCVxg2bNj8+fMpyjs7Oys+RZn7yJEjDRo0UB79T7Zv3x4QENCnTx9G/ljQFStWeHh4UCiPi4vjHx4kk8nGjBmTmJjoKaeurs7IHwtKhVOmTLGxseEv8/fs2ZNK6MDo46tXr6YSOjw6Bjs7u2nTpuGMAyDcAwBAyUlOECae19A3lloOz2BYDg1StGbMmKE8Ww45d+4cJe8FCxZoa2t/6tbu37/PyGdD55M9adasWWBgIEVzLS0tRv5cntzhPigoiNJ/7tnWf/jhBz7Z5yQGNbV58+Zdv379wIEDO3funDhxIhX+8ccf1J0YNGjQ4sWLFZ/q1avXTz/9NGLECC8vr3379vGFa9asOXHixNq1ax0dHevXr0/7qlq1KnUeSvOsIwAI9wAAUK5kvBW8vKEuyWDN+mZqVMJkOMWCwnGehefPnx84cOCnbq1y5cq0PHXqFOVyRaFIjl9v2LBh69at+ZE5VapU4QspozO5xuSQRo0aqZRQNKdwf+bMGT7cHz16lJH/NkCl2nfffefk5ER9BupUUK+ASipVqrRlyxbK/VROx5CUlLRnz56aNWtWzJOOLg0g3AMAQImSSQSJ59VTXwiNO2Xp1sTY+mIUFRWlPBjmzZs3AQEB7u7uFLWPHTvWo0ePT9pat27dLCwsQkNDmzVrZm9v36lTp65du1KwVq4zePDgS5cu7du3b9KkScy/Y3IaN26c+2G0uTNo/fr1afnw4UP+5Z07d5i87g0QCoXm5uY3b95MSEigKM8X9uzZc9y4cRTxb926RcdAHQCcfYAihxtqAQBA1fOr6veOibSrSZsMTUeyL2FVq1YdPXr02rVrZTKZl5fXp35cS0srJCSkX79+r1+/Xr169YABA6pVq9arV6+wsDBFHT5VHzp0iH95+PDhzMxMR0fHgmyfH1WvGMGflpZzAwZ/bT7Pmu/fv1cuXLhwoaKDgXMNUBxw5R4AAP7zd7za43OiqmZS836ZaI0vqE2bNoz8or5iWEvB1a1b988//6S+AX387Nmzp06dOnHixJkzZ27cuMFfRK9Tp06HDh2o/OXLlzVq1ODH5BTwOrpYLKYlfzetYoUOMndNvlDllwbu7u78ipubW8+ePfX19XGuAYoWrtwDAECOjDeCO39qvb2n1nhQZu22WWiQL4sfIk8BneM45Rj95s0blZqKCqr/gRcIKMHPnTs3NDR00aJFGRkZ4eHhincHDx5MGz948GBKSsqxY8eoL6EYPJP/xvkBOYpxOObm5rRUno9f4cGDB7q6uvXq1VOU7Nu3b8+ePXZ2dnRUT58+nTNnDk40AMI9AAAUMU7GPjqjER+m+VWr7AY9MtV1cOPsl3f37l1aNm3alB/cwsgfa0XLCxcuSKX/N1Dq8ePHyi/p3ZCQEJWt1a1bl/l3CA2Pf/BtWFhYUFBQZmbmh56De/v2bZUSfvabLl268C/79u1Ly+DgYJVq1KNIT0/v3bu34tcOz58/nzp1Kj9Djqenp5mZ2aZNm06dOoVzDVC0MCwHoMzLyMho2bIl2gEKTSZhWQHDCgo0x+WYMWNwwbW4PXjwgB++MnLkSEVhkyZNKOvfvHlz9uzZq1at4m91PXz48LVr15Q/6+Li8ssvv1CMdnV15a+vp6SkbNiwgVZat26tqFanTp2uXbuePn2aHzbzoTE5K1asoAqKee5Xrlx54MCB2rVrjxgxgq8wePBgGxsb2r6hoeH8+fMV89w7OTnRumKEPcdx9LO8efNm7969/Aw5mzdv7ty587hx427cuKGrq4uTDoBwDwD/JjOZ7P379/fu3UNTQHHbtGnT69ev0Q5FS2We+7dv316/fp3+XtvZ2dFbinKBQEBZ2cHBwdfXd9euXQ0bNqRYb21tTcl79+7dimoLFiy4fPnyz3L169dv0KDBnTt3EhMThw8f3qFDB+X9Dhw4MDw8fMeOHV9//TVl/TyPbe7cufRBDQ0NU1PTmJgY+qeGIjt9DRRj7umotm3b1r1798WLF9OBWVlZPXr0iB+ls3XrVsVMmmvWrAkLC6OegOK23U6dOjk7O1PEp12sW7cOXwMAhHsA+A/LshV2umgoSZUqVUK4L3K557mnAD1y5EgKviq30lI4/vPPP5cuXXrz5s3Y2NhJkybNnz9/5syZynWMjIzOnz9PgXv//v3RcmZmZh4eHk5OTip7oX7C9OnTqReRz8Q15ubmR44c2bBhw9mzZ42Njdu3b+/i4sI/dFbBwsKCcv/69eupzqVLl6gbMGDAANqdYmJN6l3QAdDHqVeg/MGVK1cGBARQJ2To0KEdO3bENwEA4R4AAKAMozT8qR/pJ6dcsk1OpW/gLJf/pmrUqGFlZXXt2rU8wz3FbsW6YoT9hxgYGHh6eubTQ0hPT89drq+v//z5c3wNAIoWbqgFAACoiF6+fBkdHW1ra/vVV1+hNQAQ7gEAAKAMO3TokEwmc3BwQFMAlCcYlgMAAFCxrFq1Kjg4OC4uTk9Pb+jQoWgQgPIEV+4BAAAqlnv37oWFhYnF4r179+IZsQDlDK7cAwAAVCy/yqEdoEjIZDJNTc0S2BHLCjiuwj1iTyqV8g+1QLgHAAAAgJKQlZVVrNvf6R5fWcOAkwmkrPhbr6pocIR7AAAAACh7Ti4SS9VynuUikzE5C1YbbYJwDwAAAABlzwkvsTRnQApL/ycQMjl3ikrRKgj3AAAAAFDWhCwW51yxV5r5heMYoYBDy3wUZssBAAAAgNKlxwL1nCv2SlhGlp4mQ8sg3AMAAABA2WM3X8jJGMUEORwnqCQSoVkQ7gEAAACgTGIFjIAVMhxLEZ/Wuy5i0SYfhTH3AAAAAFDqhPpIKMvbeuQE+hNeEhZDchDuAQAAAKAsClkiYTlK9v8kVXtPRNaCwrAcAAAAAChlCVXwX7IHhHsAAAAAKKvCvCUyDMJBuAcAAACAsu6kt4RjmB7zcdke4R4AAAAAyrIwb07GMnYYkINwDwAAAABlHcdKWUyL83nQMQIAAACALy/UW8pxMrt5eFLVZ8GVewAAAAD4woIXZzMsY++hjqb4TLhyDwAlJyQkpGfPniqFWlpaJiYm3bt39/Hx0dHRUZRnZmbSW9ra2mlpaXlubdy4cb/99tu2bdtGjRqVz/YVGjVqFBsbq1yzT58+AQEBn/pT/Pnnn4cOHfrrr7/evXtnY2PTtWtXZ2dnOtRP2sjGjRtdXV11dXV37dplb2+P70bpJJVKX79+jXYouzIyMkQiXAYuI5FUTcAJcNEZ4R4AyqDq1atbWloqXlJ2v3Tp0q1bt06fPn3x4kVNTc2i3b7CV1999ZlbpjQ/ZMiQEydOCAQCc3PzunXrUifhyJEj1MEIDg6m/RZwO0uWLPH09LSzs/P3969Vqxa+EqU1aqg9efKkSZMmaIoyzc3NDY1Q+oV6SxiOtfuBRVMg3ANA2dOmTRuV6+UUoQYOHEgRf+XKlZR6i3z7RcXFxYWSvbW19d69e01NTakkJSWFCrdv3z59+nQqLMhGdu7cST9j//799+/fj2uKpVmzZs3u3buHdgAobie8xCzL2M4ToimKBH79AQBfXu3atRcuXEgroaGhpfYgX758uXv3bj09vSNHjvDJntDLrVu3duzYcd++fdHR0R/dyKlTp8aPH29jY7Nnzx4kewAAwgrZbF0ke4R7AChfTExMaHnnzp1Se4RRUVEymaxFixbUFfm/f0YFgl69etFKcHBw/lvIyMgYPny4hoYG9QS0tbVx0gEAQn0kMob5ZhoG5CDcA0D5IpFIaKl8Q21p8/btW1pWq1Yt91v8aPv79+/nv4V169Y9f/58ypQp9erVwxkHAMgZas8wPeZhlHhRQmsCQKlw+fJlRj6hTak9wkqVKtEyMTEx91sJCQm0fP/+fT4fl0qlGzduVFdXnzhxop+f3969e2NjY1u3bt2zZ8+pU6d+/m3EAABlS/giTsJI7ZDsEe4BoJxJTU0NDAycN28erY8cOVLl3czMTDs7uzw/GBcXl2f5X3/9ledHXF1dv/nmm0Ifp42NDb/xc+fOdezYUVH+7t27PXv20ErlypXz+filS5fi4+N79+7t4uISEhJiaWlZu3bt8PDwkydP+vv7BwUF4XI+AFQoUnUpw3FoB4R7ACjzKMqzbB7DK8ePHz9kyBCVQplMFhYW9knbT0pKyvMj33333eccdp06dQYNGvTHH398++23y5cvt7e3r1SpEkV2Nze3WrVqPXz4sG7duvl8nLoEtIyNjW3Xrt2LFy/09fXpJcX94cOHR0VFjRkzhoI+vhsAUEGE+khljAyPrEK4B4DyQHke+levXkVHR5uZme3atat169a5K3/0IVa5ywv3aKqC2L59OwV6f3//sWPHKgoXLFgQExNDK5Ta8/ksP56H47itW7dqaGjwhSYmJtu2bWvatOnp06cvXLjQtm1bfD0AoNwL8eEYRmI/D8ke4R4AygXleehfv35NAffu3bt6enql/8h1dHQomtvY2NDxy2Syxo0bDx06tEGDBrVq1frqq6+Ux+rkxo/IHzhwoCLZ86hjQ5k+IiLi1q1bCPcAUBEIGImURQRFuAeA8sjQ0NDFxcXHx+fHH38s4EOgvrgJcoqXc+bMyczMnDhxYv7z1uvq6tIyz+fR8uN5srKy8H0AgHIvzFvMcYKe8zD3ZfH1nQAAvihXV1c9Pb19+/Z96AbZ0oyOec2aNdRFmTZtWv41GzRoQMunT5/mfuvx48cfyv0AAOVJqJeYYVk7DzyyCuEeAMovSsZTpkyhFU9Pz7J15FlZWePHjxeLxevWreNvkFWmMu09/6CrI0eOZGZmKpffu3fv4sWLurq6Xbp0wZcBAMo5IStVR7JHuAeA8s7NzU1PT+/gwYPR0dFl5ZjfvXs3aNCgiIgId3d3R0dHlXcdHBxMTU2HDh2qKDE3Nx81alR8fPzYsWMVM+InJCRQYXZ2touLS+7uAQBAeRLqI2FZpsdsDMgpXhhzDwBfnqGh4eTJk5cvX75o0aLDhw9/5tY+NM/9V199tX379o/WNDMzW79+ff67ePToUe/evW/dujVnzpxly5blrnD69Gnm3+kvFVavXn3z5s09e/YcOnTI0tIyNTU1Li5OJpO1aNFi/vz5+BoAQDkWtlTCcYztXCRPhHsAqBhmzZq1YcOGI0eOREdHW1lZfc6mPjTPfe7H3+ZZ80MzbyqEh4cPGzbszZs3a9eu/dBQ+5kzZ1IPgZbKhQYGBhEREVu3bg0NDb1w4YKenp6jo2PHjh2/++47bW1tfAcAoLwKXsRxMqmdB2JnScBvRgBKVNWqVf38/Hr37l2E26Qwam5unpKSguaF4ubr6xsfH79kyRI0BVRA3bt3v3LlCtqhEMK8JZTu7eaL0BQlAGPuAQAAAKC4hPpIGZZDske4BwAAAICy7aR3NsNwtngYLcI9AAAAAJR1MlbAcpj7EuEeAAAAAMq4Ez4SWtp64A5PhHsAAAAAKMtCl0goZdrNwww5CPcAAAAAUJY9XMSxAsYWyR7hHgAAAADKugfqUk7GoR0Q7gEAAACgbAv1lsoYzm4+ZshBuAcAAACAsixsaTbDcvYeSPZfDMZCAQAAAEDR4GQCNTHmvvyScOUeAAAAAIrACe+cuS+7LsLclwj3AAAAAFCWnfSWUKi388CoEIR7AAAAACjTyX4JJ0OyR7gHAAAAgHJAJpBJpVK0A8I9AAAAAJRtYd5ihmN6LtBAUyDcAwAAAEAZFurFcQxr54EZchDuAQAAAKAsu7mIYwRSDLUvVXAyAKD8CwsL+/7773v06LFjx45CfDwuLm7WrFlnzpxJTU1dvHixp6cnmhQAgDwXSVmGQzsg3AMA/J/MzEwtLS1aadCgwZ07d4RCYZ51TE1Nnzx5Qsu7d+9+0vapflJS0sWLFwt3eI6OjvHx8W3btqX1unXr4nwBAJAwHzHHsLbzECYR7gEAPuDBgwdbtmyZMGFC7rfWrVtHyb5wmx06dGhycrK1tXXhOh7R0dHNmjULDQ3FCQIA4J3wEjMMazcPQ+1LHYy5B4DSQiQSaWlpeXt7Z2VlqbyVkpKycuVKfX39wm25atWq8+bN69GjR+HCPU4NAICym4s4VoBr9gj3AAAfwLIsH8GdnZ0TExN//fVXlQpr16599erVrFmzFJUBAOBLyRlqz2KofSmFLhcAFIhYLPb39w8NDb1w4YKWlpaNjc2AAQMGDRqkXGfFihXu7u4UxB0dHT09PY8dO5aZmdm8eXNfX9+mTZsWZC9z587dvHnzsmXLJkyYoKmpyRe+e/fup59+qlOnztixY3PfzCqTyXbs2LF79+7r168LhUITE5MZM2YMGTJEuQ4dc7t27QYPHnzgwAGVkr1799Jh79u3LyEhoXHjxnT83377LV8nOTm5SpUq/HpMTAzfqVDcUKujo6OtrU1djj179lBv5PLly9Q+Q4cOpbf+/vvvn3/+OTAwMDY21tDQ0NzcnH4iaoc826pHjx6LFi06efKkkZFRy5YtXV1drays6EemjwQFBdFR0U80adKk3EOVsrOzt27dyp+RSpUq0RlxcHDo3bs3vqsAUKww1B7hHgDKvNTU1L59+54+fVpdXZ1CalpaGiXaXbt2jRkzhvKlSuWUlBRbW9vHjx9TVqZMHBYWRjH64sWL9PJD2+c4jl9SwJ08efKqVaso9VL25d9dvnw5hd2VK1fS3hWVeVKplLJ4QEAArVtbW1OqjpK7evUqheOC/Gj0I/z+++8tWrSgHgsd5MCBA7dt2zZq1Kicfx/V1OgHoV2Eh4fr6elRemZy3VBLx0l9CeWSJ0+edO/e/e7du9Q5oc3ev38/JCTk1KlTBw8e7NevX+6G7datW0ZGhoWFxbVr16i5jhw5Qr2UESNGREZGUtbX19ePjo6eOHEida6mTp2q+OD79++/+eab8+fPi0QiOiPUPtvlqJ+wcOFCfGMBoJhgqD3CPQCUB5QXKdlTvt+yZUv16tUZ+eyQw4cP9/f379Chw9ixY5UrU+inyNu1a1fK4pmZmdOnT9+0aROFzv379xdkX/PmzaO9/PTTT5RldXR0Xr58uW7dOnNzcycnJ8ruKpXPnTtHyZ5qLliwoFq1alRCyX7AgAHUH+jdu/fXX3+d/75CQ0NXr17t6+traGhIL2m/zs7Onp6ejo6OGhoaurq6VIG/fl+vXr3cN9RSpKa9Hzp0yMrKysTEhC+kNklISPj1118poGtra1NX5LfffqPN0vE/fPiQOgkqbUWJvEuXLtSReP78ea9evSjKUx+ADp66T3Xq1KE61NWZNWvWkiVLqB9CDcJ/0MPDg5I9bZYOni+kXgRVoHa2s7Nr3749vrQAUORuLuKeC6S4Zl/KYcw9AHzEkydPNmzYQEFz7969fLInFhYWFNa1tLR+/PHH7Oxs5foDBw60t7fnr7JramouXryYkuupU6cKuDsDAwM3N7fXr19TqKWXy5YtS01Npb3kOT9m586dKUb7+fnxyZ60a9du8uTJfO7/6L4sLS0pc/PJnowbN45KEhMTY2NjC3KoYrF4586d3377rSLZE3d3919++WXChAmU7Bn5HQK02e7du79584aCu8oW6LO2trbUPrRes2ZNb29vWqE+ADUan+wJtUarVq2okxMTE8OXPHr0aOPGjc2bN6efXRH3GzZsSD0ivsXwpQWA4oCh9gj3AFAe8EPnBw0apMiRPEq0X3/9NUVhlfnja9SoofKyfv36FG1fvXpVwD3OnDmTPrV69epbt25RfrW2tubHsueJYrTKLbb8lJcUkT+6I5VDJa1bt2bkM3IW5DirVq1KiVylUCQSUYdBpbBly5Z5HpLKAbRp04aWlStX5rtGKuUJCQn8y5CQEOpXUMdAIBCoVNPT06N3McMPABS5MB8xy7G289TRFKUcfrECAB9x584dWlJAz/1Ww4YNT5w4ce/evfwHwFCEpTppaWmK6+v5o16Eh4fHtGnTunbtSjnVx8fnox9JTk5++vTp69evOY6Li4tj5DfaFuKH5X81QYdakMr5zNtDh5GUlESH9P79e3r54sWLghzSh9qH/91Ceno6/5J/hteNGze8vLxUampra6ekpMTHx+dzhwMAwKc6sUTCcIytB4baI9wDQNnHZ0p+6IgK/gIzn18LF4I/ZOLEiWvWrKGQ2q1bN3t7+3xqBgYGLlmypNBPn/38Q1UhlUp//vlnOnjFhfYil5qaSss/5PKs8NEzAgBQcMHeHMtiqD3CPQCUF/zYcYlEkvstvrBSpUpFvlPqNixYsGD06NHLly/Pp9r27dupTq1atagz0KpVqwYNGlDh5cuXZ8+e/aWai45ky5YtzZs3p2No06YNf9F969atO3fuLKpd8OOjaJtjxozB9xMAipuQkcpkuGaPcA8A5YW5uTktExMTc7/16NEjWpqamhbHfkeMGHHnzh2K7PnU2bZtGy3//PNPfpw9L/cDbktMZmYmHVLNmjUvXLigoaGhKM89087nMDMzo+XTp0/x5QSA4hbmk3MRp4cHnh5YZuCGWgD4iG+++UZdXf3UqVMqs+I8f/784sWLderU4SeAL/p/ngSCj462529RVZ6shpFPtP+l2urx48cSiaRWrVrKyZ75dyBNUenVqxedkcOHDytP+c/z9vZOTk7GlxYAikSot5ThOAzIKVtwtgDgI2rXru3i4rJ69WpHR8eNGzfyN33euXNn1KhRr1692rJli0gk+lLHVr9+/UePHq1bt27OnDn8E20TEhK+4JgcY2NjNTW1GzduBAYG9u7dmx/Bf+zYsV9++aUI91K3bt0JEyb8/PPP06ZNW758OT9uKi0tbeHChatWrXr//n3+Y5mgIN68ebNv3z60Q/nw9ddfW1paoh0+1QkfMctwmB4H4R4AyqEff/zxypUrhw8fpszKP6E2Li5OJpONGTNG5QlWJczd3f306dMUapctW9amTRsK1ufPn/f09FyyZElISIidnV1QUFBJ9j00NDTokLy9vfv27Uu9ICsrK2qrqKioFStWUPeDkjc1o5+f3+fviHZx9epVyvc7d+7kp++MjY199uwZNcIPP/yAb+zne/Hiha+vL/+sYijT6J8IgUCAcP+p9u/n2Pu4iRbhHgDKKf5Zrb/99tuJEyciIyP19PQcHR0HDhw4aNCgL3tgPXv2pOjs5eV148aNM2fO1KlTZ82aNePHj2dZdt68eU+ePCnchJifgw7GzMxs8+bNN2/eDAsLo7R98uTJbt26nTp1Kjg4uHLlykWyl0qVKoWHh/v7+x8/fpxaQF1dnToStOsRI0aozJEPhWZkZMQ/FwzKNDc3NzRCIRjck8o4GdqhLMLtEQAlqmrVqn5+fr179y7CbaalpZmbm3/BgeZQcfj6+sbHxy9ZsqTc/6S3bt2aMGGC4qnAUKbDfbVq1SZNmvT5m+revfuVK1cqQqOF+khYlrWdixlyyiTcUAsAAAAA/zixVMJyDJI9wj0AAAAAlG3Bi7NYjrX1wLBthHsAAAAAKOOEakK7ebhmj3APAAAAAGVcaM7cl1K0Q1mHX7sAAAAAVHT8k2ht52mgKco6XLkHAAAAqODJXsqxeBItwj0AAAAAlHEhPhKO4ezm4hEZCPcAAAAAUJaFenFCSva4Zo9wDwAAAABlnlDafS6SfbmC0wkAAABQEYX5SKWchGWRBssVXLkHAAAAqHBOeEs4juvhgelxEO4BAAAAoCw76S1lGM4OT6JFuAcAAACAsp3sl0plDGfvgelxEO4BAAAAoCwL8ZHIOFyzL89wagEAAAAqhOAl2QKOQbIv33DlHgAAAKD8C1nCCVkBkj3CPQAAAACUbfv3cwKBFMke4R4AAAAAyjyD+1JZthDtUBGgAwcAAABQnoX6SCUSac9FSH0VAq7cAwAAAJTfZL80Z3qcngtEaIoKAn04AAAAgHKa7L0lnFTWYz6SfQWCK/cAAAAVXVJSkoWFhZWVVUpKiqJQR0enWrVqBfn4xIkTWZYNCgpCS5YqJ3wkMpaxR7KvYHDlHqA8yMzMHDlyJNoBColjGZYrSMXbt2+3bdsWDfZlderUKSIiQqWwSpUqlM7d3d379+9fuHB/584dWnn79q2enh4auRwI9ZEIGKb7PCQ9hHsAKGs0NTXXr1+PdoBCS30pfH1braq5RK+mNP+aHTt2pASJFisNbGxslFN4TExMVFTUgAEDNm7cOH78+E/dWuPGjf38/EQikbGxMdq2nCR7luk+FzEP4R4AyiChUDh06FC0A3wOaTb7+JxGxlu2bsdsXSMpGqT0W7NmjfJvUTiOo5KZM2e6u7sPHDjQ0NDwk7YmEAhcXFzQquVDmI+ERbKvwDDmHgAAGKGIq98t07hzVmKkKD5UU5LJok3KFpZlXV1dv/766+Tk5DNnzqBBKnKy5xgk+woN5x4AAP6hU03WaGDG23tqN/dq12yZXcNKjDYpW4yNjSMiIhITExUlU6dOXb9+/ZEjR1TG4puYmDx8+FAsFqup/ZMEdHR0tLW1X716lf8uJBLJli1bAgMDL1y4UK9evY4dO3p6eqLlS0+ylzGMPcbZI9wDAAAoGJhK6E/SDfWrW3TqdswytJCgTcqKpKQkPrgX0/Y5jnNwcKCuAq2bmppSx2DDhg2RkZFWVlZo/C+f7JdKZBLG3hPRDuEeAAAgl+qW4qoWksfnNN4nCqs1keh9hYH4pd2lS5fCw8PNzc1tbW2LaRf+/v6U7Bs1arRr166WLVsy8tl1li5dumnTJrT/lxW6RMLJOHtPdTQFINwDAEDe+IH4GW8EjyI01DS5uh2yRXoyNEspMWPGDJU5K8+dO+fs7LxgwQJtbe1i2umqVatouXnzZj7ZEwMDg5UrV164cIH2jpNScBzHFdWmkh4ycX9KNatybUaocfM+YbMsi1trEO4BAKDi0aoqsxiQ8Xe8WtwRTQNTSW0bcQEnxYdidfHixTwLz58/P3DgwOLYY0JCQmxsrJmZWYcOHVTeaty4McL9l1K9PlN9hhDtAAj3AADwCaqYSOhPUoz65V+1a7fNNmqBe22/sKioKOWpMN+8eRMQEODu7u7g4HDs2LEePXoU+R7j4+NpWbdu3dxv4RowQOmBqTABAKCgqjcTt5qUJskUXN+m/fYeLg+VIlWrVh09evTatWtlMpmXl1dx7CIjI4OWitl1AADhHgAAyoPa7bKaDMlIfSG8uU87OQHjAUqRNm3aMPKL+hJJ0c9xpKWlxcinwkQ7A5Rm6H8DAMAnU9fm6n6dlfFW8OSC6MU1UZ122Tp4rm0pIBKJaCmTyRT3a/I3175580alZiFu6ORn2Hz8+HHut4rw9lAA+Ey4cg8AAIWkZSAz/SazdtvspFi1u4FaaS9xFf8Lu3v3Li2bNm2qrv7PlIjGxsa0jIyMVK6Wnp7+9OnTT914vXr1GjduTLuIiopSeSs2NhaND4BwDwAA5YFuTWn9blk1rLIfnxPdO6aZ/hr/ZfkyHjx44O7uTisjR45UFPbu3VskEvn7+x88eJAvkUgkPj4+hRs67+bmRsuxY8devXqVL3n79u3s2bNv3ryJ9gcoJTAsBwAAioB+Hal+nYzkR8KEcA0NPc6ohVinBgbqFCOVee4pZF+/fl0mk9nZ2dFbivJ69epNnDjRz8/PwcGhYcOGurq6VI0yupGR0cOHD/PfRe3atakObdDS0pKf4X7MmDEBAQFHjhyxtrY2NTU1MDCglE9bHjp06MaNG3FSABDuAQCgXKlsLK1snPEuQe3xOZFQxNRsma1XCxG/WOSe515dXX3kyJGbN29WuSrv6+tbo0aNPXv23Lt3r1atWmvXrp08efKhQ4c+uou5c+eOHTs2LCxMUcKy7IEDB2gXQUFBkZGRFO6nTZvm7e09ffp0nBEAhHsAACif9OtJ6M/7J8Jnl0Wi27LKJtIqJphipcicPXv2k+oLBIJ5csqF/KT1ytLS0lRKRsup5gY1tUlyyoW/yuHUACDcAwBAuVWptrRS7YzUl8KX19UTz4tqWIlrWOLRVwD/RyKRLF26NDw8PCEh4cWLF/Xq1bO2th48eHC/fv3yfDTYiRMn9u3bd/v27Rs3btSsWbNp06bU0VJ5ZpmHh4ePj4/KBytXrmxiYjJs2DBXV1fq76HlEe4BAAAKQ7eGVLeHNDtF8PKG+uVfdGq2FBuYSrQMZGgZAI7jRo0atWfPHlqvVatWixYtbt26RcF9165dnTt3PnDgQLVq1ZTrr1y5cs6cOYx8CBb1AeLj4/+UmzZt2tq1a1U2bm5uXqdOHcXLV69eXZWjXsH27dvR+Aj3AAAAhSfSk9XpkFWnQ/arW2rxoZoCNc6wkbhaY4zVgQrNy8uLkn3Lli1//fXX1q1b83E/Ojp6+vTpZ86cGTFiRHBwsKKyr68vJXtDQ8NVq1YNGjRIR0eHkT+wjCr7+fkZGRnNnTtXeeNOTk58T0Dh/Pnzffr02bFjB71FnQe0f3mF38sAAECJ4ao1ETcZml63Y3ZakjDuiFb8Cc2/H+AyE1RQu3fvpuX27dv5ZM/Ib1lu3rx5SEjI7NmzN2zYoKiZmpq6fPlygUBw4MCBkSNH8smetGvXLiAgwNjYePHixa9fv85/dx06dBg/fjytnDx5Eo1fjuGfVAAAKGk6NaT8RJlv76vRnwcnNKo3E2tXlVWqLRPplfSInevbdViWqVRbUsMq5xhwdqC4hS7j4s/ITDoLnj17Ri8tLCxUKmhqaq5YsUK5hIL+y5cvnZ2du3TpolKZnwqpVq1ahoaGH901/5jh3LdTA8I9AABAETBoKKE/DMMmPxQmJ6g9uyxgBYyBqURDT6ZTXaZVIlFbqM5kJrOvY9VTngj1asmMmou1qmL6TihiYT6clJMKWY5jWFYmTU/OKTQzM7t69WpkZGSnTp3y//jx48dp6eDgkOe77du3L+BhSCQ5Y+HyvFUXEO4BAACKCle5voT+0FrWO0HqC2HKM7WXNwSUufWNpUI1RkNfpmUgE2pw6tqcSJuhFYblinDvlHYYAZOVKsiME7x/KqxUW5qpgWGrUBg3F3FPc3qM2TKZkHqq8i8qy8go00sFAkYmEwgEUtu5Io7L+QIPGDCAwv2oUaMWL148ZMgQDQ2ND2320aNHtGzRosVnHt6VK1f4TgXOFMI9AABASaAcT3+qmudMmslJ2fTXgsx3bNZ7QWqSIOOVMDudpYSU/pal2KSmybEsQytCEcdwOVlcTUsmychZEVWSZL/P+Q+cSF+S/U4tJ2BxOZcqNSpLs5KFfCFfh0oyU/67ikkbzE5lX8epPf5bA+ei3HhxTRS7/59B6gJ1jv5I0gWskKMvmOJbIf/aSLPf56xoVpFm/i3k6ws1ZdLMf3p6U7puNexrrC3KeTCwLOc7l/PFkncOKb//0918zkmpNseqCYT8t46VMpxIqNZ1bh4Xy+fOnRsTE8MPo3d1de3atWubNm0o5RsbGytXy87O5h8nrBhqXwhJSUm//fabv7+/lpbWsGHD8K1AuAcAAChpFL/ko/PzeEsmYWUSRiZmOQpZMkYm4/7J5vILovL/zc5Jciwr47L/LaaeANXn+Hf/WQrY1Bda2alKOxUwmpWl1WpImOM4A+WEgVl2ve7pig6cPJJz7D/RXF7w39eGUS5RWffe66Ml/sq517Kcr5aaSCrJpt6BkBGJshmJJqOWyWhUYtrP/IQRL2pqavv379+9ezfl+3Pnzh2UmzNnTq9evX7++Wd+fDxR3Cn7ScNp3OVUCgUCwcqVKxs0aIBvBcI9AABAKSJQ4wT0XzBNlcE5ucfqfLxCzhVWRp6ZWEarsqyquaRak+w79/G8rfJDpMNoV+VyfQe4gn1t/lt/8f7+lSu/HzznW7SH970cdSHu3r0bERHh7+9//Pjxli1bnjlzxsrKiipUr16dugESiUTRzSgIlXnu9fT0jI2NHR0dbWxs8JVAuAcAACi/WIaTyTT0meqNKdaL1TQ5NAl8ga8hy5rLjRs3bvXq1W5ubjNnzuTnrKRkT7n8wYMHL168qF+/fgE3mHuee6ggcMMQAABU7P8QqnNftRY3dcioaZ2NZA+lwYwZMzQ1Nc+ePZudnc2X8KPw+ZH3AAj3AAAAH9TEIaO2jViIWA8lLi0tjZ+bMjd+HE5WVhb/0s7OjpZHjx7Ns3JISMgff/yB9gSEewAAAIAv4/nz5926dRs5cmTufH/8+PHU1FRTU1M9PT2+ZMKECbS+adOmBw8eqFR+/fr1rFmzBg8eHB0djVYFBmPuAQAAAEpeWlrao0eP/vrrr8ePHy9evJiCPiOfsHLPnj3LluVMyOPo6KioXKVKFScnp7Vr17Zt23bVqlWDBg3S0dGhWE+VfX19ExISpkyZwt99C4BwDwAAAFDSGjZsGBwcTAn+/Pnz3bt3NzQ0bNCgwcWLF/l37ezsPDw8lOt7e3tTf2DLli2jRo0aN24cRfnr16/zV/1Hjhy5Zs0aNCkg3AMAAMCX1Lhx49u3b6ekpOjq6lbAH7958+aU5nfs2EEp/86dO5cuXVJTU7O2tp40aRLldZVZ7XV0dDZv3tyvX7/Dhw9To924ccPY2LhRo0bOzs5UiO8SINwDAAB8YRTsfH19KdU9evRIKBRS0rW3t6dUpzw9OZRv+vr6LnIFrN9XLv863nJoW4R7AAAAKDmXLl2iKP/+/XuRSGRlZZWSknJWzsfHZ+3atePGjSvyPVpaWmZmZt69exeND4BwDwAAAEUmKSmpX79+lOyXLFkyffp0flDKu3fvdu3a5erq6uzsbGFh0bFjRzQUACDcAwAAlHbBwcEvXrxwdHRUvmlSX19/ypQp5ubmcXFxHTp0KNo9Us+B9li5cmU0PgDCPQAAABSlly9f0rJBgwa537KV49c3bNhAcd/Hx2fu3Lkq1WbNmrVq1aojR47079+fXsbGxi5ZsuT69euJiYmNGzdu0aLFjBkzLCws6K3k5OQqVarwn3r16hV/m+bMmTPp44qtHT169NChQ3/99RdVbteunb29/dixY9XU/gsJK1ascHd3X7t2bY8ePRYtWnTy5EkjI6OWLVu6urpaWVlRz2HZsmVBQUEJCQkmJiaTJk2aMGGCygG/fft23bp14eHhdJDNmzenXfzwww/4JgAg3AMAAJR5fKxXzHv4IYMGDXJxcaHYrRLuOY77/fffKbJ/88039JLisp2d3evXrytXrtyoUaOrV69STN8vR/0Eyui0pI9QItfW1m7fvr1Kv2Lq1Knr16+nFeoM1KpVKzAw8JBcQECASCRS3m9qamq3bt0yMjKo5rVr12JiYqh3QXsfMWJEZGQkZX19ff3o6OiJEyeKxWLarOKDL1686Ny58927d9XV1S0tLZOSkjw8PGiJbwIAwj0AAECZ16lTJyMjo7CwsFGjRs2bN8/c3DzPajVq1KBcfuLEifv37zds2FBRHhER8eTJk7Fjx1JWppcLFiygZP/bb7/R1oRCYUpKCsX62bNnZ2dn07u6urqhoaGZmZlaWlqU3WldeRdUk5J927ZtDx48SO9Syd9///3DDz9s2rRp9erVKhfXd+3atX379i5dulCH4fnz57169aIo369fv969e+/Zs4ef5GfVqlWzZs1asmTJmDFjdHR0+A/SdijZU83NmzdXr16dSuilm5tbYmIivgwARUuAJgAAAChhhoaGu3fvpuWOHTssLCzat28/c+bMgIAAsVisUnPw4MG0/P3335UL//jjD1o6ODjwLyn6a2pqOjk5UbKnl3p6epT74+Pj+ev6+fvxxx9FItGBAwf4ZM/IH4bq6+tL/QoK9xkZGcqVv/32W/5XAbRes2ZNfr7Fhw8fLl68WDF9J0X2Vq1avXz5MiYmhi+hBL9z507qzNAPyyd7YmZmRv0BqVSKLwMAwj0AAECZ161bt+joaMr0zZs3j4qKojzdr18/StgUqTmOUw736urqfJrnUSDet28fpWTF0PzKlStnZmZGREQob78g987GxcXFxsZ26tSpdu3ayuXa2tpt27Z99eoVHZhyOSV+5Zdt2rThd8T/AkGlPCEhgX956tQpmUzWp08ffX195WrUCTE2NsY3AaBoYVgOAADAl/HVV1/xd7WmpKRcunTp4MGDu3btcnNzi4mJ8ff35+tUqVKlR48egYGBipE5p0+fTkpKmjJlCn+dnowdO5ZSOFWzt7fv3Llz9+7dLS0tC3IA/Jz3ycnJXl5eKm/xt/xSBeqEfOjj1apVy7Pc0NCQlunp6fxLPuXXrVs3d02Vh7BWHBX2BweEe4D/tXf/oTXuDwDHd+fWbDUlNv6w2kZqSVZS+GPLJEVIiyVbi5IWkriJtERJ84cw+fEHK2Xxx/IdWSJti5F9KWabppQ15sdoSJmM+2mne9rF3b11d3d33Nfrj6dznvOcH89np/Z+Tp9zHoAfX3Jycl6fnTt35uTkVFRUFBUVRas6Pz8/xP3p06dLS0vD1XAMEPfbdJ1o3L9+/fp/vwlrMjIyli1btm3btoE/vw8HFWH5/z7f3eDt27d/f+8ild//t3cAcQ8AP77U1NTVq1dv3bq1vr6+f9yXlJScOXMmxH1vb29VVdWECRNyc3P73/GXPl1dXZcuXbpx40Z1dXVZWVl3d/exY8cGeLrIybNWrVp14sSJf26nkpKSwvLTp0/+vjAEzLkHgH9BKO/vro9M2IjOaYnr+1x/wYIFLS0tTU1Nly9ffvHiRUFBwXfndYwdO3blypXl5eX3798fPXp0TU3NwK9h8uTJYdnR0fGP7ml6enpYtre3f3tT/28XAOIeAGLS0aNHMzIyGhoavlr/+fPn6urqcGHKlCn91+fn54dlKPvz58/H/X5OTlzf79w/e/as/5pRo0aF0P/TSTVZWVnhierq6jo7O7+6qaKi4sGDB4Oys3l5efHx8RcuXPjq9bx79+7x48feDCDuASC2PXz4sLu7e86cObt373716lUk62tra0PEX7t2LXp2qqhFixaNHDkyVPjFixcnTpw4c+bM6E2PHj2aPXt2Tk7OuXPnPnz4EFlZWVkZniJyvqqIP/oGZ2lp6cePHwsKCp48eRJZ8+XLl5MnT27YsKG4uHhQdjYtLa2oqCgcfoRl9MRVbW1thYWF0e8EA4PFnHsAGGr79u0LXRuWoa137dqVnZ3d0dER+fQ9MTHx1KlTX/0QTXJy8uLFi8+ePRsub9++vf9NmZmZ4XE2bdq0dOnScN/p06fHx8fX19eHg4G9e/dGN0tISBg3blwo+Hnz5oWrW7ZsmT9/friwfPnysPHhw4fT09NnzZoVNuvs7Gxubk5NTT106NBg7W94JTdv3qyurq6pqZk2bdr79+9bW1uPHz8ejkDCBe8HEPcAEMNCf5eVlS1ZsqSysvLWrVttbW1v3rwJ8b1w4cIdO3ZkZGR8e5f8/PxI3EfPXRW1bt263Nzc8vLy69ev37lzJy0trbCwMBwDZGVl9d8srNm4ceOVK1fC5bBBdH24Ywj98OCNjY2h7MORxp49e9asWRP5RctBMX78+IaGhgMHDly9erWpqWnGjBnr168PT7F//35vBhhcfmYVhtSYMWMOHjwY/n8bChjOmpub165dGz3H6nDQ1dWVkpIyderUe/fu+QP9dZs3bw7jVlJS8vcfau7cubdv3zakDPfPDgwBAAx/tbW1cd/72B5A3ANAjKmqqgrLFStWGApgAObcA8CwVlxc/PTp04aGhry8vEmTJhkQQNwDQKxqbGxsbW3Nzs4+cuSI0QDEPQDEsJaWFoMA/EXm3AMAgLgHAADEPQAAIO4BAABxDwAA4h4AABD3AACAuAcAAMQ9AACIewAAQNwDAADiHgAAEPcAAIC4BwAAcQ8AAIh7AABA3AMAAAP62RAAwLd6enru3r1rHGLdy5cvU1JSjAPiHgD+uxITE5OSkoqLiw3FDyAnJ8cgIO4B4L8rMzOzrq7OOAAxx5x7AAAQ9wAAgLgHAADEPQAAIO4BAEDcAwAA4h4AABD3AACAuAcAAHEPAACIewAAQNwDAADiHgAAEPcAACDuAQAAcQ8AAIh7AABA3AMAgLgHAADEPQAAIO4BAABxDwAA4h4AABD3AACAuAcAAMQ9AAAg7gEAQNwDAADiHgAAEPcAAIC4BwAAcQ8AAMSanw0BDLGampr29nbjABBbnj9/bhAY/n4yBDCURowYkZCQYBwAYk5vb29PT49xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/tivxZs2qwplbmRzdHJlYW0KZW5kb2JqCjQ1IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMzQ2Pj4Kc3RyZWFtCnja7ZZNS8NAEIbv/or5A9nO7MzsB5QexA/0Vs1NPFhtvVikvfj3nd2m1QQRC0oRSphJ8ubZZIa87C6sgADtIIgeKLEjSvC4BHQppl6+ufxCXD8fnCT0vVzJoWjkChprsdn2KMpOhcGr1vv1HBYw/Ud9H8kj+T0pkXq5kkPxz77O5Hu5kkPx+DeP5C+Spy2MLgjIJv2QIrQLaIRdUAFFh8lD+3Q3RqQHRJxb5EnjORQlW6iFt5h1xKLTBFEXk4ZJjETZjsH5JJahhmGwc9oMwVQAHXfqrHuRr0/u22s4b/fq3Sv1ciWHYl3fHOek8LbrWdQljbAEtrWOctwKL3B78JVuVYuShJw3+4/snWiivKu+Ic0uYyi7kdHVEuHs9c+qllLFp7yZKQfiXmR1IoPtLYS1GJFDcsGaisFxkM6IYmaiUMwUc7kqfmIzpvCHU35e2yH/5/TkHduDGxcKZW5kc3RyZWFtCmVuZG9iago1MCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDgzNz4+CnN0cmVhbQp42u1YzW7bMAy+7yn0AlZFStQPMPgwYB2wW7fchh2ypNllPbSXvf5IWrJjNyuStF0xICiiKPRni+THP9fcGzCO/8AkNJC9Bchmc2eczSnP1i+fDggffr45EhzOVkUuhYy8Nx2b2DUbA3lLwRsk0t8Pt2Znbv4juy/IC/JpZEgwWxW5FL7a6R5wtipyKbyweUG+IPLDylxdgwEu+jEns9qZLngbKRhy1mU0q+23985B6ZN8rfvAX67wNvYdeuJf/tY52vWdh6AQvn4rGLkeRQI9+nZX5k+oe+y/rz6bj6uTDEOC2arIpVCbl/Ulk/k9GhTIZkrmznhuZFBSE/wyX9+8jSkN3hTrc8z7LHTIFrGuAw0uiQuVAyBlJQ7kgONvor4riuqpIbwwxaKd+Luxole3Vap8KRNX18QaZMggGmS0wRMPOjUC+Cme7wn8RC8s/uB9fbLbCMuV3SbPk6z9dsJ8qGftWwsQLAQcD1PFQgsgN+4w9tgCUA+g0R8DiBbmh2pgaM9sYdhn9dh2CkHwSdZQZI01sJbCYX46EsnzU4g2sl0dRVs8j1AObcZssFiXpgHq+KOPjzyKkgvyiFhhM0mLuX3Gx5jzmVtNacSzy3SRpI7npGyGtqRYYfuSg6pIQJSyVIVVQKZRAhmZ3uyXcdl3VCQFFCFIjky+oJ+wrnKWoey3ElD84YBAPPS0U6P8HOeAsELiCV953xMccg1ish7jwjUx/ZPDR14IrOauHq6e2J6lAA3hOEXpTHJQBa5L/PYx16Awn9Gdo8EZecJ1K4aFAhoEvlYdHMvc67uDoyA/ckeEf5SnPCTExdmSa1BTa6wdWWtHx6JaUdRHNCSOJlfUkeIcn7148fx7M07JYhxnojbp7LQFt2knDu2GW0w3zENTG6sNfD3UD0Xh0Mxx6OCwm9rz1OW1xlTA2L831NpZD2XWytq/J8TDlutkKvvbzZ15wsCSLOX4pIELcx+Pe1hNq8PJejRpXW/2+3CcbmwTyeiTdmPRfApzB7WDa4s/xf6G6Pbk3TMwzzvplV5lfZmtw6vsQngSskYNcVrxXCilJ2bJfkhRC2LtBTyEQhQ+U5Fdqm8IwU/JfbxubzmT37z7A3f3HNUKZW5kc3RyZWFtCmVuZG9iago1MyAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDgzNz4+CnN0cmVhbQp42u1YS2/bMAy+71foD1gVKVEPYPBhwDpgt265DTtkSbPLemgv+/sjacmvpkUatOsGFIVlhf4sUfz4cs2tAeP4D0xCA9lbgGx2N8bZnPJi/PLpiPDu56sjweFiVORayMhb0/ERu3bGQN5S8AaJ9PfdtTmYq//o3G/IN+TjyJBgMSpyLXyx3T3gYlTkWvjG5hvyGZEfNubiEgxw0o85mc3BdMHbSMGQsy6j2ey/vXcOSp/ktu0D31zhaew79MS//LVzdOg7D0Eh/PxaMPI8igR69O2tzFeoc+y/bz6bj5snHQwJFqMi10ItXtaXTOb3eKBANlMyN8ZzIYOSmuCX+frqZUxp8KZYn2Oes9Ahn4h1HWhwSUyoHAApK3EgBxzfifquKKqnhvDCFIsOYu/Gij7dV6nypUxcXBJrkCGDaJDRBk/c6FQP4FU8vxN4RS8s/uB5XdnthOXKbpPnSdZ+O2E+1L3mpwUIFgKOm6lioTmQG2cYe2wOqBvQaI8BRKvjh3rA0NZsbthntdh+ckHwScZQZIzVsdbCoX86Ecn9U4g28rk6irZ4bqEc2ozZYLEuTQ3U6Vuf7nkUJRZkiVhhC0nzuTnjo8/5zKWmNOLZZDpIUMdzQjZDG1KssLnkqCriEKWsVWEVkGkUR0amN/u1X/YdFQkBRQiSPZMf6BW2Vc4ylPleHIovdgjEY6s91cvPMQ4IKySW8JX3meCYaRCT9RhXponpr2w+8kJgNXZ1c7XE/iwFaHDHyUsXkqMqcF7ir4+lBoX5jO4cDc6IE85bMawUUCfwNevgmOZe3hzsBfmeOSL8pTjlJiGu9pZYgxpaY+7Imjs6FtWMojaiIXA0uKK2FOfY7NmT58PFOCWLceyJWqdz0BLcup04lBsuMd3QD01lrBbw7ZA/FIVDMcehgsNhKs9TldccUwFj/d5RK2c9lEUpa/+eEAtbzpOpzKe7GzMiupm8W2EeNkJJlnJ81Agrk9xvCbEevzYw2/HY2/qyn8NxerF1LaPd2otFYy4sjdg2rm3Ac9voX1rlhT6IfVmMwwfxSvgkZPUr4uDk7lISWMySQyBFTau1onArC1EYT0VmqX5nBD+liNN1e83O/urdH6iRKi8KZW5kc3RyZWFtCmVuZG9iago1NiAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDc5Mz4+CnN0cmVhbQp42u1XS4/UMAy+8yvyBxriOE9p1AMSIHFbmBviMK9yYQ+7F/4+tvOYtjtasYJhhTQaTdo4Xxw/PrutelCgDP1ARasgoQZI6nCvjE4xLcbPHy8IH7+/OhKMXYyCXAsJ+aAGcnFoPjqP2jtU1nuZP57UpO7+I79vyBvyeaSLsBgFuRZe7XQEuxgFuRbesnlD/kXku616+wEUUNMPKartpAaHOninvNEmWbU9ft0YA3mMfNmNji4m020YB4ueZjgZ46dxQJC1QGt72QHAW6Yq8yMwGk7jt+0n9X77Inesh8UoyLVQHlkac/LqZ3fDeZ18VPcK6fEFOTbBD/Xl1R9eEnxUWWMKaR77IZKNvsZ+HtG4iqgtEa2ZAOzIULJVFxhuMs/CZrZMQlevrDPWuR1FmR3ByHFdvS1AYBCMECoVTOrn7EZkoKd/F4r+09yApkSuO8HyNjkcWYvYyHv9sbGlvXSxDdpYH/P8lt6/nommTRoI1Kl82fvLbs6s3Xf7L7qZRZ9xFGvct7QIvAW2/X3LTXiSG8aSTtfUV2NzyYX345AFVVLka85DtdK2hFyK3DCL17CK3Z9E1yXtTW8U09n2fQ+Nq3Z1soirrhMy9bZSCTgjtHGzFFwgSx6tWTDlapXqyfsECRbeh6STDdX7TFmlXGxKSiQt+y6hiQyHSqtYwsQyWQvigKEXbn7Pzk9VNgUnAVcpp8mSSkuUsxQPS2JLsXEUKg4PsvpTucoap4A5c5gf5y86UGLcJKwOUnXtUOe2dBxX3cUj3ZMc01IOsToaSwA491XrVFewrIpGunfH2Qm2rIUSoiUPDZNZo8XqgjyO2AzT6GVpZqmbuUKTyi0xk0zMcCbkOW+tlKD0orYVAWcdudRcIXzvtUL9Tm1JlhPWSoPkuBzHvFlKc998PJcPFQr29tlLBfuqW+7czQ47VxaW53bv4c3Hevrg6tZSSrU/7V7WeP9Og/n3Wq5/0pW+UjAvxvKVshK+CFmbO33XO/RcVEhtLVBriEFjcLWyHDUdCEyrmPmOmYUnrqRz6/19217zxevuzS++r6f1CmVuZHN0cmVhbQplbmRvYmoKNTkgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA3OTQ+PgpzdHJlYW0KeNrtV0tvEzEQvvMr/AfWeDx+StEekACJWyE3xCGv5UIP7YW/z8z4kd00BSo1REhRVe96/Hns+ebzeKMeFChDf6CiVZBQAyS1u1dGp5gW7eePZ4yP36+OBGMXrSBPjYR8UAOFOLQYnUftHSrrvfQfD2pSd/9R3DfkDfl7pIuwaAV5arzY6gh20Qry1HjL5g35ish3a/X2Ayigoh9SVOtJDQ518E55o02yar3/ujIG8hj5sRkdPUym1zAOFj31cDLGT+OAIGOBxrYyA4CnTNXmR2A0HMZv60/q/fpF4VgPi1aQp0a5sjTm5NXPHobzOvmo7hXS9QU5NsMP9eXql5eQjyprTCHNuR8i7dFX7ueMxhNGbWG0ZgKwI0PJVh1guMncC6vZMBldfbLPWPt2FGd2BCPLdfe2AIFBMEKoUjCpr7MZkYGe/rtR/B/mG2hO5LkRLE+TxZG9yB55rt83tbSPLt6DNtbHPH+l76+OGGb24QTzPOM2aSBQl/t5hs5TMYto22M8S0UWf8ZRPnDbUifwRn779y1/4Un+GEs+XXNfN5tLvrwfhyyokkZfdRHqLm1L2uuz+2cvz/Pvkvaml5vpGN22k+fqzrvkhAzXZZ16caoynh0L42ZJOiO5PFqz0NvFzrun6BMkWEQfkk421Ogz5Z2ytSpJk8Rtu4U60uyq8GKhiW0yFiQAQ5/t/LWen7psDg4CrlZOkyWXlkRpiQ9LZkvcOKKK6UF2fyhPGeMUsKp28+X82QAKx83C7iDV0Ha1b0vdcjVc3NM72TEt7RBroLEQwLmvXqc6gmVUPNK7289WsGUsFIqWOjQsZo0WawhyqfE2TJOXpZ6lmuiKTKq2ZJu0xQxHQR7z1g4blIrWpiLgrK6XU1kE3yu2SL9LW5LlRLVSZpmX/ZhXS2vuk/fH40MHBXsR7kcF+6hbztzMFjueLCy3f78JWox19cHVqeUo1Qq2uUaB+fdeLr/ShX7rYF605bfOifFFyFrcvQaHng8VUlkLVBpi0BhcPVmOig4EllXM/MbKwgOfpGPp/fu9XfPz7e7NL3KotU8KZW5kc3RyZWFtCmVuZG9iago2MiAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDc4OT4+CnN0cmVhbQp42u1XyY4UMQy98xX5gQpxnFVq1QEJkLgN9A1x6K24MIeZC7+P7SxdVdMgRqI1gFqjSVWcFyd+fnGl1YMCZegPVLQKEmqApA73yugU06L9+P6C8fHriyPB2EUryLWRkA9qoBCHFqPzqL1DZb2X/uNJTeruH4r7hrwhf410ERatINfGq62OYBetINfGWzZvyD+IfLNVr9+BAir6IUW1ndTgUAfvlDfaJKu2x88bYyCPkR+70dHDZHoN42DRUw8nY/w0DggyFmhsLzMAeMpUbX4ERsNp/LL9oN5unxWO9bBoBbk2yidLY05efe9hOK+Tj+peIX2+IMdm+KY+vfjHS8hHlTWmkObcD5H26Cv3c0bjilFbGK2ZAOzIULJVBxhuMvfCZjZMRlef7DPWvh3FmR3ByHLdvS1AYBCMEKoUTOrr7EZkoKf/bhT/p/kGmhN57gTL02RxZC+yR57rj00t7dLFe9DG+pjnr3T/6ohhZh9WmJ8zbpMGAnW5X2boMhWziPY9xotUZPFnHOUD9y11Am/kt3/f8hee5I+x5NM193WzueTL+3HIgipp9FUXoe7StqT9eXavnSOXtDe9JE1nBvadYFej67IUwlyXfuoFrEp9dnSMmyXygizzaM1Ck1erCZ6iT5BgEX1IOtlQo8+kDcropiRWkrvvFupIc6jijIUmtslYkAAMXe35Rp+fumwOTgKuVk6TJZeWhGuJD0tmS9w4oorpQXZ/Kk8Z4xSw8g7z5fzFAArHzcLuINXQDrVvS21zNVw80jvZMS3tEGugsRDAua9epzqCZVQ80rs7zlawZSwUipY6NCxVjRZrCPLh422YJi9LPUt10xWZVG3JNmmLGc6CPOetHUgoVa9NRcBZ7S8ntwi+V3WRfpe2JMuJaqUUMy/HMW+W1twnH8/Hhw4K9kLdjwr2UbecuZstdj5ZWG4I/WvRYqyrD65OLUepVrnd31qE/j8vV/rFhHnRll9MK+OzkLX8ew0OPR87pMIXqHjEoDG4evYclSUILLyY+Y21hyc+a+fi/Pt7e8lL4N2rH0MqwqkKZW5kc3RyZWFtCmVuZG9iago2OSAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDEwNzg+PgpzdHJlYW0KeNrtWM2O3DYMvvcp9AJWRFHUDxD4ECAp0FvauRU9zOzu9NIckktfv5REeWSPJ9l1d70IsBiMfmha+vSRoiirrwqU4R+oYBVE1ABR3X1RRscQZ+Xvv64Iv/396ppg7Kwsmksha35VAy9xaGt0hJocKktU+t8e1Fl9/onW/ab5pvl9TRdgVhbNpfDFZkews7JoLoVv1nzTfEbNDwf17hMo4KDvY1CHsxocak9OkdEmWnW4//O9MZDGkKvj6LgyiZt+HCwS9xwL6DwOCPkZIP+BRWeundTHEfNrIb8mIhr/OvymPh6etCpLMCuL5lJYTi6NKZL6d1qNIx0pqC8K+RSDFJrgH/XHq59hxQaoksboYzNBYtCojUGxgGVOIVb6mUfzMILhtvcjmWogMcec+PJSId9V25jjTPk0UjOok1omcZO5gYq0veLKAFQm5f9Jxk1XII655xvg/JorRn/3KXSLhZAtgZxRiatFGbQp98yA1xbgonvMTOTJp4l9x4Cro+X+BZ6/gld80ol/wpjeTwuk++alLeezrKaNpZD6Jqd/61bMrjdA0GhBIN9iRv40A3ahoklSReoYMuYnD9NIj1p4Gf8yGlPnWOLYfnRXawdryx66xQ6Lhf+YGg4uGHLpUi69bNylsCanj9Tk5NR57V1OUNFpB6icsTrayMEsaWLCpwT18bM/IVXIvfIyFzVP6CVtWxM7RIQIM4dA0taSOEQ4jQPbLm9xZs1ADZ+Um6E9yV2wrQfZadj45q6GYZHa4r2tx8+dFWc51hqzue83xF1uelVpk2ZbXlpbnos6BNf8HcWPGRfcST9DPW05AMBzQfwPKFbsBGucI6dsuICUN4+T7VI5LFxvgPN/nMBbjgp45QQ5lF5MXeBBgyi7HKpDsCmb1kkch+qTsv+ttCcHMXIqm3OTFKdg24SHXqec4Ci6vnfDcq5DHag88VtIy9YiKYpWL/guZfmkCLYPpFYid1naJofK8/pYi+pRvWQVTtRo4hLNTTev+2+d2K0URmhF8KLWS9ZQRw7IzO8cdcSdOIukk1vO7s2W2ZMvN6FaFLWZZNVilhfPB1dM2tk2O7FFvM31TigkFK2C2BeI1YmPyWskRiJNjie7ofFR21VeChpJ8HZDA4ZjDaySgx1B/joY7geRGXMQ1iBKKMyBZTc4bXMBZ18pwBLOqTLUjqPdYNmgDWd4N2DlMLwbFPKcDMAqFNqZlRaHb0DZ028ASLtVJL5znT3jIrChPPpbmEoelrbi2ZIqtp3Ft16yXaZIKd9R3an9p9zxnPO5KVuTbQfzLPB8ySolh+suECbcuGTslFpNV2bkpfvUEoVNjD//re/HN93nuS/vP8rLz/RCH+wxzcq6sRbCJ2nKZxxiH0Eq2ZInTVA+43iNvl0i82UaeeeBz19SQsqtIHLXpdWPR/ianyA///If/o3xrgplbmRzdHJlYW0KZW5kb2JqCjcyIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTA3Nz4+CnN0cmVhbQp42u1YzY7cNgy+9yn0AlZEUdQPEPgQoCmQW9K5FT3M7O70khySS1+/lER5ZI8n3XV3vSiwGIx+aFr69JGiKKvvCpThH6hgFUTUAFHdfVNGxxBn5ZffVoQ//np1TTB2VhbNpZA1v6uBlzi0NTpCTQ6VJSr9Hw/qrD7/j9b9pvmm+XNNF2BWFs2l8MVmR7CzsmguhW/WfNN8Rs0PB/XuIyjgoO9jUIezGhxqT06R0SZadbj/470xkMaQq+PouDKJm34cLBL3HAvoPA4I+Rkg/4FFZ66d1McR82shvyYiGv88fFK/Hp60KkswK4vmUlhOLo0pkvp7Wo0jHSmobwr5FIMUmuCr+v3Vz7BiA1RJY/SxmSAxaNTGoFjAMqcQK/3Mo3kYwXDb+5FMNZCYY058eamQ76ptzHGmfBqpGdRJLZO4ydxARdpecWUAKpPy/yTjpisQx9zzDXB+zRWjv/sYusVCyJZAzqjE1aIM2pR7ZsBrC3DRPWYm8uTTxL5jwNXRcv8Cz1/BKz7pxD9hTO+nBdJ989KW81lW08ZSSH2T079JY+jkw0Jn1dLZPQcIGi3Ism6xJ3+agb/Q1SSprsbxsjA/eZhGehQ5ZfzLaEyvY4ljG9NdrR08PzX/PgqHKAy5dCmXXrb/UlhT3EdqcorrvPYup7notANUzlgdbeSQmDSxSaY09/GzPyHhyL3yMhc12+glLTgQu0yECDOXQdLWkrhMOI0DWzcHCmbNQA3ClJuhPcldsK0H2a3YPcxdDeYitWUPtB4/d1bc6VhrzA5xvyF6c9OrSps02/LS2vJc1CG4tiNQPJ1xwZ30M9TTlmMEPBfE/4BixU6wxjly4ocLSHl7OdlQlcPC9QY4/8UJvOW4gVdOkAPyxdQFHjSIEgegOgSbsmmdxHGoPikRwkp7chAjZ7s5N0lxCrZNeOh1Sh6Aout7NyzZAdSByhO/hbRsLZKiaPWCn1KWz5tg+1BrJf6XpW1yqDyvj7WoHtVLVuFEjSYu0dx087r/1ondSmGEVgQvar1kDXXkgMz8zlFH3ImzSDq55ezebJk9+XKfqkVRm0lWLWZ58XxwxaSdbbMTW8TbXO+EQkLRKoh9gVid+Ji8RmIk0uR4shsaH7Vd5aWgkTRxNzRgONbAKjnYEeSvg+F+EJkxB2ENooTCHFh2g9M2F3D2lQIs4ZwqQ+042g2WDdpwhncDVg7Du0Ehz8kArEKhnVlpcfgGlD39BoC0W0XiO9fZMy4CG8qjv4Wp5GFpK54tqWLbWXx3JttlipTyTded2n/KHc85n5uyNdl2MM8Cz5esUnK47gJhwo1Lxk6p1XSpRl66Ty1R2MT489/69rov7z/Ky8/0Qp/9Mc3KurEWwidpyoceYh9BKtmSJ01QPvR4jb5dIvNlGnnngc/fWkLKrSBy16XVj0f4mh8yP//yDw29/wgKZW5kc3RyZWFtCmVuZG9iago3NSAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDEwNzc+PgpzdHJlYW0KeNrtWc2O3DYMvvcp9AJWRFHUDxD4UKAJkFvauRU9zOzu9NIckktfv5REeWSPJ9h1N94kWCysH5qWPn2kKGpWfVagDP+BClZBRA0Q1d0nZXQMcVb+/n5F+OXvF9cEY2dl0VwKWfOzGniJQ1ujI9TkUFmi0v/yoM7q4w+07lfNV82va7oAs7JoLoXfbHYEOyuL5lL4as1XzWfU/PWg3rwDBRz0fQzqcFaDQ+3JKTLaRKsO93++NQbSGHJ1HB1XJnHTj4NF4p5jAZ3HASG/A+QHWHTm2kl9HDF/FvJnIqLxr8MH9dvhSauyBLOyaC6F5eTSmCKpf6fVONKRgvqkkE8xSKEJ/lF/vPgZVmyAKmmMPjYTJAaN2hgUC1jmFGKln3k0DyMYbns/kqkGEnPMiS8fFfJdtY05zpRPIzWDOqllEjeZG6hI2yeuDEBlUn5OMm66AnHMPd8A589cMfqbd6FbLIRsCeSMSlwtyqBNuWcGvLYAF91jZiJPPk3sOwZcHS33L/D8Fbzik078E8b0dlog3TcvbTmfZTVtLIXUNzn9mzSGTj4sdFYtnd1zgKDRgizrFnvy0Az8ha4mSXU1jpeF+c3DNNKjyCnjX0Zjeh1LHNuY7mrt4PmpeZ5ROIxhyKVLufQSIpbCmgY/UpPTYOe1dzkVRqcdoHLG6mgjh82kic02pcKPn/0JSUnulY+5qBlJL2kBhNitIkSYuRWStpbErcJpHNgDcjBh1gzUQE25Gdqb3AXbepBdj13I3NWAL1Jb9knr8XtnxeWOtcbsNPcbIjw3vaq0SbMtL60tz0Udgmu7BmU3MC64k36Getpy1IDngvgJKFbsBGucIyeHuICUt6CTTVc5LFxvgPN/nMBbji145QQ5aF9MXeBBgyixAqpDsCmb1kkch+qbEkWstCcHMXL+m3OTFKdg24SHXqfkCii6vnfDkkFAHai88VtIy9YiKYpWL/gqZflMCrYPx1bOiLK0TQ6V5/WxFtWjeskqnKjRxCWam25e9986sVspjNCK4EWtl6yhjhyQmd856og7cRZJJ7ec3Zstsydf7ly1KGozyarFLC+ej6WYtLNtdmKLeJvrnVBIKFoFsS8QqxMfk9dIjESaHE92Q+Ojtqu8FDSSSu6GBgzHGlglBzuC/HUw3A8iM+YgrEGUUJgDy25w2uYCzr5SgCWcU2WoHUe7wbJBG87wbsDKYXg3KOQ5GYBVKLQzKy0O34Cyp98AkHarSHznOnvGRWBDefS3MJU8LG3FsyVVbDuL79dku0yRUr4Nu1N7ptzxnPO5KVuTbQfzLPB8ySolh+suECbcuGTslFpNF2/kpfvUEoVNjD//re97ulP/fKN8o38eYJqVdesthE/SlJ+LiL0IqeRTnjRB+bnIa/Ttmpmv28h7E3z+xSak3Aoid13i/XiEL/lz6Mdf/gOq9gxxCmVuZHN0cmVhbQplbmRvYmoKNzggMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA2NzI+PgpzdHJlYW0KeNrtV82OEzEMvvMUeYEJcRznR0JzQAIkbgu9IQ7tbMuFPexeeH3sxNN2ptVqu7RUK1VVfsb54ny2Eyc1jwaM4x+Y5A1ktADZDA/G2ZzypP725Yjw6dfVkeD8pK7IuZCRj6ZjE7vRxkBoKaDxRPX7aW025u4N2X1D3pDPI0OCSV2Rc+HFVkfwk7oi58JbNG/IMyI/Lsz7z2CAk37MySw2pgtoIwVDzrrszeL+xwfnoPRJmmUfuHGFu7HvPBJ/BXCONn2HECqEx9eCkfHIEo89eGk3XHjERy6swSeeN/RRZiHpGMsxj5odz4DAbWp9l3XtUKn8XHw1nxYnucUTTOqKnAvr1WexZDJ/tu4IZDMl82CQr0EoaRT8Nt+vfgnWIKIpFnPM+zHsOK4h4y6IUKO4qVE8ElMUH2+9z3EC0rKseAHSvYQaX6Fv0yRVWjSaEtUWTRwn+R5c0zpOHIFln4RGf3yMeR63zlMq+11+lz3jHWQPujR6R2jQuGnrWllKs41qN7upAyZTwDecW/VdHW5AsYBPiINVZR+bi9Q0KOoXv9vZLvXV6tJ7d9TUbs/Abmbsv7iDwAKCukPOcLV6pY4o+3bOY5ZrCnjFgTxpixOzzpBhwjqBDdw21kLND1xWknc01zDXwPsXvcpjyzdZ9uJQSTs+Kfy4JdWSOIIMElvXTc/h/C0i7jxS8558pyYPqwlq0DYpihu30wNNWgu1/Kojgl/pHEWw5j3eoRwQR6XFm3ZUsxwleproYIFBaayPjmwJTb+q8ahbeditAeemKYu4OMGRYqElCV3uRVnhPIfp/2u5/EoXelpjmdTtaT0TnoTURMZ/RgOSpASMZAnk1kvRYhxzAq6lcE6Okr1SkV5SecBd0no5w2ve9Xfv/gIYM2ROCmVuZHN0cmVhbQplbmRvYmoKODEgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA2NzM+PgpzdHJlYW0KeNrtV82OEzEMvvMUeYEJcRznR0JzQAIkbgu9IQ7tbIcLe9i98PrYiaftTLvArrZbIVVVfsb54tifEyc19waM4x+Y5A1ktADZDHfG2ZzyrP7y6YTw4cfFkeD8rK7IpZCR96ZjF7vJx0BoKaDxRPX7YWtGc/Mf+X1FXpF/RoYEs7oil8KzrY7gZ3VFLoXXaF6RL4h8vzJvP4IBTvoxJ7MaTRfQRgqGnHXZm9Xtt3fOQemTNOs+cOMKd2PfeST+CuAcjX2HECqEx7eCkfHIEo89eGlHLjziIxfW4BPPG/oos5B0jOWYJ82OZ0DgNrW+y7p2qKZ8X302H1ZPosUTzOqKXArr1WexZDK/dnQEspmSuTPI1yCUNAl+mq8XvwRrENEUiznmwxh2HNeQcR9EqFEcaxRPxBSF4x37HCcgLeuKFyDdSqjxGfrGJqnSotGUqLZo4jTJ9+Ca1mniBCyHRmj0p8eY53HrPKVy2OV32Q7RHci7BeZxBpFZdmliUEylaWNXe7KU5j/VbnZzkmZTwDec2/RdHW5A8ZJPkYNN9TA2GtV9KMqd3+9+l/rKTOm9OwMdf9fyOGEEFhCUMMkElZeNUlUOmVhGPtdE8oxj/aSDQmx1hgwzqxPYwG2zWkzzA5eNZC/NWGxr4FOAXuWxZa0sO3qoRjs+b/xEJtWSOMYMEl+3Tc/x/B0i7hmp2VO+U5OHzQw1aJsUxY3b64EmrYValtYRwW90jiJY84HdoRwZjmoWb+tJzXqS6JmkowUGNWN7cmRn0PyrOo+62Yf9GvDSZsoiLs5wpFhoqUaXe8XD9Ppazr/SmR7oWGZ1e6AvhE9CaiLjv7QBSVICRrIEcnemaDFOOQG3UjhrR8leqUgvqTzgPmn9u4WXfDHcvPkNumJxqAplbmRzdHJlYW0KZW5kb2JqCjg0IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNjY4Pj4Kc3RyZWFtCnja7VfNjhMxDL7zFHmBCXEc50dCc0ACJG4LvSEO7WyHC3vYvfD62Imn7UwLoqutCqiq8jPOF8f+nDipeTRgHP/AJG8gowXIZngwzuaUZ/WnDyeET9+ujgTnZ3VFLoWMfDQdu9hNPgZCSwGNJ6rfT1szmrt/yO8b8ob8PTIkmNUVuRRebHUEP6srcim8RfOGfEHk25V5/R4McNKPOZnVaLqANlIw5KzL3qzuv7xxDkqfpFn3gRtXuBv7ziPxVwDnaOw7hFAhPL4VjIxHlnjswUs7cuERH7mwBp943tBHmYWkYyzHPGl2PAMCt6n1Xda1QzXl6+qjebc6ixZPMKsrcimsV5/Fksn82NERyGZK5sEgX4NQ0iT4bj5f/RKsQURTLOaYD2PYcVxDxn0QoUZxrFE8EVMUjnfsc5yAtKwrXoB0L6HGZ+gbm6RKi0ZTotqiidMk34NrWqeJE7AcGqHRnx5jnset85TKYZffZTtEdyDvFphfM4jMsksTg2IqTRu72pOlNP+pdrObkzSbAr7h3Kbv6nADipd8ihxsqoex0ajuQ1Hu/H73u9RXZkrv3QXouDSpBBYQlFTJFpW7jdJZDtla7o5ck80zjv5Zh4nY6gwZZlYnsIHbZrWY5gcuG8lwmtXY1sAnBb3KY8tsWXb9UI12fCb5GU2qJfE+YJD4um16jufvEHHPSM2w8p2aPGxmqEHbpChu3F4PNGkt1DK5jgh+o3MUwZoP7A7lyHBUs3jrT2rWk0TPLR0tMKgZ25MjO4PmX9V51AMx7NeAlzZTFnFxhiPFQktHutxfduD+Py0XeuZjmdXtmb8QnoXUVMd/jAOSJA2MZAnkBk7RYpyyBm6lcO6Pkt9SkV5SecB9WvtzC6/57rh79ROj4n8CCmVuZHN0cmVhbQplbmRvYmoKODcgMCBvYmoKPDwvVHlwZS9YT2JqZWN0L1N1YnR5cGUvSW1hZ2UvV2lkdGggMTkwNC9IZWlnaHQgMTI4L0NvbG9yU3BhY2UvRGV2aWNlR3JheS9CaXRzUGVyQ29tcG9uZW50CjgvRGVjb2RlUGFybXM8PC9CaXRzUGVyQ29tcG9uZW50IDgvQ29sb3JzIDEvQ29sdW1ucyAxOTA0L1ByZWRpY3RvciAyPj4vRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aAoyMTk3Pj4Kc3RyZWFtCnja7d1dbFb1HcDx/yPKWEXqxFqoIE1Zm5YuozFe6eLFXEjm26Xuyph4tWx3M7tcFl8uFGay+YIvoKDCOiXG+U40Lm6KCoRStr7YUm2xKZQWEGhLKbSP52np4jTKEzPlOf/z+TahKfxvfs//9HxynnOeEIIkSZIkSZIkSZIkSZIkSZIk/T97ZWWUY/3uueLW1W09P8bxT66YcGifrQ3XRTnW6r/YWqk0610W5Vi/eaS4dSvfujTG8YeXjju0z9aOq6Ic60932lqJt6Xo7ZsVvOUtbyXxlre85S1vJd7ylre85a0k3vJWvJXEW97ylre8lXjLW97ylreSeMtb3vKWtxJvectb3vJWEm95y1veSuItb3nLW95KvOUtb3nLW0m85S1veSuJt7zlLW95K/GWt5ny9vFbT8U2+7Ea3hZTZe9omsccqXbyjuVkfV+UVwdDDbzl7f+28bboZh9cxNuivN1zWaoP8Sh/cbPp7UNRjtVXzVve8pa3vBVvectb3vKWt7zlLW95y1ve8pa34i1vectb3vJWvOUtb3nLW97yVrzlLW95y1veire85S1vectb3vKWt7zlLW95y1vxlre85S1veSve8pa3vOUtb3nLW97ylre85S1vxVve8pa3vOWteMtb3vKWt7w9h95WXFSyM4wPFLnw8h+kcYv6J3jLW97ylrfZ8fblq0+X6Ai5w/VFrty7IJ++Hfrhz/bwlre85S1vs+Pt1lUlO8Mnxf5XzfuWpnCHhn7BW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa334u3Gx/blmVv33upuS+r3u5ct2U4y96+f8+rWfD2g+bmA2n3ds/qF0bj9fbtXes6eZsNb/Pd/3xyW3a97appefHpT7Pp7cEFLc80H86ut/nRnWteid/bfZW7n3t2MN3e5kdanvrbWKzetjR1vL6ug7ep77ePhqlcbuq8wlc+F/K56T9mfip8Jf94OjHnnXfXxOntspMhn5+d9QuvwJnXIOSmun4cpv6z5Se3xOft5WFm5i/M/t+XIPkKufyBijCxa/PtV0Z56D/w+8Kh/+XRZ1+Q2UP/xPYnHki3t4u+dptnD/G+pWGy9a+//HnpelsbZg7I2V/Nrx6qk8lWtTx+dyq9XfXvwkmoMNBX92d6j/K7mkLo3Hr0D7xNef3Dob1yYUdDW2NX3cj88HFNd20YK+to6KobqBqs7FneWb64qbCuvSJKb499kg/jPY39SwYrP65pX3HkRzOvwOScwk/tK7pr5rTfPD9ZNzV8WXSzH+8JR8u76sbKJucMVXQ09FaHoYq2xkMLk289y7tr959X2XPDvGTdqdGL4/w1PxLaaud213bWJ6NPzums71sWBivbGnurj5aPlfUvaVs2f/rQP34i1Xs/sjdMzO1oOLRwZH4yU+NAVehf0tEwVpZ866xPhr64vPOmC5N1k58tLNkZPusNA1W9VXOPliez9Czvqgvj89pX7Lsi+Wmgat8VI8PV/TcW1o3mylK4Q0cGx0P/SLIXPcuTU07t9Gz7F4f9iwunoM76tsah4evLCwuTv+Rtuivm/eQQut9+589ZfT+5O7m+bdvcdGt817dFvJ+cXN/u3nhHnNe3xbyfnFw0fbj2wejfT14a8q0bbyrh69uaYrZqfPcj90b7fnIIH7167I+8zYC3Xf9YvyPL9293v7BhIKP3b8t3bdg0kuX7t9tXvx7//du+Ra2bnzmU9vu3e9Y2n473/u1HLz3W4/5tFrx9au32LD+f/K+/b9qf1eeTd6zfdDzLzydvu+uNTDyfvPnZw2l/Prn1/ucn4n0++c2dT3Z7Pjkb3k7n87dZ9PaMuj5/G7e3M/n8bel6e+ZkzVve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95+429fPXpEh0hd7i+yJV7F+TTt0Nl1/CWt7zlLW8z5O0lF5bsDCcPFrmwcm4at+jAKd7ylre85W12vFXJn6x5y1ve8pa3vBVvectb3vKWt+Itb3nLW97ylrfiLW95y1ve8la85S1vectb3vKWt7zlLW95y1veire85S1vectb8Za3vOUtb3nLW/GWt7zlLW95K97ylre85S1vectb3vKWt7zlLW/FW97ylre85a14y1vengtv7/p1dLN3XMvbYrqkdV6ax+y6BlSR9KsHoxyrZRVveSveSjon8Za3vOWtJN7ylre85a3EW97ylre8lcRb3oq3knjLW97ylrcSb3nLW97yVhJvectb3vJW4i1vectb3kriLW95y1tJvOUtb3nLW4m3vOUtb3kribe85S1vJfG2tLx961Le8pa3kr77XmyKcqw7txS3rva1C2Icf/ynEw7ts7X+uijHWv2wrZUkSZIkSZIkSZIkSZIkSZIkSZIk6dv2ORoyp2oKZW5kc3RyZWFtCmVuZG9iago4OCAwIG9iago8PC9Db2xvclNwYWNlL0RldmljZVJHQi9TTWFzayA4NyAwIFIvVHlwZS9YT2JqZWN0L1N1YnR5cGUvSW1hZ2UvV2lkdGggMTkwNC9IZWlnaHQKMTI4L0JpdHNQZXJDb21wb25lbnQgOC9EZWNvZGVQYXJtczw8L0JpdHNQZXJDb21wb25l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","originalSize":132360}},"sourceToolAssistantUUID":"401d6591-94d0-48e0-b8ac-992d18d5d305"}
{"parentUuid":"50bfdf6f-a97d-4ce1-9a7a-1ca7654793f8","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","type":"progress","data":{"type":"hook_progress","hookEvent":"PostToolUse","hookName":"PostToolUse:Read","command":"python3 ${CLAUDE_PLUGIN_ROOT}/hooks/posttooluse.py"},"parentToolUseID":"toolu_01QTkaCswN75tzv4gW4HStpJ","toolUseID":"toolu_01QTkaCswN75tzv4gW4HStpJ","timestamp":"2026-01-27T12:05:44.292Z","uuid":"e63fa179-8eeb-4feb-98b8-ec186266c153"}
{"parentUuid":"e63fa179-8eeb-4feb-98b8-ec186266c153","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","type":"progress","data":{"type":"hook_progress","hookEvent":"PostToolUse","hookName":"PostToolUse:Read","command":"callback"},"parentToolUseID":"toolu_01QTkaCswN75tzv4gW4HStpJ","toolUseID":"toolu_01QTkaCswN75tzv4gW4HStpJ","timestamp":"2026-01-27T12:05:44.292Z","uuid":"1043d363-c5c4-441f-bfc4-77eeea933ca9"}
{"parentUuid":"1043d363-c5c4-441f-bfc4-77eeea933ca9","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","type":"user","message":{"role":"user","content":[{"type":"document","source":{"type":"base64","media_type":"application/pdf","data":"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TfP29p4+fTrOCADCPQAAAHyys2fPflJ9gUAwT065kJ+0XllaWppKyWg51dygpjZJTrnwVzmcGigOffv2DQwMvHbtWvPmzUvh4a1YscLd3T0iIqJjx44I9wAAAAAVmkQiWbp0aXh4eEJCwosXL+rVq2dtbT148OB+/frl+WiwEydO7Nu37/bt2zdu3KhZs2bTpk2po6XyzDIPDw8fHx+VD1auXNnExGTYsGGurq7U30PLF5XQ0FBDQ0N+FlqEewAAAICKi+O4UaNG7dmzh9Zr1arVokWLW7duUXDftWtX586dDxw4UK1aNeX6K1eunDNnDiMfgkV9gPj4+D/lpk2btnbtWpWNm5ub16lTR/Hy1atXV+WoV7B9+3Y0fkH8/vvvjo6O27Zto9OUZ4V3795FRkZ+8803/Cy0CPcAAAAAFZeXlxcl+5YtW/7666+tW7fm4350dPT06dPPnDkzYsSI4OBgRWVfX19K9oaGhqtWrRo0aJCOjg4jf2AZVfbz8zMyMpo7d67yxp2cnPiegML58+f79OmzY8cOeos6D2j/z3f69On09HQ7O7tSdVT4vQwAAADAF7B7925abt++nU/2jPyW5ebNm4eEhMyePXvDhg2KmqmpqcuXLxcIBAcOHBg5ciSf7Em7du0CAgKMjY0XL178+vXr/HfXoUOH8ePH08rJkyfR+AVx//79/CuEhobS0t7evlQdNq7cAwBARRe9XZtVY6qaSao3Eatr42GrUEKePXtGSwsLC5VyTU3NFStWKJdQ0H/58qWzs3OXLl1UKvNTIdWqVcvQ0PCje+QfM5z7duoCClksYwUyKSfs5cmWfHMdPXp069atUVFRNWvW7Nix46RJk5o0aaJS5+3bt9RWERERV65cqV+/PnV+nJyc8rwTNygo6I8//rh48eKbN2/atm3bvXt3al5qef5dNze31atX8+uKO8v//vvvypUrK2/kxIkTzZo1q1evHsI9AABAKSJUZzOS2WeX1P++r1aloVge8dEqUOzMzMyuXr0aGRnZqVOn/GseP36clg4ODnm+2759+wLuUSKRMPLfDxTyiAUy6vsKhbKwJVKOk9h5apRYW508eXLWrFnVq1c3NTW9efNmdHT0pk2b/vzzz169einq3L59u0ePHomJiXp6elZWVo8ePVon99tvv1HEV97azJkzfX19+VNAfYCQkBDa1Pbt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9293v7BhIKP3b8t3bdg0kuX7t9tXvx7//du+Ra2bnzmU9vu3e9Y2n473/u1HLz3W4/5tFrx9au32LD+f/K+/b9qf1eeTd6zfdDzLzydvu+uNTDyfvPnZw2l/Prn1/ucn4n0++c2dT3Z7Pjkb3k7n87dZ9PaMuj5/G7e3M/n8bel6e+ZkzVve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95y1ve8pa3vOUtb3nLW97ylre85S1vectb3vKWt7zlLW95+429fPXpEh0hd7i+yJV7F+TTt0Nl1/CWt7zlLW8z5O0lF5bsDCcPFrmwcm4at+jAKd7ylre85W12vFXJn6x5y1ve8pa3vBVvectb3vKWt+Itb3nLW97ylrfiLW95y1ve8la85S1vectb3vKWt7zlLW95y1veire85S1vectb8Za3vOUtb3nLW/GWt7zlLW95K97ylre85S1vectb3vKWt7zlLW/FW97ylre85a14y1vengtv7/p1dLN3XMvbYrqkdV6ax+y6BlSR9KsHoxyrZRVveSveSjon8Za3vOWtJN7ylre85a3EW97ylre8lcRb3oq3knjLW97ylrcSb3nLW97yVhJvectb3vJW4i1vectb3kriLW95y1tJvOUtb3nLW4m3vOUtb3kribe85S1vJfG2tLx961Le8pa3kr77XmyKcqw7txS3rva1C2Icf/ynEw7ts7X+uijHWv2wrZUkSZIkSZIkSZIkSZIkSZIkSZIk6dv2ORoyp2oKZW5kc3RyZWFtCmVuZG9iago4OCAwIG9iago8PC9Db2xvclNwYWNlL0RldmljZVJHQi9TTWFzayA4NyAwIFIvVHlwZS9YT2JqZWN0L1N1YnR5cGUvSW1hZ2UvV2lkdGggMTkwNC9IZWlnaHQKMTI4L0JpdHNQZXJDb21wb25lbnQgOC9EZWNvZGVQYXJtczw8L0JpdHNQZXJDb21wb25l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"}}]},"isMeta":true,"uuid":"69a975ec-aace-4a7c-b4a9-051c2bcdf134","timestamp":"2026-01-27T12:05:44.264Z"}
{"parentUuid":"69a975ec-aace-4a7c-b4a9-051c2bcdf134","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","message":{"model":"claude-opus-4-5-20251101","id":"msg_016BusdqU9xBADKDDRuBUyUQ","type":"message","role":"assistant","content":[{"type":"text","text":"\n\nLooks good. The josie theme is rendering correctly -- IBM Plex fonts, dark background, purple accent line under frame titles, breezedark code highlighting. The hybrid build diagram on page 12 has the purple arrows. The boot sequence diagram on page 24 is landscape and readable.\n\nThe diagram text on the boot sequence is still fairly small relative to the slide area since it's a long horizontal chain of 8 nodes. The node text (e.g. \"Kernel 6.6.10-arch1 5.8 MB\") is legible but tight. If you want it bigger, the options would be shortening the node labels or splitting the diagram across two rows. But for a projected slide it should be fine at presentation resolution."}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":45765,"cache_read_input_tokens":106791,"cache_creation":{"ephemeral_5m_input_tokens":45765,"ephemeral_1h_input_tokens":0},"output_tokens":3,"service_tier":"standard"}},"requestId":"req_011CXXrRoudTW9BDQ9b3seCU","type":"assistant","uuid":"5359db96-c0e4-408a-bdc2-815ead30adbb","timestamp":"2026-01-27T12:06:01.158Z"}
{"parentUuid":"5359db96-c0e4-408a-bdc2-815ead30adbb","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","type":"progress","data":{"type":"hook_progress","hookEvent":"Stop","hookName":"Stop","command":"${CLAUDE_PLUGIN_ROOT}/hooks/stop-hook.sh"},"parentToolUseID":"9524eadc-f64f-4331-9fe2-2c01efe5eb67","toolUseID":"9524eadc-f64f-4331-9fe2-2c01efe5eb67","timestamp":"2026-01-27T12:06:01.243Z","uuid":"b6d3d293-366e-4ac1-94f9-8462715c86d5"}
{"parentUuid":"b6d3d293-366e-4ac1-94f9-8462715c86d5","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","type":"progress","data":{"type":"hook_progress","hookEvent":"Stop","hookName":"Stop","command":"python3 ${CLAUDE_PLUGIN_ROOT}/hooks/stop.py"},"parentToolUseID":"9524eadc-f64f-4331-9fe2-2c01efe5eb67","toolUseID":"9524eadc-f64f-4331-9fe2-2c01efe5eb67","timestamp":"2026-01-27T12:06:01.247Z","uuid":"299751ac-4437-4d2c-883f-a10a21529c98"}
{"parentUuid":"299751ac-4437-4d2c-883f-a10a21529c98","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","type":"system","subtype":"stop_hook_summary","hookCount":2,"hookInfos":[{"command":"${CLAUDE_PLUGIN_ROOT}/hooks/stop-hook.sh"},{"command":"python3 ${CLAUDE_PLUGIN_ROOT}/hooks/stop.py"}],"hookErrors":[],"preventedContinuation":false,"stopReason":"","hasOutput":true,"level":"suggestion","timestamp":"2026-01-27T12:06:01.319Z","uuid":"4023bbb5-d7f3-408d-84a0-619dc7457896","toolUseID":"9524eadc-f64f-4331-9fe2-2c01efe5eb67"}
{"type":"queue-operation","operation":"enqueue","timestamp":"2026-01-27T12:06:35.148Z","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","content":"the arrows are very thin"}
{"type":"file-history-snapshot","messageId":"c0e8eaa4-69b3-43d3-bfaf-2c39ba09e6da","snapshot":{"messageId":"c0e8eaa4-69b3-43d3-bfaf-2c39ba09e6da","trackedFileBackups":{"notes/fosdem-slides.md":{"backupFileName":"505cfce60b84ca8f@v5","version":5,"backupTime":"2026-01-27T11:40:34.924Z"},"notes/fosdem-script.md":{"backupFileName":"e6fe82df5add6475@v2","version":2,"backupTime":"2026-01-27T10:15:53.794Z"},"notes/beamer-header.tex":{"backupFileName":"30bb6bd108ed8e9d@v2","version":2,"backupTime":"2026-01-27T11:07:41.971Z"},"notes/diagrams/boot-sequence.mmd":{"backupFileName":"ebb7548b18c44a24@v2","version":2,"backupTime":"2026-01-27T12:02:39.952Z"},"notes/diagrams/mermaid-config.json":{"backupFileName":"910f19fef7471e6a@v2","version":2,"backupTime":"2026-01-27T12:05:30.028Z"}},"timestamp":"2026-01-27T12:08:11.958Z"},"isSnapshotUpdate":false}
{"type":"file-history-snapshot","messageId":"8e941469-0f74-46ca-a6fc-2aecbeae29d7","snapshot":{"messageId":"8e941469-0f74-46ca-a6fc-2aecbeae29d7","trackedFileBackups":{"notes/fosdem-slides.md":{"backupFileName":"505cfce60b84ca8f@v5","version":5,"backupTime":"2026-01-27T11:40:34.924Z"},"notes/fosdem-script.md":{"backupFileName":"e6fe82df5add6475@v2","version":2,"backupTime":"2026-01-27T10:15:53.794Z"},"notes/beamer-header.tex":{"backupFileName":"30bb6bd108ed8e9d@v2","version":2,"backupTime":"2026-01-27T11:07:41.971Z"},"notes/diagrams/boot-sequence.mmd":{"backupFileName":"ebb7548b18c44a24@v2","version":2,"backupTime":"2026-01-27T12:02:39.952Z"},"notes/diagrams/mermaid-config.json":{"backupFileName":"910f19fef7471e6a@v2","version":2,"backupTime":"2026-01-27T12:05:30.028Z"}},"timestamp":"2026-01-27T12:08:11.958Z"},"isSnapshotUpdate":false}
{"parentUuid":null,"logicalParentUuid":"4023bbb5-d7f3-408d-84a0-619dc7457896","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","type":"system","subtype":"compact_boundary","content":"Conversation compacted","isMeta":false,"timestamp":"2026-01-27T12:08:11.953Z","uuid":"712018a3-1ea2-4293-a919-ea1662b7d88d","level":"info","compactMetadata":{"trigger":"manual","preTokens":152562}}
{"parentUuid":"712018a3-1ea2-4293-a919-ea1662b7d88d","isSidechain":false,"userType":"external","cwd":"/home/josie/development/archlinux/s390-arch","sessionId":"f173e124-46fd-4ebe-9d94-5978ffe6715c","version":"2.1.19","gitBranch":"main","slug":"rippling-skipping-bonbon","type":"user","message":{"role":"user","content":"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\n\nAnalysis:\nLet me celics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","subagent_type":"Plan"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1058,"cache_read_input_tokens":39989,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":1058},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"}},"requestId":"req_011CXuYoxDo5rHSybS4iWJRP","type":"assistant","uuid":"540c226a-1666-48f3-8c23-a025c48da45a","timestamp":"2026-02-07T23:08:23.902Z"}
{"parentUuid":"540c226a-1666-48f3-8c23-a025c48da45a","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"type":"hook_progress","hookEvent":"PreToolUse","hookName":"PreToolUse:Task","command":"python3 ${CLAUDE_PLUGIN_ROOT}/hooks/pretooluse.py"},"toolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"63f79f39-d6c1-4e14-8c0d-db4f51d1750e","timestamp":"2026-02-07T23:08:23.903Z"}
{"parentUuid":"63f79f39-d6c1-4e14-8c0d-db4f51d1750e","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"type":"text","text":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones."}]},"uuid":"2106c343-2107-4179-ac55-4505e8518900","timestamp":"2026-02-07T23:08:23.957Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"a6aa4440-8de5-48ac-8f96-36e81720d0b2","timestamp":"2026-02-07T23:08:23.957Z"}
{"parentUuid":"a6aa4440-8de5-48ac-8f96-36e81720d0b2","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:27.516Z","message":{"model":"claude-opus-4-6","id":"msg_01GBBm67oGZFWg93386zyPUD","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01VvUhwfJRuveNZuJTQhdmHb","name":"Bash","input":{"command":"ls /home/josie/development/personal/josiedot/health/services/wrapped/","description":"List wrapped service directory"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":10211,"cache_read_input_tokens":9760,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":10211},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYriyQX5pjJXiRy8NBp","uuid":"1e91b190-8c18-41bb-98b3-f19daa83f84b"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"e74d86da-0776-41d3-9b7f-6f9b920cabf2","timestamp":"2026-02-07T23:08:27.516Z"}
{"parentUuid":"e74d86da-0776-41d3-9b7f-6f9b920cabf2","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01VvUhwfJRuveNZuJTQhdmHb","type":"tool_result","content":"app.rb\nassets\nconfig\nconfig.ru\nDockerfile\nGemfile\nlib","is_error":false}]},"uuid":"df8cdb43-cb8b-4169-aedc-1903d3117b8c","timestamp":"2026-02-07T23:08:27.594Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"c143665d-f475-4a42-94f6-0bdda89cf9ec","timestamp":"2026-02-07T23:08:27.828Z"}
{"parentUuid":"c143665d-f475-4a42-94f6-0bdda89cf9ec","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:28.191Z","message":{"model":"claude-opus-4-6","id":"msg_01GBBm67oGZFWg93386zyPUD","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_016h8VimH3RAxJB9PfYDcFhh","name":"Bash","input":{"command":"ls -la /home/josie/development/personal/josiedot/health/services/","description":"List all services"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":10211,"cache_read_input_tokens":9760,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":10211},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYriyQX5pjJXiRy8NBp","uuid":"79ac6a68-9794-4e44-8009-a48cf91067f8"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"c9894a75-fbd6-4213-bf5c-4bfd9f550c93","timestamp":"2026-02-07T23:08:28.192Z"}
{"parentUuid":"c9894a75-fbd6-4213-bf5c-4bfd9f550c93","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_016h8VimH3RAxJB9PfYDcFhh","type":"tool_result","content":"total 72\ndrwxr-xr-x 12 josie wheel 4096 Feb 7 23:34 .\ndrwxr-xr-x 11 josie wheel 4096 Feb 8 00:00 ..\ndrwxr-xr-x 4 josie wheel 4096 Dec 22 23:31 chart\ndrwxr-xr-x 5 josie wheel 4096 Jan 18 19:52 cli\n-rw-r--r-- 1 josie wheel 680 Dec 4 00:13 compose.yml\ndrwxr-xr-x 8 josie wheel 4096 Jan 18 19:16 core\ndrwxr-xr-x 6 josie wheel 4096 Jan 24 19:38 discord-bot\ndrwxr-xr-x 2 josie wheel 4096 Jan 10 11:26 _docs\ndrwxr-xr-x 7 josie wheel 4096 Feb 8 00:03 .git\n-rw-r--r-- 1 josie wheel 4 Dec 4 00:13 .gitignore\ndrwxr-xr-x 6 josie wheel 4096 Feb 7 23:57 irc-bot\ndrwxr-xr-x 5 josie wheel 4096 Dec 22 08:43 irc-ingestion\n-rw------- 1 josie wheel 1415 Feb 7 23:34 Makefile\n-rw------- 1 josie wheel 1772 Jan 9 17:41 .pre-commit-config.yaml\n-rw-r--r-- 1 josie wheel 140 Dec 4 00:13 README.md\n-rw-r--r-- 1 josie wheel 1618 Feb 3 15:02 todo.txt\ndrwxr-xr-x 6 josie wheel 4096 Jan 10 11:31 web\ndrwxr-xr-x 5 josie wheel 4096 Dec 22 11:10 wrapped","is_error":false}]},"uuid":"dc644517-83f6-4c6c-b99a-f07bb76d8d27","timestamp":"2026-02-07T23:08:28.261Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"e9a04eff-48c0-4e06-bfae-03abd953f2f6","timestamp":"2026-02-07T23:08:28.500Z"}
{"parentUuid":"e9a04eff-48c0-4e06-bfae-03abd953f2f6","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:28.795Z","message":{"model":"claude-opus-4-6","id":"msg_01GBBm67oGZFWg93386zyPUD","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01USjC4VGHB9gzbBi9EfSuH9","name":"Glob","input":{"pattern":"services/wrapped/**/*","path":"/home/josie/development/personal/josiedot/health"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":10211,"cache_read_input_tokens":9760,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":10211},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYriyQX5pjJXiRy8NBp","uuid":"21639ee9-5b76-4979-ba08-6dc39ad26573"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"a777cb8f-74a1-4669-9738-34aedc0bfed3","timestamp":"2026-02-07T23:08:28.795Z"}
{"parentUuid":"a777cb8f-74a1-4669-9738-34aedc0bfed3","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01USjC4VGHB9gzbBi9EfSuH9","type":"tool_result","content":"/home/josie/development/personal/josiedot/health/services/wrapped/assets/pillsbg.png\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/output_formatter.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/dose_processor.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/error_handler.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/bot_response_formatter.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/substance_categorizer.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/statistics_calculator.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/graph_generator.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/text_generation_helper.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/time_helper.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/data_analysis_helper.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/video_animation_helpers.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/video_data_analyzer.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/video_slide_generators.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/video_text_generator.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/file_helper.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/substance_wrapped.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/substance_wrapped_video.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/data_cleaner.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/shared_constants.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/config.ru\n/home/josie/development/personal/josiedot/health/services/wrapped/Gemfile\n/home/josie/development/personal/josiedot/health/services/wrapped/Dockerfile\n/home/josie/development/personal/josiedot/health/services/wrapped/config/puma.rb\n/home/josie/development/personal/josiedot/health/services/wrapped/app.rb"}]},"uuid":"6947291e-81db-4f4c-af9a-e20bc7720b20","timestamp":"2026-02-07T23:08:28.882Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"fb0f0eb5-9994-4332-8ae6-da0bb4a5c8cc","timestamp":"2026-02-07T23:08:28.927Z"}
{"parentUuid":"fb0f0eb5-9994-4332-8ae6-da0bb4a5c8cc","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:30.538Z","message":{"model":"claude-opus-4-6","id":"msg_01RXNNeyDcqt3dDsdNMrv7Ro","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Byga9CxZUnCxzqtGMiV6pz","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/wrapped/app.rb"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1927,"cache_read_input_tokens":19971,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":1927},"output_tokens":25,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYs68dRqdpzay5ugiZy","uuid":"935ffc5b-f6ee-457f-9edb-96662352a7db"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"3b2b925a-1e53-4b95-9cf7-b0938ffddead","timestamp":"2026-02-07T23:08:30.539Z"}
{"parentUuid":"3b2b925a-1e53-4b95-9cf7-b0938ffddead","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Byga9CxZUnCxzqtGMiV6pz","type":"tool_result","content":" 1→#!/usr/bin/env ruby\n 2→# frozen_string_literal: true\n 3→\n 4→require 'sinatra'\n 5→require 'sinatra/json'\n 6→require 'csv'\n 7→require 'tempfile'\n 8→require 'securerandom'\n 9→require 'net/http'\n 10→require 'uri'\n 11→\n 12→# Load the wrapped generators\n 13→require_relative 'lib/substance_wrapped'\n 14→require_relative 'lib/substance_wrapped_video'\n 15→\n 16→# Configure Sinatra\n 17→set :bind, '0.0.0.0'\n 18→set :port, ENV.fetch('PORT', 3002).to_i\n 19→set :environment, ENV.fetch('RACK_ENV', 'production').to_sym\n 20→set :logging, true\n 21→\n 22→# Health check endpoint\n 23→get '/health' do\n 24→ json status: 'ok', service: 'wrapped'\n 25→end\n 26→\n 27→# Generate image wrapped\n 28→post '/wrapped' do\n 29→ content_type :json\n 30→\n 31→ begin\n 32→ data = JSON.parse(request.body.read)\n 33→ rescue JSON::ParserError => e\n 34→ halt 400, json(error: \"Invalid JSON: #{e.message}\")\n 35→ end\n 36→\n 37→ user_id = data['user_id']\n 38→ year = data['year'] || Date.today.year\n 39→ csv_data = data['csv_data']\n 40→ callback_url = data['callback_url']\n 41→\n 42→ unless user_id && csv_data\n 43→ halt 400, json(error: 'Missing required fields: user_id, csv_data')\n 44→ end\n 45→\n 46→ # If callback_url provided, process async\n 47→ if callback_url\n 48→ request_id = data['request_id'] || \"req_#{SecureRandom.hex(8)}\"\n 49→\n 50→ Thread.new do\n 51→ result = generate_wrapped_image(user_id, year, csv_data)\n 52→ send_callback(callback_url, request_id, year, result)\n 53→ end\n 54→\n 55→ status 202\n 56→ json success: true, request_id: request_id, status: 'processing'\n 57→ else\n 58→ # Synchronous processing\n 59→ result = generate_wrapped_image(user_id, year, csv_data)\n 60→\n 61→ if result[:success]\n 62→ json success: true, image_url: result[:url], text_report: result[:text_report]\n 63→ else\n 64→ status 500\n 65→ json success: false, error: result[:error]\n 66→ end\n 67→ end\n 68→end\n 69→\n 70→# Generate video wrapped\n 71→post '/vwrapped' do\n 72→ content_type :json\n 73→\n 74→ begin\n 75→ data = JSON.parse(request.body.read)\n 76→ rescue JSON::ParserError => e\n 77→ halt 400, json(error: \"Invalid JSON: #{e.message}\")\n 78→ end\n 79→\n 80→ user_id = data['user_id']\n 81→ year = data['year'] || Date.today.year\n 82→ csv_data = data['csv_data']\n 83→ callback_url = data['callback_url']\n 84→\n 85→ unless user_id && csv_data\n 86→ halt 400, json(error: 'Missing required fields: user_id, csv_data')\n 87→ end\n 88→\n 89→ # Video generation is always async (takes too long for sync)\n 90→ request_id = data['request_id'] || \"req_#{SecureRandom.hex(8)}\"\n 91→\n 92→ Thread.new do\n 93→ result = generate_wrapped_video(user_id, year, csv_data)\n 94→ send_callback(callback_url, request_id, year, result) if callback_url\n 95→ end\n 96→\n 97→ status 202\n 98→ json success: true, request_id: request_id, status: 'processing'\n 99→end\n 100→\n 101→# Helper methods\n 102→\n 103→def generate_wrapped_image(user_id, year, csv_data)\n 104→ # Write CSV to temp file\n 105→ csv_file = Tempfile.new(['wrapped_data', '.csv'])\n 106→ begin\n 107→ csv_file.write(csv_data)\n 108→ csv_file.close\n 109→\n 110→ # Parse CSV and create wrapped\n 111→ parsed_csv = parse_csv_string(csv_data)\n 112→ wrapped = SubstanceWrapped.new(parsed_csv, user_id, year.to_i)\n 113→\n 114→ # Check if we have data\n 115→ if wrapped.instance_variable_get(:@data).empty?\n 116→ return { success: false, error: 'No data found for user/year' }\n 117→ end\n 118→\n 119→ # Generate text report\n 120→ text_report = wrapped.generate_wrapped rescue nil\n 121→\n 122→ # Generate image\n 123→ output_file = Tempfile.new(['wrapped', '.png'])\n 124→ output_path = output_file.path\n 125→ output_file.close\n 126→\n 127→ image_generator = SubstanceWrappedImageGenerator.new(wrapped)\n 128→ image_generator.save_image(output_path)\n 129→\n 130→ # Upload to vault\n 131→ url = FileHelper.upload_to_vault(output_path)\n 132→\n 133→ if url\n 134→ { success: true, url: url, text_report: text_report }\n 135→ else\n 136→ { success: false, error: 'Failed to upload image' }\n 137→ end\n 138→ rescue => e\n 139→ { success: false, error: e.message }\n 140→ ensure\n 141→ csv_file.unlink if csv_file\n 142→ File.delete(output_path) if output_path && File.exist?(output_path)\n 143→ end\n 144→end\n 145→\n 146→def generate_wrapped_video(user_id, year, csv_data)\n 147→ begin\n 148→ # Parse CSV\n 149→ parsed_csv = CSV.parse(csv_data, headers: true)\n 150→ wrapped_video = SubstanceWrappedVideo.new(parsed_csv, user_id, year.to_i)\n 151→\n 152→ # Check if we have data\n 153→ if wrapped_video.instance_variable_get(:@data).empty?\n 154→ return { success: false, error: 'No data found for user/year' }\n 155→ end\n 156→\n 157→ # Generate video\n 158→ video_path = wrapped_video.generate_video\n 159→\n 160→ if video_path && File.exist?(video_path)\n 161→ # Upload to vault\n 162→ url = upload_video_to_vault(video_path)\n 163→ File.delete(video_path) if File.exist?(video_path)\n 164→\n 165→ if url\n 166→ { success: true, url: url }\n 167→ else\n 168→ { success: false, error: 'Failed to upload video' }\n 169→ end\n 170→ else\n 171→ { success: false, error: 'Failed to generate video' }\n 172→ end\n 173→ rescue => e\n 174→ { success: false, error: e.message }\n 175→ end\n 176→end\n 177→\n 178→def parse_csv_string(csv_string)\n 179→ # Parse CSV string into array format expected by SubstanceWrapped\n 180→ csv_data = [['timestamp', 'user', 'substance', 'dose', 'route']]\n 181→\n 182→ CSV.parse(csv_string, headers: true) do |row|\n 183→ csv_data << [\n 184→ row['timestamp'],\n 185→ row['user'],\n 186→ row['normalized_substance'] || row['substance'],\n 187→ row['dosage'] || row['amount'],\n 188→ row['normalized_route'] || row['route']\n 189→ ]\n 190→ end\n 191→\n 192→ csv_data\n 193→end\n 194→\n 195→def upload_video_to_vault(file_path)\n 196→ uri = URI('https://un.vault.moe/upload')\n 197→\n 198→ begin\n 199→ File.open(file_path, 'rb') do |file|\n 200→ request = Net::HTTP::Post.new(uri)\n 201→ request.set_form(\n 202→ [['files[]', file, { filename: File.basename(file_path), content_type: 'video/mp4' }]],\n 203→ 'multipart/form-data'\n 204→ )\n 205→\n 206→ response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|\n 207→ http.request(request)\n 208→ end\n 209→\n 210→ if response.code == '200'\n 211→ json_response = JSON.parse(response.body)\n 212→ if json_response['files'] && json_response['files'].first\n 213→ return json_response['files'].first['url']\n 214→ end\n 215→ end\n 216→ nil\n 217→ end\n 218→ rescue => e\n 219→ puts \"Upload error: #{e.message}\"\n 220→ nil\n 221→ end\n 222→end\n 223→\n 224→def send_callback(callback_url, request_id, year, result)\n 225→ return unless callback_url\n 226→\n 227→ uri = URI(callback_url)\n 228→\n 229→ payload = {\n 230→ request_id: request_id,\n 231→ year: year,\n 232→ status: result[:success] ? 'success' : 'error'\n 233→ }\n 234→\n 235→ if result[:success]\n 236→ payload[:image_url] = result[:url]\n 237→ payload[:video_url] = result[:url] if result[:url]&.end_with?('.mp4')\n 238→ else\n 239→ payload[:error] = result[:error]\n 240→ end\n 241→\n 242→ begin\n 243→ http = Net::HTTP.new(uri.host, uri.port)\n 244→ http.use_ssl = uri.scheme == 'https'\n 245→\n 246→ request = Net::HTTP::Post.new(uri.path)\n 247→ request['Content-Type'] = 'application/json'\n 248→ request.body = payload.to_json\n 249→\n 250→ http.request(request)\n 251→ rescue => e\n 252→ puts \"Callback error to #{callback_url}: #{e.message}\"\n 253→ end\n 254→end\n 255→\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":"209084df-f4aa-44c7-943e-428c5ce24256","timestamp":"2026-02-07T23:08:30.590Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"049824a9-6851-4d24-88e8-fb90c5255856","timestamp":"2026-02-07T23:08:31.008Z"}
{"parentUuid":"049824a9-6851-4d24-88e8-fb90c5255856","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:31.011Z","message":{"model":"claude-opus-4-6","id":"msg_01RXNNeyDcqt3dDsdNMrv7Ro","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Pw4NMRnfLUamGHxZo8GYiP","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/wrapped/lib/substance_wrapped.rb"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1927,"cache_read_input_tokens":19971,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":1927},"output_tokens":25,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYs68dRqdpzay5ugiZy","uuid":"b1a4dafb-1ea1-4779-ab1a-395db0d3192d"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"62cad331-6a51-4703-b80c-5a25f13860fe","timestamp":"2026-02-07T23:08:31.012Z"}
{"parentUuid":"62cad331-6a51-4703-b80c-5a25f13860fe","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Pw4NMRnfLUamGHxZo8GYiP","type":"tool_result","content":" 1→#!/usr/bin/env ruby\n 2→require 'csv'\n 3→require 'date'\n 4→require 'net/http'\n 5→require 'uri'\n 6→require 'nokogiri'\n 7→require 'digest'\n 8→\n 9→# Load helper modules\n 10→require_relative 'helpers/file_helper'\n 11→require_relative 'helpers/data_analysis_helper'\n 12→require_relative 'helpers/text_generation_helper'\n 13→require_relative 'helpers/shared_constants'\n 14→require_relative 'helpers/data_cleaner'\n 15→require_relative 'helpers/dose_processor'\n 16→require_relative 'helpers/output_formatter'\n 17→require_relative 'helpers/substance_categorizer'\n 18→require_relative 'helpers/graph_generator'\n 19→\n 20→class SubstanceWrapped\n 21→ # Substances to exclude from wrapped reports\n 22→ EXCLUDED_SUBSTANCES = [\n 23→ \"Ibuprofen\",\n 24→ \"Paracetamol\", \n 25→ \"Estradiol\",\n 26→ \"Estradiol Enanthate\",\n 27→ \"Estradiol Hemihydrate\", \n 28→ \"Estradiol Undecylate\",\n 29→ \"Estradiol Valerate\",\n 30→ \"Ivermectin\",\n 31→ \"Melatonin\"\n 32→ ].freeze\n 33→\n 34→ def initialize(csv_data, user, year = Date.today.year)\n 35→ @year = year\n 36→ @user = user\n 37→ @data = parse_csv(csv_data)\n 38→ end\n 39→\n 40→ def parse_csv(csv_data)\n 41→ entries = []\n 42→ csv_data.each do |row|\n 43→ next if row.length < 5 || row[0].nil? || row[0].empty?\n 44→ next if row[1].nil? || row[2].nil? # Skip if user or substance is nil\n 45→ begin\n 46→ next unless row[1] == @user\n 47→ timestamp = DateTime.parse(row[0])\n 48→ next unless timestamp.year == @year\n 49→\n 50→ # Data is pre-normalized by API - use as-is\n 51→ substance = row[2].to_s.strip\n 52→ route = row[4].to_s.strip\n 53→\n 54→ # Skip excluded substances\n 55→ next if EXCLUDED_SUBSTANCES.include?(substance)\n 56→\n 57→ entries << {\n 58→ timestamp: timestamp,\n 59→ user: row[1],\n 60→ substance: substance,\n 61→ dose: row[3],\n 62→ route: route\n 63→ }\n 64→ rescue => e\n 65→ # Skip malformed entries\n 66→ end\n 67→ end\n 68→ entries\n 69→ end\n 70→\n 71→ def monthly_summary\n 72→ DoseProcessor.process_monthly_doses(@data)\n 73→ end\n 74→\n 75→ def time_of_day_analysis\n 76→ analysis = {}\n 77→ SharedConstants::TIME_PERIODS.each { |period, _| analysis[period] = {} }\n 78→\n 79→ @data.each do |entry|\n 80→ hour = entry[:timestamp].hour\n 81→ period = SharedConstants::TIME_PERIODS.find { |_, range| range.include?(hour) }&.first\n 82→ next unless period\n 83→\n 84→ analysis[period][entry[:substance]] ||= 0\n 85→ analysis[period][entry[:substance]] += 1\n 86→ end\n 87→\n 88→ analysis\n 89→ end\n 90→\n 91→ def top_substances(limit = SharedConstants::Analysis::TOP_SUBSTANCES_LIMIT)\n 92→ substance_counts.sort_by { |_, count| -count }.take(limit)\n 93→ end\n 94→\n 95→ def route_analysis\n 96→ routes = Hash.new { |h, k| h[k] = Hash.new(0) }\n 97→ @data.each do |entry|\n 98→ routes[entry[:substance]][entry[:route]] += 1\n 99→ end\n 100→ routes\n 101→ end\n 102→\n 103→ def day_of_week_analysis\n 104→ days = %w[Sunday Monday Tuesday Wednesday Thursday Friday Saturday]\n 105→ analysis = Hash.new { |h, k| h[k] = 0 }\n 106→\n 107→ @data.each do |entry|\n 108→ day = days[entry[:timestamp].wday]\n 109→ analysis[day] += 1\n 110→ end\n 111→\n 112→ analysis\n 113→ end\n 114→\n 115→ def peak_month\n 116→ monthly = monthly_summary\n 117→ month_totals = {}\n 118→ monthly.each do |month, substances|\n 119→ month_totals[month] = substances.values.sum { |data| data[:count] }\n 120→ end\n 121→ month_totals.max_by { |_, total| total }\n 122→ end\n 123→\n 124→ def one_time_substances\n 125→ substance_counts.select { |_, count| count == 1 }.keys.sort\n 126→ end\n 127→\n 128→ def streak_analysis\n 129→ # Only consider entries up to yesterday to ignore future streaks\n 130→ yesterday = Date.today - 1\n 131→ past_data = @data.select { |entry| entry[:timestamp].to_date <= yesterday }\n 132→ \n 133→ return {} if past_data.empty?\n 134→ \n 135→ # Group by substance and date\n 136→ substance_dates = {}\n 137→ past_data.each do |entry|\n 138→ substance = entry[:substance]\n 139→ date = entry[:timestamp].to_date\n 140→ substance_dates[substance] ||= []\n 141→ substance_dates[substance] << date unless substance_dates[substance].include?(date)\n 142→ end\n 143→ \n 144→ streaks = {}\n 145→ substance_dates.each do |substance, dates|\n 146→ dates.sort!\n 147→ current_streak = 1\n 148→ max_streak = 1\n 149→ \n 150→ (1...dates.length).each do |i|\n 151→ if dates[i] == dates[i-1] + 1\n 152→ current_streak += 1\n 153→ max_streak = [max_streak, current_streak].max\n 154→ else\n 155→ current_streak = 1\n 156→ end\n 157→ end\n 158→ \n 159→ streaks[substance] = max_streak if max_streak > 1\n 160→ end\n 161→ \n 162→ streaks\n 163→ end\n 164→\n 165→ def hardest_day\n 166→ DataAnalysisHelper.find_hardest_day(@data)\n 167→ end\n 168→\n 169→ def doses_on_day(date)\n 170→ DataAnalysisHelper.get_doses_on_day(@data, date)\n 171→ end\n 172→\n 173→ def longest_sober_streak\n 174→ DataAnalysisHelper.calculate_longest_sober_streak(@data, @year)\n 175→ end\n 176→\n 177→ def generate_wrapped\n 178→ return early_exit_message if @data.empty?\n 179→ \n 180→ stats = gather_statistics\n 181→ sections = build_sections(stats)\n 182→ format_output(sections)\n 183→ end\n 184→\n 185→ private\n 186→ \n 187→ def early_exit_message\n 188→ \"**#{@user}'s Substance Wrapped #{@year}**\\n\\nNo data found for #{@year}.\"\n 189→ end\n 190→\n 191→ def gather_statistics\n 192→ {\n 193→ monthly: monthly_summary,\n 194→ time_analysis: time_of_day_analysis,\n 195→ top_substances: top_substances,\n 196→ route_stats: route_analysis,\n 197→ peak_month_data: peak_month,\n 198→ day_stats: day_of_week_analysis,\n 199→ one_time_uses: one_time_substances,\n 200→ streaks: streak_analysis,\n 201→ hardest_day_data: hardest_day,\n 202→ longest_sober: longest_sober_streak\n 203→ }\n 204→ end\n 205→\n 206→ def build_sections(stats)\n 207→ sections = []\n 208→ sections << build_header_section\n 209→ sections << build_substances_section(stats[:top_substances])\n 210→ sections << build_monthly_section(stats[:monthly], stats[:peak_month_data])\n 211→ sections << build_time_analysis_section(stats[:time_analysis])\n 212→ sections << build_day_analysis_section(stats[:day_stats])\n 213→ sections << build_route_analysis_section(stats[:route_stats], stats[:top_substances])\n 214→ sections << build_onetime_section(stats[:one_time_uses]) if stats[:one_time_uses].any?\n 215→ sections << build_streaks_section(stats[:streaks], stats[:longest_sober])\n 216→ sections << build_hardest_day_section(stats[:hardest_day_data])\n 217→ sections << build_summary_section\n 218→ sections.compact\n 219→ end\n 220→\n 221→ def build_header_section\n 222→ user_possessive = @user ? \"#{@user}'s\" : \"Your\"\n 223→ [\n 224→ \"**#{user_possessive}**\",\n 225→ \"**Substance Wrapped #{@year}**\"\n 226→ ]\n 227→ end\n 228→\n 229→ def build_substances_section(top_substances)\n 230→ section = []\n 231→ OutputFormatter.add_section(section, random_top_substances_title, get_top_substances_comment(top_substances)) do |out|\n 232→ top_substances.each do |substance, count|\n 233→ out << OutputFormatter.format_substance_entry(substance, count)\n 234→ end\n 235→ end\n 236→ section\n 237→ end\n 238→\n 239→ def build_monthly_section(monthly, peak_month_data)\n 240→ peak_month_name, peak_count = peak_month_data || [nil, 0]\n 241→ section = []\n 242→ OutputFormatter.add_section(section, random_monthly_title, get_monthly_breakdown_comment(peak_month_name, peak_count, monthly)) do |out|\n 243→ monthly.keys.sort.each do |month|\n 244→ substances = monthly[month]\n 245→ out << \"\"\n 246→ out << OutputFormatter.format_month_header(month, month.split('-')[0])\n 247→ substances.sort_by { |_, data| -data[:count] }.take(SharedConstants::Analysis::TOP_ROUTES_LIMIT).each do |substance, data|\n 248→ out << OutputFormatter.format_substance_with_average(substance, data[:count], data[:avg_dose])\n 249→ end\n 250→ end\n 251→ end\n 252→ section\n 253→ end\n 254→\n 255→ def build_time_analysis_section(time_analysis)\n 256→ section = []\n 257→ OutputFormatter.add_section(section, random_peak_times_title(time_analysis), get_peak_time_comment(time_analysis)) do |out|\n 258→ time_analysis.each do |period, substances|\n 259→ next if substances.empty?\n 260→ total = substances.values.sum\n 261→ out << OutputFormatter.format_time_period_entry(period, total)\n 262→ end\n 263→ end\n 264→ section\n 265→ end\n 266→\n 267→ def build_day_analysis_section(day_stats)\n 268→ section = []\n 269→ OutputFormatter.add_section(section, random_peak_day_title) do |out|\n 270→ top_days = day_stats.sort_by { |_, count| -count }.take(SharedConstants::Analysis::TOP_DAYS_LIMIT)\n 271→ top_days.each do |day, count|\n 272→ out << OutputFormatter.format_day_entry(day, count)\n 273→ end\n 274→ end\n 275→ section\n 276→ end\n 277→\n 278→ def build_route_analysis_section(route_stats, top_substances)\n 279→ section = []\n 280→ OutputFormatter.add_section(section, random_route_title) do |out|\n 281→ route_stats.sort_by { |sub, _| -top_substances.to_h[sub].to_i }.take(SharedConstants::Analysis::TOP_ROUTES_LIMIT).each do |substance, routes|\n 282→ top_route = routes.max_by { |_, count| count }\n 283→ total_uses = routes.values.sum\n 284→ out << OutputFormatter.format_route_entry(substance, top_route[0], top_route[1], total_uses)\n 285→ end\n 286→ end\n 287→ section\n 288→ end\n 289→\n 290→ def build_onetime_section(one_time_uses)\n 291→ section = []\n 292→ OutputFormatter.add_section(section, random_onetime_title) do |out|\n 293→ one_time_uses.take(SharedConstants::Analysis::MAX_ONETIME_DISPLAY).each do |substance|\n 294→ out << OutputFormatter.format_tabbed_entry(substance, \"\", 1)\n 295→ end\n 296→ end\n 297→ section\n 298→ end\n 299→\n 300→ def build_streaks_section(streaks, longest_sober)\n 301→ return nil unless streaks.any? || longest_sober > 0\n 302→ \n 303→ section = []\n 304→ section << \"\"\n 305→ section << OutputFormatter.format_section_header(\"Longest Streaks (consecutive days):\")\n 306→ \n 307→ if streaks.any?\n 308→ top_substance, top_days = streaks.max_by { |_, days| days }\n 309→ section << OutputFormatter.format_comment(get_streak_girlie_comment(top_substance))\n 310→ section << \"\"\n 311→ \n 312→ streaks.sort_by { |_, days| -days }.take(SharedConstants::Analysis::MAX_STREAKS_DISPLAY).each do |substance, days|\n 313→ section << OutputFormatter.format_streak_entry(substance, days)\n 314→ end\n 315→ end\n 316→ \n 317→ if longest_sober > 0\n 318→ section << \"\" if streaks.any?\n 319→ section << OutputFormatter.format_streak_entry(\"Sober streak\", longest_sober)\n 320→ end\n 321→ \n 322→ section\n 323→ end\n 324→\n 325→ def build_hardest_day_section(hardest_day_data)\n 326→ return nil unless hardest_day_data\n 327→ \n 328→ hardest_date, hardest_count = hardest_day_data\n 329→ doses = doses_on_day(hardest_date)\n 330→ \n 331→ section = []\n 332→ section << \"\"\n 333→ section << OutputFormatter.format_section_header(random_hardest_day_title(hardest_count))\n 334→ section << OutputFormatter.format_tabbed_entry(hardest_date.strftime('%B %d, %Y'), \"(#{hardest_count} doses)\")\n 335→ \n 336→ doses.each do |dose|\n 337→ section << OutputFormatter.format_dose_entry(dose[:time], dose[:substance], dose[:dose], dose[:route])\n 338→ end\n 339→ \n 340→ section\n 341→ end\n 342→\n 343→ def build_summary_section\n 344→ section = []\n 345→ section << \"\"\n 346→ section << OutputFormatter.format_section_header(random_overall_title)\n 347→ section << OutputFormatter.format_summary_stat(\"Total entries\", @data.length)\n 348→ section << OutputFormatter.format_summary_stat(\"Unique substances\", @data.map { |e| e[:substance] }.uniq.count)\n 349→ section\n 350→ end\n 351→\n 352→ def format_output(sections)\n 353→ sections.flatten.join(\"\\n\")\n 354→ end\n 355→\n 356→ public\n 357→\n 358→ private\n 359→ \n 360→ def substance_counts\n 361→ @substance_counts ||= DataAnalysisHelper.get_substance_counts(@data)\n 362→ end\n 363→ \n 364→ # Helper method to add section with optional comment\n 365→ def add_section(output, title, comment = nil, &block)\n 366→ output << \"\"\n 367→ output << \"**#{title}**\"\n 368→ \n 369→ if comment\n 370→ output << \"\\t#{comment}\"\n 371→ output << \"\"\n 372→ end\n 373→ \n 374→ block.call(output) if block_given?\n 375→ end\n 376→ \n 377→ # Helper method to get time period usage counts from existing analysis\n 378→ def get_time_period_usage_from_analysis(time_analysis)\n 379→ DataAnalysisHelper.get_time_period_usage_from_analysis(time_analysis)\n 380→ end\n 381→ \n 382→ # Helper method to count routes by type\n 383→ def count_routes_by_type\n 384→ @route_counts ||= DataAnalysisHelper.count_routes_by_type(@data)\n 385→ end\n 386→ \n 387→ # Helper method to select random title\n 388→ def select_random_title(base_titles)\n 389→ TextGenerationHelper.select_random_title(base_titles)\n 390→ end\n 391→ \n 392→ def format_month_name(month_string)\n 393→ Date.strptime(month_string, '%Y-%m').strftime('%B')\n 394→ end\n 395→ \n 396→ def extract_user_from_data\n 397→ return 'User' if @data.empty?\n 398→ # Use the first line's username\n 399→ @data.first[:user] || 'User'\n 400→ end\n 401→\n 402→ def random_peak_day_title\n 403→ day_stats = day_of_week_analysis\n 404→ top_day, top_day_count = day_stats.max_by { |_, count| count }\n 405→ \n 406→ # Dynamic titles based on the day of the week\n 407→ day_specific_titles = case top_day\n 408→ when 'Monday'\n 409→ [\"Monday motivation hits different:\", \"Case of the Mondays? More like case of the FUN-days:\"]\n 410→ when 'Tuesday'\n 411→ [\"Tuesday was your main character day:\", \"Taco Tuesday? More like Turnt Tuesday:\"]\n 412→ when 'Wednesday'\n 413→ [\"Wednesday was your sweet spot:\", \"Hump day? More like PUMP day:\"]\n 414→ when 'Thursday'\n 415→ [\"Thursday was your power day:\", \"Thirsty Thursday lived up to its name:\"]\n 416→ when 'Friday'\n 417→ [\"Friday was your victory lap:\", \"Thank god it's Friday energy:\"]\n 418→ when 'Saturday'\n 419→ [\"Saturday was your main event:\", \"Weekend warrior status achieved:\"]\n 420→ when 'Sunday'\n 421→ [\"Sunday was your preparation day:\", \"Sunday funday taken literally:\"]\n 422→ else\n 423→ []\n 424→ end\n 425→ \n 426→ base_titles = [\n 427→ \"You really went hard on this day:\",\n 428→ \"You were fuckin' BALLING on this day:\",\n 429→ \"Looks like someone was mfin On one:\"\n 430→ ]\n 431→ \n 432→ # Add dynamic title based on usage count\n 433→ if top_day_count >= 10\n 434→ base_titles << \"#{top_day_count}-Use Bender, No Surrender. That's dedication\"\n 435→ elsif top_day_count >= 5\n 436→ base_titles << \"#{top_day_count} uses in one day? Someone was feeling themselves\"\n 437→ end\n 438→ \n 439→ # Combine day-specific and general titles\n 440→ all_titles = day_specific_titles + base_titles\n 441→ all_titles.sample\n 442→ end\n 443→\n 444→ def random_top_substances_title\n 445→ top_subs = top_substances\n 446→ return \"Top 10 Substances:\" if top_subs.empty?\n 447→ \n 448→ top_substance, top_count = top_subs.first\n 449→ total_uses = @data.length\n 450→ \n 451→ # Dynamic titles based on usage patterns\n 452→ if top_count > total_uses * 0.5\n 453→ return \"#{top_substance} was clearly the main character:\"\n 454→ elsif top_count > total_uses * 0.3\n 455→ return \"#{top_substance} dominated the charts:\"\n 456→ elsif top_subs.length >= 10\n 457→ return \"Your diverse chemical portfolio:\"\n 458→ else\n 459→ return \"#{top_substance} was your go-to:\"\n 460→ end\n 461→ end\n 462→\n 463→ def random_monthly_title\n 464→ select_random_title([\n 465→ \"Monthly Breakdown:\",\n 466→ \"The Monthly Sesh Schedule:\",\n 467→ \"How You Rolled Through the Year:\",\n 468→ \"Monthly Vibes Check:\",\n 469→ \"Your Monthly Mood Rings:\"\n 470→ ])\n 471→ end\n 472→\n 473→ def random_peak_times_title(time_analysis)\n 474→ usage = get_time_period_usage_from_analysis(time_analysis)\n 475→ total_uses = @data.length\n 476→ \n 477→ # Dynamic titles based on usage patterns\n 478→ if usage[:night] > total_uses * 0.4\n 479→ return \"The night owl chronicles:\"\n 480→ elsif usage[:morning] > total_uses * 0.4\n 481→ return \"Rise and grind energy:\"\n 482→ elsif usage[:evening] > total_uses * 0.5\n 483→ return \"Happy hour hits different:\"\n 484→ elsif usage[:afternoon] > total_uses * 0.4\n 485→ return \"Afternoon adventure time:\"\n 486→ else\n 487→ # Find the actual peak period\n 488→ peak_period = usage.max_by { |_, count| count }.first\n 489→ return \"#{peak_period.capitalize} was your time:\"\n 490→ end\n 491→ end\n 492→\n 493→ def random_route_title\n 494→ route_counts = count_routes_by_type\n 495→ total_uses = @data.length\n 496→ \n 497→ # Dynamic titles based on route preferences\n 498→ if route_counts[:rectal] > total_uses * 0.3\n 499→ return \"The backdoor bandit's guide to absorption:\"\n 500→ elsif route_counts[:rectal] > total_uses * 0.1\n 501→ return \"Sometimes you gotta go where the sun don't shine:\"\n 502→ elsif route_counts[:insufflated] > total_uses * 0.6\n 503→ return \"You're a little hoover:\"\n 504→ elsif route_counts[:insufflated] > total_uses * 0.4\n 505→ return \"Nose knows best:\"\n 506→ elsif route_counts[:oral] > total_uses * 0.8\n 507→ return \"Keep it simple, keep it oral:\"\n 508→ else\n 509→ # Find the most common route and create dynamic title\n 510→ max_route = route_counts.max_by { |_, count| count }.first\n 511→ return \"#{max_route.capitalize} was your preferred method:\"\n 512→ end\n 513→ end\n 514→\n 515→ def random_onetime_title\n 516→ select_random_title([\n 517→ \"Obscure One-Time Uses:\",\n 518→ \"The Experimental Phase:\",\n 519→ \"One-Hit Wonders:\",\n 520→ \"Trial Run Hall of Fame:\",\n 521→ \"The 'Eh, Never Again' Collection:\"\n 522→ ])\n 523→ end\n 524→\n 525→ def random_overall_title\n 526→ select_random_title([\n 527→ \"Overall Stats:\",\n 528→ \"The Numbers Don't Lie:\",\n 529→ \"Year in Review:\",\n 530→ \"Your Statistical Breakdown:\",\n 531→ \"The Final Tally:\"\n 532→ ])\n 533→ end\n 534→\n 535→ def get_peak_time_comment(time_analysis)\n 536→ usage = get_time_period_usage_from_analysis(time_analysis)\n 537→ TextGenerationHelper.get_peak_time_comment(usage, @data.length)\n 538→ end\n 539→\n 540→ def random_hardest_day_title(dose_count)\n 541→ TextGenerationHelper.get_hardest_day_title(dose_count)\n 542→ end\n 543→\n 544→ def get_top_substances_comment(top_subs)\n 545→ TextGenerationHelper.get_top_substances_comment(top_subs)\n 546→ end\n 547→\n 548→ def get_monthly_breakdown_comment(peak_month_name, peak_count, monthly)\n 549→ TextGenerationHelper.get_monthly_breakdown_comment(peak_month_name, peak_count, monthly)\n 550→ end\n 551→\n 552→ def get_streak_girlie_comment(substance)\n 553→ TextGenerationHelper.get_streak_girlie_comment(substance)\n 554→ end\n 555→end\n 556→\n 557→# Image generation class\n 558→class SubstanceWrappedImageGenerator\n 559→ PADDING = 50\n 560→ LINE_HEIGHT = 25\n 561→ FONT_SIZE = 18\n 562→ CHAR_WIDTH = 10\n 563→ \n 564→ def initialize(substance_wrapped)\n 565→ @wrapped = substance_wrapped\n 566→ end\n 567→ \n 568→ def generate_image\n 569→ require 'mini_magick'\n 570→ \n 571→ data = { wrapped_text: @wrapped.generate_wrapped }\n 572→ text_content = data[:wrapped_text].split(\"\\n\")\n 573→ \n 574→ # Calculate dimensions first\n 575→ max_line_length = text_content.map(&:length).max\n 576→ max_left_width, max_right_width = calculate_table_widths(text_content)\n 577→ table_left_width = (max_left_width + 10) * CHAR_WIDTH\n 578→ table_total_width = table_left_width + (max_right_width * CHAR_WIDTH)\n 579→ content_width = [max_line_length * CHAR_WIDTH, table_total_width].max\n 580→ \n 581→ # Generate graphs with matching content width\n 582→ graph_generator = GraphGenerator.new(content_width, 400)\n 583→ monthly_data = @wrapped.monthly_summary\n 584→ line_graph = graph_generator.generate_monthly_doses_line_graph(monthly_data)\n 585→ \n 586→ monthly_category_data = graph_generator.calculate_monthly_category_data(@wrapped.instance_variable_get(:@data))\n 587→ category_chart = graph_generator.generate_category_stacked_chart(monthly_category_data)\n 588→ \n 589→ canvas_width = content_width + (PADDING * 2)\n 590→ # Add extra height for graphs (two 400px graphs + spacing + legend space)\n 591→ canvas_height = (text_content.length * LINE_HEIGHT) + (PADDING * 2) + 1000\n 592→ \n 593→ # Create background\n 594→ MiniMagick::Tool.new('magick') do |convert|\n 595→ convert.size \"#{canvas_width}x#{canvas_height}\"\n 596→ convert.depth \"8\"\n 597→ convert.colorspace \"sRGB\"\n 598→ convert << 'xc:black'\n 599→ convert << 'temp_canvas.png'\n 600→ end\n 601→ \n 602→ MiniMagick::Tool.new('magick') do |convert|\n 603→ convert << SharedConstants::ImageGeneration::BACKGROUND_IMAGE\n 604→ convert.resize \"x#{canvas_height}\"\n 605→ convert << 'temp_bg.png'\n 606→ end\n 607→ \n 608→ MiniMagick::Tool.new('magick') do |convert|\n 609→ convert << 'temp_canvas.png'\n 610→ convert << 'temp_bg.png'\n 611→ convert.gravity 'Center'\n 612→ convert.composite\n 613→ convert << 'temp_image.png'\n 614→ end\n 615→ \n 616→ # Clean up intermediate files\n 617→ File.delete('temp_canvas.png') if File.exist?('temp_canvas.png')\n 618→ File.delete('temp_bg.png') if File.exist?('temp_bg.png')\n 619→ \n 620→ image = MiniMagick::Image.open('temp_image.png')\n 621→ \n 622→ # Draw all text in a single batch operation for better performance\n 623→ left_col_x = PADDING\n 624→ right_col_x = left_col_x + table_left_width\n 625→ y_pos = PADDING\n 626→ \n 627→ # Batch all text operations together\n 628→ image.combine_options do |c|\n 629→ text_content.each do |line|\n 630→ process_line_batch(c, line, y_pos, left_col_x, right_col_x)\n 631→ y_pos += LINE_HEIGHT\n 632→ end\n 633→ end\n 634→ \n 635→ # Add graphs to the image\n 636→ graph_y_start = y_pos + 30\n 637→ \n 638→ # Save graphs as temporary files\n 639→ line_graph.write('temp_line_graph.png')\n 640→ category_chart.write('temp_category_chart.png')\n 641→ \n 642→ # Save current image\n 643→ image.write('temp_with_text.png')\n 644→ \n 645→ # Composite the line graph\n 646→ MiniMagick::Tool.new('magick') do |convert|\n 647→ convert << 'temp_with_text.png'\n 648→ convert << 'temp_line_graph.png'\n 649→ convert.colorspace 'sRGB'\n 650→ convert.gravity 'NorthWest'\n 651→ convert.geometry \"+#{PADDING}+#{graph_y_start}\"\n 652→ convert.composite\n 653→ convert.colorspace 'sRGB'\n 654→ convert << 'temp_with_line.png'\n 655→ end\n 656→ \n 657→ # Composite the category chart\n 658→ MiniMagick::Tool.new('magick') do |convert|\n 659→ convert << 'temp_with_line.png'\n 660→ convert << 'temp_category_chart.png'\n 661→ convert.colorspace 'sRGB'\n 662→ convert.gravity 'NorthWest'\n 663→ convert.geometry \"+#{PADDING}+#{graph_y_start + 450}\"\n 664→ convert.composite\n 665→ convert.colorspace 'sRGB'\n 666→ convert << 'temp_final.png'\n 667→ end\n 668→ \n 669→ # Load the final image\n 670→ image = MiniMagick::Image.open('temp_final.png')\n 671→ \n 672→ # Clean up temporary graph files\n 673→ File.delete('temp_line_graph.png') if File.exist?('temp_line_graph.png')\n 674→ File.delete('temp_category_chart.png') if File.exist?('temp_category_chart.png')\n 675→ File.delete('temp_image.png') if File.exist?('temp_image.png')\n 676→ File.delete('temp_with_text.png') if File.exist?('temp_with_text.png')\n 677→ File.delete('temp_with_line.png') if File.exist?('temp_with_line.png')\n 678→ File.delete('temp_final.png') if File.exist?('temp_final.png')\n 679→ image\n 680→ end\n 681→ \n 682→ def save_image(filename)\n 683→ image = generate_image\n 684→ image.write(filename)\n 685→ filename\n 686→ end\n 687→ \n 688→ private\n 689→ \n 690→ def calculate_table_widths(text_content)\n 691→ max_left_width = 0\n 692→ max_right_width = 0\n 693→ \n 694→ text_content.each do |line|\n 695→ clean_line = line.gsub('**', '')\n 696→ if clean_line.include?(\"\\t\")\n 697→ parts = clean_line.split(\"\\t\").reject(&:empty?)\n 698→ if parts.length >= 2\n 699→ max_left_width = [max_left_width, parts[-2].length].max\n 700→ max_right_width = [max_right_width, parts[-1].length].max\n 701→ end\n 702→ end\n 703→ end\n 704→ \n 705→ [max_left_width, max_right_width]\n 706→ end\n 707→ \n 708→ def process_line_batch(c, line, y_pos, left_col_x, right_col_x)\n 709→ is_bold = line.include?('**')\n 710→ clean_line = line.gsub('**', '')\n 711→ \n 712→ if clean_line.include?(\"\\t\")\n 713→ parts = clean_line.split(\"\\t\").reject(&:empty?)\n 714→ if parts.length >= 2\n 715→ draw_text_batch(c, parts[-2], left_col_x, y_pos, is_bold: is_bold)\n 716→ draw_text_batch(c, parts[-1], right_col_x, y_pos, is_bold: is_bold)\n 717→ else\n 718→ indented_line = clean_line.gsub(\"\\t\", \" \")\n 719→ draw_text_batch(c, indented_line, PADDING, y_pos, is_bold: is_bold)\n 720→ end\n 721→ else\n 722→ size = clean_line.include?(\"Substance Wrapped\") ? FONT_SIZE * 1.5 : FONT_SIZE\n 723→ draw_text_batch(c, clean_line, PADDING, y_pos, is_bold: is_bold, size: size)\n 724→ end\n 725→ end\n 726→\n 727→ def draw_text_batch(c, text, x, y, is_bold: false, size: FONT_SIZE, color: 'white', gravity: 'NorthWest')\n 728→ font = is_bold ? 'DejaVu-Sans-Bold' : 'DejaVu-Sans'\n 729→ c.font font\n 730→ c.pointsize size\n 731→ c.fill color\n 732→ c.gravity gravity\n 733→ c.annotate \"+#{x}+#{y}\", text\n 734→ end\n 735→\n 736→end\n 737→\n 738→# Data processing utilities\n 739→def safe_filename_for_user(user)\n 740→ FileHelper.safe_filename_for_user(user)\n 741→end\n 742→\n 743→def upload_to_vault(file_path)\n 744→ FileHelper.upload_to_vault(file_path)\n 745→end\n 746→\n 747→# Read pre-normalized CSV (data already normalized by API)\n 748→def read_csv_file(csv_path)\n 749→ csv_data = [['timestamp', 'user', 'substance', 'dose', 'route']]\n 750→ CSV.foreach(csv_path, headers: true) do |row|\n 751→ csv_data << [\n 752→ row['timestamp'],\n 753→ row['user'],\n 754→ row['normalized_substance'] || row['substance'],\n 755→ row['dosage'] || row['amount'],\n 756→ row['normalized_route'] || row['route']\n 757→ ]\n 758→ end\n 759→ csv_data\n 760→end\n 761→\n 762→# Bot integration method\n 763→def generate_substance_wrapped(csv_data, user, year = Date.today.year)\n 764→ wrapped = SubstanceWrapped.new(csv_data, user, year)\n 765→ wrapped.generate_wrapped\n 766→end\n 767→\n 768→# CLI interface\n 769→if __FILE__ == $0\n 770→ if ARGV.length < 1\n 771→ puts \"Usage: ruby substance_wrapped.rb [year]\"\n 772→ puts \"\"\n 773→ puts \"Examples:\"\n 774→ puts \" ruby substance_wrapped.rb josie 2024\"\n 775→ puts \" ruby substance_wrapped.rb josie\"\n 776→ exit 1\n 777→ end\n 778→\n 779→ # Store original directory for assets\n 780→ original_dir = Dir.pwd\n 781→\n 782→ # Change to OUTPUT_DIR if specified for temporary file permissions\n 783→ if ENV['OUTPUT_DIR'] && Dir.exist?(ENV['OUTPUT_DIR'])\n 784→ Dir.chdir(ENV['OUTPUT_DIR'])\n 785→ # Set asset directory environment variable for use in helper files\n 786→ ENV['ASSET_DIR'] = File.join(original_dir, 'assets')\n 787→ end\n 788→\n 789→ user = ARGV[0]\n 790→ year = ARGV[1] ? ARGV[1].to_i : Date.today.year\n 791→\n 792→ # Generate safe filename based on user and year\n 793→ safe_user = safe_filename_for_user(user)\n 794→ output_file = \"#{safe_user}_wrapped_#{year}.png\"\n 795→\n 796→ begin\n 797→ csv_path = ENV['DATA_CSV_PATH'] || 'data.csv'\n 798→ csv_data = read_csv_file(csv_path)\n 799→ wrapped = SubstanceWrapped.new(csv_data, user, year)\n 800→ \n 801→ # Generate image and upload to un.vault.moe\n 802→ image_generator = SubstanceWrappedImageGenerator.new(wrapped)\n 803→ image_generator.save_image(output_file)\n 804→\n 805→ url = upload_to_vault(output_file)\n 806→ if url\n 807→ puts url\n 808→ else\n 809→ puts \"Upload failed\"\n 810→ exit 1\n 811→ end\n 812→ \n 813→ rescue LoadError => e\n 814→ puts \"Error: mini_magick gem required for image generation\"\n 815→ exit 1\n 816→ rescue Errno::ENOENT\n 817→ puts \"Error: File 'data.csv' not found\"\n 818→ exit 1\n 819→ rescue => e\n 820→ puts \"Error: #{e.message}\"\n 821→ exit 1\n 822→ end\n 823→end\n 824→\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":"acf9d710-5ab7-4c11-be24-e1fcab7ef1f1","timestamp":"2026-02-07T23:08:31.270Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"e3b568c7-9972-424f-a1bc-b6faa6f8a378","timestamp":"2026-02-07T23:08:31.510Z"}
{"parentUuid":"e3b568c7-9972-424f-a1bc-b6faa6f8a378","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:31.584Z","message":{"model":"claude-opus-4-6","id":"msg_01RXNNeyDcqt3dDsdNMrv7Ro","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01GisPVkfJehkofmJR7q152Y","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/statistics_calculator.rb"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1927,"cache_read_input_tokens":19971,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":1927},"output_tokens":25,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYs68dRqdpzay5ugiZy","uuid":"56c09690-59a4-4159-a400-01adf55c0dda"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"84e6c4a9-2a5b-478b-bca3-4c573a858ba9","timestamp":"2026-02-07T23:08:31.585Z"}
{"parentUuid":"84e6c4a9-2a5b-478b-bca3-4c573a858ba9","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01GisPVkfJehkofmJR7q152Y","type":"tool_result","content":" 1→#!/usr/bin/env ruby\n 2→\n 3→require_relative 'shared_constants'\n 4→\n 5→# Statistical calculations module\n 6→module StatisticsCalculator\n 7→ extend self\n 8→\n 9→ # Calculate percentile for a sorted array\n 10→ def percentile(sorted_array, percentile)\n 11→ return nil if sorted_array.empty?\n 12→ \n 13→ index = (percentile / 100.0) * (sorted_array.length - 1)\n 14→ lower_index = index.floor\n 15→ upper_index = index.ceil\n 16→ \n 17→ if lower_index == upper_index\n 18→ sorted_array[lower_index]\n 19→ else\n 20→ lower_value = sorted_array[lower_index]\n 21→ upper_value = sorted_array[upper_index]\n 22→ weight = index - lower_index\n 23→ lower_value + (upper_value - lower_value) * weight\n 24→ end\n 25→ end\n 26→\n 27→ # Calculate basic statistical measures\n 28→ def basic_stats(values)\n 29→ return {} if values.empty?\n 30→ \n 31→ sorted_values = values.sort\n 32→ length = values.length\n 33→ \n 34→ sum = values.sum\n 35→ mean = sum.to_f / length\n 36→ \n 37→ # Calculate variance and standard deviation\n 38→ variance = values.map { |x| (x - mean) ** 2 }.sum / (length - 1)\n 39→ variance = 0 if variance.negative? || variance.nan?\n 40→ std_dev = Math.sqrt(variance)\n 41→ \n 42→ {\n 43→ count: length,\n 44→ sum: sum,\n 45→ mean: mean,\n 46→ median: percentile(sorted_values, 50),\n 47→ min: sorted_values.first,\n 48→ max: sorted_values.last,\n 49→ variance: variance,\n 50→ std_dev: std_dev,\n 51→ std_error: std_dev / Math.sqrt(length),\n 52→ q1: percentile(sorted_values, 25),\n 53→ q3: percentile(sorted_values, 75),\n 54→ p90: percentile(sorted_values, 90),\n 55→ p95: percentile(sorted_values, 95)\n 56→ }\n 57→ end\n 58→\n 59→ # Detect outliers using IQR method\n 60→ def detect_outliers_iqr(values)\n 61→ return { outliers: [], clean_data: values, bounds: [nil, nil] } if values.length < 4\n 62→ \n 63→ sorted_values = values.sort\n 64→ q1 = percentile(sorted_values, 25)\n 65→ q3 = percentile(sorted_values, 75)\n 66→ iqr = q3 - q1\n 67→ \n 68→ multiplier = SharedConstants::Statistics::OUTLIER_IQR_MULTIPLIER\n 69→ lower_bound = q1 - multiplier * iqr\n 70→ upper_bound = q3 + multiplier * iqr\n 71→ \n 72→ outliers = values.select { |value| value < lower_bound || value > upper_bound }\n 73→ clean_data = values.select { |value| value >= lower_bound && value <= upper_bound }\n 74→ \n 75→ {\n 76→ outliers: outliers,\n 77→ clean_data: clean_data,\n 78→ bounds: [lower_bound, upper_bound],\n 79→ q1: q1,\n 80→ q3: q3,\n 81→ iqr: iqr\n 82→ }\n 83→ end\n 84→\n 85→ # Calculate confidence interval\n 86→ def confidence_interval(values, confidence_level = SharedConstants::Defaults::CONFIDENCE_LEVEL)\n 87→ return [nil, nil] if values.length < 2\n 88→ \n 89→ stats = basic_stats(values)\n 90→ critical_value = get_critical_value(confidence_level, values.length)\n 91→ \n 92→ return [nil, nil] if critical_value.nil?\n 93→ \n 94→ margin_of_error = critical_value * stats[:std_error]\n 95→ \n 96→ [stats[:mean] - margin_of_error, stats[:mean] + margin_of_error]\n 97→ end\n 98→\n 99→ # Calculate weighted mean\n 100→ def weighted_mean(values, weights = nil)\n 101→ return nil if values.empty?\n 102→ return values.sum / values.length if weights.nil? || weights.empty?\n 103→ \n 104→ weighted_sum = values.zip(weights).map { |value, weight| value * weight }.sum\n 105→ total_weight = weights.sum\n 106→ \n 107→ return nil if total_weight.zero?\n 108→ \n 109→ weighted_sum / total_weight\n 110→ end\n 111→\n 112→ # Generate histogram data for visualization\n 113→ def generate_histogram(values, bins = SharedConstants::Defaults::HISTOGRAM_BINS)\n 114→ return { bins: [], counts: [], is_skewed: false } if values.empty?\n 115→ \n 116→ sorted_values = values.sort\n 117→ min_val = sorted_values.first\n 118→ max_val = sorted_values.last\n 119→ range = max_val - min_val\n 120→ \n 121→ # Handle case where all values are the same\n 122→ if range.zero?\n 123→ return {\n 124→ bins: [[min_val, max_val]],\n 125→ counts: [values.length],\n 126→ is_skewed: false,\n 127→ type: :uniform\n 128→ }\n 129→ end\n 130→ \n 131→ # Check for skewness\n 132→ skew_ratio = calculate_skewness(sorted_values)\n 133→ is_highly_skewed = skew_ratio > SharedConstants::Statistics::SKEW_THRESHOLD\n 134→ \n 135→ if is_highly_skewed && min_val > 0\n 136→ generate_log_histogram(sorted_values, min_val, max_val)\n 137→ else\n 138→ generate_linear_histogram(sorted_values, min_val, max_val, bins)\n 139→ end\n 140→ end\n 141→\n 142→ # Calculate dose classification thresholds\n 143→ def dose_classification_thresholds(values)\n 144→ return {} if values.empty?\n 145→ \n 146→ stats = basic_stats(values)\n 147→ \n 148→ # Use percentile-based classification\n 149→ {\n 150→ very_light: { max: stats[:q1] * 0.5, color: :green },\n 151→ light: { max: stats[:q1], color: :cyan },\n 152→ common: { max: stats[:median], color: :yellow },\n 153→ strong: { max: stats[:q3], color: :magenta },\n 154→ heavy: { max: stats[:p90], color: :red },\n 155→ extreme: { max: Float::INFINITY, color: :red }\n 156→ }\n 157→ end\n 158→\n 159→ # Calculate risk assessment thresholds\n 160→ def risk_thresholds(values)\n 161→ return {} if values.empty?\n 162→ \n 163→ stats = basic_stats(values)\n 164→ \n 165→ {\n 166→ low_risk: stats[:mean] - stats[:std_dev],\n 167→ moderate_risk: stats[:mean] + stats[:std_dev],\n 168→ high_risk: stats[:mean] + 2 * stats[:std_dev],\n 169→ extreme_risk: stats[:mean] + 3 * stats[:std_dev]\n 170→ }\n 171→ end\n 172→\n 173→ # Calculate coefficient of variation\n 174→ def coefficient_of_variation(values)\n 175→ return nil if values.empty?\n 176→ \n 177→ stats = basic_stats(values)\n 178→ return nil if stats[:mean].zero?\n 179→ \n 180→ (stats[:std_dev] / stats[:mean]) * 100\n 181→ end\n 182→\n 183→ # Classify data distribution type\n 184→ def classify_distribution(values)\n 185→ return :unknown if values.empty?\n 186→ \n 187→ stats = basic_stats(values)\n 188→ cv = coefficient_of_variation(values)\n 189→ \n 190→ case cv\n 191→ when 0..10\n 192→ :very_consistent\n 193→ when 10..25\n 194→ :consistent\n 195→ when 25..50\n 196→ :moderate_variation\n 197→ when 50..100\n 198→ :high_variation\n 199→ else\n 200→ :extreme_variation\n 201→ end\n 202→ end\n 203→\n 204→ # Calculate z-score for a value\n 205→ def z_score(value, mean, std_dev)\n 206→ return nil if std_dev.zero?\n 207→ (value - mean) / std_dev\n 208→ end\n 209→\n 210→ # Calculate percentile rank of a value\n 211→ def percentile_rank(value, values)\n 212→ return nil if values.empty?\n 213→ \n 214→ count_below = values.count { |v| v < value }\n 215→ count_equal = values.count { |v| v == value }\n 216→ \n 217→ ((count_below + count_equal * 0.5) / values.length) * 100\n 218→ end\n 219→\n 220→ private\n 221→\n 222→ # Get critical value for confidence interval\n 223→ def get_critical_value(confidence_level, sample_size)\n 224→ critical_values = SharedConstants::Statistics::CRITICAL_VALUES\n 225→ \n 226→ # Use t-distribution approximation for small samples\n 227→ if sample_size <= SharedConstants::Statistics::LARGE_SAMPLE_THRESHOLD\n 228→ case confidence_level\n 229→ when 0.95\n 230→ 2.576 # Conservative approximation\n 231→ when 0.99\n 232→ 3.291 # Conservative approximation\n 233→ else\n 234→ critical_values[confidence_level]\n 235→ end\n 236→ else\n 237→ critical_values[confidence_level]\n 238→ end\n 239→ end\n 240→\n 241→ # Calculate skewness ratio\n 242→ def calculate_skewness(sorted_values)\n 243→ return 0 if sorted_values.length < 4\n 244→ \n 245→ min_val = sorted_values.first\n 246→ max_val = sorted_values.last\n 247→ range = max_val - min_val\n 248→ \n 249→ return 0 if range.zero?\n 250→ \n 251→ # Calculate how many values are in the first quarter of the range\n 252→ first_quarter_threshold = min_val + (range * 0.25)\n 253→ values_in_first_quarter = sorted_values.count { |v| v <= first_quarter_threshold }\n 254→ \n 255→ values_in_first_quarter.to_f / sorted_values.length\n 256→ end\n 257→\n 258→ # Generate logarithmic histogram for skewed data\n 259→ def generate_log_histogram(sorted_values, min_val, max_val)\n 260→ log_min = Math.log10(min_val)\n 261→ log_max = Math.log10(max_val)\n 262→ log_range = log_max - log_min\n 263→ \n 264→ bins_count = SharedConstants::Statistics::LOG_BINS\n 265→ bin_edges = (0..bins_count).map { |i| 10**(log_min + i * log_range / bins_count) }\n 266→ \n 267→ # Ensure we capture all data points\n 268→ bin_edges[0] = [bin_edges[0], min_val].min\n 269→ bin_edges[-1] = [bin_edges[-1], max_val].max\n 270→ \n 271→ counts = calculate_bin_counts(sorted_values, bin_edges)\n 272→ bins = bin_edges.each_cons(2).to_a\n 273→ \n 274→ {\n 275→ bins: bins,\n 276→ counts: counts,\n 277→ is_skewed: true,\n 278→ type: :logarithmic\n 279→ }\n 280→ end\n 281→\n 282→ # Generate linear histogram for normal data\n 283→ def generate_linear_histogram(sorted_values, min_val, max_val, bins_count)\n 284→ range = max_val - min_val\n 285→ bin_width = range / bins_count.to_f\n 286→ \n 287→ bin_edges = (0..bins_count).map { |i| min_val + i * bin_width }\n 288→ counts = calculate_bin_counts(sorted_values, bin_edges)\n 289→ bins = bin_edges.each_cons(2).to_a\n 290→ \n 291→ {\n 292→ bins: bins,\n 293→ counts: counts,\n 294→ is_skewed: false,\n 295→ type: :linear\n 296→ }\n 297→ end\n 298→\n 299→ # Calculate counts for histogram bins\n 300→ def calculate_bin_counts(sorted_values, bin_edges)\n 301→ counts = Array.new(bin_edges.length - 1, 0)\n 302→ \n 303→ sorted_values.each do |value|\n 304→ bin_index = bin_edges.length - 2 # default to last bin\n 305→ \n 306→ (0...bin_edges.length - 1).each do |i|\n 307→ if value >= bin_edges[i] && value < bin_edges[i + 1]\n 308→ bin_index = i\n 309→ break\n 310→ elsif value == bin_edges[-1] # handle max value\n 311→ bin_index = bin_edges.length - 2\n 312→ break\n 313→ end\n 314→ end\n 315→ \n 316→ counts[bin_index] += 1\n 317→ end\n 318→ \n 319→ counts\n 320→ end\n 321→end\n 322→\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":"79e3aee2-d5a3-4a49-99dd-43975d28671c","timestamp":"2026-02-07T23:08:31.651Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"66b708a6-8c34-4736-88fa-5faa79d15707","timestamp":"2026-02-07T23:08:31.942Z"}
{"parentUuid":"66b708a6-8c34-4736-88fa-5faa79d15707","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:31.953Z","message":{"model":"claude-opus-4-6","id":"msg_01RXNNeyDcqt3dDsdNMrv7Ro","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01MgsQxYMXy8NXA4CK3sdA2Z","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/graph_generator.rb"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1927,"cache_read_input_tokens":19971,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":1927},"output_tokens":25,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYs68dRqdpzay5ugiZy","uuid":"ce4ab3cd-0a28-48f7-9cf1-513f66f362e8"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"8b8e04a7-37ff-431b-a317-31d2d68f471b","timestamp":"2026-02-07T23:08:31.953Z"}
{"parentUuid":"8b8e04a7-37ff-431b-a317-31d2d68f471b","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01MgsQxYMXy8NXA4CK3sdA2Z","type":"tool_result","content":" 1→require 'mini_magick'\n 2→require_relative 'substance_categorizer'\n 3→\n 4→class GraphGenerator\n 5→ def initialize(width = 800, height = 400)\n 6→ @width = width\n 7→ @height = height + 100 # Add extra height for legend space\n 8→ @margin = 60\n 9→ @title_margin = 50 # Space between title and chart\n 10→ @legend_height = 80 # Space reserved for legend\n 11→ @chart_width = @width - (@margin * 2)\n 12→ @chart_height = height - (@margin * 2) - @legend_height - @title_margin # Reduce chart area for title and legend\n 13→ end\n 14→\n 15→ def generate_monthly_doses_line_graph(monthly_data)\n 16→ # Use OUTPUT_DIR environment variable or current directory for temporary files\n 17→ output_dir = ENV['OUTPUT_DIR'] || '.'\n 18→ temp_file = File.join(output_dir, 'temp_line_graph_base.png')\n 19→\n 20→ # Create high-quality image using MiniMagick::Tool\n 21→ MiniMagick::Tool.new('magick') do |convert|\n 22→ convert.size \"#{@width}x#{@height}\"\n 23→ convert.density \"150\"\n 24→ convert.depth \"8\"\n 25→ convert.colorspace \"sRGB\"\n 26→ convert << 'xc:transparent'\n 27→ convert << temp_file\n 28→ end\n 29→\n 30→ image = MiniMagick::Image.open(temp_file)\n 31→\n 32→ image.combine_options do |c|\n 33→ # Draw axes with thicker lines\n 34→ c.stroke 'white'\n 35→ c.strokewidth 3\n 36→ c.fill 'none'\n 37→ \n 38→ chart_top = @margin + @title_margin\n 39→ chart_bottom = chart_top + @chart_height\n 40→ \n 41→ # Y-axis\n 42→ c.draw \"line #{@margin},#{chart_top} #{@margin},#{chart_bottom}\"\n 43→ # X-axis\n 44→ c.draw \"line #{@margin},#{chart_bottom} #{@width - @margin},#{chart_bottom}\"\n 45→ \n 46→ # Prepare data points\n 47→ months = monthly_data.keys.sort\n 48→ return image if months.empty?\n 49→ \n 50→ max_doses = monthly_data.values.map { |data| data.values.sum { |substance_data| substance_data[:count] } }.max\n 51→ return image if max_doses == 0\n 52→ \n 53→ points = []\n 54→ months.each_with_index do |month, index|\n 55→ # Fix division by zero when months.length <= 1\n 56→ x = if months.length == 1\n 57→ @margin + @chart_width / 2 # Center single point\n 58→ else\n 59→ @margin + (index.to_f / (months.length - 1)) * @chart_width\n 60→ end\n 61→ total_doses = monthly_data[month].values.sum { |substance_data| substance_data[:count] }\n 62→ y = chart_bottom - (total_doses.to_f / max_doses) * @chart_height\n 63→ points << [x, y]\n 64→ end\n 65→ \n 66→ # Draw line graph with Spotify colors\n 67→ if points.length > 1\n 68→ c.stroke 'rgb(29,185,84)' # Spotify green\n 69→ c.strokewidth 5\n 70→ c.fill 'none'\n 71→ \n 72→ line_path = \"M #{points[0][0]},#{points[0][1]}\"\n 73→ points[1..-1].each do |point|\n 74→ line_path += \" L #{point[0]},#{point[1]}\"\n 75→ end\n 76→ c.draw \"path '#{line_path}'\"\n 77→ \n 78→ # Draw points with Spotify green\n 79→ points.each do |point|\n 80→ c.stroke 'none'\n 81→ c.fill 'rgb(29,185,84)'\n 82→ c.draw \"circle #{point[0]},#{point[1]} #{point[0] + 6},#{point[1]}\"\n 83→ end\n 84→ end\n 85→ \n 86→ # Add labels - no stroke, just fill\n 87→ c.stroke 'none'\n 88→ c.pointsize 24\n 89→ c.fill 'white'\n 90→ c.font 'DejaVu-Sans'\n 91→ c.gravity 'Center'\n 92→ \n 93→ # Month labels on X-axis\n 94→ c.gravity 'North'\n 95→ months.each_with_index do |month, index|\n 96→ # Fix division by zero when months.length <= 1\n 97→ x = if months.length == 1\n 98→ @margin + @chart_width / 2 # Center single point\n 99→ else\n 100→ @margin + (index.to_f / (months.length - 1)) * @chart_width\n 101→ end\n 102→ month_name = Date.strptime(month, '%Y-%m').strftime('%b')\n 103→ # Fix NaN issue in annotate coordinates\n 104→ x_offset = (x - @width/2).to_i\n 105→ c.annotate \"+#{x_offset}+#{chart_bottom + 10}\", month_name\n 106→ end\n 107→ \n 108→ # Y-axis labels\n 109→ c.gravity 'NorthWest'\n 110→ c.stroke 'none'\n 111→ c.fill 'white'\n 112→ c.pointsize 20\n 113→ c.font 'DejaVu-Sans'\n 114→ (0..4).each do |i|\n 115→ value = (max_doses * i / 4).round\n 116→ y = chart_bottom - (i.to_f / 4) * @chart_height\n 117→ c.annotate \"+#{5}+#{y - 10}\", value.to_s\n 118→ end\n 119→ \n 120→ # Title - positioned at top left with more margin\n 121→ c.stroke 'none'\n 122→ c.pointsize 32\n 123→ c.fill 'white'\n 124→ c.font 'DejaVu-Sans-Bold'\n 125→ c.gravity 'NorthWest'\n 126→ c.annotate \"+#{@margin}+20\", \"Monthly Dose Count\"\n 127→ end\n 128→ \n 129→ # Clean up temporary file\n 130→ # Clean up temporary file\n 131→ output_dir = ENV['OUTPUT_DIR'] || '.'\n 132→ temp_file = File.join(output_dir, 'temp_line_graph_base.png')\n 133→ File.delete(temp_file) if File.exist?(temp_file)\n 134→ \n 135→ image\n 136→ end\n 137→\n 138→ def generate_category_stacked_chart(monthly_category_data)\n 139→ # Create high-quality image using MiniMagick::Tool\n 140→ MiniMagick::Tool.new('magick') do |convert|\n 141→ convert.size \"#{@width}x#{@height}\"\n 142→ convert.density \"150\"\n 143→ convert.depth \"8\"\n 144→ convert.colorspace \"sRGB\"\n 145→ convert << 'xc:transparent'\n 146→ convert << 'temp_category_chart_base.png'\n 147→ end\n 148→ \n 149→ image = MiniMagick::Image.open('temp_category_chart_base.png')\n 150→\n 151→ image.combine_options do |c|\n 152→ months = monthly_category_data.keys.sort\n 153→ return image if months.empty?\n 154→ \n 155→ categories = SubstanceCategorizer.get_categories\n 156→ \n 157→ # Spotify-inspired color palette with fixed mapping per category\n 158→ category_colors = {\n 159→ \"Psychedelics\" => 'rgb(240,55,165)', # Spotify pink\n 160→ \"Stimulants\" => 'rgb(255,167,38)', # Spotify orange \n 161→ \"Depressants\" => 'rgb(66,165,245)', # Spotify blue\n 162→ \"Dissociatives\" => 'rgb(171,71,188)', # Spotify purple\n 163→ \"Opioids\" => 'rgb(239,83,80)', # Spotify red\n 164→ \"Cannabis\" => 'rgb(29,185,84)', # Spotify green\n 165→ \"Nootropics\" => 'rgb(38,198,218)', # Spotify cyan\n 166→ \"Medications\" => 'rgb(120,144,156)', # Spotify grey\n 167→ \"Supplements\" => 'rgb(102,187,106)', # Light green\n 168→ \"Botanicals\" => 'rgb(30,215,96)', # Lighter Spotify green\n 169→ \"Inhalants\" => 'rgb(255,202,40)', # Spotify yellow\n 170→ \"Research Chemicals\" => 'rgb(141,110,99)', # Spotify brown\n 171→ \"Other\" => 'rgb(200,200,200)' # Light grey\n 172→ }\n 173→ \n 174→ # Calculate maximum total for scaling\n 175→ max_total = 0\n 176→ months.each do |month|\n 177→ total = categories.sum { |cat| monthly_category_data[month][cat] || 0 }\n 178→ max_total = [max_total, total].max\n 179→ end\n 180→ \n 181→ return image if max_total == 0\n 182→ \n 183→ # Draw axes\n 184→ c.stroke 'white'\n 185→ c.strokewidth 3\n 186→ c.fill 'none'\n 187→ chart_top = @margin + @title_margin\n 188→ chart_bottom = chart_top + @chart_height\n 189→ c.draw \"line #{@margin},#{chart_top} #{@margin},#{chart_bottom}\"\n 190→ c.draw \"line #{@margin},#{chart_bottom} #{@width - @margin},#{chart_bottom}\"\n 191→ \n 192→ # Draw stacked bars\n 193→ bar_width = @chart_width / months.length * 0.8\n 194→ months.each_with_index do |month, month_index|\n 195→ x = @margin + (month_index + 0.1) * (@chart_width / months.length)\n 196→ current_y = chart_bottom\n 197→ \n 198→ categories.each_with_index do |category, cat_index|\n 199→ count = monthly_category_data[month][category] || 0\n 200→ next if count == 0\n 201→ \n 202→ segment_height = (count.to_f / max_total) * @chart_height\n 203→ c.stroke 'none'\n 204→ c.fill category_colors[category] || 'rgb(200,200,200)'\n 205→ c.draw \"rectangle #{x},#{current_y - segment_height} #{x + bar_width},#{current_y}\"\n 206→ current_y -= segment_height\n 207→ end\n 208→ end\n 209→ \n 210→ # Month labels - no stroke, just fill\n 211→ c.stroke 'none'\n 212→ c.pointsize 24\n 213→ c.fill 'white'\n 214→ c.font 'DejaVu-Sans'\n 215→ c.gravity 'Center'\n 216→ \n 217→ c.gravity 'North'\n 218→ months.each_with_index do |month, index|\n 219→ x = @margin + (index + 0.5) * (@chart_width / months.length)\n 220→ month_name = Date.strptime(month, '%Y-%m').strftime('%b')\n 221→ c.annotate \"+#{x - @width/2}+#{chart_bottom + 10}\", month_name\n 222→ end\n 223→ \n 224→ # Y-axis labels\n 225→ c.gravity 'NorthWest'\n 226→ c.stroke 'none'\n 227→ c.fill 'white'\n 228→ c.pointsize 20\n 229→ c.font 'DejaVu-Sans'\n 230→ (0..4).each do |i|\n 231→ value = (max_total * i / 4).round\n 232→ y = chart_bottom - (i.to_f / 4) * @chart_height\n 233→ c.annotate \"+#{5}+#{y - 10}\", value.to_s\n 234→ end\n 235→ \n 236→ # Title - positioned at top left with more margin\n 237→ c.stroke 'none'\n 238→ c.pointsize 32\n 239→ c.fill 'white'\n 240→ c.font 'DejaVu-Sans-Bold'\n 241→ c.gravity 'NorthWest'\n 242→ c.annotate \"+#{@margin}+20\", \"Categories by Month\"\n 243→ \n 244→ # Legend positioned under the graph with proper boundaries\n 245→ legend_start_y = chart_bottom + 50\n 246→ \n 247→ # Find categories that actually have data\n 248→ categories_with_data = []\n 249→ months.each do |month|\n 250→ categories.each do |category|\n 251→ count = monthly_category_data[month][category] || 0\n 252→ if count > 0 && !categories_with_data.include?(category)\n 253→ categories_with_data << category\n 254→ end\n 255→ end\n 256→ end\n 257→ \n 258→ items_per_row = 2\n 259→ legend_item_width = (@chart_width - 40) / items_per_row # Ensure fit within chart width\n 260→ \n 261→ categories_with_data.each_with_index do |category, index|\n 262→ row = index / items_per_row\n 263→ col = index % items_per_row\n 264→ legend_x = @margin + 20 + col * legend_item_width\n 265→ legend_y = legend_start_y + row * 30\n 266→ \n 267→ # Draw colored rectangle\n 268→ c.stroke 'none'\n 269→ c.fill category_colors[category] || 'rgb(200,200,200)'\n 270→ c.draw \"rectangle #{legend_x},#{legend_y} #{legend_x + 20},#{legend_y + 20}\"\n 271→ \n 272→ # Legend text\n 273→ c.stroke 'none'\n 274→ c.fill 'white'\n 275→ c.pointsize 18\n 276→ c.font 'DejaVu-Sans'\n 277→ c.gravity 'NorthWest'\n 278→ c.annotate \"+#{legend_x + 30}+#{legend_y + 5}\", category\n 279→ end\n 280→ end\n 281→ \n 282→ # Clean up temporary file\n 283→ File.delete('temp_category_chart_base.png') if File.exist?('temp_category_chart_base.png')\n 284→ \n 285→ image\n 286→ end\n 287→\n 288→ def calculate_monthly_category_data(data)\n 289→ monthly_category_data = {}\n 290→ \n 291→ # Group data by month and category\n 292→ data.each do |entry|\n 293→ month_key = entry[:timestamp].strftime('%Y-%m')\n 294→ category = SubstanceCategorizer.categorize_substance(entry[:substance])\n 295→ \n 296→ monthly_category_data[month_key] ||= {}\n 297→ monthly_category_data[month_key][category] ||= 0\n 298→ monthly_category_data[month_key][category] += 1\n 299→ end\n 300→ \n 301→ monthly_category_data\n 302→ end\n 303→end\n 304→\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":"d93f4ce9-5da3-4420-83ce-b07e61e11142","timestamp":"2026-02-07T23:08:32.009Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"1fa8cd50-b78d-4a20-85e6-4d12a28b5d68","timestamp":"2026-02-07T23:08:32.422Z"}
{"parentUuid":"1fa8cd50-b78d-4a20-85e6-4d12a28b5d68","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:32.430Z","message":{"model":"claude-opus-4-6","id":"msg_01RXNNeyDcqt3dDsdNMrv7Ro","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01AdNabrRVG4Ktxg1HGpLamu","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/output_formatter.rb"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1927,"cache_read_input_tokens":19971,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":1927},"output_tokens":25,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYs68dRqdpzay5ugiZy","uuid":"03db7a58-e3d4-408e-81f4-b883e5330559"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"a4db1785-3193-4efb-b476-172d4ae7dc42","timestamp":"2026-02-07T23:08:32.431Z"}
{"parentUuid":"a4db1785-3193-4efb-b476-172d4ae7dc42","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01AdNabrRVG4Ktxg1HGpLamu","type":"tool_result","content":" 1→#!/usr/bin/env ruby\n 2→\n 3→require_relative 'shared_constants'\n 4→\n 5→module OutputFormatter\n 6→ extend self\n 7→\n 8→ # Format a tabbed entry with consistent spacing\n 9→ def format_tabbed_entry(left_text, right_text, indent_level = 1)\n 10→ tabs = SharedConstants::Formatting::INDENT_LEVEL_1 * indent_level\n 11→ \"#{tabs}#{left_text}\\t#{right_text}\"\n 12→ end\n 13→\n 14→ # Format a substance entry with optional average\n 15→ def format_substance_with_average(substance, count, average = nil)\n 16→ avg_text = average ? \" (avg #{average}mg)\" : \"\"\n 17→ format_tabbed_entry(substance, \"#{count} uses#{avg_text}\", 2)\n 18→ end\n 19→\n 20→ # Format a substance entry with count only\n 21→ def format_substance_entry(substance, count, indent_level = 1)\n 22→ format_tabbed_entry(substance, \"#{count} uses\", indent_level)\n 23→ end\n 24→\n 25→ # Format a route entry with usage statistics\n 26→ def format_route_entry(substance, route, count, total, indent_level = 1)\n 27→ percentage = total > 0 ? (count.to_f / total * 100).round(1) : 0\n 28→ format_tabbed_entry(substance, \"#{route} (#{count}/#{total} uses, #{percentage}%)\", indent_level)\n 29→ end\n 30→\n 31→ # Format a time period entry\n 32→ def format_time_period_entry(period, count, indent_level = 1)\n 33→ format_tabbed_entry(period, \"#{count} total uses\", indent_level)\n 34→ end\n 35→\n 36→ # Format a day of week entry\n 37→ def format_day_entry(day, count, indent_level = 1)\n 38→ format_tabbed_entry(day, \"#{count} uses\", indent_level)\n 39→ end\n 40→\n 41→ # Format a streak entry\n 42→ def format_streak_entry(substance, days, indent_level = 1)\n 43→ format_tabbed_entry(substance, \"#{days} days\", indent_level)\n 44→ end\n 45→\n 46→ # Format a dose entry for hardest day\n 47→ def format_dose_entry(time, substance, dose, route, indent_level = 1)\n 48→ dose_text = dose && !dose.empty? ? \" #{dose}\" : \"\"\n 49→ format_tabbed_entry(time, \"#{substance}#{dose_text} (#{route})\", indent_level)\n 50→ end\n 51→\n 52→ # Format a month header\n 53→ def format_month_header(month_string, year)\n 54→ month_name = Date.strptime(month_string, '%Y-%m').strftime('%B')\n 55→ \"#{SharedConstants::Formatting::INDENT_LEVEL_2}#{month_name} #{year}:\"\n 56→ end\n 57→\n 58→ # Format a section header with consistent styling\n 59→ def format_section_header(title, level = 1)\n 60→ case level\n 61→ when 1\n 62→ \"**#{title}**\"\n 63→ when 2\n 64→ \"#{SharedConstants::Formatting::INDENT_LEVEL_1}**#{title}**\"\n 65→ when 3\n 66→ \"#{SharedConstants::Formatting::INDENT_LEVEL_2}**#{title}**\"\n 67→ else\n 68→ title\n 69→ end\n 70→ end\n 71→\n 72→ # Format a comment with proper indentation\n 73→ def format_comment(comment, indent_level = 1)\n 74→ return nil if comment.nil? || comment.empty?\n 75→ \n 76→ tabs = SharedConstants::Formatting::INDENT_LEVEL_1 * indent_level\n 77→ \"#{tabs}#{comment}\"\n 78→ end\n 79→\n 80→ # Format a multi-line block with consistent indentation\n 81→ def format_block(lines, indent_level = 1)\n 82→ return [] if lines.nil? || lines.empty?\n 83→ \n 84→ tabs = SharedConstants::Formatting::INDENT_LEVEL_1 * indent_level\n 85→ lines.map { |line| \"#{tabs}#{line}\" }\n 86→ end\n 87→\n 88→ # Format a table with aligned columns\n 89→ def format_table(headers, rows, indent_level = 1)\n 90→ return [] if headers.nil? || rows.nil? || rows.empty?\n 91→ \n 92→ # Calculate column widths\n 93→ all_rows = [headers] + rows\n 94→ col_widths = headers.each_with_index.map do |_, i|\n 95→ all_rows.map { |row| row[i].to_s.length }.max\n 96→ end\n 97→ \n 98→ # Format header\n 99→ header_line = format_table_row(headers, col_widths, indent_level)\n 100→ separator = format_table_separator(col_widths, indent_level)\n 101→ \n 102→ # Format data rows\n 103→ data_lines = rows.map { |row| format_table_row(row, col_widths, indent_level) }\n 104→ \n 105→ [header_line, separator] + data_lines\n 106→ end\n 107→\n 108→ # Format a percentage with consistent precision\n 109→ def format_percentage(value, precision = 1)\n 110→ return \"0.0%\" if value.nil?\n 111→ \"#{value.round(precision)}%\"\n 112→ end\n 113→\n 114→ # Format a count with optional total\n 115→ def format_count(count, total = nil)\n 116→ return \"0\" if count.nil?\n 117→ \n 118→ if total\n 119→ \"#{count}/#{total}\"\n 120→ else\n 121→ count.to_s\n 122→ end\n 123→ end\n 124→\n 125→ # Format a dose amount with proper precision\n 126→ def format_dose_amount(amount, unit = 'mg')\n 127→ return \"\" if amount.nil?\n 128→ \n 129→ if amount.is_a?(Float)\n 130→ \"#{amount.round(1)}#{unit}\"\n 131→ else\n 132→ \"#{amount}#{unit}\"\n 133→ end\n 134→ end\n 135→\n 136→ # Format a time period with proper styling\n 137→ def format_time_period(period_name, count, total = nil)\n 138→ if total && total > 0\n 139→ percentage = (count.to_f / total * 100).round(1)\n 140→ \"#{period_name}: #{count} uses (#{percentage}%)\"\n 141→ else\n 142→ \"#{period_name}: #{count} uses\"\n 143→ end\n 144→ end\n 145→\n 146→ # Format a date range\n 147→ def format_date_range(start_date, end_date)\n 148→ return \"\" if start_date.nil?\n 149→ \n 150→ if end_date.nil?\n 151→ start_date.strftime('%B %d, %Y')\n 152→ else\n 153→ \"#{start_date.strftime('%B %d')} - #{end_date.strftime('%B %d, %Y')}\"\n 154→ end\n 155→ end\n 156→\n 157→ # Format a list with consistent bullet points\n 158→ def format_list(items, bullet = '•', indent_level = 1)\n 159→ return [] if items.nil? || items.empty?\n 160→ \n 161→ tabs = SharedConstants::Formatting::INDENT_LEVEL_1 * indent_level\n 162→ items.map { |item| \"#{tabs}#{bullet} #{item}\" }\n 163→ end\n 164→\n 165→ # Format a key-value pair\n 166→ def format_key_value(key, value, separator = ':', indent_level = 1)\n 167→ tabs = SharedConstants::Formatting::INDENT_LEVEL_1 * indent_level\n 168→ \"#{tabs}#{key}#{separator} #{value}\"\n 169→ end\n 170→\n 171→ # Format a summary statistic\n 172→ def format_summary_stat(label, value, indent_level = 1)\n 173→ format_tabbed_entry(label, value.to_s, indent_level)\n 174→ end\n 175→\n 176→ # Truncate text with ellipsis if too long\n 177→ def truncate_text(text, max_length = SharedConstants::Bot::MAX_RESPONSE_LENGTH)\n 178→ return text if text.nil? || text.length <= max_length\n 179→ \n 180→ truncated = text[0, max_length - SharedConstants::Bot::TRUNCATION_SUFFIX.length]\n 181→ \"#{truncated}#{SharedConstants::Bot::TRUNCATION_SUFFIX}\"\n 182→ end\n 183→\n 184→ # Add section with optional comment\n 185→ def add_section(output, title, comment = nil)\n 186→ output << \"\"\n 187→ output << format_section_header(title)\n 188→ \n 189→ if comment\n 190→ output << format_comment(comment)\n 191→ output << \"\"\n 192→ end\n 193→ \n 194→ yield(output) if block_given?\n 195→ end\n 196→\n 197→ private\n 198→\n 199→ # Format a single table row\n 200→ def format_table_row(row, col_widths, indent_level)\n 201→ tabs = SharedConstants::Formatting::INDENT_LEVEL_1 * indent_level\n 202→ formatted_cells = row.each_with_index.map do |cell, i|\n 203→ cell.to_s.ljust(col_widths[i])\n 204→ end\n 205→ \"#{tabs}#{formatted_cells.join(' | ')}\"\n 206→ end\n 207→\n 208→ # Format table separator\n 209→ def format_table_separator(col_widths, indent_level)\n 210→ tabs = SharedConstants::Formatting::INDENT_LEVEL_1 * indent_level\n 211→ separators = col_widths.map { |width| '-' * width }\n 212→ \"#{tabs}#{separators.join('-+-')}\"\n 213→ end\n 214→end\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":"6a9ac00a-cb93-4ddf-957e-61b37cf9cde3","timestamp":"2026-02-07T23:08:32.481Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"7b69277c-0d30-4d45-bc14-006068ac5980","timestamp":"2026-02-07T23:08:32.534Z"}
{"parentUuid":"7b69277c-0d30-4d45-bc14-006068ac5980","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:36.436Z","message":{"model":"claude-opus-4-6","id":"msg_01Bj4cuGDtkUoymukzybbuMt","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_019KZsAVz9YLYrnE3SSMFHrS","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/shared_constants.rb"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":25771,"cache_read_input_tokens":21898,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":25771},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYsMaZppsiPBcvAMKMf","uuid":"4770ecd0-fa0b-42ca-988b-ebde08b32c16"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"a49025ef-0eb8-44a5-8e84-e21479a95f7d","timestamp":"2026-02-07T23:08:36.436Z"}
{"parentUuid":"a49025ef-0eb8-44a5-8e84-e21479a95f7d","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_019KZsAVz9YLYrnE3SSMFHrS","type":"tool_result","content":" 1→#!/usr/bin/env ruby\n 2→\n 3→require 'date'\n 4→\n 5→# Shared constants used across the annotate-dr system\n 6→# This module centralizes all magic numbers and configuration values\n 7→module SharedConstants\n 8→ # Time periods for analysis\n 9→ TIME_PERIODS = {\n 10→ 'Morning (6-11)' => (6..11),\n 11→ 'Afternoon (12-17)' => (12..17),\n 12→ 'Evening (18-23)' => (18..23),\n 13→ 'Night (0-5)' => (0..5)\n 14→ }.freeze\n 15→\n 16→ # Image generation constants\n 17→ module ImageGeneration\n 18→ PADDING = 50\n 19→ LINE_HEIGHT = 25\n 20→ FONT_SIZE = 18\n 21→ CHAR_WIDTH = 10\n 22→ TITLE_FONT_SIZE = 27 # FONT_SIZE * 1.5\n 23→ BACKGROUND_IMAGE = ENV['ASSET_DIR'] ? File.join(ENV['ASSET_DIR'], 'pillsbg.png') : 'assets/pillsbg.png'\n 24→ FONTS = {\n 25→ regular: 'DejaVu-Sans',\n 26→ bold: 'DejaVu-Sans-Bold'\n 27→ }.freeze\n 28→ end\n 29→\n 30→ # Data processing constants\n 31→ module DataProcessing\n 32→ DOSE_PATTERN = /^(\\d+(?:\\.\\d+)?)mg$/\n 33→ DOSE_THRESHOLD = 0.5 # Minimum percentage of measurable doses to show average\n 34→ CSV_HEADERS = %w[timestamp user substance dose route].freeze\n 35→ \n 36→ # Known text-only doses that should be treated as count=1.0\n 37→ KNOWN_TEXT_DOSES = %w[crumbs bump smallline line liner luge pile small large tablet capsule pill drop shot glass beer cigarette zoot monster redbull rockstar nos amp energy drink mate clubmate vodka].freeze\n 38→ \n 39→ # Known container/quantity words (can come after numbers)\n 40→ QUANTITY_CONTAINERS = %w[can cans bottle bottles glass glasses shot shots cup cups pint pints liter liters litre litres ml cl dl].freeze\n 41→ \n 42→ # Known dose units (case-insensitive)\n 43→ KNOWN_UNITS = %w[mg g kg µg μg ug mcg ml l cl dl oz lb iu units unit tabs tab caps cap drops drop MG G KG UG MCG ML L CL DL OZ LB IU UNITS UNIT TABS TAB CAPS CAP DROPS DROP].freeze\n 44→ \n 45→ # CSV column indices\n 46→ CSV_COLUMNS = {\n 47→ timestamp: 0,\n 48→ user: 1,\n 49→ substance: 2,\n 50→ dose: 3,\n 51→ route: 4,\n 52→ comment: 5\n 53→ }.freeze\n 54→ end\n 55→\n 56→ # Statistical constants\n 57→ module Statistics\n 58→ OUTLIER_IQR_MULTIPLIER = 1.5\n 59→ LARGE_SAMPLE_THRESHOLD = 30\n 60→ DEFAULT_BINS = 10\n 61→ LOG_BINS = 8\n 62→ SKEW_THRESHOLD = 0.8\n 63→ \n 64→ CRITICAL_VALUES = {\n 65→ 0.95 => 1.96,\n 66→ 0.99 => 2.576\n 67→ }.freeze\n 68→ \n 69→ # Dose classification thresholds (multipliers of std deviation)\n 70→ DOSE_CLASSIFICATION = {\n 71→ conservative_light: -0.5,\n 72→ conservative_heavy: 1.5\n 73→ }.freeze\n 74→ end\n 75→\n 76→ # File paths and names\n 77→ module Files\n 78→ DATA_CSV = 'data.csv'\n 79→ ASSETS_DIR = 'assets'\n 80→ HELPERS_DIR = 'helpers'\n 81→ \n 82→ # Temporary file prefixes\n 83→ TEMP_PREFIX = 'temp_'\n 84→ TEMP_CANVAS = 'temp_canvas.png'\n 85→ TEMP_BG = 'temp_bg.png'\n 86→ TEMP_IMAGE = 'temp_image.png'\n 87→ end\n 88→\n 89→ # IRC Bot configuration\n 90→ module Bot\n 91→ NICK = \"annotate\"\n 92→ CHANNEL = \"##drugs\"\n 93→ SERVER = \"irc.libera.chat\"\n 94→ PORT = 6667\n 95→ \n 96→ COMMANDS = {\n 97→ help: ';help',\n 98→ tally: ';tally',\n 99→ last: ';last',\n 100→ listdrugs: ';listdrugs',\n 101→ wrapped: ';wrapped',\n 102→ reload: ';reload',\n 103→ annotate: ';annotate'\n 104→ }.freeze\n 105→ \n 106→ # Response formatting\n 107→ MAX_RESPONSE_LENGTH = 400\n 108→ TRUNCATION_SUFFIX = '...'\n 109→ end\n 110→\n 111→ # Analysis limits and defaults\n 112→ module Analysis\n 113→ TOP_SUBSTANCES_LIMIT = 10\n 114→ TOP_ROUTES_LIMIT = 3\n 115→ TOP_DAYS_LIMIT = 3\n 116→ MAX_STREAKS_DISPLAY = 5\n 117→ MAX_ONETIME_DISPLAY = 20\n 118→ \n 119→ # Percentage thresholds for dynamic titles\n 120→ SUBSTANCE_DOMINANCE_THRESHOLD = 0.5\n 121→ SUBSTANCE_MAJOR_THRESHOLD = 0.3\n 122→ TIME_PERIOD_THRESHOLD = 0.4\n 123→ ROUTE_THRESHOLD = 0.3\n 124→ \n 125→ # Streak analysis\n 126→ MIN_STREAK_LENGTH = 2 # Only show streaks of 2+ days\n 127→ end\n 128→\n 129→ # Color codes for terminal output\n 130→ module Colors\n 131→ # These correspond to colorize gem methods\n 132→ SUBSTANCE = :red\n 133→ ROUTE = :green\n 134→ COUNT = :blue\n 135→ RANGE_MIN = :cyan\n 136→ RANGE_MAX = :magenta\n 137→ AVERAGE = :yellow\n 138→ STATS = :light_blue\n 139→ ERROR = :red\n 140→ SUCCESS = :green\n 141→ WARNING = :yellow\n 142→ end\n 143→\n 144→ # Formatting constants\n 145→ module Formatting\n 146→ SEPARATOR_LENGTH = 80\n 147→ SECTION_SEPARATOR = '=' * SEPARATOR_LENGTH\n 148→ SUBSECTION_SEPARATOR = '-' * 40\n 149→ \n 150→ # Indentation levels\n 151→ INDENT_LEVEL_1 = \"\\t\"\n 152→ INDENT_LEVEL_2 = \"\\t\\t\"\n 153→ INDENT_LEVEL_3 = \"\\t\\t\\t\"\n 154→ \n 155→ # Table formatting\n 156→ TABLE_MIN_WIDTH = 20\n 157→ TABLE_MAX_WIDTH = 50\n 158→ end\n 159→\n 160→ # Error messages\n 161→ module ErrorMessages\n 162→ NO_DATA = \"No data found\"\n 163→ INVALID_FORMAT = \"Invalid format\"\n 164→ FILE_NOT_FOUND = \"File not found\"\n 165→ PARSING_ERROR = \"Error parsing data\"\n 166→ NETWORK_ERROR = \"Network error\"\n 167→ UNAUTHORIZED = \"Unauthorized access\"\n 168→ INVALID_COMMAND = \"Invalid command\"\n 169→ MISSING_PARAMETER = \"Missing required parameter\"\n 170→ end\n 171→\n 172→ # Success messages\n 173→ module SuccessMessages\n 174→ DATA_PROCESSED = \"Data processed successfully\"\n 175→ IMAGE_GENERATED = \"Image generated successfully\"\n 176→ REPORT_CREATED = \"Report created successfully\"\n 177→ UPLOAD_COMPLETE = \"Upload completed\"\n 178→ end\n 179→\n 180→ # Validation constants\n 181→ module Validation\n 182→ MIN_YEAR = 2000\n 183→ MAX_YEAR = 2050\n 184→ MIN_USERNAME_LENGTH = 1\n 185→ MAX_USERNAME_LENGTH = 50\n 186→ MIN_SUBSTANCE_LENGTH = 1\n 187→ MAX_SUBSTANCE_LENGTH = 100\n 188→ \n 189→ # Regex patterns\n 190→ USERNAME_PATTERN = /^[a-zA-Z0-9_-]+$/\n 191→ YEAR_PATTERN = /^\\d{4}$/\n 192→ TIME_PATTERN = /^\\d{2}:\\d{2}$/\n 193→ end\n 194→\n 195→ # Default values\n 196→ module Defaults\n 197→ CURRENT_YEAR = Date.today.year\n 198→ TIMEZONE = 'UTC'\n 199→ DOSE_UNIT = 'mg'\n 200→ ROUTE = 'oral'\n 201→ CONFIDENCE_LEVEL = 0.95\n 202→ HISTOGRAM_BINS = 10\n 203→ end\n 204→end\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":"a7d66f58-6760-41db-8a9f-adef858f4e71","timestamp":"2026-02-07T23:08:36.490Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"2b362b07-5cb5-4675-b784-4d7915d7d454","timestamp":"2026-02-07T23:08:37.059Z"}
{"parentUuid":"2b362b07-5cb5-4675-b784-4d7915d7d454","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:37.067Z","message":{"model":"claude-opus-4-6","id":"msg_01Bj4cuGDtkUoymukzybbuMt","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01U4pp8CZtNTsctiAHCGvrL3","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/data_analysis_helper.rb"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":25771,"cache_read_input_tokens":21898,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":25771},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYsMaZppsiPBcvAMKMf","uuid":"ffc2be09-f0e2-4509-b9f2-b50f00323db1"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"7fefd8d1-ebad-408e-90d0-de4bd8c33f1b","timestamp":"2026-02-07T23:08:37.068Z"}
{"parentUuid":"7fefd8d1-ebad-408e-90d0-de4bd8c33f1b","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01U4pp8CZtNTsctiAHCGvrL3","type":"tool_result","content":" 1→#!/usr/bin/env ruby\n 2→\n 3→module DataAnalysisHelper\n 4→ # Calculates route usage statistics from processed data\n 5→ def self.count_routes_by_type(data)\n 6→ route_counts = Hash.new(0)\n 7→ data.each do |entry|\n 8→ route = entry[:route]\n 9→ next unless route\n 10→ \n 11→ route_key = route.downcase.to_sym\n 12→ route_counts[route_key] += 1\n 13→ end\n 14→ \n 15→ route_counts\n 16→ end\n 17→\n 18→ # Calculates time period usage from analysis data\n 19→ def self.get_time_period_usage_from_analysis(time_analysis)\n 20→ {\n 21→ night: time_analysis['Night (0-5)']&.values&.sum || 0,\n 22→ morning: time_analysis['Morning (6-11)']&.values&.sum || 0,\n 23→ afternoon: time_analysis['Afternoon (12-17)']&.values&.sum || 0,\n 24→ evening: time_analysis['Evening (18-23)']&.values&.sum || 0\n 25→ }\n 26→ end\n 27→\n 28→ # Calculates seasonal breakdown from monthly data\n 29→ def self.get_seasonal_breakdown(monthly)\n 30→ seasons = { \"Spring\" => 0, \"Summer\" => 0, \"Fall\" => 0, \"Winter\" => 0 }\n 31→ \n 32→ monthly.each do |month_key, substances|\n 33→ month_num = month_key.split('-')[1].to_i\n 34→ total_uses = substances.values.sum { |data| data[:count] }\n 35→ \n 36→ case month_num\n 37→ when 3, 4, 5\n 38→ seasons[\"Spring\"] += total_uses\n 39→ when 6, 7, 8\n 40→ seasons[\"Summer\"] += total_uses\n 41→ when 9, 10, 11\n 42→ seasons[\"Fall\"] += total_uses\n 43→ when 12, 1, 2\n 44→ seasons[\"Winter\"] += total_uses\n 45→ end\n 46→ end\n 47→ \n 48→ seasons\n 49→ end\n 50→\n 51→ # Calculates substance usage statistics\n 52→ def self.get_substance_counts(data)\n 53→ counts = Hash.new(0)\n 54→ data.each { |entry| counts[entry[:substance]] += 1 }\n 55→ counts\n 56→ end\n 57→\n 58→ # Finds the hardest day\n 59→ def self.find_hardest_day(data)\n 60→ daily_counts = {}\n 61→ data.each do |entry|\n 62→ date = entry[:timestamp].to_date\n 63→ daily_counts[date] ||= 0\n 64→ daily_counts[date] += 1\n 65→ end\n 66→ \n 67→ return nil if daily_counts.empty?\n 68→ hardest_date, count = daily_counts.max_by { |_, count| count }\n 69→ [hardest_date, count]\n 70→ end\n 71→\n 72→ # Gets all doses for a specific day\n 73→ def self.get_doses_on_day(data, date)\n 74→ data.select { |entry| entry[:timestamp].to_date == date }\n 75→ .map { |entry| \n 76→ {\n 77→ time: entry[:timestamp].strftime('%H:%M'),\n 78→ substance: entry[:substance],\n 79→ dose: entry[:dose],\n 80→ route: entry[:route]\n 81→ }\n 82→ }\n 83→ .sort_by { |entry| entry[:time] }\n 84→ end\n 85→\n 86→ # Calculates longest sober streak in a year\n 87→ def self.calculate_longest_sober_streak(data, year)\n 88→ return 0 if data.empty?\n 89→ \n 90→ # Get all unique dates with doses\n 91→ dose_dates = data.map { |entry| entry[:timestamp].to_date }.uniq.sort\n 92→ \n 93→ # Start and end dates for the year\n 94→ year_start = Date.new(year, 1, 1)\n 95→ year_end = Date.new(year, 12, 31)\n 96→ \n 97→ # If generating for current year, don't count future dates\n 98→ if year == Date.today.year\n 99→ year_end = [year_end, Date.today].min\n 100→ end\n 101→ \n 102→ # Calculate gaps between dose dates\n 103→ max_streak = 0\n 104→ \n 105→ # Check gap from year start to first dose\n 106→ if dose_dates.any? && dose_dates.first > year_start\n 107→ max_streak = (dose_dates.first - year_start).to_i\n 108→ end\n 109→ \n 110→ # Check gaps between consecutive dose dates\n 111→ dose_dates.each_cons(2) do |date1, date2|\n 112→ gap = (date2 - date1).to_i - 1\n 113→ max_streak = [max_streak, gap].max if gap > 0\n 114→ end\n 115→ \n 116→ # Check gap from last dose to year end\n 117→ if dose_dates.any? && dose_dates.last < year_end\n 118→ gap = (year_end - dose_dates.last).to_i\n 119→ max_streak = [max_streak, gap].max\n 120→ end\n 121→ \n 122→ # If no doses in the year, the whole year is sober\n 123→ if dose_dates.empty?\n 124→ max_streak = (year_end - year_start).to_i + 1\n 125→ end\n 126→ \n 127→ max_streak\n 128→ end\n 129→end\n 130→\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":"2e6f777f-5dc0-49e7-8e5c-29032ac08a73","timestamp":"2026-02-07T23:08:37.119Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"d1792b5c-ece3-4bcf-8eba-b17cd892983c","timestamp":"2026-02-07T23:08:37.627Z"}
{"parentUuid":"d1792b5c-ece3-4bcf-8eba-b17cd892983c","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:37.641Z","message":{"model":"claude-opus-4-6","id":"msg_01Bj4cuGDtkUoymukzybbuMt","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01TzbNhjj4EUaDkqpM8yg5oZ","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/substance_categorizer.rb"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":25771,"cache_read_input_tokens":21898,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":25771},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYsMaZppsiPBcvAMKMf","uuid":"d5b7bfcf-9050-4a5d-9512-2250189c4d22"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"5c45b5d3-4557-46f8-93fd-3a17473810c1","timestamp":"2026-02-07T23:08:37.642Z"}
{"parentUuid":"5c45b5d3-4557-46f8-93fd-3a17473810c1","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01TzbNhjj4EUaDkqpM8yg5oZ","type":"tool_result","content":" 1→class SubstanceCategorizer\n 2→ SUBSTANCE_CATEGORIES = {\n 3→ \"Psychedelics\" => [\n 4→ \"LSD\", \"Psilocybin\", \"DMT\", \"Mescaline\", \"2C-B\", \"2C-E\", \"2C-I\", \"25C-NBOMe\", \"25B-NBOH\", \"2C-B-Fly\",\n 5→ \"4-AcO-DMT\", \"4-AcO-EPT\", \"4-HO-MiPT\", \"5-MeO-MiPT\", \"ALD-52\", \"1cP-LSD\", \"1D-LSD\", \"1P-LSD\", \"1V-LSD\",\n 6→ \"LSA\", \"Salvia Divinorum\", \"Psilocybe Tampelandia\"\n 7→ ].freeze,\n 8→ \n 9→ \"Stimulants\" => [\n 10→ \"Amphetamine\", \"Dextroamphetamine\", \"Dextroamphetamine Phosphate\", \"Lisdexamfetamine\", \n 11→ \"Methamphetamine\", \"Cocaine\", \"Methylphenidate\", \"Atomoxetine\", \"Modafinil\", \"Armodafinil\", \"Flmodafinil\",\n 12→ \"Caffeine\", \"Nicotine\", \"3-FMA\", \"4-FMA\", \"2-FMA\", \"4-FMPH\", \"Ethylphenidate\", \"Isopropylphenidate\",\n 13→ \"3-MMC\", \"4-MMC\", \"4-EMC\", \"4-MEC\", \"3-MEC\", \"4-BMC\", \"2-MMC\", \"3-CMC\", \"4-FMC\", \"3-FMC\",\n 14→ \"4-MeMABP\", \"4-MPD\", \"NEP\", \"HEP\", \"Cyclazodone\", \"Bupropion\", \"Phenethylline\"\n 15→ ].freeze,\n 16→ \n 17→ \"Depressants\" => [\n 18→ \"Ethanol\", \"GHB\", \"1,4-BDO\", \"Diazepam\", \"Clonazepam\", \"Alprazolam\", \"Lorazepam\", \"Temazepam\", \n 19→ \"Oxazepam\", \"Bromazepam\", \"Clobazam\", \"Nitrazepam\", \"Diclazepam\", \"Flualprazolam\", \"Flubromazepam\", \n 20→ \"Flubromazolam\", \"Bromazolam\", \"Clonazolam\", \"Etizolam\", \"Bretazenil\", \"Brotizolam\", \"Gidazepam\",\n 21→ \"Phenibut\", \"F-Phenibut\", \"Gabapentin\", \"Pregabalin\", \"Baclofen\", \"Carisoprodol\", \"Cyclobenzaprine\",\n 22→ \"Zolpidem\", \"Zopiclone\", \"Midazolam\"\n 23→ ].freeze,\n 24→ \n 25→ \"Dissociatives\" => [\n 26→ \"Ketamine\", \"Esketamine\", \"DCK\", \"2-FDCK\", \"O-PCE\", \"3-HO-PCE\", \"3-HO-PCP\", \"3-Me-PCP\", \"3-ME-PCPy\",\n 27→ \"a-PCyP\", \"Dextromethorphan\", \"Dextromethorphan Hydrobromide\", \"Dextromethorphan Polistirex\", \n 28→ \"Methoxetamine\", \"DMXE\", \"FXE\", \"Hydroxetamine\", \"MXiPr\", \"MXPr\", \"Tiletamine\"\n 29→ ].freeze,\n 30→ \n 31→ \"Opioids\" => [\n 32→ \"Heroin\", \"Morphine\", \"Codeine\", \"Dihydrocodeine\", \"Oxycodone\", \"Hydrocodone\", \"Hydromorphone\", \n 33→ \"Buprenorphine\", \"Methadone\", \"Fentanyl\", \"Carfentanil\", \"Tramadol\", \"Tapentadol\", \"O-DSMT\"\n 34→ ].freeze,\n 35→ \n 36→ \"Cannabis\" => [\n 37→ \"Weed\", \"THC-O\", \"THC-P\", \"HHC\", \"HHC-O\", \"HHC-P\", \"10-OH-HHC\"\n 38→ ].freeze,\n 39→ \n 40→ \"Nootropics\" => [\n 41→ \"Modafinil\", \"Armodafinil\", \"Flmodafinil\", \"Piracetam\", \"Oxiracetam\", \"Aniracetam\", \"Phenylpiracetam\",\n 42→ \"Noopept\", \"Alpha-GPC\", \"CDP-Choline\", \"Bacopa Monnieri\", \"Lion's Mane\", \"Rhodiola Rosea\"\n 43→ ].freeze,\n 44→ \n 45→ \"Medications\" => [\n 46→ \"Aspirin\", \"Ibuprofen\", \"Paracetamol\", \"Dexibuprofen\", \"Flurbiprofen\", \"Indometacin\", \"Celecoxib\",\n 47→ \"Metamizole\", \"Amitriptyline\", \"Citalopram\", \"Escitalopram\", \"Venlafaxine\", \"Mirtazapine\", \"Dosulepin\",\n 48→ \"Lithium\", \"Olanzapine\", \"Quetiapine\", \"Risperidone\", \"Clozapine\", \"Amisulpride\", \"Haloperidol\",\n 49→ \"Lamotrigine\", \"Carbamazepine\", \"Oxcarbazepine\", \"Valproate\", \"Levodopa\", \"Carbidopa\", \"Biperiden\",\n 50→ \"Trihexyphenidyl\", \"Domperidone\", \"Prochlorperazine\", \"Ondansetron\", \"Omeprazole\", \"Pantoprazole\",\n 51→ \"Hyoscine Butylbromide\", \"Loperamide\", \"Docusate\", \"Simeticone\", \"Cetirizine\", \"Levocetirizine\",\n 52→ \"Fexofenadine\", \"Loratadine\", \"Hydroxyzine\", \"Diphenhydramine\", \"Dimenhydrinate\", \"Promethazine\",\n 53→ \"Alimemazine\", \"Dexamethasone\", \"Prednisone\", \"Amoxicillin\", \"Doxycycline\", \"Cefalexin\", \n 54→ \"Clavulanic Acid\", \"Chloramphenicol\", \"Itraconazole\", \"Ivermectin\", \"Amlodipine\", \"Propranolol\",\n 55→ \"Clonidine\", \"Enoxaparin Sodium\", \"Sildenafil\", \"Tadalafil\", \"Finasteride\", \"Dutasteride\",\n 56→ \"Spironolactone\", \"Cyproterone Acetate\", \"Bicalutamide\", \"Estradiol\", \"Estradiol Enanthate\",\n 57→ \"Estradiol Hemihydrate\", \"Estradiol Undecylate\", \"Estradiol Valerate\", \"Progesterone\", \"Triptorelin\",\n 58→ \"Emtricitabine\", \"Tenofovir\", \"Raltegravir\", \"Insulin\", \"Sumatriptan\", \"Donepezil\", \"Melatonin\",\n 59→ \"Metoprolol\", \"Mysterypill\"\n 60→ ].freeze,\n 61→ \n 62→ \"Supplements\" => [\n 63→ \"Creatine\", \"Arginine\", \"Citrulline\", \"Tyrosine\", \"Tryptophan\", \"5-HTP\", \"Theanine\", \"EGCG\",\n 64→ \"NAC\", \"Na-R-ALA\", \"Vitamin C\", \"Quercetin\", \"Lactase\", \"Sodium Bicarbonate\", \"Sulbutiamine\"\n 65→ ].freeze,\n 66→ \n 67→ \"Botanicals\" => [\n 68→ \"Kratom\", \"Mitragynine\", \"7-OH-MIT\", \"Kanna\", \"Kava\", \"Salvia Divinorum\", \"Ipomea Tricolor\"\n 69→ ].freeze,\n 70→ \n 71→ \"Inhalants\" => [\n 72→ \"Nitrous Oxide\", \"Isobutyl Nitrite\"\n 73→ ].freeze,\n 74→ \n 75→ \"Research Chemicals\" => [\n 76→ \"a-D2PV\", \"MDPHP\", \"MDPiHP\", \"4F-3Me-a-PHP\", \"3F-PVP\", \"4C-PVP\", \"MF-PVP\", \"5-DBFPV\",\n 77→ \"4B-MAR\", \"6-APB\", \"5-MAPB\", \"2-methyl-a-PiHP\", \"3-CPM\", \"4-ME-TMP\", \"Mebicar\", \"Fabomotizole\",\n 78→ \"Propylhexedrine\", \"Levomethamphetamine\", \"N,N-Dimethylphenethylamine\", \"Dimethocaine\", \"Tianeptine\"\n 79→ ].freeze,\n 80→ \n 81→ \"Other\" => [\n 82→ \"Comirnaty\", \"Propofol\", \"Levobupivacaine\", \"Naloxone\", \"Buspirone\", \"Xylometazoline\"\n 83→ ].freeze\n 84→ }.freeze\n 85→\n 86→ def self.categorize_substance(substance)\n 87→ SUBSTANCE_CATEGORIES.each do |category, substances|\n 88→ return category if substances.include?(substance)\n 89→ end\n 90→ \"Other\"\n 91→ end\n 92→\n 93→ def self.get_categories\n 94→ SUBSTANCE_CATEGORIES.keys\n 95→ end\n 96→\n 97→ def self.get_substances_in_category(category)\n 98→ SUBSTANCE_CATEGORIES[category] || []\n 99→ end\n 100→end\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":"cdaaf00b-a1c5-461a-831f-c1c5fe7237f5","timestamp":"2026-02-07T23:08:37.695Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"0ec2e2e1-ee32-4786-9ca2-eee0150d1079","timestamp":"2026-02-07T23:08:38.130Z"}
{"parentUuid":"0ec2e2e1-ee32-4786-9ca2-eee0150d1079","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:38.141Z","message":{"model":"claude-opus-4-6","id":"msg_01Bj4cuGDtkUoymukzybbuMt","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01UiM59HLt6542vNDJFxaH1K","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/file_helper.rb"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":25771,"cache_read_input_tokens":21898,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":25771},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYsMaZppsiPBcvAMKMf","uuid":"ca455115-f0f8-4fe9-8547-2882250d1265"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"13c71e88-7ece-4e68-80e4-309de384ce56","timestamp":"2026-02-07T23:08:38.141Z"}
{"parentUuid":"13c71e88-7ece-4e68-80e4-309de384ce56","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01UiM59HLt6542vNDJFxaH1K","type":"tool_result","content":" 1→#!/usr/bin/env ruby\n 2→require 'digest'\n 3→require 'net/http'\n 4→require 'uri'\n 5→require 'nokogiri'\n 6→\n 7→# Helper functions for file handling \n 8→module FileHelper\n 9→ def self.safe_filename_for_user(user)\n 10→ # Hash the username to prevent path traversal and keep filename safe\n 11→ Digest::SHA256.hexdigest(user.to_s)[0..12]\n 12→ end\n 13→\n 14→ # Uploads file to un.vault.moe\n 15→ def self.upload_to_vault(file_path)\n 16→ uri = URI('https://un.vault.moe/upload')\n 17→\n 18→ begin\n 19→ File.open(file_path, 'rb') do |file|\n 20→ request = Net::HTTP::Post.new(uri)\n 21→ content_type = case File.extname(file_path).downcase\n 22→ when '.png' then 'image/png'\n 23→ when '.mp4' then 'video/mp4'\n 24→ when '.csv' then 'text/csv'\n 25→ else 'application/octet-stream'\n 26→ end\n 27→ request.set_form([['files[]', file, { filename: File.basename(file_path), content_type: content_type }]], 'multipart/form-data')\n 28→\n 29→ response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|\n 30→ http.request(request)\n 31→ end\n 32→\n 33→ if response.code == '200'\n 34→ json_response = JSON.parse(response.body)\n 35→ if json_response['files'] && json_response['files'].first\n 36→ return json_response['files'].first['url']\n 37→ end\n 38→ end\n 39→ puts \"Upload failed: #{response.code} #{response.message}\"\n 40→ return nil\n 41→ end\n 42→ rescue => e\n 43→ puts \"Upload error: #{e.message}\"\n 44→ return nil\n 45→ end\n 46→ end\n 47→end\n 48→\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":"07215b45-d6f4-4b19-b530-ad464b613629","timestamp":"2026-02-07T23:08:38.197Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"561f8f5f-0405-4fa5-876f-200a8899a437","timestamp":"2026-02-07T23:08:38.629Z"}
{"parentUuid":"561f8f5f-0405-4fa5-876f-200a8899a437","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:38.645Z","message":{"model":"claude-opus-4-6","id":"msg_01Bj4cuGDtkUoymukzybbuMt","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_011C4jJUL2uTWBR4tZxMwE9M","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/dose_processor.rb"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":25771,"cache_read_input_tokens":21898,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":25771},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYsMaZppsiPBcvAMKMf","uuid":"93292a27-0415-4439-8589-382e1e29511b"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"477f4114-4b3f-477d-bff4-4453c13f5a8b","timestamp":"2026-02-07T23:08:38.645Z"}
{"parentUuid":"477f4114-4b3f-477d-bff4-4453c13f5a8b","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_011C4jJUL2uTWBR4tZxMwE9M","type":"tool_result","content":" 1→#!/usr/bin/env ruby\n 2→\n 3→require_relative 'shared_constants'\n 4→require_relative 'statistics_calculator'\n 5→\n 6→# Centralized dose extraction and processing module\n 7→module DoseProcessor\n 8→ extend self\n 9→\n 10→ # Use shared constants for text doses, containers, and units\n 11→ KNOWN_TEXT_DOSES = SharedConstants::DataProcessing::KNOWN_TEXT_DOSES\n 12→ QUANTITY_CONTAINERS = SharedConstants::DataProcessing::QUANTITY_CONTAINERS\n 13→ KNOWN_UNITS = SharedConstants::DataProcessing::KNOWN_UNITS\n 14→\n 15→ # Extract numeric dose from dose string\n 16→ def extract_numeric_dose(dose_string, substance = nil, roa = nil)\n 17→ return nil if dose_string.nil? || dose_string.empty?\n 18→ \n 19→ # Handle the main pattern: \"123mg\" or \"123.45mg\"\n 20→ if dose_string =~ SharedConstants::DataProcessing::DOSE_PATTERN\n 21→ return $1.to_f\n 22→ end\n 23→ \n 24→ # Handle other common patterns\n 25→ dose_string = dose_string.to_s.strip\n 26→ \n 27→ \n 28→ # Handle prefixed with ~: \"~123mg\" (but only if there's a known unit)\n 29→ if dose_string =~ /^~?(\\d+(?:\\.\\d+)?)_?([a-zA-Zµμ]+)$/\n 30→ value = $1.to_f\n 31→ unit = $2\n 32→ \n 33→ # Only proceed if it's a known unit\n 34→ if KNOWN_UNITS.include?(unit)\n 35→ # Convert µg/μg/ug/mcg to mg\n 36→ if %w[µg μg ug mcg].include?(unit)\n 37→ value /= 1000.0\n 38→ end\n 39→ \n 40→ return value\n 41→ end\n 42→ end\n 43→ \n 44→ # Handle compound doses like \"1can monster\", \"2bottles beer\"\n 45→ if dose_string =~ /^(\\d+(?:\\.\\d+)?)([a-zA-Z]+)\\s+([a-zA-Z]+)(?:\\s+.*)?$/\n 46→ quantity = $1.to_f\n 47→ container = $2.downcase\n 48→ substance = $3.downcase\n 49→ \n 50→ # Check if container is a known quantity container and substance is known\n 51→ if QUANTITY_CONTAINERS.include?(container) && KNOWN_TEXT_DOSES.include?(substance)\n 52→ return quantity\n 53→ end\n 54→ end\n 55→ \n 56→ # Handle known text-only doses (return 1.0 for counting)\n 57→ if dose_string =~ /^([a-zA-Z\\-_]+)$/ && KNOWN_TEXT_DOSES.include?(dose_string.downcase)\n 58→ return 1.0\n 59→ end\n 60→ \n 61→ # Handle ranges: \"10-20mg\", \"10+20mg\", or \"10or20mg\"\n 62→ if dose_string =~ /^(\\d+)(?:[-+]|or)(\\d+(?:\\.\\d+)?)([a-zA-Z]+)?$/\n 63→ value = ($1.to_f + $2.to_f) / 2.0\n 64→ unit = $3 || 'mg'\n 65→ \n 66→ # Convert units if needed\n 67→ if %w[µg μg ug mcg].include?(unit)\n 68→ value /= 1000.0\n 69→ end\n 70→ \n 71→ return value\n 72→ end\n 73→ \n 74→ # Handle suffixed doses: \"something_123mg\"\n 75→ if dose_string =~ /^.+_(\\d+)([a-zA-Z]+)?$/\n 76→ value = $1.to_f\n 77→ unit = $2 || 'mg'\n 78→ \n 79→ # Convert units if needed\n 80→ if %w[µg μg ug mcg].include?(unit)\n 81→ value /= 1000.0\n 82→ end\n 83→ \n 84→ return value\n 85→ end\n 86→ \n 87→ # Handle decimal prefix: \".5mg\"\n 88→ if dose_string.start_with?('.')\n 89→ dose_string = '0' + dose_string\n 90→ return extract_numeric_dose(dose_string, substance, roa)\n 91→ end\n 92→ \n 93→ # Handle comma as decimal separator\n 94→ if dose_string.include?(',')\n 95→ dose_string = dose_string.sub(',', '.')\n 96→ return extract_numeric_dose(dose_string, substance, roa)\n 97→ end\n 98→ \n 99→ nil\n 100→ end\n 101→\n 102→ # Check if a dose string contains a measurable amount\n 103→ def measurable_dose?(dose_string, substance = nil, roa = nil)\n 104→ !extract_numeric_dose(dose_string, substance, roa).nil?\n 105→ end\n 106→\n 107→ # Calculate average dose with validation\n 108→ def calculate_average_dose(doses, measurable_count, total_count)\n 109→ return nil if doses.empty?\n 110→ \n 111→ # Only calculate average if we have numeric doses\n 112→ numeric_doses = doses.compact\n 113→ return nil if numeric_doses.empty?\n 114→ \n 115→ avg = (numeric_doses.sum / numeric_doses.length).round(1)\n 116→ \n 117→ # Only show average if most doses are measurable to avoid misleading stats\n 118→ threshold = SharedConstants::DataProcessing::DOSE_THRESHOLD\n 119→ return nil if measurable_count < total_count * threshold\n 120→ \n 121→ avg\n 122→ end\n 123→\n 124→ # Process dose data for monthly summary\n 125→ def process_monthly_doses(entries)\n 126→ monthly = {}\n 127→ \n 128→ entries.each do |entry|\n 129→ next unless entry[:timestamp] && entry[:substance]\n 130→ \n 131→ month_key = entry[:timestamp].strftime('%Y-%m')\n 132→ substance = entry[:substance]\n 133→ \n 134→ # Initialize nested structure\n 135→ monthly[month_key] ||= {}\n 136→ monthly[month_key][substance] ||= { \n 137→ count: 0, \n 138→ doses: [], \n 139→ measurable_count: 0 \n 140→ }\n 141→ \n 142→ # Increment count\n 143→ monthly[month_key][substance][:count] += 1\n 144→ \n 145→ # Extract and store numeric dose\n 146→ numeric_dose = extract_numeric_dose(entry[:dose], entry[:substance], entry[:roa])\n 147→ if numeric_dose\n 148→ monthly[month_key][substance][:doses] << numeric_dose\n 149→ monthly[month_key][substance][:measurable_count] += 1\n 150→ end\n 151→ end\n 152→ \n 153→ # Calculate averages\n 154→ monthly.each do |month, substances|\n 155→ substances.each do |substance, data|\n 156→ data[:avg_dose] = calculate_average_dose(\n 157→ data[:doses], \n 158→ data[:measurable_count], \n 159→ data[:count]\n 160→ )\n 161→ end\n 162→ end\n 163→ \n 164→ monthly\n 165→ end\n 166→\n 167→ # Classify dose strength based on statistical analysis\n 168→ def classify_dose_strength(dose_value, stats)\n 169→ return :unknown if dose_value.nil? || stats.nil?\n 170→ \n 171→ mean = stats[:clean_mean]\n 172→ std_dev = stats[:std_dev]\n 173→ \n 174→ return :unknown if mean.nil? || std_dev.nil? || std_dev.zero?\n 175→ \n 176→ # Calculate z-score\n 177→ z_score = (dose_value - mean) / std_dev\n 178→ \n 179→ case z_score\n 180→ when -Float::INFINITY...-1.5\n 181→ :very_light\n 182→ when -1.5...-0.5\n 183→ :light\n 184→ when -0.5...0.5\n 185→ :common\n 186→ when 0.5...1.5\n 187→ :strong\n 188→ when 1.5...2.5\n 189→ :heavy\n 190→ else\n 191→ :extreme\n 192→ end\n 193→ end\n 194→\n 195→ # Get dose classification thresholds\n 196→ def get_dose_thresholds(doses)\n 197→ return {} if doses.empty?\n 198→ \n 199→ sorted_doses = doses.sort\n 200→ \n 201→ {\n 202→ p25: StatisticsCalculator.percentile(sorted_doses, 25),\n 203→ p50: StatisticsCalculator.percentile(sorted_doses, 50),\n 204→ p75: StatisticsCalculator.percentile(sorted_doses, 75),\n 205→ p90: StatisticsCalculator.percentile(sorted_doses, 90),\n 206→ p95: StatisticsCalculator.percentile(sorted_doses, 95),\n 207→ mean: doses.sum / doses.length,\n 208→ std_dev: calculate_std_dev(doses)\n 209→ }\n 210→ end\n 211→\n 212→ # Validate dose format\n 213→ def valid_dose_format?(dose_string)\n 214→ return false if dose_string.nil? || dose_string.empty?\n 215→ \n 216→ # Trim whitespace for validation\n 217→ trimmed_dose = dose_string.strip\n 218→ return false if trimmed_dose.empty?\n 219→ \n 220→ # Check against common patterns\n 221→ basic_patterns = [\n 222→ SharedConstants::DataProcessing::DOSE_PATTERN,\n 223→ /^.+_(\\d+)([a-zA-Z]+)$/, # Require unit for suffixed format\n 224→ /^([1-9])$/ # Single digits 1-9 for counting doses like \"1 beer\"\n 225→ ]\n 226→ \n 227→ # Check basic numeric patterns first\n 228→ if basic_patterns.any? { |pattern| trimmed_dose.match?(pattern) }\n 229→ return true\n 230→ end\n 231→ \n 232→ # Check unit-based patterns with semantic validation\n 233→ if trimmed_dose =~ /^~?(\\d+(?:\\.\\d+)?)_?([a-zA-Zµμ]+)$/\n 234→ unit = $2\n 235→ if KNOWN_UNITS.include?(unit)\n 236→ return true\n 237→ end\n 238→ end\n 239→ \n 240→ # Check known text-only doses\n 241→ if trimmed_dose =~ /^([a-zA-Z\\-_]+)$/ && KNOWN_TEXT_DOSES.include?(trimmed_dose.downcase)\n 242→ return true\n 243→ end\n 244→ \n 245→ # Check compound doses \n 246→ result = extract_numeric_dose(trimmed_dose)\n 247→ if result && result > 0\n 248→ return true\n 249→ end\n 250→ \n 251→ false\n 252→ end\n 253→\n 254→ private\n 255→\n 256→\n 257→ # Calculate standard deviation\n 258→ def calculate_std_dev(values)\n 259→ return 0 if values.length < 2\n 260→ \n 261→ mean = values.sum / values.length\n 262→ variance = values.map { |x| (x - mean) ** 2 }.sum / (values.length - 1)\n 263→ Math.sqrt(variance)\n 264→ end\n 265→end\n 266→\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":"579d0b3d-0b9a-4e26-be20-d77d888ebfb1","timestamp":"2026-02-07T23:08:38.694Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"7f6f6781-173f-403f-9382-5ae3719dcf2a","timestamp":"2026-02-07T23:08:38.734Z"}
{"parentUuid":"7f6f6781-173f-403f-9382-5ae3719dcf2a","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:43.466Z","message":{"model":"claude-opus-4-6","id":"msg_01ALd1X3ar4yntpJwSCJ7p4f","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_018hbdLcaYNkoid9ibDhcbJp","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/text_generation_helper.rb"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":12023,"cache_read_input_tokens":47669,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":12023},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYsp8VCpYWscFJLE2ZS","uuid":"6f27f234-9568-472d-a286-6b749cf99921"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"29e56861-1cb7-4f93-916e-cdc880dc707f","timestamp":"2026-02-07T23:08:43.466Z"}
{"parentUuid":"29e56861-1cb7-4f93-916e-cdc880dc707f","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_018hbdLcaYNkoid9ibDhcbJp","type":"tool_result","content":" 1→#!/usr/bin/env ruby\n 2→\n 3→# Helper functions for generating dynamic text and titles\n 4→module TextGenerationHelper\n 5→ # Selects a random title from an array\n 6→ def self.select_random_title(titles)\n 7→ titles.sample\n 8→ end\n 9→\n 10→ # Generates quirky comments for peak time usage\n 11→ def self.get_peak_time_comment(usage, total_uses)\n 12→ return nil if total_uses == 0\n 13→ \n 14→ # Find peak time period\n 15→ times = {\n 16→ 'Night (0-5)' => usage[:night],\n 17→ 'Morning (6-11)' => usage[:morning],\n 18→ 'Afternoon (12-17)' => usage[:afternoon],\n 19→ 'Evening (18-23)' => usage[:evening]\n 20→ }\n 21→ \n 22→ peak_period, peak_count = times.max_by { |_, count| count }\n 23→ \n 24→ # Generate quirky comments based on peak time\n 25→ case peak_period\n 26→ when 'Night (0-5)'\n 27→ night_comments = [\n 28→ \"You're basically a vampire 🦇\",\n 29→ \"3am hits different for you\",\n 30→ \"Night owl energy is unmatched\",\n 31→ \"While others sleep, you party\",\n 32→ \"You own the midnight hours\"\n 33→ ]\n 34→ night_comments.sample\n 35→ when 'Morning (6-11)'\n 36→ morning_comments = [\n 37→ \"Rise and grind... literally\",\n 38→ \"Early bird catches the... high\",\n 39→ \"Morning person? More like morning party person\",\n 40→ \"You start your day with a bang\",\n 41→ \"Breakfast of champions energy\"\n 42→ ]\n 43→ morning_comments.sample\n 44→ when 'Afternoon (12-17)'\n 45→ afternoon_comments = [\n 46→ \"Lunch break hits different\",\n 47→ \"You're a matinee main character\",\n 48→ \"Afternoon delight enthusiast\",\n 49→ \"Peak productivity hours\",\n 50→ \"You make 2pm look fun\"\n 51→ ]\n 52→ afternoon_comments.sample\n 53→ when 'Evening (18-23)'\n 54→ evening_comments = [\n 55→ \"Happy hour is your power hour\",\n 56→ \"You're an evening legend\",\n 57→ \"Prime time performer\",\n 58→ \"Golden hour energy\",\n 59→ \"You close out the day right\"\n 60→ ]\n 61→ evening_comments.sample\n 62→ end\n 63→ end\n 64→\n 65→ # Generates variation comments for substance streaks\n 66→ def self.get_streak_girlie_comment(substance)\n 67→ variations = [\n 68→ \"This year you were a #{substance} girlie\",\n 69→ \"#{substance} era was strong this year\",\n 70→ \"You were deep in your #{substance} phase\",\n 71→ \"#{substance} had you in a chokehold\",\n 72→ \"#{substance} was your comfort zone\",\n 73→ \"You were living that #{substance} lifestyle\",\n 74→ \"#{substance} was your main character moment\",\n 75→ \"#{substance} really said 'I own you'\",\n 76→ \"#{substance} was your emotional support drug\",\n 77→ \"You were committed to the #{substance} agenda\",\n 78→ \"#{substance} was your ride or die\",\n 79→ \"#{substance} had you on lock\",\n 80→ \"You were in your #{substance} villain era\",\n 81→ \"#{substance} really became your personality\",\n 82→ \"#{substance} was your comfort substance\",\n 83→ \"You were #{substance}'s biggest fan\",\n 84→ \"#{substance} was your go-to therapy\",\n 85→ \"#{substance} really understood you\",\n 86→ \"You and #{substance} had a whole relationship\",\n 87→ \"#{substance} was your security blanket\"\n 88→ ]\n 89→ \n 90→ variations.sample\n 91→ end\n 92→\n 93→ # Generates monthly breakdown comments with dynamic stats\n 94→ def self.get_monthly_breakdown_comment(peak_month_name, peak_count, monthly)\n 95→ # Calculate additional stats for comments\n 96→ active_months = monthly.keys.length\n 97→ \n 98→ # Get busiest season\n 99→ require_relative 'data_analysis_helper' unless defined?(DataAnalysisHelper)\n 100→ seasons = DataAnalysisHelper.get_seasonal_breakdown(monthly)\n 101→ busiest_season = seasons.max_by { |_, count| count }&.first\n 102→ \n 103→ # Build dynamic comments based on stats\n 104→ dynamic_comments = []\n 105→ \n 106→ if peak_month_name\n 107→ dynamic_comments << \"#{Date.strptime(peak_month_name, '%Y-%m').strftime('%B')} was your peak month (#{peak_count} uses)\"\n 108→ end\n 109→ \n 110→ if active_months <= 3\n 111→ dynamic_comments << \"You kept it concentrated to just #{active_months} months\"\n 112→ elsif active_months >= 9\n 113→ dynamic_comments << \"You stayed consistent across #{active_months} months\"\n 114→ end\n 115→ \n 116→ if busiest_season\n 117→ dynamic_comments << \"#{busiest_season} was your season\"\n 118→ end\n 119→ \n 120→ dynamic_comments.sample\n 121→ end\n 122→\n 123→ # Generates hardest day titles with variations\n 124→ def self.get_hardest_day_title(dose_count)\n 125→ base_titles = [\n 126→ \"You really went hard on this day:\",\n 127→ \"You were fuckin' BALLING on this day:\",\n 128→ \"Looks like someone was mfin On one:\",\n 129→ \"You went beast mode:\",\n 130→ \"What was wrong that day?\",\n 131→ \"Someone was having a moment:\",\n 132→ \"This day was unhinged:\",\n 133→ \"You said fuck it and went OFF:\",\n 134→ \"Main character energy was STRONG:\",\n 135→ \"You were in your villain era:\",\n 136→ \"Absolute chaos mode activated:\",\n 137→ \"You were on demon time:\",\n 138→ \"This day was pure mayhem:\",\n 139→ \"You went absolutely feral:\",\n 140→ \"What the hell happened here?\"\n 141→ ]\n 142→ \n 143→ # Add dynamic title based on usage count\n 144→ if dose_count >= 10\n 145→ base_titles << \"#{dose_count}-Use Bender, No Surrender. That's dedication\"\n 146→ elsif dose_count >= 5\n 147→ base_titles << \"#{dose_count} uses in one day? Someone was feeling themselves\"\n 148→ end\n 149→ \n 150→ base_titles.sample\n 151→ end\n 152→\n 153→ # Generates top substances comment\n 154→ def self.get_top_substances_comment(top_subs)\n 155→ return nil if top_subs.empty?\n 156→ \n 157→ select_random_title([\n 158→ \"Top 10 Substances:\",\n 159→ \"Your Chemical Hall of Fame:\",\n 160→ \"Most Requested Performers:\",\n 161→ \"The Usual Suspects:\",\n 162→ \"Your Ride or Dies:\"\n 163→ ])\n 164→ end\n 165→end\n 166→\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":"ee02c9ba-831f-4859-b888-d9ddc50ea01f","timestamp":"2026-02-07T23:08:43.516Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"9ce7c8ca-4805-458c-adec-802f90e2818d","timestamp":"2026-02-07T23:08:44.031Z"}
{"parentUuid":"9ce7c8ca-4805-458c-adec-802f90e2818d","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:44.037Z","message":{"model":"claude-opus-4-6","id":"msg_01ALd1X3ar4yntpJwSCJ7p4f","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_013xHWmpVKLQn2pQq7H8NsQJ","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/data_cleaner.rb"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":12023,"cache_read_input_tokens":47669,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":12023},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYsp8VCpYWscFJLE2ZS","uuid":"f7598de0-7a9d-4a6f-9354-1c0004c218a7"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"b3d810ad-dba3-470a-a0c5-108d1c281f2e","timestamp":"2026-02-07T23:08:44.037Z"}
{"parentUuid":"b3d810ad-dba3-470a-a0c5-108d1c281f2e","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_013xHWmpVKLQn2pQq7H8NsQJ","type":"tool_result","content":" 1→#!/usr/bin/env ruby\n 2→\n 3→require_relative 'shared_constants'\n 4→\n 5→# Data cleaning and normalization module\n 6→# Note: Substance/route normalization is now done by the API before data reaches this service\n 7→module DataCleaner\n 8→ extend self\n 9→\n 10→ # Clean a field value based on its type\n 11→ def clean_field(value, type = :general)\n 12→ return nil if value.nil?\n 13→ \n 14→ # Remove non-printable characters and strip whitespace\n 15→ cleaned = value.to_s.gsub(/\\p{C}/, '').strip\n 16→ return nil if cleaned.empty?\n 17→ \n 18→ case type\n 19→ when :user\n 20→ normalize_user(cleaned)\n 21→ when :substance\n 22→ normalize_substance(cleaned)\n 23→ when :route\n 24→ normalize_route(cleaned)\n 25→ when :dose\n 26→ normalize_dose(cleaned)\n 27→ when :timestamp\n 28→ normalize_timestamp(cleaned)\n 29→ else\n 30→ cleaned\n 31→ end\n 32→ end\n 33→\n 34→ # Clean a complete entry hash\n 35→ def clean_entry(entry)\n 36→ return nil if entry.nil?\n 37→ \n 38→ {\n 39→ user: clean_field(entry['user'] || entry[:user], :user),\n 40→ substance: clean_field(entry['med'] || entry['substance'] || entry[:substance], :substance),\n 41→ route: clean_field(entry['ROA'] || entry['route'] || entry[:route], :route),\n 42→ dose: clean_field(entry['amount'] || entry['dose'] || entry[:dose], :dose),\n 43→ timestamp: clean_field(entry['timestamp'] || entry['date'] || entry[:timestamp], :timestamp)\n 44→ }\n 45→ end\n 46→\n 47→ # Validate that an entry has required fields\n 48→ def valid_entry?(entry)\n 49→ return false if entry.nil?\n 50→ \n 51→ required_fields = [:user, :substance, :timestamp]\n 52→ required_fields.all? { |field| !entry[field].nil? && !entry[field].empty? }\n 53→ end\n 54→\n 55→ # Safely parse a value with error handling\n 56→ def safe_parse(value, type, default = nil)\n 57→ return default if value.nil?\n 58→ \n 59→ case type\n 60→ when :time\n 61→ Time.parse(value.to_s)\n 62→ when :datetime\n 63→ DateTime.parse(value.to_s)\n 64→ when :date\n 65→ Date.parse(value.to_s)\n 66→ when :float\n 67→ Float(value.to_s)\n 68→ when :integer\n 69→ Integer(value.to_s)\n 70→ when :year\n 71→ year = Integer(value.to_s)\n 72→ validate_year(year) ? year : default\n 73→ else\n 74→ value.to_s\n 75→ end\n 76→ rescue ArgumentError, TypeError, StandardError\n 77→ default\n 78→ end\n 79→\n 80→ # Validate input parameters\n 81→ def validate_user(user)\n 82→ return false if user.nil? || user.empty?\n 83→ \n 84→ user = user.to_s.strip\n 85→ return false if user.length < SharedConstants::Validation::MIN_USERNAME_LENGTH\n 86→ return false if user.length > SharedConstants::Validation::MAX_USERNAME_LENGTH\n 87→ return false unless user.match?(SharedConstants::Validation::USERNAME_PATTERN)\n 88→ \n 89→ true\n 90→ end\n 91→\n 92→ def validate_year(year)\n 93→ return false unless year.is_a?(Integer)\n 94→ return false if year < SharedConstants::Validation::MIN_YEAR\n 95→ return false if year > SharedConstants::Validation::MAX_YEAR\n 96→ \n 97→ true\n 98→ end\n 99→\n 100→ def validate_substance(substance)\n 101→ return false if substance.nil? || substance.empty?\n 102→ \n 103→ substance = substance.to_s.strip\n 104→ return false if substance.length < SharedConstants::Validation::MIN_SUBSTANCE_LENGTH\n 105→ return false if substance.length > SharedConstants::Validation::MAX_SUBSTANCE_LENGTH\n 106→ \n 107→ true\n 108→ end\n 109→\n 110→ private\n 111→\n 112→ # Normalize user names (lowercase, no special chars for matching)\n 113→ def normalize_user(user)\n 114→ user.to_s.downcase.strip\n 115→ end\n 116→\n 117→ # Normalize substance names (data is pre-normalized by API)\n 118→ def normalize_substance(substance)\n 119→ substance.to_s.strip\n 120→ end\n 121→\n 122→ # Normalize route names (data is pre-normalized by API)\n 123→ def normalize_route(route)\n 124→ route.to_s.strip\n 125→ end\n 126→\n 127→ # Normalize dose strings\n 128→ def normalize_dose(dose)\n 129→ dose.to_s.strip.gsub(/\\s+/, ' ')\n 130→ end\n 131→\n 132→ # Normalize timestamp strings\n 133→ def normalize_timestamp(timestamp)\n 134→ timestamp.to_s.strip\n 135→ end\n 136→end\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":"fd2aea49-41ca-499e-9a31-5d2aec33e39a","timestamp":"2026-02-07T23:08:44.086Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"5989258d-7176-4e29-9507-397db27e3239","timestamp":"2026-02-07T23:08:44.550Z"}
{"parentUuid":"5989258d-7176-4e29-9507-397db27e3239","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:44.553Z","message":{"model":"claude-opus-4-6","id":"msg_01ALd1X3ar4yntpJwSCJ7p4f","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_0167EqSTDxkgCsDcgdmD42Qs","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/error_handler.rb"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":12023,"cache_read_input_tokens":47669,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":12023},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYsp8VCpYWscFJLE2ZS","uuid":"afc62d58-07a1-4bac-8eaa-25f2c8bd7105"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"49be8970-69e5-49a3-aa9a-e9a635e16a94","timestamp":"2026-02-07T23:08:44.553Z"}
{"parentUuid":"49be8970-69e5-49a3-aa9a-e9a635e16a94","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_0167EqSTDxkgCsDcgdmD42Qs","type":"tool_result","content":" 1→#!/usr/bin/env ruby\n 2→\n 3→require_relative 'shared_constants'\n 4→\n 5→# Error handling and logging module\n 6→module ErrorHandler\n 7→ extend self\n 8→\n 9→ # Handle parsing errors with context\n 10→ def handle_parsing_error(error, context = nil, options = {})\n 11→ message = build_error_message(error, context)\n 12→ \n 13→ case options[:action]\n 14→ when :log_only\n 15→ log_error(message)\n 16→ nil\n 17→ when :raise\n 18→ log_error(message)\n 19→ raise error\n 20→ else\n 21→ log_error(message)\n 22→ options[:default]\n 23→ end\n 24→ end\n 25→\n 26→ # Safe parsing with error handling\n 27→ def safe_parse(value, type, default = nil)\n 28→ return default if value.nil?\n 29→ \n 30→ case type\n 31→ when :time\n 32→ parse_time(value, default)\n 33→ when :datetime\n 34→ parse_datetime(value, default)\n 35→ when :date\n 36→ parse_date(value, default)\n 37→ when :float\n 38→ parse_float(value, default)\n 39→ when :integer\n 40→ parse_integer(value, default)\n 41→ when :year\n 42→ parse_year(value, default)\n 43→ when :boolean\n 44→ parse_boolean(value, default)\n 45→ else\n 46→ value.to_s\n 47→ end\n 48→ end\n 49→\n 50→ # Handle CSV parsing errors\n 51→ def handle_csv_error(error, row_number = nil, options = {})\n 52→ context = row_number ? \"CSV row #{row_number}\" : \"CSV parsing\"\n 53→ \n 54→ case error\n 55→ when CSV::MalformedCSVError\n 56→ handle_parsing_error(error, context, options.merge(action: :log_only))\n 57→ when ArgumentError\n 58→ handle_parsing_error(error, context, options.merge(action: :log_only))\n 59→ else\n 60→ handle_parsing_error(error, context, options)\n 61→ end\n 62→ end\n 63→\n 64→ # Handle database/file errors\n 65→ def handle_file_error(error, file_path = nil, options = {})\n 66→ context = file_path ? \"file #{file_path}\" : \"file operation\"\n 67→ \n 68→ case error\n 69→ when Errno::ENOENT\n 70→ log_error(\"File not found: #{file_path}\")\n 71→ options[:default] || false\n 72→ when Errno::EACCES\n 73→ log_error(\"Permission denied: #{file_path}\")\n 74→ options[:default] || false\n 75→ when Errno::ENOSPC\n 76→ log_error(\"No space left on device: #{file_path}\")\n 77→ options[:default] || false\n 78→ else\n 79→ handle_parsing_error(error, context, options)\n 80→ end\n 81→ end\n 82→\n 83→ # Handle network errors\n 84→ def handle_network_error(error, url = nil, options = {})\n 85→ context = url ? \"network request to #{url}\" : \"network operation\"\n 86→ \n 87→ case error\n 88→ when Net::TimeoutError\n 89→ log_error(\"Network timeout: #{url}\")\n 90→ options[:default] || nil\n 91→ when Net::HTTPError\n 92→ log_error(\"HTTP error: #{error.message}\")\n 93→ options[:default] || nil\n 94→ when SocketError\n 95→ log_error(\"Socket error: #{error.message}\")\n 96→ options[:default] || nil\n 97→ else\n 98→ handle_parsing_error(error, context, options)\n 99→ end\n 100→ end\n 101→\n 102→ # Handle IRC bot errors\n 103→ def handle_bot_error(error, command = nil, options = {})\n 104→ context = command ? \"IRC command #{command}\" : \"IRC bot operation\"\n 105→ \n 106→ case error\n 107→ when ArgumentError\n 108→ log_error(\"Invalid command arguments: #{command}\")\n 109→ options[:default] || \"Invalid command format\"\n 110→ when SecurityError\n 111→ log_error(\"Security error in command: #{command}\")\n 112→ options[:default] || \"Access denied\"\n 113→ else\n 114→ handle_parsing_error(error, context, options)\n 115→ end\n 116→ end\n 117→\n 118→ # Validate and handle user input\n 119→ def validate_user_input(input, type, options = {})\n 120→ return handle_validation_error(\"Input is required\", type, options) if input.nil?\n 121→ \n 122→ case type\n 123→ when :user\n 124→ validate_user(input, options)\n 125→ when :substance\n 126→ validate_substance(input, options)\n 127→ when :year\n 128→ validate_year(input, options)\n 129→ when :dose\n 130→ validate_dose(input, options)\n 131→ when :route\n 132→ validate_route(input, options)\n 133→ else\n 134→ input\n 135→ end\n 136→ end\n 137→\n 138→ # Log error with timestamp and context\n 139→ def log_error(message, level = :error)\n 140→ timestamp = Time.now.strftime(\"%Y-%m-%d %H:%M:%S\")\n 141→ \n 142→ case level\n 143→ when :debug\n 144→ puts \"[DEBUG] #{timestamp}: #{message}\" if debug_mode?\n 145→ when :info\n 146→ puts \"[INFO] #{timestamp}: #{message}\"\n 147→ when :warning\n 148→ puts \"[WARNING] #{timestamp}: #{message}\"\n 149→ when :error\n 150→ puts \"[ERROR] #{timestamp}: #{message}\"\n 151→ when :fatal\n 152→ puts \"[FATAL] #{timestamp}: #{message}\"\n 153→ end\n 154→ end\n 155→\n 156→ # Check if operation succeeded\n 157→ def success?(result)\n 158→ !result.nil? && result != false\n 159→ end\n 160→\n 161→ # Wrap operation with error handling\n 162→ def with_error_handling(operation_name, options = {})\n 163→ begin\n 164→ result = yield\n 165→ log_error(\"#{operation_name} completed successfully\", :info) if options[:log_success]\n 166→ result\n 167→ rescue => error\n 168→ handle_parsing_error(error, operation_name, options)\n 169→ end\n 170→ end\n 171→\n 172→ # Retry operation with exponential backoff\n 173→ def retry_with_backoff(max_retries = 3, base_delay = 1.0)\n 174→ retries = 0\n 175→ \n 176→ begin\n 177→ yield\n 178→ rescue => error\n 179→ retries += 1\n 180→ \n 181→ if retries <= max_retries\n 182→ delay = base_delay * (2 ** (retries - 1))\n 183→ log_error(\"Retry #{retries}/#{max_retries} after #{delay}s: #{error.message}\", :warning)\n 184→ sleep(delay)\n 185→ retry\n 186→ else\n 187→ log_error(\"Max retries (#{max_retries}) exceeded: #{error.message}\", :error)\n 188→ raise error\n 189→ end\n 190→ end\n 191→ end\n 192→\n 193→ private\n 194→\n 195→ # Build error message with context\n 196→ def build_error_message(error, context)\n 197→ base_message = \"#{error.class}: #{error.message}\"\n 198→ context ? \"#{context} - #{base_message}\" : base_message\n 199→ end\n 200→\n 201→ # Parse time with error handling\n 202→ def parse_time(value, default)\n 203→ Time.parse(value.to_s)\n 204→ rescue ArgumentError, TypeError\n 205→ default\n 206→ end\n 207→\n 208→ # Parse datetime with error handling\n 209→ def parse_datetime(value, default)\n 210→ DateTime.parse(value.to_s)\n 211→ rescue ArgumentError, TypeError\n 212→ default\n 213→ end\n 214→\n 215→ # Parse date with error handling\n 216→ def parse_date(value, default)\n 217→ Date.parse(value.to_s)\n 218→ rescue ArgumentError, TypeError\n 219→ default\n 220→ end\n 221→\n 222→ # Parse float with error handling\n 223→ def parse_float(value, default)\n 224→ Float(value.to_s)\n 225→ rescue ArgumentError, TypeError\n 226→ default\n 227→ end\n 228→\n 229→ # Parse integer with error handling\n 230→ def parse_integer(value, default)\n 231→ Integer(value.to_s)\n 232→ rescue ArgumentError, TypeError\n 233→ default\n 234→ end\n 235→\n 236→ # Parse year with validation\n 237→ def parse_year(value, default)\n 238→ year = parse_integer(value, nil)\n 239→ return default if year.nil?\n 240→ \n 241→ if year >= SharedConstants::Validation::MIN_YEAR && year <= SharedConstants::Validation::MAX_YEAR\n 242→ year\n 243→ else\n 244→ default\n 245→ end\n 246→ end\n 247→\n 248→ # Parse boolean with error handling\n 249→ def parse_boolean(value, default)\n 250→ case value.to_s.downcase\n 251→ when 'true', '1', 'yes', 'on'\n 252→ true\n 253→ when 'false', '0', 'no', 'off'\n 254→ false\n 255→ else\n 256→ default\n 257→ end\n 258→ end\n 259→\n 260→ # Validate user input\n 261→ def validate_user(input, options)\n 262→ input = input.to_s.strip\n 263→ \n 264→ if input.length < SharedConstants::Validation::MIN_USERNAME_LENGTH\n 265→ return handle_validation_error(\"Username too short\", :user, options)\n 266→ end\n 267→ \n 268→ if input.length > SharedConstants::Validation::MAX_USERNAME_LENGTH\n 269→ return handle_validation_error(\"Username too long\", :user, options)\n 270→ end\n 271→ \n 272→ unless input.match?(SharedConstants::Validation::USERNAME_PATTERN)\n 273→ return handle_validation_error(\"Invalid username format\", :user, options)\n 274→ end\n 275→ \n 276→ input\n 277→ end\n 278→\n 279→ # Validate substance input\n 280→ def validate_substance(input, options)\n 281→ input = input.to_s.strip\n 282→ \n 283→ if input.length < SharedConstants::Validation::MIN_SUBSTANCE_LENGTH\n 284→ return handle_validation_error(\"Substance name too short\", :substance, options)\n 285→ end\n 286→ \n 287→ if input.length > SharedConstants::Validation::MAX_SUBSTANCE_LENGTH\n 288→ return handle_validation_error(\"Substance name too long\", :substance, options)\n 289→ end\n 290→ \n 291→ input\n 292→ end\n 293→\n 294→ # Validate year input\n 295→ def validate_year(input, options)\n 296→ year = parse_integer(input, nil)\n 297→ \n 298→ if year.nil?\n 299→ return handle_validation_error(\"Invalid year format\", :year, options)\n 300→ end\n 301→ \n 302→ if year < SharedConstants::Validation::MIN_YEAR || year > SharedConstants::Validation::MAX_YEAR\n 303→ return handle_validation_error(\"Year out of range\", :year, options)\n 304→ end\n 305→ \n 306→ year\n 307→ end\n 308→\n 309→ # Validate dose input\n 310→ def validate_dose(input, options)\n 311→ input = input.to_s.strip\n 312→ return handle_validation_error(\"Dose is required\", :dose, options) if input.empty?\n 313→ \n 314→ require_relative 'dose_processor'\n 315→ \n 316→ unless DoseProcessor.valid_dose_format?(input)\n 317→ return handle_validation_error(\"Invalid dose format\", :dose, options)\n 318→ end\n 319→ \n 320→ input\n 321→ end\n 322→\n 323→ # Validate route input\n 324→ def validate_route(input, options)\n 325→ return SharedConstants::Defaults::ROUTE if input.nil? || input.empty?\n 326→ input.to_s.strip\n 327→ end\n 328→\n 329→ # Handle validation error\n 330→ def handle_validation_error(message, type, options)\n 331→ log_error(\"Validation error (#{type}): #{message}\", :warning)\n 332→ options[:default] || nil\n 333→ end\n 334→\n 335→ # Check if debug mode is enabled\n 336→ def debug_mode?\n 337→ ENV['DEBUG'] == 'true' || ENV['DEBUG'] == '1'\n 338→ end\n 339→end\n 340→\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":"39a4527a-8ca3-481e-b98b-d8bacc84822b","timestamp":"2026-02-07T23:08:44.602Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"92f2bff0-ab1f-452c-813c-11763faeb498","timestamp":"2026-02-07T23:08:45.108Z"}
{"parentUuid":"92f2bff0-ab1f-452c-813c-11763faeb498","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:45.130Z","message":{"model":"claude-opus-4-6","id":"msg_01ALd1X3ar4yntpJwSCJ7p4f","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Uf7j4B65LdUtuiMFmejWpN","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/wrapped/lib/helpers/bot_response_formatter.rb"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":12023,"cache_read_input_tokens":47669,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":12023},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYsp8VCpYWscFJLE2ZS","uuid":"5985ddea-75cd-4b31-91dc-85415fc8a19c"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"3c36541e-bd6c-439c-80e9-9d394e7a5a51","timestamp":"2026-02-07T23:08:45.130Z"}
{"parentUuid":"3c36541e-bd6c-439c-80e9-9d394e7a5a51","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Uf7j4B65LdUtuiMFmejWpN","type":"tool_result","content":" 1→#!/usr/bin/env ruby\n 2→\n 3→require_relative 'shared_constants'\n 4→\n 5→# Bot response formatting module\n 6→module BotResponseFormatter\n 7→ extend self\n 8→\n 9→ # Format tally response with optional last entry\n 10→ def format_tally_response(user, substance, totals, last_entry = nil)\n 11→ base_response = format_basic_tally(user, substance, totals)\n 12→ \n 13→ if last_entry && !last_entry.empty?\n 14→ last_info = format_last_dose_info(last_entry)\n 15→ \"#{base_response} #{last_info}\"\n 16→ else\n 17→ base_response\n 18→ end\n 19→ end\n 20→\n 21→ # Format last dose entry response\n 22→ def format_last_entry_response(entry, context = :last)\n 23→ return format_error_response(SharedConstants::ErrorMessages::NO_DATA) if entry.nil? || entry.empty?\n 24→ \n 25→ timestamp, name, substance, dose, route, comment = entry\n 26→ \n 27→ case context\n 28→ when :last\n 29→ format_last_dose_response(timestamp, name, substance, dose, route, comment)\n 30→ when :full\n 31→ format_full_entry_response(timestamp, name, substance, dose, route, comment)\n 32→ else\n 33→ format_basic_entry_response(timestamp, substance, dose, route)\n 34→ end\n 35→ end\n 36→\n 37→ # Format help response\n 38→ def format_help_response\n 39→ commands = SharedConstants::Bot::COMMANDS\n 40→ \n 41→ help_text = []\n 42→ help_text << \"Available commands:\"\n 43→ help_text << \"#{commands[:tally]} [user] - Get usage count for substance\"\n 44→ help_text << \"#{commands[:last]} [user] - Get last dose info\"\n 45→ help_text << \"#{commands[:listdrugs]} [user] - List all substances used\"\n 46→ help_text << \"#{commands[:wrapped]} [user] [year] - Generate year-end summary\"\n 47→ help_text << \"#{commands[:annotate]} - Add comment to your last dose\"\n 48→ help_text << \"#{commands[:help]} - Show this help message\"\n 49→ \n 50→ help_text.join(\" | \")\n 51→ end\n 52→\n 53→ # Format listdrugs response\n 54→ def format_listdrugs_response(user, substances)\n 55→ return format_error_response(\"No substances found for #{user}\") if substances.empty?\n 56→ \n 57→ # Group substances by frequency for better organization\n 58→ if substances.length > 20\n 59→ top_substances = substances.take(20)\n 60→ \"#{user}'s substances (top 20): #{top_substances.join(', ')}... (#{substances.length} total)\"\n 61→ else\n 62→ \"#{user}'s substances: #{substances.join(', ')}\"\n 63→ end\n 64→ end\n 65→\n 66→ # Format wrapped generation response\n 67→ def format_wrapped_response(user, year, url = nil)\n 68→ if url\n 69→ \"#{user}'s Substance Wrapped #{year}: #{url}\"\n 70→ else\n 71→ format_error_response(\"Failed to generate wrapped for #{user} (#{year})\")\n 72→ end\n 73→ end\n 74→\n 75→ # Format annotation confirmation\n 76→ def format_annotation_response(user, comment)\n 77→ \"Annotation added: \\\"#{comment.strip}\\\" - will be applied to your last dose\"\n 78→ end\n 79→\n 80→ # Format error response\n 81→ def format_error_response(message)\n 82→ \"Error: #{message}\"\n 83→ end\n 84→\n 85→ # Format truncated response if too long\n 86→ def format_truncated_response(text)\n 87→ OutputFormatter.truncate_text(text, SharedConstants::Bot::MAX_RESPONSE_LENGTH)\n 88→ end\n 89→\n 90→ # Format user mention\n 91→ def format_user_mention(user)\n 92→ return \"User\" if user.nil? || user.empty?\n 93→ user.to_s.strip\n 94→ end\n 95→\n 96→ # Format substance name for display\n 97→ def format_substance_name(substance)\n 98→ return \"unknown\" if substance.nil? || substance.empty?\n 99→ substance.to_s.strip\n 100→ end\n 101→\n 102→ # Format dose amount for display\n 103→ def format_dose_display(dose)\n 104→ return \"unknown amount\" if dose.nil? || dose.empty?\n 105→ dose.to_s.strip\n 106→ end\n 107→\n 108→ # Format route for display\n 109→ def format_route_display(route)\n 110→ return \"\" if route.nil? || route.empty?\n 111→ route.to_s.strip\n 112→ end\n 113→\n 114→ # Format timestamp for display\n 115→ def format_timestamp_display(timestamp)\n 116→ return \"unknown time\" if timestamp.nil?\n 117→ \n 118→ begin\n 119→ parsed_time = Time.parse(timestamp.to_s)\n 120→ parsed_time.strftime(\"%m/%d/%Y %H:%M\")\n 121→ rescue ArgumentError\n 122→ timestamp.to_s\n 123→ end\n 124→ end\n 125→\n 126→ # Format count display\n 127→ def format_count_display(count)\n 128→ return \"0\" if count.nil?\n 129→ count.to_s\n 130→ end\n 131→\n 132→ # Format comment for display\n 133→ def format_comment_display(comment)\n 134→ return \"\" if comment.nil? || comment.empty?\n 135→ \n 136→ cleaned_comment = comment.to_s.strip\n 137→ return \"\" if cleaned_comment.empty?\n 138→ \n 139→ \" (#{cleaned_comment})\"\n 140→ end\n 141→\n 142→ # Format success response\n 143→ def format_success_response(message)\n 144→ message.to_s\n 145→ end\n 146→\n 147→ # Format warning response\n 148→ def format_warning_response(message)\n 149→ \"Warning: #{message}\"\n 150→ end\n 151→\n 152→ # Format status response\n 153→ def format_status_response(message)\n 154→ \"Status: #{message}\"\n 155→ end\n 156→\n 157→ private\n 158→\n 159→ # Format basic tally information\n 160→ def format_basic_tally(user, substance, totals)\n 161→ formatted_user = format_user_mention(user)\n 162→ formatted_substance = format_substance_name(substance)\n 163→ formatted_count = format_count_display(totals)\n 164→ \n 165→ \"#{formatted_user} has used #{formatted_substance} #{formatted_count} times\"\n 166→ end\n 167→\n 168→ # Format last dose information\n 169→ def format_last_dose_info(entry)\n 170→ timestamp, _, substance, dose, route, comment = entry\n 171→ \n 172→ formatted_timestamp = format_timestamp_display(timestamp)\n 173→ formatted_dose = format_dose_display(dose)\n 174→ formatted_route = format_route_display(route)\n 175→ formatted_comment = format_comment_display(comment)\n 176→ \n 177→ route_text = formatted_route.empty? ? \"\" : \" via #{formatted_route}\"\n 178→ \n 179→ \"Last: #{formatted_dose}#{route_text} at #{formatted_timestamp}#{formatted_comment}\"\n 180→ end\n 181→\n 182→ # Format last dose response\n 183→ def format_last_dose_response(timestamp, name, substance, dose, route, comment)\n 184→ formatted_timestamp = format_timestamp_display(timestamp)\n 185→ formatted_name = format_user_mention(name)\n 186→ formatted_substance = format_substance_name(substance)\n 187→ formatted_dose = format_dose_display(dose)\n 188→ formatted_route = format_route_display(route)\n 189→ formatted_comment = format_comment_display(comment)\n 190→ \n 191→ route_text = formatted_route.empty? ? \"\" : \" via #{formatted_route}\"\n 192→ \n 193→ \"#{formatted_name} last dosed #{formatted_substance} (#{formatted_dose})#{route_text} at #{formatted_timestamp}#{formatted_comment}\"\n 194→ end\n 195→\n 196→ # Format full entry response\n 197→ def format_full_entry_response(timestamp, name, substance, dose, route, comment)\n 198→ formatted_timestamp = format_timestamp_display(timestamp)\n 199→ formatted_name = format_user_mention(name)\n 200→ formatted_substance = format_substance_name(substance)\n 201→ formatted_dose = format_dose_display(dose)\n 202→ formatted_route = format_route_display(route)\n 203→ formatted_comment = format_comment_display(comment)\n 204→ \n 205→ route_text = formatted_route.empty? ? \"\" : \" via #{formatted_route}\"\n 206→ \n 207→ \"On #{formatted_timestamp}, #{formatted_name} took: #{formatted_substance} (#{formatted_dose})#{route_text}#{formatted_comment}\"\n 208→ end\n 209→\n 210→ # Format basic entry response\n 211→ def format_basic_entry_response(timestamp, substance, dose, route)\n 212→ formatted_timestamp = format_timestamp_display(timestamp)\n 213→ formatted_substance = format_substance_name(substance)\n 214→ formatted_dose = format_dose_display(dose)\n 215→ formatted_route = format_route_display(route)\n 216→ \n 217→ route_text = formatted_route.empty? ? \"\" : \" via #{formatted_route}\"\n 218→ \n 219→ \"#{formatted_substance} (#{formatted_dose})#{route_text} at #{formatted_timestamp}\"\n 220→ end\n 221→end\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":"4fc0a79e-bd55-4be5-a3e5-c00c15375814","timestamp":"2026-02-07T23:08:45.183Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"e12ded14-c584-4dcb-b409-e17b4a6a4396","timestamp":"2026-02-07T23:08:45.536Z"}
{"parentUuid":"e12ded14-c584-4dcb-b409-e17b4a6a4396","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:45.554Z","message":{"model":"claude-opus-4-6","id":"msg_01ALd1X3ar4yntpJwSCJ7p4f","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01UsTL9eDwKTPdvTknVTHdzn","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/wrapped/Dockerfile"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":12023,"cache_read_input_tokens":47669,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":12023},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYsp8VCpYWscFJLE2ZS","uuid":"8117dc66-5a09-4360-b72d-66e5c8404ab9"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"91642ebc-0974-47f6-ac6c-e70b24a3176e","timestamp":"2026-02-07T23:08:45.554Z"}
{"parentUuid":"91642ebc-0974-47f6-ac6c-e70b24a3176e","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01UsTL9eDwKTPdvTknVTHdzn","type":"tool_result","content":" 1→FROM ruby:3.2-alpine AS builder\n 2→\n 3→RUN apk --no-cache add \\\n 4→ build-base \\\n 5→ imagemagick-dev\n 6→\n 7→WORKDIR /app\n 8→\n 9→COPY Gemfile ./\n 10→RUN bundle config set --local path 'vendor/bundle' && \\\n 11→ bundle install --jobs 4\n 12→\n 13→COPY . .\n 14→\n 15→FROM ruby:3.2-alpine\n 16→\n 17→RUN apk --no-cache add \\\n 18→ imagemagick \\\n 19→ ffmpeg \\\n 20→ ttf-dejavu fontconfig \\\n 21→ && fc-cache -f\n 22→\n 23→WORKDIR /app\n 24→\n 25→COPY --from=builder /app /app\n 26→\n 27→# OpenShift runs with random UID but GID 0\n 28→RUN chgrp -R 0 /app && chmod -R g=u /app && \\\n 29→ mkdir -p /tmp/wrapped && chgrp 0 /tmp/wrapped && chmod g=u /tmp/wrapped\n 30→\n 31→ENV BUNDLE_PATH=/app/vendor/bundle\n 32→ENV RACK_ENV=production\n 33→ENV PORT=3002\n 34→\n 35→EXPOSE 3002\n 36→\n 37→CMD [\"bundle\", \"exec\", \"puma\", \"-C\", \"config/puma.rb\"]\n 38→\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":"4e4184e0-4381-4b69-ac52-aedc5e974716","timestamp":"2026-02-07T23:08:45.612Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"9c2dec24-d2dc-4c91-b862-156354a2bbf9","timestamp":"2026-02-07T23:08:45.651Z"}
{"parentUuid":"9c2dec24-d2dc-4c91-b862-156354a2bbf9","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:51.107Z","message":{"model":"claude-opus-4-6","id":"msg_01JNsFBsquhSJUY42TfATCpD","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01W34kuXSj7gutmTXeDfjsLk","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/web/src/main.cr"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":11466,"cache_read_input_tokens":59692,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":11466},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYtKgjtrcw84MTPmXL7","uuid":"943d6bb8-b96e-41b7-8d32-17fc10f8a05c"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"9486aba6-c459-421d-b162-f7b45495df41","timestamp":"2026-02-07T23:08:51.107Z"}
{"parentUuid":"9486aba6-c459-421d-b162-f7b45495df41","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01W34kuXSj7gutmTXeDfjsLk","type":"tool_result","content":" 1→require \"kemal\"\n 2→require \"redis\"\n 3→require \"josie-health-utils\"\n 4→require \"./session_manager\"\n 5→require \"./middleware/session_middleware\"\n 6→require \"./middleware/csrf_middleware\"\n 7→require \"./router\"\n 8→\n 9→module JosieHealth::Web\n 10→ Log = JosieHealth::Utils::Log\n 11→ VERSION = \"0.1.0\"\n 12→\n 13→ def self.run\n 14→ port = ENV[\"PORT\"]?.try(&.to_i) || 3002\n 15→ redis_host = ENV[\"REDIS_HOST\"]? || \"localhost\"\n 16→ redis_port = ENV[\"REDIS_PORT\"]?.try(&.to_i) || 6379\n 17→ redis_password = ENV[\"REDIS_PASSWORD\"]?\n 18→\n 19→ redis = if redis_password\n 20→ Redis.new(host: redis_host, port: redis_port, password: redis_password)\n 21→ else\n 22→ Redis.new(host: redis_host, port: redis_port)\n 23→ end\n 24→ Log.info(\"main\", \"Connected to Redis at #{redis_host}:#{redis_port}\")\n 25→\n 26→ session_manager = SessionManager.new(redis)\n 27→\n 28→ add_handler SessionMiddleware.new(session_manager)\n 29→ add_handler CSRFMiddleware.new(session_manager)\n 30→\n 31→ router = Router.new(redis, session_manager)\n 32→ router.setup_routes\n 33→\n 34→ Kemal.config.port = port\n 35→ Kemal.config.env = ENV[\"KEMAL_ENV\"]? || \"development\"\n 36→\n 37→ Log.info(\"main\", \"Starting Josie Health Web on port #{port}\")\n 38→ Kemal.run\n 39→ end\n 40→end\n 41→\n 42→JosieHealth::Web.run\n 43→\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":"a1b7fda6-c914-4eb5-b4f0-ed32badac47a","timestamp":"2026-02-07T23:08:51.158Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"ed008369-36cb-4d83-9619-f2051cc4fac4","timestamp":"2026-02-07T23:08:51.338Z"}
{"parentUuid":"ed008369-36cb-4d83-9619-f2051cc4fac4","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:51.681Z","message":{"model":"claude-opus-4-6","id":"msg_01JNsFBsquhSJUY42TfATCpD","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Va8jHdZPhwVXqkPQ4mLzvV","name":"Glob","input":{"pattern":"services/web/src/**/*.cr","path":"/home/josie/development/personal/josiedot/health"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":11466,"cache_read_input_tokens":59692,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":11466},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYtKgjtrcw84MTPmXL7","uuid":"6a6e3828-f6d3-49be-8461-5daf9befb2ab"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"9d4995ba-e561-472f-8038-c6d35b0a6afe","timestamp":"2026-02-07T23:08:51.682Z"}
{"parentUuid":"9d4995ba-e561-472f-8038-c6d35b0a6afe","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Va8jHdZPhwVXqkPQ4mLzvV","type":"tool_result","content":"/home/josie/development/personal/josiedot/health/services/web/src/handlers/substance_handler.cr\n/home/josie/development/personal/josiedot/health/services/web/src/handlers/keys_handler.cr\n/home/josie/development/personal/josiedot/health/services/web/src/handlers/account_handler.cr\n/home/josie/development/personal/josiedot/health/services/web/src/api_client.cr\n/home/josie/development/personal/josiedot/health/services/web/src/main.cr\n/home/josie/development/personal/josiedot/health/services/web/src/handlers/dose_handler.cr\n/home/josie/development/personal/josiedot/health/services/web/src/session_manager.cr\n/home/josie/development/personal/josiedot/health/services/web/src/handlers/auth_handler.cr\n/home/josie/development/personal/josiedot/health/services/web/src/middleware/session_middleware.cr\n/home/josie/development/personal/josiedot/health/services/web/src/middleware/csrf_middleware.cr\n/home/josie/development/personal/josiedot/health/services/web/src/router.cr"}]},"uuid":"85d67ed5-f2a2-4810-9ca4-0e54f327423b","timestamp":"2026-02-07T23:08:51.755Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"e77d9f13-da03-49a4-8b0c-8ff97f2070c1","timestamp":"2026-02-07T23:08:52.183Z"}
{"parentUuid":"e77d9f13-da03-49a4-8b0c-8ff97f2070c1","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:52.193Z","message":{"model":"claude-opus-4-6","id":"msg_01JNsFBsquhSJUY42TfATCpD","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01BQntUtZiscqEDT7gNUHuj8","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/web/shard.yml"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":11466,"cache_read_input_tokens":59692,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":11466},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYtKgjtrcw84MTPmXL7","uuid":"4c5ee0c6-6024-4003-ab1b-5687abb5aeb6"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"456d1977-06b3-4d33-84ed-cba529ceef12","timestamp":"2026-02-07T23:08:52.194Z"}
{"parentUuid":"456d1977-06b3-4d33-84ed-cba529ceef12","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01BQntUtZiscqEDT7gNUHuj8","type":"tool_result","content":" 1→name: josie-health-web\n 2→version: 0.1.0\n 3→\n 4→crystal: \">= 1.9.0\"\n 5→\n 6→targets:\n 7→ josie-health-web:\n 8→ main: src/main.cr\n 9→\n 10→dependencies:\n 11→ kemal:\n 12→ github: kemalcr/kemal\n 13→ redis:\n 14→ github: stefanwille/crystal-redis\n 15→ josie-health-utils:\n 16→ git: git@github.com:josiedot/health-utils.git\n 17→\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":"46693f2a-4bd2-4204-bbdf-715233d51501","timestamp":"2026-02-07T23:08:52.242Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"73c51a20-89be-4945-9c39-7845c63793a5","timestamp":"2026-02-07T23:08:52.613Z"}
{"parentUuid":"73c51a20-89be-4945-9c39-7845c63793a5","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:52.639Z","message":{"model":"claude-opus-4-6","id":"msg_01JNsFBsquhSJUY42TfATCpD","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_019ajHZjKQxD4EZ4fG8S5yrj","name":"Read","input":{"file_path":"/home/josie/development/personal/josiedot/health/services/web/Dockerfile"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":11466,"cache_read_input_tokens":59692,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":11466},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYtKgjtrcw84MTPmXL7","uuid":"2986d12f-7b62-4435-bd95-9a910a541347"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"e3984142-6449-4b14-8fea-9dd473601199","timestamp":"2026-02-07T23:08:52.639Z"}
{"parentUuid":"e3984142-6449-4b14-8fea-9dd473601199","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_019ajHZjKQxD4EZ4fG8S5yrj","type":"tool_result","content":" 1→FROM crystallang/crystal:1.15.0-alpine AS builder\n 2→WORKDIR /app\n 3→RUN apk add --no-cache libssh2-dev libssh2-static openssl-dev openssl-libs-static zlib-dev zlib-static git openssh-client && \\\n 4→ mkdir -p ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts\n 5→COPY . .\n 6→RUN test -f .ssh/ssh-privatekey && cp .ssh/ssh-privatekey ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa || true\n 7→RUN shards install && crystal build src/main.cr --release --static -o josie-health-web\n 8→\n 9→FROM alpine:3.18\n 10→RUN apk --no-cache add ca-certificates\n 11→WORKDIR /app\n 12→COPY --from=builder /app/josie-health-web .\n 13→COPY --from=builder /app/static/ ./static/\n 14→RUN chown -R 1000:1000 /app && find /app/static -type d -exec chmod 755 {} \\; && find /app/static -type f -exec chmod 644 {} \\;\n 15→USER 1000:1000\n 16→EXPOSE 3002\n 17→CMD [\"./josie-health-web\"]\n 18→\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":"fc258dd6-57d8-48a9-90e0-3f6db8c758b5","timestamp":"2026-02-07T23:08:52.689Z"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses in single day)\n- Sober streaks\n- Category distribution (psychedelics, stimulants, etc.)\n\n## Design the following:\n\n### 1. Service Architecture\n- File structure following existing Crystal patterns\n- Endpoints (keep compatibility with API caller)\n- Shard dependencies (what Crystal libraries for image generation?)\n- Consider: ImageMagick via Process.run, Cairo via cairo-cr bindings, SVG->PNG conversion, or stumpy_png for pure Crystal\n\n### 2. Statistics Module\n- Which existing stats to keep\n- New stats to add that would be genuinely interesting\n- How to structure the stats calculation code\n\n### 3. Image Generation\n- Recommend an approach for Crystal image generation\n- Layout design (sections, flow)\n- Color scheme and typography recommendations\n- Graph/chart generation approach\n- Target resolution and format\n\n### 4. Integration\n- How the API calls this service (keep existing contract or modify?)\n- File upload to vault.moe\n- Error handling and async support\n\n### 5. Testing Strategy\n- What to test and how\n- Integration with existing Makefile\n\nProvide a detailed implementation plan with specific files, modules, and code structure. Be practical - prefer proven approaches over experimental ones.","agentId":"a2b1b1b"},"toolUseID":"agent_msg_016wimnFmJRrpgdjoNZots9k","parentToolUseID":"toolu_01JQnB3Nar7D3BKH9bSAXDVH","uuid":"c8bece5d-f375-4ea4-9556-04a287496d2f","timestamp":"2026-02-07T23:08:52.738Z"}
{"parentUuid":"c8bece5d-f375-4ea4-9556-04a287496d2f","isSidechain":false,"userType":"external","cwd":"/home/josie/development/personal/josiedot/health","sessionId":"22b017d1-6032-4abe-b766-ee0ec86418e7","version":"2.1.34","gitBranch":"HEAD","slug":"vectorized-dancing-flute","type":"progress","data":{"message":{"type":"assistant","timestamp":"2026-02-07T23:08:57.935Z","message":{"model":"claude-opus-4-6","id":"msg_01JodCWAkfQ3VbkcJeeCZjsj","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01XkrjCFyBqghePHdR2e3WQr","name":"Grep","input":{"pattern":"wrapped","path":"/home/josie/development/personal/josiedot/health/services/core/src","output_mode":"files_with_matches"}}],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":3343,"cache_read_input_tokens":71158,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":3343},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"requestId":"req_011CXuYtqyPthRLqow7JhNBQ","uuid":"5d4b508b-7148-43fb-a99b-b10ceeca286c"},"normalizedMessages":[],"type":"agent_progress","prompt":"Design a Crystal rewrite of a \"Spotify Wrapped\" style health statistics image generator. This replaces an existing Ruby/Sinatra service.\n\n## Context\n\n**Current Ruby service** at `services/wrapped/`:\n- Sinatra app with POST /wrapped endpoint\n- Receives CSV dose data, user_id, year\n- Calculates statistics and generates a PNG image + text report\n- Uses MiniMagick (ImageMagick wrapper) for image generation\n- Generates graphs (monthly line graph, category stacked bar)\n- Uploads finished image to un.vault.moe\n- Supports async callbacks\n- Also has video generation (being dropped in rewrite)\n\n**Existing Crystal service patterns** (from services/web/ and services/core/):\n- Kemal web framework with ECR templates\n- Handler classes with dependency injection\n- JosieHealth::Utils::Log for logging\n- shard.yml with git dependencies for josie-health-utils, josie-health-lut\n- Multi-stage Dockerfiles (crystallang/crystal:1.15.0-alpine builder -> alpine:3.18 runtime)\n- Environment config: PORT, API_URL, API_USERNAME, API_PASSWORD, DEBUG\n- Static binaries built with --release --static\n\n**Data flow**: API service at services/core/ has a `/v1/metrics/wrapped/{user_id}` endpoint that fetches user dose CSV data from Redis, calculates some stats, then calls the wrapped service. The wrapped service receives CSV data + metadata and returns an image URL + text report.\n\n**CSV format**: `timestamp,user,substance,amount,route,annotation` with normalized columns too (normalized_substance, dosage, normalized_route, categories, dose_classification)\n\n## Requirements\n\n1. **Image only** - Drop video generation entirely\n2. **Standalone Crystal service** - Same deployment pattern as other services\n3. **Revamped statistics** - More interesting/useful insights beyond what exists\n4. **Visual overhaul** - New design, not Spotify green clone\n\n## Current Statistics (to evaluate what to keep/improve):\n- Top 10 substances by frequency\n- Monthly breakdown with averages\n- Time of day (morning/afternoon/evening/night)\n- Day of week patterns\n- Route/ROA preferences\n- One-time experiments\n- Consecutive-day streaks per substance\n- Hardest day (most doses