<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0">
 <channel>
  <title>Will Lachance&#39;s Log: Posts tagged &#39;idrs&#39;</title>
  <description></description>
  <link>https://wrla.ch/tags/idrs.html</link>
  <lastBuildDate>Sat, 10 Oct 2026 21:03:33 GMT</lastBuildDate>
  <pubDate>Sat, 10 Oct 2026 21:03:33 GMT</pubDate>
  <ttl>1800</ttl>

  <item>
   <title>IDRs as records of intent</title>
   <link>https://wrla.ch/log/2026/10/idrs-as-records-of-intent/?utm_source=idrs&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:https-wrla-ch:-log-2026-10-idrs-as-records-of-intent</guid>
   <pubDate>Sat, 10 Oct 2026 21:03:33 GMT</pubDate>
   <author>Will Lachance</author>
   <description>
&lt;p&gt;&lt;img src=&#34;/log/2026/10/idrs-as-records-of-intent/./beaver_pond.jpg&#34; alt=&#34;Beaver Pond&#34; /&gt;&lt;/p&gt;
&lt;p&gt;In &lt;a href=&#34;/log/2026/08/writing-the-docs-2026-edition/&#34;&gt;Writing the Docs: 2026 Edition&lt;/a&gt;, I talked a little bit about &lt;a href=&#34;https://github.com/wlach/idr-tools&#34;&gt;IDRs&lt;/a&gt; (Implementation Decision Records, a pun on &amp;quot;Architecture Decision Records&amp;quot; which predate adoption of LLMs).&lt;/p&gt;
&lt;p&gt;As a refresher, I created them to serve a couple purposes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;To get better output out of LLMs&lt;/li&gt;
&lt;li&gt;To provide a durable record of a decision made during the implementation of a feature&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I&#39;ve realized that left to their own devices given a vague prompt, an LLM will often just try to fill one in with a textual description of what it planned to implement anyway.&lt;sup class=&#34;footnote-ref&#34;&gt;&lt;a href=&#34;#fn-idrs-as-records-of-intent-1&#34; id=&#34;fnref-idrs-as-records-of-intent-1&#34;&gt;[1]&lt;/a&gt;&lt;/sup&gt;  This makes them pretty lossy as a record of intent (it&#39;s basically not much better than a diff, and arguably worse) and I&#39;m somewhat skeptical it improves their output much.
At best, they might allow you to steer them towards a better outcome before too much code is written.&lt;/p&gt;
&lt;p&gt;A great example is this one, where I asked the agent to update &lt;a href=&#34;https://github.com/wlach/repo-parser&#34;&gt;repo-parser&lt;/a&gt; to use DuckDB for the intermediate representation:&lt;/p&gt;
&lt;div class=&#34;brush: md&#34;&gt;&lt;div class=&#34;colorful&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&#34;gh&#34;&gt;# DuckDB serialization&lt;/span&gt;

Owner: Will Lachance &amp;lt;wlach@protonmail.com&amp;gt;

&lt;span class=&#34;gu&#34;&gt;## Overview&lt;/span&gt;

&lt;span class=&#34;gu&#34;&gt;### Problem Statement&lt;/span&gt;

repo-parser extracts metadata and structure from repositories into an in-memory &lt;span class=&#34;sb&#34;&gt;`Resource`&lt;/span&gt; tree, but this ephemeral representation must be re-created for each consumer. We need a persistent, queryable serialization format that allows multiple tools to consume the extracted metadata without re-scanning the repository.

&lt;span class=&#34;gu&#34;&gt;### Context&lt;/span&gt;

&amp;lt;very long winded, almost inscrutable LLM context&amp;gt;

...
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/wlach/repo-parser/blob/main/idrs/202601030409-duckdb-serialization-and-interactive-ui-architecture.md&#34;&gt;link&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The problem statement isn&#39;t horrible, but it&#39;s also rather vague.
I don&#39;t think it really gave the agent much of a goal aside from &amp;quot;use duckdb in some way&amp;quot; to replace some other mechanism.
I think the result was ok-ish, but I wonder a bit if the IDR had much value in that process.
It certainly doesn&#39;t help explain what the duckdb output of repo-parser is actually good for (a BM25 search index of a repository&#39;s contents, possibly TUI search tools).
And it&#39;s definitely not something I want to re-read later, I cringe looking at it now.&lt;/p&gt;
&lt;p&gt;What I&#39;m increasingly realizing is that for an IDR to be really effective it needs to keep returning to the &lt;strong&gt;intent&lt;/strong&gt; and decisions taken to support it.
Without this, it&#39;s just a long-winded way of restating the diff in english.&lt;/p&gt;
&lt;p&gt;I&#39;m much happier with this one:&lt;/p&gt;
&lt;div class=&#34;brush: md&#34;&gt;&lt;div class=&#34;colorful&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&#34;gh&#34;&gt;# Publish to PyPI from GitHub Actions&lt;/span&gt;

Owner: Will Lachance &amp;lt;wlach@protonmail.com&amp;gt;

&lt;span class=&#34;gu&#34;&gt;## Overview&lt;/span&gt;

&lt;span class=&#34;gu&#34;&gt;### Problem Statement&lt;/span&gt;

repo-parser packages can only be published to PyPI manually, which is time consuming, error prone and less secure than doing so via GitHub actions.

&lt;span class=&#34;gu&#34;&gt;### Context (as needed)&lt;/span&gt;

&lt;span class=&#34;gu&#34;&gt;### Goals&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Make it easier to publish new releases
&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Improve security

&lt;span class=&#34;gu&#34;&gt;### Non-Goals&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Automate version bumping (will still entail a seperate commit to bump version)

&lt;span class=&#34;gu&#34;&gt;### Proposed Solution&lt;/span&gt;

Use the idiomatic best practice way of doing this, using the official packaging guide:

https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/

In general this means adding a new GitHub workflow which ties uploads to PyPI to new releases.

&lt;span class=&#34;gu&#34;&gt;## Other reading (as needed)&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;[&lt;span class=&#34;nt&#34;&gt;Official Guide&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/&lt;/span&gt;)
&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;[&lt;span class=&#34;nt&#34;&gt;Stamina&#39;s implementation&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://github.com/hynek/stamina/blob/b25d4bc359ff603496aafbb217ab82c5a43715a6/.github/workflows/pypi-package.yml&lt;/span&gt;) (likely best practice)
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/wlach/repo-parser/blob/main/idrs/202512310404-publish-to-pypi-from-github-actions.md&#34;&gt;link&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The problem statement describes the &amp;quot;itch&amp;quot; that made me want to perform the intervention.
The goals, non-goals and solution are short, punchy and explain the end result without getting into implementation details. When I go back and look at a repository later, &lt;strong&gt;this&lt;/strong&gt; is the sort of thing I want to see.
Bonus: when using an LLM it provides clearer guard-rails.
Every sentence does the work of steering behaviour towards the actual result I want to see, rather than being a set of instructions that it might misinterpret.
If I need more detail, I&#39;ll just look at the diff.&lt;/p&gt;
&lt;section class=&#34;footnotes&#34;&gt;
&lt;ol class=&#34;footnotes-list&#34;&gt;
&lt;li id=&#34;fn-idrs-as-records-of-intent-1&#34; class=&#34;footnote-item&#34;&gt;&lt;p&gt;They&#39;ll also do this if you ask them to create a commit message without strong guardrails &lt;a href=&#34;#fnref-idrs-as-records-of-intent-1&#34; class=&#34;footnote-backref&#34;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</description></item>
</channel></rss>