@@ -119,6 +119,13 @@ describe("extractContinuationFacts", () => {
119119 const report = verifyCompactionSummary ( "anything" , facts ) ;
120120 expect ( report . supported ) . toBe ( true ) ;
121121 } ) ;
122+
123+ test ( "uppercase HTTP URL in user text is lifted into exactNames" , ( ) => {
124+ const facts = extractContinuationFacts ( [
125+ textTurn ( "user" , "Call HTTP://API.COM next" ) ,
126+ ] ) ;
127+ expect ( facts . exactNames ) . toContain ( "HTTP://API.COM" ) ;
128+ } ) ;
122129} ) ;
123130
124131describe ( "verifyCompactionSummary" , ( ) => {
@@ -160,6 +167,28 @@ describe("verifyCompactionSummary", () => {
160167 }
161168 } ) ;
162169
170+ test ( "trailing period on a goal needle does not miss an unpunctuated summary" , ( ) => {
171+ const facts = extractContinuationFacts ( [ textTurn ( "user" , "Fix auth now." ) ] ) ;
172+ const report = verifyCompactionSummary ( "Fix auth now" , facts ) ;
173+ expect ( report . misses . some ( ( m ) => m . kind === "goal" ) ) . toBe ( false ) ;
174+ } ) ;
175+
176+ test ( "trailing period on a constraint needle does not miss an unpunctuated summary" , ( ) => {
177+ const facts = {
178+ goal : "Fix auth now" ,
179+ constraints : [ "Never use emojis." ] ,
180+ nextAction : "" ,
181+ verification : [ ] ,
182+ blockers : [ ] ,
183+ exactNames : [ ] ,
184+ } ;
185+ const report = verifyCompactionSummary (
186+ "Fix auth now. Never use emojis" ,
187+ facts ,
188+ ) ;
189+ expect ( report . misses . some ( ( m ) => m . kind === "constraint" ) ) . toBe ( false ) ;
190+ } ) ;
191+
163192 test ( "denying failure while errors were dropped is a contradiction" , ( ) => {
164193 const facts = extractContinuationFacts ( droppedTurns ( ) ) ;
165194 const report = verifyCompactionSummary (
@@ -337,6 +366,31 @@ describe("verifyCompactionSummary", () => {
337366 expect ( report . misses . some ( ( m ) => m . kind === "exactName" ) ) . toBe ( false ) ;
338367 } ) ;
339368
369+ test ( "http/client.ts is covered by basename client.ts" , ( ) => {
370+ for ( const filePath of [ "http/client.ts" , "HTTP/Client.ts" ] ) {
371+ const facts = extractContinuationFacts ( [
372+ textTurn ( "user" , "Fix auth now" ) ,
373+ {
374+ role : "assistant" ,
375+ content : [
376+ {
377+ type : "tool_call" ,
378+ id : "c1" ,
379+ name : "read_file" ,
380+ arguments : { path : filePath } ,
381+ } ,
382+ ] ,
383+ timestamp : 2 ,
384+ } ,
385+ ] ) ;
386+ const report = verifyCompactionSummary (
387+ "Fix auth now. Read client.ts next." ,
388+ facts ,
389+ ) ;
390+ expect ( report . misses . some ( ( m ) => m . kind === "exactName" ) ) . toBe ( false ) ;
391+ }
392+ } ) ;
393+
340394 test ( "uppercase HTTP URL scores hostname case-insensitively" , ( ) => {
341395 const facts = extractContinuationFacts ( [
342396 textTurn ( "user" , "Fix auth now" ) ,
0 commit comments