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>
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>
Record the merged chat-intent work as closed, and mark the leftover local news-morning branch as not reusable.
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>
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>
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>
Mark phase3 closeout gate 3 complete after two canary=all GOOSE_V149_PHASE3_OK runs and refresh baseline evidence from run3.
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 the ~/.local/bin vs /opt/homebrew/bin mismatch that breaks MCP
connection when install targets a path the global npm binary does not use.
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>
Record the merged Context Runtime + Goose v1.49 canary work as closed
so the branch cannot be reused as a development baseline.
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>