From bc5e475f6fb461c0af23f4ae6a83bd8c2a6eb484 Mon Sep 17 00:00:00 2001 From: "prompt.ac/@jeffrey" Date: Thu, 17 Sep 2026 16:14:01 -0700 Subject: [PATCH] Dismiss preparation banners while preserving active recordings --- slab/captutor/bin/nag-fighter.mjs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/slab/captutor/bin/nag-fighter.mjs b/slab/captutor/bin/nag-fighter.mjs index a02ffb840d..bab9324b2b 100644 --- a/slab/captutor/bin/nag-fighter.mjs +++ b/slab/captutor/bin/nag-fighter.mjs @@ -1,12 +1,14 @@ #!/usr/bin/env node // Keep known Chrome nags off the idle filming desk; Stage owns its active take. -import {existsSync,mkdirSync,writeFileSync,renameSync} from 'node:fs'; +import {existsSync,readFileSync,mkdirSync,writeFileSync,renameSync} from 'node:fs'; import {homedir} from 'node:os'; import {join} from 'node:path'; import {setTimeout as sleep} from 'node:timers/promises'; import {createModalPolice,approvedDebuggingPolicy} from '../lib/modal-police.mjs'; const directory=join(homedir(),'.local/share/captutor/nag-fighter'); const stageState=join(homedir(),'.local/share/captutor/stage-mode.json'); +const reelState=join(homedir(),'.local/share/slab/state/reel.state'); +const recording=()=>{try{return JSON.parse(readFileSync(reelState,'utf8')).recording===true;}catch{return existsSync(stageState);}}; const statePath=join(directory,'status.json'); mkdirSync(directory,{recursive:true}); const status=data=>{const tmp=statePath+'.tmp';writeFileSync(tmp,JSON.stringify({pid:process.pid,at:new Date().toISOString(),...data},null,2));renameSync(tmp,statePath);}; @@ -16,10 +18,10 @@ const controller=new AbortController(); for(const signal of ['SIGTERM','SIGINT'])process.on(signal,()=>controller.abort()); do { try { - if(existsSync(stageState))status({phase:'stage-owned'}); + if(recording())status({phase:'stage-owned'}); else { // Recheck ownership immediately before any action: a take can begin during AX scan. - const result=await police.check(allowRemoteDebugging?'connecting':'preparing',{mayHandle:()=>!existsSync(stageState)&&!controller.signal.aborted}); + const result=await police.check(allowRemoteDebugging?'connecting':'preparing',{mayHandle:()=>!recording()&&!controller.signal.aborted}); status({phase:'watching',...result}); } } catch(error) {status({phase:'blocked',error:error.stderr?.trim()||error.message});} -- 2.51.2