feat(goose): add local v1.49 canary routing, smoke gates, and migration docs

Wire Portal and TKMind proxy to loopback Goose v1.49 via canary env blocks,
with verification scripts, Phase 2/3 evidence baselines, and rollback runbooks
so local upgrade stays isolated from stable 1.41 and production.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
john
2026-09-08 21:10:20 +08:00
parent d2d463b1db
commit 716ef407fe
68 changed files with 48162 additions and 2 deletions
+11
View File
@@ -117,9 +117,11 @@ import {
describeMemindRuntimeProfile,
loadMemindEnvFiles,
} from './scripts/memind-runtime-profile.mjs';
import { resolveGooseApiTargetsFromEnv, applyGooseV149CanaryBlockEnv } from './scripts/goose-v149-canary.mjs';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
loadMemindEnvFiles(__dirname);
applyGooseV149CanaryBlockEnv(process.env, __dirname);
const H5_ROOT = resolvePortalH5Root(__dirname, process.env);
if (!fs.existsSync(H5_ROOT) || !fs.statSync(H5_ROOT).isDirectory()) {
throw new Error(
@@ -130,11 +132,20 @@ if (H5_ROOT !== __dirname) {
console.log(`[Portal] Code root: ${__dirname}`);
console.log(`[Portal] Persistent H5 root: ${H5_ROOT}`);
loadMemindEnvFiles(H5_ROOT);
applyGooseV149CanaryBlockEnv(process.env, H5_ROOT);
}
applyMemindRuntimeProfile({ rootDir: H5_ROOT });
function parseApiTargets() {
const gooseCanary = resolveGooseApiTargetsFromEnv(process.env);
if (gooseCanary?.targets?.length) {
console.log(
`[Portal] Goose v1.49 canary mode=${gooseCanary.mode} primary=${gooseCanary.primary}`,
);
return [...gooseCanary.targets];
}
const csvTargets = (process.env.TKMIND_API_TARGETS ?? '')
.split(',')
.map((value) => value.trim())