@@ -43,6 +43,23 @@ const progress = (page: Page) =>
4343 ) ;
4444
4545test . describe ( 'homepage stage' , ( ) => {
46+ test ( 'gradual playback replaces the render introduction with an editable surface' , async ( { page } ) => {
47+ test . skip ( process . env [ 'STAGE_LIVE_FRAME' ] !== 'true' , 'requires the matching stage replay deployment' ) ;
48+ await page . setViewportSize ( { width : 1440 , height : 900 } ) ;
49+ await page . goto ( '/' ) ;
50+ const act = page . locator ( '[data-stage-act]' ) ;
51+ await expect ( act ) . toHaveAttribute ( 'data-state' , 'ready' ) ;
52+ const frame = page . frameLocator ( '.stage-frame-iframe' ) ;
53+ for ( const p of [ 0.87 , 0.89 , 0.91 , 0.93 , 0.95 , 1 ] ) {
54+ await scrollAct ( page , p ) ;
55+ await expect ( act ) . toHaveAttribute ( 'data-interactive' , '' , { timeout : 30_000 } ) ;
56+ }
57+ const notes = frame . getByRole ( 'textbox' , { name : 'Follow-up notes' } ) ;
58+ await notes . fill ( 'Verify the next retention review.' ) ;
59+ await expect ( notes ) . toHaveValue ( 'Verify the next retention review.' ) ;
60+ await expect ( frame . locator ( 'a2ui-surface' ) ) . toHaveCount ( 1 ) ;
61+ } ) ;
62+
4663 test ( 'settled replay allows State inspection and form edits; page motion resumes playback' , async ( { page } ) => {
4764 test . skip ( process . env [ 'STAGE_LIVE_FRAME' ] !== 'true' , 'requires the matching stage replay deployment' ) ;
4865 await page . setViewportSize ( { width : 1440 , height : 900 } ) ;
0 commit comments