# Select occurrences once; validate the complete owning candidate before applying.
original = AST.MODULE([AST.ASSIGN("answer", AST.LITERAL(2))])
checked = AST.CHECK(original)
proposal = {"schema": "grid.syntax.owningEdit.v1", "inputRevision": checked.inputRevision, "artifactRevision": checked.artifactRevision, "compilationRevision": checked.compilationRevision, "edits": {"kind": "transformOccurrences", "rules": [{"selector": {"within": [0, 0], "maxDepth": 0}, "replacement": AST.LITERAL(3)}]}}
transaction = AST.EDIT(original, proposal)
updated = AST.APPLY(original, transaction)
updated_preview = AST.RENDER(updated)
