<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Yoojin Ko — Build log</title>
  <link>https://koyoojin.pages.dev/log</link>
  <description>Why I decided what I did and what I gave up. More about what I reversed than what I made.</description>
  <language>en</language>
  <lastBuildDate>Fri, 25 Sep 2026 00:00:00 +0900</lastBuildDate>
  <atom:link href="https://koyoojin.pages.dev/rss-en.xml" rel="self" type="application/rss+xml"/>
  <item>
    <title>I Suspected Translationese; It Was the Rhythm</title>
    <link>https://koyoojin.pages.dev/posts/it-was-the-rhythm</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/it-was-the-rhythm</guid>
    <pubDate>Fri, 25 Sep 2026 00:00:00 +0900</pubDate>
    <description>Told the writing didn't read as human, I suspected translationese; measured, the problem was rhythm and emphasis. A record of taking that rule out of one repository and reapplying it across the whole site.</description>
  </item>
  <item>
    <title>Nobody Could Tell Whose Uncommitted Changes They Were</title>
    <link>https://koyoojin.pages.dev/posts/whose-uncommitted-changes</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/whose-uncommitted-changes</guid>
    <pubDate>Fri, 25 Sep 2026 00:00:00 +0900</pubDate>
    <description>With several sessions, nobody can tell whose changes are left in the working tree. Work idle for 40 hours moved again seven seconds after my commit.</description>
  </item>
  <item>
    <title>Buildable Is Not the Same as Worth Building</title>
    <link>https://koyoojin.pages.dev/posts/buildable-is-not-worth-building</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/buildable-is-not-worth-building</guid>
    <pubDate>Fri, 25 Sep 2026 00:00:00 +0900</pubDate>
    <description>I built a file feature twice and reverted it twice. Both worked, and no line in the test table asked who would use them.</description>
  </item>
  <item>
    <title>A Number Saved Without Its Settings Couldn't Be Retraced a Month Later</title>
    <link>https://koyoojin.pages.dev/posts/a-number-without-its-settings</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/a-number-without-its-settings</guid>
    <pubDate>Thu, 24 Sep 2026 00:00:00 +0900</pubDate>
    <description>Rerunning a number published a month earlier, no single setting gave it back. The number had been recorded; the conditions behind it had not.</description>
  </item>
  <item>
    <title>The Day the Gauges Went In</title>
    <link>https://koyoojin.pages.dev/posts/the-day-the-gauges-went-in</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/the-day-the-gauges-went-in</guid>
    <pubDate>Thu, 24 Sep 2026 00:00:00 +0900</pubDate>
    <description>A day of turning rule documents into checks the AI runs on its own. The ruler turned out wrong fourteen times, and what is still unproven is written down too.</description>
  </item>
  <item>
    <title>Thirteen Bytes Over, and the Layout Vanished</title>
    <link>https://koyoojin.pages.dev/posts/thirteen-bytes-over</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/thirteen-bytes-over</guid>
    <pubDate>Tue, 22 Sep 2026 00:00:00 +0900</pubDate>
    <description>A write the device refused came back without an error. I found six places where failure looked like success, and made each of them say so.</description>
  </item>
  <item>
    <title>Flashing the Example Would Have Wiped the Card</title>
    <link>https://koyoojin.pages.dev/posts/the-example-would-have-wiped-the-card</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/the-example-would-have-wiped-the-card</guid>
    <pubDate>Mon, 21 Sep 2026 00:00:00 +0900</pubDate>
    <description>Every place I trusted the board vendor's example or its documentation, I had to go back. The cause of the sluggishness and the cause of the reboots were both somewhere other than where I first pointed.</description>
  </item>
  <item>
    <title>It Picked Chopin and Described Schubert</title>
    <link>https://koyoojin.pages.dev/posts/picked-chopin-described-schubert</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/picked-chopin-described-schubert</guid>
    <pubDate>Wed, 09 Sep 2026 00:00:00 +0900</pubDate>
    <description>The catalogue was fine and so was the index. The small model chose one piece and wrote about another, and the first guard I added went blind in the same commit.</description>
  </item>
  <item>
    <title>The Machines Idled While the Queue Grew</title>
    <link>https://koyoojin.pages.dev/posts/machines-idle-queue-growing</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/machines-idle-queue-growing</guid>
    <pubDate>Sat, 05 Sep 2026 00:00:00 +0900</pubDate>
    <description>The model's headline conclusion rested on one theorem, and that theorem came with a precondition. On a real line the precondition did not hold. What was wrong was not a parameter but the frame.</description>
  </item>
  <item>
    <title>True Until I Split It</title>
    <link>https://koyoojin.pages.dev/posts/true-until-it-was-split</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/true-until-it-was-split</guid>
    <pubDate>Wed, 02 Sep 2026 00:00:00 +0900</pubDate>
    <description>I split one automation into daily, weekly and monthly. The code ran fine; six sentences describing that code became false without a sound.</description>
  </item>
  <item>
    <title>One Line of Model Name</title>
    <link>https://koyoojin.pages.dev/posts/one-line-of-model-name</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/one-line-of-model-name</guid>
    <pubDate>Sat, 29 Aug 2026 00:00:00 +0900</pubDate>
    <description>The model two apps ran on was retired. It looked like editing one constant; within a day both apps had broken, for different reasons.</description>
  </item>
  <item>
    <title>I Measured With a Ruler That Was Still Growing</title>
    <link>https://koyoojin.pages.dev/posts/a-ruler-still-growing</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/a-ruler-still-growing</guid>
    <pubDate>Wed, 26 Aug 2026 00:00:00 +0900</pubDate>
    <description>The model came out 3% off. What was wrong was not the model but the number I had taken as my baseline — and fixing the baseline closed the gap without changing a line of the model.</description>
  </item>
  <item>
    <title>The Lie That Batches Are Always Full</title>
    <link>https://koyoojin.pages.dev/posts/batches-are-not-always-full</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/batches-are-not-always-full</guid>
    <pubDate>Wed, 26 Aug 2026 00:00:00 +0900</pubDate>
    <description>There is a loss a static capacity model cannot see even in principle. A 3.5% throughput gain with no capital spend was sitting inside it — and that is what simulation is for.</description>
  </item>
  <item>
    <title>Public Data Is Open, Not Clean</title>
    <link>https://koyoojin.pages.dev/posts/open-not-clean</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/open-not-clean</guid>
    <pubDate>Wed, 26 Aug 2026 00:00:00 +0900</pubDate>
    <description>I built metrics out of filings anyone can download. Most of the pipeline's code is not arithmetic — it is there to avoid the traps.</description>
  </item>
  <item>
    <title>A False Date Still Looks Like a Date</title>
    <link>https://koyoojin.pages.dev/posts/a-false-date-looks-like-a-date</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/a-false-date-looks-like-a-date</guid>
    <pubDate>Wed, 26 Aug 2026 00:00:00 +0900</pubDate>
    <description>On a page whose rule is “only what I measured”, five of the dates were ones I invented. Nothing caught them, a past day cannot be measured again — and the next day the tool doing the checking made the same mistake with the sign reversed.</description>
  </item>
  <item>
    <title>Printing the Blank</title>
    <link>https://koyoojin.pages.dev/posts/printing-the-blank</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/printing-the-blank</guid>
    <pubDate>Wed, 26 Aug 2026 00:00:00 +0900</pubDate>
    <description>I collected the numbers I had measured into a new tab. What took the time was not the numbers but how to write the six rows that have no write-up.</description>
  </item>
  <item>
    <title>A Dead Socket and a Thinking Model</title>
    <link>https://koyoojin.pages.dev/posts/a-dead-socket-and-a-thinking-model</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/a-dead-socket-and-a-thinking-model</guid>
    <pubDate>Tue, 25 Aug 2026 00:00:00 +0900</pubDate>
    <description>The address we were using stopped answering — and with the response arriving all at once, that produced no signal at all. I never found the cause; I made the system speak instead.</description>
  </item>
  <item>
    <title>The Fix Landed and the Stack Didn't Move</title>
    <link>https://koyoojin.pages.dev/posts/the-stack-did-not-move</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/the-stack-did-not-move</guid>
    <pubDate>Mon, 24 Aug 2026 00:00:00 +0900</pubDate>
    <description>A crash from app review, diagnosed twice and fixed twice — and all three times it came back on exactly the same stack. The cause was not my code, and a fourth arrived after I thought every route was closed.</description>
  </item>
  <item>
    <title>You Cannot Count What You Chose Not to Keep</title>
    <link>https://koyoojin.pages.dev/posts/counted-what-i-kept</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/counted-what-i-kept</guid>
    <pubDate>Sun, 23 Aug 2026 00:00:00 +0900</pubDate>
    <description>The first question after adding a visitor count was: what about everyone who came before? There is no way to know — and that was a decision, not an accident.</description>
  </item>
  <item>
    <title>A Perfect Score on the Wrong Piece</title>
    <link>https://koyoojin.pages.dev/posts/perfect-score-wrong-piece</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/perfect-score-wrong-piece</guid>
    <pubDate>Fri, 21 Aug 2026 00:00:00 +0900</pubDate>
    <description>To stop recommendations inventing albums, I built a vetted catalogue — and found the verifying side wrong in both directions, one part of it citing itself as evidence.</description>
  </item>
  <item>
    <title>The App Graded Its Own Mistake as Mine</title>
    <link>https://koyoojin.pages.dev/posts/graded-its-own-mistake-as-mine</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/graded-its-own-mistake-as-mine</guid>
    <pubDate>Fri, 21 Aug 2026 00:00:00 +0900</pubDate>
    <description>To honour a constraint — it must run without a key — I wired up the on-device path, and it ran end to end with zero keys. Then I measured it on the same recording, and the constraint had to go.</description>
  </item>
  <item>
    <title>Whether the Grader Listens</title>
    <link>https://koyoojin.pages.dev/posts/whether-the-grader-listens</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/whether-the-grader-listens</guid>
    <pubDate>Thu, 20 Aug 2026 00:00:00 +0900</pubDate>
    <description>I built two speaking-test apps, copying one from the other — but whether scoring reads a transcript or listens to the audio redrew the engine, the tabs, and what could be scored at all.</description>
  </item>
  <item>
    <title>The Screen Has No Authority</title>
    <link>https://koyoojin.pages.dev/posts/the-screen-has-no-authority</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/the-screen-has-no-authority</guid>
    <pubDate>Mon, 17 Aug 2026 00:00:00 +0900</pubDate>
    <description>I added a board to a static site. What can you trust the browser with, when anyone can open and edit it? Every feature returned to the same answer.</description>
  </item>
  <item>
    <title>It Was the Instrument Shaking, Not the Curve</title>
    <link>https://koyoojin.pages.dev/posts/the-instrument-was-shaking</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/the-instrument-was-shaking</guid>
    <pubDate>Sun, 16 Aug 2026 00:00:00 +0900</pubDate>
    <description>The verdict kept flipping between samples. The model had not changed — the instrument was shaking. And what the fixed instrument then caught.</description>
  </item>
  <item>
    <title>The Defaults Were Not Neutral</title>
    <link>https://koyoojin.pages.dev/posts/defaults-are-not-neutral</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/defaults-are-not-neutral</guid>
    <pubDate>Sun, 16 Aug 2026 00:00:00 +0900</pubDate>
    <description>Defaults for unknown values carry a direction. Reverting them one at a time, four of five pushed the same way — and together they multiplied the answer by 3.4.</description>
  </item>
  <item>
    <title>Empty-Handed Beats Invented</title>
    <link>https://koyoojin.pages.dev/posts/empty-handed-beats-invented</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/empty-handed-beats-invented</guid>
    <pubDate>Sun, 16 Aug 2026 00:00:00 +0900</pubDate>
    <description>What an app does when there is nothing to recommend. Dropping the unconfirmed instead of flagging it — the same call, made in three different places.</description>
  </item>
  <item>
    <title>Relevant, and Useless</title>
    <link>https://koyoojin.pages.dev/posts/pin-the-reader-first</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/pin-the-reader-first</guid>
    <pubDate>Sun, 16 Aug 2026 00:00:00 +0900</pubDate>
    <description>A scheduled job that had never once failed kept picking things nobody could act on. Not a bug — the criterion itself.</description>
  </item>
  <item>
    <title>Docs Don't Ride Along With the Commit</title>
    <link>https://koyoojin.pages.dev/posts/docs-dont-ride-along</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/docs-dont-ride-along</guid>
    <pubDate>Wed, 12 Aug 2026 00:00:00 +0900</pubDate>
    <description>Fixing one README turned up the same kind of lie in three more places. Code has several layers that catch a false claim; prose has none.</description>
  </item>
  <item>
    <title>I Drew a Layer, Not a Screen</title>
    <link>https://koyoojin.pages.dev/posts/a-layer-not-a-screen</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/a-layer-not-a-screen</guid>
    <pubDate>Tue, 11 Aug 2026 00:00:00 +0900</pubDate>
    <description>Porting one splash screen to Android, I got it wrong three times — never the drawing, always the layer I put it on.</description>
  </item>
  <item>
    <title>It Wasn't the Signature</title>
    <link>https://koyoojin.pages.dev/posts/not-the-signature</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/not-the-signature</guid>
    <pubDate>Mon, 10 Aug 2026 00:00:00 +0900</pubDate>
    <description>Shipping one version as a test overturned the previous post's conclusion — and exposed a real failure in the release pipeline.</description>
  </item>
  <item>
    <title>The Checks Passed, the Screen Didn't</title>
    <link>https://koyoojin.pages.dev/posts/checks-passed-screen-wrong</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/checks-passed-screen-wrong</guid>
    <pubDate>Sun, 09 Aug 2026 00:00:00 +0900</pubDate>
    <description>I ran 88 automated checks while adding Korean/English switching — and both times, I only found the bug by looking at the screen.</description>
  </item>
  <item>
    <title>Just Bumping One Number</title>
    <link>https://koyoojin.pages.dev/posts/one-number-bump</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/one-number-bump</guid>
    <pubDate>Fri, 07 Aug 2026 00:00:00 +0900</pubDate>
    <description>It started with a request to bump versionCode to 22, and ended with finding out the app was a debug build signed with a debug key.</description>
  </item>
  <item>
    <title>Who Could Know What</title>
    <link>https://koyoojin.pages.dev/posts/who-could-know-what</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/who-could-know-what</guid>
    <pubDate>Fri, 07 Aug 2026 00:00:00 +0900</pubDate>
    <description>Four apps in three weeks: retracing how the work split between Claude and me, using comment density and the traces left in a permissions file.</description>
  </item>
  <item>
    <title>Not Placing 13 Ships by Hand</title>
    <link>https://koyoojin.pages.dev/posts/warchronicle-battles-as-data</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/warchronicle-battles-as-data</guid>
    <pubDate>Tue, 04 Aug 2026 00:00:00 +0900</pubDate>
    <description>Getting to where one battle is one JSON file and everything else is calculated — and why frames had to be cut on the map.</description>
  </item>
  <item>
    <title>What I Learned Building the Same App Twice</title>
    <link>https://koyoojin.pages.dev/posts/classical-mood-cross-platform</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/classical-mood-cross-platform</guid>
    <pubDate>Tue, 04 Aug 2026 00:00:00 +0900</pubDate>
    <description>Rather than faking what the platform could not do, I chose to write down what I gave up.</description>
  </item>
  <item>
    <title>Catching SMS Wasn't Enough</title>
    <link>https://koyoojin.pages.dev/posts/fab-alert-beyond-sms</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/fab-alert-beyond-sms</guid>
    <pubDate>Fri, 31 Jul 2026 00:00:00 +0900</pubDate>
    <description>Adding RCS, MMS, forwarding, and self-distribution — how an alarm I built for myself became an app other people use.</description>
  </item>
  <item>
    <title>One Document for an Automation That Runs Alone</title>
    <link>https://koyoojin.pages.dev/posts/skill-md-as-a-contract</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/skill-md-as-a-contract</guid>
    <pubDate>Fri, 31 Jul 2026 00:00:00 +0900</pubDate>
    <description>A job that starts from an empty session every time cannot remember context — it has to nail the context down in a document.</description>
  </item>
  <item>
    <title>Making It Ring Even When the App Is Dead</title>
    <link>https://koyoojin.pages.dev/posts/sms-alarm-always-fires</link>
    <guid isPermaLink="true">https://koyoojin.pages.dev/posts/sms-alarm-always-fires</guid>
    <pubDate>Tue, 28 Jul 2026 00:00:00 +0900</pubDate>
    <description>Why I stopped leaning on a foreground service and moved the decision to the moment the message arrives.</description>
  </item>
</channel>
</rss>
