Skip to content

Commit f3c6901

Browse files
committed
Point issue triage skills at GitHub and tidy overlay Svelte modules
1 parent d7948b0 commit f3c6901

14 files changed

Lines changed: 1021 additions & 1146 deletions

File tree

.cursor/rules/skill-maintenance.mdc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ When you change any of the following, update the corresponding skill(s) in `.cur
1313
| package.json scripts (dev/build/zip) or new build targets | wxt-svelte-extension, releases-changesets if release steps change |
1414
| E2E layout (e2e/tests, e2e/pages, fixture file path or name) | e2e-playwright-extension |
1515
| Release workflow (.changeset/, release steps, workflow_dispatch) | releases-changesets |
16-
| Issue refinement format or label set (docs/ISSUE_REFINEMENTS.md) | issue-refinement-triage |
16+
| Issue refinement format or label set (issue-refinement-triage template) | issue-refinement-triage |
1717
| New recurring “known issue” that should guide extension code | wxt-svelte-extension/reference.md |
1818

1919
Read the current skill file before editing so the update stays consistent with existing structure and wording.

.cursor/skills/issue-refinement-triage/SKILL.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
---
22
name: issue-refinement-triage
3-
description: Refines GitHub issues into the ISSUE_REFINEMENTS format and keeps docs/ISSUE_REFINEMENTS.md in sync. Use when triaging issues, refining a new issue, updating the refinements doc, or when the user asks to refine an issue or add to refinements.
3+
description: Refines GitHub issues using the block template and label table below. Tracking lives on GitHub; use when triaging issues, refining a new issue, or when the user asks to refine an issue.
44
---
55

66
# Issue Refinement and Triage
77

88
## Canonical source
99

10-
Read [docs/ISSUE_REFINEMENTS.md](docs/ISSUE_REFINEMENTS.md) for the current open/closed list and label table before editing.
10+
Use **GitHub issues** for open/closed tracking and descriptions. This file defines the **label table** and **issue block template** only.
1111

1212
## Issue block template
1313

@@ -40,5 +40,5 @@ Suggest only these labels; use space-separated list in the block.
4040
## Workflow
4141

4242
1. **New or raw issue:** Propose labels (from the table) and a one-line **Refined** that scopes or clarifies the issue.
43-
2. **Updating ISSUE_REFINEMENTS:** Add new refined issues under "Open issues (refined)". When an issue is closed, move its block to "Closed issues (reference)" and keep the same format.
43+
2. **GitHub:** Update the issue body or add a triage comment using the block template so the refined scope stays visible on the issue.
4444
3. **My comments:** Reserved for maintainer notes (priority, blockers, batching). Leave as `*(add notes here)*` if no note.

.cursor/skills/pr-from-issue/SKILL.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Use GitHub MCP (server `user-github`) for all GitHub actions. Before calling any
99

1010
## Quick decision
1111

12-
1. **Issue:** From conversation (e.g. "issue #5") or search — identify the main issue #M. If none exists, create one via GitHub MCP and use labels from [docs/ISSUE_REFINEMENTS.md](docs/ISSUE_REFINEMENTS.md) / [issue-refinement-triage](.cursor/skills/issue-refinement-triage/SKILL.md).
12+
1. **Issue:** From conversation (e.g. "issue #5") or search — identify the main issue #M. If none exists, create one via GitHub MCP and use labels from [issue-refinement-triage](.cursor/skills/issue-refinement-triage/SKILL.md).
1313
2. **Scope:** If the change is small or not splittable → single PR. If large and decomposable → create sub-issues S1…Sn, then multiple PRs (see [reference.md](reference.md) for heuristics).
1414

1515
## Single PR workflow
@@ -36,7 +36,7 @@ Use `call_mcp_tool` with `server: "user-github"`. Typical tools and intent:
3636
| ---------------------------------- | ------------------------------------------------------------------------- |
3737
| get_me | Current user and permissions; infer or confirm owner/repo |
3838
| search_issues | Find existing issue by number, title, or labels; avoid duplicate creation |
39-
| create_issue (or equivalent) | Create main or sub-issue when missing; use ISSUE_REFINEMENTS labels |
39+
| create_issue (or equivalent) | Create main or sub-issue when missing; use issue-refinement-triage labels |
4040
| create_pull_request | Create PR from branch; use repo PR template if present |
4141
| list_issue_types | Optional; use for orgs that use issue types |
4242

.cursor/skills/skill-hygiene/SKILL.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ When updating a skill (see `.cursor/rules/skill-maintenance.mdc` for when to do
99

1010
## issue-refinement-triage
1111

12-
- Issue block template still matches `docs/ISSUE_REFINEMENTS.md`.
13-
- Label table matches the "Label usage summary" in ISSUE_REFINEMENTS (same labels and "Use for" text).
12+
- Issue block template still matches [issue-refinement-triage/SKILL.md](issue-refinement-triage/SKILL.md).
13+
- Label table matches the label table in that skill (same labels and "Use for" text).
1414
- Workflow steps still reflect how open/closed issues and "My comments" are used.
1515

1616
## wxt-svelte-extension
Lines changed: 120 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,80 @@
11
<script lang="ts">
2-
import { elementInspector } from "@/lib/core/ElementInspector";
3-
import {
4-
MetaDataStore,
5-
TrackersStore,
6-
UIStore,
7-
} from "@/lib/store/index.svelte";
2+
import { elementInspector } from "@/lib/core/ElementInspector";
3+
import {
4+
MetaDataStore,
5+
TrackersStore,
6+
UIStore,
7+
} from "@/lib/store/index.svelte";
88
9-
interface RulerProps {
10-
gridSize?: number;
11-
color?: string;
12-
zIndex?: number;
13-
}
9+
interface RulerProps {
10+
gridSize?: number;
11+
color?: string;
12+
zIndex?: number;
13+
}
1414
15-
let {
16-
gridSize = 8,
17-
color = "#3b82f6",
18-
zIndex = 9998,
19-
}: RulerProps = $props();
15+
let { gridSize = 8, color = "#3b82f6", zIndex = 9998 }: RulerProps = $props();
2016
21-
const metadataStore = getContext<MetaDataStore>("metadataStore");
22-
const trackersStore = getContext<TrackersStore>("trackersStore");
23-
const uiStore = getContext<UIStore>("uiStore");
17+
const metadataStore = getContext<MetaDataStore>("metadataStore");
18+
const trackersStore = getContext<TrackersStore>("trackersStore");
19+
const uiStore = getContext<UIStore>("uiStore");
2420
25-
let isDragging = $state(false);
26-
let measurementStart = $state<{ x: number; y: number } | null>(
27-
null,
28-
);
29-
let measurementEnd = $state<{ x: number; y: number } | null>(null);
30-
let measurements = $state<
31-
Array<{
32-
id: string;
33-
start: { x: number; y: number };
34-
end: { x: number; y: number };
35-
distance: number;
36-
angle: number;
37-
}>
38-
>([]);
21+
let isDragging = $state(false);
22+
let measurementStart = $state<{ x: number; y: number } | null>(null);
23+
let measurementEnd = $state<{ x: number; y: number } | null>(null);
24+
let measurements = $state<
25+
Array<{
26+
id: string;
27+
start: { x: number; y: number };
28+
end: { x: number; y: number };
29+
distance: number;
30+
angle: number;
31+
}>
32+
>([]);
3933
40-
const mouse = metadataStore.mouse;
41-
const svg = uiStore.svg;
34+
const mouse = metadataStore.mouse;
35+
const svg = uiStore.svg;
4236
</script>
4337

4438
{#if uiStore.isActive}
45-
<defs>
46-
<marker
47-
id="arrowhead"
48-
markerWidth="10"
49-
markerHeight="7"
50-
refX="9"
51-
refY="3.5"
52-
orient="auto"
53-
>
54-
<polygon points="0 0, 10 3.5, 0 7" fill={color} />
55-
</marker>
39+
<defs>
40+
<marker
41+
id="arrowhead"
42+
markerWidth="10"
43+
markerHeight="7"
44+
refX="9"
45+
refY="3.5"
46+
orient="auto"
47+
>
48+
<polygon points="0 0, 10 3.5, 0 7" fill={color} />
49+
</marker>
5650

57-
<pattern
58-
id="grid"
59-
width={gridSize}
60-
height={gridSize}
61-
patternUnits="userSpaceOnUse"
62-
>
63-
<path
64-
d="M {gridSize} 0 L 0 0 0 {gridSize}"
65-
fill="none"
66-
stroke="#e5e7eb"
67-
stroke-width="0.5"
68-
opacity="0.3"
69-
/>
70-
</pattern>
71-
</defs>
51+
<pattern
52+
id="grid"
53+
width={gridSize}
54+
height={gridSize}
55+
patternUnits="userSpaceOnUse"
56+
>
57+
<path
58+
d="M {gridSize} 0 L 0 0 0 {gridSize}"
59+
fill="none"
60+
stroke="#e5e7eb"
61+
stroke-width="0.5"
62+
opacity="0.3"
63+
/>
64+
</pattern>
65+
</defs>
7266

73-
{#if uiStore.svg.showGrid}
74-
<rect
75-
class="anim"
76-
width="100%"
77-
height="100%"
78-
fill="url(#grid)"
79-
style={`--x: ${metadataStore.mouse.x}; --y:${metadataStore.mouse.y}`}
80-
/>
81-
{/if}
67+
{#if uiStore.svg.showGrid}
68+
<rect
69+
class="anim"
70+
width="100%"
71+
height="100%"
72+
fill="url(#grid)"
73+
style={`--x: ${metadataStore.mouse.x}; --y:${metadataStore.mouse.y}`}
74+
/>
75+
{/if}
8276

83-
<!-- {#if showMeasurements}
77+
<!-- {#if showMeasurements}
8478
{#each getTrackerDistances() as distance}
8579
<g class="tracker-distance">
8680
<line
@@ -112,69 +106,69 @@
112106
{/if}
113107

114108
<style>
115-
/* .anim {
109+
/* .anim {
116110
--x: 0;
117111
--y: 0;
118112
--sin-x: sin(var(--x));
119113
--cos-y: cos(var(--y));
120114
transition: transform 0.5s cubic-bezier(0.6, -0.28, 0.735, 0.045);
121115
transform: scale(1) skewX(calc(--cos-y * 180deg))
122116
skewY(calc(--sin-x * 3600deg)); */
123-
/* animation: glitch-loop-1 0.5s infinite cubic-bezier(0.68, -0.55, 0.265, 1.55) alternate-reverse; */
124-
/* transform-origin: center; */
125-
/* } */
117+
/* animation: glitch-loop-1 0.5s infinite cubic-bezier(0.68, -0.55, 0.265, 1.55) alternate-reverse; */
118+
/* transform-origin: center; */
119+
/* } */
126120
127-
@keyframes glitch-loop-1 {
128-
0% {
129-
transform: scale(1) skewX(0deg) skewY(60deg);
130-
}
131-
25% {
132-
transform: scale(1) skewX(60deg) skewY(-60deg);
133-
}
134-
50% {
135-
transform: scale(1) skewX(-60deg) skewY(60deg);
136-
}
137-
75% {
138-
transform: scale(1) skewX(60deg) skewY(-60deg);
139-
}
140-
100% {
141-
transform: scale(1) skewX(0deg) skewY(60deg);
142-
}
143-
}
121+
@keyframes glitch-loop-1 {
122+
0% {
123+
transform: scale(1) skewX(0deg) skewY(60deg);
124+
}
125+
25% {
126+
transform: scale(1) skewX(60deg) skewY(-60deg);
127+
}
128+
50% {
129+
transform: scale(1) skewX(-60deg) skewY(60deg);
130+
}
131+
75% {
132+
transform: scale(1) skewX(60deg) skewY(-60deg);
133+
}
134+
100% {
135+
transform: scale(1) skewX(0deg) skewY(60deg);
136+
}
137+
}
144138
145-
@keyframes glitch-loop-2 {
146-
0% {
147-
transform: scale(1) skewX(0deg);
148-
}
149-
25% {
150-
transform: scale(1) skewX(90deg);
151-
}
152-
50% {
153-
transform: scale(1) skewX(-90deg);
154-
}
155-
75% {
156-
transform: scale(1) skewX(90deg);
157-
}
158-
100% {
159-
transform: scale(1) skewX(0deg);
160-
}
161-
}
139+
@keyframes glitch-loop-2 {
140+
0% {
141+
transform: scale(1) skewX(0deg);
142+
}
143+
25% {
144+
transform: scale(1) skewX(90deg);
145+
}
146+
50% {
147+
transform: scale(1) skewX(-90deg);
148+
}
149+
75% {
150+
transform: scale(1) skewX(90deg);
151+
}
152+
100% {
153+
transform: scale(1) skewX(0deg);
154+
}
155+
}
162156
163-
@keyframes glitch-loop-3 {
164-
0% {
165-
transform: scale(1) skewY(0deg);
166-
}
167-
25% {
168-
transform: scale(1) skewY(90deg);
169-
}
170-
50% {
171-
transform: scale(1) skewY(-90deg);
172-
}
173-
75% {
174-
transform: scale(1) skewY(90deg);
175-
}
176-
100% {
177-
transform: scale(1) skewY(0deg);
178-
}
179-
}
157+
@keyframes glitch-loop-3 {
158+
0% {
159+
transform: scale(1) skewY(0deg);
160+
}
161+
25% {
162+
transform: scale(1) skewY(90deg);
163+
}
164+
50% {
165+
transform: scale(1) skewY(-90deg);
166+
}
167+
75% {
168+
transform: scale(1) skewY(90deg);
169+
}
170+
100% {
171+
transform: scale(1) skewY(0deg);
172+
}
173+
}
180174
</style>

0 commit comments

Comments
 (0)