• Preparing for CRAN submission.

  • grout() is now the definitive user constructor; removed internal .groutfrom() wrapper and dead dimXY compatibility branch.

  • .tilescheme() simplified: tile counts now computed with ceiling() for clarity; removed duplicate “hack” comment logic.

  • print.grout_tiles() output uses x format for dimensions and now returns x invisibly (not NULL).

  • plot.grout_tiles() rewritten to iterate individual tile rectangles rather than relying on an unexported as_rect S3 method.

  • as_rect_grout() is now an internal helper (not an S3 generic); .p2s() (unused) removed.

  • extent.grout_tilescheme() replaced by internal .tilescheme_extent().

  • tile_spec() and tile_zoom() cleaned up: explicit as.integer() coercions, removed Remotes: dependency on dev vaster, informational messages improved.

  • Comprehensive test suite added covering dangle trimming, contiguous offsets, input validation, and tile_spec()/tile_zoom() output.

  • DESCRIPTION bumped to R (>= 3.5.0), added Config/testthat/edition: 3, removed Remotes: field, added wk to Suggests.

  • New function tile_spec() to generate tile specification from input extent and dimension at a given zoom. New function tile_zoom() returns the natural maximum zoom value.

  • Removed all spatial input coercions; just use dimension + extent.

  • Added extent columns to tile_index().

  • Removed raster dependency; uses vaster for basic grid/cell logic.