<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mandala</title>
    <description>The latest articles on DEV Community by Mandala (@luecria).</description>
    <link>https://dev.to/luecria</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4244584%2Ff6401328-ef7d-45d8-893a-106630d2f280.png</url>
      <title>DEV Community: Mandala</title>
      <link>https://dev.to/luecria</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/luecria"/>
    <language>en</language>
    <item>
      <title>I built a doctor for Kiro specs, with Kiro's own spec workflow</title>
      <dc:creator>Mandala</dc:creator>
      <pubDate>Sat, 14 Nov 2026 13:55:57 +0000</pubDate>
      <link>https://dev.to/luecria/i-built-a-doctor-for-kiro-specs-with-kiros-own-spec-workflow-28gl</link>
      <guid>https://dev.to/luecria/i-built-a-doctor-for-kiro-specs-with-kiros-own-spec-workflow-28gl</guid>
      <description>&lt;p&gt;My Kiro specs had a problem I kept tripping over: they looked finished and were not. A requirement would say the system "may" do something. Acceptance criteria read like wishes. Tasks got checked off while the code they described never appeared. The spec was the one artifact nobody audited, so I built the auditor. Spec Doctor is my entry for the Kiroween Hackathon 2026.&lt;/p&gt;

&lt;p&gt;Spec Doctor takes the three files of a Kiro spec — requirements.md, design.md, tasks.md — and returns a health score from 0 to 100 with findings that name the file, the line, and the exact quote. The checks are deterministic and run entirely in the browser: vague language, criteria without GIVEN/WHEN/THEN structure or EARS format, untestable wording, requirements no task covers, tasks with no requirement reference, duplicate requirements, oversized tasks, and design sections missing error handling, a data model, or API contracts. The score is reproducible by hand because the report shows every deduction. A bad spec I wrote as a fixture scores 28 with 37 findings. A good one scores 100 with none.&lt;/p&gt;

&lt;p&gt;The second half is drift. Upload a repository folder or ZIP and Spec Doctor traces every requirement ID into the code. It reports three kinds of signals: spec items with no implementation, code referencing IDs the spec never mentions, and code files with no ID references at all. I call them signals on purpose. Text matching is not proof, and each one needs a human to decide. Drift never touches the health score.&lt;/p&gt;

&lt;p&gt;An optional LLM review adds a second opinion for contradictions and ambiguity. You bring your own OpenAI-compatible key, and it stays in memory only — the app uses no web storage at all. Suggestions land in a separate labeled block and never affect the score.&lt;/p&gt;

&lt;p&gt;I built it with Kiro's spec-driven workflow through the Kiro CLI. The spec came first: requirements, design, and tasks generated headless, then reviewed and amended by hand. Two of my amendments mattered. The duplicate threshold became an exact number (Jaccard 0.90 over normalized tokens) instead of "similar". The scoring rule became diminishing deductions without caps, so a spec with twenty critical findings still scores 52 instead of bottoming out at zero. Each implementation task then ran in its own headless CLI session with filesystem tools only and no shell access. I ran every build, test suite, and browser smoke test myself and sent failures back as exact fix instructions.&lt;/p&gt;

&lt;p&gt;The smoke tests earned their keep twice. A drift handler shipped scanning an empty file list because the upload handlers discarded the extracted files; unit tests passed and only the browser run caught it. A review button could never enable because its inputs listened for the wrong event and nothing refreshed its state. Both defects were invisible to the 281 unit tests and obvious the moment a real browser drove the real UI. My rule since: the suite proves the logic, the browser proves the wiring.&lt;/p&gt;

&lt;p&gt;The dogfood result is the part I like most. Spec Doctor audits its own spec: 82 out of 100 with 9 findings. Six of the nine are self-referential — the spec lists the vague terms the checker flags, so the checker flags the list. The remaining three are loose wordings I chose to keep. I did not edit the spec to reach 100. A tool that grades its own homework to a perfect score is not a tool I would trust.&lt;/p&gt;

&lt;p&gt;Spec Doctor is free, client-side, and open source. Demo: &lt;a href="https://luecria.github.io/spec-doctor/" rel="noopener noreferrer"&gt;https://luecria.github.io/spec-doctor/&lt;/a&gt;. Repository: &lt;a href="https://github.com/Luecria/spec-doctor" rel="noopener noreferrer"&gt;https://github.com/Luecria/spec-doctor&lt;/a&gt;. It was built for the Kiroween Hackathon 2026 in the Frankenstein category: a parser, a rule engine, an LLM review, and a report generator stitched into one tool.&lt;/p&gt;

</description>
      <category>kiro</category>
      <category>hackathon</category>
      <category>typescript</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
