Replace all references to the previous Portal host 180.159.29.143 with
114.85.107.50 across release scripts, safety gates, runbooks, and docs.
Also add scripts/push-wechat-news-morning-draft-now.mjs for direct draft
push without waiting on the worker poll interval.
Co-authored-by: Cursor <cursoragent@cursor.com>
Trying to push a WeChat draft locally surfaced two problems.
isNewsMorningContentDegraded matched cards with `class="card(?:\s|")`, which
never matches news002's `class="lead-card"`. Headline cards were therefore
invisible to the check, so a healthy news002 page could be flagged as degraded
and regenerated. Count cards through the shared extractor instead, which
handles card, lead-card and highlight-box alike.
Add scripts/dryrun-news-morning-draft.mjs to run a page through the dedup gate,
degradation check, inline conversion and footer layout without calling the
WeChat API, since local IPs are not in the official account whitelist
(errcode 40164) and a real push would write into the production draft box.
Co-authored-by: Cursor <cursoragent@cursor.com>
Freeze the 2026-09-18 layout as news001 and add news002 alongside it.
Analysis of the 0918 production page found 49 news cards covering only ~20
distinct events (4x "王毅同鲁比奥通电话", 5x "东博会南宁开幕"), citing just 7
URLs that are all section landing pages rather than article permalinks, with
zero images. The root cause is structural: 23 fixed sections with fixed card
quotas force padding when the day yields fewer events.
news002 changes the contract so events decide sections, not the reverse:
core sections always render, flex sections are dropped entirely when they have
no unused event, total story cards are capped at 28, and every card carries a
data-event-key fingerprint.
Add wechat-news-morning-dedup.mjs as a post-generation gate, since the prompt
level "no duplicates" rule is unverifiable. It dedupes by event key, then by
article permalink (deliberately ignoring section landing pages, which would
otherwise delete most of the page), then by CJK bigram title similarity, since
the existing whitespace-tokenised matcher does not work on Chinese titles.
Carry per-item images through normalizeSearchResult into the prefetch brief so
cards can render real article thumbnails with a placeholder fallback.
Teach the WeChat inline converter both DOM variants (lead-card, masthead meta,
lede). Per-card images in the WeChat draft body remain a known gap.
Template selection is config/env driven and still defaults to news001.
Co-authored-by: Cursor <cursoragent@cursor.com>
Close the chat-session dead zone without flipping production flags: record 0.72 fallbacks, stop C-2 from treating「先聊聊」as execute, and promote「不对你去执行」after a completed direct turn on both h5direct and date sessions.
Co-authored-by: Cursor <cursoragent@cursor.com>
Default open WeChat draft comments, add SEO/visual template rules with h2 sections and mindspace-geo, and compress inline styles to pack more cards within the 20k HTML budget.
Co-authored-by: Cursor <cursoragent@cursor.com>
Remove the trending/hot search lane and section, forbid stats summary in page spec, and stop injecting card/section counts into WeChat inline articles.
Co-authored-by: Cursor <cursoragent@cursor.com>
Expand SearXNG prefetch and template with four English-friendly sections so daily news can surface global headlines without copying stale archives.
Co-authored-by: Cursor <cursoragent@cursor.com>
Treat deferred/skipped customer-service sends as failures so reminder worker
does not mark reminders sent, and add a 103 read-only health check script.
Co-authored-by: Cursor <cursoragent@cursor.com>
Background page list sync was calling syncAndDeliver over the remote adapter,
which could exceed the 60s timeout for heavy users and block Portal. Route list
sync through pageSyncService only via listSync while keeping full delivery on
Finish and agent-run paths.
Co-authored-by: Cursor <cursoragent@cursor.com>
Serve lightweight child/parent learning assistant pages at /learn without
MindSpace injection, with a rebuild script and Portal static route.
Co-authored-by: Cursor <cursoragent@cursor.com>
WeChat page delivery now triggers syncUserGeneratedPages so write_file HTML
gets page records; public share widget redirects unauthenticated owners to
WeChat OAuth instead of only showing an error.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add public-page WeChat draft button, publication standard conversion for poem/prose/generic pages, and quick push APIs. Default Studio release SSH targets to john@180.159.29.143 with 105 edge upstream via 10.10.0.2.
Co-authored-by: Cursor <cursoragent@cursor.com>
Update scripts, docs, nginx configs, and release-gate safety checks after the Studio server public IP changed from 58.38.22.103.
Co-authored-by: Cursor <cursoragent@cursor.com>
Non-greedy brace regex missed the queue object when worker status output contains nested JSON; scan balanced objects from the end instead.
Co-authored-by: Cursor <cursoragent@cursor.com>
Release drain was timing out because --status now prints a preamble JSON blob without queue; pick the object that contains queue instead of sed from the first brace.
Co-authored-by: Cursor <cursoragent@cursor.com>
Enable daily morning greeting on reply 1 (with custom time, modify, and cancel),
random greeting delivery, M发现 in subscribe welcome, and optional LLM parsing when
rules miss. Also fix WeChat MP draft/config error passthrough and add Tang E2E scripts.
Co-authored-by: Cursor <cursoragent@cursor.com>
Let users bind their own official account credentials in M 配置 and push MindSpace pages to the WeChat draft box during or after publish, reusing the existing draft conversion pipeline.
Co-authored-by: Cursor <cursoragent@cursor.com>
Install v1.49 on loopback :18015 beside stable native pool and toggle TKMIND_GOOSE_CANARY on production .env for user-scoped cutover.
Co-authored-by: Cursor <cursoragent@cursor.com>
Prioritize scheduled-task intent over page.generate for automation phrases, add run-wechat-gate-evidence.mjs for WX-01..13, and document 103 maintenance-window steps for Goose v1.49.
Co-authored-by: Cursor <cursoragent@cursor.com>
Fix build-goosed-v149-local.sh vendor/v8 paths after cd into the v149 worktree,
record phase3/memory drift evidence, and update phase3 closeout gate status.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add CONTEXT_RUNTIME_ACTIVE_ENV bundle and zero-LLM active probe covering
MCP compact, zvec, and headroom proxy readiness while keeping memory
injection on shadow.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add active-mode probe script and document mixed shadow/active promotion;
first active switch is MEMIND_MCP_COMPACT_MODE only.
Co-authored-by: Cursor <cursoragent@cursor.com>
Allow custom shadow portal probe messages and document admin-db steps to
enable recall_fusion_resolved without turning on active injection.
Co-authored-by: Cursor <cursoragent@cursor.com>
Pin @deepseek-ai/dsh@0.1.1-rc.2 probing in check-dsh-executor-local.mjs,
keep live headless smoke opt-in only, and record the 10k-token approval gate.
Co-authored-by: Cursor <cursoragent@cursor.com>
Document MIT dev-tool setup for Cursor code intelligence and add an
offline probe for CLI, Cursor MCP config, and Memind index readiness.
Co-authored-by: Cursor <cursoragent@cursor.com>
Provide context-runtime-profile simulation for gateway shadow events,
run-context-runtime-offline.mjs for zero-LLM verification, and a local
dev guide for user-led shadow self-tests later.
Co-authored-by: Cursor <cursoragent@cursor.com>
Block unattended DashScope smokes by default and provide a zero-token
merge verification entry via run-goosed-v149-phase3-offline.mjs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Prevent phase2/phase3/all reruns from burning DashScope tokens unless
GOOSE_V149_ALLOW_REAL_LLM=1 is explicitly set with human approval.
Co-authored-by: Cursor <cursoragent@cursor.com>
Introduce off/shadow/active compaction for large tkmind read/research and
excel report payloads with optional Redis-backed ctx_fetch handles, keeping
fail-open behavior when storage is unavailable.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use the default headroom health probe instead of the goosed fetch adapter
so active mode routes deepseek-no-think through the proxy, and add an E2E
script that verifies goosed pong via headroom with fail-open portal checks.
Co-authored-by: Cursor <cursoragent@cursor.com>
Wire DeepSeek Harness as an optional fourth code executor (default off)
and add a loopback observation script that compares prompt tokens through
headroom proxy with OPENAI_TARGET_API_URL pointed at the compat proxy.
Co-authored-by: Cursor <cursoragent@cursor.com>
Introduce RRF-based recall fusion for personal/episodic/temporal paths,
zvec-grep workspace shadow probing for code executors, and a local
headroom proxy starter aligned with the fusion plan defaults.
Co-authored-by: Cursor <cursoragent@cursor.com>
Portal resume smoke can exceed 300s when agent-run worker is busy; raise
phase3 default to 600s and refresh memory/sanitize baselines from smoke.
Co-authored-by: Cursor <cursoragent@cursor.com>
Expose /health and /api/health/observations behind MEMIND_HEALTH_ENABLED, redirect ordinary chat health intents without persisting, and run a dedicated WeChat menu flow with confirm-before-write semantics.
Co-authored-by: Cursor <cursoragent@cursor.com>