<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Consumer Rights on ICE-ICE-BEAR-BLOG</title><link>https://ice-ice-bear.github.io/tags/consumer-rights/</link><description>Recent content in Consumer Rights on ICE-ICE-BEAR-BLOG</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Fri, 17 Apr 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://ice-ice-bear.github.io/tags/consumer-rights/index.xml" rel="self" type="application/rss+xml"/><item><title>damn-my-slow-kt — One CLI Command Turns KT SLA Clauses Into Monthly Refunds</title><link>https://ice-ice-bear.github.io/posts/2026-04-17-kt-sla-refund-cli/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0900</pubDate><guid>https://ice-ice-bear.github.io/posts/2026-04-17-kt-sla-refund-cli/</guid><description>&lt;img src="https://ice-ice-bear.github.io/" alt="Featured image of post damn-my-slow-kt — One CLI Command Turns KT SLA Clauses Into Monthly Refunds" /&gt;&lt;h2 id="overview"&gt;Overview
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/kargnas/damn-my-slow-kt" target="_blank" rel="noopener"
 &gt;kargnas/damn-my-slow-kt&lt;/a&gt; turns a rarely-exercised clause in KT&amp;rsquo;s internet contract — a mandatory daily refund when measured speeds fall below 50% of the contracted rate — into a single &lt;code&gt;npx&lt;/code&gt; command. The tool schedules up to 10 measurements per day through KT&amp;rsquo;s official speed program, auto-files the refund request when a measurement qualifies, and skips the rest of the day once one succeeds. 445 stars on GitHub, TypeScript + Playwright + Commander + SQLite. More than a fun project — it is a concrete example of turning regulated entitlements into ambient software.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD
 A["npx damn-my-slow-kt init"] --&gt; B["Register cron: 10 runs/day"]
 B --&gt; C["Run measurement via KT's official program"]
 C --&gt; D{"Speed &lt; 50% SLA?"}
 D --&gt;|"Yes"| E["Playwright: auto-file SLA complaint"]
 E --&gt; F["Day's bill refunded"]
 F --&gt; G["Skip remaining runs today"]
 D --&gt;|"No"| H["Retry in 2 hours"]
 H --&gt; C&lt;/pre&gt;&lt;h2 id="the-contract-clause-most-users-never-invoke"&gt;The Contract Clause Most Users Never Invoke
&lt;/h2&gt;&lt;p&gt;KT&amp;rsquo;s residential internet terms include a &lt;strong&gt;Minimum Guaranteed Speed Program (SLA)&lt;/strong&gt;. If measured speed falls below the minimum (contractually 50% of the advertised rate) on &lt;strong&gt;30 consecutive minutes, 5 measurements, 3 of which qualify&lt;/strong&gt;, KT must refund that day&amp;rsquo;s usage fee. The key catch:&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;One measurement = one day&amp;rsquo;s refund. 30 bad days = full monthly refund.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;The refund is &lt;strong&gt;daily, not monthly&lt;/strong&gt;. To zero out a monthly bill you need 30 qualifying days, and to qualify each day you have to sit through the 25-minute official measurement, then file a complaint through a clunky web form. Nobody does this. The regulation exists as a formality.&lt;/p&gt;
&lt;p&gt;The product insight behind &lt;code&gt;damn-my-slow-kt&lt;/code&gt; is that the barrier is not legal — it&amp;rsquo;s ergonomic. The tool turns the 25-minute manual ritual into a background cron job.&lt;/p&gt;
&lt;h2 id="how-it-actually-works"&gt;How It Actually Works
&lt;/h2&gt;&lt;p&gt;The README lists a refreshingly boring but thorough stack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Language&lt;/strong&gt;: TypeScript with ES2020, strict CommonJS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CLI framework&lt;/strong&gt;: Commander + Inquirer + Chalk v4 (classic Node.js CLI trio)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Browser automation&lt;/strong&gt;: Playwright driving headless Chromium to file the complaint&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage&lt;/strong&gt;: &lt;code&gt;node:sqlite&lt;/code&gt; on Node 22+, with JSON fallback for older runtimes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Config&lt;/strong&gt;: YAML at &lt;code&gt;~/.damn-my-slow-isp/config-kt.yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test&lt;/strong&gt;: Vitest; CI across Node 20 and 22 matrices&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The scheduler installs a platform-native cron (launchd on macOS, Task Scheduler on Windows) that runs up to 10 times per day at 2-hour intervals. Once a day succeeds, subsequent runs log &amp;ldquo;already refunded&amp;rdquo; and exit immediately. Optional Discord / Telegram webhooks notify the user when a refund goes through.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;KT official measurement program is a hard dependency&lt;/strong&gt;. The program exists only for macOS and Windows — Linux is unsupported by KT itself. That killed the project&amp;rsquo;s original Docker/Synology NAS deployment path, and the README politely strikes through that section. If KT ever ships a Linux binary, the Playwright ecosystem is ready.&lt;/p&gt;
&lt;h2 id="why-the-design-is-instructive"&gt;Why the Design Is Instructive
&lt;/h2&gt;&lt;p&gt;Three small decisions stand out:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Graceful degradation on storage.&lt;/strong&gt; The tool prefers Node 22&amp;rsquo;s built-in SQLite but falls back to JSON files. The project wants to run on any consumer machine, not just dev laptops. That&amp;rsquo;s the correct call for a consumer-facing tool — compatibility beats elegance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Honest hardware disclaimers.&lt;/strong&gt; macOS is marked ✅ native; Windows is ⚠️ untested; Linux is flatly impossible. GitHub Actions CI runs only the web-page-load tests (since the measurement binary can&amp;rsquo;t be installed), verifying login flow but not speed measurement. The status table is calibrated to reality instead of aspiration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Daily run cap with early exit.&lt;/strong&gt; 10 attempts at 2-hour intervals is a thoughtful frequency. Most SLA misses cluster during peak hours (evenings, weekends), so spreading 10 measurements across 20 hours catches them without hammering KT&amp;rsquo;s server. The early exit on first success means the median day costs one measurement, not ten.&lt;/p&gt;
&lt;h2 id="the-legal-anchor"&gt;The Legal Anchor
&lt;/h2&gt;&lt;p&gt;The README is painstakingly sourced from KT&amp;rsquo;s own 2025.03 terms of service, including Annex 2 clauses:&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Section 13 ⑦5 — If KT fails to meet the minimum speed guarantee, the customer may terminate the contract without an early-termination fee.&lt;/p&gt;
&lt;p&gt;Section 19 ⑤ — KT shall refund usage fees when the measured speed falls below the minimum, subject to Annex 2.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;And Annex 2 Section D defines the exact measurement protocol (30 minutes, 5 samples, 60% threshold). The tool is not exploiting a loophole — it&amp;rsquo;s automating a process KT&amp;rsquo;s own contract obligates them to honor. That&amp;rsquo;s also why they chose KT&amp;rsquo;s official measurement program as the measurement source. Using a third-party speed test would give KT a trivial grounds to reject the complaint.&lt;/p&gt;
&lt;h2 id="where-it-fits-in-a-bigger-pattern"&gt;Where It Fits in a Bigger Pattern
&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;graph LR
 A["Consumer right"] --&gt; B{"Exercised?"}
 B --&gt;|"Manual ritual"| C["Nobody bothers"]
 B --&gt;|"Software automates"| D["Ambient entitlement"]&lt;/pre&gt;&lt;p&gt;Consumer regulations around internet quality, delivery guarantees, flight compensation, and subscription cancellation all share the same structural failure mode: the entitlement exists, but the ergonomic cost of exercising it exceeds the payout. &lt;code&gt;damn-my-slow-kt&lt;/code&gt; is part of a small-but-growing software category that closes that gap — tools like AirHelp for flight delays, DoNotPay for parking tickets, and Truebill for subscription audits. The interesting question for developers is: which other SLA-style clauses are currently unexercised because nobody builds the Playwright script for them?&lt;/p&gt;
&lt;h2 id="quick-links"&gt;Quick Links
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/kargnas/damn-my-slow-kt" target="_blank" rel="noopener"
 &gt;kargnas/damn-my-slow-kt GitHub&lt;/a&gt; — 445 stars, TypeScript, MIT-style&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://ermsweb.kt.com/search/faq/faqAnswerM.do?kbId=KNOW0002301063" target="_blank" rel="noopener"
 &gt;KT Minimum Speed Guarantee FAQ&lt;/a&gt; — official regulation&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://speed.kt.com" target="_blank" rel="noopener"
 &gt;speed.kt.com&lt;/a&gt; — KT&amp;rsquo;s SLA measurement portal&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="insights"&gt;Insights
&lt;/h2&gt;&lt;p&gt;The reason this project resonates isn&amp;rsquo;t the specific refund — it&amp;rsquo;s the template. A 300-line TypeScript CLI converts a dormant consumer right into a background service. The work is not primarily legal research (KT&amp;rsquo;s terms are public). The work is scheduling, Playwright scripting, error handling, storage migration, and install ergonomics. Those are normal engineering tasks, and they&amp;rsquo;re the bottleneck keeping thousands of similar clauses (from telecom SLAs to banking fee-disclosure rules) unexercised. The implication: software that automates entitlement becomes a consumer-defense layer. If a future LLM or agent framework can generate these automators on demand — &amp;ldquo;scan my contracts, file any refund I&amp;rsquo;m owed&amp;rdquo; — an entirely new product surface opens up that sits between legal tech and personal finance. Until then, tools like &lt;code&gt;damn-my-slow-kt&lt;/code&gt; are prototypes of what that looks like, one SLA at a time.&lt;/p&gt;</description></item></channel></rss>