Repository navigation
Releases: johnmorrisdotca/tsunagi
Releases · johnmorrisdotca/tsunagi
Release list
v1.6.3
Nothing that was exported has changed.
Fixed
- npm showed the README cut off. 1.6.2's README was 77,000 characters, and npm keeps and shows only the first 65,536, so the page ended in the middle of the Architecture tree, without The name, Where it comes from, Development, Contributing, Changes or Licence. The README is now under 64,000 characters, and a test fails if it grows past that. Nothing was removed: the source tree is in
docs/ARCHITECTURE.md, the steps for making levels indocs/MAKING-LEVELS.md, the rules for portals indocs/PORTALS.md, the drawing's classes and groups indocs/DRAWING.md, how a board is played indocs/PLAYING.md, and the full list of calls indocs/API-CALLS.md; the README keeps a summary of each and links it.
Changed
- The Architecture test reads
docs/ARCHITECTURE.md.
v1.6.2
Nothing that was exported has changed. npm shows the README from the tarball, so a README that is fuller is a release.
Added
- The README follows the family's README standard (johnmorrisdotca/.github,
README-STANDARD.md): a hero picture under the title,### What's in itwith a picture of each kind of board (colours, numbers, a colour-blind set, walls, bridges, waypoints, a board that wraps, hexagons, portals and a 30×30), an install section, an Examples section whose code is run by a test (a page with nothing else, a check in Node, a server that keeps no answers, the level of the day, a drawing as SVG text and as a file, a look of your own, a game as pure functions, a game kept and resumed, the board's events, counting answers, a board from a seed, the ladder and the portal levels), and an Accessibility section. - Twenty-four pictures in
docs/images, in light and dark, taken from the built demo bypnpm screenshots:readme(scripts/readme-pictures.mjs) and shown by absolute address so that GitHub and npm both show them. They are WebP, each under its size budget, and are never in the tarball:pnpm test:packagefails if one is. pnpm test:readmetype-checks and runs every TypeScript and JavaScript example in the README against the built package, and thereadmejob in CI runs it. The README's own earlier examples are now complete enough to run, or say that they are excerpts.src/readme.test.jsholds the README to the standard: its sections in order, a language on every code block, a picture's file, its alt text, its caption and its dark twin, the size budget, table widths and plain words.
Changed
- The README's pictures moved from
docs/desktop.jpganddocs/phone.jpgtodocs/images/, and thepnpm picturescommand ispnpm screenshots:readme. - The entry-point table moved from Levels to API, where the standard keeps it.
- Repository only: the package and everything it exports are unchanged.
CONTRIBUTING.mdis the family's one text with a section of its own for Tsunagi, held to the master in johnmorrisdotca/.github bysrc/family.test.js;ci.ymlandpages.ymlare the family's one text (pnpm check, the demo, and the package on Linux, macOS and Windows), and any jobs of the package's own after them.
Fixed
- The API reference page wraps a long entry path instead of running about 2 px wider than a 360 px screen. Nothing the package exports has changed.
v1.6.1
Nothing that was exported has changed.
Added
- A test holds every
@johnmorrisdotca/tsunagi@Nversion pin in the README to this package's major version.
Changed
- The family's list, in the README and in the demo's footer, names all twenty-four packages, Karakuri and Houseki included.
- The npm description is one sentence of 250 characters or fewer, so npm and its search show it whole; it is also the repository's About text.
homepageis the demo site andauthoris"John Morris", the same in every package. - The GitHub Actions workflows use the current versions of the actions (checkout 7, setup-node 7, pnpm/action-setup 6; configure-pages 6, upload-pages-artifact 5 and deploy-pages 5 for Pages), which clears GitHub's Node 20 deprecation warning.
v1.6.0
Added
- Every level's board without its answer:
@johnmorrisdotca/tsunagi/layouts,TSUNAGI_LAYOUTS(by size, in level
order) andTSUNAGI_PORTAL_LAYOUTS. A server that checks a solve, or lists who solved which level, knows a level by its
board and never needs its answer, and the answers are over half of every size's file; the layouts of all 2,624 levels
are about a third of the bytes of the levels. Made bynode scripts/tsunagi-layouts.ts, held to the level files by
layouts.test.ts. Nothing that was exported has changed.
v1.5.0
Every level up to 15×15 keeps its number, its board and its answer, and every export, board code and
answer of 1.4.0 reads as it did. New: boards up to 30×30, and portals.
Added
- Boards of 20×20, 25×25 and 30×30, 64 fixed levels each, easiest first, each proved to have exactly
one answer (levels-20,levels-25,levels-30;TSUNAGI_SIZESgains the three). The 15th and 16th
of each block of sixteen teach and test a twist, block by block: walls, wrap, portals, explosions.
Wrap works at the new sizes too. Such boards are not found by luck, so they are made by taking clues
away (reducedCandidate,src/reduce.ts): a filling is cut into short lines and neighbours are joined
while the solver can still prove one answer within a budget of dead ends. The proof of a 30×30 takes
about a second, and making one takes a median 25 to 66 seconds on one core (see the README for the
measurements). - Portals. A portal is a pair of empty cells: a line that goes into one comes out of the other,
going the same way. Both rings are cells the line fills, and each portal is gone through by exactly
one line, once. In the code as a tail word,|portals<a>-<b>,…;LinkLayout.portalPairsand.portals;
portalExit; a step across a portal hasthrough; the solver, the checker (still O(cells)), the
generator,transformed, the difficulty measure, Cheat, explosions and progress codes all know them.
A drag that goes into a ring carries on out of its partner (dragFinger,Reach). Drawn as two rings
alike, in a colour and a Greek letter, with a faint link to the partner on hover or tap; a twist,
"portals", on the ladder. - A second set of levels with portals: 32 at each of 5×5 to 10×10, 12×12 and 15×15, in two blocks
of sixteen (levels-portals,TSUNAGI_PORTAL_SIZES,TSUNAGI_PORTAL_COUNTS,TSUNAGI_PORTAL_SEED).
The loaders, the element andmountTsunagitake aset("classic"or"portals"), and the demo has a
set row. - 82 pairs. The alphabet grows from 16 to 82 letters (
PAIR_LETTERS), and each pair has its own
colour (TSUNAGI_COLOURSgrows to 82, the first 16 as they were). A board of 36 pairs or more has no
waypoints, since the small letters are then stones. - Redrawing one pair.
drawTsunagigroups a board's washes, beads and ghosts by pair, and
drawTsunagiPair(layout, pair, id, options)makes one pair's.mountTsunagipatches only the pairs a
move changed (a board with bridges is redrawn whole). On a phone-sized Chromium with the processor slowed
four times, a move on a full 30×30 board is handled in a median 2.7 ms where redrawing everything took 18.2. - A binary encoding in the solver, for boards of 16×16 and up and for portals
(countSolutionsSat(layout, limit, budget, guide, colours),SatColours), and
countSolutionsOfLevel(layout, answer), which proves a level from its own answer.
Boards up to 15×15 are searched as before, so no existing measurement changes.
Changed
- The README's Limits, API, Making levels and Architecture sections cover the above;
docs/strings-ja.md
has the new words (portal,portals,portalsSays) in English and Japanese.
v1.4.0
Changed
- Needs Node 22 or later; Node 20 is no longer supported. Nothing else changed.