diff --git a/CLAUDE.md b/CLAUDE.md
index 68121de..5d2db17 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -24,7 +24,6 @@ apps/
web-react/ # Trace Explorer — execution timeline debugger
react-demo/ # Expedition React browser demo (adopted from Traverse)
browser-consumer/ # Browser consumer façade
- android-demo/ # Expedition Android demo
macos-demo/ # Expedition macOS demo
youaskm3-starter-kit/ # Downstream browser starter kit
fixtures/ # Shared UI demo fixtures
diff --git a/README.md b/README.md
index e3281df..14e177b 100644
--- a/README.md
+++ b/README.md
@@ -28,11 +28,16 @@ UI examples for [Traverse](https://github.com/traverse-framework/Traverse).
| Demo | Path |
|---|---|
| React browser demo | [`apps/react-demo/`](apps/react-demo/) |
-| Android demo | [`apps/android-demo/`](apps/android-demo/) |
| macOS demo | [`apps/macos-demo/`](apps/macos-demo/) |
| Browser consumer façade | [`apps/browser-consumer/`](apps/browser-consumer/) |
| youaskm3 starter kit | [`apps/youaskm3-starter-kit/`](apps/youaskm3-starter-kit/) |
+### Retired demos
+
+| Path | Retired | Notes |
+|---|---|---|
+| `apps/android-demo` | 2026-08-12 | Spec 004 retire ([#251](https://github.com/traverse-framework/reference-apps/pull/251)); use primary Android Compose shells |
+
---
## By OS / target
diff --git a/apps/android-demo/README.md b/apps/android-demo/README.md
deleted file mode 100644
index bfa2da9..0000000
--- a/apps/android-demo/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# Traverse Android Demo
-
-Checked-in Android (Compose) demo for Traverse expedition planning.
-
-Canonical home: **`traverse-framework/reference-apps`** (`apps/android-demo/`).
-
-What it does:
-
-- renders one approved expedition flow
-- shows ordered runtime state updates
-- shows the final trace summary and output panel
-- assumes the runtime exists outside the app process
-
-Fixture-driven rendering uses `app/src/main/assets/expedition-runtime-session.json`.
-
-## Build (machine with Android SDK)
-
-```bash
-cd apps/android-demo
-./gradlew :app:assembleDebug
-```
-
-## Validation
-
-```bash
-bash scripts/ci/android_demo_smoke.sh
-```
diff --git a/apps/android-demo/app/build.gradle.kts b/apps/android-demo/app/build.gradle.kts
deleted file mode 100644
index 7428ad7..0000000
--- a/apps/android-demo/app/build.gradle.kts
+++ /dev/null
@@ -1,42 +0,0 @@
-plugins {
- id("com.android.application")
- id("org.jetbrains.kotlin.android")
-}
-
-android {
- namespace = "com.traverse.demo.android"
- compileSdk = 35
-
- defaultConfig {
- applicationId = "com.traverse.demo.android"
- minSdk = 28
- targetSdk = 35
- versionCode = 1
- versionName = "0.1.0"
- }
-
- buildFeatures {
- compose = true
- }
-
- composeOptions {
- kotlinCompilerExtensionVersion = "1.5.14"
- }
-
- compileOptions {
- sourceCompatibility = JavaVersion.VERSION_17
- targetCompatibility = JavaVersion.VERSION_17
- }
-
- kotlinOptions {
- jvmTarget = "17"
- }
-}
-
-dependencies {
- implementation(platform("androidx.compose:compose-bom:2024.09.02"))
- implementation("androidx.activity:activity-compose:1.9.2")
- implementation("androidx.compose.material3:material3")
- implementation("androidx.compose.ui:ui")
- implementation("androidx.compose.ui:ui-tooling-preview")
-}
diff --git a/apps/android-demo/app/src/main/AndroidManifest.xml b/apps/android-demo/app/src/main/AndroidManifest.xml
deleted file mode 100644
index 2084f06..0000000
--- a/apps/android-demo/app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/android-demo/app/src/main/assets/expedition-runtime-session.json b/apps/android-demo/app/src/main/assets/expedition-runtime-session.json
deleted file mode 100644
index bcee3cc..0000000
--- a/apps/android-demo/app/src/main/assets/expedition-runtime-session.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "demo_id": "expedition.plan.v1",
- "title": "Plan Expedition",
- "request_id": "req-expedition-001",
- "execution_id": "exec_req-expedition-001",
- "trace_id": "trace_exec_req-expedition-001",
- "status": "completed",
- "summary": "Traverse evaluates the governed expedition workflow and assembles a final expedition plan."
-}
diff --git a/apps/android-demo/app/src/main/java/com/traverse/demo/android/MainActivity.kt b/apps/android-demo/app/src/main/java/com/traverse/demo/android/MainActivity.kt
deleted file mode 100644
index 3759a16..0000000
--- a/apps/android-demo/app/src/main/java/com/traverse/demo/android/MainActivity.kt
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.traverse.demo.android
-
-import android.os.Bundle
-import androidx.activity.ComponentActivity
-import androidx.activity.compose.setContent
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.PaddingValues
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.lazy.LazyColumn
-import androidx.compose.foundation.lazy.items
-import androidx.compose.material3.Card
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.Scaffold
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.unit.dp
-
-class MainActivity : ComponentActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContent {
- MaterialTheme {
- TraverseAndroidDemoScreen(sampleStateUpdates)
- }
- }
- }
-}
-
-private val sampleStateUpdates = listOf(
- DemoStateUpdate(
- "Discovering capability",
- "Looking up expedition.planning.plan-expedition@1.0.0 in the registry."
- ),
- DemoStateUpdate(
- "Evaluating constraints",
- "Confirming the approved expedition capability can run locally."
- ),
- DemoStateUpdate(
- "Executing workflow",
- "Traversing the approved expedition planning workflow."
- ),
- DemoStateUpdate(
- "Completed",
- "The expedition plan is ready for final review."
- )
-)
-
-data class DemoStateUpdate(
- val title: String,
- val detail: String,
-)
-
-@Composable
-private fun TraverseAndroidDemoScreen(stateUpdates: List) {
- Scaffold { padding ->
- LazyColumn(
- modifier = Modifier
- .fillMaxSize()
- .padding(padding),
- contentPadding = PaddingValues(16.dp),
- verticalArrangement = Arrangement.spacedBy(12.dp),
- ) {
- item {
- Card(modifier = Modifier.fillMaxWidth()) {
- Column(modifier = Modifier.padding(16.dp)) {
- Text("Traverse Android Demo", style = MaterialTheme.typography.headlineSmall)
- Text(
- "Plan Expedition",
- style = MaterialTheme.typography.titleMedium,
- modifier = Modifier.padding(top = 8.dp)
- )
- Text(
- "Runtime states and final trace summary render from the approved expedition demo fixture.",
- style = MaterialTheme.typography.bodyMedium,
- modifier = Modifier.padding(top = 8.dp)
- )
- }
- }
- }
-
- items(stateUpdates) { update ->
- Card(modifier = Modifier.fillMaxWidth()) {
- Column(modifier = Modifier.padding(16.dp)) {
- Text(update.title, style = MaterialTheme.typography.titleMedium)
- Text(
- update.detail,
- style = MaterialTheme.typography.bodyMedium,
- modifier = Modifier.padding(top = 6.dp)
- )
- }
- }
- }
- }
- }
-}
diff --git a/apps/android-demo/app/src/main/res/values/strings.xml b/apps/android-demo/app/src/main/res/values/strings.xml
deleted file mode 100644
index 75f48c8..0000000
--- a/apps/android-demo/app/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
- Traverse Android Demo
-
diff --git a/apps/android-demo/build.gradle.kts b/apps/android-demo/build.gradle.kts
deleted file mode 100644
index 017d909..0000000
--- a/apps/android-demo/build.gradle.kts
+++ /dev/null
@@ -1,4 +0,0 @@
-plugins {
- id("com.android.application") version "8.5.2" apply false
- id("org.jetbrains.kotlin.android") version "1.9.24" apply false
-}
diff --git a/apps/android-demo/gradle.properties b/apps/android-demo/gradle.properties
deleted file mode 100644
index e696167..0000000
--- a/apps/android-demo/gradle.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
-android.useAndroidX=true
-kotlin.code.style=official
diff --git a/apps/android-demo/settings.gradle.kts b/apps/android-demo/settings.gradle.kts
deleted file mode 100644
index 9614dec..0000000
--- a/apps/android-demo/settings.gradle.kts
+++ /dev/null
@@ -1,2 +0,0 @@
-rootProject.name = "TraverseAndroidDemo"
-include(":app")
diff --git a/docs/adopted-platform-clients.md b/docs/adopted-platform-clients.md
index 0fb3a8b..b55e475 100644
--- a/docs/adopted-platform-clients.md
+++ b/docs/adopted-platform-clients.md
@@ -16,7 +16,7 @@ Ownership boundary (Traverse [#703](https://github.com/traverse-framework/Traver
| Former Traverse path | Owner | Destination here |
|---|---|---|
-| `apps/android-demo/` | Reference Apps | [`apps/android-demo/`](../apps/android-demo/) |
+| `apps/android-demo/` | Reference Apps | **Retired** 2026-08-12 (`retire-android-demo`) — use primary Android Compose shells |
| `apps/browser-consumer/` | Reference Apps | [`apps/browser-consumer/`](../apps/browser-consumer/) |
| `apps/macos-demo/` | Reference Apps | [`apps/macos-demo/`](../apps/macos-demo/) |
| `apps/react-demo/` | Reference Apps | [`apps/react-demo/`](../apps/react-demo/) |
@@ -24,13 +24,12 @@ Ownership boundary (Traverse [#703](https://github.com/traverse-framework/Traver
| `apps/llm-mcp-reference/` (new) | Reference Apps | [`apps/llm-mcp-reference/`](../apps/llm-mcp-reference/) — LLM MCP façades; [`llm-reference-apps-plan.md`](llm-reference-apps-plan.md) |
| Runtime fixtures / manifests | Traverse | `examples/` in Traverse (not adopted) |
-Shared fixture for native demos: [`fixtures/expedition-runtime-session.json`](../fixtures/expedition-runtime-session.json).
+Shared fixture for remaining native demos: [`fixtures/expedition-runtime-session.json`](../fixtures/expedition-runtime-session.json).
## Validation commands (secondary / adopted)
| Artifact | Command |
|---|---|
-| Android demo | `bash scripts/ci/android_demo_smoke.sh` |
| macOS demo | `bash scripts/ci/macos_demo_smoke.sh` |
| React demo | `bash scripts/ci/react_demo_smoke.sh` |
| youaskm3 starter | `bash scripts/ci/youaskm3_starter_kit_smoke.sh` |
diff --git a/docs/demo-inventory.md b/docs/demo-inventory.md
index 66e8c07..00e783f 100644
--- a/docs/demo-inventory.md
+++ b/docs/demo-inventory.md
@@ -11,7 +11,7 @@ Reconciled against `find apps -maxdepth 1 -type d` on 2026-08-11. Primaries are
| `apps/doc-approval` | already-primary | Production multi-OS product shell | — |
| `apps/trace-explorer` | already-primary | Debugger companion (web-only by design) | — |
| `apps/react-demo` | retire | Expedition browser sample; Spec 004 non-goal as production pattern; primaries own Web UX | `retire-react-demo` |
-| `apps/android-demo` | retire | Expedition Android sample; superseded by primary Android Compose shells | `retire-android-demo` |
+| `apps/android-demo` | retire (done) | Removed 2026-08-12; superseded by primary Android Compose shells | `retire-android-demo` |
| `apps/macos-demo` | retire | Expedition macOS sample; superseded by primary SwiftUI shells | `retire-macos-demo` |
| `apps/browser-consumer` | upgrade | Keep as downstream browser façade; align to Specs 001/002 and stop depending on `react-demo` once that path retires | `upgrade-browser-consumer-events` |
| `apps/youaskm3-starter-kit` | upgrade | Keep as downstream getting-started kit; point at embedded/public surfaces + Specs 001/002 vocabulary | `upgrade-youaskm3-starter-kit-events` |
diff --git a/docs/production-playbook.md b/docs/production-playbook.md
index aa433c5..d2c5bbf 100644
--- a/docs/production-playbook.md
+++ b/docs/production-playbook.md
@@ -39,7 +39,7 @@ Rules:
| App | Status |
|---|---|
| trace-explorer | **Debugger** — embedded Trace API (`embedded-trace-api/1.0.0`); not a secondary “product” kit |
-| react-demo, android-demo, macos-demo, youaskm3-starter-kit, browser-consumer | **Adopted / secondary** demos & kits — lighter maintenance; not merge-blocking `embedded_smoke` targets — see [`adopted-platform-clients.md`](adopted-platform-clients.md) |
+| react-demo, macos-demo, youaskm3-starter-kit, browser-consumer | **Adopted / secondary** demos & kits — lighter maintenance; not merge-blocking `embedded_smoke` targets — see [`adopted-platform-clients.md`](adopted-platform-clients.md) (`android-demo` retired) |
---
diff --git a/docs/production-reference-plan.md b/docs/production-reference-plan.md
index 440c273..150db7f 100644
--- a/docs/production-reference-plan.md
+++ b/docs/production-reference-plan.md
@@ -44,7 +44,7 @@ Related:
| Tier | Apps | Smoke / CI bar |
|---|---|---|
| **Primary product shells** | `traverse-starter`, `doc-approval`, `meeting-notes` | Production DoD; Linux-runnable `embedded_smoke` hard-fail |
-| **Adopted / secondary** | `react-demo`, `android-demo`, `macos-demo`, `browser-consumer`, `youaskm3-starter-kit`, `llm-mcp-reference` | Lighter demo smokes only — **not** merge-blocking `embedded_smoke` targets |
+| **Adopted / secondary** | `react-demo`, `macos-demo`, `browser-consumer`, `youaskm3-starter-kit`, `llm-mcp-reference` | Lighter demo smokes only — **not** merge-blocking `embedded_smoke` targets (`android-demo` retired) |
| **Debugger** | `trace-explorer` | Embedded Trace API companion — not a product shell to copy |
Canonical narrative: [`adopted-platform-clients.md`](adopted-platform-clients.md) · front door: root `README.md`.
diff --git a/scripts/ci/android_demo_smoke.sh b/scripts/ci/android_demo_smoke.sh
deleted file mode 100755
index 823dea4..0000000
--- a/scripts/ci/android_demo_smoke.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env bash
-# Offline structure smoke for the adopted Android expedition demo.
-set -euo pipefail
-
-repo_root="$(cd "$(dirname "$0")/../.." && pwd)"
-
-required_files=(
- "apps/android-demo/README.md"
- "apps/android-demo/settings.gradle.kts"
- "apps/android-demo/build.gradle.kts"
- "apps/android-demo/app/build.gradle.kts"
- "apps/android-demo/app/src/main/AndroidManifest.xml"
- "apps/android-demo/app/src/main/java/com/traverse/demo/android/MainActivity.kt"
- "apps/android-demo/app/src/main/res/values/strings.xml"
- "apps/android-demo/app/src/main/assets/expedition-runtime-session.json"
-)
-
-for file in "${required_files[@]}"; do
- if [[ ! -f "${repo_root}/${file}" ]]; then
- echo "missing Android demo artifact: ${file}" >&2
- exit 1
- fi
-done
-
-grep -q 'setContent' "${repo_root}/apps/android-demo/app/src/main/java/com/traverse/demo/android/MainActivity.kt"
-grep -q 'Traverse Android Demo' "${repo_root}/apps/android-demo/app/src/main/res/values/strings.xml"
-grep -q '"status": "completed"' "${repo_root}/apps/android-demo/app/src/main/assets/expedition-runtime-session.json"
-
-echo "Android demo smoke passed"
diff --git a/scripts/ci/repository_checks.sh b/scripts/ci/repository_checks.sh
index 4584813..40ded38 100644
--- a/scripts/ci/repository_checks.sh
+++ b/scripts/ci/repository_checks.sh
@@ -96,8 +96,6 @@ check "manifests/meeting-notes/app.manifest.json" "meeting
check "manifests/meeting-notes/components/process/component.manifest.json" "meeting-notes process component"
# Adopted Traverse platform demos / starter (issue #151)
-check "apps/android-demo/README.md" "android-demo README"
-check "apps/android-demo/app/src/main/java/com/traverse/demo/android/MainActivity.kt" "android-demo MainActivity"
check "apps/browser-consumer/index.js" "browser-consumer package"
check "apps/macos-demo/Package.swift" "macos-demo Package.swift"
check "apps/react-demo/src/main.js" "react-demo main"
@@ -108,7 +106,6 @@ check "fixtures/expedition-runtime-session.json" "expedit
check "docs/adopted-platform-clients.md" "adopted platform clients doc"
check "docs/production-playbook.md" "production playbook"
check "docs/youaskm3-starter-kit.md" "youaskm3 starter guide"
-check "scripts/ci/android_demo_smoke.sh" "android demo smoke"
check "scripts/ci/macos_demo_smoke.sh" "macos demo smoke"
check "scripts/ci/react_demo_smoke.sh" "react demo smoke"
check "scripts/ci/youaskm3_starter_kit_smoke.sh" "youaskm3 starter smoke"