<?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: sampo shen</title>
    <description>The latest articles on DEV Community by sampo shen (@sampo_shen_d115ded5962104).</description>
    <link>https://dev.to/sampo_shen_d115ded5962104</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3750761%2Feabf7285-8780-480f-8f4c-38c525d39b40.png</url>
      <title>DEV Community: sampo shen</title>
      <link>https://dev.to/sampo_shen_d115ded5962104</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sampo_shen_d115ded5962104"/>
    <language>en</language>
    <item>
      <title>commit-story-generator — turn git commits into adventure stories + engineering release notes</title>
      <dc:creator>sampo shen</dc:creator>
      <pubDate>Wed, 11 Feb 2026 12:11:08 +0000</pubDate>
      <link>https://dev.to/sampo_shen_d115ded5962104/commit-story-generator-turn-git-commits-into-adventure-stories-engineering-release-notes-4k4o</link>
      <guid>https://dev.to/sampo_shen_d115ded5962104/commit-story-generator-turn-git-commits-into-adventure-stories-engineering-release-notes-4k4o</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;commit-story-generator&lt;/strong&gt;, a cross-platform CLI that turns git commit history into two copy/paste-ready narratives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Adventure style&lt;/strong&gt; (release story with chapters)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engineering style&lt;/strong&gt; (PR/release summary with risk/validation/rollback)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It can also emit a categorized changelog (feat/fix/refactor/docs/test/chore) and basic stats.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/aisamposhen/commit-story-generator" rel="noopener noreferrer"&gt;https://github.com/aisamposhen/commit-story-generator&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Reproducible 90-second demo (no git needed):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; .[test]

story template
story generate &lt;span class="nt"&gt;--fixture&lt;/span&gt; &lt;span class="nt"&gt;--style&lt;/span&gt; adventure &lt;span class="nt"&gt;--format&lt;/span&gt; md &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
story release-notes &lt;span class="nt"&gt;--fixture&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; md &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
story changelog &lt;span class="nt"&gt;--fixture&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; md &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
story stats &lt;span class="nt"&gt;--fixture&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; md &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;I used Copilot CLI as a terminal-first pair programmer to iterate module-by-module:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A robust git log reader (using record/field separators to avoid breaking on newlines)&lt;/li&gt;
&lt;li&gt;Parser + classifier (feat/fix/refactor/docs/test/chore)&lt;/li&gt;
&lt;li&gt;Story templates (adventure + engineering) with traceable short SHAs&lt;/li&gt;
&lt;li&gt;Markdown + JSON rendering&lt;/li&gt;
&lt;li&gt;Pytest coverage and CI matrix (Python 3.11 + 3.14)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest win was tight feedback loops: prompt → run tests → refine behavior and UX.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>terminal-escape-room — a tiny CLI escape room game (Python + Typer)</title>
      <dc:creator>sampo shen</dc:creator>
      <pubDate>Tue, 10 Feb 2026 22:39:53 +0000</pubDate>
      <link>https://dev.to/sampo_shen_d115ded5962104/terminal-escape-room-a-tiny-cli-escape-room-game-python-typer-21k7</link>
      <guid>https://dev.to/sampo_shen_d115ded5962104/terminal-escape-room-a-tiny-cli-escape-room-game-python-typer-21k7</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;terminal-escape-room&lt;/strong&gt;, a cross-platform &lt;strong&gt;CLI text escape-room game&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You progress through rooms defined in JSON, request up to 2 hints per room, submit answers, earn points (with hint penalties), and your progress is persisted locally to a &lt;code&gt;.escape_state.json&lt;/code&gt; save file.&lt;/p&gt;

&lt;p&gt;Tech stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.11+&lt;/li&gt;
&lt;li&gt;Typer (CLI)&lt;/li&gt;
&lt;li&gt;Rich (output)&lt;/li&gt;
&lt;li&gt;Pytest (tests)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/aisamposhen/terminal-escape-room" rel="noopener noreferrer"&gt;https://github.com/aisamposhen/terminal-escape-room&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Quick run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv
&lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; .[test]

escape start
escape status
escape hint
escape answer &lt;span class="s2"&gt;"kernel"&lt;/span&gt;
escape reset
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;90-second demo outline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;escape start
escape status
escape hint
escape answer &lt;span class="s2"&gt;"kernel"&lt;/span&gt;
escape answer &lt;span class="s2"&gt;"^"&lt;/span&gt;
escape answer &lt;span class="s2"&gt;"git switch -c feature"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;I used &lt;strong&gt;GitHub Copilot CLI&lt;/strong&gt; as a terminal-first pair programmer to iterate quickly on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Typer command structure (&lt;code&gt;start/status/hint/answer/reset&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;A small engine layer (room progression + hint limits)&lt;/li&gt;
&lt;li&gt;A stable JSON persistence schema (&lt;code&gt;started_at&lt;/code&gt;/&lt;code&gt;finished_at&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Scoring rules + tests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What worked well was keeping prompts very specific (inputs/outputs, edge cases, and file boundaries), then immediately locking changes in with pytest.&lt;/p&gt;

&lt;p&gt;Example workflow that felt effective:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ask Copilot CLI for a first-pass implementation (focused on one module at a time)&lt;/li&gt;
&lt;li&gt;Run tests&lt;/li&gt;
&lt;li&gt;Ask Copilot CLI to generate/adjust tests to cover an edge case&lt;/li&gt;
&lt;li&gt;Refactor once the behavior is pinned&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to try it locally, everything is self-contained and requires no external services.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>PatchPilot: Run Copilot diff apply verify (Copilot CLI Challenge)</title>
      <dc:creator>sampo shen</dc:creator>
      <pubDate>Tue, 10 Feb 2026 12:17:38 +0000</pubDate>
      <link>https://dev.to/sampo_shen_d115ded5962104/patchpilot-run-copilot-diff-apply-verify-copilot-cli-challenge-366k</link>
      <guid>https://dev.to/sampo_shen_d115ded5962104/patchpilot-run-copilot-diff-apply-verify-copilot-cli-challenge-366k</guid>
      <description>&lt;p&gt;&lt;em&gt;This is my submission for the GitHub Copilot CLI Challenge.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;PatchPilot&lt;/strong&gt;, a small command-line tool that closes the loop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;run a failing build/test command&lt;/li&gt;
&lt;li&gt;ask &lt;strong&gt;GitHub Copilot CLI&lt;/strong&gt; to make the &lt;strong&gt;smallest&lt;/strong&gt; fix inside the repo&lt;/li&gt;
&lt;li&gt;capture a real &lt;code&gt;git diff&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;re-run the same command to verify it’s green&lt;/li&gt;
&lt;li&gt;write a short report you can share/review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/aisamposhen/patchpilot" rel="noopener noreferrer"&gt;https://github.com/aisamposhen/patchpilot&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it’s useful
&lt;/h2&gt;

&lt;p&gt;A lot of “AI in terminal” demos stop at suggestions. PatchPilot is opinionated: &lt;strong&gt;no celebration until the command actually passes again&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This makes it great for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;quickly unblocking on small test/build failures&lt;/li&gt;
&lt;li&gt;creating minimal, reviewable patches&lt;/li&gt;
&lt;li&gt;teaching the habit of verifying fixes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo (90 seconds)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# install (dev)&lt;/span&gt;
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv
&lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# run the intentionally broken sample project&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;sample_projects/python_pytest_broken
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
patchpilot run &lt;span class="nt"&gt;--show-prompts&lt;/span&gt; &lt;span class="nt"&gt;--branch&lt;/span&gt; patchpilot/demo &lt;span class="nt"&gt;--&lt;/span&gt; pytest &lt;span class="nt"&gt;-q&lt;/span&gt;

&lt;span class="c"&gt;# view the generated report&lt;/span&gt;
&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s1"&gt;'1,140p'&lt;/span&gt; PATCHPILOT_REPORT.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How I used Copilot CLI (explicit)
&lt;/h2&gt;

&lt;p&gt;PatchPilot calls Copilot CLI non-interactively via &lt;code&gt;gh copilot&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The key design choice is that Copilot edits the repo &lt;strong&gt;in-place&lt;/strong&gt; (with permission restricted to the repo directory), and PatchPilot then captures the patch using &lt;code&gt;git diff&lt;/code&gt;. That keeps the result audit-friendly.&lt;/p&gt;

&lt;p&gt;Example (simplified):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gh copilot &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;--add-dir&lt;/span&gt; &amp;lt;repo&amp;gt; &lt;span class="nt"&gt;--allow-all-tools&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"...make pytest -q pass..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  UX / safety
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Requires a clean worktree before running (so diffs are trustworthy)&lt;/li&gt;
&lt;li&gt;Creates a new branch (defaults to &lt;code&gt;patchpilot/fix&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Never pushes automatically&lt;/li&gt;
&lt;li&gt;Stops after one attempt (keeps it predictable)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;p&gt;If I had more time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;add one retry loop (bounded)&lt;/li&gt;
&lt;li&gt;optional &lt;code&gt;gh pr create&lt;/code&gt; to open a PR with the report&lt;/li&gt;
&lt;li&gt;support multiple languages/framework templates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>cli</category>
      <category>devchallenge</category>
      <category>ai</category>
      <category>github</category>
    </item>
    <item>
      <title>cdoctor: a tiny CMake C 'code doctor' built with GitHub Copilot CLI</title>
      <dc:creator>sampo shen</dc:creator>
      <pubDate>Tue, 03 Feb 2026 13:59:18 +0000</pubDate>
      <link>https://dev.to/sampo_shen_d115ded5962104/cdoctor-a-tiny-cmake-c-code-doctor-built-with-github-copilot-cli-24gg</link>
      <guid>https://dev.to/sampo_shen_d115ded5962104/cdoctor-a-tiny-cmake-c-code-doctor-built-with-github-copilot-cli-24gg</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;.&lt;/em&gt; &lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;cdoctor&lt;/strong&gt;, a small CLI + CMake-based sample project designed to make C/C++ build/debug loops faster.&lt;/p&gt;

&lt;p&gt;The idea: run one command, get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a clean build attempt&lt;/li&gt;
&lt;li&gt;a readable summary of warnings/errors&lt;/li&gt;
&lt;li&gt;a proposed minimal patch (diff)&lt;/li&gt;
&lt;li&gt;a re-run to confirm the fix&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Repo: &lt;a href="https://github.com/raungeguieia/cdoctor" rel="noopener noreferrer"&gt;https://github.com/raungeguieia/cdoctor&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quick demo (copy/paste):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cmake &lt;span class="nt"&gt;-S&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;-B&lt;/span&gt; build
cmake &lt;span class="nt"&gt;--build&lt;/span&gt; build
./build/cdoctor &lt;span class="nt"&gt;--help&lt;/span&gt;
./build/cdoctor scan sample_project/src/warn.c
ctest &lt;span class="nt"&gt;--test-dir&lt;/span&gt; build &lt;span class="nt"&gt;--output-on-failure&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;I used &lt;strong&gt;Copilot CLI&lt;/strong&gt; in the terminal to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;summarize compiler output into actionable steps&lt;/li&gt;
&lt;li&gt;propose patches for common C/CMake problems&lt;/li&gt;
&lt;li&gt;generate small functions/tests quickly (then I reviewed and adjusted)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example prompts I used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Given this CMake/clang error, propose the smallest fix as a git diff.”&lt;/li&gt;
&lt;li&gt;“Add directory recursion to scan all .c/.h files on macOS+Linux.”&lt;/li&gt;
&lt;li&gt;“Write a CTest smoke test for the CLI.”&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Notes for Judges
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;This is intentionally small and easy to run.&lt;/li&gt;
&lt;li&gt;The sample project includes an intentional warning to prove the pipeline works.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>cli</category>
      <category>githubchallenge</category>
      <category>githubcopilot</category>
    </item>
  </channel>
</rss>
