Skip to content
Skip to main content
Novel Systems home
Decision log
D-064August 5, 2026

The margin floor refuses; it does not clamp, and the page says the harder thing

Decided

/developers describes the 0.5 margin floor as a refusal — a request asking for less comes back 400 bad_request naming both figures — and not as a clamp that silently returns a quote at the floor.

Affects: components/developers/api-runner.tsx, app/developers/page.tsx. Amends the copy shipped under D-063.

What happened. The runner shipped with helper text on the target-margin control reading "ask for less than the floor and the response comes back at the floor with floor_overridden false." The first thing anyone did with the live runner was type 0.2, and the deployed engine answered 400. The sentence had been written from a reading of the intent of the floor rather than from a call to the thing that enforces it.

Why the engine is right and the copy was wrong. A clamp is friendlier and worse. If a salesperson asks for 32% and receives a 200 with a quote priced at 50%, the number on their screen is not the number they requested, and nothing in the happy path makes them look at applied_margin to find that out. The 400 puts the disagreement in front of them at the moment it happens. floor_overridden still exists and is still false in every runner response, because it marks an *approved* override — a state the sandbox credential cannot reach and a public page therefore cannot demonstrate.

Considered and rejected: change the engine to clamp so the copy becomes true. This is the wrong direction on a site whose argument is that the software is the source of truth and the page is derived from it. The copy was the newer artifact and the incorrect one. Changing a production pricing rule to rescue a sentence written after it is exactly the inversion this whole surface exists to reject.

What would make this wrong. If the engine ever gains an approval path that lets an authenticated caller price below the floor — which is what floor_overridden: true is reserved for — then "refused" becomes "refused unless approved", and both the helper text and the section introduction have to say so. The word to watch for in a future backend diff is any code path that sets that flag true.

Note on how this was caught. No guard found it and none could have. The consistency checks re-derive figures from files; they cannot know that a sentence about a 200 describes an endpoint that returns a 400. It was found because the page now calls the API on every load, which makes the feature its own regression test — and it failed the first time it ran. That is an argument for building runnable surfaces rather than documented ones, and it is recorded here because the next tempting shortcut will be to describe some other endpoint instead of calling it.