engine: per-session circuit breaker, repeated BLOCKs or denials tighten the rest of the session

Open
#643 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 3 days

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
35/100
Issue type
Documentation
Clarity
Mostly clear
Activity status
Quiet
Tech stack
python, sqlite
Domain
security

Research direction

Read the module docstring and post-decision pattern in src/doberman/engine/correlator.py, then review the “Now / Host containment” section of ROADMAP.md. Write a design proposal answering the four listed questions about counter storage, reset behavior, run order, and approved AUTH prompts; done means a maintainer signs off before implementation. The issue says to start with CONTRIBUTING.md if you are new.

Written by the indexing model from the issue text.

Description

enhancement level-7 roadmap

What exists today

No circuit breaker exists yet. Open src/doberman/engine/correlator.py and read its module docstring, the nearest existing pattern: a function that runs after decide() is done, reads what happened earlier in the session from storage, and can only raise the final verdict, never lower it, using max_verdict/max_risk.

Why it matters

Today, each action is judged mostly on its own. If a session already triggered several hard BLOCKs or denied AUTH prompts (Doberman pausing to ask a human to approve, and being told no), that is a strong signal the rest of that session deserves less trust, but Doberman has no memory of that pattern yet. A circuit breaker would use recent history in the same session to tighten what happens next, without ever loosening anything on its own.

Where to look

  • src/doberman/engine/correlator.py, the nearest existing pattern: runs after a decision, reads session history, only ever raises the final verdict.
  • ROADMAP.md, "Now / Host containment" section, where this sits alongside the honeytoken tripwire and deeper egress parsing.

Open questions

  • Counter storage and scope: does the circuit breaker count per session in the same SQLite database the taint floor and correlator already read, or does it need new storage?
  • What resets the counter: only the same human-approved path already used to loosen a policy (doberman.policy.drift), or does every new session start clean regardless?
  • Run order: does the circuit breaker run before or after the correlator and the taint floor, and can a breaker-raised verdict feed back into their own thresholds?
  • Does an AUTH the human approves still count toward the limit, or only a denial?

Done when

  • A design write-up answering the open questions above: where the counter lives, what resets it, the run order against the correlator and taint floor, and whether an approved AUTH still counts.
  • A maintainer signs off on the design before any implementation starts.

Keep in mind

  • Raise-only (Doberman's checks may only get stricter over time, never quietly looser): the circuit breaker may only tighten verdicts for the rest of a session, and only the human-approved path may reset it, never an automatic mid-session reset.
  • Fail closed (when Doberman cannot be sure, it treats the situation as blocked or unresolved, not as safe): uncertainty about the counter or its state should never cause a verdict to relax.

Out of scope

  • Implementation before a maintainer has answered the open questions.

Roadmap fit

Later. Host containment; design before code.

New here? Start with CONTRIBUTING.md. Issues carry a level-1 (docs) to level-10 (new subsystem) label. Comment
on the issue to claim it before you start, and ask here if anything is unclear.

Dominant language
Python
Stars
277
Forks
42
Avg merge
1d 19h
Merged PRs (30d)
16

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from DobermanCore/Doberman-Core

All issues in DobermanCore/Doberman-Core

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.