Skip to main content

Monsters for your language games.

Project description

     .─') _                                       .─') _                  
    (  OO) )                                     ( OO ) )            
  ░██████  ░██ ░██   ░██               ░██        ░██ ░██                                 
 ░██   ░██ ░██       ░██                ░██        ░██                                     
░██        ░██ ░██░████████  ░███████   ░████████  ░██ ░██░████████   ░████████ ░███████  
░██  █████ ░██ ░██   ░██    ░██('─.░██ ░██    ░██ ░██ ░██░██    ░██ ░██.─')░██ ░██        
░██     ██ ░██ ░██   ░██    ░██( OO ) ╱░██    ░██ ░██ ░██░██    ░██ ░██(OO)░██ ░███████  
  ░██  ░███ ░██ ░██   ░██    ░██    ░██ ░██    ░██ ░██ ░██░██    ░██ ░██ o ░███      ░██ 
  ░█████░█ ░██ ░██   ░████   ░███████  ░██    ░██ ░██ ░██░██    ░██  ░█████░██ ░███████  
                                                                          ░██            
                                                                  ░███████             

                        Every language game breeds monsters.

Python Versions PyPI version Wheel Linting and Typing
Entropy Budget Chaos Charm
Lore Compliance

Glitchlings are utilities for corrupting the text inputs to your language models in deterministic, linguistically principled ways.
Each embodies a different way that documents can be compromised in the wild.

If reinforcement learning environments are games, then Glitchlings are enemies to breathe new life into old challenges.

They do this by breaking surface patterns in the input while keeping the target output intact.

Some Glitchlings are petty nuisances. Some Glitchlings are eldritch horrors.
Together, they create truly nightmarish scenarios for your language models.

After all, what good is general intelligence if it can't handle a little chaos?

-The Curator

Motivation

If your model performs well on a particular task, but not when Glitchlings are present, it's a sign that it hasn't actually generalized to the problem.

Conversely, training a model to perform well in the presence of the types of perturbations introduced by Glitchlings should help it generalize better.

Quickstart

pip install -U glitchlings

The fastest way to get started is to ask my assistant, Auggie, to prepare a custom mix of glitchlings for you:

from glitchlings import Auggie, SAMPLE_TEXT

auggie = (
    Auggie(seed=404)
    .typo(rate=0.015)
    .confusable(rate=0.01)
    .homophone(rate=0.02)
)

print(auggie(SAMPLE_TEXT))

One morning, when Gregor Samsa woke from troubld dreams, he found himself transformed in his bed into a horible vermin. He layed on his armour-like back, and if he lifted his head a little he could see his brown belly, slightly domed and divided by arches into stiff sections. The bedding was hardly able to cover it and seemed ready to slide off any moment. His many legs, pitifully thin compared with the size of the rest of him, waved about helplessly as he looked.

You're more than welcome to summon them directly, if you're feeling brave:

from glitchlings import Gaggle, SAMPLE_TEXT, Typogre, Mim1c, Wherewolf

gaggle = Gaggle(
    [
        Typogre(rate=0.015),
        Mim1c(rate=0.01),
        Wherewolf(rate=0.02),
    ],
    seed=404
)

Consult the Glitchlings Usage Guide for end-to-end instructions spanning the Python API, CLI, and third-party integrations.

Your First Battle

Summon your chosen Glitchling (or a few, if ya nasty) and call it on your text or slot it into Dataset.map(...), supplying a seed if desired. Glitchlings are standard Python classes:

from glitchlings import Gaggle, Typogre, Mim1c

custom_typogre = Typogre(rate=0.1)
selective_mimic = Mim1c(rate=0.05, classes=["LATIN", "GREEK"])

gaggle = Gaggle([custom_typogre, selective_mimic], seed=99)
corrupted = gaggle("We Await Silent Tristero's Empire.")
print(corrupted)

Calling a Glitchling on a str transparently calls .corrupt(str, ...) -> str. This means that as long as your glitchlings get along logically, they play nicely with one another.

When summoned as or gathered into a Gaggle, the Glitchlings will automatically order themselves into attack waves, based on the scope of the change they make:

  1. Document
  2. Paragraph
  3. Sentence
  4. Word
  5. Character

They're horrible little gremlins, but they're not unreasonable.

Command-Line Interface (CLI)

Keyboard warriors can challenge them directly via the glitchlings command (see the generated CLI reference in docs/cli.md for the full contract):

# Discover which glitchlings are currently on the loose.
glitchlings --list
 
# Review the full CLI contract.
glitchlings --help
 
# Run Typogre against the contents of a file and inspect the diff.
glitchlings -g typogre --input-file documents/report.txt --diff

# Configure glitchlings inline by passing keyword arguments.
glitchlings -g "Typogre(rate=0.05)" "Ghouls just wanna have fun"

# Pipe text straight into the CLI for an on-the-fly corruption.
echo "Beware LLM-written flavor-text" | glitchlings -g mim1c

# Emit an Attack summary with metrics and counts.
glitchlings --attack --sample

# Emit a full Attack report with tokens, token IDs, and metrics.
glitchlings --report --sample

Configuration Files

Configurations live in plain YAML files so you can version-control experiments without touching code:

# Load a roster from a YAML attack configuration.
glitchlings --config experiments/chaos.yaml "Let slips the glitchlings of war"
# experiments/chaos.yaml
seed: 31337
glitchlings:
  - name: Typogre
    rate: 0.04
  - "Rushmore(rate=0.12, unweighted=True)"
  - name: Zeedub
    parameters:
      rate: 0.02
      characters: ["\u200b", "\u2060"]

Attack on Token

Looking to compare before/after corruption with metrics and stable seeds? Reach for the Attack helper, which bundles tokenization, metrics, and transcript batching into a single utility. It accepts plain list[str] batches, renders quick summary() reports, and can compare multiple tokenizers via Attack.compare(...) when you need a metrics matrix.

Development

Follow the development setup guide for editable installs, automated tests, and tips on enabling the Rust pipeline while you hack on new glitchlings.

Starter 'lings

For maintainability reasons, all Glitchling have consented to be given nicknames once they're in your care. See the Monster Manual for a complete bestiary.

Typogre

What a nice word, would be a shame if something happened to it.

Fatfinger. Typogre introduces character-level errors (duplicating, dropping, adding, or swapping) based on the layout of a keyboard (QWERTY by default, with Dvorak and Colemak variants built-in).

Typogre supports motor coordination weighting based on biomechanical research from the Aalto 136M Keystrokes dataset. Use motor_weighting="wet_ink" for uncorrected errors (cross-hand typos slip through) or motor_weighting="hastily_edited" for raw typing patterns before correction.

Mim1c

Wait, was that...?

Confusion. Mim1c replaces non-space characters with Unicode Confusables, characters that are distinct but would not usually confuse a human reader.

Hokey

She's soooooo coooool!

Passionista. Hokey gets a little excited and streeeeetches words for emphasis.

Apocryphal Glitchling contributed by Chloé Nunes

Scannequin

How can a computer need reading glasses?

OCArtifacts. Scannequin mimics optical character recognition errors by swapping visually similar character sequences (like rn↔m, cl↔d, O↔0, l/I/1).

Zeedub

Watch your step around here.

Invisible Ink. Zeedub slips zero-width codepoints between non-space character pairs, forcing models to reason about text whose visible form masks hidden glyphs.

Wherewolf

Did you hear what I heard?

Echo Chamber. Wherewolf swaps words with curated homophones so the text still sounds right while the spelling drifts. Groups are normalised to prevent duplicates and casing is preserved when substitutions fire.

Jargoyle

Uh oh. The worst person you know just bought a thesaurus.

Sesquipedalianism. Jargoyle insufferably replaces words with synonyms at random, without regard for connotational or denotational differences.

Rushmore

I accidentally an entire word.

Tactical Scrambler. Rushmore randomly drops, duplicates, or swaps words in the text to simulate hasty writing, editing mistakes, or transmission errors.

Redactyl

Oops, that was my black highlighter.

FOIA Reply. Redactyl obscures random words in your document like an NSA analyst with a bad sense of humor.

Apocrypha

Cave paintings and oral tradition contain many depictions of strange, otherworldly Glitchlings.
These Apocryphal Glitchling are said to possess unique abilities or behaviors.
If you encounter one of these elusive beings, please document your findings and share them with The Curator.

Ensuring Reproducible Corruption

Every Glitchling should own its own independent random.Random instance. That means:

  • No random.seed(...) calls touch Python's global RNG.
  • Supplying a seed when you construct a Glitchling (or when you summon(...)) makes its behavior reproducible.
  • Re-running a Gaggle with the same master seed and the same input text (and same external data!) yields identical corruption output.
  • Corruption functions are written to accept an rng parameter internally so that all randomness is centralized and testable.

At Wits' End?

If you're trying to add a new glitchling and can't seem to make it deterministic, here are some places to look for determinism-breaking code:

  1. Search for any direct calls to random.choice, random.shuffle, or set(...) ordering without going through the provided rng.
  2. Ensure you sort collections before shuffling or sampling.
  3. Make sure indices are chosen from a stable reference (e.g., original text) when applying length‑changing edits.
  4. Make sure there are enough sort keys to maintain stability.

References

Glitchlings incorporates research from the following sources:

  • Aalto 136M Keystrokes Dataset — Motor coordination weights for Typogre's biomechanically-informed error sampling:

    Dhakal, V., Feit, A. M., Kristensson, P. O., & Oulasvirta, A. (2018). Observations on Typing from 136 Million Keystrokes. Proceedings of the 2018 CHI Conference on Human Factors in Computing Systems (CHI '18), Article 646. https://doi.org/10.1145/3173574.3174220

  • Expressive Lengthening Research — Linguistic foundations for Hokey's stretchability scoring and site selection:

    Brody, S., & Diakopoulos, N. (2011). Cooooooooooooooollllllllllllll!!!!!!!!!!!!!!: Using Word Lengthening to Detect Sentiment in Microtext. Proceedings of the 2011 Conference on Empirical Methods in Natural Language Processing (EMNLP '11), 562–570. https://aclanthology.org/D11-1052

    Gray, B., Bruxvoort, C., Beigman Klebanov, B., & Leong, B. (2020). Expressive Lengthening in Social Media. Proceedings of the 12th Language Resources and Evaluation Conference (LREC 2020), 4517–4523. https://aclanthology.org/2020.lrec-1.556

  • OCR Degradation Modeling — Theoretical foundations for Scannequin's document-level corruption, burst error clustering, and segmentation failures:

    Kanungo, T., Haralick, R. M., & Phillips, I. (1994). Nonlinear Local and Global Document Degradation Models. International Journal of Imaging Systems and Technology, 5(3), 220–230. https://doi.org/10.1002/ima.1850050305

    Li, Y., Lopresti, D., Nagy, G., & Tompkins, A. (1996). Validation of Image Defect Models for Optical Character Recognition. IEEE Transactions on Pattern Analysis and Machine Intelligence, 18(2), 99–107. https://doi.org/10.1109/34.481540

    Kolak, O., & Resnik, P. (2002). OCR Error Correction Using a Noisy Channel Model. Proceedings of the Second International Conference on Human Language Technology Research (HLT '02), 257–262. https://dl.acm.org/doi/10.5555/1289189.1289227

  • OCR Evaluation Methodology — Benchmark methodology informing Scannequin's quality presets and parameter calibration:

    Rice, S. V., Jenkins, F. R., & Nartker, T. A. (1995). The Fourth Annual Test of OCR Accuracy. Technical Report 95-04, Information Science Research Institute, University of Nevada, Las Vegas. https://tesseract-ocr.github.io/docs/AT-1995.pdf

    Lucas, S. M., Panaretos, A., Sosa, L., Tang, A., Wong, S., & Young, R. (2005). ICDAR 2003 Robust Reading Competitions: Entries, Results, and Future Directions. International Journal on Document Analysis and Recognition, 7(2–3), 105–122. https://doi.org/10.1007/s10032-004-0134-3

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

glitchlings-0.11.0.tar.gz (306.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

glitchlings-0.11.0-cp313-cp313-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.13Windows x86-64

glitchlings-0.11.0-cp313-cp313-manylinux_2_28_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

glitchlings-0.11.0-cp313-cp313-macosx_11_0_universal2.whl (1.6 MB view details)

Uploaded CPython 3.13macOS 11.0+ universal2 (ARM64, x86-64)

glitchlings-0.11.0-cp312-cp312-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.12Windows x86-64

glitchlings-0.11.0-cp312-cp312-manylinux_2_28_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

glitchlings-0.11.0-cp312-cp312-macosx_11_0_universal2.whl (1.6 MB view details)

Uploaded CPython 3.12macOS 11.0+ universal2 (ARM64, x86-64)

glitchlings-0.11.0-cp311-cp311-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.11Windows x86-64

glitchlings-0.11.0-cp311-cp311-manylinux_2_28_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

glitchlings-0.11.0-cp311-cp311-macosx_11_0_universal2.whl (1.6 MB view details)

Uploaded CPython 3.11macOS 11.0+ universal2 (ARM64, x86-64)

glitchlings-0.11.0-cp310-cp310-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.10Windows x86-64

glitchlings-0.11.0-cp310-cp310-manylinux_2_28_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

glitchlings-0.11.0-cp310-cp310-macosx_11_0_universal2.whl (1.6 MB view details)

Uploaded CPython 3.10macOS 11.0+ universal2 (ARM64, x86-64)

File details

Details for the file glitchlings-0.11.0.tar.gz.

File metadata

  • Download URL: glitchlings-0.11.0.tar.gz
  • Upload date:
  • Size: 306.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for glitchlings-0.11.0.tar.gz
Algorithm Hash digest
SHA256 c3afa5a638d58e137f29dd59164445a0e36912671cba1ec646307dd6d6cf9ecd
MD5 47c16047d8b83375a347a757e9c861d2
BLAKE2b-256 8dad746e11f8ea7ea10ea25f8ea07849e8ebdb1c8dd0a64c4a09b64fe3645370

See more details on using hashes here.

Provenance

The following attestation bundles were made for glitchlings-0.11.0.tar.gz:

Publisher: publish.yml on osoleve/glitchlings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file glitchlings-0.11.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for glitchlings-0.11.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 2a46eb769a30d7d5ea662dd3a3b3a23d7597f5f5a4f5a30513b7861d869357ba
MD5 78cc11a4652d5df4346e68ae2601d6a3
BLAKE2b-256 0555121ef8ea37ec93e41e34b1f138926032d534cca04d9f06c6c5d72ecffde5

See more details on using hashes here.

Provenance

The following attestation bundles were made for glitchlings-0.11.0-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on osoleve/glitchlings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file glitchlings-0.11.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for glitchlings-0.11.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c4910854cb120781de22368018430a39515a6b2c29b5c7c8a27e9aa7ea6e9aaa
MD5 dcc4daef1227cd7ef68cf402f05be37f
BLAKE2b-256 e4ad6c6d51f0a8a195318829b470e4447636ef5a8ebe89802520fbbbe34cf80f

See more details on using hashes here.

Provenance

The following attestation bundles were made for glitchlings-0.11.0-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on osoleve/glitchlings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file glitchlings-0.11.0-cp313-cp313-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for glitchlings-0.11.0-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 b30842d3bc8e74f47ec0a3dee1ac14e95f57f2f718faa7a9609609ca9ab13c3f
MD5 cc17d8d21e064e509253917155f196c1
BLAKE2b-256 c871b07979dcbe5040f118b791900828d92885cdb0a86a11cbc11edb7d4cb6b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for glitchlings-0.11.0-cp313-cp313-macosx_11_0_universal2.whl:

Publisher: publish.yml on osoleve/glitchlings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file glitchlings-0.11.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for glitchlings-0.11.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0302036718d7cc15e8f5700aef1735aa2e1634ddc7ea7182aa934469ef9336c3
MD5 086dc34a759cac3b705eb7be9e0ef020
BLAKE2b-256 9ae169700c9f6c9e24ed642f547de3662a977207e82fc9fdfff8045bac20c2c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for glitchlings-0.11.0-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on osoleve/glitchlings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file glitchlings-0.11.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for glitchlings-0.11.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 28e324ad393492fb32e16c382e8b9cee91017b1e90706947fa0d8e9777380e03
MD5 13040559ff93eefa609b64e363b10080
BLAKE2b-256 261c5fee9adadf21e145cbd3ac897a1a0e284aa8bc192c1b1385e79045fcc8d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for glitchlings-0.11.0-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on osoleve/glitchlings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file glitchlings-0.11.0-cp312-cp312-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for glitchlings-0.11.0-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 b776f0c017370df56b8d351945f2d78498407dfb4c5dbe73c682dd6d316fb607
MD5 41c7b0bd9789cfa06151f87e8b0d5411
BLAKE2b-256 3b5b6520719f09094a236c9f763cb587a5df02ba55ebc5a39a131c5ff36511a3

See more details on using hashes here.

Provenance

The following attestation bundles were made for glitchlings-0.11.0-cp312-cp312-macosx_11_0_universal2.whl:

Publisher: publish.yml on osoleve/glitchlings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file glitchlings-0.11.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for glitchlings-0.11.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2fd3e2548788f1791c5c4a71b93fd36bcce0d3cee4ffa120fc1d5297a05fde40
MD5 7d75db917b1f1a717b950aec1815a299
BLAKE2b-256 4d855157f9b90b81754a5b71ca35c30ec93d9c71a6ba312890f286bca66e60ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for glitchlings-0.11.0-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on osoleve/glitchlings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file glitchlings-0.11.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for glitchlings-0.11.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4eabf3548a0d3b9c4ec4fe4d651a1b2c77f1cadca163c5231938e30ef0f181f1
MD5 fa38f54ce80c2bc5d948f1d380c55fbb
BLAKE2b-256 ac9d626f94b12361da8c80b26cc3ca0f521ec88882589bad529618ff21d8526a

See more details on using hashes here.

Provenance

The following attestation bundles were made for glitchlings-0.11.0-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on osoleve/glitchlings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file glitchlings-0.11.0-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for glitchlings-0.11.0-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 9652fec965ed369fae6b6c17b58b55cc7ce49cdba2158e7dadd57e0379365399
MD5 ed67835375d071e618bb16c2aa033552
BLAKE2b-256 6f76ac0edb25fb9e17b599ddf937545ef4f009624aaf2fac868d3b2409b2bdf1

See more details on using hashes here.

Provenance

The following attestation bundles were made for glitchlings-0.11.0-cp311-cp311-macosx_11_0_universal2.whl:

Publisher: publish.yml on osoleve/glitchlings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file glitchlings-0.11.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for glitchlings-0.11.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 3ce71049e8a0c4018481992020134e80ebc17345c6ee8083c1f8b461246ebb98
MD5 ada10a9f081efb4204bead39b5ff377e
BLAKE2b-256 4dbc91f6d8ec44b546d1cf8abf69117d3154560fa416537215a49f2846bdf9e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for glitchlings-0.11.0-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on osoleve/glitchlings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file glitchlings-0.11.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for glitchlings-0.11.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e02ccaae1e0a5831079ee1a92c59513a0b1426b5aa94fc83522109377db0cc1c
MD5 0b7d2375a430f0bce335d740a75122c4
BLAKE2b-256 74e774512cf7a977341f8fb1aaf2c5440e3a8a0dea28bf432a9cfc0d4eedae63

See more details on using hashes here.

Provenance

The following attestation bundles were made for glitchlings-0.11.0-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on osoleve/glitchlings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file glitchlings-0.11.0-cp310-cp310-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for glitchlings-0.11.0-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 84752b802c2e1eed4f71e85e1818b3bdcb5d6cc5f45a38f7d7ff5c1fd7968ff2
MD5 05bf059ccb7f1faf110da4d0deef1074
BLAKE2b-256 f21eb361e745489c7bd7fd367da65aff87ba923f88e9e5c4551c183f9560f216

See more details on using hashes here.

Provenance

The following attestation bundles were made for glitchlings-0.11.0-cp310-cp310-macosx_11_0_universal2.whl:

Publisher: publish.yml on osoleve/glitchlings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page