@@ -112,6 +112,35 @@ public function testResolveAppliesRequestOverrideWhenAllowed(): void {
112112 $ this ->assertNull ($ resolved ->getBlockedBy ());
113113 }
114114
115+ public function testResolveIgnoresCircleLayersInCurrentPhase (): void {
116+ $ source = new InMemoryPolicySource ();
117+ $ source ->systemLayer = (new PolicyLayer ())
118+ ->setScope ('system ' )
119+ ->setValue ('none ' )
120+ ->setAllowChildOverride (true )
121+ ->setVisibleToChild (true );
122+ $ source ->groupLayers = [
123+ (new PolicyLayer ())
124+ ->setScope ('group ' )
125+ ->setValue ('parallel ' )
126+ ->setAllowChildOverride (true )
127+ ->setVisibleToChild (true ),
128+ ];
129+ $ source ->circleLayers = [
130+ (new PolicyLayer ())
131+ ->setScope ('circle ' )
132+ ->setValue ('ordered_numeric ' )
133+ ->setAllowChildOverride (true )
134+ ->setVisibleToChild (true ),
135+ ];
136+
137+ $ resolver = new DefaultPolicyResolver ($ source );
138+ $ resolved = $ resolver ->resolve ($ this ->getDefinition (), PolicyContext::fromUserId ('john ' ));
139+
140+ $ this ->assertSame ('parallel ' , $ resolved ->getEffectiveValue ());
141+ $ this ->assertFalse ($ source ->circlePoliciesLoaded );
142+ }
143+
115144 private function getDefinition (): PolicySpec {
116145 return new PolicySpec (
117146 key: 'signature_flow ' ,
@@ -125,9 +154,12 @@ final class InMemoryPolicySource implements IPolicySource {
125154 public ?PolicyLayer $ systemLayer = null ;
126155 /** @var list<PolicyLayer> */
127156 public array $ groupLayers = [];
157+ /** @var list<PolicyLayer> */
158+ public array $ circleLayers = [];
128159 public ?PolicyLayer $ userPreference = null ;
129160 public ?PolicyLayer $ requestOverride = null ;
130161 public bool $ userPreferenceCleared = false ;
162+ public bool $ circlePoliciesLoaded = false ;
131163
132164 public function loadSystemPolicy (string $ policyKey ): ?PolicyLayer {
133165 return $ this ->systemLayer ;
@@ -142,7 +174,8 @@ public function loadGroupPolicyConfig(string $policyKey, string $groupId): ?Poli
142174 }
143175
144176 public function loadCirclePolicies (string $ policyKey , PolicyContext $ context ): array {
145- return [];
177+ $ this ->circlePoliciesLoaded = true ;
178+ return $ this ->circleLayers ;
146179 }
147180
148181 public function loadUserPreference (string $ policyKey , PolicyContext $ context ): ?PolicyLayer {
0 commit comments