Topic · Hotspot cycle

Every release we fix bugs and new ones appear in the same area. How do we break the cycle?

Gist

The ticket closed. The area never had a shall. Sentry files the next instance. SonarQube still ranks the file. Proof fails the merge when that area still has no witnessed obligation, with the same command on every push.

proof audit --fail-level warn

Keep Sentry for the instance. Keep the quality gate for the file. The missing object is a shall on the area, not another patch.

01 · The closed ticket

A fix is one input. The area is still unspecified.

Last release: null pointer on an empty cart. This release: overflow on a duplicate line. Same module. Different tickets. Nobody wrote what the module shall refuse.

The door that re-opens lives on why the same bugs come back. The first customer crash lives on the missed class. This page is the hotspot: new bugs, same area, every release, because the area itself was never a requirement.

A patch names one input. An obligation names a class. If the cart module has no shall for malformed lines, each new payload is a new ticket. Cover can be high. The suite can be green. The next payload is still free.

// ticket 4817: empty cart no longer panics
func TestEmptyCart(t *testing.T) {
    // one input, one close
}

The test pins 4817. It does not pin the area. proof audit --fail-level warn fails the push when an approved shall on that module still has no annotated witness. If nobody wrote the shall, there is nothing for the gate to fail on except the checklist you already have. That is the honest hole, not a slogan.

02 · The exhibit

Same module. A closed ticket, or a shall.

The board says done. The area still accepts a payload nobody named. Click the tabs.

Sentry / Sonar

  • Looked at this stack, this file score
  • Next payload not in scope
4817 closed, file still hot

The area

When a cart line is malformed, the module shall reject it and leave the cart unchanged.

No shall on the module

Sentry / Sonar

Still a ticket stream. Still a hotspot ranking. Still no reject class.

Still the instance

Proof

  • Ask does malformed_input still have negative
  • Gate audit --fail-level warn
Merge blocked if the area is unwitnessed

Same module. A closed ticket, or a shall. Click the tabs.

Who What they notice What they lose
Sentry The next instance, after it shipped It files the ticket. It does not write the shall. Keep it.
SonarQube The file keeps changing and keeps scoring as a hotspot A hotspot ranking is not a class. The quality-gate H1 lives on Proof vs SonarQube.
The same-bug door One known bug walking back in That recurrence lives on why bugs come back.
Proof The area has an approved shall with a witness, or the merge stays red Proof does not invent the shall. An unnamed partition is not in the denominator. Jama still authors.

Write the class for the module, then ask whether any implementation can keep it, then fail the push if the witness is missing:

proof realize specs/system ./... --diagnose
proof audit --check obligation_evidence_complete --verbose

// CART-REQ-04:malformed_input:negative

proof audit --fail-level warn

realize --diagnose is the check that the area shall is even keepable. Kind2 returns a counterexample when it is not. obligation_evidence_complete is a verify-stage warning by default. The gate is proof audit --fail-level warn. A comment without a run is not a witness.

We have not run Sentry or SonarQube against that gate on a frozen corpus of hotspots. The loss is named, not scored.

03 · The honest loss

A red Proof audit is not a complete map of the module.

If nobody wrote what the area shall refuse, the gate has nothing to fail on except the checklist you already have.

Proof does not author the programme. Jama still does. Proof does not file the next crash. Sentry still does. Proof does not invent a payload that was never a condition. 100% MC/DC on the written decision still misses that case.

A warning-by-default check is silent at the default fail level. The gate is proof audit --fail-level warn. A transform with no obligation checklist is skipped as information.

The recurrence H1 lives on why bugs come back. The first-crash H1 lives on crash the suite missed. The green-suite H1 lives on tests pass, bugs still ship.

04 · Nearby questions

What people type next.

Why do the same bugs keep coming back in our codebase? One known door walking back in. Recurrence.

A customer reported a crash our whole test suite missed. How do I prevent that entire class? The first report, not the hotspot cycle. Missed class.

How do I make sure a fixed bug never comes back? Pin that bug. FAQ on the recurrence URL. Do not mint a twin.

We have high test coverage but still get escaped defects. What are we missing? The denominator, not the hotspot. Coverage vs requirements.