diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0564234..e1ea589 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog
+## Unreleased
+
+- Rebalance the ThreadRelink logo so the return arrow has more room and visual
+ weight.
+- Clarify the VS Code extension description and document the Azure free-trial
+ publishing contingency.
+
## 0.4.1
- Repair stale automatic conversation links when the current project has
diff --git a/docs/MARKETPLACE_PUBLISHING.md b/docs/MARKETPLACE_PUBLISHING.md
index 6836e86..23183fd 100644
--- a/docs/MARKETPLACE_PUBLISHING.md
+++ b/docs/MARKETPLACE_PUBLISHING.md
@@ -69,6 +69,27 @@ Token。
9. 再次运行身份检查,将 `verify_access` 设置为 `true`。检查成功前不要创建
Release。
+## Azure Free Trial 到期后的备用方案
+
+Marketplace 发布本身不会消耗 Azure Free Trial 额度,但当前的 user-assigned
+managed identity 是 Azure subscription 中的资源。Free Trial 到期后,先手动运行
+**Check Marketplace Publishing Identity**,并将 `verify_access` 设置为 `true`:
+
+- 如果检查成功,继续使用当前 identity,不做迁移。
+- 如果检查因为 subscription 已禁用而失败,再迁移到不依赖 subscription 的
+ Microsoft Entra app registration。
+
+迁移时使用现有 GitHub OIDC issuer、不可变 subject 和 audience 创建 app
+federated credential,将 GitHub Environment 中的 `AZURE_CLIENT_ID` 改为新
+application client ID,并在两个工作流的 `azure/login` 步骤中删除
+`subscription-id`、添加 `allow-no-subscriptions: true`。先以
+`verify_access: false` 取得新 identity 的 Marketplace profile ID,将其添加为
+publisher Contributor,再以 `verify_access: true` 验证访问。
+
+只有新 identity 成功发布一个版本后,才移除旧 Marketplace Contributor,并删除
+旧 managed identity 和空 resource group。不要仅因为 Free Trial 即将到期就升级为
+按量付费订阅。
+
## 发布新版本
1. 将 `packages/vscode/package.json` 更新为新的 `X.Y.Z` 版本。
diff --git a/packages/vscode/CHANGELOG.md b/packages/vscode/CHANGELOG.md
index 6197a70..56068eb 100644
--- a/packages/vscode/CHANGELOG.md
+++ b/packages/vscode/CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog
+## Unreleased
+
+- Rebalance the ThreadRelink logo so the return arrow has more room and visual
+ weight.
+- Describe the extension as keeping Codex conversations connected to their
+ projects after repository renames or moves.
+
## 0.4.1
- Repair stale automatic conversation links when the current project has
diff --git a/packages/vscode/package.json b/packages/vscode/package.json
index 0ce3a71..5ea479e 100644
--- a/packages/vscode/package.json
+++ b/packages/vscode/package.json
@@ -1,7 +1,7 @@
{
"name": "threadrelink",
"displayName": "ThreadRelink",
- "description": "A VS Code extension that keeps local Codex conversations discoverable after a repository is renamed or moved.",
+ "description": "A VS Code extension that keeps local Codex conversations connected to their projects after repositories are renamed or moved.",
"version": "0.4.1",
"icon": "resources/threadrelink.png",
"publisher": "ascendho",
diff --git a/packages/vscode/resources/threadrelink-mark.svg b/packages/vscode/resources/threadrelink-mark.svg
index 0b86a2b..f20d39a 100644
--- a/packages/vscode/resources/threadrelink-mark.svg
+++ b/packages/vscode/resources/threadrelink-mark.svg
@@ -6,8 +6,8 @@
-
-
-
-
+
+
+
+
diff --git a/packages/vscode/resources/threadrelink.png b/packages/vscode/resources/threadrelink.png
index 8e3ebe5..e4c01af 100644
Binary files a/packages/vscode/resources/threadrelink.png and b/packages/vscode/resources/threadrelink.png differ
diff --git a/packages/vscode/resources/threadrelink.svg b/packages/vscode/resources/threadrelink.svg
index 791bfb1..8e55068 100644
--- a/packages/vscode/resources/threadrelink.svg
+++ b/packages/vscode/resources/threadrelink.svg
@@ -1,5 +1,5 @@
diff --git a/packages/vscode/test/manifest.test.ts b/packages/vscode/test/manifest.test.ts
index 0e5156a..15417d5 100644
--- a/packages/vscode/test/manifest.test.ts
+++ b/packages/vscode/test/manifest.test.ts
@@ -46,7 +46,7 @@ describe("VS Code extension manifest", () => {
expect(manifest.publisher).toBe("ascendho");
expect(manifest.displayName).toBe("ThreadRelink");
expect(manifest.description).toBe(
- "A VS Code extension that keeps local Codex conversations discoverable after a repository is renamed or moved.",
+ "A VS Code extension that keeps local Codex conversations connected to their projects after repositories are renamed or moved.",
);
expect(manifest.version).toMatch(/^\d+\.\d+\.\d+$/);
expect(manifest.pricing).toBe("Free");