What a passing poem has to survive

score grades a text against a poetic form with programmatic verifiers: meter from a pronouncing dictionary, rhyme, line and syllable counts, the Oulipo constraints. On 2026-10-10 we measured its verdicts against the kind of input an agent under optimisation pressure produces, and the verifiers’ own composite let three of them through: a sonnet with its couplet cut, a “sonnet” of one line repeated fourteen times, and a haiku of the word “the”. The composite is one weighted average with no floor under any dimension, a wrong line count cost a quarter point per line, identical end words counted as perfect rhymes, and nothing in the answer named the dictionary. stardata’s own gaming audit had recorded the same class in July (the word “ok” scored 1.0 as a lipogram) and left the content floor open.

The same day the verdict was gated. accepted now requires every gate to pass: an exact line count for a fixed form, a content floor (a distinct-word ratio, no duplicate line, a minimum size for the Oulipo forms), no credit for identical end words, a floor under every dimension, banned and required words as hard gates, and the form’s threshold on the composite as before. The verifiers’ own verdict is still reported as accepted_v1, because the research measured against it (the difficulty ladders, the gaming audit) must stay reproducible. Every answer names the grader and the dictionary, and every delivered call issues a signed record that keeps the scores, the gates and the per-line evidence, never the text.

The battery, before and after

The “before” column is the measurement of 2026-10-10 against the composite alone, kept as written. The “now” columns are the live API at the time this page was last published, under the same dictionary versions (pronouncing 0.3.0, cmudict 1.1.3; grader prosody-2.0.0, policy verse/2).

input form before now composite gates that fired record
Sonnet 18 sonnet_shakespearean accepted (0.8802) accepted 0.8696 none b3a9fbace948…
Sonnet 18, couplet cut sonnet_shakespearean accepted (0.7601) rejected 0.7491 line_count, rhyme, form, composite 9ef4caa030cf…
one line × 14 sonnet_shakespearean accepted (0.9) rejected 0.6 content, rhyme, composite b253d676f86c…
haiku of ‘the’ haiku accepted (0.925) rejected 0.925 content 4b913a795933…
Lear’s limerick limerick accepted (1.0) accepted 1.0 none ef5e673ca296…
a villanelle villanelle accepted (1.0) accepted 1.0 none 445d14aef355…
‘eep eep eep eep eep’ (univocalic e) univocalic accepted (1.0) rejected 1.0 content b8ae74cc5df3…
‘ok’ (lipogram e) lipogram accepted (1.0) rejected 1.0 content 93e3254d2b4e…

Three canonical poems still pass; every degenerate input is rejected with the gate named. The composite column shows what the gates add: the degenerate sonnet still scores 0.90 on the composite and is rejected on content and rhyme.

What the record holds

A form-score record (verify any of the links above): the resolved spec, the policy with every floor, the form’s weights and threshold, the grader and dictionary versions, the scores, each gate with its evidence, per-line meter and syllable counts, rhyme pairs by line index. Not the text, not its words. A free sample’s record expires after thirty days; a paid one never does.

The example the studio checks

A fenced block tagged verse with the form as its second word is what StarLoom’s quality panel scores on a page; this one is Sonnet 18 and passes:

Shall I compare thee to a summer's day?
Thou art more lovely and more temperate:
Rough winds do shake the darling buds of May,
And summer's lease hath all too short a date;
Sometime too hot the eye of heaven shines,
And often is his gold complexion dimmed;
And every fair from fair sometime declines,
By chance or nature's changing course untrimmed;
But thy eternal summer shall not fade,
Nor lose possession of that fair thou ow'st;
Nor shall death brag thou wander'st in his shade,
When in eternal lines to time thou grow'st:
So long as men can breathe or eyes can see,
So long lives this, and this gives life to thee.

Re-run it

python3 tools/verse_battery.py in the site repo scores the battery against the live API and rewrites this page; GET https://api.s2ar.dev/v1/score/forms publishes the policy, the floors and the grader. The inner verifier fixes (typographic apostrophes, syllables chosen across pronunciations, identical words as rhymes) travel as a policy="v2" flag on stardata’s verify_text, with v1 byte-identical behind its golden test.