2025 06 24 recall session #4

Ben Fisher (with another speaker) records a recall/debugging session focused on a sync/CRM pipeline that ingests messages from Apple/iCloud (iMessage, SMS, RCS) and forwards interactions into a CRM called Adio. Key issues: unexpected missing recent messages (investigation of two local databases: Chat DB and Chat DB WAL and their commit behavior), inconsistencies when opening the SQLite files with different viewers (TablePlus showed blank, SQLite Pro could open tables), and message rows with empty text or rich-text/attachment blobs. Operational problems discussed include incorrect batching/deduplication behavior (they expect per-message processing with a configurable deduplication window—default 30 minutes—so only one CRM interaction is created per contact per window), tests failing / deduplication not working, unstaged/generated files and messy repo structure, and reliability/daemon startup choices (auto-launch on login, initial sync on start, restart behavior). Ben also contrasts Taskmaster AI vs Claude for task granularity and requests many concrete actions (SQL query to view recent messages, save query to README, create tasks, run tests, stage/commit changes).
Questions this video answers
Uploaded July 8, 2025 (title: '2025 06 24 recall session #4').
Chat DB and Chat DB WAL.
30 minutes (configurable; may change later to daily/calendar-day).
Chapters
Howdy. We're on day three working on recall. I think cumulatively I've spent about five hours total on this. To be honest, I not been particularly impressed with pace building. I think one thing I was reflecting on today is it's been interesting to me is using Claude and I think also part of this is and building in a language that I'm not. I don't really. I've never built a project in right. Like I've done plenty of JavaScript and Vue and React bit over the years. But it's different building like a full end to end product in a language that you're not familiar with. And also this is not nearly as object oriented as I typically build in and it's just a different. It's a bit of a different relationship with coding. Something I'm sure I'll. As I adjust my approach over time I'll. It'll become more familiar and also I've been going through this pretty quickly not thinking too hard about and not thinking too hard about really wrapping my head around the details because I've been more interested around honestly the building and the content around the building and typically I've. It's been hard a bit to visualize all the tasks and subtasks. They do have that they have a command where you can. It'll summarize it using charts but using something like linear for example for me has always been a bit more intuitive because you can also see things in a timeline and then tasks and subtasks and so again that's not to say that you can't do the same thing with this approach. But I think if I were to do something different it'd be like being able to have a bit more visibility into not just the tasks I'm working on, but the full scope of what we're building. So one thing I was wondering about today was I was curious how frequently the icloud syncs messages to local database because I just ran the sync and it didn't have some messages that I've been exchanging with people over the last like hour. Specifically a buddy of mine, Jonathan Wagner, it didn't have him his message and so it got me curious around is the issue that the messages are missing that they weren't synced to my local database. The local database or is it a problem actually with our app? And so I just quickly. You told it to research the frequency of that iCloud synchronizes your messages with your database. Which brought me up to something somewhat surprising which was apparently there's two different databases. There's Chat DB and then Chat DB Wall. It says that new messages are written instantly to Chat Wall and that it should be almost near instant sync, which that's true. The message from Wagner was like a couple an hour or so ago. So that periodic commits. So it looks like it's only periodically committed to Chat db. One of the issues though is I. So I found the file. My plan was to open it using like a SQL database database viewer, but it's actually showing up as blank. Doesn't even show any tables, which is strange. So trying to figure out why that's that didn't work. Guess what I'm wondering could what's going on? So I'm going to spend a few minutes because I want to make sure that we're accurately. So good here. Investigate the simplest way on a Mac to view both of those databases. I just tried Table plus and to open up Chat DB and it shows up as a blank file with no tables. So either you can't use Table plus, which makes sense because it's a SQLite database and Table works with SQLite, or something else is going on. What's the simplest way for us to view the contents of both of those databases? See how that works. I also saw on Slack today that someone mentioned they stopped using Task Master AI for tasks because they said Claude now manages tasks and stuff, which isn't my experience, but part of the challenge of this. Things change so much for like maybe. But I don't think so. At least certainly not in the granularity that Taskmaster does. And part of what's attractive to me what Taskmaster is I find with LLMs, you really, @ least so far my experience of building stuff, you really need to document and be granular. And I'm not naturally that granular. And so Taskmaster has been helpful for me around being able to talk and then break stuff down. And it's like a process that provides me some structure to do it. Whereas at least, far as I know, Claude Code does not provide any structure around breaking up tasks and prioritizing them. And so we'll see. I've saved Cloud research. Yeah, it's just bizarre. Yeah. It doesn't even show it as a database. So this is one of the tools I use Aki Flow. It's how I time box everything. I'm using it for probably over a year. Absolutely love it. Don't think I could live without it. I'm also o. I just exported session number three. Oh no, that was fine. I'm experimenting with AI to take the transcripts of these sessions and then summarize what we did because next part of this I'm not looking forward to is content regardless and so here's reflect DRD session one I'm currently exporting session three or session two thoughts are structures see how far we are from the export I am struggling to all right jeez man wasn't that long of a session all right I also wonder if there's a better finish recording I'm not done all right all right I'm curious any feedback or thoughts and suggestions around content that's not super cringe let's see what it has to say so researching let's just say message this is strange what's going to respect my natural language no fear trouble finder let me just pretty sure that's what we're looking at but just that's the what is God right Everything I've read and just intuitively it's ridiculous to me this is how I dip to do so it I could see they use let's go back see if I can all right so it's showing showing messages all right so just move that at a oh so this is encrypted which I think I saw that another message set up they're encoded as a hex blob dude all right that worked yeah that work getting out of respect for the messages doesn't make sense this definitely worked see if setup is SQLite maybe they even have SQL Pro that's they suggested open the existing database all right that's interesting that worked strange I was able to view the database and all the tables in SQLite Pro client but yeah they don't show anything within table plus which why could that be let's go back to the point of this which is I wanted to see what messages have been how far back it's been synced free I used back to hex chat message join message day but that it roommate phone number is 5 years 61 RCS Interesting it so it looks like the most recent message that it Synced was from 11:30am and it's currently 1:42 I wonder if it happens when I the chat Smith why is there a bunch of blank ones I don't know why is there so many tokens it's actually not that many tokens just taking forever I wonder if spam messages just opened I'll message it see what time that's 11:36 it significant it yeah I don't see Wagner's mess. This is the less fun part that's probably not very exciting to see, but it's real. Is there a way for us try checking the latest messages in here? It interesting. What's the 10 most recent messages in and when we're querying. Are we querying our queries including the DB Wall file or just chat D? Bizarre, because I'm looking at the actual give me a sequel command that I can run in SQL Pro. That'll show me like the 30 most recent messages who the message came from the message body. And I assume you need to do that using a join or something in order because I'm seeing a lot of messages that have no value for text as the most like the six most recent messages, at least chronologically by row ID in the database in the messages table, which seems strange because I don't have any blank messages that I'm aware of or if they. Even if they were attachments, I don't. I haven't gotten 10 messages today before the public records text messaging still doesn't make sense. See here sender me. Those might be four. Three. That's Mike. The alternative query you gave me doesn't have the text or at least I don't see it. Mostly most of them say no text stream typed. Yeah, there's a lot of messages missing. That's really strange. Okay, interesting. That's helpful. Thank you. Please save this query in our readme markdown file for debugging. But it's weird. I don't see. I can see Wagner's message. Strange that a bunch of these just say. Bunch of these just say. I guess the good news is even if it says rich text, the whole point of this is who am I communicating with? So the body of the message actually doesn't matter. Although one problem is it's not showing messages even that should have fallen within the time frame. Seven. Nine. Nine. Oh, yeah, I see it. Okay, in your query, you're not reporting certain people messaged who should have been. For example, you should not exclude anyone where the message content is like rich text attachment, but it at least doesn't seem like you're syncing those communications or the fact that I communicate with them back to the CRM. Can you check? For example, it shows rich tech slash attachment messages, but you did not sync any activity interactions to that number in Adio. So annoying. Actually, I don't see him. In fact, you didn't add them to Adio even though that person's email address exists in Adio. What happened? All right, that's good to know. Yes. Proceed and update. Add a task and do it right now. Yeah because the whole point here is not actually what we said just so we were interacting. You should also include the service RCS. I believe that. Yeah include RCS as well. It's not just iMessage and SMS. Ridiculous. Not actually ridiculous but. All right, cool. And session two just finished. So we can get the transcript of that and we'll do. Yeah so for the other one we did like 80% 95 or something. See how this is I am curious of how effective the eye thing is. Gosh. Okay. What's that spirit? Why is it showing red? Strange looks corrupt it okay looks like it solved. There's Wagner. At a certain point be like should we even specify a service? Does it even make sense to specify a service? Why would we specify a specific service? Why don't we just take any messages? It I wonder why it's saying rich text though. These are definitely not rich text messages. Oh it this is a bit strange. Why is it what's the purpose of this document? This is not a guide. What is this so whoa. Okay. All right. What is the purpose of this? Yeah it's going way overboard doing too much sun it why is this why did I create a document for this? Foreign units recent messages based off of what I can see no messages get written to chat to DB which doesn't seem it's worth saving just as lessons learned frankly for content I'll put that into Google. Oh hate this. I knew I had already had a folder for this project recall man.
It.
Is impossible to keep track of where all these dogs terror no parlance on me but she's all this on me man. This is unnecessarily difficult folder it structure sure what that I'm doing not unnecessary. We'll call these looks learned that would be from session three. Okay but really what happened? I sold it somewhere. 10. You've generated seemingly a bunch of unnecessary files and this one seems like it should be in like a docs folder. You've generated a bunch of unnecessary files and it seems like this one should just be in the docs folder. Chill. Please analyze the unstaged files and let me know which ones you think you should remove and or which ones you should move and or I need to put into the readme file or something else. Yes you did. Okay. Stage the changes and generate a commitment it it's fun. Do this again. Where's the code for the last day it here I feel like I'm going to need to get all my friends dinner who somehow inadvertently get featured in this. That's all right. Something you made a bunch of emails that were within the 10 minute threshold. Let's do one hour threshold. Actually like we should only only. Do we only need to send one email per hour or like within a batch of an hour? Because you just. But why did this happen? You just sent five messages that were within a couple minutes of each other for Mike. Analyze our logs and you'll see what I mean. How did that happen? That should not have been possible. Run our tests and see if our tests fail now because the deduplication obviously did not work. Is that. Would that fail mean so was insane. Oh the issue is that we're only supposed to send like hourly chunks for people and actually at some point I'm going to probably want to change this to daily. Like we not only want to notify or send a notification to the CRM if they sent a message on a day. We don't need these individual notifications. The whole point is understanding who am I in touch with and who am I actually communicating with versus there's been a long period of not we decay with them. But I want a smaller period for now as we're testing so that we can test a lot of this stuff. So make it so that currently the default period for de duplicating messages is 30 minutes. But eventually. But it should be obvious so that we can change that to like calendar day. That was my phone now I thought but yeah I can see that messages show up in the database immediately as soon as I see them on my phone on my computer. It Ken. Yeah. It's funny. It Rerun our tests. Flip it from my toes. What's the command to run tests.
Don't want to. Yeah.
So.
Been involved so many other full creative projects and hard work.
Really.
Work. I just want to eat.
Wow.
Is that daddy Dang. Do you know who riot is? Yeah like they do have like music but I feel like more of a and artistic feel like their art is good actors. No idea Woman that found her. Cuz you right been arrested in 2012 for that test if you remember. She's on. She's actually on interle. She's on list for literally making music video but that was her goal.
Jesus.
She's in the U.S. i don't know what her travel is now. She's been doing a lot of her own like visual art here in Los Angeles and it's not as explicitly political. She has to be cautious what she sings here because if she gets extradited but just seemingly inspiring to see and I'm going on about this because I she's been one of my heroes I don't even say I don't want to hear her work there but I have inspiration I've looked up to her I admired her activism political thought philosophical poem.
Walking through the logic for determining whether or not to send a message to.
Adio interestingly enough and in a detail that I'm in the process of me and not that it's something I like was here I even before was never even turned he was LGBT used to like strangle like one person my entire life thing was for me much more powerful right.
No we should be looking at within the time frame and it's.
Like the world I was always going.
To be Jesus boys and what if you should be doing is figuring out.
Anyways.
All right here's the simplest way to do it. When we have a message check to see if there was an interaction already logged within whatever that period is within 30 minutes of that message that's what our code is doing where what line is this happening on because again the logic should be only send the interaction to Adio if there has not been another interaction logged within X minutes or hours whatever the time period is within X hours of that message.
She so much and she is the first hardcore she is she's sweetest softest is it so cool never thought it would actually be but looked up to for so long they first simple like kind of.
450 maybe the artist will.
This isn't the whole group but like this is.
The end of the so annoying sorry fix that right now it needs to be per message processing it never should have been changed from per message processing All I was saying is that the batch should be we only send the message to a contact if there have been no other messages within the time frame that's what I meant by batching See now is when you start to and I hadn't caught that this made that change man this is a perfect example of this is so insane.
We all need to I think.
This person.
Dinner today is annoying day meeting with.
The windows start now yeah this is.
Not and this is like they're they've been three months.
Yes this should not be relative to current time it should be relative to the time of the message we're processing tech support this doesn't.
Sound right this sounds like a system error that I probably can't help you call turns out they have there's a stage process.
They for they hurting them super nice.
They shouldn't go. We don't know about this. You work home.
Yeah I think the the lesson here was the training before the probably the tests.
It's part of their it's like prevented call me but they don't even know.
What I'm calling I'm just like yeah tolerance.
This doesn't even like a good on.
Right There you go.
I was just like find out. I was like oh system error.
And.
Like she had a little chance and I was it's more work. I have a training business but we have discussed this.
What would happen if we found 10 messages from someone in five minutes and we had not yet logged a message to them in the last hour Please would it then send 10 messages because we don't want to do that. We want to when getting messages are we going incrementally sending the API call and then checking for the next message like what would happen in the situation if we got five messages from someone is the first message we got from them in 24 hours. What would happen because the desired outcome is that it would send one message that represents that block of messages. We wouldn't want to send an interaction message to adio for every single one of those.
I'm surprised so Ann okay Bill's chat.
Is a major flaw. Anything we can do? Yeah okay.
Yeah like we like we.
Don'T.
Ideas puts there they just join ignore the emails we follow paper pairs.
Actually what would be the simplest implement I'm pretty sure will evolve this over time.
I think most of the companies that responsible making sure the money's flown too soon definitely care actually don't even have a backup. Why aggregate my dad wants to ip yeah.
All right. Create a task for it research it and scope it out and tell me what the how we'll implement this.
Picking skills communication majors. Yeah yeah they just they just don't.
That'S scary.
And it's like the rest of them discipline ability I feel who goes a little bit more we survive or something that might be.
I need a good name for my AI you can call it Jack for that I love my phone that way Perfect actually I want Archer. Why can't I have Archer this it.
One more story.
And Stroud continue.
That.
One there trying to entertain a letter okay shoot it pet pretty cool memory window it my assumption is an edge case of this is if we have to restart the demon the memory will actually it's fine because by in that situation it probably will have already made a successful API called Adio. So this often, very often generate commit messages for unstaged fonts. Show me the tasks that we have in their status. Now show me all of the tasks and their status for this project. Oh, why is that? Yes. Masking used Task master to show all of the tasks and their status and show a complexity map assessment of all the tasks. Show me the scope of tasks with the IDs 12, 13, 14, 16 and 21 because I thought we had already finished those. It also thought we had donated complexity reports. All right. Done pressure. It could mark those as done because they are done. Include make sure that all the subtasks that we've done have done. They're marked as done as well if we in fact have done them. I think we also did status 18. I think we also did task 18. Please check it. I haven't. We also done task 26. Please incrementally go through every task and see which ones we've already done because it seems like you're overlooked a lot of them. Ridiculous. All right. Create the subtasks for tasks 19, 20, 22. Haven't we already done 20 it so it's not that intuitive. This is enraging. Why didn't you catch this when I just asked you to sequentially go through all the tasks and identify which ones have been? I did. What could have I said differently to ensure this was done properly the first time I asked it Read through all of our JavaScript files and cross reference functionalities that have been listed as not completed in our list and see which ones have been completed. Don't just check task status, actually verify whether it's been implemented in the code base and mark tasks as done if the functionality exists. And for tasks that have been started, make sure they're at least marked as pending if they have not been completed. See how that goes. All right. Commit the current changes that have not been staged. It 1 Let me find a better way to make some many unfair tasks. I'm starting to figure out there has to be a veterinary. All right. Do a little bit more work than grab some food dress. That's three o'. Clock. What should we do next? See this call. Also there's a bunch of features that aren't necessary for launch. Let me go through and tell you which ones those are because they should be. They are not a part of us launching V1 they are. The heck do I find pending. Please provide me the list of all pending or not started tasks Mer did miss didn't we already do these tasks can be deprioritized and they're not necessary for launch 19 no, we need to do 1930. Please research both tasks and create subtasks. It's tough as I'm not sure 19 meter there's no easy way to see so that already has it use node Cron to schedule the main sync logic implement their he's going to notice that it already has subtasks. One thing you guys haven't seen is my little coding duck stuck at 40 degrees. It be cool if there was a service that would monitor monitor you working and basically point out things that would improve your work style, your workflow. I'm pretty sure it had to be pretty focused on specific areas of working, but it'd be neat to have someone watching how I'm using this and give me tips because I bet there's some obvious things that could be done differently. Even in terms of how I interact with the LLM I think I'm curious especially given there's a lot of things that like drive me crazy around like Claude code making the same mistakes over and over again to okay, what could I do differently to incorporate the corrections I make to have that incorporated into so it's persistent for this project but then also how to at a global level take some of the stuff and have it incorporated into how I do work. All right, so after I finish this task these tests I'll go get lunch it okay. My assumption for the Adio direct last interaction update is you already know the answer to this from our past research and the solution will need to be having an email associated contact and then forwarding the fact that there was communication to the email address that pipes to add you and these are exports as Studio set Siri 191 adjustment to the cron is I want it to run on computer start computer login and then understand the boundaries of let's say it is exited or fails for some reason will it auto restart or and or is that even possible? No, that's not great. And to clarify, I'm not saying that I want it to sync when it starts. I'm saying I want the demon to make sure I want the demon to start when the computer log when you the user logs into their account on the computer I want to auto launch it I don't want to manually run the file to start the demon because and when it when the and when the script is run for the first time it should sync so when you start the demon it should sync on initial running always. Yeah man. Yes. I'm curious because close has I think it's a plist file profile actually maybe the profile it add a task to accomplish the demon through something like how close does but this is unnecessary for the first version. This is a down the road kind of thing to make it more robust, including these instructions it.






