<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: semantic-versioning</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/semantic-versioning.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2025-05-22T01:55:31+00:00</updated><author><name>Simon Willison</name></author><entry><title>No docs, no bugs</title><link href="https://simonwillison.net/2025/May/22/no-docs-no-bugs/#atom-tag" rel="alternate"/><published>2025-05-22T01:55:31+00:00</published><updated>2025-05-22T01:55:31+00:00</updated><id>https://simonwillison.net/2025/May/22/no-docs-no-bugs/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;strong&gt;If your library doesn't have any documentation, it can't have any bugs.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Documentation specifies what your code is supposed to do. Your tests specify what it actually does.&lt;/p&gt;
&lt;p&gt;Bugs exist when your test-enforced implementation fails to match the behavior described in your documentation.  Without documentation a bug is just undefined behavior.&lt;/p&gt;
&lt;p&gt;If you aim to follow &lt;a href="https://semver.org/"&gt;semantic versioning&lt;/a&gt; you bump your major version when you release a backwards incompatible change. Such changes cannot exist if your code is not comprehensively documented!&lt;/p&gt;
&lt;p&gt;&lt;small&gt;Inspired by a half-remembered conversation I had with &lt;a href="https://movieos.org/"&gt;Tom Insam&lt;/a&gt; many years ago. &lt;/small&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/documentation"&gt;documentation&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/semantic-versioning"&gt;semantic-versioning&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/testing"&gt;testing&lt;/a&gt;&lt;/p&gt;



</summary><category term="documentation"/><category term="semantic-versioning"/><category term="testing"/></entry><entry><title>Quoting Will McGugan</title><link href="https://simonwillison.net/2021/Aug/6/will-mcgugan/#atom-tag" rel="alternate"/><published>2021-08-06T16:17:31+00:00</published><updated>2021-08-06T16:17:31+00:00</updated><id>https://simonwillison.net/2021/Aug/6/will-mcgugan/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/willmcgugan/status/1423678688802058244"&gt;&lt;p&gt;The thing about semver major version numbers are that they don't mean new stuff, they're a permanent reminder of how many times you got the API wrong. Semver doesn't mean MAJOR.MINOR.PATCH, it means FAILS.FEATURES.BUGS&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/willmcgugan/status/1423678688802058244"&gt;Will McGugan&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/semantic-versioning"&gt;semantic-versioning&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/versioning"&gt;versioning&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/will-mcgugan"&gt;will-mcgugan&lt;/a&gt;&lt;/p&gt;



</summary><category term="semantic-versioning"/><category term="versioning"/><category term="will-mcgugan"/></entry><entry><title>sqlite-utils 1.0</title><link href="https://simonwillison.net/2019/May/25/sqlite-utils-1/#atom-tag" rel="alternate"/><published>2019-05-25T01:20:37+00:00</published><updated>2019-05-25T01:20:37+00:00</updated><id>https://simonwillison.net/2019/May/25/sqlite-utils-1/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://sqlite-utils.readthedocs.io/en/latest/changelog.html#v1-0"&gt;sqlite-utils 1.0&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I just released sqlite-utils 1.0, with a couple of handy new features over 0.14: it can now automatically add columns to a database table if you attempt to insert data which doesn’t quite fit (using alter=True in the Python API or the --alter option to the “sqlite-utils insert” command). It also has the ability to output nested JSON column values on the command-line using the new --json-cols option. This is the first project I’ve marked as a 1.0 release in a very long time—I’ll be sticking to semver for this project from now on, bumping the major version only in the case of a backwards incompatible change.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/projects"&gt;projects&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/semantic-versioning"&gt;semantic-versioning&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sqlite"&gt;sqlite&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/versioning"&gt;versioning&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sqlite-utils"&gt;sqlite-utils&lt;/a&gt;&lt;/p&gt;



</summary><category term="projects"/><category term="semantic-versioning"/><category term="sqlite"/><category term="versioning"/><category term="sqlite-utils"/></entry><entry><title>Semantic Versioning</title><link href="https://simonwillison.net/2009/Dec/15/semantic/#atom-tag" rel="alternate"/><published>2009-12-15T21:53:18+00:00</published><updated>2009-12-15T21:53:18+00:00</updated><id>https://simonwillison.net/2009/Dec/15/semantic/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://semver.org/"&gt;Semantic Versioning&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Tom Preston-Werner provides a name, specification and URL describing the relatively widely used Major.Minor.Patch versioning system. This is really useful—by giving something a name and a spec, people can say “this project uses semantic versioning” and skip having to explain their backwards compatibility policy in full.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/naming-things"&gt;naming-things&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/semantic-versioning"&gt;semantic-versioning&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/software"&gt;software&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tom-preston-werner"&gt;tom-preston-werner&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/versioning"&gt;versioning&lt;/a&gt;&lt;/p&gt;



</summary><category term="naming-things"/><category term="open-source"/><category term="semantic-versioning"/><category term="software"/><category term="tom-preston-werner"/><category term="versioning"/></entry></feed>