@@ -414,6 +414,98 @@ describe("dreaming view", () => {
414414 setDreamSubTab ( "scene" ) ;
415415 } ) ;
416416
417+ it ( "keeps non-report memory palace card clicks on details" , ( ) => {
418+ setDreamSubTab ( "diary" ) ;
419+ setDreamDiarySubTab ( "palace" ) ;
420+ const container = document . createElement ( "div" ) ;
421+ let props : DreamingProps ;
422+ const rerender = ( ) => render ( renderDreaming ( props ) , container ) ;
423+ props = buildProps ( { onRequestUpdate : rerender } ) ;
424+ rerender ( ) ;
425+
426+ const card = expectElement ( container , "[data-palace-page='syntheses/travel-system.md']" ) ;
427+ card . dispatchEvent ( new MouseEvent ( "click" , { bubbles : true } ) ) ;
428+
429+ expect ( textItems ( container , ".dreams-diary__insight-list strong" ) ) . toContain ( "Page details" ) ;
430+ setDreamDiarySubTab ( "dreams" ) ;
431+ setDreamSubTab ( "scene" ) ;
432+ } ) ;
433+
434+ it ( "opens report memory palace cards on primary click" , async ( ) => {
435+ setDreamSubTab ( "diary" ) ;
436+ setDreamDiarySubTab ( "palace" ) ;
437+ const onOpenWikiPage = vi . fn ( ) . mockResolvedValue ( {
438+ title : "Weekly stock report" ,
439+ path : "reports/weekly-stock.md" ,
440+ content : "# Weekly stock report\n\nSummary content." ,
441+ totalLines : 2 ,
442+ truncated : false ,
443+ } ) ;
444+ const container = document . createElement ( "div" ) ;
445+ let props : DreamingProps ;
446+ const rerender = ( ) => render ( renderDreaming ( props ) , container ) ;
447+ props = buildProps ( {
448+ onOpenWikiPage,
449+ onRequestUpdate : rerender ,
450+ wikiMemoryPalace : {
451+ totalItems : 1 ,
452+ totalClaims : 0 ,
453+ totalQuestions : 0 ,
454+ totalContradictions : 0 ,
455+ clusters : [
456+ {
457+ key : "report" ,
458+ label : "Reports" ,
459+ itemCount : 1 ,
460+ claimCount : 0 ,
461+ questionCount : 0 ,
462+ contradictionCount : 0 ,
463+ items : [
464+ {
465+ pagePath : "reports/weekly-stock.md" ,
466+ title : "Weekly stock report" ,
467+ kind : "report" ,
468+ claimCount : 0 ,
469+ questionCount : 0 ,
470+ contradictionCount : 0 ,
471+ claims : [ ] ,
472+ questions : [ ] ,
473+ contradictions : [ ] ,
474+ snippet : "Weekly stock summary." ,
475+ updatedAt : "2026-04-12T10:00:00.000Z" ,
476+ } ,
477+ ] ,
478+ } ,
479+ ] ,
480+ } ,
481+ } ) ;
482+ rerender ( ) ;
483+
484+ const card = expectElement ( container , "[data-palace-page='reports/weekly-stock.md']" ) ;
485+ card . dispatchEvent ( new MouseEvent ( "click" , { bubbles : true } ) ) ;
486+ await Promise . resolve ( ) ;
487+ await Promise . resolve ( ) ;
488+
489+ expect ( onOpenWikiPage ) . toHaveBeenCalledWith ( "reports/weekly-stock.md" ) ;
490+ expect ( textItems ( container , ".dreams-diary__insight-list strong" ) ) . not . toContain (
491+ "Page details" ,
492+ ) ;
493+ expect ( compactText ( container . querySelector ( ".dreams-diary__preview-title" ) ) ) . toBe (
494+ "Weekly stock report" ,
495+ ) ;
496+ expect ( compactText ( container . querySelector ( ".dreams-diary__preview-body" ) ) ) . toBe (
497+ "# Weekly stock report Summary content." ,
498+ ) ;
499+
500+ const closePreviewButton = container . querySelector < HTMLButtonElement > (
501+ ".dreams-diary__preview-header .btn" ,
502+ ) ;
503+ expect ( closePreviewButton ) . toBeInstanceOf ( HTMLButtonElement ) ;
504+ closePreviewButton ! . dispatchEvent ( new MouseEvent ( "click" , { bubbles : true } ) ) ;
505+ setDreamDiarySubTab ( "dreams" ) ;
506+ setDreamSubTab ( "scene" ) ;
507+ } ) ;
508+
417509 it ( "shows a memory-wiki enablement CTA when wiki subtabs are selected but the plugin is disabled" , ( ) => {
418510 setDreamSubTab ( "diary" ) ;
419511 setDreamDiarySubTab ( "palace" ) ;
0 commit comments