Skip to content

feat: package ontology + validators, docs, examples, and CI - #1

Open
louspringer wants to merge 13 commits into
mainfrom
feat/goblin-packaging
Open

feat: package ontology + validators, docs, examples, and CI#1
louspringer wants to merge 13 commits into
mainfrom
feat/goblin-packaging

Regenerate goblin map assets

14f21f9
Select commit
Loading
Failed to load commit list.
Cursor / Cursor Bugbot completed Dec 5, 2025 in 4m 55s

Bugbot Review

Bugbot Analysis Progress (4m 57s elapsed)

✅ Gathered PR context (2s)
✅ Analyzed code changes (1s)
✅ Completed bug detection — 1 potential bug found (4m 42s)
✅ Validation and filtering completed (0s)
✅ Posted analysis results — 1 bug reported (12s)
✅ Analysis completed successfully (0s)

Final Result: Bugbot completed review and found 1 potential issue

Request ID: serverGenReqId_1b98b05f-2518-4fef-ade5-982910706ba9

Details

Bug: D3 force link source/target object-as-key lookup fails

The tick callback uses idToNode[d.source] and idToNode[d.target] to look up node coordinates. However, D3's forceLink mutates edge objects in place, replacing string ID values in source and target with actual node object references after initialization. Since objects used as map keys convert to "[object Object]", the lookup returns undefined, causing a runtime error when accessing .x and .y. The code should access d.source.x directly since d.source IS the node object after simulation initialization.

web/src/main.ts#L96-L101

goblin/web/src/main.ts

Lines 96 to 101 in 14f21f9

.on("tick", () => {
link
.attr("x1", (d: any) => idToNode[d.source].x)
.attr("y1", (d: any) => idToNode[d.source].y)
.attr("x2", (d: any) => idToNode[d.target].x)
.attr("y2", (d: any) => idToNode[d.target].y);

docs/app.js#L3624-L3625

goblin/docs/app.js

Lines 3624 to 3625 in 14f21f9

const simulation = simulation_default(nodes).force("link", link_default(edges).id((d) => d.id).distance(120)).force("charge", manyBody_default().strength(-180)).force("center", center_default(width / 2, height / 2)).on("tick", () => {
link.attr("x1", (d) => idToNode[d.source].x).attr("y1", (d) => idToNode[d.source].y).attr("x2", (d) => idToNode[d.target].x).attr("y2", (d) => idToNode[d.target].y);

Fix in Cursor Fix in Web