@@ -2166,11 +2166,13 @@ function run() {
21662166 assert ( ! aggregateInvocations . includes ( 'aggregate-dependent' ) )
21672167
21682168 const packageJson = require ( '../package.json' )
2169- assert . strictEqual ( packageJson . scripts . test , 'node scripts/run-validation.js --route changed' )
2169+ assert . strictEqual ( packageJson . scripts . test , 'node scripts/run-validation.js --route changed --actor human-cli --plan ' )
21702170 assert . strictEqual ( packageJson . scripts [ 'test:fast' ] , 'node scripts/run-validation.js --route fast' )
21712171 assert . strictEqual ( packageJson . scripts [ 'test:full' ] , 'node scripts/run-validation.js --route full' )
21722172 assert . strictEqual ( packageJson . scripts [ 'test:delivery' ] , 'node scripts/run-validation.js --route delivery' )
21732173 assert . strictEqual ( packageJson . scripts [ 'test:boundary' ] , 'node scripts/run-validation.js --route boundary' )
2174+ assert . strictEqual ( packageJson . scripts [ 'test:changed' ] , 'node scripts/run-validation.js --route changed --actor human-cli --plan' )
2175+ assert . strictEqual ( packageJson . scripts [ 'test:changed:ai' ] , 'node scripts/run-validation.js --route changed --actor ai-hook' )
21742176 assert . strictEqual ( packageJson . scripts [ 'test:actual-candidate-evidence' ] , 'node scripts/test-actual-candidate-evidence.js' )
21752177 assert . strictEqual ( packageJson . scripts [ 'test:dangerous-command-context' ] , 'node scripts/test-dangerous-command-context.js' )
21762178 assert . strictEqual ( packageJson . scripts [ 'test:session-route-consumers' ] , 'node scripts/test-session-route-consumers.js' )
@@ -2243,6 +2245,33 @@ function run() {
22432245 assert . strictEqual ( planEnvelope . data . plan . javascriptCommandCount , 0 )
22442246 assert . strictEqual ( planEnvelope . data . plan . fullFallback , null )
22452247
2248+ const aiPlanOnlyEnv = {
2249+ ...cliHumanEnv ,
2250+ CODEX_THREAD_ID : 'fixture-ai-thread'
2251+ }
2252+ const aiHostHumanPlan = spawnSync ( process . execPath , [
2253+ 'scripts/run-validation.js' ,
2254+ '--route' , 'changed' ,
2255+ '--changed' , 'README.md' ,
2256+ '--actor' , 'human-cli' ,
2257+ '--plan' ,
2258+ '--json'
2259+ ] , { cwd : ROOT , encoding : 'utf8' , windowsHide : true , env : aiPlanOnlyEnv } )
2260+ assert . strictEqual ( aiHostHumanPlan . status , 0 , aiHostHumanPlan . stderr )
2261+ const aiHostHumanPlanEnvelope = JSON . parse ( aiHostHumanPlan . stdout )
2262+ assert . strictEqual ( aiHostHumanPlanEnvelope . ok , true )
2263+ assert . strictEqual ( aiHostHumanPlanEnvelope . data . plan . routeResolved , 'changed' )
2264+
2265+ const aiHostHumanExecute = spawnSync ( process . execPath , [
2266+ 'scripts/run-validation.js' ,
2267+ '--route' , 'changed' ,
2268+ '--actor' , 'human-cli' ,
2269+ '--json'
2270+ ] , { cwd : ROOT , encoding : 'utf8' , windowsHide : true , env : aiPlanOnlyEnv } )
2271+ assert . strictEqual ( aiHostHumanExecute . status , 2 )
2272+ const aiHostHumanExecuteEnvelope = JSON . parse ( aiHostHumanExecute . stdout )
2273+ assert . strictEqual ( aiHostHumanExecuteEnvelope . error . code , 'VALIDATION_ACTOR_SPOOF_REJECTED' )
2274+
22462275 const highHookPlan = spawnSync ( process . execPath , [
22472276 'scripts/run-validation.js' ,
22482277 '--route' , 'changed' ,
0 commit comments