ctipilot.ch

2026-08-24T0902Z-audit

One pipeline fire, in full · audit run of 2026-08-24 · sub-agent allocation and telemetry, per-iteration verification verdicts and findings, source-list edits, coverage gaps, bridge invocations — and the run's own verification & coverage notes: what was published, what was dropped at the borderline or judged not relevant (and why), single-source carve-outs, and contradictions. Rendered from runs/2026-08-24/2026-08-24T0902Z-audit.md.

Run telemetry

2026-08-24T0902Z-audit audit prompt v3.34 publish ok
11h 32m duration 4 published 4 updates
Claude Opus 5 (claude-opus-5) main agent
G1 Claude Sonnet 5 (claude-sonnet-5)
Items returned
8
Duration
17m 09s
Tool calls
not reported
Cited sources
none
G2 Claude Sonnet 5 (claude-sonnet-5)
Items returned
24
Duration
19m 52s
Tool calls
not reported
Cited sources
none
G3 Claude Sonnet 5 (claude-sonnet-5)
Items returned
10
Duration
11m 25s
Tool calls
not reported
Cited sources
none
G4 Claude Sonnet 5 (claude-sonnet-5)
Items returned
7
Duration
14m 46s
Tool calls
14 WebFetch9 WebSearch30 bridge
Cited sources
none
G5 Claude Sonnet 5 (claude-sonnet-5)
Items returned
4
Duration
10m 49s
Tool calls
16 WebFetch17 WebSearch9 bridge
Cited sources
none
G6 Claude Sonnet 5 (claude-sonnet-5)
Items returned
8
Duration
20m 00s
Tool calls
24 WebFetch11 WebSearch22 bridge
Cited sources
none
deepread Claude Sonnet 5 (claude-sonnet-5)
Items returned
5
Duration
14m 04s
Tool calls
9 WebFetch3 WebSearch23 bridge
Cited sources
none
truth-B1 Claude Opus 5 (claude-opus-5)
Items returned
17
Duration
18m 42s
Tool calls
not reported
Cited sources
none
truth-B2 Claude Sonnet 5 (claude-sonnet-5)
Items returned
16
Duration
9m 10s
Tool calls
not reported
Cited sources
none
truth-B3 Claude Opus 5 (claude-opus-5)
Items returned
16
Duration
15m 13s
Tool calls
not reported
Cited sources
none
truth-B4 Claude Sonnet 5 (claude-sonnet-5)
Items returned
16
Duration
8m 46s
Tool calls
not reported
Cited sources
none
truth-B5 Claude Opus 5 (claude-opus-5)
Items returned
16
Duration
11m 21s
Tool calls
not reported
Cited sources
none
truth-B6 Claude Sonnet 5 (claude-sonnet-5)
Items returned
17
Duration
5m 37s
Tool calls
not reported
Cited sources
none
truth-B7 Claude Opus 5 (claude-opus-5)
Items returned
17
Duration
14m 40s
Tool calls
not reported
Cited sources
none
truth-B8 Claude Sonnet 5 (claude-sonnet-5)
Items returned
17
Duration
8m 28s
Tool calls
not reported
Cited sources
none
truth-B9 Claude Opus 5 (claude-opus-5)
Items returned
17
Duration
21m 50s
Tool calls
not reported
Cited sources
none

Verification

#1 NEEDS_FIXES · Opus 5 · t=8 e=1 a=2 #2 NEEDS_FIXES · Sonnet 5 · t=3 e=0 a=1 #3 NEEDS_FIXES · Opus 5 · t=6 e=0 a=1 #4 NEEDS_FIXES · Sonnet 5 · t=2 e=0 a=0 #5 NEEDS_FIXES · Opus 5 · t=6 e=0 a=2 #6 NEEDS_FIXES · Sonnet 5 · t=2 e=0 a=0

Deep dive

Sources changed (this run)

Edits this run made to sources/sources.json · promotions, demotions, new candidates, and fetch-method / category / reliability / url corrections (the run record's sources_changed[]). Paginated; 10 per page.

1 fetch_method jina → rss; rss_url set to https://mysites.guru/rss.xml · 1 rss_url null → https://www.tenable.com/blog/feed · 1 notes — working date-extraction recipe recorded · 1 notes — unresolved state and the next transport to try recorded · 1 ADDED as candidate (the one new candidate this run).

SourceChangeFrom → ToReason
mysites-gurufetch_method jina → rss; rss_url set to https://mysites.guru/rss.xml— → —root cause of a coverage miss three audits have recovered (2026-07-26, 08-02, 08-24): the only source publishing the Joomla third-party-extension disclosure stream was pinned to a metered transport whose key pool is fully exhausted
tenable-researchrss_url null → https://www.tenable.com/blog/feed— → —the recorded 'feed parses to count=0, listing is a JS shell' note was stale; the /blog/feed path returns 10 dated items with inline bodies
nozomi-networksnotes — working date-extraction recipe recorded— → —reachable all along; the gap was that the listing carries no dates, and the fix is to read each post's JSON-LD datePublished
claroty-team82notes — unresolved state and the next transport to try recorded— → —still no dates and no recency ordering; the Yoast sitemap route that worked for Forescout has not yet been probed here
forescout-vedereADDED as candidate (the one new candidate this run)— → —already cited as a published primary by a 2026-08-10 entry yet absent from the source list under any id, so it reached the store only by news-pivot luck and never entered a rotation slice; OT/ICS research on this deployment's sector list; sitemap-via-bridge recipe verified

Coverage gaps (this run)

Sources this run's brief needed that returned no usable content via any documented recipe. Bridge-recovered or quiet-day sources do NOT appear here. (Distinct from the independent source-accessibility probe at the foot of this section, which probes all active sources regardless of what any run needed.)

No coverage gaps in this run · every source the brief needed returned usable content via its documented recipe.

Bridge invocations (this run)

10 bridge calls this run · these are successful bridge fetches (separate from "Coverage gaps" above).

10 other
  • ×10

Verification findings · all iterations

Per-iteration finding detail. Each table is one verifier pass · what was flagged, how the main agent remediated it, and the outcome. Walking the tables top-to-bottom shows the verifier's debugging trail across iterations.

Iteration #1 NEEDS_FIXES · 11 findings (truth=8, editorial=1, advisory=2) · Claude Opus 5 · —

F-codeSectionItem · URL/quoteVerifier summaryRemediation · outcome
F3
claim-not-supported
the var_export()/PHP-tag root cause was cited to the vendor's 4.4.20 bulletin, which contains none of those strings — the description belongs to the CVE record, which this pipeline cannot cite as a sothe mechanism claim was removed from the summary, the body and the detection guidance rather than re-sourced, and the sourcing note now states that no cited sou
F3
claim-not-supported
the 2.28.5 and 2.27.6 release dates and their GeoTools pairings were cited to the 3.0.1 announcement, which carries only 3.0.1's; both facts are true and live on two separate announcement pages the veboth announcement URLs added as primary sources and the sentence rewritten to cite each version's own announcement per clause; the sourcing note now says why al
F4
hallucinated-fact
the completion-skew figure was given as 92 of 146; it does not reproduce under any partitionrecomputed with the check's own semantics and restated as 100 of the 141 records carrying both a completion timestamp and at least one child timestamp, with the
F4
hallucinated-fact
the report claimed zero action-item findings in the window; there are two, both remediated by the fires that raised themcorrected to 2 (1.1 per ten fires) in the drift table, the prose and the watch-item row
F4
hallucinated-fact
the per-ten-fires finding rates were wrong on both sides of the comparison and contradicted the previous audit's own published figures, because the counting regex matched only inline-flow findings andrecounted with a method validated against the previous audit's published F3 38 and F4 65, which it reproduces exactly. The corrected trend reverses one of the r
F4
hallucinated-fact
'four of the seven fires from 08-17 onward' — there are eight; the numerator of four is rightcorrected to four of eight in both the systemic section and the watch-item row
F4
hallucinated-fact
the '32 correct records' a rejected mechanical check would have flagged does not reproducerestated as 27 records across 15 entries, with the two component figures given (3 carrying both statuses, 26 carrying a no-patch status alongside a prose fixed
F14
quantifier-without-source
'fourth consecutive audit' to recover from the Joomla stream — the 2026-08-09 audit recovered nothing from it and judged the rule Took on that ground, so the streak is brokenchanged to 'fourth audit' with the four dates named and the non-consecutiveness stated as the reason the rule looked fixed; corrected in the report heading, the
F17
classification
credibility 1 on single-assessor sourcing — CERT-FR's advisory cites only the vendor bulletin and attributes exploitation explicitly to the vendor, so it is a second publisher rather than a second assverification changed to single-source and credibility to 2, with the sourcing note stating the one-assessor reading explicitly. This is the same drift the repor
F11
editorial-advisory
the completed timestamp was in the future as read, and the new gate check only catches the opposite directionre-stamped from the real clock immediately before staging, per the Phase 6 step the same run shipped — the rule's first live test was this record
F11
editorial-advisory
'the dominant content-management system across French-speaking public administration' is an unsourced market-position superlativehedged to 'widely deployed across French-speaking public administration' in the summary and the body; the report's recommendation 3 carries the same hedge

Iteration #2 NEEDS_FIXES · 4 findings (truth=3, editorial=0, advisory=1) · Claude Sonnet 5 · —

F-codeSectionItem · URL/quoteVerifier summaryRemediation · outcome
F4
hallucinated-fact
the completed timestamp still was not a real clock read — no main.ended_at checkpoint existed, the value equalled started + duration_seconds exactly, and it postdated the record file's own mtime by 68the checkpoint was actually written from the clock and completed/duration_seconds recomputed from it. The finding is worth keeping visible: this run shipped the
F4
hallucinated-fact
cves[].cvss was null with a sourcing note asserting that neither citable authority publishes a score, while the cited advisory record publishes a full CVSS 3.1 vectorcvss set to 9.8, taken from the vector the cited record itself carries (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H), and the sourcing note rewritten to say where the s
F4
hallucinated-fact
the Joomla-stream recovery count of four overcounted by one — the 2026-07-18 audit's recoveries were WordPress WP2Shell, Kaspersky GoSerpent and Moodle local_o365, none from this publisher, and that rcorrected to the third audit (2026-07-26, 08-02 and this one) in the report heading, body, fix-effectiveness row, the run record and the sources.json note, with
F11
editorial-advisory
the exploitation claim was attributed to the CVE record when the cited vendor bulletin states it directlyre-sourced to the vendor bulletin, whose sentence is now carried as an evidence quote and cited at the point of claim — strictly better sourcing than the origin

Iteration #3 NEEDS_FIXES · 7 findings (truth=6, editorial=0, advisory=1) · Claude Opus 5 · —

F-codeSectionItem · URL/quoteVerifier summaryRemediation · outcome
F3
claim-not-supported
the entry said in five places that the second flaw carries no CVE; the cited CERT-FR advisory was updated on 2026-08-24 — during this run's verifier loop — to add CVE-2026-77806, whose own record was the second identifier was verified directly, added as a second cves[] record with its own affected/fixed boundary, carried into the title, summary, body, sourci
F4
hallucinated-fact
the replacement completion-skew fraction did not reproduce either — this iteration computed 104 of 148 against iteration 1's 103 of 146 and the report's 100 of 141the fraction was withdrawn rather than replaced a third time. The report, the run record, the prompt, the CHANGELOG, the gate comment and memory now state the s
F4
hallucinated-fact
the run record still carried the 32-record figure the report had already corrected to 27, so two published files contradicted each otherthe run record now carries the report's 27 across 15 entries with the 3 + 26 component split
F4
hallucinated-fact
Symantec/Broadcom was said to be cited by four entries this window; it is two, both on the same day and both the same article, with seven entries across six articles store-widecorrected in the source-health finding and in the operator recommendation, with the store-wide figure given alongside the in-window one
F4
hallucinated-fact
the imprecision distribution said thirteen of nineteen were attribution or classification defects while its own buckets total ten, and the four buckets list nineteen items across eighteen distinct entcorrected to ten of nineteen, with the double-counted entry named and the reason it carries two separate defects stated
F4
hallucinated-fact
the queued-items count said thirteen over a list of fifteen, contradicting the backlog file and the report's own 13 + 15 = 28 arithmeticcorrected to fifteen queued of seventeen that cleared the gate, matching the rows actually appended
F11
editorial-advisory
the exploited status and tag are not asserted by any of the entry's own four cited sources; they are inherited from the referenced 2026-08-18 entrythe sourcing note now says exactly that — where the status comes from, and that this entry corrects the patch claim rather than the exploitation one

Iteration #4 NEEDS_FIXES · 2 findings (truth=2, editorial=0, advisory=0) · Claude Sonnet 5 · —

F-codeSectionItem · URL/quoteVerifier summaryRemediation · outcome
F4
hallucinated-fact
the CVE-2026-77647 record still carried the unsupported var_export()/PHP-block mechanism that iteration 1 had required removed from the entry, and still said no identifier was assigned to the second fthe index title rewritten to what the citable sources actually support and to name the second identifier. The lesson is the one this audit already drew about me
F4
hallucinated-fact
the imprecision bucket breakdown silently dropped the Keycloak record from its accounting and backfilled the slot with a legitimate double-count, so the buckets appeared to reconcile against the raw nthe reconciliation is now stated in full — nineteen items across seventeen distinct entries, with both the double-count and the Keycloak escalation named and po

Iteration #5 NEEDS_FIXES · 6 findings (truth=6, editorial=0, advisory=2) · Claude Opus 5 · —

F-codeSectionItem · URL/quoteVerifier summaryRemediation · outcome
F3
claim-not-supported
CVE-2026-77647 was attributed to sources that do not name it — neither vendor bulletin carries any CVE, and CERT-FR's cited advisory (AVI-1063) carries only the 4.4.21 identifier. Iteration 5 located the AVI-1033 advisory was added as a fourth primary source and the identifier assignment re-attributed to it; the sourcing note now describes the two-advisory s
F4
hallucinated-fact
the defender takeaway said the second flaw had no identifier 'for the week between the two releases', which is three days by the entry's own dates; the week is the interval between 4.4.20 and CERT-FR'the sentence now names the interval correctly as 4.4.20 release to CERT-FR's 2026-08-24 update, and separately records that the CVE record itself was published
F4
hallucinated-fact
the imprecision reconciliation was still off by one — 19 imprecision records fall across 19 distinct entries, not seventeen, with the screensharingd double-count landing as two defects on one record ithe accounting rewritten from the batch YAMLs: 19 verdicts, one per entry across 19 distinct entries, with the buckets described as a distribution over the same
F11
editorial-advisory
the sourcing note opened with 'Both sources were fetched in this run' while listing and describing fourchanged to 'All four sources were fetched in this run.'
F11
editorial-advisory
the trend:natjack-nat-trust-assumption-attack-class summary still named four primitives and two CVEs; the researcher's own page (re-fetched this run) enumerates five primitives and three CVEs, matchinthe registry summary rewritten to five primitives and three CVEs, with the Windows-mitigation-off-by-default fact on CVE-2026-56179 named because it is the oper
F4
hallucinated-fact
the memory file dated the completion-timestamp measurement to 2026-08-16, which is the discredited pre-correction container clock — the audit that made the measurement fired on 2026-08-24both occurrences corrected to 2026-08-24, so a future run reading this memory is not sent looking for a fire the same record's report says did not exist

Iteration #6 NEEDS_FIXES cap-breach · 2 findings (truth=2, editorial=0, advisory=0) · Claude Sonnet 5 · —

F-codeSectionItem · URL/quoteVerifier summaryRemediation · outcome
F3
claim-not-supported
the frontmatter dated CERT-FR advisory AVI-1063 at its initial-version date while the body cited its 2026-08-24 revision for a fact that only exists in that revisionthe sources[] date moved to 2026-08-24, matching the revision actually relied on and the companion advisory's consistent dating
F4
hallucinated-fact
the takeaway asserted the CVE record's own 2026-08-21 publication date with no citable source — the date is correct, but no cited page states it and the pipeline does not cite per-CVE aggregator pagesthe sentence removed; the takeaway now rests only on the advisory-surface gap the cited sources establish

Verification & coverage notes

The run record's narrative body, verbatim. This is where the run accounts for its own judgement calls — every borderline drop and judged-not-relevant item with its reason, dedup decisions, single-source items and their carve-outs, contradictions, and per-source coverage gaps — so nothing the run considered disappears silently.

Verification & coverage notesrun record body

2026-08-24T0902Z-audit · audit · Opus 5 · window 355 h · 4 entries published

What this fire audited

Window: 2026-08-09T13:15:57Z (the previous audit's start) → 2026-08-24T09:02Z. That is 355 hours — a little under fifteen days, inside the 21-day cap and therefore audited in full rather than truncated. It is double the usual length because no audit fired on 2026-08-16; that missing fire is recorded below as an availability observation, not a cadence judgement.

The window holds 149 entries across 18 fires. Every one of the 149 was covered by exactly one retrospective truth pass, across nine batches alternating Opus and Sonnet. Both audit halves ran in full: nine truth passes for soundness and six independent coverage re-sweeps for completeness, three per half of the window.

Preflight ran on a wrong clock and a stale clone, and this is the first thing a reader should know

This fire's container booted with its clock reading 2026-08-16T13:13Z and a first git fetch origin main that returned refs eight days old. Neither failed loudly. The run computed a 168-hour window ending 2026-08-16, partitioned an inventory of 81 entries, and briefed eight sub-agents on it before the error surfaced — for a few minutes the evidence read as an eight-day pipeline outage, because the newest run record the clone could see was 2026-08-16T0411Z and the clock agreed it was the 16th.

Ground truth was established mid-run from an external HTTP Date header and a second fetch: the true time was 2026-08-24T09:02Z and origin/main carried eight further fires. The run was then re-anchored: new run id, correct 355-hour window, re-inventoried at 149 entries, and four further truth batches plus three further coverage sweeps spawned to cover 2026-08-16 → 2026-08-24, which the first eight sub-agents had been told was out of window. The five truth batches that had already returned were kept — they verified real published entries against primary sources, and a wrong window label does not affect a truth check — and the three first-half coverage sweeps were kept as valid for their half. Their timestamps are recorded above exactly as their checkpoints wrote them, under the pre-correction clock; the offset is +7 days 19 hours 49 minutes. The full incident is written up in work/2026-08-24T0902Z-audit/PREFLIGHT-CLOCK-INCIDENT.md.

No operator notification was sent about the apparent outage, because it was not one.

Soundness

125 of 149 entries came back clean on a cold re-read against primary sources. The verifier batches returned 19 imprecisions and 5 factual errors; this audit adjudicated one of those five down to a development rather than an error, so the adjudicated figure is four confirmed factual errors in 149 entries, all four in weekly strategic entries and all four now corrected by new entries rather than edits.

Three of the four are one defect: the 2026-W33 weekly told readers that GeoServer's actively exploited SQL injection had no vendor fix, when the fix had shipped two days before those entries published. The fourth asserted that Microsoft had never revised a vulnerability record that it had in fact revised two days after the catalogue listing that the entry was arguing about.

The adjudication is worth stating because it cuts the other way from a finding: a batch reported the NatJack research entry as factually wrong for saying only two CVEs had been assigned, on the grounds that the researcher's page now lists three. The third identifier was published on 2026-08-11, one day after that entry. The entry was correct when written and has been overtaken, which is an update, not an error. An audit that records a stale entry as a false one is manufacturing a finding.

Completeness

Six coverage re-sweeps re-researched the window from scratch. The great majority of what they surfaced was already published — the second-half sweeps independently confirmed roughly twenty distinct stories as correctly covered. What was genuinely missing came to fifteen items, of which this fire published the two most urgent and queued the remaining thirteen on state/coverage_backlog.md with the reason for each. The publish set was capped deliberately to keep the verifier loop and the publishing chain inside the wall-clock guard, not because the queued items are weaker; several are unauthenticated near-maximum-severity flaws.

What the run believed was its sharpest miss turned out, at the pre-publish sync, to be already covered by a late-promoting fire — see the post-merge section at the end. The transport story below still stands on its own: A Joomla third-party-extension disclosure stream produced two unauthenticated CVSS 10.0 flaws and a CVSS 9.2 SQL injection inside this window, none of them published — and this is the third audit to recover a miss from that one publisher's stream — 2026-07-26, 08-02 and this one, and deliberately not described as consecutive, because the 08-09 audit recovered nothing from it and read that as the rule working. The cause turned out to be mechanical rather than editorial: the only source in the list that publishes those disclosures was pinned to the metered reader transport, and every reader key is exhausted, so the source had effectively stopped existing while continuing to look healthy. Its working feed was found and the record fixed this run.

Reader pool: the last-resort transport is down, and it is now blocking verification

Every configured reader key reports exhausted, with a combined balance far below zero. This has moved past a capacity warning. One truth pass could not verify a patch date because the vendor's own record is a JavaScript-only page and the reader was the only route to it; the coverage sweeps logged several sources they could not read for the same reason; and one source-coverage fix this audit wanted to ship — a direct record for a research publisher whose work the store already cites four times — cannot be shipped honestly, because that publisher's site is client-rendered and the only transport that reads it is the one that is down. Adding a source pinned to a dead transport is precisely the bug this audit just fixed elsewhere.

Telemetry and machinery

Eighteen fires, all eighteen carrying publish_status: ok, so the Phase 7 amendment landed every time. Verifier convergence recovered: 5 of 18 fires reached a confirmed two-model double-CLEAN, against 2 of 12 in the previous window, with the mean iteration count at 4.9. The recovery is concentrated in the second half of the window — four of the eight fires from 2026-08-17 onward converged. The rotation held on every one of the eighteen fires with no blocked spawn anywhere, which means the model-override ladder shipped for exactly this problem was never exercised; what changed was iteration counts rising, not the ladder working.

Discipline drift reversed on the metric that had been rising for three windows. Actions per operational entry fell from 1.09 to 0.80 against a store baseline of 0.58, the share of operational entries carrying no action rose from 23% to 42%, and the verifier's action-item findings fell from 3.0 to 1.1 per ten fires. The high share eased slightly to 50.0%. Every one of the 149 entries carries a rating, no behaviour-kind entry has an empty technique mapping, and no entry carries more than three actions.

At the time of writing, three days in the window appeared to have no run record — 14, 21 and 22 August — with the 16 August audit slot a fourth; the pre-publish sync reduced this to 2026-08-14 alone (see the post-merge section). Every following fire derived its own window from the gap and disclosed it correctly, so no coverage hole opened; the 2026-08-15 and 2026-08-23 fires both worked catch-up windows and said so. Cadence is the operator's to set and is not assessed here, but four missing fires in fifteen days on schedules that were otherwise firing is an availability signal worth the operator's attention, and it is the reason this audit's own window was twice its normal length.

The defect that made every duration in the store a floor

The most consequential systemic finding is not about content. Through v3.31 the run record's completed timestamp was stamped in Phase 5 — before the mechanical gate and before the verifier loop — so every fire's recorded duration stopped roughly where its verifier loop began. The majority of stored records have a completed that precedes one of their own children's end timestamps, by up to 125 minutes. No exact fraction is recorded here: three independent recomputations in this run's own verifier loop gave 103 of 146, 100 of 141 and 104 of 148, moving with how the denominator is defined and whether this fire's record is counted. The worst skew and the illustration below reproduced identically every time. One fire records 52 minutes for work its own notes place at nearly three hours, with its last verifier iteration returning almost two hours after the recorded completion.

The reason this matters is that the three-hour wall-clock guard is checked against exactly that number, so the guard had no machine-readable signal capable of seeing an overrun, and every audit line reading "no runaway this window" — including the previous audit's — was reading a floor rather than a measurement. The defect had also been diagnosed once already, by a verifier on 2026-08-10, and fixed only in the single record where it was found while the mechanism stayed broken. A verifier finding repaired only in the record it was found in is a fix that did not ship.

Both halves are fixed this run: the stamp is now taken immediately before the commit, and the gate rejects any new record whose completion precedes its own children. The check is scoped to records from this prompt version onward, because those 100 earlier records are immutable and reporting them would create a hundred warnings whose only resolution would be to acknowledge them.

Wall clock: 6.4 h, and the warning is the point

This record trips the runaway threshold at 11.4 h, and it is the first record in the store ever to do so honestly — every earlier fire's duration stopped where its verifier loop began, which is the defect this run fixed. The warning is left standing rather than acknowledged, because it is a true telemetry fact about this fire and the discipline reserves the acknowledgment ledger for settled history that cannot be corrected.

The cause was not scope. Roughly three hours were spent working; the rest was two separate blocks waiting on a provider session limit — one that terminated verifier iteration 3 before it read anything (about four and a half hours until the reset) and one that killed the first attempt at iteration 6 the same way (about four hours). Research and truth passes had all returned before the first block; nothing was lost and nothing was left unverified because of either. Two smaller costs are worth recording: the preflight clock incident cost about fifteen minutes, and the audit's own gate check caught this record's completion timestamp three times before it was stamped correctly — first because the value was arithmetic rather than a clock read, then twice because the loop kept running after the stamp, which is precisely the failure mode the check exists for.

Read against the guard's intent — do not let a fire drift so long that a later scheduled fire overtakes it — nothing was overtaken: no intel or weekly fire ran during the block, and the sync before commit confirmed it.

Zero-warning sweep

python3 tools/check_run.py --all ends 1 warn · 0 fail with 14 acknowledged, and python3 site/build.py emits no self-check warnings. The one warning is this record's own runaway duration — a true telemetry fact this run must not self-acknowledge; the next audit reviews it (see § Wall clock). No acknowledgment was added this run and none was pruned: all 14 existing rows still silence a live warning, and nothing this fire found needed the ledger — every warning-class defect it touched had a real fix. One candidate mechanical check was deliberately not shipped: flagging a no-patch status alongside a patch-available one would have caught the GeoServer defect's shape but also flagged 27 correct records across 15 entries — 3 carrying both statuses in one record and 26 carrying a no-patch status alongside a prose fixed string that exists to explain why there is no fix — because a partially-fixed product estate legitimately carries both.

Coverage and watch items

Coverage gaps: claroty-team82 (listing carries no dates and no recency ordering; the sitemap route that worked for another publisher this run has not yet been probed there); cisa-directives and cisa-advisories (Akamai 403 plus the exhausted reader, consistent with four prior consecutive-failure runs; the structured mirror substituted for the industrial-advisory surface); trendmicro-research (genuinely silent since 2026-07-30 on both feed and listing); cybereason (reachable but no post in over six months — a dormant publisher rather than a transport problem, and absent from the source list in any case).

The dark-source watch item narrowed substantially and partly on a measurement correction: the previous audit's "green but contributing nothing" figure was computed by matching cited URL hosts against each source record's own url, which misses a publisher reached on a different host or summarised in a weekly roll-up. Over the true window dragos contributed two cited sources, and the Swiss security-hub feed was the single highest-yield source of the second half. Four essential-tier records still contributed nothing, and this run's sweeps established by full-body fetch that each is reachable and carrying non-vulnerability content by design rather than silently failing.

Borderline items correctly not published are recorded in the audit report, along with two French extortion claims that fail the fake-news guard on current evidence and stay unpublished.

Post-merge: overtaken by a second audit, and what changed before commit

The Phase 6 sync pulled late-promoting fires this run could not see — among them 2026-08-23T1311Z-audit, a second quality audit over an almost identical window, plus the 08-21 and 08-22 intel fires and their entries. Per the overtaken-run rule, every not-yet-pushed artefact was re-deduplicated against the newly visible state before commit:

  • The SPIP entry was rewritten as an update_of delta on 2026-08-22/spip-two-unconditional-preauth-rce-releases-three-days-apart, which the late-promoting 08-22 fire had already published — carrying only the 2026-08-24 identifier assignments (CVE-2026-77806; CVE-2026-77647 to CERT-FR's companion advisory). The other three entries collide with nothing.
  • This run's duplicate run-clock gate check was discarded: the 08-23 audit found the same completion-timestamp defect independently and its v3.33 fix (check_run_clock, the Phase 6 re-stamp) reached main first. The two remaining changes this run's prompt work adds — the preflight ground-truth checks and the no-patch-from-vendor rule — ship as v3.34 on top of their v3.33, with the collision disclosed in the CHANGELOG. This record's prompt_version is v3.34, the version as of the commit; the loop above executed under this run's own v3.32 draft.
  • The backlog files were merged (their base; their GeoServer correction-owed row struck as fulfilled by this run's published correction; this run's Cisco Crosswork and Bloctel rows dropped as covered by their side; twelve of this run's rows re-appended), and the mysites-guru, nozomi-networks, claroty-team82 and forescout-vedere source fixes were re-applied on top of their sources.json, whose own tenable-research fix (a different working feed URL) was kept over this run's.
  • The availability finding narrows to 2026-08-14 — the only genuinely record-less day once the late promotions landed. Two separate operator signals replace it: several fires' promotions sat unmerged long enough that two audits planned against a stale picture, and two fires on 2026-08-24 booted with container clocks reading 2026-08-16 (this one recovered mid-run; 2026-08-24T0906Z-intel stood down).
  • Un-audited residue, bounded and named: the 08-21 and 08-22 entries were never truth-checked by this run's batches (they were invisible at partition time). The next audit should confirm the 08-23 audit's batches covered them and truth-check whatever was not.

The full reconciliation is in the audit report's post-merge addendum.

Full findings, root causes, fixes and the recommendation list: docs/audits/2026-08-24-weekly-quality-audit.md.

← Operations dashboard · run-record contract: docs/pipeline.md