chore(release): back-merge v0.2.4 into develop#150
Merged
Conversation
## Summary Release **v0.1.8** rolling up the overnight + audit cycle: - **F11** (PRD-006 + RFC-005) — body preview + decision impact drill-down across 5 graph views. - **F12** (PRD-007 + RFC-006) — stale + blind-spot push notifications via Notification API. - **F13** (tactical) — Copy as markdown button in ArtifactPanel. - **Hotfix** — break `effect_update_depth_exceeded` in HomePage health-poll diff (`prevHealthSnapshot` demoted from `$state` to plain `let`). - **F14** (post-audit cleanup) — 7 HIGH + 7 MEDIUM/LOW findings closed (5-expert audit on F11/F12/F13). Includes lazy-load of `marked + DOMPurify` (-21 KB gzip first-paint), Matrix impact-mode CSS fix, iframe Notification guards, branded SafeHtml type, clipboard fallback, reduced-motion broadening, DOMPurify `noopener` hook (CWE-1022). ## Forgeplan artifacts | Artifact | Status | R_eff | |---|---|---| | PRD-006 | active | > 0 (EVID-014) | | RFC-005 | active | > 0 (EVID-014) | | PRD-007 | active | > 0 (EVID-015) | | RFC-006 | active | > 0 (EVID-015) | | EVID-014 | active | F11 acceptance — CL3 / test | | EVID-015 | active | F12 acceptance — CL3 / test | ## Verify - svelte-check 0/0/436. - vitest 70/70 (40 baseline + 13 F11 + 9 F12 + 6 F13 + 2 F14). - npm run smoke PASS. - Playwright DOM check: 0 console errors. - npm audit (--omit=dev): 0 vulnerabilities. ## Test plan - [ ] CI smoke matrix (3-OS × Node 22) green. - [ ] After merge: tag `v0.1.8` annotated on `main`, Draft GitHub Release → publish fires `release.yml` → `npm publish --provenance`. - [ ] Back-merge `release/v0.1.8` → `develop` so version bump and any release-only fixes propagate. ## Backlog (not in this release) Deferred from F14 audit: - UX-H2 mermaid latent (no current artifact uses mermaid; ADR for diagram renderer when needed). - TS cosmetic refactors (`getOrInit` helper sweep, `Omit` patterns). - SEC-L2 secret-pattern redaction in body excerpt (needs thoughtful regex set — separate artifact). - SEC-L3 kindFilter/statusFilter validation against known list. - FE-L2..L4 rare edge cases. Strategic deferrals from earlier sessions: time-travel (forgeplan journal slider), semantic search (Lance index), "what changed" diff view, annotation layer. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
## Summary
**v0.1.9** — bug-fix release responding to user-reported issues on a
real 289-artifact workspace.
### CRITICAL (runtime crash)
- **`each_key_duplicate`** runtime error cascaded across Force / Tree /
Radial / Lanes / Matrix views when workspace contained legitimately
duplicate edges (two evidence packs both informing same PRD with same
relation). Fixed by deduplicating in `lib/filter.ts#filterEdges` at the
single chokepoint.
- 4 unit tests added (visibility filter, exact dedup, relation
preservation, ordering).
### UX
- **HealthBar** chips restructured: monospace tabular-nums values +
uppercase 0.12em labels. Reads as "30 TOTAL · 27 ACTIVE · 3 DRAFT"
instead of mashed text.
- **ArtifactPanel default width 380 → 658 px** (+73%). MAX_RATIO 0.6 →
0.7. Drag-resize handle on left edge with localStorage persist.
- **"📋 Copy as markdown" moved** into body-actions row next to Hide/Show
body.
- **Body section opens by default** with race-safe `bodyHydrated` guard.
- **`.ghost` button rule** added inside ArtifactPanel (was missing —
buttons were browser-default).
- **Sticky-stack panel sections + meta-trail** — as user scrolls, each
section pins below header with escalating z-index; the depth +
updated_at values fade-slide into right side of body-actions when its
sticky line is reached.
- **No nested scroll containers** — `.artifact-body` and `.links ul`
lost their `max-height: Xvh; overflow-y: auto`. The outer panel scrolls.
- **Page shell** `.root { overflow: hidden }` — no horizontal/vertical
scroll on page level.
### Polish
- Chrome 132+ devtools probe 404 suppressed via
`template/static/.well-known/appspecific/com.chrome.devtools.json = {}`.
## Verify
- svelte-check 0/0/437.
- vitest 74/74 (70 baseline + 4 filter dedup tests).
## Test plan
- [ ] CI smoke matrix (3-OS × Node 22) green.
- [ ] After merge: tag `v0.1.9` annotated on `main`, Draft GitHub
Release → publish fires `release.yml` → `npm publish --provenance`.
- [ ] Back-merge `release/v0.1.9` → `develop`.
- [ ] User runs `npx @forgeplan/web init --force` against the real
289-artifact workspace — crash gone, panel comfortable to read PRD
bodies.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
## Summary **v0.1.10** — F16 ships infinite-feel zoom + minimap with click-teleport. - **scaleExtent [0.3, 3] → [0.05, 50]** on Force / Tree / Radial / Lanes / Matrix / Sunburst (~167× dynamic range). Sankey unchanged (fixed-grid). - **Minimap** in bottom-right of `.canvas-body`: 180×120 SVG miniature with viewport rect overlay; click or drag teleports canvas to that point at `k=1`. Active for Force / Tree / Radial / Lanes; Matrix / Sankey / Sunburst show muted "MINIMAP N/A" stub. - New `lib/minimap-math.ts` — pure functions + 7 unit tests. - View teleport API: `onViewState` callback prop + `panTo()` method via `bind:this` on supported views. ## Verify - svelte-check 0/0/440. - vitest 81/81 (74 baseline + 7 minimap-math). ## Test plan - [ ] CI smoke matrix (3-OS × Node 22) green. - [ ] After merge: tag `v0.1.10` on main, Draft GitHub Release → publish fires `release.yml` → `npm publish --provenance`. - [ ] Back-merge `release/v0.1.10` → `develop`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
## Summary **v0.1.11** — F17 ships minimap to Matrix / Sankey / Sunburst (was N/A in v0.1.10). - Each view projects its layout-specific positions into canvas-space and emits `onViewState`. - Click-teleport via `panTo(canvasX, canvasY, k=1)` — works on all 7 views. ## Verify - svelte-check 0/0/440. - vitest 81/81. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
… light theme (#65) ## Summary Bundles three feature streams from develop into v0.1.12: - **F18 Time-travel slider — SINGLE mode** (PR #63) — `/api/snapshot?at=ISO`, `/api/timeline-events`, `widgets/timeline/`, canvas snapshot hydration. PRD-008 / RFC-007 / EVID-020 active. - **`init --experimental` flag** (PR #60) — opt-in to esbuild single-file bundle, ~9× smaller `dist/`. PRD-014 / RFC-013 / EVID-018 active. Closes the verification ask in #59. - **Multi-graph mosaic dashboard** (PR #64) — split-pane layout with persistent layout, addresses #61. - **Version display footer** (PR #57) — `getForgeplanVersion()` + `compareSemver`. PRD-012 / RFC-011 / EVID-016 active. - **Shared UI primitives + npm update notification** (PR #58) — modal manager + update checker. PRD-013 / RFC-012 / EVID-017 active. - **Light theme** (PR #62) — dual-token CSS + `data-theme` attribute. PRD-015 / RFC-014 / EVID-019 active. COMPARE mode for time-travel (Alt-drag two scrubbers + diff overlay) intentionally deferred — endpoint returns 501 with TODO marker. ## Why Five feature PRs accumulated on develop since v0.1.11 (May 6). Cutting them as a single minor-patch release rather than gating on the v0.2.0 milestone (full proactive-surfacer arc) keeps the cadence steady and ships the bundle-size win + multi-graph layout to users now. ## Test plan - [x] `npm run check` — 0 errors / 0 warnings across 486 files - [x] `npx vitest run` — 14 files / 127 tests pass - [x] PR #63 CI matrix (3 OS, node 22) — green before merge - [ ] release/v0.1.12 CI matrix — pending on this PR - [ ] Manual smoke after tag → GitHub Release fires `release.yml` workflow ## Refs PRDs activated since v0.1.11: PRD-008, PRD-012, PRD-013, PRD-014, PRD-015. RFCs activated: RFC-007, RFC-011, RFC-012, RFC-013, RFC-014. Evidence: EVID-016 / EVID-017 / EVID-018 / EVID-019 / EVID-020. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
## Summary Release branch for v0.1.13. Cuts from `develop` (38 commits ahead of `main`). ## Highlights - **shared/ui catalogue** (PRD-018 / RFC-016) — 20+ primitives based on `bits-ui`, showcased on `/playground` in light + dark themes. - **Rule 24** — `shared/ui` ownership and customisation discipline. Forbids `:global()` re-skins of primitive internals from upper FSD layers; ships a verification grep snippet. - **Audit-driven primitive variants**: `Button.variant=ghost-mono`, `Button.size=icon`, `Badge.variant=mono`, `Toggle/ToggleGroup.variant=outline-mono`, `Alert.tone=banner`, `TabsList.wrap`. Replaces hand-rolled markup across widgets. - **`orch` theme** — third palette (Orchestra-inspired), exposed as a hidden 5-click easter egg with a 2 s freeze after unlock. - **Dense-graph render-resilience** for Sankey + Tree at 100+ artifacts. - **Adopt `svelte-sonner`** for toasts. - **Revert** Force 3D experimental Threlte view mode (#103, reverted in #105). `dist-experimental` cap stays at 6M. ## Test plan - [x] `npm run build` — both `dist/` and `dist-experimental/` build clean (dist-experimental: 2.43M) - [x] `npm run smoke` — passes against scratch workspace - [ ] CI matrix (ubuntu / macos / windows) green - [ ] No host-isolation regressions (rule 20) - [ ] No template-purity regressions (rule 21) - [ ] No mutating subcommands behind `/api/*` (rule 22) Refs: PRD-018, RFC-016, EVID-022, EVID-023, EVID-024, PRD-019 🤖 Generated with [Claude Code](https://claude.com/claude-code)
## Summary First minor release on top of 0.1.13. - Multi-instance registry + `/api/instances` + HealthBar switcher (PRD-027 / RFC-023 / SPEC-003 / ADR-004) - `init --scope user|project` with workspace-agnostic user scope (PRD-025 / RFC-021 / ADR-004) - `bin/` adopts citty (^0.2.2) and splits into `cli/`, `commands/`, `lib/` (ADR-003) - Feature-flag + image system; bundle approach is now the universal artifact form. `--experimental` is a deprecated alias for `--image nightly` (removed in 0.3.0) (PRD-030 / RFC-026 / ADR-005) - Multi-tab artifact viewing (Shift+click), `Combobox` primitive in `shared/ui/`, `adapter-node` precompress disabled ## Why 19 commits on `develop` since 0.1.13, multiple `feat` entries → MINOR bump per Conventional Commits + SemVer (`guides/GIT-FLOW-GUIDE.ru.md` §6). `Refs: PRD-025, PRD-027, PRD-030` ## Test plan - [ ] CI matrix green (ubuntu / macos / windows) - [ ] `npm run build` succeeds locally; `dist/` + `dist-nightly/` regenerated, both ≤ 3 MB - [ ] `npm run smoke` exercises both `stable` and `nightly` images - [ ] `node bin/forgeplan-web.mjs init -y` against a scratch dir copies the new image - [ ] `node bin/forgeplan-web.mjs --version` prints `0.2.0` ## Release procedure After merge (per CLAUDE.md): 1. `git checkout main && git pull` 2. `git tag -a v0.2.0 -m "release v0.2.0" && git push origin v0.2.0` 3. GitHub UI → Releases → Draft a new release → tag `v0.2.0`, target `main` → Publish (fires `release.yml` → `npm publish --provenance`). 4. Back-merge: `git checkout develop && git merge --no-ff release/v0.2.0 && git push origin develop`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Release v0.2.1 — patch fixes for instance switcher (Popover+Command rewrite), registry heartbeat race, and Timeline toggle regression.
## Summary - `feat(health-bar)`: instance switcher rebuilt — Popover → Dialog, skeleton loading, live status + validation, refresh on open - `fix(button)`: center SVG icons in flex layout ## Why Patch release: accumulates health-bar instance switcher improvements shipped on `develop` since v0.2.1. ## Test plan - [ ] CI matrix (ubuntu / macos / windows) green - [ ] `npm run smoke` passes post-merge - [ ] Instance switcher opens as Dialog, shows skeleton on load, refreshes on re-open Refs: release/v0.2.2 🤖 Generated with [Claude Code](https://claude.com/claude-code)
## Summary Release `v0.2.3` — multi-instance switcher bugfixes. **Changes since v0.2.2:** - fix(health-bar): normalise `localhost` → `127.0.0.1` so current instance is correctly excluded from switcher list - fix(health-bar): split reactive `$effect`s to eliminate 2 255 req/s flood loop caused by `otherInstances` tracking inside `switcherOpen` effect - fix(instance-status): add CORS headers so cross-port status fetches are not blocked by the browser - fix(registry): reduce server-side cache TTL from 2 000 ms to 500 ms for faster instance discovery ## Test plan - [ ] CI matrix green (ubuntu / macos / windows × node 22) - [ ] `npm run smoke` green locally 🤖 Generated with [Claude Code](https://claude.com/claude-code)
## Summary Patch release **v0.2.4** — graph layout normalization. - ForceView no longer drifts between renders (mulberry32-seeded init). - All 5 views sort nodes by connection degree as a secondary key. - Sankey / Sunburst untouched (already deterministic). ## Changes since v0.2.3 - `feat(dependency-graph): normalize node layout — seeded init + degree-first sort` (PR #148) — Refs PRD-033, RFC-027, EVID-039 ## Test plan - [x] PR #148 → develop: CI matrix green (ubuntu / macos / windows × Node 22) - [ ] CI matrix on this PR (release → main) - [ ] After merge: tag `v0.2.4` on `main`, publish GitHub Release → triggers `release.yml` → `npm publish --provenance` - [ ] Back-merge release → develop Refs: PRD-033, RFC-027, EVID-039
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Back-merge of v0.2.4 from
mainintodevelop— propagates the0.2.4version bump so subsequent feature branches start at the published SHA.Branch
release/v0.2.4was auto-deleted after merging PR #149; this branch was created offmainto perform the same back-merge perCLAUDE.mdRelease procedure §10.Why
Standard final step of the release flow.
Notes
v0.2.4tag pushed onmain✅release.ymlran butnpm publishreturned 404 PUT @forgeplan/web — likelyNPM_TOKENrepo secret needs rotation. Tag is intact; can rerun the workflow after the secret is refreshed, or publish manually. NOT a blocker for this PR.Refs: PRD-033, RFC-027, EVID-039