66 runBarnacleAutoResponse ,
77} from "../../scripts/github/barnacle-auto-response.mjs" ;
88import {
9+ PROOF_OVERRIDE_LABEL ,
910 PROOF_SUFFICIENT_LABEL ,
1011 PROOF_SUPPLIED_LABEL ,
1112} from "../../scripts/github/real-behavior-proof-policy.mjs" ;
@@ -716,7 +717,7 @@ describe("barnacle-auto-response", () => {
716717 expect ( calls . update ) . toStrictEqual ( [ ] ) ;
717718 } ) ;
718719
719- it ( "removes stale proof labels when override is present" , async ( ) => {
720+ it ( "removes stale structural proof labels but preserves sufficient proof when override is present" , async ( ) => {
720721 const { calls, github } = barnacleGithub ( [ file ( "src/gateway/server.ts" ) ] ) ;
721722
722723 await runBarnacleAutoResponse ( {
@@ -726,7 +727,7 @@ describe("barnacle-auto-response", () => {
726727 candidateLabels . mockOnlyProof ,
727728 PROOF_SUPPLIED_LABEL ,
728729 PROOF_SUFFICIENT_LABEL ,
729- "proof: override" ,
730+ PROOF_OVERRIDE_LABEL ,
730731 ] ) ,
731732 core : {
732733 info : ( ) => undefined ,
@@ -737,11 +738,38 @@ describe("barnacle-auto-response", () => {
737738 expectedRemoveLabel ( 123 , candidateLabels . needsRealBehaviorProof ) ,
738739 expectedRemoveLabel ( 123 , candidateLabels . mockOnlyProof ) ,
739740 expectedRemoveLabel ( 123 , PROOF_SUPPLIED_LABEL ) ,
740- expectedRemoveLabel ( 123 , PROOF_SUFFICIENT_LABEL ) ,
741741 ] ) ;
742742 expect ( calls . update ) . toStrictEqual ( [ ] ) ;
743743 } ) ;
744744
745+ it ( "preserves manually applied sufficient proof label when override is added" , async ( ) => {
746+ const { calls, github } = barnacleGithub ( [ file ( "src/gateway/server.ts" ) ] ) ;
747+
748+ await runBarnacleAutoResponse ( {
749+ github,
750+ context : barnacleContext (
751+ {
752+ body : realBehaviorProofBody (
753+ "" ,
754+ ) ,
755+ } ,
756+ [ PROOF_OVERRIDE_LABEL , PROOF_SUFFICIENT_LABEL ] ,
757+ {
758+ action : "labeled" ,
759+ label : { name : PROOF_OVERRIDE_LABEL } ,
760+ sender : { login : "maintainer" , type : "User" } ,
761+ } ,
762+ ) ,
763+ core : {
764+ info : ( ) => undefined ,
765+ } ,
766+ } ) ;
767+
768+ expect ( calls . removeLabel ) . toEqual ( [ ] ) ;
769+ expect ( calls . addLabels ) . toEqual ( [ ] ) ;
770+ expect ( calls . update ) . toEqual ( [ ] ) ;
771+ } ) ;
772+
745773 it ( "removes stale negative proof labels and adds supplied when proof is present" , async ( ) => {
746774 const { calls, github } = barnacleGithub ( [ file ( "src/gateway/server.ts" ) ] ) ;
747775
@@ -887,6 +915,24 @@ describe("barnacle-auto-response", () => {
887915 expect ( calls . removeLabel ) . toEqual ( [ ] ) ;
888916 } ) ;
889917
918+ it ( "preserves sufficient proof on unrelated label events even without body proof" , async ( ) => {
919+ const { calls, github } = barnacleGithub ( [ file ( "src/gateway/server.ts" ) ] ) ;
920+
921+ await runBarnacleAutoResponse ( {
922+ github,
923+ context : barnacleContext ( { } , [ PROOF_SUFFICIENT_LABEL ] , {
924+ action : "labeled" ,
925+ label : { name : "status: ready for maintainer look" } ,
926+ sender : { login : "openclaw-clawsweeper[bot]" , type : "Bot" } ,
927+ } ) ,
928+ core : {
929+ info : ( ) => undefined ,
930+ } ,
931+ } ) ;
932+
933+ expect ( calls . removeLabel ) . toEqual ( [ ] ) ;
934+ } ) ;
935+
890936 it ( "does not let Barnacle veto ClawSweeper's sufficient proof label add" , async ( ) => {
891937 const { calls, github } = barnacleGithub ( [ file ( "src/gateway/server.ts" ) ] ) ;
892938
0 commit comments