Voyage: tab switching, exact solver rewrite, community strategies - #13

Open
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching
Open

Voyage: tab switching, exact solver rewrite, community strategies#13
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching

Conversation

@greenbrad

@greenbradgreenbrad commented Aug 20, 2026

Copy link
Copy Markdown

Summary

This grew from a tab-switching fix into a larger voyage overhaul; commits are self-contained and reviewable in order.

Placement fixes

  • Automatic chart inventory tab switching during Place (both directions, at most one switch per run). Tab buttons resolve via the fixed child path [3.11.0] with a geometry-scan fallback; every click is verified (shiny-highlight before, chart visible after).
  • Rotation now compares the resulting orientation (the same formula the optimizer's match markers use) instead of the raw rotation counter, with a settle-wait and click cap — fixes intermittently unrotated or endlessly spinning pieces.

Solver

  • VoyagePlannerFast rewritten: interchangeable charts are grouped (with correct rotation translation back to concrete pieces), rotation locks honored, per-connection borders scored exactly via arm-count profiles, and reported scores come from the real scorer, so the UI always reconciles and lock bonuses no longer leak into displayed scores.
  • The slow MRV planner is removed: the fast solver was verified against it on 200 randomized puzzles (equivalence + structural grid validation, 0 failures) while being ~300x faster, which matters now that both chart tabs feed the pool.

Strategies (ported from one-more-map's solver; mod ids mapped to this game's raw names)

  • Seven curated strategies (Alc & Go with two layout variants, Anchorfield Fishing, Speedrun Strongboxes, Meatfish, Magic Ethereal, Divine Border Rares, Divine Strongboxes) with reward-weight overrides, position rules, border-resolved rules, and exact connector layouts — selectable via a dropdown in the optimizer window.
  • Keeper reservations: burn strategies hold back other strategies' fuel (rare-implicits are Divine fuel, Fracture charts are Meatfish fuel), with a protect toggle and held-back count.
  • A border- and inventory-aware suggestion line ranks strategies by rolled borders + piece readiness, with a one-click Use button and a "banking toward" hint.

UI

  • Chart-quality frames in the chart inventory (specialty/good/useful/junk, strategy-aware; keepers show violet) and a fix for labels drawing on hidden-tab charts whose rects overlap the visible tab.
  • "want:" labels on strategy target tiles with green/red fulfillment frames.
  • A strategy-objective column in the solutions list so the ranking stays legible.

Testing

  • Solver equivalence fuzzing vs the (now removed) exhaustive planner: 120 plain + 80 strategy puzzles, 0 failures, all fast-solver grids structurally validated. The fuzzing also caught and fixed a symmetry-breaking bug in the old planner along the way.
  • Tab switching, rotation, highlighting and strategy solves verified in-game.

🤖 Generated with Claude Code

Brad Greenand others added 3 commits August 20, 2026 16:37
The chart inventory spans multiple tabs; AvailableCharts includes the
hidden tab's charts with overlapping rects, so placement previously
stalled on the hover check when a solution used charts from the
inactive tab.
- Resolve the tab buttons directly via the tab strip at child path
[3.11.0] (verified against a live UI dump), with a geometry-based
scan as fallback if a patch moves the strip.
- Verify every tab click: shiny-highlight before, target chart
becoming visible after; failures abort cleanly and write
voyage_ui_dump.txt for diagnostics.
- Order placement so charts on the active tab are placed first,
switching tabs at most once per run.
- Add a Dump UI button to the optimizer window for future UI mapping.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The rotation loop compared the game's rotation counter to the solver's
step count and read the chart component with no settle wait, so a
transiently-null read skipped rotation entirely, and symmetric pieces
could over-click or spin without terminating. Wait for the component,
compare the resulting orientation (Room.Path rotated by the counter,
matching the optimizer's match markers), and cap rotation clicks.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dance UI
Solver:
- Rewrite VoyagePlannerFast: group interchangeable charts (with correct
rotation translation back to concrete pieces), honor rotation locks,
score per-connection borders exactly via arm-count profiles, and report
scores from the real scorer (no more lock-bonus leakage).
- Remove the slow MRV planner and its time-limit/cancel UI: the fast
solver is exact and was verified against the exhaustive planner on 200
randomized puzzles (0 mismatches, all grids structurally validated)
while being ~300x faster.
Strategies (ported from one-more-map's solver, mod ids mapped to this
game's raw names):
- Seven curated strategies with reward-weight overrides, position rules,
border-resolved rules, and exact connector layouts; selectable via a
dropdown (with per-strategy layout variants) in the optimizer window.
- Keeper reservations: burn strategies exclude other strategies' fuel
(with a protect toggle and held-back count).
- Border- and inventory-aware strategy suggestion with readiness
tracking and a banking hint.
UI:
- Chart-quality frames in the chart inventory (specialty/good/useful/
junk, strategy-aware; keepers show violet), hidden-tab label fix.
- want: labels on target tiles with green/red fulfillment frames.
- Strategy objective column so ranking stays legible.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@greenbradgreenbrad changed the title Voyage: automatic chart tab switching during placementVoyage: tab switching, exact solver rewrite, community strategiesAug 21, 2026
A negative objective is almost always layout deviation penalties; show
a Layout k/9 tiles-matched line (with a hint when the free pool lacks
the shapes) so the number explains itself.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@greenbrad
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Voyage: tab switching, exact solver rewrite, community strategies - #13

Open
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching
Open

Voyage: tab switching, exact solver rewrite, community strategies#13
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching

Conversation

@greenbrad

@greenbradgreenbrad commented Aug 20, 2026

Copy link
Copy Markdown

Summary

This grew from a tab-switching fix into a larger voyage overhaul; commits are self-contained and reviewable in order.

Placement fixes

  • Automatic chart inventory tab switching during Place (both directions, at most one switch per run). Tab buttons resolve via the fixed child path [3.11.0] with a geometry-scan fallback; every click is verified (shiny-highlight before, chart visible after).
  • Rotation now compares the resulting orientation (the same formula the optimizer's match markers use) instead of the raw rotation counter, with a settle-wait and click cap — fixes intermittently unrotated or endlessly spinning pieces.

Solver

  • VoyagePlannerFast rewritten: interchangeable charts are grouped (with correct rotation translation back to concrete pieces), rotation locks honored, per-connection borders scored exactly via arm-count profiles, and reported scores come from the real scorer, so the UI always reconciles and lock bonuses no longer leak into displayed scores.
  • The slow MRV planner is removed: the fast solver was verified against it on 200 randomized puzzles (equivalence + structural grid validation, 0 failures) while being ~300x faster, which matters now that both chart tabs feed the pool.

Strategies (ported from one-more-map's solver; mod ids mapped to this game's raw names)

  • Seven curated strategies (Alc & Go with two layout variants, Anchorfield Fishing, Speedrun Strongboxes, Meatfish, Magic Ethereal, Divine Border Rares, Divine Strongboxes) with reward-weight overrides, position rules, border-resolved rules, and exact connector layouts — selectable via a dropdown in the optimizer window.
  • Keeper reservations: burn strategies hold back other strategies' fuel (rare-implicits are Divine fuel, Fracture charts are Meatfish fuel), with a protect toggle and held-back count.
  • A border- and inventory-aware suggestion line ranks strategies by rolled borders + piece readiness, with a one-click Use button and a "banking toward" hint.

UI

  • Chart-quality frames in the chart inventory (specialty/good/useful/junk, strategy-aware; keepers show violet) and a fix for labels drawing on hidden-tab charts whose rects overlap the visible tab.
  • "want:" labels on strategy target tiles with green/red fulfillment frames.
  • A strategy-objective column in the solutions list so the ranking stays legible.

Testing

  • Solver equivalence fuzzing vs the (now removed) exhaustive planner: 120 plain + 80 strategy puzzles, 0 failures, all fast-solver grids structurally validated. The fuzzing also caught and fixed a symmetry-breaking bug in the old planner along the way.
  • Tab switching, rotation, highlighting and strategy solves verified in-game.

🤖 Generated with Claude Code

Brad Greenand others added 3 commits August 20, 2026 16:37
The chart inventory spans multiple tabs; AvailableCharts includes the
hidden tab's charts with overlapping rects, so placement previously
stalled on the hover check when a solution used charts from the
inactive tab.
- Resolve the tab buttons directly via the tab strip at child path
[3.11.0] (verified against a live UI dump), with a geometry-based
scan as fallback if a patch moves the strip.
- Verify every tab click: shiny-highlight before, target chart
becoming visible after; failures abort cleanly and write
voyage_ui_dump.txt for diagnostics.
- Order placement so charts on the active tab are placed first,
switching tabs at most once per run.
- Add a Dump UI button to the optimizer window for future UI mapping.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The rotation loop compared the game's rotation counter to the solver's
step count and read the chart component with no settle wait, so a
transiently-null read skipped rotation entirely, and symmetric pieces
could over-click or spin without terminating. Wait for the component,
compare the resulting orientation (Room.Path rotated by the counter,
matching the optimizer's match markers), and cap rotation clicks.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dance UI
Solver:
- Rewrite VoyagePlannerFast: group interchangeable charts (with correct
rotation translation back to concrete pieces), honor rotation locks,
score per-connection borders exactly via arm-count profiles, and report
scores from the real scorer (no more lock-bonus leakage).
- Remove the slow MRV planner and its time-limit/cancel UI: the fast
solver is exact and was verified against the exhaustive planner on 200
randomized puzzles (0 mismatches, all grids structurally validated)
while being ~300x faster.
Strategies (ported from one-more-map's solver, mod ids mapped to this
game's raw names):
- Seven curated strategies with reward-weight overrides, position rules,
border-resolved rules, and exact connector layouts; selectable via a
dropdown (with per-strategy layout variants) in the optimizer window.
- Keeper reservations: burn strategies exclude other strategies' fuel
(with a protect toggle and held-back count).
- Border- and inventory-aware strategy suggestion with readiness
tracking and a banking hint.
UI:
- Chart-quality frames in the chart inventory (specialty/good/useful/
junk, strategy-aware; keepers show violet), hidden-tab label fix.
- want: labels on target tiles with green/red fulfillment frames.
- Strategy objective column so ranking stays legible.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@greenbradgreenbrad changed the title Voyage: automatic chart tab switching during placementVoyage: tab switching, exact solver rewrite, community strategiesAug 21, 2026
A negative objective is almost always layout deviation penalties; show
a Layout k/9 tiles-matched line (with a hint when the free pool lacks
the shapes) so the number explains itself.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@greenbrad
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Voyage: tab switching, exact solver rewrite, community strategies - #13

Open
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching
Open

Voyage: tab switching, exact solver rewrite, community strategies#13
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching

Conversation

@greenbrad

@greenbradgreenbrad commented Aug 20, 2026

Copy link
Copy Markdown

Summary

This grew from a tab-switching fix into a larger voyage overhaul; commits are self-contained and reviewable in order.

Placement fixes

  • Automatic chart inventory tab switching during Place (both directions, at most one switch per run). Tab buttons resolve via the fixed child path [3.11.0] with a geometry-scan fallback; every click is verified (shiny-highlight before, chart visible after).
  • Rotation now compares the resulting orientation (the same formula the optimizer's match markers use) instead of the raw rotation counter, with a settle-wait and click cap — fixes intermittently unrotated or endlessly spinning pieces.

Solver

  • VoyagePlannerFast rewritten: interchangeable charts are grouped (with correct rotation translation back to concrete pieces), rotation locks honored, per-connection borders scored exactly via arm-count profiles, and reported scores come from the real scorer, so the UI always reconciles and lock bonuses no longer leak into displayed scores.
  • The slow MRV planner is removed: the fast solver was verified against it on 200 randomized puzzles (equivalence + structural grid validation, 0 failures) while being ~300x faster, which matters now that both chart tabs feed the pool.

Strategies (ported from one-more-map's solver; mod ids mapped to this game's raw names)

  • Seven curated strategies (Alc & Go with two layout variants, Anchorfield Fishing, Speedrun Strongboxes, Meatfish, Magic Ethereal, Divine Border Rares, Divine Strongboxes) with reward-weight overrides, position rules, border-resolved rules, and exact connector layouts — selectable via a dropdown in the optimizer window.
  • Keeper reservations: burn strategies hold back other strategies' fuel (rare-implicits are Divine fuel, Fracture charts are Meatfish fuel), with a protect toggle and held-back count.
  • A border- and inventory-aware suggestion line ranks strategies by rolled borders + piece readiness, with a one-click Use button and a "banking toward" hint.

UI

  • Chart-quality frames in the chart inventory (specialty/good/useful/junk, strategy-aware; keepers show violet) and a fix for labels drawing on hidden-tab charts whose rects overlap the visible tab.
  • "want:" labels on strategy target tiles with green/red fulfillment frames.
  • A strategy-objective column in the solutions list so the ranking stays legible.

Testing

  • Solver equivalence fuzzing vs the (now removed) exhaustive planner: 120 plain + 80 strategy puzzles, 0 failures, all fast-solver grids structurally validated. The fuzzing also caught and fixed a symmetry-breaking bug in the old planner along the way.
  • Tab switching, rotation, highlighting and strategy solves verified in-game.

🤖 Generated with Claude Code

Brad Greenand others added 3 commits August 20, 2026 16:37
The chart inventory spans multiple tabs; AvailableCharts includes the
hidden tab's charts with overlapping rects, so placement previously
stalled on the hover check when a solution used charts from the
inactive tab.
- Resolve the tab buttons directly via the tab strip at child path
[3.11.0] (verified against a live UI dump), with a geometry-based
scan as fallback if a patch moves the strip.
- Verify every tab click: shiny-highlight before, target chart
becoming visible after; failures abort cleanly and write
voyage_ui_dump.txt for diagnostics.
- Order placement so charts on the active tab are placed first,
switching tabs at most once per run.
- Add a Dump UI button to the optimizer window for future UI mapping.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The rotation loop compared the game's rotation counter to the solver's
step count and read the chart component with no settle wait, so a
transiently-null read skipped rotation entirely, and symmetric pieces
could over-click or spin without terminating. Wait for the component,
compare the resulting orientation (Room.Path rotated by the counter,
matching the optimizer's match markers), and cap rotation clicks.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dance UI
Solver:
- Rewrite VoyagePlannerFast: group interchangeable charts (with correct
rotation translation back to concrete pieces), honor rotation locks,
score per-connection borders exactly via arm-count profiles, and report
scores from the real scorer (no more lock-bonus leakage).
- Remove the slow MRV planner and its time-limit/cancel UI: the fast
solver is exact and was verified against the exhaustive planner on 200
randomized puzzles (0 mismatches, all grids structurally validated)
while being ~300x faster.
Strategies (ported from one-more-map's solver, mod ids mapped to this
game's raw names):
- Seven curated strategies with reward-weight overrides, position rules,
border-resolved rules, and exact connector layouts; selectable via a
dropdown (with per-strategy layout variants) in the optimizer window.
- Keeper reservations: burn strategies exclude other strategies' fuel
(with a protect toggle and held-back count).
- Border- and inventory-aware strategy suggestion with readiness
tracking and a banking hint.
UI:
- Chart-quality frames in the chart inventory (specialty/good/useful/
junk, strategy-aware; keepers show violet), hidden-tab label fix.
- want: labels on target tiles with green/red fulfillment frames.
- Strategy objective column so ranking stays legible.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@greenbradgreenbrad changed the title Voyage: automatic chart tab switching during placementVoyage: tab switching, exact solver rewrite, community strategiesAug 21, 2026
A negative objective is almost always layout deviation penalties; show
a Layout k/9 tiles-matched line (with a hint when the free pool lacks
the shapes) so the number explains itself.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@greenbrad
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Voyage: tab switching, exact solver rewrite, community strategies - #13

Open
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching
Open

Voyage: tab switching, exact solver rewrite, community strategies#13
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching

Conversation

@greenbrad

@greenbradgreenbrad commented Aug 20, 2026

Copy link
Copy Markdown

Summary

This grew from a tab-switching fix into a larger voyage overhaul; commits are self-contained and reviewable in order.

Placement fixes

  • Automatic chart inventory tab switching during Place (both directions, at most one switch per run). Tab buttons resolve via the fixed child path [3.11.0] with a geometry-scan fallback; every click is verified (shiny-highlight before, chart visible after).
  • Rotation now compares the resulting orientation (the same formula the optimizer's match markers use) instead of the raw rotation counter, with a settle-wait and click cap — fixes intermittently unrotated or endlessly spinning pieces.

Solver

  • VoyagePlannerFast rewritten: interchangeable charts are grouped (with correct rotation translation back to concrete pieces), rotation locks honored, per-connection borders scored exactly via arm-count profiles, and reported scores come from the real scorer, so the UI always reconciles and lock bonuses no longer leak into displayed scores.
  • The slow MRV planner is removed: the fast solver was verified against it on 200 randomized puzzles (equivalence + structural grid validation, 0 failures) while being ~300x faster, which matters now that both chart tabs feed the pool.

Strategies (ported from one-more-map's solver; mod ids mapped to this game's raw names)

  • Seven curated strategies (Alc & Go with two layout variants, Anchorfield Fishing, Speedrun Strongboxes, Meatfish, Magic Ethereal, Divine Border Rares, Divine Strongboxes) with reward-weight overrides, position rules, border-resolved rules, and exact connector layouts — selectable via a dropdown in the optimizer window.
  • Keeper reservations: burn strategies hold back other strategies' fuel (rare-implicits are Divine fuel, Fracture charts are Meatfish fuel), with a protect toggle and held-back count.
  • A border- and inventory-aware suggestion line ranks strategies by rolled borders + piece readiness, with a one-click Use button and a "banking toward" hint.

UI

  • Chart-quality frames in the chart inventory (specialty/good/useful/junk, strategy-aware; keepers show violet) and a fix for labels drawing on hidden-tab charts whose rects overlap the visible tab.
  • "want:" labels on strategy target tiles with green/red fulfillment frames.
  • A strategy-objective column in the solutions list so the ranking stays legible.

Testing

  • Solver equivalence fuzzing vs the (now removed) exhaustive planner: 120 plain + 80 strategy puzzles, 0 failures, all fast-solver grids structurally validated. The fuzzing also caught and fixed a symmetry-breaking bug in the old planner along the way.
  • Tab switching, rotation, highlighting and strategy solves verified in-game.

🤖 Generated with Claude Code

Brad Greenand others added 3 commits August 20, 2026 16:37
The chart inventory spans multiple tabs; AvailableCharts includes the
hidden tab's charts with overlapping rects, so placement previously
stalled on the hover check when a solution used charts from the
inactive tab.
- Resolve the tab buttons directly via the tab strip at child path
[3.11.0] (verified against a live UI dump), with a geometry-based
scan as fallback if a patch moves the strip.
- Verify every tab click: shiny-highlight before, target chart
becoming visible after; failures abort cleanly and write
voyage_ui_dump.txt for diagnostics.
- Order placement so charts on the active tab are placed first,
switching tabs at most once per run.
- Add a Dump UI button to the optimizer window for future UI mapping.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The rotation loop compared the game's rotation counter to the solver's
step count and read the chart component with no settle wait, so a
transiently-null read skipped rotation entirely, and symmetric pieces
could over-click or spin without terminating. Wait for the component,
compare the resulting orientation (Room.Path rotated by the counter,
matching the optimizer's match markers), and cap rotation clicks.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dance UI
Solver:
- Rewrite VoyagePlannerFast: group interchangeable charts (with correct
rotation translation back to concrete pieces), honor rotation locks,
score per-connection borders exactly via arm-count profiles, and report
scores from the real scorer (no more lock-bonus leakage).
- Remove the slow MRV planner and its time-limit/cancel UI: the fast
solver is exact and was verified against the exhaustive planner on 200
randomized puzzles (0 mismatches, all grids structurally validated)
while being ~300x faster.
Strategies (ported from one-more-map's solver, mod ids mapped to this
game's raw names):
- Seven curated strategies with reward-weight overrides, position rules,
border-resolved rules, and exact connector layouts; selectable via a
dropdown (with per-strategy layout variants) in the optimizer window.
- Keeper reservations: burn strategies exclude other strategies' fuel
(with a protect toggle and held-back count).
- Border- and inventory-aware strategy suggestion with readiness
tracking and a banking hint.
UI:
- Chart-quality frames in the chart inventory (specialty/good/useful/
junk, strategy-aware; keepers show violet), hidden-tab label fix.
- want: labels on target tiles with green/red fulfillment frames.
- Strategy objective column so ranking stays legible.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@greenbradgreenbrad changed the title Voyage: automatic chart tab switching during placementVoyage: tab switching, exact solver rewrite, community strategiesAug 21, 2026
A negative objective is almost always layout deviation penalties; show
a Layout k/9 tiles-matched line (with a hint when the free pool lacks
the shapes) so the number explains itself.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@greenbrad
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Voyage: tab switching, exact solver rewrite, community strategies - #13

Open
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching
Open

Voyage: tab switching, exact solver rewrite, community strategies#13
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching

Conversation

@greenbrad

@greenbradgreenbrad commented Aug 20, 2026

Copy link
Copy Markdown

Summary

This grew from a tab-switching fix into a larger voyage overhaul; commits are self-contained and reviewable in order.

Placement fixes

  • Automatic chart inventory tab switching during Place (both directions, at most one switch per run). Tab buttons resolve via the fixed child path [3.11.0] with a geometry-scan fallback; every click is verified (shiny-highlight before, chart visible after).
  • Rotation now compares the resulting orientation (the same formula the optimizer's match markers use) instead of the raw rotation counter, with a settle-wait and click cap — fixes intermittently unrotated or endlessly spinning pieces.

Solver

  • VoyagePlannerFast rewritten: interchangeable charts are grouped (with correct rotation translation back to concrete pieces), rotation locks honored, per-connection borders scored exactly via arm-count profiles, and reported scores come from the real scorer, so the UI always reconciles and lock bonuses no longer leak into displayed scores.
  • The slow MRV planner is removed: the fast solver was verified against it on 200 randomized puzzles (equivalence + structural grid validation, 0 failures) while being ~300x faster, which matters now that both chart tabs feed the pool.

Strategies (ported from one-more-map's solver; mod ids mapped to this game's raw names)

  • Seven curated strategies (Alc & Go with two layout variants, Anchorfield Fishing, Speedrun Strongboxes, Meatfish, Magic Ethereal, Divine Border Rares, Divine Strongboxes) with reward-weight overrides, position rules, border-resolved rules, and exact connector layouts — selectable via a dropdown in the optimizer window.
  • Keeper reservations: burn strategies hold back other strategies' fuel (rare-implicits are Divine fuel, Fracture charts are Meatfish fuel), with a protect toggle and held-back count.
  • A border- and inventory-aware suggestion line ranks strategies by rolled borders + piece readiness, with a one-click Use button and a "banking toward" hint.

UI

  • Chart-quality frames in the chart inventory (specialty/good/useful/junk, strategy-aware; keepers show violet) and a fix for labels drawing on hidden-tab charts whose rects overlap the visible tab.
  • "want:" labels on strategy target tiles with green/red fulfillment frames.
  • A strategy-objective column in the solutions list so the ranking stays legible.

Testing

  • Solver equivalence fuzzing vs the (now removed) exhaustive planner: 120 plain + 80 strategy puzzles, 0 failures, all fast-solver grids structurally validated. The fuzzing also caught and fixed a symmetry-breaking bug in the old planner along the way.
  • Tab switching, rotation, highlighting and strategy solves verified in-game.

🤖 Generated with Claude Code

Brad Greenand others added 3 commits August 20, 2026 16:37
The chart inventory spans multiple tabs; AvailableCharts includes the
hidden tab's charts with overlapping rects, so placement previously
stalled on the hover check when a solution used charts from the
inactive tab.
- Resolve the tab buttons directly via the tab strip at child path
[3.11.0] (verified against a live UI dump), with a geometry-based
scan as fallback if a patch moves the strip.
- Verify every tab click: shiny-highlight before, target chart
becoming visible after; failures abort cleanly and write
voyage_ui_dump.txt for diagnostics.
- Order placement so charts on the active tab are placed first,
switching tabs at most once per run.
- Add a Dump UI button to the optimizer window for future UI mapping.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The rotation loop compared the game's rotation counter to the solver's
step count and read the chart component with no settle wait, so a
transiently-null read skipped rotation entirely, and symmetric pieces
could over-click or spin without terminating. Wait for the component,
compare the resulting orientation (Room.Path rotated by the counter,
matching the optimizer's match markers), and cap rotation clicks.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dance UI
Solver:
- Rewrite VoyagePlannerFast: group interchangeable charts (with correct
rotation translation back to concrete pieces), honor rotation locks,
score per-connection borders exactly via arm-count profiles, and report
scores from the real scorer (no more lock-bonus leakage).
- Remove the slow MRV planner and its time-limit/cancel UI: the fast
solver is exact and was verified against the exhaustive planner on 200
randomized puzzles (0 mismatches, all grids structurally validated)
while being ~300x faster.
Strategies (ported from one-more-map's solver, mod ids mapped to this
game's raw names):
- Seven curated strategies with reward-weight overrides, position rules,
border-resolved rules, and exact connector layouts; selectable via a
dropdown (with per-strategy layout variants) in the optimizer window.
- Keeper reservations: burn strategies exclude other strategies' fuel
(with a protect toggle and held-back count).
- Border- and inventory-aware strategy suggestion with readiness
tracking and a banking hint.
UI:
- Chart-quality frames in the chart inventory (specialty/good/useful/
junk, strategy-aware; keepers show violet), hidden-tab label fix.
- want: labels on target tiles with green/red fulfillment frames.
- Strategy objective column so ranking stays legible.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@greenbradgreenbrad changed the title Voyage: automatic chart tab switching during placementVoyage: tab switching, exact solver rewrite, community strategiesAug 21, 2026
A negative objective is almost always layout deviation penalties; show
a Layout k/9 tiles-matched line (with a hint when the free pool lacks
the shapes) so the number explains itself.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@greenbrad
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Voyage: tab switching, exact solver rewrite, community strategies - #13

Open
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching
Open

Voyage: tab switching, exact solver rewrite, community strategies#13
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching

Conversation

@greenbrad

@greenbradgreenbrad commented Aug 20, 2026

Copy link
Copy Markdown

Summary

This grew from a tab-switching fix into a larger voyage overhaul; commits are self-contained and reviewable in order.

Placement fixes

  • Automatic chart inventory tab switching during Place (both directions, at most one switch per run). Tab buttons resolve via the fixed child path [3.11.0] with a geometry-scan fallback; every click is verified (shiny-highlight before, chart visible after).
  • Rotation now compares the resulting orientation (the same formula the optimizer's match markers use) instead of the raw rotation counter, with a settle-wait and click cap — fixes intermittently unrotated or endlessly spinning pieces.

Solver

  • VoyagePlannerFast rewritten: interchangeable charts are grouped (with correct rotation translation back to concrete pieces), rotation locks honored, per-connection borders scored exactly via arm-count profiles, and reported scores come from the real scorer, so the UI always reconciles and lock bonuses no longer leak into displayed scores.
  • The slow MRV planner is removed: the fast solver was verified against it on 200 randomized puzzles (equivalence + structural grid validation, 0 failures) while being ~300x faster, which matters now that both chart tabs feed the pool.

Strategies (ported from one-more-map's solver; mod ids mapped to this game's raw names)

  • Seven curated strategies (Alc & Go with two layout variants, Anchorfield Fishing, Speedrun Strongboxes, Meatfish, Magic Ethereal, Divine Border Rares, Divine Strongboxes) with reward-weight overrides, position rules, border-resolved rules, and exact connector layouts — selectable via a dropdown in the optimizer window.
  • Keeper reservations: burn strategies hold back other strategies' fuel (rare-implicits are Divine fuel, Fracture charts are Meatfish fuel), with a protect toggle and held-back count.
  • A border- and inventory-aware suggestion line ranks strategies by rolled borders + piece readiness, with a one-click Use button and a "banking toward" hint.

UI

  • Chart-quality frames in the chart inventory (specialty/good/useful/junk, strategy-aware; keepers show violet) and a fix for labels drawing on hidden-tab charts whose rects overlap the visible tab.
  • "want:" labels on strategy target tiles with green/red fulfillment frames.
  • A strategy-objective column in the solutions list so the ranking stays legible.

Testing

  • Solver equivalence fuzzing vs the (now removed) exhaustive planner: 120 plain + 80 strategy puzzles, 0 failures, all fast-solver grids structurally validated. The fuzzing also caught and fixed a symmetry-breaking bug in the old planner along the way.
  • Tab switching, rotation, highlighting and strategy solves verified in-game.

🤖 Generated with Claude Code

Brad Greenand others added 3 commits August 20, 2026 16:37
The chart inventory spans multiple tabs; AvailableCharts includes the
hidden tab's charts with overlapping rects, so placement previously
stalled on the hover check when a solution used charts from the
inactive tab.
- Resolve the tab buttons directly via the tab strip at child path
[3.11.0] (verified against a live UI dump), with a geometry-based
scan as fallback if a patch moves the strip.
- Verify every tab click: shiny-highlight before, target chart
becoming visible after; failures abort cleanly and write
voyage_ui_dump.txt for diagnostics.
- Order placement so charts on the active tab are placed first,
switching tabs at most once per run.
- Add a Dump UI button to the optimizer window for future UI mapping.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The rotation loop compared the game's rotation counter to the solver's
step count and read the chart component with no settle wait, so a
transiently-null read skipped rotation entirely, and symmetric pieces
could over-click or spin without terminating. Wait for the component,
compare the resulting orientation (Room.Path rotated by the counter,
matching the optimizer's match markers), and cap rotation clicks.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dance UI
Solver:
- Rewrite VoyagePlannerFast: group interchangeable charts (with correct
rotation translation back to concrete pieces), honor rotation locks,
score per-connection borders exactly via arm-count profiles, and report
scores from the real scorer (no more lock-bonus leakage).
- Remove the slow MRV planner and its time-limit/cancel UI: the fast
solver is exact and was verified against the exhaustive planner on 200
randomized puzzles (0 mismatches, all grids structurally validated)
while being ~300x faster.
Strategies (ported from one-more-map's solver, mod ids mapped to this
game's raw names):
- Seven curated strategies with reward-weight overrides, position rules,
border-resolved rules, and exact connector layouts; selectable via a
dropdown (with per-strategy layout variants) in the optimizer window.
- Keeper reservations: burn strategies exclude other strategies' fuel
(with a protect toggle and held-back count).
- Border- and inventory-aware strategy suggestion with readiness
tracking and a banking hint.
UI:
- Chart-quality frames in the chart inventory (specialty/good/useful/
junk, strategy-aware; keepers show violet), hidden-tab label fix.
- want: labels on target tiles with green/red fulfillment frames.
- Strategy objective column so ranking stays legible.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@greenbradgreenbrad changed the title Voyage: automatic chart tab switching during placementVoyage: tab switching, exact solver rewrite, community strategiesAug 21, 2026
A negative objective is almost always layout deviation penalties; show
a Layout k/9 tiles-matched line (with a hint when the free pool lacks
the shapes) so the number explains itself.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@greenbrad
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Voyage: tab switching, exact solver rewrite, community strategies - #13

Open
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching
Open

Voyage: tab switching, exact solver rewrite, community strategies#13
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching

Conversation

@greenbrad

@greenbradgreenbrad commented Aug 20, 2026

Copy link
Copy Markdown

Summary

This grew from a tab-switching fix into a larger voyage overhaul; commits are self-contained and reviewable in order.

Placement fixes

  • Automatic chart inventory tab switching during Place (both directions, at most one switch per run). Tab buttons resolve via the fixed child path [3.11.0] with a geometry-scan fallback; every click is verified (shiny-highlight before, chart visible after).
  • Rotation now compares the resulting orientation (the same formula the optimizer's match markers use) instead of the raw rotation counter, with a settle-wait and click cap — fixes intermittently unrotated or endlessly spinning pieces.

Solver

  • VoyagePlannerFast rewritten: interchangeable charts are grouped (with correct rotation translation back to concrete pieces), rotation locks honored, per-connection borders scored exactly via arm-count profiles, and reported scores come from the real scorer, so the UI always reconciles and lock bonuses no longer leak into displayed scores.
  • The slow MRV planner is removed: the fast solver was verified against it on 200 randomized puzzles (equivalence + structural grid validation, 0 failures) while being ~300x faster, which matters now that both chart tabs feed the pool.

Strategies (ported from one-more-map's solver; mod ids mapped to this game's raw names)

  • Seven curated strategies (Alc & Go with two layout variants, Anchorfield Fishing, Speedrun Strongboxes, Meatfish, Magic Ethereal, Divine Border Rares, Divine Strongboxes) with reward-weight overrides, position rules, border-resolved rules, and exact connector layouts — selectable via a dropdown in the optimizer window.
  • Keeper reservations: burn strategies hold back other strategies' fuel (rare-implicits are Divine fuel, Fracture charts are Meatfish fuel), with a protect toggle and held-back count.
  • A border- and inventory-aware suggestion line ranks strategies by rolled borders + piece readiness, with a one-click Use button and a "banking toward" hint.

UI

  • Chart-quality frames in the chart inventory (specialty/good/useful/junk, strategy-aware; keepers show violet) and a fix for labels drawing on hidden-tab charts whose rects overlap the visible tab.
  • "want:" labels on strategy target tiles with green/red fulfillment frames.
  • A strategy-objective column in the solutions list so the ranking stays legible.

Testing

  • Solver equivalence fuzzing vs the (now removed) exhaustive planner: 120 plain + 80 strategy puzzles, 0 failures, all fast-solver grids structurally validated. The fuzzing also caught and fixed a symmetry-breaking bug in the old planner along the way.
  • Tab switching, rotation, highlighting and strategy solves verified in-game.

🤖 Generated with Claude Code

Brad Greenand others added 3 commits August 20, 2026 16:37
The chart inventory spans multiple tabs; AvailableCharts includes the
hidden tab's charts with overlapping rects, so placement previously
stalled on the hover check when a solution used charts from the
inactive tab.
- Resolve the tab buttons directly via the tab strip at child path
[3.11.0] (verified against a live UI dump), with a geometry-based
scan as fallback if a patch moves the strip.
- Verify every tab click: shiny-highlight before, target chart
becoming visible after; failures abort cleanly and write
voyage_ui_dump.txt for diagnostics.
- Order placement so charts on the active tab are placed first,
switching tabs at most once per run.
- Add a Dump UI button to the optimizer window for future UI mapping.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The rotation loop compared the game's rotation counter to the solver's
step count and read the chart component with no settle wait, so a
transiently-null read skipped rotation entirely, and symmetric pieces
could over-click or spin without terminating. Wait for the component,
compare the resulting orientation (Room.Path rotated by the counter,
matching the optimizer's match markers), and cap rotation clicks.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dance UI
Solver:
- Rewrite VoyagePlannerFast: group interchangeable charts (with correct
rotation translation back to concrete pieces), honor rotation locks,
score per-connection borders exactly via arm-count profiles, and report
scores from the real scorer (no more lock-bonus leakage).
- Remove the slow MRV planner and its time-limit/cancel UI: the fast
solver is exact and was verified against the exhaustive planner on 200
randomized puzzles (0 mismatches, all grids structurally validated)
while being ~300x faster.
Strategies (ported from one-more-map's solver, mod ids mapped to this
game's raw names):
- Seven curated strategies with reward-weight overrides, position rules,
border-resolved rules, and exact connector layouts; selectable via a
dropdown (with per-strategy layout variants) in the optimizer window.
- Keeper reservations: burn strategies exclude other strategies' fuel
(with a protect toggle and held-back count).
- Border- and inventory-aware strategy suggestion with readiness
tracking and a banking hint.
UI:
- Chart-quality frames in the chart inventory (specialty/good/useful/
junk, strategy-aware; keepers show violet), hidden-tab label fix.
- want: labels on target tiles with green/red fulfillment frames.
- Strategy objective column so ranking stays legible.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@greenbradgreenbrad changed the title Voyage: automatic chart tab switching during placementVoyage: tab switching, exact solver rewrite, community strategiesAug 21, 2026
A negative objective is almost always layout deviation penalties; show
a Layout k/9 tiles-matched line (with a hint when the free pool lacks
the shapes) so the number explains itself.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@greenbrad
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Voyage: tab switching, exact solver rewrite, community strategies - #13

Open
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching
Open

Voyage: tab switching, exact solver rewrite, community strategies#13
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching

Conversation

@greenbrad

@greenbradgreenbrad commented Aug 20, 2026

Copy link
Copy Markdown

Summary

This grew from a tab-switching fix into a larger voyage overhaul; commits are self-contained and reviewable in order.

Placement fixes

  • Automatic chart inventory tab switching during Place (both directions, at most one switch per run). Tab buttons resolve via the fixed child path [3.11.0] with a geometry-scan fallback; every click is verified (shiny-highlight before, chart visible after).
  • Rotation now compares the resulting orientation (the same formula the optimizer's match markers use) instead of the raw rotation counter, with a settle-wait and click cap — fixes intermittently unrotated or endlessly spinning pieces.

Solver

  • VoyagePlannerFast rewritten: interchangeable charts are grouped (with correct rotation translation back to concrete pieces), rotation locks honored, per-connection borders scored exactly via arm-count profiles, and reported scores come from the real scorer, so the UI always reconciles and lock bonuses no longer leak into displayed scores.
  • The slow MRV planner is removed: the fast solver was verified against it on 200 randomized puzzles (equivalence + structural grid validation, 0 failures) while being ~300x faster, which matters now that both chart tabs feed the pool.

Strategies (ported from one-more-map's solver; mod ids mapped to this game's raw names)

  • Seven curated strategies (Alc & Go with two layout variants, Anchorfield Fishing, Speedrun Strongboxes, Meatfish, Magic Ethereal, Divine Border Rares, Divine Strongboxes) with reward-weight overrides, position rules, border-resolved rules, and exact connector layouts — selectable via a dropdown in the optimizer window.
  • Keeper reservations: burn strategies hold back other strategies' fuel (rare-implicits are Divine fuel, Fracture charts are Meatfish fuel), with a protect toggle and held-back count.
  • A border- and inventory-aware suggestion line ranks strategies by rolled borders + piece readiness, with a one-click Use button and a "banking toward" hint.

UI

  • Chart-quality frames in the chart inventory (specialty/good/useful/junk, strategy-aware; keepers show violet) and a fix for labels drawing on hidden-tab charts whose rects overlap the visible tab.
  • "want:" labels on strategy target tiles with green/red fulfillment frames.
  • A strategy-objective column in the solutions list so the ranking stays legible.

Testing

  • Solver equivalence fuzzing vs the (now removed) exhaustive planner: 120 plain + 80 strategy puzzles, 0 failures, all fast-solver grids structurally validated. The fuzzing also caught and fixed a symmetry-breaking bug in the old planner along the way.
  • Tab switching, rotation, highlighting and strategy solves verified in-game.

🤖 Generated with Claude Code

Brad Greenand others added 3 commits August 20, 2026 16:37
The chart inventory spans multiple tabs; AvailableCharts includes the
hidden tab's charts with overlapping rects, so placement previously
stalled on the hover check when a solution used charts from the
inactive tab.
- Resolve the tab buttons directly via the tab strip at child path
[3.11.0] (verified against a live UI dump), with a geometry-based
scan as fallback if a patch moves the strip.
- Verify every tab click: shiny-highlight before, target chart
becoming visible after; failures abort cleanly and write
voyage_ui_dump.txt for diagnostics.
- Order placement so charts on the active tab are placed first,
switching tabs at most once per run.
- Add a Dump UI button to the optimizer window for future UI mapping.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The rotation loop compared the game's rotation counter to the solver's
step count and read the chart component with no settle wait, so a
transiently-null read skipped rotation entirely, and symmetric pieces
could over-click or spin without terminating. Wait for the component,
compare the resulting orientation (Room.Path rotated by the counter,
matching the optimizer's match markers), and cap rotation clicks.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dance UI
Solver:
- Rewrite VoyagePlannerFast: group interchangeable charts (with correct
rotation translation back to concrete pieces), honor rotation locks,
score per-connection borders exactly via arm-count profiles, and report
scores from the real scorer (no more lock-bonus leakage).
- Remove the slow MRV planner and its time-limit/cancel UI: the fast
solver is exact and was verified against the exhaustive planner on 200
randomized puzzles (0 mismatches, all grids structurally validated)
while being ~300x faster.
Strategies (ported from one-more-map's solver, mod ids mapped to this
game's raw names):
- Seven curated strategies with reward-weight overrides, position rules,
border-resolved rules, and exact connector layouts; selectable via a
dropdown (with per-strategy layout variants) in the optimizer window.
- Keeper reservations: burn strategies exclude other strategies' fuel
(with a protect toggle and held-back count).
- Border- and inventory-aware strategy suggestion with readiness
tracking and a banking hint.
UI:
- Chart-quality frames in the chart inventory (specialty/good/useful/
junk, strategy-aware; keepers show violet), hidden-tab label fix.
- want: labels on target tiles with green/red fulfillment frames.
- Strategy objective column so ranking stays legible.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@greenbradgreenbrad changed the title Voyage: automatic chart tab switching during placementVoyage: tab switching, exact solver rewrite, community strategiesAug 21, 2026
A negative objective is almost always layout deviation penalties; show
a Layout k/9 tiles-matched line (with a hint when the free pool lacks
the shapes) so the number explains itself.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@greenbrad