Skip to content

Version 0.2.2 — the model can answer, and one file per platform - #13

Merged
timbogdanov merged 1 commit into
mainfrom
fix/ai-schema-and-one-artifact
Aug 19, 2026
Merged

Version 0.2.2 — the model can answer, and one file per platform#13
timbogdanov merged 1 commit into
mainfrom
fix/ai-schema-and-one-artifact

Conversation

@timbogdanov

Copy link
Copy Markdown
Owner

What this changes

Describe-it had never worked, for anyone. output_config.format compiles the schema into a grammar, and the service caps a schema at 24 optional parameters. aiSchema() hung all 29 DSL_RANGES keys plus nine others off a single shape object — 38 properties with only type required. Thirty-seven optional. Every request came back:

400 — schemas contains too many options parameters 37 ... limit is 24

A shape now carries its parameters as a list of name/value pairs:

{"type":"diagonal","params":[{"name":"dx","value":"1"},{"name":"period","value":"8"}]}

Nothing is optional — 0 optional parameters, and it stays 0 however many primitives the DSL grows. The name enum still refuses a parameter the DSL doesn't have. Types and ranges leave the grammar, which costs nothing: every value already went through dslValidateShape's clamping. aiCoerce converts back and names the offender (period is not a number: "eight"); aiToProgram collapses pairs into flat shapes, so the Program box still shows a program you can read and edit.

Then a second bug nobody could reach. With the 400 gone, "city skyline" returned too many layers. The prompt states every parameter range, every primitive, the canvas limits and the scale — and never DSL_MAX_LAYERS. dslValidate discards the whole program over it. Now stated, derived from the constant so the two can't drift.

One file per platform. Two DMGs, two zips and three Windows builds meant downloading twice left PatternFront, PatternFront 2 and PatternFront 3 in Finder — macOS numbering duplicates, exactly as README.md:42 already warns. Releases now ship the Apple silicon .dmg and the x64 Setup.exe, and the notes say to drag to Applications before opening, which is what stops the duplicate existing.

before after
schema optional params 37 (400 on every request) 0
release artifacts 8 2

Verification

Confirmed against the real API with a live key: the request is accepted and returns a program. New checks in tools/verify-behaviour.js fail on the code as it stood — the schema's optional count against the limit of 24, and the prompt naming whatever DSL_MAX_LAYERS currently is — plus coverage of the pair→flat conversion, numeric coercion and enum rejection.

Full suite: 421 checks, 0 failures.

Checklist

  • npm run verify passes
  • Generated files re-run through their generator — none touched
  • If it touches the desktop app, the browser build still works — changes are the AI path and CSS-free
  • If it adds a stamp, the contact sheet was looked at — no stamps

🤖 Generated with Claude Code

https://claude.ai/code/session_01GRMJpT8yxY2Q33td1QeP7z

Describe-it had never once worked. Structured outputs compile the schema into a
grammar and the service caps a schema at 24 optional parameters; hanging all 29
DSL_RANGES keys plus the nine others off one shape object came to 38 properties
with only `type` required. Thirty-seven optional, and every request came back 400
about grammar compilation — a message no user could act on, on a feature that
could never have worked for anyone.

A shape now carries its parameters as a list of name/value pairs. Nothing in the
schema is optional, so the count is zero and stays zero however many primitives
the DSL grows, and the name enum still refuses a parameter the DSL does not have.
Types and ranges leave the grammar, which costs nothing — every value already
went through dslValidateShape's clamping. aiCoerce turns the strings back and
names the offender when it cannot ("period is not a number"), and aiToProgram
collapses the pairs into ordinary flat shapes, so what lands in the Program box
is still a program you can read and edit. The wire format never escapes it.

Behind that sat a second failure nobody could reach: "city skyline" came back as
"too many layers". The prompt states every parameter range, every primitive, the
canvas limits and the scale — and never the layer cap. dslValidate throws the
whole program away over it, so the model wrote something reasonable and the user
got an error about a limit they were never told. It is stated now, derived from
DSL_MAX_LAYERS so the two cannot drift.

Releases ship one file per platform: the Apple silicon dmg and the x64 installer.
Two dmgs, two zips and three Windows builds meant a person who downloaded twice
had PatternFront, PatternFront 2 and PatternFront 3 in Finder with nothing to say
which was which — macOS numbering duplicates, exactly as the README warns. The
release notes now say to drag to Applications before opening, which is what stops
the duplicate existing at all.

Held by two new checks that fail on the code as it stood: the schema's optional
count against the service's limit of 24, and the prompt naming whatever
DSL_MAX_LAYERS currently is.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GRMJpT8yxY2Q33td1QeP7z
@timbogdanov
timbogdanov merged commit aa15bd3 into main Aug 19, 2026
5 checks passed
@timbogdanov
timbogdanov deleted the fix/ai-schema-and-one-artifact branch August 19, 2026 19:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant