Skip to content

Conversation

@T0nyX1ang
Copy link
Owner

What's new in 0.8.1:

frontend

  • fix: missing fill-a-pix rule in puzz.link
  • fix: incompatible loading with pzplus URL
  • fix: incorrect puzzlink URL loading with lithersink and slitherlink
  • feat: switch rule link to its variant if a puzzle has one
  • feat: redraw the board according to the puzzle type in import process

backend

  • feat: move include_self parameter to count_adjacent
  • feat: alter adjacency definition based on grid_all and change hole definition
  • feat: add line label check for route puzzles
  • perf: relieve the nurimaze solver to undirected path
  • feat: simplify the turning definition
  • feat: change directed adjacency definition
  • feat: add crossing feature to a route
  • feat: elevate the creek_covering to count_covering in neighbor module
  • feat: support concrete domains for shading rules
  • feat: add a blue color for water-relevant puzzles
  • feat: change the shading color of aquarium to blue
  • feat: extend the range in directed lines
  • feat: add crossing and directed features in some route rules
  • fix: complex f-string in route module (unsupported in micropython)
  • fix: wrong distance calculation for rooms with isolated edges
  • fix: aquarium missing check for communicating vessels
  • fix: same arrows in the same row/col cause failure in toichika solver
  • refactor: merge black/white clues into a single rule
  • fix: a rule missing in moon-or-sun solver
  • feat: elevate the classify_area into the variety module
  • feat: add target encode for nori_adjacent
  • feat: generalize the snake solver with line_io
  • feat: elevate avoid_checkerboard to shape module
  • feat: gather all avoid_same_omino_adjacent into the shape module
  • chore: code simplifications in several solvers

test

  • test: enhance coverage in nondango, parquet solver

dependencies

  • chore(deps): upgrade pyscript to 2026.1.1
  • chore(deps, fix): add toml parsing utility for coverage
  • chore(deps): switch the build backend to uv_build
  • chore(deps): switch pylint and black formatter to ruff

new solvers

  • parquet
  • ichimaga w/ crossing, magnetic
  • city space
  • smullyanic dynasty
  • sumiwake
  • tetrochain-K
  • nibun-nogo
  • pipelink returns
  • barns
  • icebarn
  • arrow flow
  • yajirushi
  • yajirushi 2
  • dotchi dotchi loop
  • bosnian road

The helper predicate grid_all = grid + hole
The puzzle type is set to:
- puzzleType if recognized
- currentType if not recognized
Currently experimental for nagare and haisu puzzles.
@codecov
Copy link

codecov bot commented Feb 2, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.88%. Comparing base (28a8add) to head (5f32934).
⚠️ Report is 83 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master     #131      +/-   ##
==========================================
+ Coverage   99.79%   99.88%   +0.08%     
==========================================
  Files         167      181      +14     
  Lines        7936     8669     +733     
  Branches     1112     1249     +137     
==========================================
+ Hits         7920     8659     +739     
+ Misses          7        3       -4     
+ Partials        9        7       -2     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Syncs the dev branch into master for the 0.8.1 release, bringing in many new solvers/variants, rule-engine refactors (holes/grid_all, adjacency, shape helpers), and frontend import + rules-link improvements.

Changes:

  • Add multiple new puzzle solvers and extend existing solvers to support new rule primitives (crossing routes, directed line handling, blue/water, etc.).
  • Refactor core rule modules (common, neighbor, reachable, shape, variety) and propagate API changes across solvers.
  • Update build/tooling (uv_build, ruff formatting/linting), bump PyScript, and enhance import UX in the frontend.

Reviewed changes

Copilot reviewed 90 out of 92 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
tests/test_solver.py Adds regression coverage for a Toichika edge case.
solver/yinyang.py Replaces local checkerboard rule with shared avoid_checkerboard.
solver/yajirushi2.py Adds new Yajirushi 2 solver implementation.
solver/yajirushi.py Adds new Yajirushi solver implementation.
solver/yajilin_regions.py Updates shading/route color model and validates line labels.
solver/yajilin.py Converts to holes + not black routing model; validates line labels.
solver/triplace.py Simplifies area_id generation via enumerate.
solver/toichika.py Updates pairing rules and example payload; adjusts pairing color usage.
solver/tetrominous.py Switches to shared avoid_same_omino_adjacent.
solver/tetrochaink.py Adds new Tetro Chain-K solver.
solver/tetrochain.py Renames to Tetro Chain‑Y + switches to shared omino adjacency rule.
solver/tapaloop.py Validates line labels during line ingestion.
solver/symmarea.py Normalizes aggregate formatting and simplifies numberx_ub calculation.
solver/sumiwake.py Adds new Sumiwake solver implementation.
solver/snake.py Refactors snake constraints to route-based primitives and adds dead-end logic.
solver/smullyan.py Adds new Smullyanic Dynasty solver implementation.
solver/simpleloop.py Validates line labels during line ingestion.
solver/shingoki.py Validates line labels during line ingestion.
solver/scrin.py Updates example payload.
solver/roma.py Migrates to hole-based grid + arrow shading + grid_all-aware adjacency.
solver/rassi.py Validates line labels during line ingestion.
solver/railpool.py Validates line labels during line ingestion.
solver/pipelink.py Reworks Pipe Link to crossing-route primitives and adds “returns” variant.
solver/pentopia.py Switches to shared omino adjacency rule.
solver/pentominous.py Switches to shared omino adjacency rule.
solver/parquet.py Adds new Parquet solver implementation.
solver/onsen.py Validates line labels during line ingestion.
solver/nurimaze.py Migrates to multi-color shading model + single_route(path) + line_io ingestion.
solver/numlin_bit.py Validates line labels during line ingestion; minor enumerate cleanup.
solver/numlin.py Validates line labels during line ingestion.
solver/nothing.py Validates line labels during line ingestion.
solver/nondango.py Refactors to hole-based grid + explicit symbol handling via Point labels.
solver/nibunnogo.py Adds new Nibun-nogo solver implementation.
solver/nagare.py Updates example and directed line ingestion rules via labeled lines.
solver/mukkonn.py Validates line labels during line ingestion.
solver/moonsun.py Replaces custom area classification with shared classify_area.
solver/midloop.py Validates line labels during line ingestion.
solver/masyu.py Consolidates masyu rules and validates line labels during line ingestion.
solver/mannequin.py Fixes room-distance computation to respect edges; typing cleanup.
solver/lookair.py Updates adjacency/count semantics after include_self API move.
solver/kurotto.py Updates comment about performance/TLE.
solver/koburin.py Migrates to hole-based grid + not black routing model; validates line labels.
solver/kakuru.py Refactors to use fill_num + helper fns; uses holes for blocked cells.
solver/kakuro.py Simplifies area_id generation via enumerate.
solver/ichimaga.py Adds new Ichimaga solver with magnetic/crossing variants.
solver/heyawake.py Fixes solver docstring name mismatch.
solver/heteromino.py Switches to shared omino adjacency rule with allow_isometry control.
solver/haisu.py Refactors directed path connectivity using adj_line_directed + line label ingestion.
solver/geradeweg.py Validates line labels during line ingestion.
solver/fracdiv.py Simplifies set construction for clue sources.
solver/firefly.py Refactors directed-route + turning count logic; introduces terminal concept.
solver/fillpix.py Updates adjacency/count semantics after include_self API move.
solver/fillomino.py Simplifies numberx_ub calculation.
solver/doubleback.py Validates line labels during line ingestion.
solver/dotchi2.py Adds new Dotchi Dotchi Loop solver implementation.
solver/dotchi.py Validates line labels during line ingestion.
solver/dosufuwa.py Renames “empty” shade to “white” and aligns constraints accordingly.
solver/detour.py Validates line labels during line ingestion.
solver/creek.py Replaces custom covering rule with shared count_covering.
solver/country.py Validates line labels during line ingestion.
solver/compass.py Simplifies set construction for clue sources.
solver/cityspace.py Adds new City Space solver implementation.
solver/castle.py Validates line labels during line ingestion.
solver/bosnianroad.py Adds new Bosnian Road solver implementation.
solver/bosanowa.py Adds alias “bossanowa”.
solver/barns.py Adds new Barns solver implementation.
solver/balance.py Validates line labels during line ingestion.
solver/arrowflow.py Adds new Arrow Flow solver implementation.
solver/aquarium.py Switches shading to blue + adds “communicating vessels” water physics.
solver/anglers.py Validates line labels during line ingestion.
solver/akari.py Migrates to hole-based grid + shade-driven bulbs + updated lightup rule.
requirements.txt Removes generated requirements file (dependency mgmt moved to pyproject/uv).
pyproject.toml Bumps version to 0.8.1, switches build backend to uv_build, replaces black/pylint with ruff, adds coverage[toml].
penpa-edit/js/prepare_deployment.js Updates PyScript CDN version to 2026.1.1.
penpa-edit/js/app.js Improves import URL rewriting, adds variant-aware rules links, enhances redraw/reset behavior.
noqx/rule/variety.py Enhances nori_adjacent, adds straight_at_ice and classify_area.
noqx/rule/shape.py Adds avoid_same_omino_adjacent and avoid_checkerboard; doc link corrections.
noqx/rule/reachable.py Formats aggregates and adds reverse propagation for line_directed connectivity.
noqx/rule/neighbor.py Switches adjacency to grid_all, adds count_covering, moves include-self behavior into count_adjacent.
noqx/rule/common.py Adds grid_all, adds _from domains for shading/invert, adjusts directed fill_line generation.
noqx/puzzle/penpa.py Adds BLUE surface support and converts “inequality” symbols into directed lines.
noqx/puzzle/init.py Adds Color.BLUE and documents its meaning.
noqx/manager.py Adds BLUE surface support when storing solutions.
main_deploy.py Removes pylint-specific comments and simplifies broad exception handling.
main.py Updates PyScript packaging config generation and simplifies file opens.
docs/index.md Updates portal puzzle count to 160+.
README.md Updates solver count to 160+.
.vscode/settings.json Sets ruff formatter as default for Python.
.pre-commit-config.yaml Removes black hook, adds ruff-format.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@T0nyX1ang T0nyX1ang merged commit 29f63b9 into master Feb 2, 2026
13 checks passed
Sign up for free to 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.

2 participants