diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7b12177..87fd209 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,14 @@ repository's local calendar date.
## Unreleased
+## 0.4.0 - 2026-08-29
+
+The recording behind a dictation becomes something you can act on. A history row whose audio is
+still kept can transcribe it again — the fix for a transcript that arrived and arrived *wrong*,
+which Retry could never reach because that row is completed — and hand you the recording itself as
+a file. Minor rather than patch: it is a new capability on all four clients, and nothing about how
+a dictation is captured, sent or transcribed changes.
+
### Added
- **A history row can transcribe its recording again, and hand you the recording.** Retry only ever
diff --git a/Resources/Info.plist b/Resources/Info.plist
index 8a6ed9f..f824e04 100644
--- a/Resources/Info.plist
+++ b/Resources/Info.plist
@@ -15,9 +15,9 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 0.3.0
+ 0.4.0
CFBundleVersion
- 300
+ 400
LSMinimumSystemVersion
14.0
LSUIElement
diff --git a/Sources/dnt/Dnt.swift b/Sources/dnt/Dnt.swift
index 7c52c0c..b3cddbc 100644
--- a/Sources/dnt/Dnt.swift
+++ b/Sources/dnt/Dnt.swift
@@ -38,7 +38,7 @@ struct Dnt: AsyncParsableCommand {
dnt doctor --probe
dnt logs --follow --level debug
""",
- version: "dnt 0.3.0 (6938aa8, 2026-08-25)",
+ version: "dnt 0.4.0 (9a795fc, 2026-08-28)",
subcommands: [
Transcribe.self, Providers.self, Doctor.self, HistoryCommand.self, LogsCommand.self,
PromptCommand.self,
diff --git a/VERSION b/VERSION
index 0d91a54..1d0ba9e 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.3.0
+0.4.0
diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts
index 7f0febf..b84f6b6 100644
--- a/android/app/build.gradle.kts
+++ b/android/app/build.gradle.kts
@@ -32,8 +32,8 @@ android {
// coroutine APIs used here available without desugaring.
minSdk = 26
targetSdk = 35
- versionCode = 300
- versionName = "0.3.0"
+ versionCode = 400
+ versionName = "0.4.0"
// The value is a Java literal, so the quotes are part of it.
buildConfigField("String", "BUILD_COMMIT", "\"$buildCommit\"")
buildConfigField("String", "BUILD_TIMESTAMP", "\"$buildTimestamp\"")
diff --git a/ios/project.yml b/ios/project.yml
index 1b59535..2ebd115 100644
--- a/ios/project.yml
+++ b/ios/project.yml
@@ -15,8 +15,8 @@ settings:
SWIFT_VERSION: "6.0"
DEVELOPMENT_TEAM: 5BR9M56H9W
CODE_SIGN_STYLE: Automatic
- MARKETING_VERSION: "0.3.0"
- CURRENT_PROJECT_VERSION: "300"
+ MARKETING_VERSION: "0.4.0"
+ CURRENT_PROJECT_VERSION: "400"
SWIFT_STRICT_CONCURRENCY: complete
packages:
diff --git a/windows/Directory.Build.props b/windows/Directory.Build.props
index 0fa5758..5133af0 100644
--- a/windows/Directory.Build.props
+++ b/windows/Directory.Build.props
@@ -10,7 +10,7 @@
true
- 0.3.0
+ 0.4.0