diff --git a/.claude/skills/maintenance/SKILL.md b/.claude/skills/maintenance/SKILL.md index 86d4125c..9d565b9f 100644 --- a/.claude/skills/maintenance/SKILL.md +++ b/.claude/skills/maintenance/SKILL.md @@ -53,7 +53,7 @@ Low-risk patch/minor bumps can go in one PR; majors and anything release-critica 10. **Git repo hygiene.** - **Line endings / `.gitattributes`.** If the repo has no `.gitattributes`, line endings drift (CRLF/LF mixed, `core.autocrlf=false`) and bulk edits balloon diffs. Add one and run a **dedicated** `git add --renormalize .` commit (its own PR, when no other work is in flight — it touches nearly every file). - - **Stale branches & worktrees.** `git worktree list` — remove leftover worktrees (anything under `.claude/worktrees/` or other agent/isolation worktrees) with `git worktree remove`. Then `git fetch --prune` to drop stale remote-tracking refs, and audit: `git branch --merged origin/dev` (local branches already in dev — safe to delete) and `git branch -r` (remote branches from closed/merged PRs). Delete merged/dead branches; **keep intentionally-parked ones** (note which and why — e.g. a blocked-upgrade branch like `upgrade/avalonia-12`). For branches *you didn't create*, surface and confirm before deleting rather than assuming abandoned. Confirm open PRs are still wanted. + - **Stale branches & worktrees.** `git worktree list` — remove leftover worktrees (anything under `.claude/worktrees/` or other agent/isolation worktrees) with `git worktree remove`. Then `git fetch --prune` to drop stale remote-tracking refs, and audit: `git branch --merged origin/dev` (local branches already in dev — safe to delete) and `git branch -r` (remote branches from closed/merged PRs). Delete merged/dead branches; **keep intentionally-parked ones** (note which and why — e.g. a major-upgrade branch that waits on a manual test pass). For branches *you didn't create*, surface and confirm before deleting rather than assuming abandoned. Confirm open PRs are still wanted. ## C. App data & runtime hygiene (lighter) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 724be32f..d3280985 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -44,20 +44,18 @@ updates: # --- Deliberate pins. Removing an ignore here without doing the matching # migration will produce a PR that builds but breaks at runtime. --- - # Avalonia 12 is a completed-but-parked migration on branch - # upgrade/avalonia-12. Take 11.x servicing, never the major. + # An Avalonia major is a migration, not a version bump. 11 -> 12 (#549) + # changed behavior in ways that still compiled, and only behavior tests + # and a GUI test pass caught them. Take 12.x servicing, and do the next + # major by hand. This pattern covers AvaloniaEdit too, but not + # ScottPlot.Avalonia. When a ScottPlot.Avalonia PATCH starts to require + # the next Avalonia major, restore fails with NU1605 and takes the whole + # grouped PR down with it. Pin that version with a `versions` ignore + # until the migration, as 5.1.59 was pinned while Avalonia 12 waited. - dependency-name: "Avalonia*" update-types: - version-update:semver-major - # 5.1.58 is the last build targeting Avalonia 11; 5.1.59+ requires - # Avalonia >= 12 and hard-fails restore with NU1605. This is a PATCH bump, - # so an update-type ignore would not catch it. Drop this entry as part of - # the Avalonia 12 migration. - - dependency-name: "ScottPlot.Avalonia" - versions: - - ">= 5.1.59" - # Pinned to keep the native libs in the [119.0, 120.0) range that managed # SkiaSharp 3.x requires. A 4.x bump reintroduces GitHub issue #139 # (TypeInitializationException on Linux at startup). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1e876774..d05e2c04 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -51,7 +51,7 @@ PerformanceStudio/ ## Architecture - **PlanViewer.Core** is the shared library. It contains the XML parser (`ShowPlanParser`), analysis rules (`PlanAnalyzer`), plan layout engine, text/JSON formatters, and all models. Both the GUI and CLI depend on it. -- **PlanViewer.App** is an Avalonia 11 desktop app using code-behind (no MVVM framework). It renders plan trees on a Canvas with the same operator icons as SSMS. +- **PlanViewer.App** is an Avalonia 12 desktop app using code-behind (no MVVM framework). It renders plan trees on a Canvas with the same operator icons as SSMS. - **PlanViewer.Cli** is a System.CommandLine-based CLI tool that wraps Core for command-line use. ## Code Style