@@ -110,6 +110,8 @@ const BASE_HOLDINGS: Holdings = {
110110 [ BASE ] : {
111111 dashboard : [ { name : 'crm_board' , label : 'Board' } ] ,
112112 object : [ { name : 'crm_account' } ] ,
113+ flow : [ { name : 'crm_followup' , label : 'Follow up' } ] ,
114+ action : [ { name : 'crm_call' , label : 'Call' } ] ,
113115 } ,
114116} ;
115117
@@ -179,6 +181,23 @@ describe('install-local 2d — the override write gate at the managed install (A
179181 expect ( res . payload . data ) . not . toHaveProperty ( 'overrideCollisions' ) ;
180182 } ) ;
181183
184+ it ( '[#28412] the paired .custom installs its declared FLOW override; a declared action override still waits' , async ( ) => {
185+ // ADR-0146 D9: flow's conditions are delivered, so the gate admits it.
186+ const flow = await install ( {
187+ id : PAIR , version : '1.0.0' , dependencies : deps ( BASE ) ,
188+ flows : [ { name : 'crm_followup' , label : 'Ours' , overrides : { package : BASE , basedOn : '1.0.0' } } ] ,
189+ } ) ;
190+ expect ( flow . res . status , JSON . stringify ( flow . res . payload ) ) . toBe ( 200 ) ;
191+ expect ( flow . registered ) . toEqual ( [ PAIR ] ) ;
192+
193+ const action = await install ( {
194+ id : PAIR , version : '1.0.0' , dependencies : deps ( BASE ) ,
195+ actions : [ { name : 'crm_call' , label : 'Ours' , overrides : { package : BASE , basedOn : '1.0.0' } } ] ,
196+ } ) ;
197+ expect ( action . res . status ) . toBe ( 403 ) ;
198+ expect ( refusedOf ( action . res ) ) . toEqual ( [ [ 'action' , 'crm_call' , 'declared_type_not_yet_available' ] ] ) ;
199+ } ) ;
200+
182201 it ( 'CONTROL: a dependent shipping its own names installs, and its answer carries no collision key' , async ( ) => {
183202 const { res, registered } = await install ( {
184203 id : PARTNER , version : '1.0.0' , dependencies : deps ( BASE ) , dashboards : [ { name : 'partner_board' } ] ,
0 commit comments