engine: per-session circuit breaker, repeated BLOCKs or denials tighten the rest of the session
Maintainers usually reply within 3 days
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
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
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
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from DobermanCore/Doberman-Core
-
posthog
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
DobermanCore/Doberman-Core#791 ·
Maintainers usually reply within 3 days
-
level-6
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
DobermanCore/Doberman-Core#782 · 1 comment ·
Maintainers usually reply within 3 days
-
posthog
Difficulty 2/5 1-3 hours Newbie friendliness 80/100
DobermanCore/Doberman-Core#767 ·
Maintainers usually reply within 3 days
-
good first issue help wanted level-2
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
DobermanCore/Doberman-Core#333 ·
Maintainers usually reply within 3 days
-
good first issue help wanted level-2
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
DobermanCore/Doberman-Core#272 ·
Maintainers usually reply within 3 days
All issues in DobermanCore/Doberman-Core
Similar issues
-
area: web priority: P1 story
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
nfiasco/Quant-Time-Machine#151 ·
Maintainers usually reply within 1 day
-
docs pydanty:is-working
Difficulty 1/5 1-3 hours Newbie friendliness 85/100
pydantic/pydantic-ai#12892 ·
Maintainers usually reply within 1 day
-
needs-triage
Difficulty 1/5 1-3 hours Newbie friendliness 72/100
Azure/azure-sdk-for-python#49886 · 1 comment · 1 reaction ·
Maintainers usually reply within 1 day
-
[Core] Deprecated(error=True) raises only on the first call; later calls run the removed APIPossibly taken @wguo7 claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
ray-project/ray#67965 ·
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
btclib-org/btclib#3006 ·
Maintainers usually reply within 1 day