Toniator is a GPL-3.0-only native Linux creative tool in a greenfield rewrite.
The current first-party release is version 0.2.0; toniator --version
reports toniator 0.2.0.
The accepted Stage 9 headless authoritative multi-channel render path is
checkpointed at 67e831a, after the Stage 1 foundation, authoritative document
boundary, deterministic guide family, source sampling, rendering, scheduling,
cache, channel-model, compositor, and CLI integration stages. It provides
authoritative RGB, CMYK, and SourceColorAlpha PNG/SVG rendering over both
baseline sources, with native review artifacts under target/validation/.
Stage 10's accepted view-only GTK/libadwaita preview is checkpointed at
980af50 and opens with
toniator-app [PATH] (zero or one local supported still-image path) or its Open
action. Decoded raster dimensions and SVG intrinsic/viewBox dimensions define the
authoritative canvas and aspect; the app has no canvas override. A visible
selector switches among RGB, CMYK, and SourceColorAlpha evaluation. Evaluation
is asynchronous, and only source loads and completions accepted for the
current document revision are presented, so stale work cannot replace the
preview.
The preview rerasterizes the unchanged canonical scene to the fitted viewport, clips to the transformed intrinsic canvas so guard geometry cannot leak into letterbox margins, and presents the exact straight raw RGBA raster without PNG encoding, premultiplication, flattening, checkerboarding, or channel recomposition. Persistence, command-bound editing, and later app/CLI export controls remain planned.
Stage 11 headless undo and redo are complete at checkpoint 341ad8e through
DocumentHistory, an accepted wrapper around DocumentSession that stores
exact validated document snapshots and preserves monotonic revision authority
with stale-result rejection after apply, undo, and redo. GTK undo controls and
history persistence remain planned.
Stage 12 portable .toniator persistence is complete at checkpoint dd7ca56.
The headless toniator-io boundary writes and loads deterministic version-1
ZIP containers containing the complete supported document and the exact
embedded source bytes. Canonical v1 saves contain exactly
document.json and one embedded source entry in normalized, uncompressed
Stored form; the reader also tolerates Deflated required files and one exact
empty sources/ directory marker from a benign manual repack. Other topology
or compression remains invalid. The CLI supports document create, container
validate -i, and container render -i; direct-source behavior remains
available. Loading reconstructs a fresh document/history at revision zero,
and history, dirty state, and filesystem source paths are not serialized.
Stage 13A GTK document lifecycle is complete at checkpoint 36c7b44.
toniator-app [PATH] accepts zero or one supported still image or .toniator
path at startup. New creates an untitled, unsourced document; Open accepts
direct PNG, SVG, JPEG/JPG, WebP, BMP, TIFF, OpenEXR, AVIF, or a .toniator
container; Save and Save As write .toniator
documents (direct artwork uses Save As); and Close plus window close share a
Cancel/Discard/Save confirmation when work is unsaved. The app-owned workspace
keeps the headless history and immutable source bundle, while dirty state
compares the exact current document plus source-bundle content and identity
with the accepted savepoint rather than revision numbers, so undoing to saved
content and semantic no-ops are clean. Atomic save failures preserve the
current content, history, location, title, and dirty state; successful saves update the
location, title, and savepoint only after IO succeeds. Load/save errors and
generic migration information are reported in-window. GTK delegates default
document construction to the headless factory and remains ignorant of pattern
internals; at this checkpoint, channel/pattern controls and GTK undo controls
remained out of scope.
The separately accepted app-only reentrancy correction at 02bc2c9 preserves
this lifecycle behavior while preventing nested model-selector and window-close
callbacks; it is not part of the Stage 14 schema checkpoint.
Stage 13B is complete at checkpoint 2a773a3. Direct-source toniator render
uses decoded PNG dimensions or resolved SVG intrinsic/viewBox dimensions by
default; an explicit --canvas remains a direct-source-only override, while
containers keep their stored canvas. PNG output accepts --antialiasing on|off (default on); off is intentionally hard-edged, and SVG output is
unaffected.
The GTK Export action writes native PNG or editable SVG. PNG options are
consumer-only transparent/black/white backing, antialiasing, and an optional
WIDTHxHEIGHT output target. If backing is not explicitly chosen, RGB defaults
to black, CMYK to white, and SourceColorAlpha to transparent. SVG remains
transparent semantic vector output.
Output targets are checked against the renderer's allocation safety limit.
Exports rerasterize the unchanged canonical scene and do not resize the
authoritative document or preview canvas, or mutate document, source,
history, revision, savepoint, location, title, dirty state, or preview state.
The accepted native app-test outputs use source-native aspect and resolution (1024×1024 raster, 900×620 vector). This corrected the earlier tiny-output moire diagnostic; AA-off edge stepping remains the intentional hard-edge consumer policy. The checkpoint records automated GTK snapshot coverage and native artifact inspection; it does not claim exhaustive manual dialog, accessibility, or interactive GTK acceptance.
Stage 14 is complete at implementation checkpoint 88fc6dd. The headless
domain now owns one-root typed pattern definitions with document-wide stable
definition, mechanism, and output-layer IDs and deterministic ordering.
DocumentHistory is the sole authority for atomic definition add, duplicate,
retarget, unreferenced removal, selected-channel copy-on-edit, and explicit
shared-definition edits, including exact stale-base, invalidation,
affected-channel, undo, and redo behavior. The immutable private v1 parser is
unchanged: container layout remains v1, loading dispatches through the v1 DTO
and deterministic v1-to-v2 migration, and current or migrated documents save
as schema v2 only. Embedded source bytes remain exact, and the supported typed
configuration preserves accepted RGB, CMYK, and SourceColorAlpha geometry,
raster, PNG, and editable SVG parity across both frozen v1 containers and
equivalent v2 documents. Native artifacts were inspected as raw RGBA and
editable SVG; this does not claim exhaustive manual GTK dialog,
accessibility, or interactive acceptance.
Stage 15 generic pattern evaluation is complete at implementation checkpoint
711058b. Typed capability validation now resolves the supported family,
explicit modulation, ordered output realization, canonical geometry, and
final-consumer clipping without renderer-owned pattern dispatch. Stable
definition, mechanism, and output-layer provenance is retained; family,
realization, source/decode, scene, and raster identities now invalidate and
reuse at their respective boundaries. Structural planning is bounded by
candidate limits and cancellation, unsupported combinations fail before
partial output, and scheduler cache publication remains transactional for
accepted current work. The supported straight-guide/intersection/circular
configuration preserves exact geometry and RGB/CMYK/SourceColorAlpha output
parity. Frozen v1 containers migrated, saved as v2, reopened, and rendered
with byte-identical PNG/SVG results across all three models; v1/v2 persistence,
DocumentHistory, renderer, app, and GTK lifecycle behavior remain unchanged.
Native artifacts and bounded app launches are liveness/review evidence, not
exhaustive manual visual, interactive, or accessibility acceptance. Stage 16A
was provisionally accepted on 2026-08-09 and is implemented at checkpoint
ccec466; Stage 16B is complete at checkpoint 77bad7c, and Stage 17 is
complete at checkpoint e777270.
Stage 16A generalizes the typed straight-guide family through the same generic headless pipeline. A definition may contain one to four ordered straight-guide dimensions with document-wide stable IDs, independent finite baseline angles, phase and repetition state, and the shared channel transform. Explicit intersection products evaluate selected dimensions, deterministically merge coincident multiway intersections, and retain every contributing guide. Along- guide products use regular arc-length sampling over an explicit dimension selection and retain stable guide, sequence, absolute/local arc-position, and Canvas/Guard provenance. Both products are typed, addressable mechanisms; no consumer reconstructs guides or sites.
Typed circle mark prototypes and fixed or contributing-guide orientation rules are validated as part of realization identity without renderer pattern dispatch. Analytical transformed coverage, guard support, checked candidate limits, cancellation, transactional scheduling, and family/realization/scene/raster cache boundaries remain generic. The accepted two-guide/intersection/circle configuration retains its Stage 15 geometry and RGB/CMYK/SourceColorAlpha parity. The private immutable v1 parser and migration remain unchanged; new definitions use only additive current-v2 DTO variants and deterministically save and reopen without evaluator or cache state.
Stage 16B adds a typed RandomSites family through the same headless path. Its
ordered chain combines raw-uniform, genuinely even, or clustered base
processes; uniform or artwork-weighted density modulation (Linear or
Smoothstep); and minimum-center or visible-mark exclusion before circular mark
realization. A deterministic xorshift32 stream consumes each authored u32
seed, and accepted sites retain stable candidate/accepted ordinals with
Canvas/Guard provenance. Diagnostics report requested versus achieved sites,
candidate/rejection counts, and scope counts under bounded candidate,
neighbor-work, and cancellation policies.
Source identity is intentionally narrow: only artwork-weighted structure uses decoded content and pixel identity; source-independent random families remain source-free, while logical source references stay at decoder lookup. New families use additive current-v2 persistence variants while the immutable v1 parser/migration and existing v2 forms remain preserved. Random variants reuse the shared canonical geometry, clipping, preview, PNG, and SVG output pipeline. High-density natural-resolution validation covers the 1024×1024 PNG and 900×620 SVG baselines, including raw/native artifact and save/reopen parity. Automated checks, raw artifact inspection, CLI parity, and bounded app launches are evidence only; no separate manual visual, interactive, or accessibility acceptance is claimed.
Stage 17 headless editing authority is complete at checkpoint e777270.
DocumentHistory accepts typed commands for supported channel properties and
structural edits, validates each transition atomically, reports deterministic
affected channels, and returns the earliest applicable invalidation level:
Presentation, Realization, Family, Source, or ChannelTopology. Schema-derived
read-only descriptors expose stable typed field IDs, value kinds, choices,
bounds, units, dependencies, support, and invalidation metadata without owning
values, validation, serialization, or UI behavior. The generic
toniator capabilities [--input PATH] command emits those descriptors in
deterministic order. Stable-ID allocation, copy-on-edit and explicit shared
editing, undo/redo, persistence/CLI parity, cache reuse, and restored canonical
render output are covered by the accepted headless tests. GTK channel controls
are implemented in the descriptor-driven Stage 18 inspector below.
Stage 17A and Stage 18 are complete at checkpoint 2a85252. Stage 17A adds
immutable transient compound-variant drafts for random character,
density-modulation, exclusion-policy, and guided-orientation changes. Drafts
derive complete typed payloads from domain contracts, require visible explicit
confirmation, finalize only existing typed edits, and remain outside descriptors,
document/history state, persistence, cache/evaluator inputs, and frontend state.
Stage 18 adds a descriptor-driven selected-channel GTK inspector. It reads
current values through a separate immutable typed reader, selects and falls back
by stable channel ID, renders generic controls with progressive disclosure, and
routes selected copy-on-edit or deliberate shared editing through
DocumentHistory. Compound transitions show their domain draft before
confirmation; invalid, rejected, and semantic no-op drafts preserve the draft,
status, document/history state, and last-successful preview. Selection, drafts,
disclosure, status, and focus remain runtime-only. Existing lifecycle,
v1/current-v2 persistence, and canonical preview/PNG/SVG output behavior are
preserved, including guarded asynchronous preview updates.
Automated and static checks, raw native output inspection, and bounded app evidence do not claim actual GNOME/Wayland manual visual, keyboard/focus, or assistive-technology acceptance; that review remains outstanding.
Stage 19A is complete at implementation checkpoint 9919d85. The headless
preset registry is version 1, with standalone serialized records using
preset_format_version: 1. Its stable bundled order is
even-random-circles followed by straight-grid-circles; IDs, names,
categories, descriptions, and thumbnails are metadata only and never enter
document evaluation, cache identity, or renderer dispatch. Applying a record
reconstructs an ordinary typed pattern definition through the existing typed
command and Stage 17A draft authority. Selected-channel application creates an
independent document-owned definition; explicit shared replacement first
discloses the ordered affected channels and then requires confirmation against
that scope. The registry does not add GTK preset controls.
Every bundled record is serialized and reloaded, reconstructed independently,
and checked for canonical PNG/SVG parity at the natural 1024×1024 raster and
900×620 SVG dimensions. The strengthened RGB-independence evidence applies
different preset definitions to independent channels, verifies stable channel
and definition identities, proves an isolated red edit leaves green/blue
definitions, identities, isolated PNG bytes, and visible geometry unchanged,
and records the modeled SVG document-identity metadata caveat. Document schema v2,
.toniator container v1, and the immutable v1 parser/migration remain
unchanged; current and migrated documents continue to save as schema v2.
The accepted channel-selector correction is included in 9919d85: it uses a
persistent StringList, splice, deferred rebuild, and invalid-position
rejection. This is a bounded GTK selector correction, not GTK preset UI.
Stage 19B is complete at implementation checkpoint b0b84e4. It supersedes the
first descriptor-driven Pattern Editor after artist-usability review found that
raw artwork could not apply Random or Grid patterns, edits changed the main
document immediately, Blueprint was only an unused probe, and engine
terminology dominated the workflow. The remediation uses the actual
Blueprint/GResource composition, an adaptive artist-facing channel editor with
immediate bundled Even Random Circles and Straight Grid Circles application,
visible Undo/Redo, and a separate private-draft Pattern Editor over the accepted
headless command/history/scheduler and canonical preview, PNG, and SVG paths.
Save as Preset... remains disabled; preset authoring, library management, and
the remaining Stage 20F+ mechanisms remain planned.
Stage-owned validation under
target/validation/stage-19b-gui-remediation/ includes private Sway/AT-SPI
layout and selector evidence, focused private-draft transition tests, and
direct persistence/canonical-output witnesses for both immutable inputs. These
results do not claim manual GNOME Shell/Mutter or exhaustive usability
acceptance: portal dialogs and a private-session keyring surface were external,
and injected WayVNC keyboard/pointer actions did not reach GTK. The user
accepted the implementation checkpoint; this evidence boundary remains in
force.
Stage 20A is complete at implementation checkpoint b7fbd81. The headless
geometry/pattern interchange now publishes FamilySiteSet as the truthful,
deterministic derived-site authority for typed family results, and
TypedFamilyOutput is an opaque result carrying actual generalized,
along-guide, and random provenance. A private circle compatibility adapter
retains the accepted canonical circle IDs and contributor bytes without
publishing fabricated structural output. Schema, persistence, cache keys,
canonical circle/render behavior, and GTK behavior are unchanged. Focused
complete-document checks cover cache/output identity and the immutable PNG at
1024×1024 plus structural/live-text SVG evidence at 900×620; read-only review
passed. The checkpoint is headless-only and claims no GTK evidence.
Stage 20B is complete in the single Stage 20B acceptance checkpoint. Its
headless geometry boundary provides finite line/polyline and cubic Bézier path
construction, deterministic evaluation, bounds, arc-length lookup,
intersections, and ordered clipping without adding document schema,
persistence, rendering, export, CLI, GTK, or canvas-created topology. The
checkpoint includes the authorized current-format real-world fixture
assets/HolidayMugs_2024_2025.toniator, whose SHA-256 is
717fd7e03cba2c92d2730db05028c39b7a8e8de8e0bcc7054abcb3c56d5e5947.
Stage 20C is complete in its single named acceptance checkpoint. Its bounded
headless domain/IO boundary adds document-owned authored open paths and closed
shapes, authoritative add/duplicate/replace/remove commands, descriptors,
history, deterministic current-v2 persistence, and exact conversion to Stage
20B construction geometry. The checkpoint's direct parent is the Stage 20B
checkpoint 08d970a; the checkpoint is intentionally named rather than
self-referenced by a hash. It adds no consumer, evaluator, cache,
canonical-output, renderer/export, CLI, GTK, preset, schema-version, or later
stage behavior.
Stage 20D is complete in the Stage 20D acceptance checkpoint. Its headless
boundary adds authored-open-path and circular-arc guide prototypes, bounded
Single and TransformStack repetition, baseline/phase/stack transforms,
deterministic conservative coverage, existing guide-site product consumption,
document-aware identity/invalidation, transactional cancellation/cache
behavior, and deterministic current-v2 persistence. The checkpoint is
intentionally named rather than self-referenced by a hash. A narrow
post-review toniator-app compilation correction adds presentation labels for
the new typed guide fields, choices, and authored references only; it does not
add Stage 20D editing UI or move authority into the frontend. Private
Sway/AT-SPI evidence is automated only and does not claim manual GNOME/Mutter
acceptance. Stage 20E1 is complete in the Stage 20E1 acceptance checkpoint.
Stage 20E1 replaces the temporary absolute mark-size/support-capability model
with per-site nominal cell bases, normalized 0.0..=2.0 fill, derived
family-aware coverage, and synchronized existing GUI/CLI controls (Minimum fill, Maximum fill, and Rotation offset). At the Stage 20E1 checkpoint,
documents used schema v3 only and presets used format v2 only; obsolete schemas
were rejected rather than migrated. The independent repair re-review is PASS.
The later accepted Stage 20N transition supersedes those checkpoint-era current
formats with schema v5 and preset v3.
Stage 20E2 is complete at implementation checkpoint
0c6b6a2e268f9306835038be747352a0cd64044c. It realizes document-owned authored
closed shapes as ordinary family-site marks with exact normalized line/cubic
geometry, Fixed/Tangent/Normal orientation plus channel rotation, explicit
even-odd fill, shared preview/PNG/SVG canonical consumers, bounded cancellable
path work, and complete realization/cache/scene identity. At that checkpoint,
document-v3 and preset-v2 persistence remained additive without obsolete
decoders or migration; Stage 20N later supersedes those formats with v5/v3.
Focused verification, both immutable intrinsic source-artwork
witnesses, private Sway app consumption, independent repair re-review, and the
final zero-alpha engine-to-render review pass. Shape authoring and later Stage
20F+ mechanisms remain separately gated.
Stages 20F–20I are accepted foundations: provisional private-draft guide/shape resource editing, document-base effective pattern authority with channel deltas, read-only capability projection, and canonical guide paths with compact variable-width filled strokes. Those stages retain headless domain and geometry authority; their mechanical GTK exposure is not the final Pattern Wizard.
Stage 20J is complete at implementation checkpoint
2edbb8659a82106ce8de904ef1ce9155e3b4d777. It adds persisted absolute-gap
NormalOffset guide repetition backed by one reusable geometry-owned compact
line/cubic centerline offset service, deterministic crossing cleanup and
component identity, Stage 20I outline reuse, and additive current-v4
persistence. Intrinsic raster/vector, compact cubic, divergent Holiday,
Inkscape, and private Sway/AT-SPI witnesses passed. Automated wlroots evidence
is not manual GNOME/Mutter review. The Pattern Wizard remains separately
gated. This is retained checkpoint terminology only: current NormalOffset
means positive parallel-centerline spacing and is not region absolute-gap or
negative-space computation.
Stage 20K is Complete at implementation checkpoint
f848ff995c9e30f89a85fbc01b5b8d97cc8de3d5 under
STAGE_20K_PARAMETRIC_CURVES_PLAN.md.
It adds the accepted headless finite round/square parametric-curve family,
raw canonical curve paths or equal-arc curve sites, reusable repetition,
current schema-v4 intent-only persistence, and canonical PNG/SVG output. The
verified intrinsic evidence uses five full turns with artboard-derived pitch
for both immutable inputs; all eight native PNG outputs and all eight
Inkscape-rendered SVG outputs were inspected directly. Bounded adaptive
five-point Gauss-Legendre arc-length measurement and row-active outline
filtering keep the complete eight-artifact matrix within the existing limits
without changing geometry ownership or final-consumer clipping. The user
accepted Stage 20K on 2026-08-22; publication remains separate.
Stage 20L is complete at implementation checkpoint
b41fa3fcf2e1089ea422ba18524c2c4a26f568e8. It adds the headless
deterministic, mechanism-neutral derived site-adjacency boundary over eligible
FamilySiteSet outputs, including guard-inclusive evaluation, bounded
cancellation, ordered graph identity, and failure-atomic engine derivation. It
adds no persisted connection intent, schema or preset field, renderer path,
CLI/GTK behavior, or connection-program selection. The user accepted Stage
20L on 2026-08-23; publication remains separate.
Stage 20M is complete at implementation checkpoint
33f1bde3be9afdc3fb88f479c4ee7ec52b80114a. It adds deterministic positive
nearest/random/tree connection paths and conventional two-/three-guide wall
mazes over the accepted adjacency and straight-grid face/dual authority. Grid
prototypes use the geometric canvas center as local (0, 0); its checkpoint-era
current-v4 and preset-v2 persistence stored authored intent only, with normalized
0.0..=2.0 response. The accepted scope is headless: GTK and renderer-side
topology repair remain out of scope. The user accepted Stage 20M on 2026-08-24;
publication remains separate.
Stage 20N is complete at implementation checkpoint
b8701686042a69fcd1ac68a4038adbad4c0ccdc9. It establishes ordered keyed
per-output settings and deltas, explicit output-bound realization/cache units,
maximum-support family aggregation, canonical-region identity/normalization
and validation, and ordered render-output layers with solid nonzero region
fills and final canvas clipping. Schema v5 documents and preset v3 recipes
persist authored bundles/settings only; derived effective values, regions,
diagnostics, limits, caches, and scheduler state are absent. The deliberate
one-output authoring/validation gate remains in force, so this foundation does
not provide concrete Voronoi, guide-face, region-treatment, or heterogeneous
composite output. Focused tests, strict checks, architecture validation, raw
intrinsic PNG/SVG and canonical-region artifacts, and independent correction
re-review passed; native evidence is recorded locally under
target/validation/stage20n/intrinsic/.
No GTK/Wayland run was required. The accepted
Stages 20N–20S headless completion roadmap
moves all remaining pattern-authoring GTK work to Stage 21, all headless
frame/media/sequence/simple-transition work to Stage 22, and temporal GTK to
Stage 23. Every future stage remains separately gated.
Stage 20O is complete at implementation checkpoint
7ab97f01ec372ab1e6201b3913742476a1511c02. Its accepted headless authority
realizes ordinary Voronoi regions from eligible FamilySiteSet products,
including along-guide sites and AlongParametricCurveSites, while rejecting
direct raw ParametricPaths. Exact duplicates co-own a region; the private
Spade adapter remains geometry-owned. Schema-v5 documents and preset-v3
recipes persist authored intent only. Regions are fixed solid Full fills with
no channel-specific treatment, and renderers apply only the final canvas clip.
Stage 20P is complete at implementation checkpoint
cd531eb65dd2e161e62f355905ad936b8c1ca3c4. Its accepted headless authority
derives deterministic complete bounded faces from two or three selected
straight or authored-open guide dimensions through the production family
evaluator, shared centered document origin, and equal physical spacing. The
phase-aligned 0/60/120 witness produces three-line equilateral faces. Schema-v5
documents and preset-v3 recipes persist authored intent only; Guide Faces use
fixed solid Full regions and final canvas clipping. Existing generic
one-through-four guide support remains unchanged; Stage 20P adds no four-guide
Guide Faces behavior or evidence. Direct raw ParametricPaths remain
Guide-Faces-ineligible, while typed parametric site/Voronoi mechanisms remain
valid. Stage 20R is now complete; at that historical checkpoint, Stage 20S
remained Planned and separately gated.
Stage 20Q is complete at implementation checkpoint
071f3604098c0660a876fbe30050a64223fe41b3. It adds headless fill-only
Full, Scale, and ConstantGap realization for accepted ordinary Voronoi
and Guide Face regions, ReferencePoint and AreaAverage source sampling,
sampled per-region paint, bounded geometry/cache orchestration, and canonical
PNG/SVG rendering with final clipping only. Positive ConstantGap shrinks and
negative ConstantGap grows; convex outward growth uses subdivided smooth cubic
round joins, while inward shrink uses tangent intersection and
crossing/coincident-branch dissolution. Schema-v5/preset-v3 persistence stores
authored intent only, and the headless-only boundary remains in force. The
three-guide evidence uses positive inward gap and
triangular line rings; the authored-cubic outward witness uses fixed -40 gap
for 20-unit outward edge growth and 40-unit neighbor overlap with smooth joins.
Collapse evidence is intentionally transparent. Sparse authored-cubic coverage
reflects six complete bounded faces, not raster resolution. The user reaccepted
Stage 20Q on 2026-08-26; publication remains separate. This historical
Full/ConstantGap account is superseded for current authority by Stage 20S
normalized positive-only Scale/UniformOffset fill, with no absolute region gap
or negative-space computation.
Stage 20R is complete at implementation checkpoint
458c9a981dd349999240a18052e055a71c7b6c3c. It lifts the one-output gate and
adds ordered heterogeneous marks, paths, connections, maze walls, and treated
regions over one family, with authored painter order separated from a
deterministic site-use dependency DAG. All, SitesUsedBy, and SitesUnusedBy
filters require compatible site mechanisms; derived usage is computed before
final clipping, and structural paths/Guide Faces publish empty usage. Current
schema v5/preset v3 persist authored layers, filters, settings, and deltas only.
Per-output cache identity, request-wide composite limits, atomic cancellation
and stale-publication handling, canonical PNG/SVG consumption, and channel-wide
paint/opacity are headless authorities. Connections, maze walls, and sampled
regions are kept in separate visual witnesses; a cross-channel witness covers
connections in one channel and regions in another. No GTK workflow, renderer
topology repair, compatibility adapter, or Stage 20S work is included. The
user accepted Stage 20R on 2026-08-26; publication remains separate.
Stage 20S is complete at implementation checkpoint
55651dee7c744c2aa207924bf0dbb7737609942d. The user accepted the headless
capability and gallery-recipe completion on 2026-08-26 after independent review
and re-review, focused verification, verified evidence, and parent intrinsic
RGB/alpha inspection. It provides typed capability/descriptors, strict nested
preset-v3 DTO rejection, a 16-card registry after retiring
regions-plus-marks, normalized positive-only Scale/UniformOffset fill in
0.0..=2.0 with zero-region omission, and no negative-space or absolute region
gap. Ordinary evidence uses matching R/G/B source components and
pairwise-distinct typed seeds, while CoverCanvas/variable-width spiral and
centered-local curved-guide corrections remain headless. No GTK workflow or
compatibility adapter was added. Project documentation remains architecture
authority; scripts/validate_architecture.sh is mechanical validation only,
and semantic-map check is unavailable because Toniator has no corresponding
architecture schema. The later integrated Stage 20 scrub is recorded below.
The integrated final Stage 20 scrub is complete at implementation checkpoint
dc7e988200c5be4d22791ca1d231336caac19a24 (accepted 2026-08-27). Its final architecture and concurrency
record documents the
single headless authority path, current-v5 persistence, output-scoped caches,
request-wide limits, evaluation-local performance metrics, deterministic
Rayon work inside one coordinated evaluation, and the intentionally serial
global-topology/publication boundaries. The bundled registry remains exactly
16 cards; regions-plus-marks remains retired and direct mixed-output evidence
is not a recipe. The GTK4/Blueprint re-baseline is recorded below; Stage 21
remains separately gated. Publication and push are not implied by this
checkpoint.
The GTK4/Blueprint re-baseline is complete in the accepted local checkpoint
ToniatorGUI (2026-08-27). toniator-app now uses GTK4-only application
widgets: libadwaita has been removed from its dependencies and resources.
Blueprint sources and the compiled GResource own the static main shell,
private Pattern Editor shell, and PNG-export-options structure. Rust retains
document and command authority, dynamic descriptor/catalog population, signal
handlers, preview scheduling, canvas interaction, export validation, and the
GTK-only responsive allocation policy. The app preserves the accepted
Stage 19B workflow and canonical preview/PNG/SVG paths; this infrastructure
re-baseline does not implement Stage 21's workflow, information-architecture,
pattern-wizard, or broader controller decomposition work.
Focused Blueprint compilation, GTK resource registration, app checks and Clippy, formatting, architecture validation, and diff checks passed. Fresh private Sway/AT-SPI/grim runs covered raster and SVG inputs, normal and narrow layouts, sidebar visibility, Pattern Editor reflow, draft/discard actions, and accessible control actions. These are automated wlroots evidence and direct native artifact inspection; they do not claim manual GNOME Shell/Mutter acceptance.
Stage 21A is complete at implementation checkpoint
3028193b787960fb402b0af6807d6e8e8ab174db on the existing ToniatorGUI
branch and was user-accepted on 2026-08-28. Current documents use schema v6 only:
positive Density and Density aspect replace stored axis counts/lock, channel
deltas remain additive/resettable, and obsolete v5 documents are rejected.
The main inspector presents effective Density as inverse Pattern zoom
level (1.0 default, smaller for more geometry, larger for less) and presents
Density aspect as Pattern aspect; persistence, history, cache identity, and
evaluation continue to use Density/Density aspect exclusively.
For fresh documents and direct still-image imports, 1.0 uses the
resolution-independent reference 100 × sqrt(min(width, height) / max(width, height)) at aspect 1.0: approximately square 100×100, 2:1 100×50, and 1:2
50×100 site coverage. Opening a schema-v6 .toniator preserves its stored
Density unchanged.
Normal app and CLI renders have no application-authored geometry/work-count
ceiling; overflow checks, fallible allocation, cancellation, deterministic
approximation bounds, and stale-result rejection remain enforced. Long main
previews expose ticketed determinate progress in one overlay with an overall
bar above a current-stage bar and visible percentages through
source decode, family generation, output realization, scene composition,
rasterization, and final publication. Expensive family loops, site-bound
output work (including parallel workers), canonical raster primitives, and
final pixel-processing phases advance within their fixed stage shares.
AreaAverage advances from completed source cells, and duplicate inner-loop
observations are coalesced before they can accumulate in the frontend queue;
this observation does not alter geometry, pixels, cache identity, or atomic
publication.
AreaAverage classifies each literal decoded-source pixel footprint by exact
polygon overlap: coverage of at least 50% includes that pixel's full mapped
value once, while lower coverage contributes nothing. It never scales a pixel
value by fractional coverage. Indexed region batches remain Rayon-parallel and
publish results in deterministic input order.
The first source-backed workspace exposes the same pending stages on the
visible canvas before idle viewport submission; source-less New remains empty.
Derived counts never authorize eager infallible allocation: dispersion builds
accepted final sites directly, releases transient parent/spatial storage, and
fails machine-unrepresentable work before allocation. Cached results share
immutable scene/raster values. Raster composition retains only an accumulator
and one transient layer with fallible full-pixel/final-byte allocation, never
an estimate-based creative refusal.
Guide-path thickness uses one source-response sample per nominal pattern
interval (or decoded-source-pixel footprint for denser patterns) instead of
half-pixel supersampling every long guide; centerline curvature retains its
independent geometric refinement and the current response interpolation is
linear.
Pattern rotation is available for every current pattern definition except
source-weighted site placement. Source-weighted capability views omit Rotation and reject
channel-rotation commands; their effective evaluator rotation is zero. Named
replacement/structural transitions prune only an incompatible channel rotation
delta, while shared base rotation remains dormant for later compatible
patterns. Canonical-stroke rasterization schedules flattened edges by active
row and visits only nonzero-winding spans, with bounded cancellation polling,
so rotating long guide strokes no longer expands work to every pixel and every
edge in their full axis-aligned bounds.
The tracked Holiday v5 file remains only as an explicit rejection-test witness.
Stage 21A used preset-v3 recipes; the accepted Curve Motif prerequisite and
Gate 21B-1 now use current preset-v4 recipes. Still import now covers PNG, SVG,
JPEG/JPG, WebP, BMP, TIFF, OpenEXR, and AVIF with exact embedded-byte
round-trips, single-image enforcement, native dav1d AVIF decoding, and linear
finite-clamped OpenEXR handling without implicit tone mapping.
The separately accepted headless Curve Motif prerequisite is complete at
b8826c95f3be2abd13d0e007cd59c49c2ce16915 and supersedes that current
persistence boundary with document schema v7 and preset format v4
(container v1 unchanged); v6 documents and v3 presets reject. It chains one
embedded authored open path across adjacent one-guide Along Guides sites into
continuous canonical variable-width stroke rows. Odd provenance rows can mirror
and then use an optional fractional interval phase, while guide layout remains
the sole layout authority and phase receives padded coverage. The implementation
uses ordinary source sampling, paint, PNG, and SVG paths. Gate 21B-1 is now
complete at f77998c: the registry is v3 with seventeen built-ins, including
curve-motif-rows displayed as Curve Motif in Guides, and the layered personal
resource/library foundation is current. Gate 21B-2 is complete and user-accepted
at 63fd9fb on 2026-08-28: its modal Pattern Wizard gallery exposes all 17
Use as is cards, initial Edit support for exactly Curve Motif, One Guide
Lines, Even Random Circles, and Round Spiral Line, a shared layered catalog,
256-longest-edge/512×512 private previews, latest-ticket/last-success behavior,
one-Apply publication, and wide/narrow layouts. The gate adopts exact stored
SVGs for all 17 built-ins, including the corrected density-10 Curve Motif icon;
only personal entries use synthetic thumbnail fallback. Gates 21B-3 and 21B-4
remain separately gated and planned.
The main inspector defaults to runtime-only ALL or a real named channel.
Its compact recipe dropdown is non-mutating until Apply Pattern; applying
to ALL discloses and clears pattern-relative channel intent in one exactly
undoable transaction. Capability-valid common controls, visible inheritance
and reset actions, and the Blueprint-owned private-history Advanced
Settings dialog are included. Edit Pattern is enabled by accepted Gate
21B-2. Stage 21B remains In progress through its separately accepted gates;
the exact four-gate contract is
STAGE_21B_PATTERN_WIZARD_AND_PERSONAL_LIBRARY_PLAN.md,
Gates 21B-3 and 21B-4 remain separately gated and not begun.
Advanced Settings presents one modal immediately and evaluates only a bounded source proxy on its own cancelable scheduler. Its status exposes current private-preview progress; newer edits cancel/supersede older tickets, stale results cannot replace the private texture, and repeated activation returns to the existing modal rather than opening another. Apply still publishes exactly one main-history change, while Cancel/close discards the draft.
The final isolated stress matrix exercised all sixteen bundled recipes with
both immutable sources at intrinsic 1024×1024 PNG and 900×620 SVG sizes,
including zoom, aspect, eligible rotation, response endpoints, combined
zoom/rotation, shape rotation, and both region-sampling strategies. Every
eligible final case passed; artwork-weighted rotation retained its explicit
rejection. The largest measured Guide Faces cases now use roughly 60–85% less
peak RSS than the pre-fix runs, and directly inspected native PNG/SVG witnesses
cover rotated One Guide Lines, rotated Three-Guide Cells, colored
Source-Weighted Voronoi, and zero-minimum Two-Guide Maze response. Private
Sway/AT-SPI/grim evidence remains automated non-human, non-Mutter evidence.
The user accepted Stage 21A on 2026-08-28; no additional automated native-file-
portal inspection is claimed.
Low-resolution fixtures and outputs are supplementary only. Every future stage that exercises source loading, sampling, rendering, preview, or export must also test the immutable PNG at its natural 1024×1024 dimensions and the SVG at its natural 900×620 dimensions through the applicable canonical consumer boundary.
On Fedora, the GTK4 development files (GTK 4.10 or newer) and
blueprint-compiler build the GTK resources; libdav1d-devel supplies the
open-source native AVIF decoder dependency. Then launch the preview with:
cargo run --bin toniator-app -- assets/raster-sample.pngThe approved execution roadmap is GREENFIELD_REWRITE_PLAN.md,
the exact Stage 21B gate plan is
STAGE_21B_PATTERN_WIZARD_AND_PERSONAL_LIBRARY_PLAN.md,
and the current checkpoint ledger is ProgressTracker.md.
The normative design is in Architecture Schema,
Pattern Schema,
Channel Schema,
Module Structure, and the
precedence-setting Addendum.
The headless CLI and GTK app are separate peer frontends over the shared
toniator-engine boundary; neither frontend owns document or pattern state.