import assert from "node:assert/strict"; import { spawnSync } from "node:child_process"; import { fileURLToPath } from "node:url"; import test from "node:test"; // Fictional full-window route control, not engine calibration or a real database. test("unique product targets finish the production opening route before model selection, billing or collect focus", () => { const script = String.raw` import assert from 'node:assert/strict'; import { mock } from 'node:test'; import { pathToFileURL } from 'node:url'; import { CASE_ID, SESSION_ID, USER_ID, TURN_ID, dossierFixture, computeFixture } from './tests/rectification-v9-test-support.ts'; import { buildSegmentSummary } from './src/lib/rectification-agentic/core/segment-summary.ts'; import { candidateRangeFingerprint } from './src/lib/rectification-agentic/v9/tool-service.ts'; const range = { start_time: '09:00', end_time: '09:20' }; const minutes = Array.from({length:21},(_,offset)=>({offset,date:'2000-06-14',time:'09:'+String(offset).padStart(2,'0'),signs:{D1:1,D9:2,D10:3}})); const summary = buildSegmentSummary({minutes,candidates:[],targets:['D1','D9','D10'],windowMinutes:21,scanComplete:true}); const compute = computeFixture({ baselineBirthSnapshot: { birth_date:'2000-06-14',reported_birth_time:'09:10',latitude:40,longitude:-74,timezone_offset:-4 } }); const checks = {contract:'segment-opening-v1',domain:'general',range_fingerprint:candidateRangeFingerprint(range,compute.baseline_profile_fingerprint),status:'complete',summary}; const calls=[]; const dossier=dossierFixture({candidateRange:range,evidence:[],evidenceCount:0,turns:[],turnCount:0,latestResult:null}); dossier.case.status='draft'; dossier.case.rectification_domain='general'; dossier.case.checks=checks; const accounting={rpc:async(fn,args)=>{ calls.push(fn); if(fn==='get_agentic_rectification_case')return {error:null,data:dossier.case}; if(fn==='get_agentic_rectification_case_dossier')return {error:null,data:dossier}; if(fn==='get_agentic_rectification_case_compute')return {error:null,data:{...compute,candidate_range:range}}; if(fn==='finalize_agentic_rectification_segment_consistency_v1') { assert.equal(args.p_range_fingerprint,checks.range_fingerprint); return {error:null,data:{turn_id:TURN_ID}}; } throw new Error('unexpected RPC '+fn); }}; mock.module('server-only',{namedExports:{}}); mock.module('@/lib/supabase/server',{namedExports:{createServerSupabaseClient:async()=>({ auth:{getUser:async()=>({data:{user:{id:USER_ID}},error:null})}, from:()=>({select(){return this},eq(){return this},maybeSingle:async()=>({data:{id:SESSION_ID,session_type:'birth_time_rectification',agentic_rectification_case_id:CASE_ID,model_id:'synthetic',model_config_version:1},error:null})}) })}}); mock.module('@/lib/supabase/admin',{namedExports:{createAdminSupabaseClient:()=>accounting}}); mock.module('@/lib/product-access',{namedExports:{isProductEnabled:async()=>true}}); mock.module('@/lib/feature-flags',{namedExports:{loadRuntimeFeatureFlags:async()=>new Map([['rectification_runtime_version',{enabled:true}]])}}); mock.module('@/lib/model-catalog',{namedExports:{resolveSessionLanguageModel:async()=>{throw new Error('model selection must not run')}}}); mock.module('@/mastra/agentic-rectification',{namedExports:{getRectificationV9Agent:async()=>{throw new Error('agent must not run')}}}); const {POST}=await import(pathToFileURL(process.cwd()+'/src/app/api/rectification/agent/route.ts').href); const response=await POST(new Request('https://example.invalid/api/rectification/agent',{method:'POST',headers:{'content-type':'application/json'}, body:JSON.stringify({caseId:CASE_ID,sessionId:SESSION_ID,requestId:TURN_ID,action:'opening'})})); const body=await response.text(); assert.equal(response.status,200,body); const events=body.trim().split('\n').map(line=>JSON.parse(line)); assert.match(events[0].text,/盘型一致,不用校正/); assert.deepEqual(events.at(-1),{type:'run.completed',turnId:TURN_ID}); assert.equal(calls.filter(fn=>fn==='finalize_agentic_rectification_segment_consistency_v1').length,1); assert.ok(!calls.some(fn=>/focus|billing|reserve|attempt|append/.test(fn))); `; const result = spawnSync(process.execPath, ["--experimental-test-module-mocks", "--import", "tsx", "--input-type=module", "--eval", script], { cwd: fileURLToPath(new URL("../", import.meta.url)), encoding: "utf8", timeout: 60_000, }); assert.equal(result.status, 0, result.stderr + result.stdout); });