@@ -235,6 +235,7 @@ func deriveGrowthPressures(records []memoryRecord) []growthPressure {
235235 Sources : sources ,
236236 })
237237 }
238+ pressures = suppressResolvedFailurePressures (pressures , records )
238239 sort .Slice (pressures , func (i , j int ) bool {
239240 if pressures [i ].Score == pressures [j ].Score {
240241 if pressures [i ].Kind == pressures [j ].Kind {
@@ -262,12 +263,80 @@ func growthRecordAllowed(record memoryRecord) bool {
262263 if signal == "" || isNoisyGrowthSignal (signal ) {
263264 return false
264265 }
266+ if activeCapabilityExecutionSignal (signal ) {
267+ return false
268+ }
265269 if quality == "weak" {
266270 return usefulValidationSignal (signal ) || hasAny (normalizeSentence (signal ), "before every" , "before each" , "repeatable" )
267271 }
268272 return true
269273}
270274
275+ func activeCapabilityExecutionSignal (signal string ) bool {
276+ normalized := normalizeSentence (signal )
277+ return hasAny (normalized , "active validator" , "active harness" , "active capability" ) &&
278+ hasAny (normalized , "passed before packet handoff" , "passed for goal" , "ran for goal" , "blocked because" , "record active capability" )
279+ }
280+
281+ func suppressResolvedFailurePressures (pressures []growthPressure , records []memoryRecord ) []growthPressure {
282+ filtered := make ([]growthPressure , 0 , len (pressures ))
283+ for _ , pressure := range pressures {
284+ if pressureOpenFailure (pressure ) && pressureResolvedByLaterMemory (pressure , records ) {
285+ continue
286+ }
287+ filtered = append (filtered , pressure )
288+ }
289+ return filtered
290+ }
291+
292+ func pressureResolvedByLaterMemory (pressure growthPressure , records []memoryRecord ) bool {
293+ latest := latestSourceGoal (pressure .Sources )
294+ if latest == "" {
295+ return false
296+ }
297+ for _ , record := range records {
298+ goalID := memoryGoalID (record .Text )
299+ if compareGoalID (goalID , latest ) <= 0 {
300+ continue
301+ }
302+ signal := memorySignal (record .Text )
303+ if failureClosureSignal (signal ) && failureClosureOverlaps (pressure .Signal , signal ) {
304+ return true
305+ }
306+ }
307+ return false
308+ }
309+
310+ func latestSourceGoal (sources []string ) string {
311+ latest := ""
312+ for _ , source := range sources {
313+ if compareGoalID (source , latest ) > 0 {
314+ latest = source
315+ }
316+ }
317+ return latest
318+ }
319+
320+ func failureClosureSignal (signal string ) bool {
321+ normalized := normalizeSentence (signal )
322+ if hasAny (normalized , "not fixed" , "not resolved" , "not closed" , "still open" ) {
323+ return false
324+ }
325+ return hasAny (normalized , "closed by" , "is closed" , "now closed" , "resolved" , "fixed" , "no longer" , "now handled" , "now configurable" )
326+ }
327+
328+ func failureClosureOverlaps (failure , closure string ) bool {
329+ failureTokens := tokenSet (pressureTokens (failure ))
330+ closureTokens := tokenSet (pressureTokens (closure ))
331+ overlap := 0
332+ for token := range failureTokens {
333+ if closureTokens [token ] {
334+ overlap ++
335+ }
336+ }
337+ return overlap >= 2 || tokenJaccard (failureTokens , closureTokens ) >= 0.35
338+ }
339+
271340func readinessEvidenceContributesToGrowth (text string ) bool {
272341 normalized := normalizeSentence (text )
273342 prefix := "readiness evidence:"
0 commit comments