Document the completed Docker-to-native goosed pool cutover on 103, add the production migrate script with backup/rollback paths, and extend local native pool soak/metrics helpers used as migration gates.
Co-authored-by: Cursor <cursoragent@cursor.com>
Centralize page HTML quota checks with grace-write semantics across page
services and workspace tools, keep localhost MindSpace links clickable in
chat display, and expand Page Data/static-page skill plus local dev docs
for quota, delivery URLs, and native Aider/OpenHands tooling.
Co-authored-by: Cursor <cursoragent@cursor.com>
Gate stacks inherited developer MCP env and routed sandbox-fs writes to the
8082 workspace root, so PAGE/DATA scenarios failed with ENOENT despite a
healthy goosed. Sanitize isolated portal env, grant gate skills, and align
CHAT search assertions with the tkmind_search tool name.
Co-authored-by: Cursor <cursoragent@cursor.com>
DeepSeek V4 tool rounds fail with reasoning_content errors when stable
goosed hits api.deepseek.com directly. Default stable portal startup to
the 18036 compat proxy and add a standalone recovery script for 103 ops.
Co-authored-by: Cursor <cursoragent@cursor.com>
Grant search_external and network egress for default users, enable search-enhanced skill, redact internal architecture terms from assistant UI text, and neutralize search skill prompts so chats use dual-engine web search without exposing vendor names.
Co-authored-by: Cursor <cursoragent@cursor.com>
Strip image_url from persisted session payloads, keep image turns scoped to the active request, and align proxy/vision/page-data paths so WeChat image history does not leak into fresh sessions.
Co-authored-by: Cursor <cursoragent@cursor.com>
Prevent text-only planning replies from marking WeChat delivery done when
static-page-publish never confirmed a public HTML file.
Co-authored-by: Cursor <cursoragent@cursor.com>
Stable remount checks required exactly 9 compose containers, but the
shared goosed-prod project also runs canary. Count only goosed-1..9 and
verify the /opt/portal bind plus a root marker under the live runtime.
Co-authored-by: Cursor <cursoragent@cursor.com>
Fall back to workspace share thumbnails so already-published HTML can be
sent instead of blocking on REQUIRED_FRESH. Also allow an explicit
ALLOW_DIRECT_STABLE_RELEASE path matching the pre-2026-07-23 direct
stable packaging flow.
Co-authored-by: Cursor <cursoragent@cursor.com>
Recognize retry, HTML page, page edits, and poem content edits as session continuations so delivery skips fresh-thumbnail forcing and retains agent context for multi-turn page work.
Co-authored-by: Cursor <cursoragent@cursor.com>
Match phrases like「生成一个精美的 HTML 页面」so poem follow-ups skip fresh-thumbnail forcing and reuse the same session poem context.
Co-authored-by: Cursor <cursoragent@cursor.com>
Skip fresh thumbnail forcing and retry in-session when load_skill completes without HTML落盘, so「把刚才的诗做成页面」can deliver the prior poem as a static page.
Co-authored-by: Cursor <cursoragent@cursor.com>
Short follow-ups like "把刚才的诗做成页面" must keep the existing agent
session so Goose still sees the adjacent poem in snapshot history. Rotating
orphan routes before these requests dropped the poem and revived stale memory.
Co-authored-by: Cursor <cursoragent@cursor.com>
Normal Portal releases should not block when commit status stays pending
after the candidate is already pushed to origin/main.
Co-authored-by: Cursor <cursoragent@cursor.com>
Ignore local .runtime build output in REL-01, accept missing Gitea CI when
origin/main matches HEAD, and compare two clean runtime rebuilds for REL-03.
Co-authored-by: Cursor <cursoragent@cursor.com>
Publication routes and share shells were missing the Rybbit tracker, and
bootstrap now reuses the stored MindSpace analytics secret when Rybbit env
secret is absent.
Co-authored-by: Cursor <cursoragent@cursor.com>