Skip to content

Feature/playground#27

Merged
fedorovvvv merged 13 commits into
developfrom
feature/playground
May 5, 2026
Merged

Feature/playground#27
fedorovvvv merged 13 commits into
developfrom
feature/playground

Conversation

@fedorovvvv
Copy link
Copy Markdown
Collaborator

No description provided.

fedorovvvv and others added 13 commits May 5, 2026 21:36
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
@fedorovvvv fedorovvvv self-assigned this May 5, 2026
@fedorovvvv fedorovvvv merged commit a3f19e3 into develop May 5, 2026
3 checks passed
@fedorovvvv fedorovvvv deleted the feature/playground branch May 5, 2026 19:47
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
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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant