fix: the maximal create runs once the minimal object is gone - #120
Merged
Conversation
An API refuses a create two ways. It can leave the bare field name in a detail beside a generic title, which is deliberately unhealable — a name alone could be about anything, and the adjustment loop must not guess. Or it can spell the field into a sentence, which is the form the loop reads. The quirkserver could only do the first, so no test could exercise a create the loop heals and a later step then replays. NamesRefusedFieldInProse gives it the second, with an exhibit asserting both forms. The recipe also learns the body that worked. Everything downstream replays it — re-creating this entity as another's parent, narrowing a refused maximal, cleaning up at the end — and the body the plan started from is the document's guess, which is what needed healing. No test here demonstrates a changed outcome: each of those paths heals again on its own, so the guess survives being replayed. It is still the wrong thing to carry. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
No entity ever recorded a maximal body. The strategy program created the widest valid body while the object the minimal create had just made was still live, and both bodies are synthesised from the same document — so an API that keys an object on any field they share answered the second create with a conflict: attempt 0 400 invalid icon -> drop icon attempt 1 409 conflict attempt 2 409 conflict -> and so on, to the allowance The reduction was working the whole time. It dropped what the API named and then had nothing left to learn from, because a conflict says nothing about how wide a valid body is. The maximal create makes a second object and deletes it again, so it belongs after the delete rather than before it. Recorded maximal bodies follow, and with them a maximal configuration that is wider than the minimal one and excludes what the API accepts without ever returning: color = "#FF0000" description = "To tag assets in San Francisco" # match_type skipped: the API accepted this property and did not return it Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…tands The previous version opened by saying no audit had ever run against any pilot, which stopped being true some time ago. It described the coverage and correctness split, and the job is now narrower than that: make the generated acceptance tests pass, measured by the suite and by nothing else. What a reader needs and could not find anywhere: which script is the benchmark, what the loop script does, where the credential lives, which files each generated resource carries and which of them are replayed rather than derived, and where the audit writes what it learned. The score and the failure split are here because they are the state, not a measurement of the toolkit: counts of what the toolkit emits and refuses stay in docs/emittance_tracker.md. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No entity ever recorded a maximal body, so every acceptance configuration fell back to values derived from the document — the thing #119 exists to stop.
The cause
The strategy program created the widest valid body while the object the minimal create had just made was still live, and both bodies are synthesised from the same document. An API that keys an object on any field they share answers the second create with a conflict:
The reduction was working the whole time. It dropped what the API named, and then had nothing left to learn from — a conflict says nothing about how wide a valid body is.
buildProgramput the teardown last, unlike the non-strategy plan inplan/steps.go, which deletes before the maximal create.runCreateMaximalmakes a second object and deletes it again, so it belongs after the delete rather than before it.The result
Maximal bodies are recorded, and the maximal configuration is now genuinely wider than the minimal one — and excludes what the API accepts without ever returning:
TestUnit_Strategy_TheMaximalCreateFollowsTheDeletepins the ordering.Also here
NamesRefusedFieldInProseon the quirkserver, with an exhibit. It could only model the unhealable refusal shape — a bare field name indetailbeside a generic title — so no test could exercise a create the adjustment loop heals. Real APIs write both forms; now so does the quirkserver.The recipe learns the body that worked rather than keeping the plan's document-derived guess. Everything downstream replays it. No test here demonstrates a changed outcome — each of those paths heals again on its own, so the guess survives being replayed — and the commit says so. It is still the wrong thing to carry.
handoff.mdrewritten. The previous version opened by saying no audit had ever run against any pilot. It now carries the full test-harness reference: which script is the benchmark, what the loop script does, where the credential lives, which files each generated resource carries and which are replayed rather than derived, where the audit writes what it learned, and the ranked next steps.Measured
sh tf_acceptance_tests.sh— 1 passed, 34 failed, from 0/35 at the start of this work. 33 of the 34 fail at step 1, because only four entities have a recorded body; the rest still have document-derived configs. Getting more entities through the probe is the next lever and is the top item in the handoff.make checkgreen at 90.7%.🤖 Generated with Claude Code