<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Tools on The Public Ledger</title><link>https://blog.jbledger.com/categories/tools/</link><description>Recent content in Tools on The Public Ledger</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 12 Sep 2026 16:00:00 +0000</lastBuildDate><atom:link href="https://blog.jbledger.com/categories/tools/index.xml" rel="self" type="application/rss+xml"/><item><title>The Same Data, Three Tools: Power BI, dbt, and DuckDB</title><link>https://blog.jbledger.com/posts/the-same-data-three-tools-power-bi-dbt-and-duckdb/</link><pubDate>Sat, 12 Sep 2026 16:00:00 +0000</pubDate><guid>https://blog.jbledger.com/posts/the-same-data-three-tools-power-bi-dbt-and-duckdb/</guid><description>One frozen snapshot of federal budget data through three modern stacks: a diffable Power BI model in TMDL, a dbt + DuckDB warehouse with 82 tests — and the five things the tests caught in real data.</description></item><item><title>A Copilot That Says No</title><link>https://blog.jbledger.com/posts/a-copilot-that-says-no/</link><pubDate>Sat, 12 Sep 2026 15:00:00 +0000</pubDate><guid>https://blog.jbledger.com/posts/a-copilot-that-says-no/</guid><description>A natural-language-to-SQL copilot with no LLM in it: a deterministic router, 40 pre-approved SELECTs, results frozen at build time, and a refusal taxonomy — out-of-scope, untracked-agency, injection, and more, each with a named reason.</description></item><item><title>Six Macros for the Monthly Close</title><link>https://blog.jbledger.com/posts/six-macros-for-the-monthly-close/</link><pubDate>Sat, 12 Sep 2026 09:30:00 +0000</pubDate><guid>https://blog.jbledger.com/posts/six-macros-for-the-monthly-close/</guid><description>A budget workbench in Excel: four template workbooks, six VBA macros for reconciliation, variance, and the close checklist — plus Python twins of the two computational macros so every number reproduces headlessly.</description></item></channel></rss>