AI Dev Tools

AI Dev Tools: OtakuShelf's Dry Run is a Revelation

Forget the hype. AI-powered dev tools are finally giving us the safety net we've craved. OtakuShelf's story is a masterclass in building with confidence, not fear.

Developer reviewing code changes on a laptop screen, with abstract AI interface elements visible.

Key Takeaways

  • AI dev tools can provide crucial 'dry-run' capabilities, allowing developers to preview code generation changes without modifying their live project.
  • Tools like `validate_jdl` and AI-driven previews ensure proposed code changes are syntactically correct and logically sound before implementation.
  • AI's ability to read existing project context prevents accidental overwrites and ensures relationships between entities are correctly managed.
  • The validate → dry-run → apply workflow significantly reduces development anxiety and the risk of costly errors.
  • AI is emerging as a fundamental platform shift, augmenting developer capabilities rather than replacing them.

Did you know that a single misplaced comma in your code generation script can ripple through your entire project, causing hours of debugging agony? Yeah, me neither. Or at least, I didn’t until I saw how Sam, our intrepid developer at OtakuShelf, elegantly sidestepped that exact pitfall with a bit of AI-assisted foresight. This isn’t just about adding anime to a manga app; it’s about a fundamental shift in how we build software, a platform transition that’s happening right under our noses, and frankly, it’s exhilarating.

Here’s the scenario: OtakuShelf is chugging along, successfully modeling manga. Now, Sam wants to bolt on the anime side—think new entities like Anime, Season, and Episode—all wired into the existing Franchise structure. Easy, right? Well, not so fast. This isn’t some playground project; it’s live, with real data and a model Sam actually cares about. Blindly running a code generator here would be like playing Jenga with a skyscraper. Disaster waiting to happen.

So, Sam does something smart. Something that, looking back, feels so obvious it’s almost insulting we didn’t all figure it out sooner. They slow down. They preview. They ask the AI to validate the proposed changes before a single byte hits the actual project files.

The Preview That Saved an Afternoon (and Possibly a Career)

Sam doesn’t just throw a prompt at the AI and hope for the best. No, they sketch out the desired structure first: an Anime entity (title, studio) linked to a Franchise, a Season under that anime, and an Episode under the season. Then, they ask the AI, specifically the validate_jdl tool, to run a diagnostic. This tool is neat—it does a quick local lint to ensure the JDL (JHipster Domain Language, for the uninitiated) is even syntactically correct. But here’s the kicker: it then generates the entire proposed project structure in a throwaway directory. Think of it like a sandboxed version of your project, where the AI can go wild without breaking your actual masterpiece. It reports any errors, and importantly, it doesn’t touch your real files. When it comes back clean, Sam knows the idea is sound.

But validation is just the first step. The real magic happens when Sam asks for a preview of the changes. And here’s where we need to pause, because this is a crucial distinction, especially for those of us who’ve been burned by JHipster’s historical quirks. Sam says:

In /Users/sam/projects/otakushelf, show me what adding the anime entities and their relationships would change — don’t write anything yet.

Now, here’s the part that makes seasoned JHipster users—myself included—twitch. In JHipster 9, the --dry-run flag, while helpful, still writes files. It only prints the conflicts. So, you can’t actually trust it to keep your project pristine. The AI, however, sidesteps this entirely. It calls its apply tool with dryRun: true, but it’s an altogether more honest kind of dry run. It spins up a temporary directory, copies your project’s configuration and existing entities over for fidelity, generates there, lists exactly what would change, and then, poof, discards the temporary directory. Your real project sees absolutely zero writes. Sam can then meticulously review the proposed file changes—new entity sources, updated database migration scripts, even UI components—nod, and only then will they drop the dryRun flag for the actual application.

This is the rhythm Sam settles into: validate → dry-run → apply. It’s a few extra seconds, but it eradicates the adrenaline and the stomach-clenching anxiety that used to accompany any significant code generation. It’s like having a co-pilot who checks your flight plan, simulates the flight in a simulator, and then lets you take the controls.

Working with the Real Model, Not a Ghost

There’s another, quieter genius at play here. When Sam says, “link Anime to Franchise,” the AI doesn’t just make a wild guess about what Franchise looks like. It interrogates your project’s existing entities via a resource like jhipster://project/entities. So, it knows Franchise already exists with its title, synopsis, status, and startYear. It then adds the relationship without overwriting or accidentally trimming those existing fields. It’s working from the actual, live model of your project, not from some fuzzy memory of a previous conversation. This is the difference between a carpenter building a cabinet with precise blueprints and one building it by remembering what the last cabinet looked like.

For this particular batch—adding three new entities and their complex relationships—Sam wisely lets the AI compose a single import_jdl call. Why separate calls when the entities and their connections are inherently linked? This results in one generator run, and crucially, one diff to review. (And for those one-off entity additions? There’s a handy add_entity tool that builds the JDL from a plain description. Smart!) The generated JDL looked like this:

entity Anime { title String required, studio String }
entity Season { number Integer required min(1), title String, episodeCount Integer min(0) }
entity Episode { number Integer required min(1), title String, airDate LocalDate, durationMinutes Integer min(0) }
relationship OneToMany {
Franchise{animes} to Anime{franchise}
Anime{seasons} to Season{anime}
Season{episodes} to Episode{season}
}

The Platform Shift We’ve Been Waiting For

This anime addition touches the existing manga side, adding an animes collection to Franchise. This is precisely the kind of cross-cutting change that, in the past, would have sent shivers down my spine. A blind regeneration? Terrifying. But with the AI’s dry run, Sam saw in advance that Franchise.java and its associated Vue views would be regenerated. They confirmed nothing unexpected was lurking in the diff and proceeded with absolute confidence. The AI didn’t make this complex change safe by being some kind of magic bullet; it made it safe by empowering Sam to look first, for free, as many times as necessary.

OtakuShelf now stands as a complete model of a franchise, encompassing both manga and anime, all the way down to individual episodes. It works, but it’s not perfect—no DTOs yet, and Sam already spotted a missing field. The polish pass is next, followed by a deep dive into understanding what the AI actually did to the codebase.

This isn’t just about OtakuShelf; it’s about the dawn of a new era in software development. AI isn’t just a tool; it’s becoming the platform upon which we build. It’s abstracting away the drudgery, providing guardrails against common errors, and, most importantly, giving us back the precious commodity of time and confidence. The future of development is here, and it’s looking remarkably… safe. And I, for one, am incredibly enthusiastic about it.


🧬 Related Insights

Frequently Asked Questions

Will this AI tool replace developers?

No, AI tools like this are designed to augment developer productivity, not replace them. They handle repetitive tasks, provide safety checks, and speed up development cycles, allowing developers to focus on more complex problem-solving and creative aspects of software engineering.

Is this AI tool specific to JHipster projects?

While the example focuses on JHipster, the underlying principles of AI-assisted code generation, validation, and dry-run previews can be applied to many different development frameworks and workflows. The key is the AI’s ability to understand project context and simulate changes safely.

How can I start using AI dev tools in my own projects?

Look for AI-powered code assistants, code generation tools, and intelligent linters that offer preview or dry-run functionalities. Many modern IDEs and development platforms are integrating these features. Start with small, low-risk tasks to get comfortable with the workflow.

Written by
DevTools Feed Editorial Team

Curated insights and analysis from the editorial team.

Frequently asked questions

Will this AI tool replace developers?
No, AI tools like this are designed to augment <a href="/tag/developer-productivity/">developer productivity</a>, not replace them. They handle repetitive tasks, provide safety checks, and speed up development cycles, allowing developers to focus on more complex problem-solving and creative aspects of software engineering.
Is this AI tool specific to JHipster projects?
While the example focuses on JHipster, the underlying principles of AI-assisted code generation, validation, and dry-run previews can be applied to many different development frameworks and workflows. The key is the AI's ability to understand project context and simulate changes safely.
How can I start using AI dev tools in my own projects?
Look for AI-powered code assistants, code generation tools, and intelligent linters that offer preview or dry-run functionalities. Many modern IDEs and development platforms are integrating these features. Start with small, low-risk tasks to get comfortable with the workflow.

Worth sharing?

Get the best Developer Tools stories of the week in your inbox — no noise, no spam.

Originally reported by dev.to

Stay in the loop

The week's most important stories from DevTools Feed, delivered once a week.