<?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: Shivam Patel</title>
    <description>The latest articles on DEV Community by Shivam Patel (@shivammusic).</description>
    <link>https://dev.to/shivammusic</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%2F4203785%2F632b7faf-6b85-41a0-94f6-f358299e8642.png</url>
      <title>DEV Community: Shivam Patel</title>
      <link>https://dev.to/shivammusic</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shivammusic"/>
    <language>en</language>
    <item>
      <title>Phantom Trace: an offline AI that finds the ghosts in your CI/CD logs</title>
      <dc:creator>Shivam Patel</dc:creator>
      <pubDate>Mon, 26 Oct 2026 20:15:45 +0000</pubDate>
      <link>https://dev.to/shivammusic/phantom-trace-an-offline-ai-that-finds-the-ghosts-in-your-cicd-logs-3ojh</link>
      <guid>https://dev.to/shivammusic/phantom-trace-an-offline-ai-that-finds-the-ghosts-in-your-cicd-logs-3ojh</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Some failures never really leave a pipeline. They disappear for a week, return&lt;br&gt;
under different wording, and make the next incident look new.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phantom Trace&lt;/strong&gt; is an offline incident-archaeology tool that finds those&lt;br&gt;
recurring ghosts. You paste timestamped CI/CD events, and a local open-weight&lt;br&gt;
embedding model groups failures that mean the same thing even when they share&lt;br&gt;
few exact words. It then shows every source line behind the cluster.&lt;/p&gt;

&lt;p&gt;The included fictional sample contains three incident families:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an expired TLS certificate affecting three deployment paths;&lt;/li&gt;
&lt;li&gt;disk exhaustion reported three different ways; and&lt;/li&gt;
&lt;li&gt;a missing deployment secret observed by two services.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One accessibility failure remains isolated. That distinction matters: the app&lt;br&gt;
is meant to reveal recurrence, not force every event into a pattern.&lt;/p&gt;

&lt;p&gt;My interpretation of &lt;strong&gt;Ghost in the Machine&lt;/strong&gt; is practical rather than&lt;br&gt;
supernatural. The ghosts are old operational failures still haunting a delivery&lt;br&gt;
system. The machine can surface them, but it should not pretend to know more&lt;br&gt;
than its evidence.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmbvgqgzum3ike6w0lduq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmbvgqgzum3ike6w0lduq.png" alt="Phantom Trace grouping nine fictional CI/CD events into three recurring patterns and one isolated event" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the verified sample run, Phantom Trace analyzes nine fictional events and&lt;br&gt;
returns three recurring patterns plus one isolated event. Expanding a result&lt;br&gt;
reveals its timestamps, sources, and original log messages.&lt;/p&gt;

&lt;p&gt;To run it locally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;py&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;venv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;venv&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\.venv\Scripts\python.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;requirements.txt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\.venv\Scripts\python.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;setup_model.py&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\Start-PhantomTrace.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then open &lt;code&gt;http://127.0.0.1:8766&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Model setup needs the internet once. Analysis itself does not.&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/shivammusic" rel="noopener noreferrer"&gt;
        shivammusic
      &lt;/a&gt; / &lt;a href="https://github.com/shivammusic/phantom-trace" rel="noopener noreferrer"&gt;
        phantom-trace
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Offline open-weight AI for finding recurring patterns in CI/CD incident logs.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Phantom Trace&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Phantom Trace is a local incident-archaeology tool for CI/CD teams. It uses an
open-weight sentence-transformer to connect historical failures that mean the
same thing even when their exact wording changes, then shows every source event
behind each cluster.&lt;/p&gt;
&lt;p&gt;It was started on October 26, 2026 for the DEV Hacktoberfest Week 4 challenge
&lt;strong&gt;Ghost in the Machine&lt;/strong&gt;. The sample data is fictional and contains no private
operational information.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Demo&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/41016630/685302063-250e6550-f8f0-4e39-ab6c-96b09df073e1.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3OTMwNDYyMzYsIm5iZiI6MTc5MzA0NTkzNiwicGF0aCI6Ii80MTAxNjYzMC82ODUzMDIwNjMtMjUwZTY1NTAtZjhmMC00ZTM5LWFiNmMtOTZiMDlkZjA3M2UxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjEwMjYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYxMDI2VDIwMTg1NlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFlYmQ3MzY0ZjYzNzY0MjQwNGFkZmNkODI5ODhhNGZiNDcwYjIwMjU2MTBkZDUxOGMzZGEzNjU3YmNkOGEzMDMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.W4AIm8wQn0FKjQxaHhryGqutrF8vPOesn_ttYJiBmjE"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F41016630%2F685302063-250e6550-f8f0-4e39-ab6c-96b09df073e1.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3OTMwNDYyMzYsIm5iZiI6MTc5MzA0NTkzNiwicGF0aCI6Ii80MTAxNjYzMC82ODUzMDIwNjMtMjUwZTY1NTAtZjhmMC00ZTM5LWFiNmMtOTZiMDlkZjA3M2UxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjEwMjYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYxMDI2VDIwMTg1NlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFlYmQ3MzY0ZjYzNzY0MjQwNGFkZmNkODI5ODhhNGZiNDcwYjIwMjU2MTBkZDUxOGMzZGEzNjU3YmNkOGEzMDMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.W4AIm8wQn0FKjQxaHhryGqutrF8vPOesn_ttYJiBmjE" alt="Phantom Trace grouping nine fictional CI/CD events into three recurring patterns and one isolated event"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why open AI is core&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Keyword searches miss &lt;code&gt;x509 certificate has expired&lt;/code&gt; when you search for
&lt;code&gt;TLS renewal failure&lt;/code&gt;. Phantom Trace runs &lt;code&gt;all-MiniLM-L6-v2&lt;/code&gt; locally with ONNX
Runtime to map each log message into a semantic vector. Those vectors—not a
remote service—drive the recurrence graph and cluster membership.&lt;/p&gt;
&lt;p&gt;The application does not generate diagnoses. It selects a real medoid event as
the cluster title and preserves every supporting log line, so a human can audit
why events were connected…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/shivammusic/phantom-trace" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Source: &lt;a href="https://github.com/shivammusic/phantom-trace" rel="noopener noreferrer"&gt;https://github.com/shivammusic/phantom-trace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is intentionally small enough to audit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;app.py&lt;/code&gt; contains parsing, local inference, clustering, scoring, and the HTTP
server;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;static/&lt;/code&gt; contains the accessible browser interface;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;setup_model.py&lt;/code&gt; downloads a pinned model revision;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tests/&lt;/code&gt; exercises parsing, clustering, defaults, deterministic scoring, and
failure cases; and&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;THIRD_PARTY_NOTICES.md&lt;/code&gt; records the model and prior-work attribution.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Turn each message into a local semantic vector
&lt;/h3&gt;

&lt;p&gt;Phantom Trace uses&lt;br&gt;
&lt;a href="https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2" rel="noopener noreferrer"&gt;&lt;code&gt;sentence-transformers/all-MiniLM-L6-v2&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
through ONNX Runtime. The tokenizer truncates messages to 256 tokens. The&lt;br&gt;
server performs attention-mask-aware mean pooling and L2 normalization, so&lt;br&gt;
cosine similarity becomes a dot product between unit vectors.&lt;/p&gt;

&lt;p&gt;That open-weight model is the functional core. A keyword search for &lt;code&gt;disk&lt;br&gt;
full&lt;/code&gt; would miss &lt;code&gt;no space left on device while extracting image layers&lt;/code&gt;.&lt;br&gt;
Their embeddings can still land close enough to connect them.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Build an evidence graph, not an invented diagnosis
&lt;/h3&gt;

&lt;p&gt;Each event is a node. A pair becomes connected when its cosine similarity meets&lt;br&gt;
the selected threshold. Connected components become incident clusters.&lt;/p&gt;

&lt;p&gt;For the title, Phantom Trace chooses the medoid: the real event whose vector is&lt;br&gt;
most central to the cluster. It does &lt;strong&gt;not&lt;/strong&gt; ask a language model to generate a&lt;br&gt;
root cause. Every displayed claim can be traced to an input line.&lt;/p&gt;

&lt;p&gt;The haunting score is also deliberately ordinary. It combines recurrence,&lt;br&gt;
source breadth, and recency. It is a prioritization heuristic, not an AI&lt;br&gt;
confidence score.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Calibrate with a real model run
&lt;/h3&gt;

&lt;p&gt;My first default threshold was &lt;code&gt;0.72&lt;/code&gt;. The UI looked polished, but a real model&lt;br&gt;
integration run exposed a problem: it found only one of the three intended&lt;br&gt;
recurring families.&lt;/p&gt;

&lt;p&gt;I tested the same nine-event fixture across several thresholds. At &lt;code&gt;0.55&lt;/code&gt;, the&lt;br&gt;
model produced the intended &lt;code&gt;3, 3, 2, 1&lt;/code&gt; cluster sizes: three recurring groups&lt;br&gt;
and one isolated event. I changed the default, documented why, and added a&lt;br&gt;
regression test for the setting.&lt;/p&gt;

&lt;p&gt;The slider remains available because one threshold cannot fit every log corpus.&lt;br&gt;
Teams can raise it when they prefer fewer, tighter matches.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Keep the boundary small and inspectable
&lt;/h3&gt;

&lt;p&gt;The local server accepts only 2–200 non-empty events in this format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ISO timestamp | source | message
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It bounds source and message lengths, rejects malformed input, listens on&lt;br&gt;
&lt;code&gt;127.0.0.1&lt;/code&gt;, and makes no analytics or inference API calls. Users should still&lt;br&gt;
redact secrets before pasting logs; local processing is not an excuse to put&lt;br&gt;
credentials into diagnostic tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Validation
&lt;/h3&gt;

&lt;p&gt;I ran:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6 unit tests: all passed;&lt;/li&gt;
&lt;li&gt;JavaScript syntax validation: passed;&lt;/li&gt;
&lt;li&gt;a real local MiniLM integration run: 9 events, 3 recurring clusters, sizes
&lt;code&gt;3, 3, 2, 1&lt;/code&gt;; and&lt;/li&gt;
&lt;li&gt;an end-to-end browser run in Microsoft Edge, including expansion of the
original evidence lines.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Operational logs can contain customer names, internal hostnames, repository&lt;br&gt;
paths, incident details, and secrets that should have been redacted but were&lt;br&gt;
not. Shipping all of that to a closed embedding endpoint just to compare two&lt;br&gt;
sentences is a poor default.&lt;/p&gt;

&lt;p&gt;An open-weight model changes the trust boundary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the log text stays on the operator's machine;&lt;/li&gt;
&lt;li&gt;inference still works after the model is downloaded and the network is off;&lt;/li&gt;
&lt;li&gt;there is no per-event API charge or quota;&lt;/li&gt;
&lt;li&gt;the exact model revision is pinned and replaceable; and&lt;/li&gt;
&lt;li&gt;the pooling, similarity, grouping, and scoring logic are all inspectable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open also makes limitations easier to discuss honestly. Semantic similarity is&lt;br&gt;
not root-cause analysis. A connected cluster can be wrong, and a real recurring&lt;br&gt;
incident can be missed. Phantom Trace keeps the original evidence visible so a&lt;br&gt;
human can challenge the grouping instead of trusting an opaque diagnosis.&lt;/p&gt;

&lt;p&gt;For this project, open innovation is not a licensing footnote. It is what makes&lt;br&gt;
private, offline incident archaeology possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;The moment the project landed was not an animation or a jump scare. It was the&lt;br&gt;
first real-model run after calibration: three differently worded failure&lt;br&gt;
families emerged from nine lines, while an unrelated accessibility failure&lt;br&gt;
stayed alone.&lt;/p&gt;

&lt;p&gt;That is the kind of ghost I wanted to catch—an old failure returning in a new&lt;br&gt;
sentence, with enough evidence left behind for someone to finally recognize it.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Assistance Disclosure
&lt;/h2&gt;

&lt;p&gt;I used OpenAI Codex to help implement, test, review, and draft documentation for&lt;br&gt;
this project. I reviewed the resulting code and prose, ran the stated tests and&lt;br&gt;
real-model checks locally, and corrected the similarity default after the&lt;br&gt;
integration result contradicted the initial assumption. The sample data is&lt;br&gt;
fictional. No private production logs were used.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>Steady Inbox: A Local MiniLM Assistant That Groups Messages Without Losing the Originals</title>
      <dc:creator>Shivam Patel</dc:creator>
      <pubDate>Sat, 24 Oct 2026 16:28:36 +0000</pubDate>
      <link>https://dev.to/shivammusic/steady-inbox-a-local-minilm-assistant-that-groups-messages-without-losing-the-originals-300e</link>
      <guid>https://dev.to/shivammusic/steady-inbox-a-local-minilm-assistant-that-groups-messages-without-losing-the-originals-300e</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Steady Inbox is a small local-AI tool for the repetitive part of inbox review: noticing when several messages are really about the same thing. You paste one message per line, and it proposes semantic groups while keeping every original visible and exportable.&lt;/p&gt;

&lt;p&gt;The project follows the challenge's “Slow and Steady” theme by reducing a pile of repeated reminders to a shorter review queue. It does not delete, send, archive, or act on a message. The person reviewing the results stays in control.&lt;/p&gt;

&lt;p&gt;In my synthetic demonstration, 9 messages became 6 review groups and all 9 originals remained recoverable. That is a functional test result, not a claim about production-scale accuracy or guaranteed time savings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://raw.githubusercontent.com/shivammusic/steady-inbox/main/docs/steady-inbox-demo.gif" rel="noopener noreferrer"&gt;Watch the verified 64-second browser demonstration&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The reproducible demonstration uses only synthetic messages: two pull-request reminders, two milk reminders, two meeting-time notes, two database-backup reminders, and one Wi-Fi notice. It shows the empty state, input validation, local grouping, an expanded two-message group, the reviewed control, and Markdown export availability.&lt;/p&gt;

&lt;p&gt;Local reproduction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;py&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;12-64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;venv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;venv&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\.venv\Scripts\python.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;requirements.lock&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\.venv\Scripts\python.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;setup_model.py&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\.venv\Scripts\python.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;app.py&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--port&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;8797&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open &lt;code&gt;http://127.0.0.1:8797/&lt;/code&gt; and choose &lt;strong&gt;Try an example&lt;/strong&gt; followed by &lt;strong&gt;Make a steady digest&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/shivammusic/steady-inbox" rel="noopener noreferrer"&gt;github.com/shivammusic/steady-inbox&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository will include the application, pinned direct and tested dependency lists, model manifest and hashes, automated tests, MIT license, and third-party notices. Model weights are intentionally not committed.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The application is a Python 3.12 HTTP service with a dependency-free browser interface. It uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;sentence-transformers/all-MiniLM-L6-v2&lt;/code&gt; at pinned revision &lt;code&gt;1110a243fdf4706b3f48f1d95db1a4f5529b4d41&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;Hugging Face Tokenizers 0.22.1 for the pinned tokenizer;&lt;/li&gt;
&lt;li&gt;ONNX Runtime 1.23.2 for CPU inference;&lt;/li&gt;
&lt;li&gt;NumPy 2.3.3 for attention-mask-aware mean pooling, L2 normalization, and cosine similarity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each non-empty line receives a 384-dimensional embedding. The grouping rule is conservative complete-link clustering: every pair of messages in a proposed group must meet the chosen cosine-similarity threshold. That prevents A and C from being joined only because each resembles B. A group representative is one of the original messages—the item with the best average within-group similarity—rather than a generated summary.&lt;/p&gt;

&lt;p&gt;The model input is capped at 256 tokens, but the application keeps the complete source text and flags truncation. Inputs are capped at 100 messages and 1,500 characters per message.&lt;/p&gt;

&lt;p&gt;I verified the implementation with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\.venv\Scripts\python.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;unittest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-v&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;static\app.js&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All 10 Python tests passed on Windows 11. They cover real model inference, normalized 384-dimensional vectors, semantic paraphrases, unrelated notes, duplicate inputs, complete source preservation, truncation reporting, validation, and protection against similarity chaining. The JavaScript syntax check also passed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;The open-weight model is the feature, not decoration around a hosted API. Once its pinned files have been downloaded and verified, inference runs on the user's CPU. That gives someone a meaningful choice about where their pasted text is processed and lets a developer inspect or replace the tokenizer, weights, pooling logic, threshold, or grouping strategy.&lt;/p&gt;

&lt;p&gt;Steady Inbox does not need an API key, usage billing, or a cloud inference service. Its interface loads no third-party scripts, and its server binds to &lt;code&gt;127.0.0.1&lt;/code&gt;. Notes are held in browser memory and the local request; the app does not automatically write them to disk. Those choices do not make it a secure-erasure tool—browser state and operating-system memory still exist—and an initial network connection is required to download the pinned model files.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;The measured synthetic run reduced 9 lines to 6 groups for review while preserving all 9 originals. Three repeated items were grouped. I did not run a timed human baseline, so I am not claiming a number of minutes saved.&lt;/p&gt;

&lt;p&gt;The smaller payoff may be more important: the app proposes structure but never hides the evidence. A reviewer can expand a group, see exactly which original lines produced it, mark it reviewed, and export a Markdown digest.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
