Create Issue

Create a well-structured GitHub issue with duplicate detection, code verification, and auto-labeling

guplem 1 updated 29d ago
Claude CodeGeneric
View source ↗
---
name: create-issue
description: Create a well-structured GitHub issue with duplicate detection, code verification, and auto-labeling
argument-hint: [brief description]
---

# Interactive Issue Creation

Create a GitHub issue with a standardized structure, duplicate detection, code verification, and auto-labeling.

## 1. Gather Initial Context

### 1a. Determine the starting input

- If `$ARGUMENTS` contains a text description, use it as the initial context.
- If `$ARGUMENTS` is empty, ask using `AskUserQuestion`:
  > "Describe the issue you want to create. A sentence or two is enough -- I'll help structure it."

### 1b. Ask for additional context

Ask using `AskUserQuestion`:

> "Do you have any links with additional context (e.g., error logs, screenshots, related discussions)?"

Options:
1. **Yes, here's a link** - The user will paste a URL.
2. **No, let's continue with what I described** - Proceed without external context.

## 2. Deep Understanding -- Clarify Until Crystal Clear

**This step is mandatory and must not be skipped.** Before moving forward, you must be fully confident that you understand exactly what the user wants.

### 2a. Summarize your understanding

Write a short, concrete summary of:
- **What** the user is describing (the problem, feature, or improvement)
- **Why** it matters (impact, who is affected, what breaks or is missing)
- **Where** in the system it applies (which feature domains, widgets, providers, or models)

### 2b. Identify gaps and ambiguities

Critically evaluate your summary. Ask yourself:
- Could this description mean two different things?
- Is the scope clear -- do I know what's in and what's out?
- For bugs: Do I know the exact reproduction path, or am I guessing?
- For features/improvements: Do I know the desired behavior precisely, or is it vague?

### 2c. Ask clarifying questions (repeat until clear)

If **any** gap or ambiguity exists, ask clarifying questions. **Ask one question at a time** using `AskUserQuestion` with options when applicable. Do not proceed until every question is answered. Common clarifications:

- "When you say X, do you mean A or B?"
- "What is the expected behavior? What should happen instead?"
- "Is this limited to [feature domain], or does it affect other areas too?"
- "Can you give me a concrete example or scenario?"

**Rules for this step:**
- **One question at a time.** Never dump multiple questions in a single message.
- **Never assume.** If something could be interpreted two ways, ask.
- **Iterate.** If the user's answer raises new questions, ask those too.
- **Don't interrogate unnecessarily.** If the description is genuinely clear, a brief confirmation is enough.

Once you are confident you understand the issue completely, proceed to Step 3.

## 3. Determine Issue Type

Analyze the combined context and infer the issue type:

- **Bug** - Something is broken or behaving incorrectly
- **Feature** - A new capability that doesn't exist yet
- **Improvement** - Enhancement to an existing feature
- **Task** - Refactors, chores, and other specific pieces of work

Only ask using `AskUserQuestion` if the type is truly ambiguous. Otherwise, infer silently and confirm later in the combined review (Step 8).

Store the selected type as `ISSUE_TYPE`.

## 4. Investigate the Codebase

Before structuring the issue, investigate the relevant code:

1. **Identify affected areas**: Determine which feature domains (ingredients, recipes, menu, shopping, theme, flutter_essentials) are involved.
2. **Search the codebase**: Find the relevant code paths, providers, models, and widgets.
3. **For bugs**: Verify the bug actually exists in the current code. If the code looks correct:
   - Report to the user: "I checked the code and this appears to already be handled in `<file>:<line>`. Are you sure you want to create this issue?"
   - If the user confirms, proceed. If not, stop.
4. **For features/improvements**: Identify the existing code that would need to change, and any patterns already in place. Run the **pattern-scout** agent if a new pattern is being introduced.
5. **Check relevant ADRs**: Run the **adr-checker** agent in consult mode to find ADRs that affect the planned work.

Store findings as `CODE_CONTEXT`.

## 5. Search for Duplicates and Related Issues

### 5a. Search open issues

```bash
gh issue list --state open --limit 100 --json number,title,labels,body

5b. Search recently closed issues

gh issue list --state closed --limit 50 --json number,title,labels,body

5c. Analyze matches

Compare the new issue's intent against fetched issues. Look for:

  • Exact duplicates: Same problem described differently.
  • Related issues: Issues that touch the same area or feature.
  • Closed duplicates: Issues that were already resolved.

5d. Report findings

If likely duplicates are found:

Ask using AskUserQuestion:

"I found an existing issue that looks like it covers the same problem:

  • # - (<STATE>)</li> </ul> <p>What would you like to do?"</p> </blockquote> <p>Options:</p> <ol> <li><strong>It's a duplicate, stop</strong> - Do not create the issue.</li> <li><strong>It's related but different, link it</strong> - Create the new issue and reference the existing one.</li> <li><strong>Ignore, create anyway</strong> - Proceed without linking.</li> </ol> <p><strong>If related (but not duplicate) issues are found:</strong></p> <p>Present them:</p> <blockquote> <p>"I found some related issues: #X, #Y. I'll reference them in the new issue."</p> </blockquote> <p>Store related issue numbers as <code>RELATED_ISSUES</code>.</p> <h2>6. Auto-Detect Labels</h2> <p>Based on the issue description, code investigation, and type, select labels.</p> <h3>6a. Feature domain labels (select all that apply)</h3> <p>Map affected code paths to labels:</p> <table> <thead> <tr> <th>Code path pattern</th> <th>Label</th> </tr> </thead> <tbody><tr> <td><code>ingredients/</code></td> <td><code>ingredients</code></td> </tr> <tr> <td><code>recipes/</code></td> <td><code>recipes</code></td> </tr> <tr> <td><code>menu/</code>, <code>menu_generator</code></td> <td><code>menu</code></td> </tr> <tr> <td><code>shopping/</code></td> <td><code>shopping</code></td> </tr> <tr> <td><code>flutter_essentials/</code></td> <td><code>utilities</code></td> </tr> <tr> <td><code>theme/</code></td> <td><code>theme</code></td> </tr> <tr> <td><code>persistency</code></td> <td><code>persistence</code></td> </tr> </tbody></table> <h3>6b. Priority label (infer one)</h3> <ul> <li><strong>P: High</strong> - App crashes, data loss, core fea</li> </ul> <pre><code> </code></pre> </div> <textarea data-body-src hidden data-astro-cid-2e7mcdih>```md --- name: create-issue description: Create a well-structured GitHub issue with duplicate detection, code verification, and auto-labeling argument-hint: [brief description] --- # Interactive Issue Creation Create a GitHub issue with a standardized structure, duplicate detection, code verification, and auto-labeling. ## 1. Gather Initial Context ### 1a. Determine the starting input - If `$ARGUMENTS` contains a text description, use it as the initial context. - If `$ARGUMENTS` is empty, ask using `AskUserQuestion`: > "Describe the issue you want to create. A sentence or two is enough -- I'll help structure it." ### 1b. Ask for additional context Ask using `AskUserQuestion`: > "Do you have any links with additional context (e.g., error logs, screenshots, related discussions)?" Options: 1. **Yes, here's a link** - The user will paste a URL. 2. **No, let's continue with what I described** - Proceed without external context. ## 2. Deep Understanding -- Clarify Until Crystal Clear **This step is mandatory and must not be skipped.** Before moving forward, you must be fully confident that you understand exactly what the user wants. ### 2a. Summarize your understanding Write a short, concrete summary of: - **What** the user is describing (the problem, feature, or improvement) - **Why** it matters (impact, who is affected, what breaks or is missing) - **Where** in the system it applies (which feature domains, widgets, providers, or models) ### 2b. Identify gaps and ambiguities Critically evaluate your summary. Ask yourself: - Could this description mean two different things? - Is the scope clear -- do I know what's in and what's out? - For bugs: Do I know the exact reproduction path, or am I guessing? - For features/improvements: Do I know the desired behavior precisely, or is it vague? ### 2c. Ask clarifying questions (repeat until clear) If **any** gap or ambiguity exists, ask clarifying questions. **Ask one question at a time** using `AskUserQuestion` with options when applicable. Do not proceed until every question is answered. Common clarifications: - "When you say X, do you mean A or B?" - "What is the expected behavior? What should happen instead?" - "Is this limited to [feature domain], or does it affect other areas too?" - "Can you give me a concrete example or scenario?" **Rules for this step:** - **One question at a time.** Never dump multiple questions in a single message. - **Never assume.** If something could be interpreted two ways, ask. - **Iterate.** If the user's answer raises new questions, ask those too. - **Don't interrogate unnecessarily.** If the description is genuinely clear, a brief confirmation is enough. Once you are confident you understand the issue completely, proceed to Step 3. ## 3. Determine Issue Type Analyze the combined context and infer the issue type: - **Bug** - Something is broken or behaving incorrectly - **Feature** - A new capability that doesn't exist yet - **Improvement** - Enhancement to an existing feature - **Task** - Refactors, chores, and other specific pieces of work Only ask using `AskUserQuestion` if the type is truly ambiguous. Otherwise, infer silently and confirm later in the combined review (Step 8). Store the selected type as `ISSUE_TYPE`. ## 4. Investigate the Codebase Before structuring the issue, investigate the relevant code: 1. **Identify affected areas**: Determine which feature domains (ingredients, recipes, menu, shopping, theme, flutter_essentials) are involved. 2. **Search the codebase**: Find the relevant code paths, providers, models, and widgets. 3. **For bugs**: Verify the bug actually exists in the current code. If the code looks correct: - Report to the user: "I checked the code and this appears to already be handled in `<file>:<line>`. Are you sure you want to create this issue?" - If the user confirms, proceed. If not, stop. 4. **For features/improvements**: Identify the existing code that would need to change, and any patterns already in place. Run the **pattern-scout** agent if a new pattern is being introduced. 5. **Check relevant ADRs**: Run the **adr-checker** agent in consult mode to find ADRs that affect the planned work. Store findings as `CODE_CONTEXT`. ## 5. Search for Duplicates and Related Issues ### 5a. Search open issues ```bash gh issue list --state open --limit 100 --json number,title,labels,body ``` ### 5b. Search recently closed issues ```bash gh issue list --state closed --limit 50 --json number,title,labels,body ``` ### 5c. Analyze matches Compare the new issue's intent against fetched issues. Look for: - **Exact duplicates**: Same problem described differently. - **Related issues**: Issues that touch the same area or feature. - **Closed duplicates**: Issues that were already resolved. ### 5d. Report findings **If likely duplicates are found:** Ask using `AskUserQuestion`: > "I found an existing issue that looks like it covers the same problem: > - #<NUMBER> - <TITLE> (<STATE>) > > What would you like to do?" Options: 1. **It's a duplicate, stop** - Do not create the issue. 2. **It's related but different, link it** - Create the new issue and reference the existing one. 3. **Ignore, create anyway** - Proceed without linking. **If related (but not duplicate) issues are found:** Present them: > "I found some related issues: #X, #Y. I'll reference them in the new issue." Store related issue numbers as `RELATED_ISSUES`. ## 6. Auto-Detect Labels Based on the issue description, code investigation, and type, select labels. ### 6a. Feature domain labels (select all that apply) Map affected code paths to labels: | Code path pattern | Label | |---|---| | `ingredients/` | `ingredients` | | `recipes/` | `recipes` | | `menu/`, `menu_generator` | `menu` | | `shopping/` | `shopping` | | `flutter_essentials/` | `utilities` | | `theme/` | `theme` | | `persistency` | `persistence` | ### 6b. Priority label (infer one) - **P: High** - App crashes, data loss, core fea ```</textarea> <aside class="pb-card" data-pagefind-ignore data-astro-cid-bllr6etr> <svg class="pb-motif" width="54" height="54" viewBox="0 0 150 150" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-astro-cid-bllr6etr> <line x1="75" y1="45" x2="75" y2="18" stroke="var(--color-border-hi)" stroke-width="6" data-astro-cid-bllr6etr></line> <line x1="75" y1="105" x2="75" y2="132" stroke="var(--color-border-hi)" stroke-width="6" data-astro-cid-bllr6etr></line> <line x1="45" y1="75" x2="18" y2="75" stroke="var(--color-border-hi)" stroke-width="6" data-astro-cid-bllr6etr></line> <line x1="105" y1="75" x2="132" y2="75" stroke="var(--color-border-hi)" stroke-width="6" data-astro-cid-bllr6etr></line> <rect x="53" y="53" width="44" height="44" rx="8" fill="var(--color-accent)" data-astro-cid-bllr6etr></rect> <rect x="53" y="2" width="44" height="26" rx="7" fill="none" stroke="var(--color-border-hi)" stroke-width="6" data-astro-cid-bllr6etr></rect> <rect x="53" y="122" width="44" height="26" rx="7" fill="none" stroke="var(--color-border-hi)" stroke-width="6" data-astro-cid-bllr6etr></rect> <rect x="2" y="62" width="26" height="26" rx="7" fill="none" stroke="var(--color-border-hi)" stroke-width="6" data-astro-cid-bllr6etr></rect> <rect x="122" y="62" width="26" height="26" rx="7" fill="none" stroke="var(--color-border-hi)" stroke-width="6" data-astro-cid-bllr6etr></rect> </svg> <div class="pb-text" data-astro-cid-bllr6etr> <p class="pb-title" data-astro-cid-bllr6etr>The Agentic Coding Playbook</p> <p class="pb-sub" data-astro-cid-bllr6etr>Skills, MCPs, loops & guardrails — a free 22-page playbook on engineering the system around the model.</p> </div> <a class="pb-btn" href="/playbook" data-astro-cid-bllr6etr>Get it free →</a> </aside> <section class="badge-cta" data-astro-cid-2e7mcdih> <h2 data-astro-cid-2e7mcdih>Maintain Create Issue?</h2> <p data-astro-cid-2e7mcdih>Let people know it's listed here — add the badge (live metrics, light/dark aware) or a plain link to your README or docs.</p> <div class="badge-snippet" data-astro-cid-2e7mcdih> <code data-astro-cid-2e7mcdih>[Create Issue on getagentictools](https://getagentictools.com/loops/guplem-interactive-issue-creation?ref=badge)</code> <button class="btn" data-copy="[Create Issue on getagentictools](https://getagentictools.com/loops/guplem-interactive-issue-creation?ref=badge)" data-astro-cid-2e7mcdih>Copy</button> </div> </section> <section class="related" data-astro-cid-2e7mcdih> <h2 data-astro-cid-2e7mcdih>Related loops</h2> <div class="grid" data-astro-cid-2e7mcdih> <a href="/loops/farhanrhine-spec-feature-title" class="card " data-astro-cid-yk5uq4gt> <div class="card-top" data-astro-cid-yk5uq4gt> <img class="avatar" src="https://github.com/farhanrhine.png?size=80" alt="" loading="lazy" width="34" height="34" data-astro-cid-yk5uq4gt> <span class="name" data-astro-cid-yk5uq4gt>Create Spec</span> </div> <p class="desc" data-astro-cid-yk5uq4gt>Create a spec file and feature branch for the next Finlo step</p> <div class="meta" data-astro-cid-yk5uq4gt> <span class="stars" data-astro-cid-yk5uq4gt><svg width="11" height="11" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" data-astro-cid-yk5uq4gt><path d="M8 0l2.2 5.4L16 5.9l-4.4 3.7L13 15.3 8 12.2 3 15.3l1.4-5.7L0 5.9l5.8-.5z" data-astro-cid-yk5uq4gt></path></svg>1</span> </div> </a><a href="/loops/himanshudube97-design" class="card " data-astro-cid-yk5uq4gt> <div class="card-top" data-astro-cid-yk5uq4gt> <img class="avatar" src="https://github.com/himanshudube97.png?size=80" alt="" loading="lazy" width="34" height="34" data-astro-cid-yk5uq4gt> <span class="name" data-astro-cid-yk5uq4gt>Design</span> </div> <p class="desc" data-astro-cid-yk5uq4gt>Polish the UI of a screen — render it, screenshot on two themes, critique against Hearth's design bar, and iterate until it looks…</p> <div class="meta" data-astro-cid-yk5uq4gt> <span class="stars" data-astro-cid-yk5uq4gt><svg width="11" height="11" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" data-astro-cid-yk5uq4gt><path d="M8 0l2.2 5.4L16 5.9l-4.4 3.7L13 15.3 8 12.2 3 15.3l1.4-5.7L0 5.9l5.8-.5z" data-astro-cid-yk5uq4gt></path></svg>1</span> </div> </a><a href="/loops/meganharrison-design-system-fix-loop-autonomous" class="card " data-astro-cid-yk5uq4gt> <div class="card-top" data-astro-cid-yk5uq4gt> <img class="avatar" src="https://github.com/MeganHarrison.png?size=80" alt="" loading="lazy" width="34" height="34" data-astro-cid-yk5uq4gt> <span class="name" data-astro-cid-yk5uq4gt>Design Fix Loop</span> </div> <p class="desc" data-astro-cid-yk5uq4gt>Autonomous fix-and-verify loop that fixes violations without user intervention.</p> <div class="meta" data-astro-cid-yk5uq4gt> <span class="stars" data-astro-cid-yk5uq4gt><svg width="11" height="11" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" data-astro-cid-yk5uq4gt><path d="M8 0l2.2 5.4L16 5.9l-4.4 3.7L13 15.3 8 12.2 3 15.3l1.4-5.7L0 5.9l5.8-.5z" data-astro-cid-yk5uq4gt></path></svg>1</span> </div> </a><a href="/loops/mikeebuilds-design-shell" class="card " data-astro-cid-yk5uq4gt> <div class="card-top" data-astro-cid-yk5uq4gt> <img class="avatar" src="https://github.com/MikeeBuilds.png?size=80" alt="" loading="lazy" width="34" height="34" data-astro-cid-yk5uq4gt> <span class="name" data-astro-cid-yk5uq4gt>Design Shell</span> </div> <p class="desc" data-astro-cid-yk5uq4gt>Design persistent application shell for SwiftUI apps</p> <div class="meta" data-astro-cid-yk5uq4gt> <span class="stars" data-astro-cid-yk5uq4gt><svg width="11" height="11" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" data-astro-cid-yk5uq4gt><path d="M8 0l2.2 5.4L16 5.9l-4.4 3.7L13 15.3 8 12.2 3 15.3l1.4-5.7L0 5.9l5.8-.5z" data-astro-cid-yk5uq4gt></path></svg>1</span> </div> </a><a href="/loops/yarlson-ci-with-pr" class="card " data-astro-cid-yk5uq4gt> <div class="card-top" data-astro-cid-yk5uq4gt> <img class="avatar" src="https://github.com/yarlson.png?size=80" alt="" loading="lazy" width="34" height="34" data-astro-cid-yk5uq4gt> <span class="name" data-astro-cid-yk5uq4gt>Ci With Pr</span> </div> <p class="desc" data-astro-cid-yk5uq4gt>Create a branch, commit, push, open a draft PR, wait for CI, fix if red, iterate until green</p> <div class="meta" data-astro-cid-yk5uq4gt> <span class="stars" data-astro-cid-yk5uq4gt><svg width="11" height="11" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" data-astro-cid-yk5uq4gt><path d="M8 0l2.2 5.4L16 5.9l-4.4 3.7L13 15.3 8 12.2 3 15.3l1.4-5.7L0 5.9l5.8-.5z" data-astro-cid-yk5uq4gt></path></svg>1</span> </div> </a><a href="/loops/openanalystinc-cook" class="card " data-astro-cid-yk5uq4gt> <div class="card-top" data-astro-cid-yk5uq4gt> <img class="avatar" src="https://github.com/OpenAnalystInc.png?size=80" alt="" loading="lazy" width="34" height="34" data-astro-cid-yk5uq4gt> <span class="name" data-astro-cid-yk5uq4gt>Cook</span> </div> <p class="desc" data-astro-cid-yk5uq4gt>💡💡💡 Implement a feature [step by step]</p> <div class="meta" data-astro-cid-yk5uq4gt> <span class="stars" data-astro-cid-yk5uq4gt><svg width="11" height="11" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" data-astro-cid-yk5uq4gt><path d="M8 0l2.2 5.4L16 5.9l-4.4 3.7L13 15.3 8 12.2 3 15.3l1.4-5.7L0 5.9l5.8-.5z" data-astro-cid-yk5uq4gt></path></svg>1</span> </div> </a> </div> </section> </article> </main> <footer class="foot" data-pagefind-ignore data-astro-cid-gcn2mc3v> <div class="wrap foot-inner" data-astro-cid-gcn2mc3v> <div class="foot-brand" data-astro-cid-gcn2mc3v> <span class="brand-name" data-astro-cid-gcn2mc3v>getagentictools</span> <p data-astro-cid-gcn2mc3v>The #1 directory for skills, plugins, loops & MCPs in agentic coding. Curated, with real metrics.</p> <p class="disclaimer" data-astro-cid-gcn2mc3v>Independent project. Not affiliated with Anthropic.</p> </div> <div class="foot-col" data-astro-cid-gcn2mc3v> <h4 data-astro-cid-gcn2mc3v>Browse</h4> <a href="/skills" data-astro-cid-gcn2mc3v>Skills</a><a href="/mcp" data-astro-cid-gcn2mc3v>MCP</a><a href="/loops" data-astro-cid-gcn2mc3v>Loops</a><a href="/plugins" data-astro-cid-gcn2mc3v>Plugins</a> </div> <div class="foot-col" data-astro-cid-gcn2mc3v> <h4 data-astro-cid-gcn2mc3v>More</h4> <a href="/digest" data-astro-cid-gcn2mc3v>Digest</a> <a href="/playbook" data-astro-cid-gcn2mc3v>Playbook</a> <a href="/about" data-astro-cid-gcn2mc3v>About</a> <a href="/advertise" data-astro-cid-gcn2mc3v>Advertise</a> </div> </div> <div class="wrap foot-bottom" data-astro-cid-gcn2mc3v> <span data-astro-cid-gcn2mc3v>© 2026 getagentictools</span> </div> </footer> <div class="palette" data-palette hidden data-astro-cid-xao2j2xx> <div class="palette-backdrop" data-palette-close data-astro-cid-xao2j2xx></div> <div class="palette-box" role="dialog" aria-modal="true" aria-label="Search" data-astro-cid-xao2j2xx> <div class="palette-input-row" data-astro-cid-xao2j2xx> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" data-astro-cid-xao2j2xx><circle cx="11" cy="11" r="7" data-astro-cid-xao2j2xx></circle><path d="m21 21-4.3-4.3" data-astro-cid-xao2j2xx></path></svg> <input type="search" placeholder="Search skills, plugins, MCP servers, loops…" data-palette-input autocomplete="off" data-astro-cid-xao2j2xx> <kbd data-astro-cid-xao2j2xx>esc</kbd> </div> <div class="palette-results" data-palette-results data-astro-cid-xao2j2xx> <p class="palette-hint" data-astro-cid-xao2j2xx>Type to search across the whole catalog.</p> </div> </div> </div> <script type="module">const r=document.querySelector("[data-palette]"),o=document.querySelector("[data-palette-input]"),u=document.querySelector("[data-palette-results]");let n=null,s;const d="Type to search across the whole catalog.",a=e=>{u.innerHTML=`<p class="palette-hint">${e}</p>`};async function p(){if(n)return n;try{return n=await import("/pagefind/pagefind.js"),await n.options?.({excerptLength:15}),n}catch{return null}}function f(){r.hidden=!1,document.body.style.overflow="hidden",o.focus(),p()}function c(){r.hidden=!0,document.body.style.overflow="",o.value="",a(d)}document.querySelectorAll("[data-search-open]").forEach(e=>e.addEventListener("click",f));document.querySelectorAll("[data-palette-close]").forEach(e=>e.addEventListener("click",c));document.addEventListener("keydown",e=>{(e.metaKey||e.ctrlKey)&&e.key==="k"&&(e.preventDefault(),r.hidden?f():c()),e.key==="Escape"&&!r.hidden&&c()});async function y(e){const l=await p();if(!l){a("Search is available on the deployed site.");return}if(!e.trim()){a(d);return}const h=await l.search(e),i=await Promise.all(h.results.slice(0,8).map(t=>t.data()));if(!i.length){a("No results.");return}u.innerHTML=i.map(t=>`<a class="p-result" href="${t.url}"><h4>${t.meta?.title??t.url}</h4><p>${t.excerpt}</p></a>`).join("")}o?.addEventListener("input",()=>{clearTimeout(s),s=setTimeout(()=>y(o.value),140)});</script> <vercel-analytics data-props="{}" data-params="{"category":"loops","slug":"guplem-interactive-issue-creation"}" data-pathname="/loops/guplem-interactive-issue-creation.html"></vercel-analytics> <script type="module">var v=()=>{window.va||(window.va=function(...i){window.vaq||(window.vaq=[]),window.vaq.push(i)})},w="@vercel/analytics",h="2.0.1";function f(){return typeof window<"u"}function p(){try{const e="production"}catch{}return"production"}function y(e="auto"){if(e==="auto"){window.vam=p();return}window.vam=e}function m(){return(f()?window.vam:p())||"production"}function d(){return m()==="development"}function b(e,i){if(!e||!i)return e;let n=e;try{const t=Object.entries(i);for(const[r,o]of t)if(!Array.isArray(o)){const a=u(o);a.test(n)&&(n=n.replace(a,`/[${r}]`))}for(const[r,o]of t)if(Array.isArray(o)){const a=u(o.join("/"));a.test(n)&&(n=n.replace(a,`/[...${r}]`))}return n}catch{return e}}function u(e){return new RegExp(`/${g(e)}(?=[/?#]|$)`)}function g(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function E(e){return e.scriptSrc?s(e.scriptSrc):d()?"https://va.vercel-scripts.com/v1/script.debug.js":e.basePath?s(`${e.basePath}/insights/script.js`):"/_vercel/insights/script.js"}function S(e,i){var n;let t=e;if(i)try{t={...(n=JSON.parse(i))==null?void 0:n.analytics,...e}}catch{}y(t.mode);const r={sdkn:w+(t.framework?`/${t.framework}`:""),sdkv:h};return t.disableAutoTrack&&(r.disableAutoTrack="1"),t.viewEndpoint&&(r.viewEndpoint=s(t.viewEndpoint)),t.eventEndpoint&&(r.eventEndpoint=s(t.eventEndpoint)),t.sessionEndpoint&&(r.sessionEndpoint=s(t.sessionEndpoint)),d()&&t.debug===!1&&(r.debug="false"),t.dsn&&(r.dsn=t.dsn),t.endpoint?r.endpoint=t.endpoint:t.basePath&&(r.endpoint=s(`${t.basePath}/insights`)),{beforeSend:t.beforeSend,src:E(t),dataset:r}}function s(e){return e.startsWith("http://")||e.startsWith("https://")||e.startsWith("/")?e:`/${e}`}function k(e={debug:!0},i){var n;if(!f())return;const{beforeSend:t,src:r,dataset:o}=S(e,i);if(v(),t&&((n=window.va)==null||n.call(window,"beforeSend",t)),document.head.querySelector(`script[src*="${r}"]`))return;const a=document.createElement("script");a.src=r;for(const[c,l]of Object.entries(o))a.dataset[c]=l;a.defer=!0,a.onerror=()=>{const c=d()?"Please check if any ad blockers are enabled and try again.":"Be sure to enable Web Analytics for your project and deploy again. See https://vercel.com/docs/analytics/quickstart for more information.";console.log(`[Vercel Web Analytics] Failed to load script from ${r}. ${c}`)},document.head.appendChild(a)}function $({route:e,path:i}){var n;(n=window.va)==null||n.call(window,"pageview",{route:e,path:i})}function A(){try{return}catch{}}function j(){try{return'{"analytics":{"scriptSrc":"32ea31ac6eaa2815/script.js","viewEndpoint":"32ea31ac6eaa2815/view","eventEndpoint":"32ea31ac6eaa2815/event","sessionEndpoint":"32ea31ac6eaa2815/session"},"speedInsights":{"scriptSrc":"16663ccdea61a328/script.js","endpoint":"16663ccdea61a328/vitals"}}'}catch{}}customElements.define("vercel-analytics",class extends HTMLElement{constructor(){super();try{const i=JSON.parse(this.dataset.props??"{}"),n=JSON.parse(this.dataset.params??"{}");k({...i,disableAutoTrack:!0,framework:"astro",basePath:A(),beforeSend:window.webAnalyticsBeforeSend},j());const t=this.dataset.pathname;$({route:b(t??"",n),path:t})}catch(i){throw new Error(`Failed to parse WebAnalytics properties: ${i}`)}}});</script> </body></html> <script type="module">function d(t,n){const o=t.querySelector(".btn-ico")??t,c=o.textContent;o.textContent=n,setTimeout(()=>o.textContent=c,1200)}document.querySelectorAll("[data-copy]").forEach(t=>t.addEventListener("click",()=>{navigator.clipboard.writeText(t.dataset.copy??""),d(t,"Copied")}));const r=document.querySelector("[data-body-src]")?.value??"";document.querySelectorAll("[data-copy-body]").forEach(t=>t.addEventListener("click",()=>{navigator.clipboard.writeText(r),t.textContent="Copied"}));const a=document.querySelector("[data-llm-trigger]"),e=document.querySelector("[data-llm-menu]");a?.addEventListener("click",t=>{t.stopPropagation(),e.hidden=!e.hidden});document.addEventListener("click",()=>{e&&(e.hidden=!0)});</script>