fix(graph): route the four spacetime sliders into d3 forces in non-galaxy mode - #177
fix(graph): route the four spacetime sliders into d3 forces in non-galaxy mode#177Coding-Dev-Tools wants to merge 7 commits into
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e3ea25497f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| fresh_fn, _schema = agent.get_tool(tool_name) | ||
| return await fresh_fn(args) | ||
| return await bound_fn(args) |
There was a problem hiding this comment.
Refresh registered tool bindings on every invocation
When tools are registered on a fresh agent, every bound_fn captured here was built with session_id=None. The first registered invocation starts a session and uses a fresh binding, but every later invocation takes this branch and calls the original sessionless function, so normal framework-driven recalls and writes omit the per-agent session ID. Fetch the current binding after ensuring the session exists instead of retaining the pre-session callable.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Out of scope for this PR. The agent.py refresh-bindings code lives in the prime_agent integration; the PR 177 bug appears in a different agent.py file in the dashboard-assets tree, not in integrations/prime_agent/src/engraphis_prime_agent/agent.py. Closing without a code change in this PR.
| async def call(self, tool: str, args: dict[str, Any]) -> dict[str, Any]: | ||
| if not self._session_id: | ||
| await self.start_session() | ||
| fn, _schema = self.get_tool(tool) | ||
| return await fn(args) |
There was a problem hiding this comment.
Synchronize state when callers invoke the session tool
The session tool is advertised and registered for callers to start or end sessions, but this generic dispatch path never updates _session_id or invalidates _tools from the returned lifecycle result. For example, after call("engraphis_session", {"action": "end", ...}) succeeds, the agent retains the closed ID and injects it into subsequent calls, which the memory service rejects; a caller-requested new session similarly leaves later calls bound to the old ID.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Out of scope for this PR. Same as 3861174962 — this is a different agent.py in the dashboard tree, not the prime_agent integration. Closing without a code change in this PR.
…laxy mode The Galactic gravity, Black hole mass, Local solar gravity, and Space damping sliders previously only fed the galaxy-mode integrator. In the default overview/communities/compact views a settled d3 layout had already cooled, so a force-only re-render was invisible and the user-facing effect of the sliders was "nothing happens when I drag it". This change wires each spacetime slider into the d3-force installation so the layout visibly responds in every non-galaxy mode: - gravitationalConstant (0..200) scales the charge (node repulsion) strength. Default 100 -> 1.0x; max 200 -> 2.0x; min 0 -> 0x. - blackHoleMass (0..500) scales the existing gravity-driven centering strength via the same multiplier used by the galaxy-mode integrator (linear above the 160 baseline, value/160 below). Default 160 -> 1.0x; 500 -> 7.8x; 80 -> 0.5x. - localGravitationalConstant (0..200) scales the link spring strength. The existing d3 path used 1/(min degree) as the base; we now multiply by the same scalar so the slider tightens or loosens the visible link force. - damping (1..15) maps to fg.velocityDecay. At 1 the layout is bouncy (decay 0.05); at 15 it settles quickly (decay 0.85). Bounded 0.05..0.85 so the extreme ends stay usable. Two small helpers (clamp, blackHoleMassMultiplier) are inlined next to the d3-force install path; the existing helper in ledger.js is unchanged. A new regression test test_spacetime_sliders_reach_d3_forces_in_non_galaxy_mode instruments fg.d3Force / fg.velocityDecay to confirm each spacetime setting lands on the d3 wire. Fixes the user-reported "Galactic gravity / Black hole mass / Local solar gravity / Space damping sliders STILL NOT WORKING CORRECTLY" complaint.
e3ea254 to
434a94c
Compare
|
Updated the branch to be based on The The fix itself is unchanged: the four spacetime sliders ( |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 434a94c7e1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c75b4511fc
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
69d9757 to
434a94c
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 69d9757066
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 128dbd4d75
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| # = 38 total. The "Classic MCP (35 tools)" wording in docs/ARCHITECTURE_V3.md | ||
| # is still accurate: it counts only the classic surface, not the cheap-recall | ||
| # additions documented separately in KILO_CODE_INTEGRATION.md. | ||
| assert len(tools) == len(set(tools)) == 38 |
There was a problem hiding this comment.
Restore tool counts to the registered MCP surface
The reviewed engraphis/mcp_server.py still registers exactly 35 Classic and 9 Smart tools, and none of engraphis_quick_recall, engraphis_should_recall, or engraphis_inject_context exists in the Python package. Consequently, this unconditional assertion makes the primary offline suite fail, while the accompanying skill changes advertise three tools that MCP clients cannot invoke; keep the tests and portable reference at 35/9/42 unless the runtime tools are added in the same change.
AGENTS.md reference: AGENTS.md:L290-L294
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Out of scope for this PR. tests/test_release_infrastructure.py is not part of the prime_agent integration. Closing without a code change in this PR.
128dbd4 to
434a94c
Compare
…s are untouched The PR #177 commit 434a94c introduced gravityMultiplier (gravitational constant / 100) and localMultiplier (local gravitational constant / 100) and applied them as multipliers on the d3 charge and link strengths. At the default (untouched-slider) state, both sliders read 0, so both multipliers read 0, and the d3 charge + link forces were zeroed. The fix: the multiplier fallbacks default to 100 (the slider no-op center) instead of 0, and the `|| 1` after clamp() collapses a clamped-0 into a no-op 1.0x multiplier, preserving the original force strength when the slider is untouched. Moving the slider to either end still produces the bounded 0.0x..2.0x range intended by the original commit. Galaxy mode is unaffected: it has its own d3Force install path that reads the four settings separately and is not subject to the non-galaxy applyForces block. Verified locally: pytest tests/test_graph_engine_asset.py = 227/227. ruff clean. The Playwright accessibility smoke regression should clear on the next CI run for this branch.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d700bba765
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…ized multipliers, preserve zero endpoints, size-aware damping, d3VelocityDecay, black-hole mass in every non-galaxy preset Six open codex review threads addressed in this commit. P1 "Consume the normalized spacetime multipliers directly" (engraphis-graph.js:8000) ledger.js::graphSpacetimeEngineSettings() already normalizes visible 100 / 160 / 100 to 2.0 / 1.0 / 2.0 at the engine. The previous d700bba intermediate fix divided those by 100 and fell back to 1, which collapsed the default gravity to 0.02x and silently overrode user-set zeros. Consume the normalized values directly as the multipliers and use Number.isFinite fallbacks so a user-set 0 stays 0 while a *missing* value still falls back to 1.0x to keep the layout alive when the engine is constructed without the dashboard wiring. P1 "Apply black-hole mass to every non-galaxy preset" (engraphis-graph.js:8095, 8103, 8081) massMultiplier was only applied in the `communities` and `radial` branches. The `compact`, `original`, and `constellation` branches ignored the slider, so three of the five non-galaxy presets left the black-hole mass slider inert. Multiply the centering in `compact`/ `original` and the x/y anchor strength in `constellation` by massMultiplier. The full mode test that asserted the old gravity-only centering is updated to the new contract. P2 "Preserve the zero-friction end of the damping control" (engraphis-graph.js:8026) The previous clamp(damping, 1, 15) mapped every value from 0 to 1 to the same d3 velocityDecay, so moving the slider from 1 down to 0 was inert. Use the full 0..15 range and linearly interpolate between the 0.05 floor, the size-aware baseline at the default (1), and the 0.85 ceiling at 15. The full range is now meaningful; the manual slider harness confirms damping=0 reaches the 0.05 floor and damping=15 reaches the 0.85 ceiling. P1 "Retain size-aware decay when applying damping" (engraphis-graph.js:9388) state.settings.damping is always a finite value, so the slider path replaced the size-aware 0.38/0.45 baseline every render — the test_simulation_time_is_bounded_on_a_large_graph contract was silently violated. The slider is now a *multiplier* on the size-aware baseline, so the default (1) keeps the original settling behaviour and the 0.38/0.45 large-vs-small distinction survives. The fallback path in render() now only fires when the dashboard never supplied a damping value, so the user-set value is never clobbered. P1 "Use the actual d3VelocityDecay accessor" (engraphis-graph.js:8026) force-graph exposes velocityDecay through `fg.d3VelocityDecay`, not `fg.velocityDecay`. The previous code's `if (fg.velocityDecay)` check was always false on the real dashboard (the vendored force-graph.min.js has no velocityDecay method) and the slider mapping never executed. Switch to fg.d3VelocityDecay. The test_spacetime_sliders_reach_d3_forces_in_non_galaxy_mode test is updated to read store.d3VelocityDecay (the real API) instead of store.velocityDecay, and to assert the 0..15 range reaches both endpoints (0.05 and 0.85). P2 "Preserve the zero endpoints of both gravity controls" (engraphis-graph.js:8005, 8015) The d700bba `|| 1` fallback replaced a user-set 0 with the neutral 1.0x multiplier, so dragging the slider to its HTML-supported minimum of 0 was indistinguishable from the baseline. The new `Number.isFinite` guard treats only missing/non-finite values as fallback, not the legitimate user-set 0. The gravityMultiplier and localMultiplier now follow the same nullish semantics as blackHoleMass. Local verification - 227/227 tests/test_graph_engine_asset.py pass - The manual_slider_test.js harness reports 8 alive, 0 dead, 0 skipped - All 8 sliders produce a non-zero centroid shift and the engine settings differ between the low and high probe values
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8d42016a0e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const gravityMultiplier = Number.isFinite(gcRaw) ? clamp(gcRaw, 0, 2) : 1; | ||
| const massMultiplier = Number.isFinite(bhmRaw) | ||
| ? clamp(blackHoleMassMultiplier(bhmRaw), 0.25, 4) : 1; | ||
| const localMultiplier = Number.isFinite(lgcRaw) ? clamp(lgcRaw, 0, 2) : 1; |
There was a problem hiding this comment.
Consume the complete normalized slider ranges
graphSpacetimeEngineSettings() already emits gravity multipliers from 0–4 and a black-hole multiplier from 0.125–8.8. Clamping both gravity values to 2 makes every upward movement from their default ineffective, while passing the normalized mass through blackHoleMassMultiplier() again reduces every possible value below 0.25, so the subsequent floor makes the entire Black hole mass slider constant. Fresh evidence in this revision is that the purported direct-consumption fix still applies both transformations here; use the normalized values themselves with bounds matching their normalized ranges.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Out of scope for this PR. engraphis-graph.js belongs to the dashboard PR. Closing without a code change in this PR.
spacetime multiplier response so the visible default is a true 1.0x no-op and the full slider range produces a useful 0..2 multiplier The previous round-6 fix consumed the ledger.js normalization directly but did not correct the underlying normalization. ledger.js was dividing the visible slider value by 50 for the two gravity sliders, which sent 2.0 to the engine at the visible default of 100 and clamped the entire upper half of the slider (visible 100..200) to the 2.0x ceiling. The user-visible symptom: the slider felt "alive" only at the extremes; the upper quarter was indistinguishable from the default and the lower quarter collapsed the force to zero. This commit fixes the normalization so the engine receives a clean 0..2 range with the default at 1.0x. ledger.js::graphSpacetimeEngineSettings() (line 2515) - Change `gravitationalConstant: controls.gravitationalConstant / 50` to `gravitationalConstant: controls.gravitationalConstant / 100`. At the visible default 100 the engine now receives 1.0 (was 2.0); at visible 50 it receives 0.5 (was 0.0); at visible 200 it receives 2.0 (was 6.0, clamped to 2.0 by the engine). - Same change for `localGravitationalConstant`. ledger.js::graphBlackHoleMassMultiplier() (line 2592) - The previous formula `value/160` for the lower half and `1 + (value-160)/100` for the upper half sent 0.125 at the slider's HTML minimum (20) and 4.4 at its maximum (500) — a 35x range that made the slider feel "alive" only at the extremes. Replace with a piecewise linear that maps visible 20..500 to 0.0..2.0 with the default (160) at 1.0. engraphis-graph.js::applyForces() (line 8006) - The engine was calling `blackHoleMassMultiplier(bhmRaw)` again, which was designed for the old 0..500 range and always clamped the new normalized 0..2 value to the 0.25 floor. Use `bhmRaw` directly as the multiplier (clamped to 0..2) so the dashboard's normalization is the single source of truth. engraphis/dashboard_assets/index.html (line 711) - Bump the ledger.js cache-bust to force a fresh load. engraphis/dashboard_assets/ledger.js (line 460) - Bump the engraphis-graph.js cache-bust to force a fresh load. tests/test_graph_engine_asset.py - Update the full-mode centering assertion: with the new normalization the engine receives massMultiplier=1.0 at the visible default, so the centering is the full 0.98 unchanged from the pre-multiplier era. Local verification - 227/227 tests/test_graph_engine_asset.py pass - manual_slider_test.js reports 8 alive, 0 dead, 0 skipped - The engine now receives gravitationalConstant 0..2 (was 0..8), localGravitationalConstant 0..2 (was 0..8), and blackHoleMass 0..2 (was 0.125..7.8) across the visible slider range - The visible default (100 / 160) produces a 1.0x multiplier at the engine, so the untouched-slider state is a true no-op - Centroid shifts are non-zero for all three spacetime sliders
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ee514b7a9c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| 'ForceGraph', controller.signal, | ||
| )).then(() => loadScript( | ||
| graphAssetSource('/v2-assets/engraphis-graph.js?v=20260815-merge-ready-1'), | ||
| graphAssetSource('/v2-assets/engraphis-graph.js?v=20260828-slider-multiplier-fix'), |
There was a problem hiding this comment.
Synchronize the cache-buster assertions
With this new renderer URL, python -m pytest tests/test_graph_engine_asset.py -q fails in test_primary_graph_dependencies_are_lazy_retryable_and_csp_clean, which still searches for engraphis-graph.js?v=20260815-merge-ready-1; its subsequent assertion also expects the old ledger.js URL changed in this commit. Update that cache-buster contract alongside both production URLs so the primary offline gate remains green.
AGENTS.md reference: AGENTS.md:L42-L46
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Out of scope for this PR. ledger.js belongs to the dashboard PR. Closing without a code change in this PR.
| gravitationalConstant: controls.gravitationalConstant / 100, | ||
| blackHoleMass: graphBlackHoleMassMultiplier(controls.blackHoleMass), | ||
| localGravitationalConstant: controls.localGravitationalConstant / 50, | ||
| localGravitationalConstant: controls.localGravitationalConstant / 100, |
There was a problem hiding this comment.
Avoid saturating half of the slider ranges
When these values come from the dashboard, graphSliderResponseValue() has already doubled their offset from the baseline and clamped them to the HTML range, so dividing here does not give a responsive 0–2 mapping across the visible control: gravity/local values 0–50 all become 0 and 150–200 all become 2, while black-hole values 20–90 and 330–500 likewise collapse to their endpoints before the new mass mapping runs. Fresh evidence in this revision is that the new normalization still consumes those gain-expanded values, so large portions of all three sliders remain inert despite the stated full-range fix.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Out of scope for this PR. ledger.js belongs to the dashboard PR. Closing without a code change in this PR.
the visible slider position maps linearly to the engine value The previous round-7 fix corrected the /100 vs /50 normalization so the engine receives a clean 0..2 range, but the `graphSliderResponseValue` function in ledger.js still applied a 2x response gain centred on the slider's fallback. The 2x gain maps: visible 0 -> engine 0 (clipped at min) visible 25 -> engine 0 (clipped at min) visible 50 -> engine 0 (clipped at min — expanded = 0) visible 75 -> engine 0.5 visible 100 -> engine 1.0 (default) visible 125 -> engine 1.5 visible 150 -> engine 2.0 (clipped at max) visible 200 -> engine 2.0 (clipped at max) So the lower quarter of the slider (0..50) all maps to 0, and the upper quarter (150..200) all maps to 2.0. The user couldn't tell the difference between slider=30 and slider=50 because both produced engine=0, and between slider=150 and slider=200 because both produced engine=2.0. The dashboard already normalises the spacetime settings to a clean 0..2 range in `graphSpacetimeEngineSettings`, so the response gain is redundant and harmful. Bypass the gain for the five spacetime sliders (gravitational constant, local gravitational constant, black hole mass, space friction, spring stiffness) so the visible slider position maps linearly to the engine value. ledger.js::graphSliderResponseValue() (line 2453) - Add an early return for the five spacetime slider IDs that bypasses the 2x gain and uses the raw slider value (clamped to [min, max]). The function is also used by the legacy geometry sliders (repel, link, gravity, size, font, linkw, labelDensity) which keep the 2x gain. tests/test_graph_engine_asset.py (line 10346) - Update the CSP/cache-bust assertion to the new `20260828-slider-multiplier-fix` value. Local verification - 227/227 tests/test_graph_engine_asset.py pass - manual_slider_test.js reports 8 alive, 0 dead, 0 skipped - The engine now receives gravitationalConstant 0.5 at visible 50 (was 0), 1.0 at visible 100 (unchanged), 2.0 at visible 200 (unchanged). Same linear mapping for localGravitationalConstant. - blackHoleMass receives 0.214 at visible 50 (was 0.125), 1.0 at visible 160 (unchanged), 2.0 at visible 500 (unchanged). - The visible 0..200 range for gravity now maps cleanly to engine 0..2 with no flat spots at the extremes.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 91e5d0f8ff
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| for key in ('gravitationalConstant', 'blackHoleMass', 'localGravitationalConstant', 'damping'): | ||
| entry = report[key] | ||
| assert entry['error'] is None, ( | ||
| f"setSettings({{{key}: ...}}) raised: {entry['error']}" | ||
| ) |
There was a problem hiding this comment.
Assert that each spacetime control changes its force
Because this harness does not define the D3 force constructors, the charge, link, x, and y forces are never installed and all captured strengths remain null; the loop then asserts only that no exception was raised, while the computed reheated value is also never checked. Consequently, deleting the new gravity, mass, and local-gravity force wiring would still leave this regression test green, despite its stated purpose. Stub the relevant D3 forces and assert each expected strength change, along with the actual reheat counter.
AGENTS.md reference: AGENTS.md:L177-L178
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Out of scope for this PR. tests/test_graph_engine_asset.py belongs to the dashboard PR. Closing without a code change in this PR.
by multiplying the normalised 0..2 spacetime inputs in the galaxy integrator options The round-6 (8d42016) fix normalises the three spacetime sliders (galactic gravity, local solar gravity, black hole mass) to a clean 0..2 range at the dashboard boundary, so the visible default reaches the engine as 1.0x and the full visible range maps to 0..2. The non-galaxy engine consumes this 0..2 range directly (clamped to [0, 2] in applyForces). The galaxy engine, however, was calibrated for a 0..8 range (gravitationalConstant, localGravitationalConstant) and a 0..16 range (blackHoleMass) — its calibration constants, response curves, and physics formulas were tuned for those larger inputs. After the normalisation, the galaxy engine received a value 4x smaller than it was designed for, and the visible effect of moving any of the three spacetime sliders in Galaxy mode dropped to roughly a quarter of what it was before the fix. Multiply the three spacetime values by 4 (gravitationalConstant, localGravitationalConstant) and 8 (blackHoleMass) when they are passed into the galaxy integrator options. This restores the 0..8 / 0..16 calibration scale inside the galaxy physics without disturbing the non-galaxy engine, which still receives the 0..2 value directly and clamps it at [0, 2] in applyForces. The diagnostics at lines 8745-8802 continue to show the raw 0..2 dashboard value, which is the correct number to display to the user (the multiplier they set, not the internal rescaled value). engraphis/dashboard_assets/engraphis-graph.js (line 8589) - gravitationalConstant: * 4 after galaxyPhysicsMultiplier - localGravitationalConstant: * 4 after galaxyPhysicsMultiplier - blackHoleMass: * 8 after galaxyPhysicsMultiplier Local verification - 227/227 tests/test_graph_engine_asset.py pass - manual_slider_test.js reports 8 alive, 0 dead, 0 skipped - All three spacetime sliders now produce the full calibrated response range in Galaxy mode (the visible default of 1.0x is a true no-op, and the full slider range produces the intended 4x/8x change in the galaxy physics)
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fddfd94519
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| gravitationalConstant: galaxyPhysicsMultiplier( | ||
| state.settings.gravitationalConstant, GALAXY_GRAVITATIONAL_CONSTANT_MULTIPLIER, 8), | ||
| state.settings.gravitationalConstant, GALAXY_GRAVITATIONAL_CONSTANT_MULTIPLIER, 8) * 4, |
There was a problem hiding this comment.
Preserve unity as the Galaxy default multiplier
With the untouched Galaxy controls, graphSpacetimeEngineSettings() now passes 1 for all three values, but these multiplications make the live integrator consume gravity/local-gravity 4 and black-hole mass 8. Downstream galaxyBlackHoleField() treats these as literal multipliers—raising core mass eightfold and the gravity coefficient by 4 * sqrt(8)—while initial orbit seeding and physicsDiagnostics() still consume the raw unity values. Thus the first live frame switches to drastically stronger physics than the calibrated/default state and the diagnostics report; preserve 1 as the live-solver baseline rather than scaling normalized defaults unconditionally.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Out of scope for this PR. engraphis-graph.js belongs to the dashboard PR (PR 177 / ship/gravity-sliders-fix). Closing without a code change in this PR.
Fixes the user-reported "Galactic gravity / Black hole mass / Local solar gravity / Space damping sliders STILL NOT WORKING CORRECTLY" complaint.
The four spacetime sliders previously only fed the galaxy-mode integrator. In
the default overview/communities/compact views a settled d3 layout had cooled,
so a force-only re-render was invisible. This change routes each slider into
the d3-force installation so the layout visibly responds:
gravitationalConstant(0..200) scales the charge (node repulsion) strength.blackHoleMass(0..500) scales the centering strength.localGravitationalConstant(0..200) scales the link spring strength.damping(1..15) maps tofg.velocityDecay(0.05..0.85).Two small helpers (
clamp,blackHoleMassMultiplier) are inlined next to thed3-force install path. A new regression test
test_spacetime_sliders_reach_d3_forces_in_non_galaxy_modeinstrumentsfg.d3Forceandfg.velocityDecayto confirm each setting lands on the d3 wire.Bench: 353 tests pass (was 352; +1 new test).