
Rails World Prep, Herb in Rails, Stacked PR Headaches and New Ruby Tooling
About this episode
This week, Chris, Andrew, and David dig into a packed mix of Rails news, developer tooling, and the increasingly complicated role AI is playing in everyday coding. They talk about Herb making its way into Rails, the realities of Rails upgrades and stacked PRs, new approaches to Git hosting and object storage, and how Rails is being evaluated in the age of AI agents. They also get into improvements coming to Action Text, Podia’s approach to “flavored” Markdown, the never-ending frustrations of HTML email, and why tools like ArchSpec and Rubydex could become especially useful as more code is generated by LLMs. Hit download now to hear more!
Links
- Chris Oliver X
- Andrew Mason Bluesky
- David Hill LinkedIn
- Judoscale- Remote Ruby listener gift
- Rails World-Sept 23-24, 2026, Austin, TX
- Add Herb as an HTML -aware ERB implementation #58552 (GitHub pull request)
- turbopuffer
- Agents on Rails: The LLM Benchmark Project (Rails Foundation)
- Agents on Rails : The First Benchmark Report
- Tiptap
- ArchSpec
- Rubydex
Honeybadger is an application health monitoring tool built by developers for developers.
Judoscale
Make your deployments bulletproof with autoscaling that just works.
Disclaimer: This post contains affiliate links. If you make a purchase, I may receive a commission at no extra cost to you.
Get every episode summarized
Each time Remote Ruby publishes, we email you a written briefing from the transcript — the topics, who appeared, and any specific claims, with the ad reads skipped.
Email me new episodesFree for 3 shows. No card needed.
Hosts & guests
Transcript ready
589 searchable segments. Every word is indexed and playable.
Full transcript
Remote Ruby — Rails World Prep, Herb in Rails, Stacked PR Headaches and New Ruby Tooling. Machine-transcribed; use the interactive transcript above to jump the player to any line.
RUMO RUBIE Yeah RUMO RUMO RUMO RUMO FAP in now, Chris, Andrew, David, holding down, talk, Ruby, talk, Web-O-Date, RUMO RUMO RUMO That's the play, Chris on the mic, that's the real ones, Andrew, keep it sharp, every deal done, David got the question to call the flow, RUMO RUMO RUMO RUMO Let the whole world know, RUMO RUMO RUMO RUMO That's the play Ruby and the city I'm back I'm back, Chris It's one of those weeks I'd rather not be back, I'd rather still be taking time off You'd rather still be sick, like violently ill than what you were last week I guess not maybe that, but not working? Yeah You know that? I can't believe how close Rails World is, it's gonna be here less than a month I think it will be a little bit more white Insane Yeah, check your flights, check your tickets, check your hotel rooms
Make sure you've got a hotel room, yeah I guess so Buzzsprout ever responded to us There you go, yeah, I forgot about that What's new? We could always just dive into the big piece of Rails news that the Herb Engine's getting merged into RailsMakes Yeah, I saw that That's super exciting I actually upgraded to Rails 8 too Last week, I think in production Because I wanted to use the Markdown export of action text And so then I was like, oh nice I can also use Herb now I believe there's still no Rails config thing You have to like directly set the ERB implementation on action view base or whatever But yeah, I think Mark goes working on a follow up PR to add the config in there But yeah, it's pretty exciting news I'm excited for eventually one day being able to play with that just out of the box
I believe he told me a long time ago Like I don't remember Joel Hawksley or somebody at GitHub has like run it against all of GitHub And a bunch of big companies and whatever have tested it out on large, large applications And it works And didn't seem like at this point Probably is pretty safe to swap out Because any weird edge case things have probably been knocked out And for us, we're not doing the strange ERB features We probably don't even know some weird things exist Like settings or whatever It's like we're just using whatever Rails configures for us and that's about it There are a few cases like in Hatchbox we have custom templates that run through ERB And that will be interesting because I can probably swap that out to just use Herb instead Because we have templates that we like need to render
And it's like might as well use Ruby to write the dynamic bits of it So I'll have to swap that out I hadn't thought about that until we were talking just now But I'm excited to see that I don't know that as a user upgrading you're not probably going to see anything new really It's not reaction view with the front end kind of fanciness But like that makes it easier What is being added things? I thought it weird Basically the ERB implementation is getting swapped over So using Herb to generate and process the ERB and stuff So not the extra fancy features on top that reaction view gives you Like it's the tooling underneath that powers all that That's a label for that cool fancy stuff Yeah And effectively it's making your ERB HTML aware So Rails can give you better errors now
When like you forgot a closing tag in your HTML ERB does not care, it just concatenating strings But Herb can do that for you so it can tell you that kind of stuff It'll also be pre-installed so you can run And I meant to ask Marco this But potentially that can also then run Herb Analyze And then that could just be added as a command to the CI That GitHub actions generates Because we've got RuboCop in there So presumably we could just add that as another step to the CI steps And then have it validate your HTML correctness and all that So as a user you're going to upgrade to Rails 8 too I don't think it's going to be the default You'll be able to opt in but it will be the next version Which maybe Rails 9 or 8-3 or something We haven't had a N.3 release of Rails for quite some time Now that I think about it
Yeah Was it 2.3 or something? So like as a user you're going to get some niceties But it's going to be a pretty subtle change Which is good and does do those nice improvements I guess But it's not going to be like a major workflow change for you at all But you will be able to drop in reaction view And you already have Herb there ready to go So I'm looking forward to it Yeah it'll be exciting I had run our full test suite for whatever reason And I found a bunch of deprecation messages So I opened a few tickets to like take care of them And when I was working on them like oh that thing that it's warning about isn't in this version yet So then I was like oh we can upgrade to Rails 8.1.3 And I got that all working And then it was like oh by the way you're loading 6.0 config defaults or whatever And I was like oh well I was using our nest of skill which is why I was working on this We talked to her nest a few weeks ago he told us about his upgrade Rails AI skill
So I was playing with it And I was like okay this is going great And I was like oh well we might as well go ahead and upgrade our defaults to 8 And then that's when things started breaking for some reason I get in that habit of just leaving them on 6 or whatever Because if you run that app update command it adds the new configs But like leaves them as whatever defaults So like you can start opting into the new things And eventually I guess if you opt into all of the defaults then you're ready to go or whatever But it is nice to be able to just say like let's get rid of all those upgrade initializers Because eventually they stack up to be quite a few And then you can just say hey use the Rails 8.1 or 8.2 defaults for everything Super nice But it's one of those things it's like just annoying because it's a process to migrate It's not something you can just like upgrade and then be done with it
It's like okay now we did this we make these changes so we deploy those Then we come back and we like iterate again and do the next one And then eventually after all that we can migrate it We have a similar thing with I'd like to switch from ASDF to me is in the back end on hatchbox But like we have all these applications that are already out there So we need to upgrade them and we can do a pretty seamless upgrade like the next deploy But if you have to say chin one of those is going to take the path of Ruby or the Rails Shim or whatever So we don't have like a dynamic way when you're in the shell to say hey use ASDF for this application And me is for that one so there's going to be a little bit of an annoyance there But I think if you have a side project server with 8 applications on it And you deploy one it can upgrade to me is during that deployment
The rest can stay on ASDF and then as you deploy those they're good to go But you know like I look at it and I'm like crap I don't know how all these old servers you know how often do people deploy some of these side projects They sit for years sometimes because they're running and they don't need an upgrade Or don't have time to upgrade it to the newest Rails or whatever So I don't want to force everybody to like redeploy their applications And then we also have some complexity of like what if a customer cancels then comes back three months later And re-subscribes I can't have just gotten rid of that old migration code And just said everything is on me is and now my code base is clean I can delete all the migration code It's one of those things that probably has to live in our code base forever which kind of sucks So I'm like for a minute you're like do we just live with the ASDF setup as is forever
So we don't have to maintain this like migration code forever But no I don't take so we need to upgrade to me is me is too good So I'm excited for that but I'm not excited for the migration You could technically have me's and ASDF installed if you only activate one of them Right, that's where you know we're using system D so we can set the path environment variable for each one For every process, for every crime job, for every background job That's not a problem The problem is that when you SSH in you're only going to have one activated when you load your Bash RC So like I'm not going to go do some crazy work around to handle cluster that's like mid migration But I think what we can do is like just email you and say hey we upgraded your latest deployment upgraded this application But you still have these seven other apps on that cluster that need migrating
And just kind of like notify you as you go and it can be like If there's only one app on the cluster then we don't need to notify you about it period But it's just that case of a little extra complexity there which is fine but I like my clean code Although I don't look at the code much anymore Ain't that that sure is Right? Especially now the stack PR has to become all the rage I haven't used them yet have you? Yeah, I've been helpful Yeah, they have been especially because if you use them on GitHub You can create the stack from GitHub If GitHub is up for a small call If GitHub is up, yes But the GitHub CLI has an extension you can install for stacks And it allows a lot of stuff but mainly it allows you to merge conflicts and rebase like the stack And what I will do is like I'll run GitHub stack rebase
And then when it fails I just copy the whole output and I paste the Declod and I say fix this So then I will walk away and I come back and it's like all right we're good to go And I just run GitHub stack submit and then it force pushes every PR back up So the downside is like sometimes you'll have all of a sudden like our CI will get flooded with like 10 You know runs for me and everyone's gonna have to wait but the other problem with the stacks And this is not like a problem with the stack per se is like in the beginning It's great right when you're first working on it is awesome I've got a stack of 10 PRs this is great it's perfect exactly what I want And then at some point during the code review process everything goes to And things are hard to control and you've got conflicts all over the place There's also the public How does that happen is it because like a code review catches something that needs to like Architecturally change and wine but then all the others depend on that
And that's one thing yeah Okay what else then I'm curious because I haven't really used them yet I just force pushed a main not always Yeah I feel that When your app breaks it in production you want to quickly understand and fix it Not sift through the logs for the next hour That's where honey badger comes in honey badger notifies you of errors outages and performance issues as they occur And helps you respond instantly when your systems go down When you need to dig deeper honey badgers advanced query engine helps you reach into your logs And grab just the information you need with the air tracking performance and uptime monitoring Log management and support for over 10 languages honey badger is the best tool to gain real time insights In your applications health and performance best of all it's free to get started and set up takes less than five minutes Be sure to bookmark honey badger.io that's www honey badger.io I think one of the more difficult parts is in code review when like I said like me and my co-worker
In the past week have both had a 10 PR stack each And the problem in code review is what happens is as you're reviewing the stack when you start the bottom right which I think makes sense right you start the bottom and you start working your way at the stack and you're like okay well I found this weird thing in the first PR like this is broken it doesn't work or it's not taking into account this thing and then the author's like oh well I address that five PRs up the stack so the problem is that you can't get the context of the entire change of the stack at the bottom right. So that's the change of the stack at once which would almost be helpful. You have to go through it. It's kind of surprising that feels like something that would be surfaced while they're doing it and testing it internally at GitHub or whatever like I assume their whole team's been using that for some time just to get an idea of the value of it. So it seems like yeah is that maybe there's going to be like a summary or sort of like a review the whole thing at once option in the future because really like I guess that makes sense you as the person writing the code the iterations makes sense to add to the stack of like oh we forgot about this case let me go fix that but I've already done all this other work so I have to tack it on at the end.
But as a reviewer you don't care you just want to look at the whole thing at once so I wonder if that flow will change a little bit. It would be nice I can imagine to be kind of difficult just because like you have to then basically. Do like the finish dip of all of them because like if you like add to do the stub method here and then in the next part you fill it out but it has bug so the next part you fix those edge cases or whatever. I can imagine to be a little bit difficult to figure out like okay what's the actual final I guess it's just the final branch you want to see the entire final branch diff against Maine. Yeah because they can apply they should be able to apply those diffs real quick together speaking of get Toby just vibe coated wall get over the weekend. Alright we have a few hours on Saturday so I'm ready to move. I don't know what that is. Don't forget him. So somebody posted like a blog post about was it from cursor about creating like a scalable modern get hosting service and one of the big changes that has happened is like S3 actually now has functionality as if whatever 2024 that allows you to do.
Like a right what's the wall stand for like on postgres right access log or something. Let's go that right append log because it's like here's all the changes and they're just a log of those and it's kind of like a read only thing and you just shovel. The changes into storage somewhere so the benefit of the changes to like S3 recently as you write and you always get consistent reads back and then you can do like if none match or whatever so that writing stuff can say like hey I'm going to be the next block which might be the next incremental ID and it's like well there is no ID number 1000 so I can write it but somebody else tried to write 1000 at the same time. And so it fails because that was already written so they know to go read submit as one thousand one or whatever so you never end up with like over written history like that and stuff.
So like some of the changes to S3 now make it super capable of writing a bit of a distributed system kind of thing to S3 and kind of using more modern techniques for all that I didn't finish reading the whole thing keep getting distracted while I was trying to do it but it's like a cool idea and I'm sure there's like plenty of edge cases and complexity to it but it seems like a common pattern now because like turbo puffer uses that if you see turbo puffer now but maybe think of a joke that I'm going to write in the chat. No boy if we just sigh really loud turbo puffer is a search engine that's built on top of S3 which is fascinating so they have like memory or SSD cash in front of S3 so you can do in Sane scale very efficient search and I can't remember if they came out of Shopify Simon skilled in I can't remember exactly is his last name I know he worked at Shopify in the past and did some awesome stuff and so like yeah I think cursor was one of their big first clients or whatever and now they kind of power search for everything
and the rapid cognition notion elacian ramp super human linear clay tell us grammarly it's neat because it's very cost effective because you're using S3 and you know it can still be expensive don't keep it wrong but it is not like running a postgres database or elastic search and all of that you're using object storage to store all this stuff but then make it searchable which can be whatever I forget they have something maximum documents unlimited seen one trillion documents at three petabytes those are the kind of numbers that they're capable of indexing and searching with turbo puffer it's wild that is insane and I think it can be like pretty affordable to you for you as a small business as well look they've even got a $7 a month plan or nice minimum $16 a month for the launch plan not to take us back but I remembered a new issue with the Geb stack. Uh oh it's that in the UI sometimes when you flip between pieces of the stack some of them don't update correctly and I assume that's like a caching thing
but like I'll be on one PR and it's like the whole stack is green and ready to go and then I'll switch to another item in the stack of like oh blocking is merged because of like all these issues and I'm like mm hmm and then I just found a new one which is when apparently I have some C i checks that were cute and hadn't run yet I thought it looked to me like they were all green on the base PR so I hit merge and it merged the first one in the stack and it did not merge the second one in the stack. Because the C i checks were still running and I'm like okay cool cool cool cool cool cool cool. All right I'm done with the best. Somebody was talking about that on X I saw earlier today and was like you know ever since they switched to react why do I have to like hard refresh the page to see the correct state of things because like the number of pull requests after I close one it still cash is the wrong number or whatever it's not going to be a good deal. Whatever and wasn't the whole point of switching to react so that the state was updated automatically and I didn't have to hard refresh the page.
You still got to build it right to do that. Yes but shouldn't they have already built that isn't that sort of a feature number one. Who knows their feature number one right now is fixing their reliability that's theoretically free because you just update the count to decrement by one when you merge your close something come on. Yeah I know it's not that easy because it takes a solid 30 seconds for it to merge like a to stack PR then it does like a normal PR so interesting. I don't know what's going on back there's more operations to be done but. This is fascinating stuff because it's like obviously the stuff has to be stored in. Something like object storage but like do they have to pull it down to. An EC2 disk for a second then merge it and push it back up or whatever like love to know more of those details of what actually happens there because maybe they spin up a container real quick to do that and then it's.
Got to spin up several containers to do each one of those steps and then you get your final result or whatever I don't know we just like don't have the same. Massive distributed systems problems building our day to day rails apps like you would at that kind of insane scale so we don't even like see or think about most of those problems I bet. Who knows we start talking about containers and stuff I'm like oh god. Yeah we don't want to even think about it it's nice if we don't have to yeah. Are you tired of babysitting your job cues let us do it for you judo scale monitors and auto scales your job cues so you can stop babysitting and get back to coding. We support sidekick solid cue good job and just about every other job back end in Ruby land and of course we auto scale your web services to judo scale scales up your apps faster than any other auto scalar so request timeouts and backed up job cues are mitigated before they become a problem judo scale has a free plan you can use forever so there's
literally no risk whether you're on her Roku AWS render or any other cloud platform visit judo scale dot com and get your job cues under control. What else is new and in Ruby rails has been going hard on their agents on rails thing yeah it's kind of cool to see the different costs and stuff because like it's strange that opus is still better than fable even though theoretically it's smarter than opus and it's like not smarter apparently I don't know. Don't have an idea behind the scenes of how any of that model training stuff works but yeah it's kind of cool to see that and then to see like how cheap some of them are compared to others. I don't know if it helps convince anybody to use rails in the first place most of the cheap ones are at the bottom. Yeah to be fair but I don't know what this is all right thing is that everyone seems to be talking about this week everybody was saying.
5.6 sold 52 cents compared to opus at $2 basically and it's a little less accurate 84% compared to 92% but is that accuracy worth 4 times the cost for you maybe not. I think that's why a lot of people have started they'll like plan with one of these bigger models like fabler opus and then they'll send the plan to one of these cheaper models like in GPT. Yeah it makes a lot of sense except for like some of the nuance to that is like okay can the model do a better job if it did the planning itself so it has that information is context for when it executes or is that actually not. Necessary or whatever it's like as a human you doing the planning then the execution the planning context and all the little decisions you made along the way does help but does that matter to an LLM I don't know maybe it does maybe doesn't well if the plan includes stuff that you considered
into side not to then maybe yeah but does it you know sometimes they do but like if you summarize things maybe and don't explicitly tell it to write down those things then you might not benefit from it but it is a good idea to probably do that and say hey include your reasoning in the summary because I'm going to take your competitor and I'm going to undercut you yeah yeah I mean I'd even heard of at some point someone our team was talking about using Fable for planning and then telling it to delegate the steps to cheaper quad models yeah yeah Yeah I think that's pretty common is like have Fable do better planning or whatever and then run it actually with opus or something something and that makes sense. I'm curious to see like, what's the comparisons between asking
opus to play in something and fail to play in it? How much better is that versus the other? It's like, have people just guess and said that supposedly this is a smarter model. So then they just like take that for granted and haven't actually compared the outputs of those too. I don't know. Well, I guess you'd use e-vals, right? You would set up a set of, I guess that's probably what they're doing in Rails because you're saying 58 of 63 runs solved. So I assume they're like e-vowing like what the output of these runs are against like, okay, well, like a set of e-vals is like, okay, well, did it do this? Did it do it like this? Did it add this? Where did it put this? Things like that. Yeah, I didn't look into the, what's it called, lemma? The agents on Rails e-vals. I haven't looked into what exactly it does, but evil Martians has been doing some good work. I didn't do it briefly. I don't think anything
really stood out to me because I was probably looking at it on my phone, but it was interesting to read it. Yeah, it's neat. It's a good move from the foundation to spend time on that. Yeah, and it kind of goes with this talk that I renegade, which is why I'm not surprised that evil Martians has been helping with it where she was like, I remember who the original it's on the tip of my tongue. Someone asked like every single popular model or like every single model they had access to like to solve a problem with code and all of the test cases, he's like not a single one ever reached for Ruby. She was kind of talking about how that's a problem for Ruby in this new AI age. If the models are never reaching for it, but I think this is kind of Rails is a template. Yeah, the models can do these things really well. It's an interesting thing to think about too there because I guess two, one of the reasons I started in Python was like
Ubuntu has Python pre-installed and macOS has had Ruby pre-installed, but it's fairly out of date. And I think it's getting removed from being built into macOS at the future. So like the models are going to have to naturally prefer Python or bash or whatever is like installed with your operating system or what they're built in if they're written with JavaScript or something. So like we may just for the sake of Ruby itself maybe add a disadvantage because it's not available everywhere out of the box. And that's kind of a bummer to think about and considered that before. So I'm on macOS 27 beta build and the user Ruby is 2.6.10. 22.04 12 revision. Woohoo! That's rough. Yeah, and it's like probably some legacy stuff they still have it there,
but I remember hearing that it's going to be completely removed from macOS at some point. So I don't know. I don't know. They necessarily need to install any of these languages by default unless the system needs it. Yeah, it's pretty common like on Ubuntu a lot of the DUIs and other things are written like in Python with a GDK front end or something. So it's probably something like that in macOS that is the reason why they were installed in the past. But yeah, it's like not everything is native. Although these days they probably could convert it all to native compiled applications and Swift or something with a big enough cloud for you know budget. Definitely not using their bum ass cloud model. I'll tell you that. Yeah, they got a they're like well, we have to use Siri to convert it all. Yeah, I mean which has gotten good, but I've tried to run the FM command because that's the
command to get the foundation models. You have not agreed to the Apple foundation model CLI legal news in terms. Okay, cool. Doesn't tell me how. Oh wait, there it does. pseudo damn. You know, it's funny when it was it maybe two months ago or something the Alexa plus stuff started dropping. We have a few lexes because when we're holding the baby or whatever and it's like my hands are full. I need to turn the lights off and I'm feeding him sitting in the chair like I'm not getting up and waking him up. So we started getting a few lexes in the rooms just for that reason, which is kind of nice. But the other day like my son Jackson was like Alexa turned off mommy's light. In the past, it's had to be extremely perfect. It would be like there is no device named mommy's light. And you would have to say it exactly as it's named and labeled like on the
thing. But he said it one time and it just worked. And I was like, wait a minute, what? It did the right light in the right room and everything. And I was like dang, like that's awesome because he could barely pronounce it correctly. And and half the time he was like sort of fumbling his words. And so it didn't work. But that time I was like, whoa, like it didn't say Brooks light or anything. And somehow it figured out on the Alexa account, obviously like the family is profiles are in there and whatever. But it figured it out. And I was like, okay, they actually did change some stuff here. And this is quite an upgrade from where it was. And then hilariously enough, I'm like, do it again the next night and the next night. And it just like we don't have a device named mommy's light. And I was like, wait a minute, what are you talking about? It worked yesterday. And so like it has been random. Like actually when I just said it out loud, it asked me
that in my office here when it overheard me explaining this. But it's weird because it's not deterministic. It's not consistent. There's still compute happening every single time to determine who is mommy. What is that? This doesn't match anything. Maybe we need to look at the profiles and see if there's someone named mommy. No, but there's a spouse on here that's not the speaker or whatever. There's clearly stuff going on behind the scenes that didn't exist before. But it's still very far from being a great system. But it's getting there. I was just wildly impressed that first time that it happened. I was like, whoa. But it worked once. Yeah. That's a fairly complicated thing for it to be doing as opposed to just the usual turn-off, very specific device name. Meanwhile, Apple series over here, like I set all my home pods and only responded me. And then I had
family over. And my mom goes, hey, lady name. I can hear her talking somewhere. Hey, lady name. Do this thing. And I was like, that's not supposed to work. That's not supposed to work. Yeah, it's definitely not great yet. But you can tell it's getting there. What was the other? I did a PR to Rails the other day. I have one outstanding as well. But I can't remember what I got merged the other day. The one I have outstanding is the tweak I've wanted to make to the Rails or the active record errors for the longest time, which is when you have four databases and you go to deploy to parochu or something, it's, hey, you don't have a database or we can't connect to your database. And you're like, wait, I have a primary database. What are you talking about? And it's referring to one of the other ones. So I added the name in there from the
configuration to say like your queue database and put queue in quotes. So hopefully you realize, oh, I should double check my database, you know, and see what that is or it gives you enough information to realize like, okay, that is my, I'm just missing that environment variable or whatever. But I lean brought up a great point of like, this is more complicated than it sounds because technically if it fails, you should also include the like shard and and roll because it could be like a reading or writing role, but it also could be a shard and blah, blah, blah. And I was like, yeah, I mean, that's fair. Like if we want to do a fully perfect complete solution for this, we should add that information, but also like beginners are not going to be sharding or setting up read, write roles very commonly. And if they do like even just having the like name of the database is going to be helpful enough to point them in the right direction for that, I also haven't thought
about that of you know, have queue database URL, but maybe there are additional environment variables so you could say like reading queue database URL or queue reading database URL. I'm not sure if like the roles or shards have environment variables, you can specify, but maybe if you're doing something that complex anyway as you just want to slap it into your YAML and hard code that because you don't want people to be messing with that, that's never going to change most likely. Or you want to be very deliberate when you do so committing that to your version control would make the most sense, but I'm hoping the bag gets merged. It's kind of just hanging in limbo temporarily as we figure out like how correct or complete does this need to be. I don't think it needs to be 100% detailed about every little thing there. Just want to make it more of a hint that it's useful
for debugging for beginners, but I can see a good argument there for it being best if it was complete because then it really is helpful even in the advanced cases when maybe you're setting that up for the very first time, but yeah, that'll be nice to get to get into Rails' fingers crossed. I think I know how you can get it hold on, I'm testing live because it wouldn't mean, I don't know about environment variable, but so if you do active record based dot configurations dot configs for end-vename and past at the end, it will give you more details about your connected databases. Yeah, but this is before they're connected so that and this is inside the error too. So it rescues and it'll rescue from a Postgres connection error and then re-raise it as an active record database connection error. So it didn't even have the database. It had the config, the user name
and whatever, but it was like the key was missing from the hash because it just had the value of the configuration for it. So you didn't even know what the connection name was supposed to be. So I had to extend a few things to add that, but it worked. The other thing, I don't remember, I guess I wasn't here last week to talk about it, but I made a PR last week that got approved, it hasn't been merged yet, but one of the things I was doing with Action Text the other day was trying to render it in two different contexts in our support for Hatchbox, like our documentation. I have an admin area that I want to render our docs and then the public version of the docs I want to render separately, but when I have a doc that links to another doc, the Action Text attachment, I can have it render a partial, but I don't actually know the context with which I'm
rendering in. I could also be rendering in TurboFrame, for example, and I might want to set a attribute to say like data TurboFrame is top. So what I ended up doing was looking at the source code for how it renders your Action Text content, and surely I can pass locals across to the attachments through this chain. It already does that for one level of it because when an image attachment gets rendered, there's like an in-gallery local assignment that is true or false, and it just tells the render how to render it because it will either have apparent gallery like display or not, and so those individual images need to know that context to render those properly. Now I was like, surely we could just do this pretty quickly. So I found like if you modify the content helper, you can do that pretty easily. I just had to like add a local's argument and then
forward it along to another two method calls or whatever, and that was about it, which was sweet. But then I had the idea as I was doing it that I could probably use render in instead. So I forgot about that, made my PR and didn't refactor it, then Sean Doyle was like, you could probably do this with render in. And I was like, you totally can. And I forgot that I meant to do that. And so I was just at first like trying to see if it was possible. So then I went back and refactor action text content and rich text objects to basically forward render in across to the content object and then have that do the the actual rendering. And thank goodness for AI because there was a couple of things in there that were very confusing. If you use render to string in that context, they would end up rendering like the parent application layout because it wasn't
inside of a controller in that case. So it just didn't know that I should skip the layout in that case or whatever. And I was like, well, that's good because I would have spent a lot of time in the weeds trying to figure this out. And it was able to catch that really quickly and fix it for me. But that got approved by Jorge and Sean and stuff. So I think it should get merged at some point soon. Hopefully before rails a two. And then yeah, you'll be able to say render like at post-body just like normal, but you can then pass in locals as your arguments there. And it will just work which is sweet. So that's going to be really handy because like in my case, the admin, I want the referenced docs to use like the admin route. So I wanted to like change the URL in that case or like maybe you want to just disable links in certain situations. You can do that now. And the only other
way of doing it in the past would have been like an instance variable you set right before that never needs to be used for anything else afterwards. Or you could use current attributes, I guess. But it was like just messy. It's like setting context and then throwing it away right away didn't seem clean. So I'm really happy with how that turned out. But it's like one of those examples of man, action text hasn't gotten enough love over the years. And I'm glad to see 37 signals needs it for all their products and they're putting in a lot of time, especially with Lexi. So now if we can get the back end also polished up now it's got markdown exports, it's got context now, all kinds of things that really make it powerful. It's going to be in a really good spot. I just wish we had this five years ago instead. So I have been doing some markdown stuff too because we use tip tap for our rich content, Eporia. And now it's pretty much everywhere, like comments and
blog posts and it's all over the place now. And we were like, okay, well, we want to add this ability to like not only upload markdown into it, but also be able to pull markdown out of it. And it was like, okay, well, the base version of that's pretty easy. And I was able to add that. And then it was like, okay, but now we have the non-base version because with tip tap, you can support all these different elements like buttons and sections and columns and all this different stuff. And it was like, okay, well, for the base markdown, like what we have works like with this node visitor thing that I wrote where it's like, okay, I can take in markdown, I can output markdown. Well, as long as it's actual markdown, right? But now we're like, hey, what if we need to edit an existing thing that has all these other elements in it? And my really smart co-worker, Diego, came up with this idea called Podia flavored markdown, which is markdown with some sprinkles
of like almost an XML type of formatting. So like, he gave me this document to kind of review to look at what his plan was. So for like a button, it'd be like an almost like an XML tag, it would have button, they would have all the different attributes that are supported via tip tap on that button, like the different adders, like, you know, alignment and source and stuff like that. And I was like, well, let's like make sure that it's very, very clear. Let's just pre-pend everything with Podia button. Like, so with Podia, so like Podia colon button element. Right. And I think he just merged that in this morning. It's looking pretty slick. So now in theory, you can you can upload and download from Podia and markdown. It's not a feature in the app that people can use, but it's something we're working on the back edge. It's like an internal thing. Yeah. That's cool. Because I'm pretty sure that like markdown spec allows HTML in it. And it's supposed to like, if you detect it, just like output that raw, but like, yeah, it's perfect. In that case, to have like a pre-processor
for that so that you can swap it out. And you don't have to invent some sort of, I don't know, like a square bracket circle bracket or bread the seed blah blah blah, like some weird markdown essence syntax. Like you can just straight up write HTML or XML that looks like that it is easy for no-cougierry or something to parse and swap out and whatever. That's cool. Yeah. Because I was thinking you should similar it. Do you guys use that for sending emails to? Is there like a special processor for that that's like, well, for HTML in order to center something we might actually have to wrap it in a fricking table or something. And that kind of thing does it do some fancy stuff? Is that at least thinking about Lexi for that today? It's like, it'd be cool to be able to take even Lexi CSS isn't ready to go because it should be in line.
It's got CSS variables and whatever. So it's not something I can totally do yet, but like a cloud session later probably can do that pretty quick. But that was something that has come to mind because I know Jason had used, I forget the name of it, but it was like an email specific rich text editor tool for like job board. And I don't remember what that one is called now. I can picture the website, but it's got me curious who's doing rich text and then converting it also to work cleanly in email. So we still use tip tab for our email stuff, which we have a decent amount of really cool email features if anyone wants to sign up at podium.com. But it uses a slightly different engine because like you said, it's basically just like special rules for things. And it allows for certain things in the emails with support, but it does it in the way that it needs to be
formatted for the email. Yeah. And I remember trying to change that at one point. And like, I think it was actually like a limitation of like the way the browsers render the emails, but they had some small feature requests like, can we do, I don't know if it's a diamond or size or something related to some small thing on emails? And I was like, yeah, that shouldn't be a problem. Then like five days later, I was like, I can't do this. Like, I don't know what to tell you. I can't center this element, like no matter what I do. I've found what Jason used redactor. Yeah, that sounds familiar. Company called in Paravi. It's kind of like tip tab. They have classic UI, minimal UI, AI commands, AI assistant, annotations review, all these different versions of your editor, but then they have this email editor option. And you can call get email or get content. And then it will pull out whatever for that. So I'm assuming it extracts things as like
inline CSS. We could probably extend action text, rich text or content or whatever to have a two email method. And then, you know, have that extract everything out. I should go double check. I assume, and I'm almost certain there are already on load hooks for action text content and stuff. So that makes it really easy for you to hop in and extend that without doing anything fancy. Yeah, but then everyone runs pre-mailer right at the very end of that whole process, which can lead to some really frustrating problems if you're not careful. So like, I implemented this. Why is it not in the final output? It's like, oh, pre-mailer was like a blank. I haven't used that in a long time. And I'm really aiming for like as plain text looking emails as possible. So there's just a few things where I'm like, look, if I embed an image that happens to be a screenshot from my studio display and it is captured at like a stupidly large
resolution, when you put this in the email, just please either like resize it just for emails or set a maximum width or something like just keep it reasonable because that's something that like, if I drop it into lexical or lexie, it's probably going to render fine on the browser because lexies built in styles are going to handle that. But I'm not going to have access to that in email. And maybe there's also just a simple like have clogged, go through this. And it's going to know all the edge cases because it's got access to the internet better than my brain can handle. But like, here, build me a very simple style sheet that we can use for emails that looks like a human wrote it by hand. But I can put it in this rich text editor in the browser, queue up the email, like I would with a newsletter service and then do your minimal formatting. But include isn't enough of this CSS to make that look like a human wrote it, but also doesn't go crazy if
I have a weird image or something going on in there or like just make sure tables render properly or whatever. I don't know. There's just so many stupid freaking rules about emails, CSS, and I get it. But it's 2026. I wish we could use some modern stuff. You can't. There's like a version of can I use for email? Yeah. And I don't want to reference that. I do sometimes, but I would rather the LM go figure those things out than me. That's a perfect use of the LM's. This is something I only work on very rarely. I do not want to have to become an expert on this for two days and then forget all this information and then learn it again in nine months when I need to go fix something. Yeah. Take care. Here's the thing. Yesterday I took a markdown spec document and I gave it to Claude and I was like, okay, we are going to implement a piece of the spec. So I want you to go
through create a plan and give me that plan. And when I was looking at the plan, I was like something seems off between what this is saying and what was in the spec. So then I gave the plan to chat. Some of these things are wrong. It made this mistake. It said that this thing can do this and this thing can't do this, but that thing can. And I was like, all right. So I gave the feedback I got Claude and you're like, oh, you're absolutely right. And I was like, oh my god. Yeah. Yeah. It's funny to see people getting so angry about it. And they're like, I'm literally canceling my anthropic subscription because I can't stand how Claude talks. It's so funny. Yeah. They did add a concise mode into it recently, which I think has helped a bit. But yeah. I was just listening to somebody talking about there's some sort of standard of writing that's like for airline or airplane mechanics or something. And it's just very terse. And you can like basically tell it to use that. And it's just very, very, very
terse, which is perfect. Because yeah, my god. Sometimes it's like, this is why I don't want to ever read a freaking AI summarized feature request or pull request or email or blog post or whatever. Because it's just full of it sort of sounds like it makes sense. But the more you read it, you're like, this is just weird, jumbly words. Just get to the point. Please for the love of god. Yeah. And your ADHD co-workers will like glaze over like the first. And we had a debate, like a small debate at podium this week because there is some new feature in linear where if content was uploaded by MCP, which I used to see alive. But if you're using the linear MCP, it'll be like author name via MCP or something like that. And I was like, that makes sense to add for like a programming product. But if I saw that in like a product I'm paying for and like someone replies to me, it's like via AI, I'm gonna be pissed off. But I feel like
in the programming sense, I was like, that makes a lot of sense because when I read this and I'm like, what the hell is this guy talking about? I know that AI wrote this and can be like, you know, can discount it or I don't know to do whatever you want to do at that point. But it's interesting. Conversation. Yeah. Like do you want to know that AI wrote something or do you not? Sometimes it's getting good enough where it's hard to tell. But a lot of times when you're interacting with it on technical things, it's very easy to tell. Yeah. I have a skill called, I have ADHD or something like that, which is supposed to like change the way the output style works. And on Opus 5, it doesn't really give a crap. You know what Opus 5 really doesn't give a crap about the first line of my clawed MD file that says, do not add code comments. It doesn't give a, it doesn't have a care in the world about that. Do you know why? Rose in my comments. Because it makes money off those tokens. I know. And you know what it also makes money off of me then having to switch models and be like,
bro, remove all these code comments or evaluate whether they're useful or not. If they're useful, like trim them down. If they're not, get rid of them. And it's like, oh, I think they're all useful. So I'll just clean them all. But I'm like, no, no, no, that's something. Let me add some more. Yeah, it's not what I want. So now before every PR I have to go in and like remove all these freaking comments, start piss me off. Yeah. Maybe that's my next product. And just a bot that when you submit a pull request, we just strip out all the comments, make a new commit. Dude, at this point, I would probably install it. I bet I could write a little CLI to do that or something that started to really piss me off. You got to pay for my tool. You got to pay for my service because we could totally use a prism or something to do it. But you got to pay for my tool. Hey, did you see Arch spec? There's one other thing I wanted to talk about. Kormann, Paulino released it and it kind of analyzes. Does static analysis of your application and then
tries to do like architecture checks? So when an LLM does something weird, like references helper module from inside your model, it's like, that's a violation. So it's kind of a linter for architecture styles. And so you could have it rails, vanilla rails. So for example, the vanilla rails ones is no service objects. They got layered in the hexagonal modular monolith. A whole bunch of different like architecture options. So you can kind of set some rules and boundaries for checking the way that your models talk to services or whatnot. And that way it can give a little bit of structure and guidance on that for LLMs to follow with their generated code because they're just looking at whatever patterns you've currently got, which may or may not be good. Yeah, that's the thing. Some patterns I'm like,
yeah. So this is a nice way. For example, like some of the custom stuff you can do in here, he shows like models cannot use controllers. Controllers can only use models and services. Services cannot call render redirect to premium session because services do not own the HTTP response. Models cannot call find by SQL receiver active record base. Services cannot instantiate and invoke. That's a good one or like an interesting one for that example. Records have to all be descendants of application record, which is interesting. Or no, that's a component records is your component name and it's like find anything that's a descendant of the application record. It's really cool. I ran it because I was curious. Am I following the Rails architecture or the Vanilla Rails architecture because I'm trying to. So I ran it and passed and passed on the
stricter like Vanilla Rails one. I was like, yay. I break out a little bit into custom folders, though, that I'm sure it doesn't. Doesn't have rules for. So like the layered one has app services folder. For me, I have app clients for API clients and I have integrations, which are like the layer above the API clients that interact with like GitHub, but knows. Here's what the application should ask for. Like give me all the repositories for this. Okay. I'll go ask the client to then grab every page and let it handle the page nation or whatever and they kind of have their boundaries there. But I can then go and set up my own rules and stuff to say clients should never interact with models or controllers or helpers or anything they should be independent. My integrations should be able to interact with clients, but maybe not models or whatever. It's a cool, really cool idea. And I think UFUK and Shabie mentioned like the static analysis isn't actually able to do things
like the dynamic constant lookup and stuff obviously because it's not executing the Ruby code. It's doing static analysis so it's going to get as best as it can. But then Carmine just recently refactored it to use Ruby Dex, which is another one of the tools that Shopify has been working on. Actually, let me paste a link here and our notes for Arch spec and Ruby Dex. Ruby Dex is a high-performance static analysis toolkit for Ruby. Goal is to be a solid foundation to power a variety of tools such as type checkers, linters, language servers and more. So it's pretty awesome. And he was also able to get it refactored to use that in very short amount of time. But I think that'll make it a lot more accurate. And it's good tooling that Carmine shouldn't have to build himself to do the static analysis. He totally could. But if somebody like Shopify is going to
do it, they're going to do it as close to the bare metal, if you will, for handling every single Ruby edge case and weirdness that they can because they're also working on the language itself. And they probably have the best knowledge of all those edge cases and details and stuff. So it's fun to see this. So now if you ever want to go build your own, you got Ruby Dex, you got all kinds of foundational things, Prism and whatnot. To go build out your tools that you might want to give, you could run one of these and say no comments. You could probably add that to your arch spec and be like, yo, Claude, not a damn comment in sight, please. Yeah. Please. So anyways, I got to get out of here. Yeah. Go double check your hotel. Your I did. Delay check my hotel because it's real.
It's a good thing. And I got to see him this weekend. So I got to double check on that. jealous. Is he coming to a reals world? Yes, because we're splitting a hotel room. So he better be. Yes. The heck yeah, I've been seeing him in a long time. Yeah. Or should I give him the old hello text? I just spent three days with him. And then he has the audacity the morning before we're about to leave for the Northroom of the Grand Canyon. He's like, our wake up call on Sunday is going to be 2 30. And I was like, 2 30. I was like, you never told me 2 30. He's like, I know it did. And I was like, no, I know you didn't because I would have reacted this exact same way. What do you mean? 2 30? That is early. Cheers. All right. All right. Until next time. We'll see you guys later. They've already got the placeholder YouTube livestream for the Rails World opening keynote on a YouTube like a month early. They're ready. They're ready. So ready. I'm ready. My body is ready.
More episodes
More from Remote Ruby

MCP Implementations and Rails World Preparations
Remote Ruby

Ernesto Tagwerker
Remote Ruby

Shipping Podia’s New Shop, AI Code Woes, and a Major Rails libvips CVE
Remote Ruby

SF Ruby 2026 with Irina and Vladimir
Remote Ruby