Shaaf's blog

A technical blog about Java, Kubernetes and things that matter

Enforcing Architecture with rgctl Policy Checks

Automated guardrails that fail your build before bad coupling ships

rgctl policy checks let you define architectural constraints as JSON and enforce them in CI. This post walks through the CoolStore WebLogic monolith as a worked example -- policy file format, violation types, blast-radius gates, and a working GitHub Actions workflow.

Introducing rgctl: A Code Knowledge Graph for Engineering Teams and Agents

Index once, query many times — structural facts instead of confident guesses

rgctl turns any repository into a queryable knowledge graph with pre-computed reachability, blast radius, program slicing, taint analysis, and community detection. Built in Rust for speed, designed for LLM agents and humans alike.

Decomposing a Monolith into Microservices with Call Graph Analysis

Finding service boundaries with community detection and blast radius

A concrete decomposition of a Java EE monolith into microservices using rgctl's community detection, blast radius analysis, and CPG field mutation tracking to identify natural service boundaries and quantify coupling at each cut.

Application Migration using A Graph-Driven Approach with rgctl

Using call-graph analysis to make migration decisions based on structural data

A step-by-step walkthrough of migrating a Java EE 7 CoolStore monolith from WebLogic to Quarkus, using rgctl's blast radius, community detection, and migration planning to replace guesswork with graph-driven evidence.

Adding Rust Support and Some Major updates to My Neovim Config

It’s been about 8 months since my last update on neovim4j, and the config has evolved significantly. The name “neovim4j” is now a bit of a misnomer—while it started as a Java-focused setup, it’s grown into a polyglot development environment.

Rust Support 🦀

The biggest addition is comprehensive Rust support. I’ve integrated:

  • rustaceanvim for advanced LSP features powered by rust-analyzer
  • crates.nvim for smart Cargo.toml management and dependency completion
  • codelldb debugger integration
  • neotest for running Rust tests directly in the editor

The Rust setup mirrors the Java tooling quality—full LSP, debugging, and testing all working seamlessly. Semantic highlighting is disabled in favor of Treesitter for more colorful syntax highlighting.