Feature/playground#27
Merged
Merged
Conversation
Parallel SvelteKit dev workflow for sandbox experiments without hitting this repo's own .forgeplan/ workspace. - playground/ — local Forgeplan workspace (config.yaml + dir skeleton); derived state (lance/, claims/, journal/, …) gitignored via playground/.gitignore. - template/vite.config.ts — FORGEPLAN_CWD override gated on `mode === 'playground'`; plain `vite dev` leaves env untouched and falls back to runForgeplan's default workspace resolution. - npm scripts: `dev:playground` at template/ (vite --mode playground) and repo root via `scripts/dev.mjs --playground`. Verified: - `npm run dev` → /api/health: ForgePlanWeb (11 artifacts). - `npm run dev:playground` → /api/health: Playground (0 artifacts). - `npm run check` → 358 files, 0 errors. - `npm run smoke` → PASS on fresh dist/ rebuild. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Extract the banner data and `printBanner()` into a sibling module
`bin/banner.mjs` and call it as the first line of `start()`. The
banner respects `NO_COLOR`, `TERM=dumb`, non-TTY stdout and the
existing `-q`/`--quiet` flag. ANSI Shadow figlet + 24-bit orange.
Rule 23 clarified: relative imports of sibling `.mjs` files inside
`bin/` are first-party — they ship in the published tarball and do
not introduce third-party resolution at `npx` time. The verification
grep is rewritten to handle multi-line `import { … } from "node:fs"`
correctly and to explicitly allow `./` and `../` specifiers, which
removes a false positive that the previous one-liner produced after
this extraction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Hovering a node now runs a BFS over filteredEdges and applies an opacity class scaled by hop distance — direct neighbours stay near full opacity, distant nodes fade further, disconnected nodes drop to 0.12. Edges and nodes both transition smoothly (180ms ease-out). Applied across all five views: Force, Tree, Radial, Lanes, and Matrix (row/col headers). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Populate playground/.forgeplan/ with a fictional "Helios" observability platform — six epics, sixteen PRDs, nineteen RFCs, thirteen ADRs, seventeen specs, thirteen problems, nine solutions, twenty-six evidence packs, four notes — wired with ~80 typed dependency links. Used as dogfood data for the SvelteKit graph UI: gives the force / lanes / matrix / radial / tree views a realistic, dense dataset exercising every artifact kind, every link relation (refines, informs, based_on, supersedes), and every lifecycle state. Lifecycle distribution mirrors a mature project: active 105 / deprecated 10 / superseded 4 / draft 4 (3.25%). All 26 EvidencePacks include the `## Structured Fields` block so `forgeplan score` produces non-trivial R_eff. Lance index, claims, state, and logs stay gitignored as elsewhere.
Selected/opened node now triggers the same BFS distance-based fade as hover. Hover keeps a stronger dim; selection-without-hover uses a softer dim via .graph.focus-soft override. Hover takes priority over selection when both apply. Applied uniformly to Force/Tree/Lanes/Radial/Matrix views. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add a brief "Local dev modes" subsection to README.md and README.ru.md explaining `npm run dev` vs `npm run dev:playground` and what the fictional Helios-themed playground/ workspace is for (exercising the viewer at realistic ~123-artifact scale, not published, not copied to user projects). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
forgeplan health --json returns blind_spots as [{id,title,issue}],
not string[]. Update HealthResponse type and InsightsRail render so
the rail shows the artifact id + title instead of toString'd objects.
…anels Move the hover store from widgets/dependency-graph down to entities/graph so widgets/insights-rail and widgets/artifact-panel can share it without crossing FSD layers. Add a `nodeHover` Svelte action and a `<NodeRef>` component as the single primitive for rendering an artifact id anywhere, and replace ad-hoc id renderings in InsightsRail (Recent / Agents / Drafts / Blocked / Cycles / Ready / Blind spots / Orphans / Stale / Lowest R_eff) and ArtifactPanel (header id, Outgoing, Incoming, parent_epic) so hovering any of them lights up the matching graph node. The original highlight module under widgets/dependency-graph/lib is kept as a re-export shim to avoid touching the five graph views in this commit; a TODO(fsd-cleanup) marks the follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add Unreleased entries for non-PRD additions (dev:playground + Helios seed, bin/banner.mjs, NodeRef + nodeHover) and the /api/health blind_spots render fix. Expand PRD-004 Changed with the three follow-up entries: distance-based BFS fade, selection-soft dim, and the FSD relocation of the hover store from widgets/dependency-graph/lib/ to entities/graph/lib/ (re-export shim with // TODO(fsd-cleanup)). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
# Conflicts: # .forgeplan/session.yaml # CHANGELOG.md # template/src/widgets/dependency-graph/ui/ForceView.svelte # template/src/widgets/dependency-graph/ui/RadialView.svelte
# Conflicts: # template/src/widgets/dependency-graph/ui/ForceView.svelte # template/src/widgets/dependency-graph/ui/RadialView.svelte
explosivebit
added a commit
that referenced
this pull request
May 5, 2026
…ps-f6 Pull in PR #27 (Feature/playground) merged to develop after this branch was cut. Auto-merge clean for ForceView.svelte and RadialView.svelte (both files added per-node `nodeClass` and BFS hover-distance imports on develop, complementary to F6's data-id and onNodeKeydown hooks). Conflict resolved: drop `.forgeplan/session.yaml` (deleted on develop). Refs: PRD-005 RFC-004
3 tasks
explosivebit
added a commit
that referenced
this pull request
May 5, 2026
## Summary
Release **v0.1.7** rolling up F4 + F5 + F6 + Feature/playground + LOW
security bump.
## What ships
- **F4 hierarchy clustering** (PRD-005, RFC-004, EVID-012) —
geometry-first RadialView (chord rule, radial-gap rule,
INTER_CLUSTER_GAP), `detectClusters` placement around the largest
cluster, ForceView extended with cluster-aware d3 forces.
- **F5 audit cleanup** (PRD-005, EVID-013) — closes 2 CRITICAL + 5 HIGH
+ 3 MEDIUM + 1 LOW from the post-merge 4-expert audit. Includes a real
regression fix (radii cache populated out of dependency order) covered
by 2 dedicated vitest tests. `noUncheckedIndexedAccess: true` enabled.
Total: 24 vitest tests passing.
- **F6 UX follow-ups** — RadialView cluster collapse ("−/+" toggle on
clusters with ≥3 rings); shared `keyboard-nav.ts` lib with cone-based
ArrowKey navigation between nodes (RadialView + ForceView).
- **PR #27 (`Feature/playground`)** — `npm run dev:playground` mode + a
123-artifact Helios observability workspace for dogfood testing;
`<NodeRef>` + `nodeHover` action; BFS distance-based hover fade.
- **Security** — CVE-2024-47764 (cookie<0.7.0, GHSA-pxg6-pf52-xh8x)
closed via `template/package.json#overrides`. Dependabot alert resolved.
## Verify
- svelte-check 0/0/410 files locally.
- vitest 24/24 passed (16 cluster + 2 regression + 6 keyboard-nav).
- npm run smoke PASS (build + bin scaffold + start + /api/health +
/api/list).
- DOM verification on the live workspace: 0 bbox overlaps, 23/23 cards
exact-on-orbit, ArrowRight from PRD-001 → RFC-002, collapse hides ring ≥
2.
## Test plan
- [ ] CI smoke matrix (3-OS × Node 22) green.
- [ ] After merge: tag v0.1.7 annotated, Draft GitHub Release → publish
fires `release.yml` → `npm publish --provenance`.
- [ ] Back-merge `release/v0.1.7` → `develop` so the version bump
doesn't get lost.
Refs: `PRD-005` `RFC-004` `EVID-012` `EVID-013`
🤖 Generated with [Claude Code](https://claude.com/claude-code)
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.
No description provided.