Added
- Discoverability: GitHub topics set on the repository, and
.spi.ymladded for the Swift Package Index (documentation hosting for all three targets) - Examples gallery: six single-file drawings with SwiftUI
#Previews underExamples/(square spiral, fractal tree, Koch snowflake, circle rosette, filled star, waves), shown as a grid in the README's new Gallery section;swift run Examplesregenerates thedocs/examples/*.svgimages from the same drawing code the previews use - Code coverage measurement in CI: the macOS test job now runs with
--enable-code-coverage, exports lcov, and uploads to Codecov; coverage badge added to README - Release automation: pushing a version tag now creates the GitHub Release automatically, with that version's CHANGELOG section as release notes; the manual steps are documented in CONTRIBUTING.md
- Linux support for
TortoiseCoreandTortoiseSVG, verified by a new CI job (swift:6.2container) — the package manifest omits the SwiftUI-basedTortoiseUIproduct and targets on Linux, so plainswift build/swift testwork there out of the box TortoiseState.applying(_:)— a pure state-transition reducer, now the single source of truth shared byTortoise(recording) andCommandPlayer(replay). This removes the duplicated state math that could silently drift apart, and is also useful for custom renderers doing incremental replay- Community documents:
CONTRIBUTING.md,CODE_OF_CONDUCT.md(Contributor Covenant 2.1), GitHub issue forms (bug report / feature request), and a pull request template
Changed
- CI hardening: Xcode selection no longer pins a single point release (it picks the newest stable Xcode 26.x on the runner image), SwiftPM build directories are cached across runs, and release-mode compilation moved to its own parallel job so the test job no longer builds everything twice
Tortoise.headingandTortoiseState.headingare now always normalized to [0, 360), matchingtowards()and Python turtle — previously counterclockwise turns reported negative values (e.g.left(90)from north returned-90; it now returns270)
Fixed
circle(radius:extent:)with a negative radius produced mathematically inconsistent results — the end position landed on the wrong side of the circle (a zero-extent arc even teleported the tortoise to the opposite side). It now matches Python turtle: the center sits to the tortoise's right and the sweep and turn directions flip, so the arc bends the other wayclear()while a fill is in progress now discards the in-progress fill (matching Python turtle): previously the pre-clear vertices leaked into the polygon completed by a laterendFill(), resurrecting erased geometry —isFillingnow also becomesfalseafterclear(), and a fill started after a discarded one renders at the correct z-order inTortoiseCanvasTortoiseCanvas: theTimelineView(.animation)schedule kept firing at display refresh rate after playback finished, redrawing an unchanged canvas and wasting CPU/battery — the schedule is now paused once playback completes, and resumes when new commands re-create the playback model- README: the installation snippet pointed at the v1 repository URL (
temoki/TortoiseGraphics) and usedfrom: "2.0.0", which cannot resolve prerelease tags — it now points at this repository, uses a prerelease-awarefrom: "2.0.0-beta1"requirement, and includes the requiredplatformsdeclaration
Removed
Angletype fromTortoiseCore— no API accepted or returned it; all angles in the public API are plainDoubledegrees
What's Changed
- Bump actions/checkout from 4 to 7 by @dependabot[bot] in #20
- Bump actions/deploy-pages from 4 to 5 by @dependabot[bot] in #19
- Bump actions/configure-pages from 5 to 6 by @dependabot[bot] in #21
- Bump actions/upload-pages-artifact from 3 to 5 by @dependabot[bot] in #22
New Contributors
- @dependabot[bot] made their first contribution in #20
Full Changelog: 2.0.0-beta5...2.0.0-beta6