<?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>Forem: Aditya Lagad</title>
    <description>The latest articles on Forem by Aditya Lagad (@adylagad).</description>
    <link>https://forem.com/adylagad</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%2F3740504%2F822b79d6-e5fb-4ac3-8526-6c1672472f42.jpeg</url>
      <title>Forem: Aditya Lagad</title>
      <link>https://forem.com/adylagad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/adylagad"/>
    <language>en</language>
    <item>
      <title>API Graveyard ☠️ - Where Dead APIs Go to REST</title>
      <dc:creator>Aditya Lagad</dc:creator>
      <pubDate>Fri, 06 Feb 2026 05:39:07 +0000</pubDate>
      <link>https://forem.com/adylagad/api-graveyard-by-cli-for-cli-ehj</link>
      <guid>https://forem.com/adylagad/api-graveyard-by-cli-for-cli-ehj</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;&lt;strong&gt;gh-api-graveyard&lt;/strong&gt; - A GitHub CLI extension that automatically finds and removes unused API endpoints from your OpenAPI specifications.&lt;/p&gt;

&lt;p&gt;🪦 The tool that cleans up dead endpoints so you don't have to.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem 🤔
&lt;/h3&gt;

&lt;p&gt;Over time, APIs accumulate "dead" endpoints - routes that were created but never used, deprecated features nobody calls anymore, or experimental endpoints that didn't pan out. These clutter your codebase, create maintenance burden, and confuse developers about what's actually in use.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution 💡
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;gh-api-graveyard&lt;/strong&gt; automates the entire cleanup process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Auto-discovers&lt;/strong&gt; your OpenAPI spec and access logs (no configuration needed!)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyzes&lt;/strong&gt; usage patterns with intelligent confidence scoring (0-100)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generates&lt;/strong&gt; detailed markdown reports with actionable insights&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creates&lt;/strong&gt; pull requests to remove high-confidence unused endpoints&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handles failures&lt;/strong&gt; gracefully with automatic rollback&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Key Features ⚡
&lt;/h3&gt;

&lt;p&gt;✨ &lt;strong&gt;Intelligent Auto-Discovery&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Searches common locations for OpenAPI specs&lt;/li&gt;
&lt;li&gt;Finds log files automatically (JSONL format)&lt;/li&gt;
&lt;li&gt;Reads optional &lt;code&gt;.graveyard.yml&lt;/code&gt; config file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🧠 &lt;strong&gt;Smart Analysis&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Path template matching (handles &lt;code&gt;/users/{id}&lt;/code&gt; patterns)&lt;/li&gt;
&lt;li&gt;Multi-factor confidence scoring (frequency, recency, caller diversity)&lt;/li&gt;
&lt;li&gt;Generates professional markdown reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🤖 &lt;strong&gt;Automated PR Creation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creates git branches with unique timestamps&lt;/li&gt;
&lt;li&gt;Commits spec changes&lt;/li&gt;
&lt;li&gt;Pushes to GitHub&lt;/li&gt;
&lt;li&gt;Creates detailed pull requests&lt;/li&gt;
&lt;li&gt;Automatic rollback on failure&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Simple Commands 💻
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install&lt;/span&gt;
gh extension &lt;span class="nb"&gt;install &lt;/span&gt;adylagad/gh-api-graveyard

&lt;span class="c"&gt;# Scan for unused endpoints&lt;/span&gt;
gh api-graveyard scan

&lt;span class="c"&gt;# Preview what would be removed&lt;/span&gt;
gh api-graveyard prune &lt;span class="nt"&gt;--dry-run&lt;/span&gt;

&lt;span class="c"&gt;# Create PR to remove unused endpoints&lt;/span&gt;
gh api-graveyard prune
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/adylagad/gh-api-graveyard" rel="noopener noreferrer"&gt;https://github.com/adylagad/gh-api-graveyard&lt;/a&gt;&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Installation &amp;amp; Setup 📦
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2Fs10ngokn7doaktlrivxw.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.amazonaws.com%2Fuploads%2Farticles%2Fs10ngokn7doaktlrivxw.png" alt="Installation" width="800" height="546"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Installing the extension is as simple as one command&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Scanning for Unused Endpoints 🔍
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2Fgzeapp6kcpud0vc4ua7x.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.amazonaws.com%2Fuploads%2Farticles%2Fgzeapp6kcpud0vc4ua7x.png" alt="Scan Command" width="800" height="529"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The scan command auto-discovers your files and analyzes usage&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Generated Report 📊
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2F2317z5tjan23xyj0fipn.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.amazonaws.com%2Fuploads%2Farticles%2F2317z5tjan23xyj0fipn.png" alt="Report" width="800" height="586"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Professional markdown reports with confidence scores and insights&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Dry Run Preview 👀
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2Fzfzx7scug1q65bf4zpb4.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.amazonaws.com%2Fuploads%2Farticles%2Fzfzx7scug1q65bf4zpb4.png" alt="Dry Run" width="800" height="502"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Preview exactly what will be removed before making changes&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Creating the PR 🔀
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2F5siy52wsln90yiia802i.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.amazonaws.com%2Fuploads%2Farticles%2F5siy52wsln90yiia802i.png" alt="Prune Execution" width="800" height="589"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Automated branch creation, commits, and PR generation&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Before &amp;amp; After ✨
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2F2zcs6iedwri5lrgr4blw.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.amazonaws.com%2Fuploads%2Farticles%2F2zcs6iedwri5lrgr4blw.png" alt="Before After" width="800" height="915"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Clean OpenAPI specs with unused endpoints removed&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Pull Request 🎯
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2Fskt6q78rauqlcwh3r7us.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.amazonaws.com%2Fuploads%2Farticles%2Fskt6q78rauqlcwh3r7us.png" alt="GitHub PR" width="800" height="649"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Detailed PRs with all the context your team needs&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Project:&lt;/strong&gt; &lt;a href="https://github.com/adylagad/gh-api-graveyard" rel="noopener noreferrer"&gt;https://github.com/adylagad/gh-api-graveyard&lt;/a&gt;&lt;/p&gt;


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

&lt;p&gt;Building &lt;strong&gt;gh-api-graveyard&lt;/strong&gt; was my first experience working entirely with GitHub Copilot CLI, and it completely changed how I think about development. Every single aspect of this project - from initial planning to final refactoring - was built through conversation with Copilot CLI.&lt;/p&gt;
&lt;h3&gt;
  
  
  How I Used Copilot CLI 🛠️
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Phase 1: Planning with &lt;code&gt;[[PLAN]]&lt;/code&gt; Mode&lt;/strong&gt; 📋&lt;/p&gt;

&lt;p&gt;I started by using plan mode to break down the project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[[PLAN]] Build a GitHub CLI extension that finds unused API endpoints
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copilot CLI helped me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design the module structure&lt;/li&gt;
&lt;li&gt;Identify required libraries (Click, PyYAML, GitPython)&lt;/li&gt;
&lt;li&gt;Plan the confidence scoring algorithm&lt;/li&gt;
&lt;li&gt;Create a step-by-step implementation roadmap&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Phase 2: Core Development&lt;/strong&gt; 💻&lt;/p&gt;

&lt;p&gt;For each feature, I described what I needed and Copilot CLI wrote the code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Parse OpenAPI YAML files and extract all endpoints"&lt;/li&gt;
&lt;li&gt;"Load JSONL log files and handle malformed entries gracefully"&lt;/li&gt;
&lt;li&gt;"Match concrete paths like /users/123 to templates like /users/{id}"&lt;/li&gt;
&lt;li&gt;"Calculate confidence scores based on frequency, recency, and caller diversity"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best part? When I asked for something, Copilot CLI didn't just write the function - it added proper error handling, type hints, and docstrings automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 3: Git Integration&lt;/strong&gt; 🔄&lt;/p&gt;

&lt;p&gt;Building the automated PR creation was complex, but Copilot CLI guided me through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Branch creation with unique timestamps&lt;/li&gt;
&lt;li&gt;GitPython operations&lt;/li&gt;
&lt;li&gt;PyGithub API integration&lt;/li&gt;
&lt;li&gt;Error recovery and rollback strategies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Phase 4: Bug Fixing &amp;amp; Refinement&lt;/strong&gt; 🐛&lt;/p&gt;

&lt;p&gt;This is where Copilot CLI really shined. I'd describe issues like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"When branch creation fails, the openapi file is already modified"&lt;/li&gt;
&lt;li&gt;"The command shows 'gh graveyard' but should be 'gh api-graveyard'"&lt;/li&gt;
&lt;li&gt;"If the branch already exists, it should create a unique name"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each time, Copilot CLI not only fixed the bug but suggested improvements I hadn't considered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 5: Refactoring&lt;/strong&gt; 🔨&lt;/p&gt;

&lt;p&gt;When I requested "Please refactor the project and organize functions into logical modules," Copilot CLI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyzed the entire codebase&lt;/li&gt;
&lt;li&gt;Split the monolithic &lt;code&gt;utils.py&lt;/code&gt; (455 lines) into focused modules&lt;/li&gt;
&lt;li&gt;Removed unused code (&lt;code&gt;analyzer.py&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Fixed all command references in README&lt;/li&gt;
&lt;li&gt;Updated imports across all files&lt;/li&gt;
&lt;li&gt;Tested everything still worked&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What Impressed Me Most 🌟
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Context Awareness&lt;/strong&gt; 🧠&lt;/p&gt;

&lt;p&gt;Copilot CLI maintained context across multiple sessions. It remembered architectural decisions from days ago and applied them consistently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Proactive Problem Solving&lt;/strong&gt; 🎯&lt;/p&gt;

&lt;p&gt;It didn't just do what I asked - it anticipated issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"We should check git status BEFORE modifying files, not after"&lt;/li&gt;
&lt;li&gt;"The function should return the actual branch name for proper cleanup"&lt;/li&gt;
&lt;li&gt;"Add generated reports to .gitignore"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. End-to-End Capability&lt;/strong&gt; 🚀&lt;/p&gt;

&lt;p&gt;From planning to documentation (yes, even this submission!), Copilot CLI handled everything. I never had to switch contexts or manually write boilerplate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Learning &amp;amp; Improving&lt;/strong&gt; 📈&lt;/p&gt;

&lt;p&gt;When testing revealed issues, I'd paste the error and Copilot CLI would:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explain what went wrong&lt;/li&gt;
&lt;li&gt;Fix the issue&lt;/li&gt;
&lt;li&gt;Add safeguards to prevent similar problems&lt;/li&gt;
&lt;li&gt;Suggest related improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Impact on My Development Experience 💫
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Speed:&lt;/strong&gt; What would normally take days took hours. The planning phase alone saved me significant time. ⚡&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; The code is cleaner than I would have written manually. Copilot CLI consistently added proper error handling, type hints, and documentation. ✨&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; Having an AI pair programmer that catches mistakes and suggests improvements made me more confident in trying ambitious features. 💪&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learning:&lt;/strong&gt; I learned best practices for CLI tools, Git automation, and Python project structure through Copilot CLI's suggestions. 📚&lt;/p&gt;

&lt;h3&gt;
  
  
  Specific Examples 🔍
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Before Copilot CLI (hypothetical manual approach):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;remove_endpoints&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;spec_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;endpoints&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Load file
&lt;/span&gt;    &lt;span class="c1"&gt;# Parse YAML
&lt;/span&gt;    &lt;span class="c1"&gt;# Remove endpoints
&lt;/span&gt;    &lt;span class="c1"&gt;# Save file
&lt;/span&gt;    &lt;span class="c1"&gt;# Hope nothing breaks
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;With Copilot CLI:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;remove_endpoints_from_spec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;spec_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;endpoints_to_remove&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Dict&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Remove endpoints from OpenAPI spec file.
    Returns: (success, message, count_removed)
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="c1"&gt;# Proper error handling
&lt;/span&gt;    &lt;span class="c1"&gt;# Atomic file operations
&lt;/span&gt;    &lt;span class="c1"&gt;# Clear return values
&lt;/span&gt;    &lt;span class="c1"&gt;# Comprehensive docstring
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The "Aha!" Moment 💡
&lt;/h3&gt;

&lt;p&gt;The biggest revelation came when debugging the git status issue. I described the problem: "The extension fails to create a branch, but I remain on main. When I run prune again, it reports the endpoints have already been removed."&lt;/p&gt;

&lt;p&gt;Copilot CLI immediately understood the race condition, suggested checking git status BEFORE modifying files, added rollback logic, and even updated the function signature to return the actual branch name for proper cleanup. That level of understanding was mind-blowing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges Overcome 🏆
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repository naming:&lt;/strong&gt; GitHub CLI extensions must start with &lt;code&gt;gh-&lt;/code&gt;. Copilot CLI helped rename the repo and update all references.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Path matching:&lt;/strong&gt; Needed to match &lt;code&gt;/users/123&lt;/code&gt; to &lt;code&gt;/users/{id}&lt;/code&gt;. Copilot CLI implemented a segment-based algorithm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confidence scoring:&lt;/strong&gt; Balancing multiple factors (frequency, recency, callers). Copilot CLI suggested a weighted approach.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rollback logic:&lt;/strong&gt; Complex error recovery. Copilot CLI implemented proper git rollback with branch cleanup.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Would I Use It Again? 🤔
&lt;/h3&gt;

&lt;p&gt;Absolutely. GitHub Copilot CLI isn't just a code generator - it's a knowledgeable pair programmer that understands context, anticipates problems, and suggests improvements. It made building a production-ready CLI extension feel like a conversation rather than a coding marathon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Even this submission document was written using GitHub Copilot CLI.&lt;/strong&gt; 🤖&lt;/p&gt;

&lt;p&gt;I asked: "I need to write a submission document. Can you help me with this?" and it created a comprehensive document. When I said "I've added the required template to template.txt file. Please reformat the submission according to that template," it reformatted everything to match perfectly.&lt;/p&gt;

&lt;p&gt;That's the magic of Copilot CLI - it adapts to your needs, learns your style, and delivers exactly what you ask for.&lt;/p&gt;




&lt;h2&gt;
  
  
  Technical Details 🔧
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Built with:&lt;/strong&gt; 🛠️&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.x 🐍&lt;/li&gt;
&lt;li&gt;Click (CLI framework) 💻&lt;/li&gt;
&lt;li&gt;PyYAML (OpenAPI parsing) 📄&lt;/li&gt;
&lt;li&gt;GitPython (Git automation) 🔄&lt;/li&gt;
&lt;li&gt;PyGithub (PR creation) 🔀&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Project Structure:&lt;/strong&gt; 📁&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gh-api-graveyard/
├── detector/
│   ├── cli.py           # CLI commands
│   ├── parsers.py       # OpenAPI &amp;amp; log parsing
│   ├── analysis.py      # Usage analysis
│   ├── reports.py       # Report generation
│   ├── spec_modifier.py # Spec modification
│   ├── git_ops.py       # Git operations
│   └── discovery.py     # Auto-discovery
└── samples/             # Example files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt; 📦&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gh extension &lt;span class="nb"&gt;install &lt;/span&gt;adylagad/gh-api-graveyard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;em&gt;Every line of code, every design decision, and this entire submission was created with GitHub Copilot CLI&lt;/em&gt; ✨&lt;/p&gt;

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