Assert ids
Format <rule>/<reason>, kebab-case, unique per crate; the framework's own
welds use weld/…. Ids live in Verdict::require calls, so weld build
extracts them by walking the phase method bodies at comptime and following
calls into the same crate. The prover SDK maps a failed assert back to the
rule instance and its params for the FI's operators. Nothing about assert
ids reaches the chain.