-
Notifications
You must be signed in to change notification settings - Fork 1
chore: sync dev to master branch #131
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This will resolve #127.
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 Report✅ All modified and coverable lines are covered by tests. 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. 🚀 New features to boost your workflow:
|
There was a problem hiding this 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.
What's new in 0.8.1:
frontend
backend
include_selfparameter tocount_adjacentgrid_alland change hole definitionnurimazesolver to undirected pathcreek_coveringtocount_coveringin neighbor modulebluecolor for water-relevant puzzlestoichikasolvermoon-or-sunsolverclassify_areainto thevarietymoduleline_ioavoid_checkerboardtoshapemoduleavoid_same_omino_adjacentinto theshapemoduletest
dependencies
uv_buildnew solvers