Skip to content

feat(meanderaw): ✨ identify a rendered document as a lattice address #672

Description

@JimmyPaolini

Parent

#664

What to build

Identifying a rendered document returns its lattice address. Given the document text and the
column span of its true repeat, the service reports the row count, the span, the literal
hexadecimal address, the canonical symmetry class, and — where structure earns one — the
sub-family name.

It reads the rendered document, never the generator, so a renderer that draws the wrong thing
cannot be handed a name it did not earn. That is the same reason the existing mosaic round trip
goes through a real document rather than comparing tiles directly.

The true repeat span is recovered generically from the family's own pitch — the difference
between the drawing's right edge at consecutive repeat counts, over the grid unit — so no motif
service gains a method. A family whose pitch is not recoverable that way gets an override, not
all ten.

Address format: <rows>r<columns>c-<hexadecimal>. snake plain at six rows is
6r5c-63335c635ccc69ccca399a333; snake flip at six rows is
6r8c-333356335635cc63cc69cca5cca39a399a333333, wider because turning a unit over doubles the
repeat.

Interior points only, as mosaic already does — the two border rules are not addressed. Edges
only: a point on no edge addresses as 0, and whether a bare point paints a dot is a
family-level fact outside the address. That keeps the encoding hexadecimal, which a fifth state
would not.

Acceptance criteria

  • Identifying a rendered document returns row count, true repeat span, literal address,
    canonical class, and earned sub-family name where there is one
  • The true repeat span is derived from the pitch generically, with no motif service gaining a
    method
  • The literal address is the name; the canonical class is reported beside it and never
    substituted for it
  • Known cross-family identities hold: parallel serpentine-strands-3-offset-1 at three rows
    shares the canonical class of the mosaic zigzag tile 56a9, and
    parallel serpentine-strands-4-offset-2 at four rows shares 56a933
  • A document the reader refuses — a curve, a diagonal, a second stroke width, an off-lattice
    coordinate — is refused here rather than addressed wrongly

Blocked by

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

scope:meanderawGreek meander (key/fret) SVG generator CLI and the composable motif/modifier library it readssource:agentOpened by a coding agentstatus:ready-for-agentFully specified, ready for an unattended agenttype:featA new feature or capability that adds value for users

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions