From 84a3887a348b0f8bb4ba5de121ce103baa3ec79d Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Sat, 19 Sep 2026 20:45:05 -0700 Subject: [PATCH] Prioritize meaningful alerts and enable accepted stop presentation in normal replay --- roadscore/prototype/app.py | 14 +++++++++++--- roadscore/prototype/presentation_policy.py | 4 ++-- roadscore/prototype/test_presentation_policy.py | 4 ++-- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/roadscore/prototype/app.py b/roadscore/prototype/app.py index 90a7e39ecb..a97ce767c7 100644 --- a/roadscore/prototype/app.py +++ b/roadscore/prototype/app.py @@ -131,7 +131,7 @@ if shaker_enabled or apex_enabled or alert_enabled: shaker_grid,shaker_analysis=assess_grid(source,rate,profile_tempo_prior(profile_manifest)) rhythm_timeline=RhythmTimeline(rate,profile_tempo_prior(profile_manifest));rhythm_timeline.add(source,0) shaker_grid=rhythm_timeline.at(0) - shaker=SignalShaker(shaker_grid,rate,enabled=shaker_enabled) + shaker=SignalShaker(shaker_grid,rate,enabled=shaker_enabled,peak=config.get('signal_shaker',{}).get('peak',.012)) apex=CoreApex(shaker_grid,rate,enabled=apex_enabled,dip_db=config.get('core_apex',{}).get('dip_db',-1.)) alert_accent=AlertAccent(shaker_grid,rate,enabled=alert_enabled) (run/'shaker_grid.json').write_text(json.dumps({'grid':shaker.snapshot(),'analysis':shaker_analysis},indent=2)) @@ -210,12 +210,20 @@ def callback(out,n,ti,status): if shaker is not None:shaker.set_grid(audible_grid,frames-n) if apex is not None:apex.grid=audible_grid if alert_accent is not None:alert_accent.grid=audible_grid - if shaker is not None:rendered=shaker.process(rendered,frames-n,signal_on,signal_fresh) - if apex is not None:rendered=apex.process(rendered,frames-n,event_state) + alert_priority=False if alert_accent is not None: alert_key,meaningful=alert_state competing=bool((shaker is not None and shaker.active) or (apex is not None and apex.rendered_active) or (presentation is not None and abs(presentation.mix-float(active))>.01)) rendered=alert_accent.process(rendered,frames-n,alert_key,meaningful,fresh,competing) + alert_priority=alert_accent.priority_active + if shaker is not None: + shaken=shaker.process(rendered,frames-n,signal_on,signal_fresh) + if alert_priority:shaker.rendered_active=False;shaker.rendered_peak=0. + else:rendered=shaken + if apex is not None: + accented=apex.process(rendered,frames-n,event_state) + if alert_priority:apex.rendered_active=False + else:rendered=accented if motion is not None: _,motion_fresh=engagement_active(motion_state[1],True,motion_state[2],motion_state[4],motion_state[3],callback_wall) rendered=motion.process(rendered,speed=motion_state[0],source_fresh=motion_fresh) diff --git a/roadscore/prototype/presentation_policy.py b/roadscore/prototype/presentation_policy.py index f9c920845d..edf496857b 100644 --- a/roadscore/prototype/presentation_policy.py +++ b/roadscore/prototype/presentation_policy.py @@ -12,7 +12,7 @@ CONSERVATIVE = { CONSERVATIVE_V2 = {**copy.deepcopy(CONSERVATIVE), 'presentation_policy_version':'conservative-v2', 'alert_accent':{'enabled':True}, 'core_apex':{'enabled':True,'dip_db':-3.}} -CONSERVATIVE_V3 = {**copy.deepcopy(CONSERVATIVE_V2), 'presentation_policy_version':'conservative-v3', 'stopped_motion':{'enabled':True}} +CONSERVATIVE_V3 = {**copy.deepcopy(CONSERVATIVE_V2), 'presentation_policy_version':'conservative-v3', 'stopped_motion':{'enabled':True}, 'signal_shaker':{'enabled':True,'peak':.018}} def select_launch(composer, profile, replay=False, judging=False, render_mode=None, policy=None): if policy is not None and policy not in POLICIES:raise ValueError('Unknown presentation policy') @@ -29,7 +29,7 @@ def select_launch(composer, profile, replay=False, judging=False, render_mode=No return {'render_mode':'current','policy':'frozen'} normal_prism=composer=='ace' and profile=='prism' mode=render_mode or ('gold-core' if normal_prism else 'current') - chosen=policy or ('conservative-v2' if normal_prism and mode=='gold-core' else 'off') + chosen=policy or ('conservative-v3' if normal_prism and mode=='gold-core' else 'off') if chosen in ('conservative-v1','conservative-v2','conservative-v3') and (composer!='ace' or mode!='gold-core'): raise ValueError('Conservative presentation requires ACE gold-core rendering') return {'render_mode':mode,'policy':chosen} diff --git a/roadscore/prototype/test_presentation_policy.py b/roadscore/prototype/test_presentation_policy.py index 16cf7c2080..51f27b5777 100644 --- a/roadscore/prototype/test_presentation_policy.py +++ b/roadscore/prototype/test_presentation_policy.py @@ -7,7 +7,7 @@ class PolicyTests(unittest.TestCase): fragment=Path(__file__).resolve().parents[1]/'tools/presentation_conservative_v1.json' self.assertEqual(json.loads(fragment.read_text()),CONSERVATIVE) def test_normal_prism_gets_integrated_policy_without_extra_flags(self): - self.assertEqual(select_launch('ace','prism'),{'render_mode':'gold-core','policy':'conservative-v2'}) + self.assertEqual(select_launch('ace','prism'),{'render_mode':'gold-core','policy':'conservative-v3'}) def test_explicit_optouts(self): self.assertEqual(select_launch('ace','prism',policy='off'),{'render_mode':'gold-core','policy':'off'}) self.assertEqual(select_launch('ace','prism',render_mode='current'),{'render_mode':'current','policy':'off'}) @@ -35,7 +35,7 @@ class PolicyTests(unittest.TestCase): self.assertTrue(latest['alert_accent']['enabled']) self.assertEqual(latest['core_apex']['dip_db'],-3.) def test_stopped_motion_candidate_preserves_default_and_optout(self): - self.assertEqual(select_launch('ace','prism')['policy'],'conservative-v2') + self.assertEqual(select_launch('ace','prism')['policy'],'conservative-v3') candidate=effective_config({}, {'ROADSCORE_PRESENTATION_POLICY':'conservative-v3'}) self.assertTrue(candidate['stopped_motion']['enabled']) self.assertTrue(candidate['engagement_presentation']['enabled'])