v0.1.12 — pre-release tags + stale-cache fallback + anti-hallucination AI prompt
v0.1.12 — pre-release tags + stale-cache fallback + anti-hallucination AI prompt
Follow-up to v0.1.11 for the AI summary path. Two compounding bugs still produced hallucinations even after release notes fetching was wired up — both fixed.
Bug 1: pre-release tags were silently dropped
copilot CLI publishes daily pre-release tags (v1.0.57-0, -1, -2, -3, ...) between stable cuts. When a user transitioned from stable v1.0.56 to one of those pre-releases (which copilot --version reports as just "1.0.57"), v0.1.11's filter found zero entries in the (1.0.56, 1.0.57] range — every match was a pre-release that got skipped.
Result: empty changelog handed to the AI summarizer → AI defaulted back to whatever was in its session memory → hallucinated paragraphs about Launch-Copilot.ps1 and Get-RemoteChangelogEntries (legacy PowerShell helpers from the v1.x launcher that don't exist in the WinUI rewrite).
Fix: keep all tags. Preserve the full tag name in Version (e.g. "1.0.57-3" displays as ## v1.0.57-3 in the briefing). New SemVerKey comparable orders pre-releases before the stable cut of the same base version so the briefing reads chronologically: 1.0.56-0 < 1.0.56-1 < 1.0.56-2 < 1.0.56 < 1.0.57-0 < ...
Bug 2: stale cache wasn't used when fresh fetch failed
When the cache was past TTL and the GitHub Releases API call failed (rate limit, transient network error, DNS hiccup), ReleaseNotesService returned empty instead of falling back to the stale cache content. Again: empty changelog → AI hallucination.
Fix: if fresh fetch returns null, return the stale cache content. Slightly out-of-date release notes are infinitely better than no notes — empty is what causes the model to make things up.
Bug 3: AI prompt didn't fence against session-memory contamination
The launcher reuses a single named session (CopilotCLI-Update-Briefings) across version bumps for cumulative context. Months of legacy-PS-launcher prompts had cemented hallucinated context that even fresh changelog data couldn't override.
Fix: the AI prompt now explicitly:
- Forbids referencing prior turns, any named PowerShell scripts (
Launch-Copilot.ps1,Get-RemoteChangelogEntries), wrappers, or Desktop cache files — none of those exist in this product - Mandates a fixed fallback string (
"No release notes available for this transition.") when the changelog is empty or only contains updater status lines - Says: base the summary STRICTLY on the changelog text below; do not invent items
Bug 4: AI was called even when there were no release notes
Both Check now and the startup-update path used to fall back to result.RawOutput ("No update needed, current version is X.Y.Z") as the AI's changelog input when the GitHub fetch returned nothing. The model couldn't anchor on that — it would freelance from memory. Now we skip the AI call entirely when entries is empty and surface a status message: "Skipped AI summary — no GitHub release notes available for this range." Honest > wrong.
Verified
On the user's machine, 1.0.57 → 1.0.60 now produces four real entries (v1.0.58, v1.0.59, v1.0.60-0, v1.0.60) with full curated bodies and an AI summary that cites actual changes (rubber duck enabled by default, /voice command, vim-style diff navigation, billing help topic, etc.) — no hallucinations.
Tests
130 → 134 (4 new for pre-release ordering + stale-cache fallback).
Downloads
Same dev cert as v0.1.4+ — if you already trusted it, just install the MSIX.