@@ -132,10 +132,21 @@ reuploadBtn.addEventListener("click", () => {
132132
133133probeBtn . addEventListener ( "click" , async ( ) => {
134134 probeBtn . disabled = true ;
135+ // The declared URLs MUST match the resource's `_meta.ui.csp.connectDomains`
136+ // (see src/index.ts host-probe resource registration). Keeping these in
137+ // lockstep is what lets `assert-host-probe-csp` distinguish:
138+ // - declared+blocked → host over-restricted (or deny override active)
139+ // - canary+allowed → host LOOSENED declared CSP (SEP-1865 violation)
135140 const cspProbes = await runCspProbes ( [
136- "https://api.openai.com/v1/models" ,
137- "https://api.anthropic.com/v1/messages" ,
138- "https://cdn.jsdelivr.net/npm/lodash@4.17.21/package.json" ,
141+ { url : "https://api.openai.com/v1/models" , expectation : "declared" } ,
142+ { url : "https://api.anthropic.com/v1/messages" , expectation : "declared" } ,
143+ {
144+ url : "https://cdn.jsdelivr.net/npm/lodash@4.17.21/package.json" ,
145+ expectation : "declared" ,
146+ } ,
147+ // Canary: not in declared connectDomains. If this succeeds, the host
148+ // failed to enforce CSP — strict regression.
149+ { url : "https://canary.invalid.example/" , expectation : "canary" } ,
139150 ] ) ;
140151 if ( snapshot ) {
141152 snapshot . runtime . cspProbes = cspProbes ;
0 commit comments