What the open-source record shows from the 31 July 2026 strike on Kyiv
Open-source channels posted impact footage near Kyiv's CHP-5 plant at 22:59 UTC on 31 July 2026 and a reported 4 deaths and 15 injuries by 00:39 UTC on 1 August. The cited posts describe Iskander-M and Zircon strikes on residential buildings and the thermal plant, with Russia-aligned and OSINT accounts giving different numerical characterisations of the package.

Footage of an impact near Kyiv's CHP-5 thermal power plant reached open-source monitoring channels at 22:59 UTC on 31 July 2026. By 00:39 UTC on 1 August, the same channel network was citing a civilian toll of 4 killed and 15 injured from the strike, including people described as hit while running to air-raid shelters. The cited posts describe Iskander-M ballistic missiles and 3M22 Zircon hypersonic cruise missiles hitting a six-story residential building and the thermal plant; the cumulative footprint across the wire, set against the limits of that wire, is what this piece reads.
This article is built on a narrow wire: six posts from three Telegram channels, AMK_Mapping, intelslava, and osintlive, filed between 22:59 UTC on 31 July and 01:09 UTC on 1 August. Three of those channels are open-source monitoring accounts of unverified provenance. intelslava is a Russia-aligned channel that has consistently framed strikes in the language the Russian defence establishment prefers. Numerical claims from any of these posts should be read as the channel's characterisation, not as an independently verified figure. With that caveat stated up front, the picture the posts assemble is consistent in its outlines and contested in its specifics.
The sequence as the wire shows it
The first timestamped item is AMK_Mapping's 22:59 UTC post on 31 July, captioned as footage of the moment of strike near CHP-5. AMK_Mapping followed at 00:00 UTC on 1 August with a still captioned "civilians lying dead on the streets of Kyiv after Russian Iskander-M/Zircon missiles impacted," and at 00:39 UTC with a longer post adding that the dead and injured had been running to air-raid shelters and putting the toll at 4 killed and 15 injured.
intelslava posted large-fires footage from across Kyiv at 23:52 UTC, then reposted strike details at 01:09 UTC on 1 August, describing a 25-missile package that included 6 Zircons. osintlive, at 23:18 UTC, characterised the attack as a "major" strike naming residential districts and "critical energy" targets, and specifically described a six-story residential building being struck. None of the cited posts establishes an exact interval between the residential impact and the CHP-5 impact, or a coordinated launch time; the sequencing is implied by the post timestamps, not by independent strike-timing data.
What the cited items support, and from which source
The CHP-5 strike is attested by AMK_Mapping at 22:59 UTC with moment-of-impact footage. The residential-strike frame is attested by osintlive at 23:18 UTC with the explicit reference to a six-story residential building. The casualty figure of 4 killed and 15 injured is attested by AMK_Mapping at 00:39 UTC, the same channel that posted the earlier impact footage, and was not independently confirmed in the wire set by a second outlet.
The 25-missile, 6-Zircon package count is attested only by intelslava at 01:09 UTC, a Russia-aligned channel. Other sources in the wire use qualitative language, "major," "footage of tonight's strikes," "large fires", without producing a competing numerical count. The Zircon and Iskander-M designations appear across the Russian-aligned and OSINT accounts; the precise "3M22" model number is specific to intelslava's framing and should be read as that channel's characterisation until corroborated by a defence-ministry briefing or a Western-wire report.
The two framings are doing different work. intelslava's framing emphasises the package's scale and the prestige systems committed to it, and is consistent with how the Russian defence ministry typically presents overnight strikes. The OSINT framing on AMK_Mapping and osintlive emphasises civilian harm, the residential location of the impacts, and the interruption of shelter runs. The framings are not in direct contradiction in the cited wire; they are in different registers, and a reader who treats the package count as established fact is relying on a single Russian-aligned source for it.
What we verified, and what we could not
What the cited source items support: that between 22:59 UTC on 31 July 2026 and 01:09 UTC on 1 August 2026, Telegram posts from AMK_Mapping, intelslava and osintlive described a Russian missile strike on Kyiv using Iskander-M ballistic missiles and 3M22 Zircon cruise missiles (per the Russia-aligned intelslava), with moment-of-impact footage near CHP-5 posted at 22:59 UTC, a six-story residential building referenced by osintlive at 23:18 UTC, large fires visible across the city from 23:52 UTC, and a reported 4 killed and 15 injured per AMK_Mapping at 00:39 UTC, with the dead described as hit while running to air-raid shelters.
What the cited source items do not specify: a verified casualty count from the Kyiv City Military Administration or the Ukrainian Emergency Service; the specific Kyiv districts hit beyond the CHP-5 site and a six-story residential building; the launch sites or launch sequence; the proportion of the package intercepted; whether any Ukrainian air-defence system engaged a Zircon specifically; the precise interval between the residential strike and the CHP-5 strike; which bank of the Dnipro CHP-5 sits on; whether the Russian defence ministry has officially commented on the strike.
What this article has not independently established, and does not assert: the identity of any individual casualty; the specific grid load lost at CHP-5 as a result of the strike; any Russian General Staff order-of-battle statement; whether the four-dead figure is a final toll or an intermediate reading at the moment of posting; whether other Ukrainian cities were struck in the same window. The cited posts are the wire set this piece rests on, and the limits above are the limits of that wire set.
Reading the framing
Monexus assessment: the open-source wire set is coherent on the basic chronology and on the basic shape of the strike (thermal generation plus residential envelope, in the same package), and incoherent on the numerical specifics. The 4 dead / 15 injured figure comes from a single channel; the 25-missile / 6-Zircon figure comes from a Russia-aligned channel that characterises strikes in the language the Russian defence establishment prefers. Neither figure has been corroborated against a Ukrainian-government briefing, a Western-wire report, or a second independent OSINT account in this wire set.
On the framing question, the dominant Western-wire read of overnight Russian strikes on Kyiv has been to treat them as a test of Ukrainian air defence, with civilian harm as a residual cost. The Ukrainian read, dominant in Kyiv, has been to treat each package as a renewed instrument of population pressure, with the air-defence frame understating the cumulative effect on heating, electricity, and shelter access over a winter. The cited wire for the night of 31 July to 1 August does not resolve that disagreement. It does show what a single night's open-source record looks like when the only numerical specifics come from one Russia-aligned channel and one unverified OSINT account, and the only casualty count is a single-channel figure that has not yet been picked up by an independent outlet.
Stakes and what to watch
If the 4-dead figure holds in the morning Ukrainian-government briefing, the air-defence framing survives the night intact and the strike sits inside the established pattern. If the official count rises materially, the civilian-pressure framing gains another data point it has so far lacked in numerical form. If the official count is lower, the unverified OSINT channel has overcounted relative to the official tally, which is itself a finding about how the open-source record behaves.
The package count question matters less for civilian harm than for the allied-policy conversation. A 25-missile package with 6 Zircons is a different planning problem for NATO air-defence planners than a smaller mixed strike. That figure is currently sourced only to intelslava, and a Ukrainian-government briefing, a Western-wire report, or a second OSINT account producing an independent count would meaningfully sharpen the picture. Until then, the package count sits in the register of the Russia-aligned characterisation, and the casualty count sits in the register of a single OSINT channel. The contradiction to watch is the gap between those registers and the official record when it lands.
Desk note: Monexus framed this as a wire-credibility audit rather than a strike-by-strike event report. The wire set is dominated by Telegram monitoring channels; we have cited those posts as the only available provenance, flagged which numerical claims come from the Russia-aligned channel versus the unverified OSINT accounts, and drawn an explicit ledger of what the cited items do and do not support. Where Ukrainian-government or Western-wire reporting later contradicts or refines the channel accounts, this article should be read as a snapshot of the open-source record as of 01:09 UTC on 1 August 2026.
Wire provenance
This editorial synthesis draws on the following public wire/social posts:
- https://t.me/intelslava/91867
- https://t.me/intelslava/91863
- https://t.me/AMK_Mapping/35209
- https://t.me/AMK_Mapping/35187
- https://t.me/AMK_Mapping/35151
- https://t.me/osintlive/560977