# Resolved defuse effect feedback: RE-1024–1033 Ten tasks recover five source/Rust contracts across **174 paired scenarios**. They extend the [defuse batch](QVM_DEFUSE_BATCH.md), correcting misleading capture labels and replacing several supplied effects with actual QVM bodies and matching Rust policies. Each task has its own commit and focused validation. | Tasks | Contract | Paired scenarios | | --- | --- | ---: | | RE-1024 / RE-1025 | [Source objective counter](QVM_EFFECT_COUNTER.md) / [Rust counter](RUST_EFFECT_COUNTER.md) | 12 | | RE-1026 / RE-1027 | [Source team radio](QVM_EFFECT_RADIO.md) / [Rust radio](RUST_EFFECT_RADIO.md) | 34 | | RE-1028 / RE-1029 | [Source completion feedback](QVM_EFFECT_DEFUSE_FINISH.md) / [Rust completion](RUST_EFFECT_DEFUSE_FINISH.md) | 64 | | RE-1030 / RE-1031 | [Source start feedback](QVM_EFFECT_DEFUSE_BEGIN.md) / [Rust start](RUST_EFFECT_DEFUSE_BEGIN.md) | 16 | | RE-1032 / RE-1033 | [Source full feedback](QVM_EFFECT_DEFUSE_COMPLETE.md) / [Rust full feedback](RUST_EFFECT_DEFUSE_COMPLETE.md) | 48 | ## Semantic correction Earlier assistance/defuse reports used capture labels `teleport`, `award` and `sound` for functions205260,283463 and193620. Inspection of their bodies establishes: - **205260 adds score.** It checks client existence and global34992512, increments client248 by the supplied delta, optionally updates team scores in mode3, and requests ranking5864. Its origin argument is unused. The generic score policy was already recovered elsewhere; the defuse resolver now applies it. - **283463 increments a selected counter by1.** It computes client3036+4×index and wraps that word upward once. Defuse passes index5. This is separate from the one-point score update. - **193620 routes team radio commands.** It obtains location text and sends `rsay` commands. It performs no direct native audio playback in this body; downstream radio/audio consumers remain separate work. Historical JSON schemas and Rust enum tags remain compatible. Their numeric function IDs/arguments remain evidence, but names such as `Teleport`, `Award` and `Sound` must not be used as semantic instructions. Rust variants carry compatibility notes, affected findings have been corrected, and new feedback reports use `score`, `counter` and `radio` tags. New adapters interpret these IDs explicitly. This corrects earlier findings rather than claiming new movement or five-point reward behavior. ## Objective counter283463 Twelve probes execute actual283463 through its void-return boundary, covering indices0/5/14 and zero/ordinary/high-bit/wrapping values. Only the selected word changes. Guards at client3032 and3096 survive. The15-word research window is a bounded supplied storage view, not proof of the complete counter enum or lifecycle. Rust validates its caller-owned slice and performs one wrapping increment. ## Team radio193620 The sender must be live, non-following and not team3. Source268637 location text is supplied with a success result. A failed lookup clears the first buffer byte. Actual33715 classifies modes: connected same-team recipients receive messages in team modes or the explicit mode9 exception; mode11 and signed negative modes do not route. Recipient health/follow state is not checked by this body, and the sender's connection word is not its initial admission gate. The command format is `rsay sender -1 type "location"`. The fixed integer/string formatter is modeled; payload quotes are preserved without invented escaping. Text-provider behavior beyond the supplied bounded string and native transport remain open. Existing source formatter policies can be connected separately. After a send, an existing sender marker6168 receives deadline84=tick+3500 and active204=1. No recipients means no marker change; a null marker pointer is not dereferenced. Thirty-four cases cover mode/team/connection gates, zero/64 counts, failed text, quotes, absent marker and time wrapping. Source tests execute actual193620/33715; Rust returns command plans with matching marker state. ## Completion score and counter feedback Sixty-four active completion scenarios execute actual153644,205260 and283463. Waiting leaves state unchanged. On completion, the ordered observations are log, event allocation, score request, optional ranking request and counter-index5 increment. Starting score and counter values at0xffffffff verifies independent wrapping. Paused scoring returns before player/team writes or ranking. The later indexed counter increment still occurs because283463 has no pause gate. Defuse runs in mode8, so the source score helper changes the player score without changing team scores. Ranking5864, logging and allocation remain explicit boundaries in this pair. Rust reuses the established score policy and stages completion, score and counter state together; late unsupported counter storage rolls back prior planned updates. ## Event construction and radio at start Sixteen start cases execute actual277695,278138,193620 and33715. Base allocator277165 still supplies an event pointer. The constructor writes type=event+19, original class metadata/hash, event time and free-after-event state. It snaps origin components through integer conversion and back to f32, initializes trajectory/velocity and copies current origin. Native link-31 is captured before the caller writes duration payload and event mask32. The source then executes radio routing rather than supplying a sound effect result. Reports compare constructed fields, snapped negative/fractional origins, caller flags/payload, command bytes and marker state. Rust reuses `transition::temporary_event` and the recovered radio policy. Start does not change score/counters. Invalid origin conversion rejects without committing prior start state in the typed adapter. ## Full defuse composition Forty-eight probes execute full153419 with actual bomb lookup/distance and the resolved constructor/radio/score/counter bodies. Selected bomb origin feeds event construction. Current client connection/team state feeds radio recipients rather than fixed responses. Cases include paused score updates, three selectors, waiting/completion/cancellation, blocking teammates, decoy bombs and the missing-bomb fatal boundary. Reports compare defuse fields, event records, ordered semantic requests, location/getter counts, command plans, marker state, player/team scores and counter words. Rust stages world and feedback state together. Missing bomb remains an explicit stop before fatal2319; no continuation or native runtime behavior is invented. ## Validation and remaining boundaries Each task runs its corresponding `cargo xtask test-group qvm-effect-*` or `rust-effect-*` before committing. Selected reports regenerate twice identically. Source reports retain original QVM identity and traces; independent expectations check gates, arithmetic, field writes and order. Rust reports retain source-report SHA256 and compare all projected fields. Ten added Rust tests cover wrapping counters, radio routing, score pause behavior, construction and atomic errors. Dependency mappings include the feedback module/CLI, score and event-constructor modules, defuse consumers and gameplay test-count metadata. The registry regression verifies selection. One full-suite run follows task ten: `cargo xtask test-full --since 74572275`. Python uses only the flake-declared Nix runtime, including Git hooks. Generated Rust build caches were cleared after a disk-space failure; source/assets were preserved and final validation runs without incremental compilation to limit cache growth. Remaining boundaries: base allocation277165, native links/sends, location268637, fixed formatter70458, ranking5864 and logs7259. Some have existing generic research elsewhere, but their full feedback is not connected in these probes. This is QVM/Rust policy evidence, not actual game or native platform conformance. The single `cargo xtask test-full --since 74572275` run at the tenth-commit boundary passed: **1,998 Python tests** across549 modules, **329 Rust tests** (assets10, gameplay289, xtask30), **141 deterministic affected report producers**, storage policy, links across **612 documentation files** and whitespace guards. Regeneration left no changes, including earlier defuse outputs. Focused dependency-registry regression passed. Validation notes are amended into task ten, preserving ten commits. ## Follow-up from RE-1034 The [RE-1034–1043 location/allocation batch](QVM_LOCATION_ALLOCATION_BATCH.md) now covers actual location/text/formatting radio chains and allocation through defuse event construction. Native spatial/transport/lifecycle and ranking/log feedback remain open. The original follow-up scope was: - [ ] Connect actual location/formatter, allocation/lifetime, ranking and native link/send/log adapters into defuse and assistance feedback, reusing existing generic findings where applicable. - [ ] Migrate legacy effect-tag APIs/report readers to corrected semantic types without losing provenance or compatibility. - [ ] Verify bomb/objective counter enum ownership and event83/84 plus radio7 downstream rendering/audio consumers. - [ ] Compose resolved defuse and assistance/self-recovery feedback with full154089 preparation, movement54475 and timer155714. - [ ] Expand identity/aliasing, geometry, wrap/configuration and longer lifecycle scenarios; continue asset conversion, Bevy/Solari rendering and playable macOS/Linux acceptance.