Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
222 commits
Select commit Hold shift + click to select a range
e9fb733
feat: S2 Line hove value label
Jun 2, 2026
7301f4f
fix: update double dip for dimension
tanugarg04 Jun 2, 2026
cfbb574
feat: Reference Line size for S2
tanugarg04 Jun 5, 2026
402a796
chore: update docs
tanugarg04 Jun 5, 2026
2024d38
fix: quality gate fixes
tanugarg04 Jun 5, 2026
3795ece
feat: adding autosize reference line story
tanugarg04 Jun 5, 2026
a83345f
fix: update values from figma
tanugarg04 Jun 8, 2026
480593d
fux: sonarQube fix
tanugarg04 Jun 8, 2026
a760054
feat: first implementation of seriesLimit prop, which allows a set of…
madelineluke Jun 8, 2026
35272f4
feat: line width scales when hovered + added tests
logan-a-wood Jun 8, 2026
bb25918
Added for controlled hover + added story
logan-a-wood Jun 8, 2026
1f1dc46
feat: lines that are in the other bucket will not be interactive by d…
madelineluke Jun 9, 2026
018238b
Thickness changes for legend hover with keys
logan-a-wood Jun 9, 2026
4f08110
chore: changing color for custom color story
madelineluke Jun 9, 2026
131884f
chore: story updates
madelineluke Jun 9, 2026
124fb7b
removed scout files
logan-a-wood Jun 9, 2026
1e4a82e
fix: update x2 offset rule
tanugarg04 Jun 9, 2026
05b9a43
feat: renaming seriesLimit prop to primarySeries and updating the typ…
madelineluke Jun 9, 2026
4181268
feat: updating hiddenSeriesColor prop name to otherSeriesColor
madelineluke Jun 9, 2026
f6ec401
chore: update docs with the new props
madelineluke Jun 9, 2026
e0a7dbf
fix: solve merge conflicts
madelineluke Jun 9, 2026
4a0baef
Revert "fix: solve merge conflicts"
madelineluke Jun 9, 2026
ffe48a1
fix: solve merge conflicts round 2
madelineluke Jun 9, 2026
ab00cc2
chore: adding header to story file
madelineluke Jun 9, 2026
66d1552
chore: adding tests to fix sonarqube code coverage
madelineluke Jun 9, 2026
458a083
Merge pull request #820 from adobe/feat/LineWidthThicknessOnHover
logan-a-wood Jun 10, 2026
f9ee6a4
Merge pull request #823 from adobe/feat/s2-line-other-bucket
madelineluke Jun 10, 2026
9f686a8
fix: fixing the right offset for reference line
tanugarg04 Jun 10, 2026
4fecb05
fix: another try
tanugarg04 Jun 10, 2026
b278a81
Merge pull request #816 from adobe/AN-450458
tanugarg04 Jun 10, 2026
5c7246f
feat: Add secondary reference line
tanugarg04 Jun 12, 2026
01830db
fix: sonarqube fixes
tanugarg04 Jun 12, 2026
7703e94
docs: add secondary reference line documentation
tanugarg04 Jun 16, 2026
77c44fa
feat: Hide and show with new legend icon
tanugarg04 Jun 16, 2026
bbd84c8
chore: update docs for legend
tanugarg04 Jun 16, 2026
2d4f4f8
fix: secondary reference line stroke weight always 1px, label matches…
tanugarg04 Jun 16, 2026
6cdf818
feat: update stroke dash for dotted line type in s2 to render as circles
madelineluke Jun 17, 2026
ec7977c
Merge branch AN-450446 (hover labels) into feat/s2-line-hover-labels …
madelineluke Jun 17, 2026
2e7ca01
chore: split ternary for code complexity
c-lamoureux Jun 18, 2026
c0c69c5
feat: WIP adding cascading formula to the s2 line hover label
madelineluke Jun 18, 2026
2ef6c24
fix: updating tests to test for the new ratio:
madelineluke Jun 18, 2026
b254fce
fix: updating tests to match the new ratio
madelineluke Jun 18, 2026
ba167eb
chore: use s2 icon for visibilityOff in Legend
c-lamoureux Jun 18, 2026
db8990a
chore: Update secondary reference line examples to use Minimum instea…
c-lamoureux Jun 18, 2026
9d9adbc
chore: code smells
c-lamoureux Jun 18, 2026
cb4ba7a
Merge pull request #824 from adobe/AN-450459
c-lamoureux Jun 18, 2026
adca435
Merge pull request #827 from adobe/feat/s2-line-dots-as-circles
c-lamoureux Jun 19, 2026
5044ca9
feat: updating test values, adding series color to label
madelineluke Jul 6, 2026
9d1c2e6
feat: update label sizing to match font size, slight shift when hover…
madelineluke Jul 6, 2026
3cc23a8
Merge branch 'main' of personal.github.com:adobe/react-spectrum-chart…
madelineluke Jul 6, 2026
766a50d
fix: update the custom svg for visibility off icon
tanugarg04 Jul 6, 2026
56595fc
chore: update documentation
madelineluke Jul 6, 2026
fe80bb0
chore: fixing code smells but simplifying logic
madelineluke Jul 6, 2026
0ac0fc4
chore: update docs
tanugarg04 Jul 6, 2026
f28e448
chore: add more test coverage for dimension hover code
madelineluke Jul 6, 2026
bfc8a0e
fix: render gray empty state ring for donut with zero or empty data
Arman-Luthra Jul 7, 2026
75cbd95
Merge pull request #826 from adobe/AN-450448
tanugarg04 Jul 7, 2026
f482120
feat: scale reference line labels with size
madelineluke Jul 7, 2026
693b2dc
Merge pull request #830 from adobe/feat/s2-line-reference-line-label-…
madelineluke Jul 7, 2026
b86146d
Merge pull request #828 from adobe/feat/s2-line-hover-labels
madelineluke Jul 8, 2026
1f1ef9f
fix: trendlines and metric ranges for lines match hover opacity
c-lamoureux Jul 8, 2026
446170c
fix: don't apply unecessary opacity to sub marks for metric range/tre…
c-lamoureux Jul 8, 2026
4c6f5b9
feat: added hoverAnimationUtils
logan-a-wood Jul 9, 2026
5c6c693
chore: added userMeta + planning md + example spec json
logan-a-wood Jul 9, 2026
b53b97d
feat: hover animation stories
logan-a-wood Jul 9, 2026
981dd2e
chore: added test coverage for hoveAnimationUtils
logan-a-wood Jul 9, 2026
a558dea
chore: fixed test coverage
logan-a-wood Jul 9, 2026
37a4117
Merge pull request #831 from adobe/trendlineHover
c-lamoureux Jul 10, 2026
3a4f454
Merge pull request #829 from Arman-Luthra/fix/donut-empty-segments-357
c-lamoureux Jul 10, 2026
55685a3
chore: updated comments
logan-a-wood Jul 10, 2026
32bfdf6
chore: fixed large story crashing + lint
logan-a-wood Jul 13, 2026
834118d
feat: animation gated while nothing is animating; reducing idle CPU load
logan-a-wood Jul 13, 2026
95de32d
chore: reorganized performance stories + added dashboard story
logan-a-wood Jul 13, 2026
ee5d577
fix: bug with animation gate on slow devices
logan-a-wood Jul 14, 2026
cc52670
chore: Sonar issue
logan-a-wood Jul 14, 2026
24833fe
feat: adding legend wrapping prop in both s1 and s2
madelineluke Jul 14, 2026
c4ec150
feat: add legend label offset so that the legend symbols stay centere…
madelineluke Jul 14, 2026
55a5889
feat: update prop name to be _labelWrap
madelineluke Jul 14, 2026
868db05
fix: removing s2 functionality for now
madelineluke Jul 14, 2026
1372167
Merge pull request #836 from adobe/feat/legend-wrap-truncation
c-lamoureux Jul 14, 2026
006f4d8
feat: legend align prop in S1
c-lamoureux Jul 14, 2026
5841002
feat: _preferredColumns
c-lamoureux Jul 14, 2026
3646240
feat: unsupported dynamic legend wrapping with truncation
c-lamoureux Jul 15, 2026
3bfa95a
chore: fix linting and update docs for _preferredColumns
c-lamoureux Jul 15, 2026
c52ad3e
tweak: adjusted lerp formula to scale duration based on lerp distance
logan-a-wood Jul 15, 2026
7d948e0
Merge pull request #837 from adobe/preferredColumns
madelineluke Jul 15, 2026
79bebeb
feat: AN-456591 Update bar direct label font size scaling
tanugarg04 Jul 15, 2026
c646fee
fixed 1 test
logan-a-wood Jul 15, 2026
35248ec
chore: update doc
tanugarg04 Jul 15, 2026
afc58d3
Update package version to 1.46.0
c-lamoureux Jul 15, 2026
3b76d25
Merge pull request #833 from adobe/feat/hover-animations-initial-setup
logan-a-wood Jul 15, 2026
787c43f
Merge pull request #840 from adobe/release-1.46.0
c-lamoureux Jul 15, 2026
1885315
feat: wired up line to use hover animations + animations prop
logan-a-wood Jul 14, 2026
b43cd92
chore: updated/added test coverage
logan-a-wood Jul 14, 2026
810769c
empty commit to retrigger checks
logan-a-wood Jul 15, 2026
5d8a792
chore: refactored addData to reduce cognitive complexity
logan-a-wood Jul 15, 2026
49cf3d0
chore: updated md
logan-a-wood Jul 15, 2026
3205ec9
fix: fixed animation gate fix not working
logan-a-wood Jul 15, 2026
c14d402
fix: reoved fontsize override
tanugarg04 Jul 15, 2026
1cbcfb4
Merge branch 'main' into AN-456591
tanugarg04 Jul 15, 2026
d757d86
feat: add resizable SizeScaling story for BarDirectLabel
tanugarg04 Jul 16, 2026
189d875
feat: added bar selection outline
tanugarg04 Jul 16, 2026
52c1b5b
Merge pull request #839 from adobe/AN-456591
tanugarg04 Jul 17, 2026
eda4b5b
fix: sonarQube fix
tanugarg04 Jul 17, 2026
1d9f64e
fix: refactored to remove redundant code
tanugarg04 Jul 17, 2026
399269a
test: added tests
tanugarg04 Jul 17, 2026
db082b7
test: added more test coverage
tanugarg04 Jul 17, 2026
05f03cf
Merge pull request #841 from adobe/bar-selection-outline-s2
tanugarg04 Jul 20, 2026
72966dd
feat: adding legend pagination functionality, a lot of expression fun…
madelineluke Jul 21, 2026
c601ea9
chore: refactored + updated docs
logan-a-wood Jul 21, 2026
949bd29
Merge pull request #835 from adobe/feat/hover-animations-line-opacity…
logan-a-wood Jul 21, 2026
11169c4
feat: wired legends to use animation system
logan-a-wood Jul 16, 2026
721f9bc
fix: Sonar issue
logan-a-wood Jul 17, 2026
d0cef8d
chore: removed code comment
logan-a-wood Jul 21, 2026
aac98ca
fix: reduce complexity of getLegendColumnLayout func
madelineluke Jul 21, 2026
7bfc581
feat: AN-456589 Highlight bar on axis label hover
tanugarg04 Jul 21, 2026
dff8307
Merge pull request #843 from adobe/feat/add-legend-pagination
madelineluke Jul 21, 2026
d23e48a
fix: fixed cognitive complexity
tanugarg04 Jul 21, 2026
6b66586
Update package version to 1.47.0
madelineluke Jul 21, 2026
c713703
Merge pull request #842 from adobe/feat/hover-animations-legends
logan-a-wood Jul 21, 2026
bb0594d
Merge pull request #845 from adobe/release-1.47.0
c-lamoureux Jul 21, 2026
770a914
feat: wired up static point and direct label + fixed legend rule inje…
logan-a-wood Jul 22, 2026
ef82e48
feat: added more tests
logan-a-wood Jul 22, 2026
7386f98
fix: add fontSize to background halo so it aligns with the foreground…
madelineluke Jul 22, 2026
06414f4
feat: alternative highlight behaviors + stories + tests
logan-a-wood Jul 22, 2026
5fd602f
fixed lint
logan-a-wood Jul 22, 2026
44be46e
feat: highlight bar on axis label hover
tanugarg04 Jul 22, 2026
3ef7f9c
fix: sonarqube fixes
tanugarg04 Jul 22, 2026
98c5303
fix: sonarqube fixes
tanugarg04 Jul 22, 2026
2a54a2f
fix: editing getColumnLayoutExp function to use a function that gets …
madelineluke Jul 22, 2026
45ff9a8
chore: shorten function description, remove unnecessary
madelineluke Jul 22, 2026
6e5b553
fix: sonarqube fix to use at instead of [index - 1]
madelineluke Jul 23, 2026
85ddfee
Merge pull request #847 from adobe/fix/line-point-annotation-backgrou…
c-lamoureux Jul 23, 2026
b1ca837
Merge pull request #846 from adobe/feat/hover-animations-labels
logan-a-wood Jul 23, 2026
5324285
feat: draw-in utils + some stories + design md doc
logan-a-wood Jul 23, 2026
c880685
chore: added test file
logan-a-wood Jul 23, 2026
a1780a1
fix: sonar issue
logan-a-wood Jul 23, 2026
c98b9d7
feat: adding displayOnHoverTrigger prop to Trendline and MetricRange
madelineluke Jul 24, 2026
0009695
chore: adding tests for new displayOnHoverTrigger prop
madelineluke Jul 24, 2026
6f12b55
chore: removing extra spacing
madelineluke Jul 24, 2026
1e667af
chore: add displayOnHoverTrigger prop to documentation
madelineluke Jul 27, 2026
45624d0
Merge pull request #848 from adobe/feat/add-legend-pagination
madelineluke Jul 27, 2026
c249003
Merge pull request #850 from adobe/feat/add-display-on-hover-trigger-…
madelineluke Jul 27, 2026
48f366f
refactor: derive axis label hover matches from usermeta.interactiveMarks
tanugarg04 Jul 27, 2026
0b848b4
fix: fix code smell
tanugarg04 Jul 27, 2026
00578b9
Merge pull request #844 from adobe/AN-456589
tanugarg04 Jul 27, 2026
c000974
feat: added onClick for axisLabel
tanugarg04 Jul 27, 2026
aad9c88
test: added missing tests
tanugarg04 Jul 28, 2026
a26f552
feat: update the onClick type
tanugarg04 Jul 28, 2026
f37e36c
feat: adding design tokens and a RSC feature catalog, added correspon…
madelineluke Jul 28, 2026
ebea647
fix: update missing prop and storybook stories
tanugarg04 Jul 28, 2026
8d6edd9
Merge pull request #852 from adobe/AN-456587
tanugarg04 Jul 28, 2026
b75aac7
feat: added Bar DirectLabel number format, D3 format
tanugarg04 Jul 28, 2026
c4d77bd
fix: fix code smell
tanugarg04 Jul 29, 2026
06a0723
feat: Feature spec generation schema
c-lamoureux Jul 29, 2026
7b10802
Merge pull request #855 from adobe/specSystem
c-lamoureux Jul 29, 2026
ed46867
feat: add issue schema for specs
c-lamoureux Jul 29, 2026
ac35276
feat: issue specific spec changes and created some specs
c-lamoureux Jul 29, 2026
891b6d2
fix: S1 wire highlight opacity to static points
c-lamoureux Jul 29, 2026
cf6885d
chore: reduce comment length and codify in claude
c-lamoureux Jul 29, 2026
4f58aa6
chore: add timestamps to feature spec schema
c-lamoureux Jul 30, 2026
a2d6a8d
fix: fix type
tanugarg04 Jul 30, 2026
969f196
feat: add s2 style override prop to s1 visualizations
c-lamoureux Jul 30, 2026
54a25ab
feat: Additional s2 prop stories
c-lamoureux Jul 30, 2026
d007aac
chore: dedup storybook code
c-lamoureux Jul 30, 2026
c1adc43
chore: code smell
c-lamoureux Jul 30, 2026
619b107
fix: fixing types again
tanugarg04 Jul 30, 2026
52fd399
fix: sonar ignore
tanugarg04 Jul 30, 2026
7fb5ee0
fix: update type again
tanugarg04 Jul 31, 2026
16be327
feat: update design tokens to include reference line cap and rounded …
madelineluke Jul 31, 2026
a5076ed
feat: research work for diverging bar AN-456581
tanugarg04 Jul 15, 2026
87a915c
docs: link follow-up implementation tickets in diverging bar research…
tanugarg04 Jul 16, 2026
da45cd9
feat: added utility function
logan-a-wood Jul 31, 2026
567fe00
feat: add diverging prop to bar
tanugarg04 Jul 31, 2026
cad19ce
chore: updated comment + fixed signal init
logan-a-wood Jul 31, 2026
95cc55f
chore: fixed a test
logan-a-wood Jul 31, 2026
eae09ef
feat: update Bar to adpat bar direct label per size
tanugarg04 Aug 3, 2026
cc7f146
fix: update for direct label start to be adaptive
tanugarg04 Aug 3, 2026
504f9fb
chore: fix comments
tanugarg04 Aug 3, 2026
8c51a5e
chore: update comments
tanugarg04 Aug 3, 2026
209f8d3
Merge pull request #856 from adobe/generalFixes
c-lamoureux Aug 4, 2026
c234074
Merge pull request #854 from adobe/AN-461051
tanugarg04 Aug 4, 2026
dbcecdd
fix: removed dodged for diverging
tanugarg04 Aug 4, 2026
1a18d9b
[S2] Update package version to 0.4.0
c-lamoureux Aug 4, 2026
d66abea
Merge pull request #860 from adobe/release-s2-0.4.0
c-lamoureux Aug 4, 2026
ef753d1
Update packages/mcp/src/designTokens.ts
madelineluke Aug 4, 2026
add7716
Update packages/mcp/src/featureCatalog.ts
madelineluke Aug 4, 2026
238b748
Update scripts/createChartFeatureSkill.js
madelineluke Aug 4, 2026
363eacf
Update scripts/createDesignTokenSkill.js
madelineluke Aug 4, 2026
cd3d683
Merge pull request #858 from adobe/s2Stories
c-lamoureux Aug 4, 2026
3340cc0
Merge branch 'main' into AN-462749
tanugarg04 Aug 4, 2026
3dee81d
feat: add s1/s2Maturity properties for alpha and rc components, updat…
madelineluke Aug 4, 2026
4f7c88d
Merge branch 'main' of personal.github.com:adobe/react-spectrum-chart…
madelineluke Aug 4, 2026
bf7a5c3
Merge branch 'feat/design-feature-tokens-and-skills' of personal.gith…
madelineluke Aug 4, 2026
0ca7d08
fix: add diverging to userMeta
tanugarg04 Aug 4, 2026
eaf74a9
chore: update comments
tanugarg04 Aug 4, 2026
54ee890
Merge pull request #859 from adobe/AN-462749
tanugarg04 Aug 4, 2026
c4dc690
Update package version to 1.49.0
c-lamoureux Aug 5, 2026
af2be33
Merge pull request #863 from adobe/release-1.49.0
c-lamoureux Aug 5, 2026
6e72139
Merge pull request #849 from adobe/feat/line-draw-animation-utils
logan-a-wood Aug 5, 2026
073d93a
fix: highlight area fixes
c-lamoureux Jul 30, 2026
f1f5be2
Merge pull request #857 from adobe/generalFixes-2
c-lamoureux Aug 5, 2026
038a6e8
chore: bug specs
c-lamoureux Aug 5, 2026
784fabf
fix: correct positioning for forecast line hover labels
c-lamoureux Aug 5, 2026
75f2990
fix: add proper opacity highlighting to line point annotation text
c-lamoureux Aug 5, 2026
53e3b3a
chore: add bug-summary skill
c-lamoureux Aug 5, 2026
74c1aa1
chore: number bug-summary output for id-based lookup
c-lamoureux Aug 5, 2026
b1f32ba
Merge pull request #864 from adobe/generalFixes3
c-lamoureux Aug 5, 2026
359a9b7
Merge pull request #865 from adobe/generalFixes-4
c-lamoureux Aug 5, 2026
f49cb90
bug: clamp getMetricRangeHoverPoints to [0, height] to prevent overfl…
madelineluke Aug 5, 2026
2ff10c5
chore: add basic test files for new mcp tools
madelineluke Aug 5, 2026
bd32eec
Merge branch 'main' of personal.github.com:adobe/react-spectrum-chart…
madelineluke Aug 5, 2026
5bdc655
chore: bump spectrum-charts packages in mcp to fix yarn.lock out of sync
madelineluke Aug 5, 2026
99369a2
chore: fix build script ordering and build constants and themes packa…
madelineluke Aug 5, 2026
3faab77
Merge pull request #868 from adobe/bug/metric-range-flicker-on-dimens…
madelineluke Aug 6, 2026
6264b67
Merge pull request #853 from adobe/feat/design-feature-tokens-and-skills
madelineluke Aug 6, 2026
923b702
Merge branch 'main' into dataNavigatorManual
Aug 6, 2026
f1fb680
Add S2 line accessible navigation support
Aug 7, 2026
08e1717
Fix hover/focus precedence in Line accessibleNavigation
Aug 18, 2026
3fdfbb8
Add keyboard navigation popover/inspect integration
Aug 20, 2026
0761ea5
Fix missing interactionModality signal for accessible bar
Aug 20, 2026
44f6164
Fix S2 accessible nav signal/mark duplication
Aug 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions .claude/commands/bug-summary.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Bug Issue Summary

Use when asked for a quick status scan of currently open bug issue specs (`/bug-summary`).
Optional `$ARGUMENTS` narrows to a single `chartType` (e.g. `/bug-summary line`).

## Step 1 — Collect open specs

Find every `planning/specs/<chartType>/issues/*.json` file, excluding anything under an
`implemented/` subdirectory — those are closed and out of scope for this summary. If
`$ARGUMENTS` names a chartType, restrict to `planning/specs/<chartType>/issues/*.json` only.

Sort the matched file paths ascending (plain string sort on the relative path, e.g.
`planning/specs/bar/issues/foo.json` before `planning/specs/line/issues/bar.json`) and
assign each a sequential id starting at 1, in that sorted order. This ordering must be
reproducible on a later run over the same spec set — don't number by discovery order,
read order, or complexity — so that a follow-up command given a bare id (e.g. "spec 3")
can re-run this same collect-and-sort step to resolve which file it refers to.

Consult `planning/specs/schema.json` if a field's meaning needs clarifying (e.g.
`complexity.score`, `variant`, `crossCutting`).

## Step 2 — Read each spec

Read every matched file in full — don't rely on `summary`/`rootCause` alone if `symptom` or
`comparison` adds context needed to describe the bug accurately.

## Step 3 — Report

Group output by `chartType`. For each issue, produce one bolded line followed by a tight
2-4 sentence summary, in this exact shape:

```
**[N] `id`** (variant, complexity N) — one clause naming the symptom, then 1-3 sentences on
the confirmed/suspected root cause and how settled the investigation is (e.g. "root cause
unconfirmed, needs repro on main first" vs. "fully scoped, single-line fix").
```

`[N]` is the sequential id assigned in Step 1 (not the complexity score — the two numbers
are unrelated and both appear on the line, so don't conflate them).

Keep summaries compressed — this is a scan, not the full spec. Never print raw JSON or dump
full spec fields. If nothing matches, say so plainly rather than returning an empty response.

End with a one-line total, e.g. "5 open issues across bar, line, chart."
98 changes: 80 additions & 18 deletions .claude/commands/file-issue.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,87 @@
# File a Bug Issue

Use when a bug has been identified but won't be fixed immediately. Investigates the root cause
and creates a structured issue doc in `planning/issues/`.
Use when a bug has been identified but won't be fixed immediately. Investigates the root
cause and writes a validated JSON `kind: "bug"` spec at
`planning/specs/<chartType>/issues/<slug>.json`. The spec is submitted as a PR like any
other; once merged, `implement-bug-fix` checks for it first (Step 0) and treats it as
authoritative starting context instead of rediscovering the same investigation.

## Steps
Read `planning/specs/README.md` first (particularly "Kinds: feature vs bug" and the
`crossCutting` table) and `planning/specs/schema.json` for the exact field contract.

1. **Clarify scope** — confirm the symptom, affected mark/hook/util, and what correct behavior
looks like. Ask if unclear.
Do not implement the fix as part of this skill — the goal is a clear, actionable record for
later.

2. **Investigate** — spawn an Explore subagent to:
- Find the relevant source files for the reported area
- Read the encoding/logic for the affected behavior
- Compare against similar working code (e.g. line mark vs. line points)
- Note exact file paths and line numbers where the divergence is
---

3. **Write the issue doc** to `planning/issues/<kebab-case-title>.md`:
- Status: Open
- Symptom: 1-2 sentences
- Root cause: technical, with file:line references
- Comparison table if applicable (what working code does vs. buggy code)
- Relevant files table
- Proposed fix direction (not implementation)
## Step 1 — Clarify scope

4. **Do not implement the fix.** The goal is a clear, actionable record for later.
Confirm the symptom, the affected mark/hook/util, and what correct behavior looks like. Ask
if unclear. Determine the `chartType` (`bar`, `line`, `donut`, `area`, `scatter`, `combo`,
`bigNumber`, `bullet`, `venn`, or `chart` for a chart-level bug) — it determines the output
directory.

## Step 2 — Investigate

Spawn an Explore subagent to:
- Find the relevant source files for the reported area
- Read the encoding/logic for the affected behavior
- Compare against similar working code (e.g. line mark vs. line points, or the S2 sibling
file if one exists) — this comparison is what populates `comparison` and often reveals
the fix direction for free
- Note exact file paths and line numbers where the divergence is, or where the behavior is
simply missing

If the root cause can't be confirmed (e.g. a layout/rendering bug with only a hypothesis),
say so plainly in `rootCause` rather than asserting a guess — use `openQuestions` for what's
left to verify.

Check whether the mark exists in both `vega-spec-builder` and `vega-spec-builder-s2` (or
the corresponding React packages) — this determines `requiresS1S2Parity`. A bug found in one
package doesn't automatically mean the other has it too; check directly, per the S2-parity
rule in `implement-bug-fix.md` ("apply the same fix unless the bug doesn't exist in s2 —
verify, don't assume").

## Step 3 — Write the spec

Fill out every required field from `schema.json`:

- `id`, `title`, `chartType`, `kind: "bug"`, `summary`
- `variant`: `"s1"`, `"s2"`, or `"both"` — whichever package variant(s) Step 2 confirmed the
bug actually reproduces in. Don't default to `"both"` just because the mark exists in
both packages — only use it once both have actually been checked. If only one has been
checked, use that one and leave an `openQuestions` entry for the other, or set
`crossCutting.requiresS1S2Parity: true` with a note.
- `status`: `"approved"` (default — means filed/open for a bug; see README.md)
- `lastUpdated`: run `date +%Y-%m-%d` in a shell and use its literal output — never your own
sense of the current date. See README.md's "Stamping lastUpdated."
- `complexity`: score (`1|2|3|5`) + a one-line rationale, using the rubric in README.md —
score by how much the *fix* is expected to touch, not how hard the bug was to find
- `symptom`: 1-2 sentences, the observable/user-facing behavior
- `rootCause`: technical explanation with file:line references, from Step 2. If unconfirmed,
state the leading hypothesis and say it's unconfirmed
- `comparison` (optional): populate when Step 2 found a clean working-vs-buggy contrast
(e.g. what a comparable mark's encoding does vs. what the buggy one does)
- `crossCutting`: answer all six flags explicitly based on Step 2's exploration — never
leave a flag `false` without having actually checked it against the code. Add `notes` for
any flag that's `true`, and for `requiresS1S2Parity`, note whether the sibling package
already has correct behavior (a reference to port from) or reproduces the same bug
- `implementationPlan`: one entry per file from Step 2. `change` describes the file's role
(bug location vs. reference) and a proposed fix *direction* — not a committed
implementation, since the fix hasn't been written
- `openQuestions`: anything unresolved, especially unconfirmed root causes or unverified
S1/S2 parity

Write the file to `planning/specs/<chartType>/issues/<slug>.json` — the base `issues/`
directory, never `issues/implemented/`, since a freshly filed bug is by definition not yet
fixed. `<slug>` is a kebab-case derivation of the title.

## Step 4 — Validate and report

Confirm every field required by `schema.json` is present (including the `kind: "bug"`
conditional requirements — `symptom` and `rootCause`) and that `chartType`, `status`, and
`complexity.score` use only their allowed enum values.

Report a short summary: title, chart type, complexity score, whether root cause is
confirmed or hypothesized, and any `openQuestions` — the user submits this as a PR from
here.
91 changes: 91 additions & 0 deletions .claude/commands/generate-chart-spec.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Generate a Chart Feature Spec

Converts gathered design tokens and requirements into a validated JSON `kind: "feature"`
spec at `planning/specs/<chartType>/<slug>.json`. The spec is submitted as a PR; once
approved, the `implement-new-prop` / `implement-new-chart-mark` / `implement-new-child-component`
skills read it as the authoritative source of requirements, edge cases, and implementation
plan.

This skill is for not-yet-built features only. For a bug in existing behavior, use the
`file-issue` skill instead — it produces a `kind: "bug"` spec at
`planning/specs/<chartType>/issues/<slug>.json`.

Read `planning/specs/README.md` first — it documents the complexity rubric, the edge-case
checklist, and the `crossCutting` flags referenced below. Read `planning/specs/schema.json`
for the exact field contract.

`$ARGUMENTS` is whatever the gathering phase produced — freeform text, a path to a notes
file, a Jira ticket reference, a Figma link, or a combination. Don't assume a fixed upstream
shape; the gathering process this feeds from is not stable tooling yet.

---

## Step 1 — Read the gathered material

Parse `$ARGUMENTS` for:
- The target chart type (`bar`, `line`, `donut`, `area`, `scatter`, `combo`, `bigNumber`,
`bullet`, `venn`, or `chart` for a chart-level feature)
- Whatever requirements/design tokens were gathered — read any referenced notes file,
fetch the Jira ticket via `mcp__corp-jira__*` if a ticket ref is given, or fetch the
Figma node via `mcp__figma__*` if a Figma URL is given

If the chart type is ambiguous or missing, ask before proceeding — it determines both the
output directory and which existing code to read next.

---

## Step 2 — Explore the relevant code

Read the target mark's `*Options`/`*SpecOptions` types
(`vega-spec-builder/src/types/marks/<mark>Spec.types.ts`) and its spec builder file(s)
(`vega-spec-builder/src/<mark>/<mark>SpecBuilder.ts` and related `*Utils.ts` files) — the
same files `implement-new-prop.md` and `implement-new-chart-mark.md` point to. This grounds
the implementation plan in real file paths and informs the complexity score.

If the feature plausibly touches hover animation, controlled highlight, legend interaction,
or tooltip/popover wiring, read the corresponding mechanism directly rather than guessing:
`hoverAnimationUtils.ts`, the `CONTROLLED_HIGHLIGHTED_TABLE`/`SERIES` usages in the mark's
mark-utils file, `legendHighlightSignals`, and `isInteractive`/`interactiveMarkName`
respectively (see `crossCutting` table in `README.md`).

Check whether the mark exists in `vega-spec-builder-s2` — if the s1 file you're reading has
a sibling there, `requiresS1S2Parity` is likely `true`.

---

## Step 3 — Write the spec

Fill out every required field from `schema.json`:

- `id`, `title`, `chartType`, `kind: "feature"`, `summary`
- `variant`: `"s1"`, `"s2"`, or `"both"` — whichever package variant(s) Step 2's exploration
and the resulting `implementationPlan` actually target. See README.md's `variant` section
for how this differs from `crossCutting.requiresS1S2Parity`.
- `status`: `"approved"` (default — see README.md for why there's no draft/in-review state)
- `lastUpdated`: run `date +%Y-%m-%d` in a shell and use its literal output — never your own
sense of the current date. See README.md's "Stamping lastUpdated."
- `complexity`: score (`1|2|3|5`) + a one-line rationale, using the rubric in README.md
- `requirements`: the behavior requirements from Step 1, as discrete bullets
- `designTokens` / `references`: from Step 1, if any were gathered
- `edgeCases`: walk the checklist in README.md against this specific feature — don't include
entries that don't apply, but do check each one
- `crossCutting`: answer all six flags explicitly based on Step 2's exploration — never
leave a flag `false` without having actually checked it against the code. Add `notes` for
any flag that's `true`.
- `implementationPlan`: one entry per file from Step 2, each with a `change` description and
an approximate `lines` range where you have one
- `openQuestions`: anything you couldn't resolve from the gathered material

Write the file to `planning/specs/<chartType>/<slug>.json` — the base directory, never
`implemented/`, since a freshly generated spec is by definition not yet built. `<slug>` is a
kebab-case derivation of the title.

---

## Step 4 — Validate and report

Confirm every field required by `schema.json` is present and that `chartType`, `status`,
and `complexity.score` use only their allowed enum values.

Report a short summary: title, chart type, complexity score, number of implementation-plan
entries, and any `openQuestions` — the user submits this as a PR from here.
31 changes: 31 additions & 0 deletions .claude/commands/implement-bug-fix.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,34 @@ Use this skill when fixing a bug. Read `.claude/architecture.md` first — diagn

---

## Step 0: Check for a Filed Bug Spec

Look for `planning/specs/<chartType>/issues/<slug>.json` matching this bug, checking both
the base `issues/` directory (still open) and its `implemented/` subfolder (already fixed —
still useful context, e.g. to check whether this is a regression of a previously-fixed bug).
If one exists and `status` is `"approved"` or `"implemented"`, read it and start from its
`symptom`, `rootCause`, `crossCutting`, and `implementationPlan` instead of rediscovering
them from scratch — `crossCutting` tells you up front whether the fix needs to interact with
hover animation, controlled highlight, legend interaction, or tooltip/popover wiring, and
whether S1/S2 parity applies. Use `implementationPlan` as a starting file checklist,
re-locating by symbol name if its line numbers have drifted.

Treat `rootCause` as a starting hypothesis, not gospel — re-verify it against the current
code before implementing, since the spec may have been filed before other changes landed. If
the code no longer matches the spec's description, update the spec (`status:
"needs-revision"` or a corrected `rootCause`) as part of the fix PR. If no spec exists,
proceed as below.

Before setting `status` to `"implemented"`, reconcile the whole spec against the final diff —
see README.md's "Reconcile the whole spec before marking implemented." A discovery made
mid-implementation (a second file that needed fixing, a `crossCutting` flag that turns out to
be true) must be reflected everywhere it's relevant, not just in `rootCause`. Any time you
touch a field, re-stamp `lastUpdated` with the output of `date +%Y-%m-%d` — never a
hand-written guess. Then `git mv` the file into
`planning/specs/<chartType>/issues/implemented/<slug>.json` as part of the same PR.

---

## Diagnosing a Bug

### Step 1: Identify which layer the bug lives in
Expand Down Expand Up @@ -57,6 +85,9 @@ Any mark that is purely visual (annotation text, halo, badge, reference label) m
### S2 parity is always required
When fixing a bug in an s1 file, find the corresponding s2 file (`packages/vega-spec-builder-s2/` mirrors `packages/vega-spec-builder/`). Apply the same fix unless the bug doesn't exist in s2 — but verify, don't assume. S2 has intentional simplifications (no Venn, simpler static point rendering) so don't port s1-specific behavior blindly.

### Comments stay short — no narration of the fix
New or touched functions get at most a one-line JSDoc (description + `@param`/`@returns`), matching the length of sibling functions in the same file. Do not add paragraphs explaining what bug was fixed, why, or what the investigation found — that belongs in the PR description and commit message, never in the code. See `CLAUDE.md`'s Code Style section for a worked example.

---

## Writing the Regression Test
Expand Down
24 changes: 24 additions & 0 deletions .claude/commands/implement-new-chart-mark.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,28 @@ Read `.claude/architecture.md` first — this is the most involved type of chang

---

## Step 0: Check for an Approved Spec

Look for `planning/specs/<chartType>/<slug>.json` matching this feature, checking both the
base directory (not yet implemented) and its `implemented/` subfolder (already shipped —
still useful context, e.g. for a regression). If one exists and `status` is `"approved"` or
`"implemented"`, read it and treat its `requirements`, `edgeCases`, and `crossCutting` flags
as authoritative instead of re-deriving them — `crossCutting` in particular tells you up
front whether this mark needs to interact with hover animation, controlled highlight, legend
interaction, or tooltip/popover wiring, and whether S1/S2 parity is required. Use
`implementationPlan` as a starting file checklist, re-locating by symbol name if its line
numbers have drifted. If no spec exists, proceed as below.

Before setting `status` to `"implemented"`, reconcile the whole spec against the final diff —
see README.md's "Reconcile the whole spec before marking implemented." A discovery made
mid-implementation must be reflected everywhere it's relevant (`crossCutting`,
`implementationPlan`), not just wherever you first noted it. Any time you touch a field,
re-stamp `lastUpdated` with the output of `date +%Y-%m-%d` — never a hand-written guess. Then
`git mv` the file into `planning/specs/<chartType>/implemented/<slug>.json` as part of the
same PR.

---

## Implementation Steps

### Step 1: Spec Builder Types
Expand Down Expand Up @@ -288,3 +310,5 @@ S2 differences: uses `getS2ColorValue` instead of `getColorValue`, no `s2` boole
**Cognitive complexity** — SonarQube flags functions whose cognitive complexity exceeds the threshold. Spec builder functions with many conditionals are the most common trigger. When a function grows complex, extract inline conditional chains or loops into named helper functions rather than inlining them. The `addData` and `addMarks` functions are the most likely candidates.

**Copyright header missing** — Every new `.ts`/`.tsx` source file requires the Apache 2.0 copyright block at the top. ESLint enforces this as a hard error. See `.claude/architecture.md` for the exact header text. Story files (`.story.tsx`) are exempt.

**Multi-line JSDoc/comments narrating the change** — New functions get at most a one-line JSDoc (description + `@param`/`@returns`), matching the length of sibling functions in the same file. Do not add paragraphs explaining why the mark was added or what was investigated while building it — that belongs in the PR description, never the code. See `CLAUDE.md`'s Code Style section for a worked example.
Loading
Loading