ravenclaw-security 0.16.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ravenclaw contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,8 @@
1
+ include LICENSE
2
+ include README.md
3
+ include pyproject.toml
4
+ graft ravenclaw
5
+ prune engine
6
+ prune tests
7
+ global-exclude __pycache__
8
+ global-exclude *.py[cod]
@@ -0,0 +1,238 @@
1
+ Metadata-Version: 2.4
2
+ Name: ravenclaw-security
3
+ Version: 0.16.1
4
+ Summary: Governance-first security research runtime with policy-gated execution and public-safe proof artifacts
5
+ Author: Krzysztof Probola
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/rozmiarD/ravenclaw
8
+ Project-URL: Repository, https://github.com/rozmiarD/ravenclaw
9
+ Project-URL: Issues, https://github.com/rozmiarD/ravenclaw/issues
10
+ Project-URL: Changelog, https://github.com/rozmiarD/ravenclaw/blob/main/CHANGELOG.md
11
+ Project-URL: Documentation, https://github.com/rozmiarD/ravenclaw#readme
12
+ Keywords: security,governance,runtime,contracts,dry-run,evidence
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Information Technology
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3 :: Only
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Security
22
+ Requires-Python: >=3.11
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: PyYAML<7,>=6
26
+ Requires-Dist: sclite-core<0.6,>=0.5.1
27
+ Requires-Dist: govengine<0.8,>=0.7.0
28
+ Provides-Extra: logdash
29
+ Requires-Dist: Flask<4,>=3; extra == "logdash"
30
+ Provides-Extra: dev
31
+ Requires-Dist: pytest<9,>=8; extra == "dev"
32
+ Requires-Dist: Flask<4,>=3; extra == "dev"
33
+ Requires-Dist: PyYAML<7,>=6; extra == "dev"
34
+ Requires-Dist: build<2,>=1; extra == "dev"
35
+ Requires-Dist: twine<7,>=5; extra == "dev"
36
+ Dynamic: license-file
37
+
38
+ # RAVENCLAW
39
+
40
+ [![CI: pytest](https://github.com/rozmiarD/ravenclaw/actions/workflows/pytest.yml/badge.svg)](https://github.com/rozmiarD/ravenclaw/actions/workflows/pytest.yml)
41
+ [![Source: Ravenclaw 0.16.1](https://img.shields.io/badge/source-Ravenclaw%200.16.1-blueviolet.svg)](pyproject.toml)
42
+ [![Python: 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](pyproject.toml)
43
+ [![Dependency: GovEngine >=0.7.0](https://img.shields.io/badge/dependency-GovEngine%20%3E%3D0.7.0-informational.svg)](https://github.com/rozmiarD/GovEngine)
44
+ [![Dependency: SCLite 0.5.1](https://img.shields.io/badge/dependency-SCLite%200.5.1-informational.svg)](https://github.com/rozmiarD/SCLite)
45
+ [![License: MIT](https://img.shields.io/badge/license-MIT-yellow.svg)](LICENSE)
46
+
47
+ **RAVENCLAW is a governance-first security research runtime for bounded, auditable security operations.**
48
+
49
+
50
+ It is built around a simple idea:
51
+ advanced autonomy is only useful when it remains bounded, observable, and accountable.
52
+
53
+ ## What Ravenclaw does
54
+
55
+ Ravenclaw is a multi-layer runtime for running security workflows under explicit governance.
56
+ It combines:
57
+ - deterministic planning and runtime contracts
58
+ - policy and approval gates before execution
59
+ - constrained execution through a dedicated execution engine
60
+ - artifact analysis and evidence-oriented qualification
61
+ - operator-facing visibility through Logdash
62
+
63
+ The goal is not maximum automation.
64
+ The goal is reliable autonomy under governance.
65
+
66
+ The public repository should be read as a **public core** of that system:
67
+ a publishable runtime/control-plane artifact with explicit governance and validation surfaces, not a claim that every private operator integration is bundled here.
68
+
69
+ ## What makes it different
70
+
71
+ Ravenclaw is not an unconstrained offensive automation system.
72
+ Its core design claim is narrower:
73
+ - planning, authorization, execution, and interpretation are separated
74
+ - policy is enforced in runtime paths, not only described in prompts or docs
75
+ - operator approval remains explicit for sensitive actions
76
+ - evidence quality and replayability matter as much as action generation
77
+
78
+ In short, Ravenclaw optimizes for useful actions that stay within policy, scope, and review boundaries.
79
+
80
+ Ravenclaw now consumes **GovEngine** for reusable governed-runtime kernel mechanics and **SCLite** for contract lifecycle artifacts.
81
+
82
+ The current reusable direction is a small **Security Contract Layer** backed by Ravenclaw Runtime artifacts: scope binding, policy decisions, prepared/approved execution specs, execution receipts, evidence summaries, and runtime truth. The reusable contract core is now the standalone `sclite` package/repo, while Ravenclaw is being shaped as the reference security-research runtime/profile over GovEngine + SCLite. OpenClaw, MCP, and A2A are potential later carriers for these contracts, not new protocols Ravenclaw is trying to own.
83
+
84
+ The first PyPI package line is `ravenclaw-security==0.16.1`. It exposes the public
85
+ Ravenclaw security-profile and OpenClaw readiness contract helpers. The full
86
+ runtime, demo, Logdash, and validation surfaces remain source/reference
87
+ repository workflows in this release.
88
+
89
+ ## Safe quickstart
90
+
91
+ The current official public-safe path is local and dry-run oriented.
92
+
93
+ Shortest reviewer path:
94
+ 1. `INSTALL.md`
95
+ 2. `DEMO.md`
96
+ 3. `REVIEWER_VALIDATION_GUIDE.md`
97
+ 4. `QUALITY_SIGNALS.md`
98
+ 5. `PUBLIC_STATUS.md`
99
+
100
+ Broader navigation lives in `DOCS_MAP.md`; architecture depth starts with `ARCHITECTURE_OVERVIEW.md`.
101
+
102
+ This path is intentionally narrow and honest.
103
+ It shows the governed flow with a small one-command demo entrypoint (`bin/demo`), a shared bootstrap path (`scripts/bootstrap_public_demo.sh`), and an explicit `RAVENCLAW_MODE=demo` delivery profile, without pretending the repo already has a polished one-command public deployment story.
104
+
105
+ ## Architecture at a glance
106
+
107
+ High-level governed flow:
108
+
109
+ `scope/input -> planner -> policy gate / auditor -> approved execution spec -> execution engine -> analysis -> operator visibility`
110
+
111
+ Main runtime layers:
112
+ - **Planner**: turns scope and operator input into structured campaign/runtime intent
113
+ - **Policy gate / Auditor**: enforces scope, tool, auth, and aggression rules before execution
114
+ - **Execution engine**: the only layer allowed to build and run final commands
115
+ - **Analysis / qualification**: turns raw artifacts into bounded findings and summaries
116
+ - **Logdash**: operator-facing control plane for visibility, control, and state truth
117
+
118
+ See `ARCHITECTURE_OVERVIEW.md` for the short version and `ARCHITECTURE.md` for the deeper map.
119
+
120
+ ## Public maturity and status
121
+
122
+ Ravenclaw is not a flat-maturity repository.
123
+ Some parts are stable enough to be treated as strong public reference surfaces, while others remain experimental or local/internal.
124
+
125
+ Use `PUBLIC_STATUS.md` as the canonical public maturity guide.
126
+ For public proof and trust surfaces, use `VALIDATION.md`, `QUALITY_SIGNALS.md`, and `references/public-safe-proof-walkthrough.md`.
127
+ For the public-core/private-overlay split, read `references/public-core-private-overlay-boundary.md`.
128
+ For trusted-core authority boundaries, failure modes, and non-guarantees, read `THREAT_MODEL.md`.
129
+ For the emerging contract layer, read `SECURITY_CONTRACT_LAYER.md` and `references/approved-execution-spec-v0.1.md`.
130
+ For Logdash operator-facing control/recovery semantics, see `references/logdash-operator-truth-contracts.md`.
131
+
132
+ ## Install and run posture
133
+
134
+ Fastest public-safe start:
135
+
136
+ ```bash
137
+ ./scripts/bootstrap_public_demo.sh demo
138
+ ```
139
+
140
+ Reusable public demo bundle:
141
+
142
+ ```bash
143
+ ./scripts/bootstrap_public_demo.sh bundle
144
+ ```
145
+
146
+ Reviewer-facing package-chain scenario:
147
+
148
+ ```bash
149
+ ./scripts/bootstrap_public_demo.sh scenario
150
+ ```
151
+
152
+ That scenario generates a local dry-run summary tying Ravenclaw demo artifacts to the GovEngine `security_profile` boundary and SCLite lifecycle-chain verification. In demo mode, Ravenclaw also records a deterministic GovEngine signing/trust-port example on the execution ticket, binding the ticket evidence to the execution-contract digest without claiming PKI, CA, KMS, key-store, or production identity ownership.
153
+
154
+ For containerized public-demo bring-up, see `.devcontainer/` and `compose.demo.yaml`.
155
+
156
+
157
+ Today, the repo is strongest as:
158
+ - a governance-first runtime architecture
159
+ - a research platform with real control and policy surfaces
160
+ - a codebase that can be inspected seriously
161
+
162
+ It now has an official public-safe local dry-run path, but it is not yet in its final lowest-friction form.
163
+ That remaining gap is real and still an active priority.
164
+
165
+ ## Who this is for
166
+
167
+ Ravenclaw is best suited to technically serious readers who care about:
168
+ - governance-first security automation
169
+ - policy-gated execution
170
+ - operator-visible control and recovery
171
+ - contract-oriented runtime design
172
+ - evidence and replayability
173
+
174
+ If you want a clearer fit/non-fit guide, read `AUDIENCE.md`.
175
+
176
+ ## Limits and non-goals
177
+
178
+ Ravenclaw is **not**:
179
+ - an unconstrained offensive automation platform
180
+ - an opaque autonomous attacker
181
+ - a replacement for operator judgment
182
+ - a guarantee of security outcomes
183
+ - a polished consumer product or hosted service
184
+ - a beginner-first security starter kit
185
+
186
+ It is intended for authorized security research and controlled environments.
187
+ Its value depends on bounded behavior, explicit governance, and operator visibility.
188
+
189
+ ## Why this project exists
190
+
191
+ Many autonomous security systems have a hard tradeoff:
192
+ - rigid systems can be safe but not useful enough;
193
+ - unconstrained systems can act quickly but are hard to trust.
194
+
195
+ Ravenclaw separates proposal, approval, execution, and review so adaptive parts can help without owning final authority.
196
+
197
+ For the short public thesis, read `WHY_RAVENCLAW.md`.
198
+
199
+ ## Repository guide
200
+
201
+ Main areas:
202
+ - `engine/` - planning, runtime orchestration, policy, execution, qualification, evaluation
203
+ - `logdash/` - operator-facing dashboard and control plane
204
+ - `tests/` and `engine/tests/` - regression and contract coverage
205
+ - `references/` - short reference docs for important contracts and boundaries
206
+ - `implementation-plans/` - bounded plans for meaningful repo/runtime improvement waves
207
+
208
+ ## Release and public-release framing
209
+
210
+ Version milestones are tracked in `VERSION_ROADMAP.md`.
211
+ High-level open-source/public-release direction is tracked in `OPEN_SOURCE_1_0_PLAN.md`.
212
+
213
+ Current public truth:
214
+ - the technical core has real governance, contract, and validation surfaces
215
+ - the public repo is best understood as a governance-first public core, not a full private operator environment
216
+ - the public repo shape is improving, but is still being refined
217
+ - public clarity, demo usability, and proof surfaces are better than before, but remain active work
218
+
219
+ ## Documentation map
220
+
221
+ For intent-based navigation, use `DOCS_MAP.md`.
222
+ For final publication workflow, use `PUBLISHING.md`.
223
+
224
+ ## Deeper reading
225
+
226
+ If you want more depth, read in this order:
227
+ 1. `PUBLIC_STATUS.md`
228
+ 2. `AUDIENCE.md`
229
+ 3. `QUALITY_SIGNALS.md`
230
+ 4. `VALIDATION.md`
231
+ 5. `DOCS_MAP.md`
232
+ 6. `ARCHITECTURE_OVERVIEW.md`
233
+ 7. `WHY_RAVENCLAW.md`
234
+ 8. `ARCHITECTURE.md`
235
+ 9. `STATE_FILES.md`
236
+ 10. `OPEN_SOURCE_1_0_PLAN.md`
237
+
238
+ Ravenclaw should be understood as intelligence under governance: adaptive enough to be useful, bounded enough to remain inspectable and trustworthy.
@@ -0,0 +1,201 @@
1
+ # RAVENCLAW
2
+
3
+ [![CI: pytest](https://github.com/rozmiarD/ravenclaw/actions/workflows/pytest.yml/badge.svg)](https://github.com/rozmiarD/ravenclaw/actions/workflows/pytest.yml)
4
+ [![Source: Ravenclaw 0.16.1](https://img.shields.io/badge/source-Ravenclaw%200.16.1-blueviolet.svg)](pyproject.toml)
5
+ [![Python: 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](pyproject.toml)
6
+ [![Dependency: GovEngine >=0.7.0](https://img.shields.io/badge/dependency-GovEngine%20%3E%3D0.7.0-informational.svg)](https://github.com/rozmiarD/GovEngine)
7
+ [![Dependency: SCLite 0.5.1](https://img.shields.io/badge/dependency-SCLite%200.5.1-informational.svg)](https://github.com/rozmiarD/SCLite)
8
+ [![License: MIT](https://img.shields.io/badge/license-MIT-yellow.svg)](LICENSE)
9
+
10
+ **RAVENCLAW is a governance-first security research runtime for bounded, auditable security operations.**
11
+
12
+
13
+ It is built around a simple idea:
14
+ advanced autonomy is only useful when it remains bounded, observable, and accountable.
15
+
16
+ ## What Ravenclaw does
17
+
18
+ Ravenclaw is a multi-layer runtime for running security workflows under explicit governance.
19
+ It combines:
20
+ - deterministic planning and runtime contracts
21
+ - policy and approval gates before execution
22
+ - constrained execution through a dedicated execution engine
23
+ - artifact analysis and evidence-oriented qualification
24
+ - operator-facing visibility through Logdash
25
+
26
+ The goal is not maximum automation.
27
+ The goal is reliable autonomy under governance.
28
+
29
+ The public repository should be read as a **public core** of that system:
30
+ a publishable runtime/control-plane artifact with explicit governance and validation surfaces, not a claim that every private operator integration is bundled here.
31
+
32
+ ## What makes it different
33
+
34
+ Ravenclaw is not an unconstrained offensive automation system.
35
+ Its core design claim is narrower:
36
+ - planning, authorization, execution, and interpretation are separated
37
+ - policy is enforced in runtime paths, not only described in prompts or docs
38
+ - operator approval remains explicit for sensitive actions
39
+ - evidence quality and replayability matter as much as action generation
40
+
41
+ In short, Ravenclaw optimizes for useful actions that stay within policy, scope, and review boundaries.
42
+
43
+ Ravenclaw now consumes **GovEngine** for reusable governed-runtime kernel mechanics and **SCLite** for contract lifecycle artifacts.
44
+
45
+ The current reusable direction is a small **Security Contract Layer** backed by Ravenclaw Runtime artifacts: scope binding, policy decisions, prepared/approved execution specs, execution receipts, evidence summaries, and runtime truth. The reusable contract core is now the standalone `sclite` package/repo, while Ravenclaw is being shaped as the reference security-research runtime/profile over GovEngine + SCLite. OpenClaw, MCP, and A2A are potential later carriers for these contracts, not new protocols Ravenclaw is trying to own.
46
+
47
+ The first PyPI package line is `ravenclaw-security==0.16.1`. It exposes the public
48
+ Ravenclaw security-profile and OpenClaw readiness contract helpers. The full
49
+ runtime, demo, Logdash, and validation surfaces remain source/reference
50
+ repository workflows in this release.
51
+
52
+ ## Safe quickstart
53
+
54
+ The current official public-safe path is local and dry-run oriented.
55
+
56
+ Shortest reviewer path:
57
+ 1. `INSTALL.md`
58
+ 2. `DEMO.md`
59
+ 3. `REVIEWER_VALIDATION_GUIDE.md`
60
+ 4. `QUALITY_SIGNALS.md`
61
+ 5. `PUBLIC_STATUS.md`
62
+
63
+ Broader navigation lives in `DOCS_MAP.md`; architecture depth starts with `ARCHITECTURE_OVERVIEW.md`.
64
+
65
+ This path is intentionally narrow and honest.
66
+ It shows the governed flow with a small one-command demo entrypoint (`bin/demo`), a shared bootstrap path (`scripts/bootstrap_public_demo.sh`), and an explicit `RAVENCLAW_MODE=demo` delivery profile, without pretending the repo already has a polished one-command public deployment story.
67
+
68
+ ## Architecture at a glance
69
+
70
+ High-level governed flow:
71
+
72
+ `scope/input -> planner -> policy gate / auditor -> approved execution spec -> execution engine -> analysis -> operator visibility`
73
+
74
+ Main runtime layers:
75
+ - **Planner**: turns scope and operator input into structured campaign/runtime intent
76
+ - **Policy gate / Auditor**: enforces scope, tool, auth, and aggression rules before execution
77
+ - **Execution engine**: the only layer allowed to build and run final commands
78
+ - **Analysis / qualification**: turns raw artifacts into bounded findings and summaries
79
+ - **Logdash**: operator-facing control plane for visibility, control, and state truth
80
+
81
+ See `ARCHITECTURE_OVERVIEW.md` for the short version and `ARCHITECTURE.md` for the deeper map.
82
+
83
+ ## Public maturity and status
84
+
85
+ Ravenclaw is not a flat-maturity repository.
86
+ Some parts are stable enough to be treated as strong public reference surfaces, while others remain experimental or local/internal.
87
+
88
+ Use `PUBLIC_STATUS.md` as the canonical public maturity guide.
89
+ For public proof and trust surfaces, use `VALIDATION.md`, `QUALITY_SIGNALS.md`, and `references/public-safe-proof-walkthrough.md`.
90
+ For the public-core/private-overlay split, read `references/public-core-private-overlay-boundary.md`.
91
+ For trusted-core authority boundaries, failure modes, and non-guarantees, read `THREAT_MODEL.md`.
92
+ For the emerging contract layer, read `SECURITY_CONTRACT_LAYER.md` and `references/approved-execution-spec-v0.1.md`.
93
+ For Logdash operator-facing control/recovery semantics, see `references/logdash-operator-truth-contracts.md`.
94
+
95
+ ## Install and run posture
96
+
97
+ Fastest public-safe start:
98
+
99
+ ```bash
100
+ ./scripts/bootstrap_public_demo.sh demo
101
+ ```
102
+
103
+ Reusable public demo bundle:
104
+
105
+ ```bash
106
+ ./scripts/bootstrap_public_demo.sh bundle
107
+ ```
108
+
109
+ Reviewer-facing package-chain scenario:
110
+
111
+ ```bash
112
+ ./scripts/bootstrap_public_demo.sh scenario
113
+ ```
114
+
115
+ That scenario generates a local dry-run summary tying Ravenclaw demo artifacts to the GovEngine `security_profile` boundary and SCLite lifecycle-chain verification. In demo mode, Ravenclaw also records a deterministic GovEngine signing/trust-port example on the execution ticket, binding the ticket evidence to the execution-contract digest without claiming PKI, CA, KMS, key-store, or production identity ownership.
116
+
117
+ For containerized public-demo bring-up, see `.devcontainer/` and `compose.demo.yaml`.
118
+
119
+
120
+ Today, the repo is strongest as:
121
+ - a governance-first runtime architecture
122
+ - a research platform with real control and policy surfaces
123
+ - a codebase that can be inspected seriously
124
+
125
+ It now has an official public-safe local dry-run path, but it is not yet in its final lowest-friction form.
126
+ That remaining gap is real and still an active priority.
127
+
128
+ ## Who this is for
129
+
130
+ Ravenclaw is best suited to technically serious readers who care about:
131
+ - governance-first security automation
132
+ - policy-gated execution
133
+ - operator-visible control and recovery
134
+ - contract-oriented runtime design
135
+ - evidence and replayability
136
+
137
+ If you want a clearer fit/non-fit guide, read `AUDIENCE.md`.
138
+
139
+ ## Limits and non-goals
140
+
141
+ Ravenclaw is **not**:
142
+ - an unconstrained offensive automation platform
143
+ - an opaque autonomous attacker
144
+ - a replacement for operator judgment
145
+ - a guarantee of security outcomes
146
+ - a polished consumer product or hosted service
147
+ - a beginner-first security starter kit
148
+
149
+ It is intended for authorized security research and controlled environments.
150
+ Its value depends on bounded behavior, explicit governance, and operator visibility.
151
+
152
+ ## Why this project exists
153
+
154
+ Many autonomous security systems have a hard tradeoff:
155
+ - rigid systems can be safe but not useful enough;
156
+ - unconstrained systems can act quickly but are hard to trust.
157
+
158
+ Ravenclaw separates proposal, approval, execution, and review so adaptive parts can help without owning final authority.
159
+
160
+ For the short public thesis, read `WHY_RAVENCLAW.md`.
161
+
162
+ ## Repository guide
163
+
164
+ Main areas:
165
+ - `engine/` - planning, runtime orchestration, policy, execution, qualification, evaluation
166
+ - `logdash/` - operator-facing dashboard and control plane
167
+ - `tests/` and `engine/tests/` - regression and contract coverage
168
+ - `references/` - short reference docs for important contracts and boundaries
169
+ - `implementation-plans/` - bounded plans for meaningful repo/runtime improvement waves
170
+
171
+ ## Release and public-release framing
172
+
173
+ Version milestones are tracked in `VERSION_ROADMAP.md`.
174
+ High-level open-source/public-release direction is tracked in `OPEN_SOURCE_1_0_PLAN.md`.
175
+
176
+ Current public truth:
177
+ - the technical core has real governance, contract, and validation surfaces
178
+ - the public repo is best understood as a governance-first public core, not a full private operator environment
179
+ - the public repo shape is improving, but is still being refined
180
+ - public clarity, demo usability, and proof surfaces are better than before, but remain active work
181
+
182
+ ## Documentation map
183
+
184
+ For intent-based navigation, use `DOCS_MAP.md`.
185
+ For final publication workflow, use `PUBLISHING.md`.
186
+
187
+ ## Deeper reading
188
+
189
+ If you want more depth, read in this order:
190
+ 1. `PUBLIC_STATUS.md`
191
+ 2. `AUDIENCE.md`
192
+ 3. `QUALITY_SIGNALS.md`
193
+ 4. `VALIDATION.md`
194
+ 5. `DOCS_MAP.md`
195
+ 6. `ARCHITECTURE_OVERVIEW.md`
196
+ 7. `WHY_RAVENCLAW.md`
197
+ 8. `ARCHITECTURE.md`
198
+ 9. `STATE_FILES.md`
199
+ 10. `OPEN_SOURCE_1_0_PLAN.md`
200
+
201
+ Ravenclaw should be understood as intelligence under governance: adaptive enough to be useful, bounded enough to remain inspectable and trustworthy.
@@ -0,0 +1,56 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "ravenclaw-security"
7
+ version = "0.16.1"
8
+ description = "Governance-first security research runtime with policy-gated execution and public-safe proof artifacts"
9
+ readme = "README.md"
10
+ requires-python = ">=3.11"
11
+ license = "MIT"
12
+ authors = [{ name = "Krzysztof Probola" }]
13
+ keywords = ["security", "governance", "runtime", "contracts", "dry-run", "evidence"]
14
+ classifiers = [
15
+ "Development Status :: 3 - Alpha",
16
+ "Intended Audience :: Developers",
17
+ "Intended Audience :: Information Technology",
18
+ "Programming Language :: Python :: 3",
19
+ "Programming Language :: Python :: 3 :: Only",
20
+ "Programming Language :: Python :: 3.11",
21
+ "Programming Language :: Python :: 3.12",
22
+ "Programming Language :: Python :: 3.13",
23
+ "Topic :: Security",
24
+ ]
25
+ dependencies = [
26
+ "PyYAML>=6,<7",
27
+ "sclite-core>=0.5.1,<0.6",
28
+ "govengine>=0.7.0,<0.8",
29
+ ]
30
+
31
+ [project.urls]
32
+ Homepage = "https://github.com/rozmiarD/ravenclaw"
33
+ Repository = "https://github.com/rozmiarD/ravenclaw"
34
+ Issues = "https://github.com/rozmiarD/ravenclaw/issues"
35
+ Changelog = "https://github.com/rozmiarD/ravenclaw/blob/main/CHANGELOG.md"
36
+ Documentation = "https://github.com/rozmiarD/ravenclaw#readme"
37
+
38
+ [project.optional-dependencies]
39
+ logdash = [
40
+ "Flask>=3,<4",
41
+ ]
42
+ dev = [
43
+ "pytest>=8,<9",
44
+ "Flask>=3,<4",
45
+ "PyYAML>=6,<7",
46
+ "build>=1,<2",
47
+ "twine>=5,<7",
48
+ ]
49
+
50
+ [tool.setuptools]
51
+ packages = ["ravenclaw"]
52
+ py-modules = []
53
+
54
+ [tool.pytest.ini_options]
55
+ addopts = "-q"
56
+ testpaths = ["engine/tests", "engine/planer/tests", "tests"]
@@ -0,0 +1,5 @@
1
+ from __future__ import annotations
2
+
3
+ __version__ = '0.16.1'
4
+
5
+ __all__ = ['__version__']
@@ -0,0 +1,303 @@
1
+ from __future__ import annotations
2
+
3
+ """OpenClaw carrier-readiness contracts for Ravenclaw.
4
+
5
+ These helpers describe the minimum redaction/output and approval-UX boundaries
6
+ for a future OpenClaw carrier. They do not implement an adapter and must stay
7
+ free of transport/runtime side effects.
8
+ """
9
+
10
+ from typing import Any, Mapping
11
+
12
+
13
+ CHANNELS = (
14
+ 'direct_chat',
15
+ 'group_chat',
16
+ 'file_output',
17
+ 'embed_output',
18
+ 'attachment_output',
19
+ 'private_operator_output',
20
+ )
21
+
22
+ ALWAYS_REDACT = (
23
+ 'credentials',
24
+ 'tokens',
25
+ 'cookies',
26
+ 'auth_headers',
27
+ 'private_paths',
28
+ 'operator_memory',
29
+ 'raw_runtime_logs',
30
+ 'raw_stdout',
31
+ 'raw_stderr',
32
+ 'request_response_bodies',
33
+ 'private_target_identifiers',
34
+ )
35
+
36
+ PUBLIC_SAFE_FIELDS = (
37
+ 'scope_ref',
38
+ 'policy_decision_status',
39
+ 'reason_code',
40
+ 'prepared_spec_ref',
41
+ 'approved_spec_ref',
42
+ 'runner_receipt_ref',
43
+ 'execution_truth_label',
44
+ 'evidence_review_ref',
45
+ 'validation_receipt_ref',
46
+ 'non_claims',
47
+ )
48
+
49
+ APPROVAL_UX_STEPS = (
50
+ 'show_scope_before_action',
51
+ 'show_policy_decision',
52
+ 'show_prepared_spec_as_proposal',
53
+ 'show_approved_spec_as_authority_boundary',
54
+ 'show_runner_supervision_state',
55
+ 'show_dry_run_live_truth',
56
+ 'show_evidence_review_and_non_claims',
57
+ 'require_operator_confirmation_for_sensitive_actions',
58
+ )
59
+
60
+ REQUIRED_NON_CLAIMS = (
61
+ 'does_not_authorize_live_target_execution',
62
+ 'does_not_turn_chat_text_into_command_authority',
63
+ 'does_not_publish_private_operator_state',
64
+ 'does_not_claim_live_vulnerability_discovery_from_dry_run',
65
+ 'does_not_implement_openclaw_mcp_or_a2a_adapter',
66
+ )
67
+
68
+ COMMAND_AUTHORITY_STOP_REASONS = (
69
+ 'chat_text_contains_command',
70
+ 'missing_policy_decision',
71
+ 'missing_prepared_spec',
72
+ 'missing_approved_spec',
73
+ 'prepared_spec_treated_as_approved',
74
+ 'missing_runner_supervision',
75
+ )
76
+
77
+ ROLLBACK_STOP_STATES = (
78
+ 'scope_ambiguity',
79
+ 'owner_review_required',
80
+ 'pause_requested',
81
+ 'abort_requested',
82
+ 'cooldown_required',
83
+ 'validation_failed',
84
+ 'redaction_failed',
85
+ 'dry_run_live_truth_ambiguous',
86
+ )
87
+
88
+
89
+ def openclaw_redaction_matrix() -> dict[str, Any]:
90
+ outputs = []
91
+ for channel in CHANNELS:
92
+ public = channel != 'private_operator_output'
93
+ outputs.append({
94
+ 'channel': channel,
95
+ 'public_safe': public,
96
+ 'requires_redaction_before_send': True,
97
+ 'always_redact': list(ALWAYS_REDACT),
98
+ 'allowed_fields': list(PUBLIC_SAFE_FIELDS) if public else list(PUBLIC_SAFE_FIELDS) + ['operator_only_notes'],
99
+ 'blocked_fields': list(ALWAYS_REDACT),
100
+ 'non_claims_required': list(REQUIRED_NON_CLAIMS),
101
+ })
102
+ return {
103
+ 'artifact_type': 'openclaw_redaction_output_matrix',
104
+ 'schema_version': 'v0.1',
105
+ 'target_carrier': 'openclaw',
106
+ 'adapter_status': 'not_implemented',
107
+ 'outputs': outputs,
108
+ 'non_claims': list(REQUIRED_NON_CLAIMS),
109
+ }
110
+
111
+
112
+ def openclaw_approval_ux_sketch() -> dict[str, Any]:
113
+ return {
114
+ 'artifact_type': 'openclaw_approval_ux_sketch',
115
+ 'schema_version': 'v0.1',
116
+ 'target_carrier': 'openclaw',
117
+ 'adapter_status': 'not_implemented',
118
+ 'steps': [
119
+ {
120
+ 'step': 'show_scope_before_action',
121
+ 'required_artifact': 'scope/input',
122
+ 'authority_boundary': 'operator_scope',
123
+ },
124
+ {
125
+ 'step': 'show_policy_decision',
126
+ 'required_artifact': 'PolicyDecision',
127
+ 'authority_boundary': 'ravenclaw_policy_auditor',
128
+ },
129
+ {
130
+ 'step': 'show_prepared_spec_as_proposal',
131
+ 'required_artifact': 'PreparedExecutionSpec',
132
+ 'authority_boundary': 'proposal_not_execution_authority',
133
+ },
134
+ {
135
+ 'step': 'show_approved_spec_as_authority_boundary',
136
+ 'required_artifact': 'ApprovedExecutionSpec',
137
+ 'authority_boundary': 'execution_engine_input',
138
+ },
139
+ {
140
+ 'step': 'show_runner_supervision_state',
141
+ 'required_artifact': 'GovSupervisionPlan/GovRunnerLease/GovRunnerReceipt',
142
+ 'authority_boundary': 'govengine_runner_supervision',
143
+ },
144
+ {
145
+ 'step': 'show_dry_run_live_truth',
146
+ 'required_artifact': 'ExecutionReceipt',
147
+ 'authority_boundary': 'receipt_truth_label',
148
+ },
149
+ {
150
+ 'step': 'show_evidence_review_and_non_claims',
151
+ 'required_artifact': 'GovEvidenceQualification/GovReviewResult',
152
+ 'authority_boundary': 'evidence_review_not_live_vuln_claim',
153
+ },
154
+ {
155
+ 'step': 'require_operator_confirmation_for_sensitive_actions',
156
+ 'required_artifact': 'ApprovalRequest',
157
+ 'authority_boundary': 'operator_confirmation',
158
+ },
159
+ ],
160
+ 'required_step_order': list(APPROVAL_UX_STEPS),
161
+ 'non_claims': list(REQUIRED_NON_CLAIMS),
162
+ }
163
+
164
+
165
+ def openclaw_command_authority_policy() -> dict[str, Any]:
166
+ return {
167
+ 'artifact_type': 'openclaw_command_authority_policy',
168
+ 'schema_version': 'v0.1',
169
+ 'target_carrier': 'openclaw',
170
+ 'adapter_status': 'not_implemented',
171
+ 'required_authority_chain': [
172
+ 'operator_scope',
173
+ 'policy_decision',
174
+ 'prepared_execution_spec',
175
+ 'approved_execution_spec',
176
+ 'runner_supervision',
177
+ 'execution_receipt',
178
+ ],
179
+ 'blocked_inputs': [
180
+ 'chat_text_command',
181
+ 'model_prose_command',
182
+ 'raw_shell_snippet',
183
+ 'unapproved_tool_call',
184
+ 'prepared_spec_without_approval',
185
+ ],
186
+ 'stop_reasons': list(COMMAND_AUTHORITY_STOP_REASONS),
187
+ 'non_claims': list(REQUIRED_NON_CLAIMS),
188
+ }
189
+
190
+
191
+ def evaluate_command_authority_request(request: Mapping[str, Any]) -> dict[str, Any]:
192
+ reasons: list[str] = []
193
+ if request.get('chat_text_contains_command') is True:
194
+ reasons.append('chat_text_contains_command')
195
+ if request.get('policy_decision') != 'approved':
196
+ reasons.append('missing_policy_decision')
197
+ if not request.get('prepared_spec_ref'):
198
+ reasons.append('missing_prepared_spec')
199
+ if not request.get('approved_spec_ref'):
200
+ reasons.append('missing_approved_spec')
201
+ if request.get('prepared_spec_ref') and request.get('prepared_spec_ref') == request.get('approved_spec_ref'):
202
+ reasons.append('prepared_spec_treated_as_approved')
203
+ if request.get('runner_supervision_status') != 'ready':
204
+ reasons.append('missing_runner_supervision')
205
+ return {
206
+ 'status': 'blocked' if reasons else 'ready_for_ravenclaw_execution_engine',
207
+ 'stop_reasons': reasons,
208
+ 'non_claims': list(REQUIRED_NON_CLAIMS),
209
+ }
210
+
211
+
212
+ def openclaw_rollback_stop_contract() -> dict[str, Any]:
213
+ return {
214
+ 'artifact_type': 'openclaw_rollback_stop_contract',
215
+ 'schema_version': 'v0.1',
216
+ 'target_carrier': 'openclaw',
217
+ 'adapter_status': 'not_implemented',
218
+ 'states': list(ROLLBACK_STOP_STATES),
219
+ 'required_propagation': [
220
+ 'surface_to_operator',
221
+ 'preserve_structured_reason',
222
+ 'block_execution_until_reviewed',
223
+ 'record_validation_receipt_ref',
224
+ ],
225
+ 'non_claims': list(REQUIRED_NON_CLAIMS),
226
+ }
227
+
228
+
229
+ def evaluate_rollback_stop_signal(signal: Mapping[str, Any]) -> dict[str, Any]:
230
+ state = str(signal.get('state') or '').strip()
231
+ receipt_ref = str(signal.get('validation_receipt_ref') or '').strip()
232
+ operator_visible = signal.get('operator_visible') is True
233
+ structured_reason = str(signal.get('reason_code') or '').strip()
234
+ failed = []
235
+ if state not in ROLLBACK_STOP_STATES:
236
+ failed.append('unknown_stop_state')
237
+ if not operator_visible:
238
+ failed.append('not_operator_visible')
239
+ if not structured_reason:
240
+ failed.append('missing_structured_reason')
241
+ if state == 'validation_failed' and not receipt_ref:
242
+ failed.append('missing_validation_receipt_ref')
243
+ return {
244
+ 'status': 'propagated' if not failed else 'blocked',
245
+ 'failed_checks': failed,
246
+ 'state': state,
247
+ 'non_claims': list(REQUIRED_NON_CLAIMS),
248
+ }
249
+
250
+
251
+ def evaluate_openclaw_readiness(
252
+ matrix: Mapping[str, Any],
253
+ ux: Mapping[str, Any],
254
+ ) -> dict[str, Any]:
255
+ outputs = [item for item in matrix.get('outputs', []) if isinstance(item, Mapping)]
256
+ steps = [item for item in ux.get('steps', []) if isinstance(item, Mapping)]
257
+ step_order = [str(item.get('step')) for item in steps]
258
+ public_outputs = [item for item in outputs if item.get('public_safe') is True]
259
+
260
+ checks = {
261
+ 'matrix_artifact_type': matrix.get('artifact_type') == 'openclaw_redaction_output_matrix',
262
+ 'ux_artifact_type': ux.get('artifact_type') == 'openclaw_approval_ux_sketch',
263
+ 'adapter_not_implemented': matrix.get('adapter_status') == 'not_implemented'
264
+ and ux.get('adapter_status') == 'not_implemented',
265
+ 'all_channels_present': [str(item.get('channel')) for item in outputs] == list(CHANNELS),
266
+ 'all_channels_redact_before_send': all(item.get('requires_redaction_before_send') is True for item in outputs),
267
+ 'public_outputs_block_secrets': all(
268
+ set(ALWAYS_REDACT).issubset(set(str(field) for field in item.get('blocked_fields', [])))
269
+ for item in public_outputs
270
+ ),
271
+ 'public_outputs_require_non_claims': all(
272
+ set(REQUIRED_NON_CLAIMS).issubset(set(str(claim) for claim in item.get('non_claims_required', [])))
273
+ for item in public_outputs
274
+ ),
275
+ 'approval_step_order': step_order == list(APPROVAL_UX_STEPS),
276
+ 'prepared_before_approved': step_order.index('show_prepared_spec_as_proposal')
277
+ < step_order.index('show_approved_spec_as_authority_boundary')
278
+ if set(('show_prepared_spec_as_proposal', 'show_approved_spec_as_authority_boundary')).issubset(step_order)
279
+ else False,
280
+ 'command_policy_blocks_chat_authority': evaluate_command_authority_request({
281
+ 'chat_text_contains_command': True,
282
+ 'policy_decision': 'approved',
283
+ 'prepared_spec_ref': 'prepared-1',
284
+ 'approved_spec_ref': 'approved-1',
285
+ 'runner_supervision_status': 'ready',
286
+ })['status'] == 'blocked',
287
+ 'rollback_contract_requires_operator_visibility': evaluate_rollback_stop_signal({
288
+ 'state': 'abort_requested',
289
+ 'reason_code': 'operator_abort',
290
+ 'operator_visible': False,
291
+ })['status'] == 'blocked',
292
+ }
293
+ failed = [name for name, passed in checks.items() if not passed]
294
+ return {
295
+ 'status': 'passed' if not failed else 'failed',
296
+ 'checks': checks,
297
+ 'failed_checks': failed,
298
+ 'non_claims': list(REQUIRED_NON_CLAIMS),
299
+ }
300
+
301
+
302
+ def openclaw_readiness_status() -> dict[str, Any]:
303
+ return evaluate_openclaw_readiness(openclaw_redaction_matrix(), openclaw_approval_ux_sketch())
@@ -0,0 +1,163 @@
1
+ from __future__ import annotations
2
+
3
+ """Ravenclaw security-profile boundary metadata.
4
+
5
+ This module is Ravenclaw-owned. It describes the security runtime/profile that
6
+ consumes GovEngine and SCLite surfaces; it does not create a carrier adapter or
7
+ move Ravenclaw security semantics into GovEngine.
8
+ """
9
+
10
+ from pathlib import Path
11
+ from typing import Any, Mapping
12
+
13
+
14
+ SCHEMA_VERSION = 'v0.1'
15
+ PROFILE_NAME = 'ravenclaw-security'
16
+ PROFILE_DOMAIN = 'security-research-runtime'
17
+
18
+ REQUIRED_GOVENGINE_SURFACES = (
19
+ 'artifact_governance_core',
20
+ 'planning_contracts_core',
21
+ 'admission_policy_core',
22
+ 'evidence_review_core',
23
+ 'controlled_execution_core',
24
+ 'security_profile_helpers',
25
+ )
26
+
27
+ REQUIRED_REFERENCE_PATHS = (
28
+ 'references/ravenclaw-security-profile-boundary.md',
29
+ 'references/openclaw-adapter-readiness-packet-2026-05-20.md',
30
+ 'references/openclaw-redaction-output-matrix.md',
31
+ 'references/openclaw-approval-ux-sketch.md',
32
+ 'references/openclaw-command-authority-and-rollback-tests.md',
33
+ 'references/carrier-readiness-checklist.md',
34
+ 'references/openclaw-adapter-contract-map.md',
35
+ )
36
+
37
+ OWNED_SEMANTICS = (
38
+ 'security_research_runtime_profile',
39
+ 'finding_taxonomy',
40
+ 'scope_and_policy_interpretation',
41
+ 'logdash_operator_visibility',
42
+ 'public_demo_and_snapshot_projection',
43
+ 'host_adapter_projection',
44
+ )
45
+
46
+ EXTERNAL_AUTHORITIES = {
47
+ 'govengine': (
48
+ 'kernel_boundary_report',
49
+ 'runtime_shell',
50
+ 'planning',
51
+ 'admission',
52
+ 'execution.supervision',
53
+ 'review',
54
+ 'security_profile',
55
+ ),
56
+ 'sclite': (
57
+ 'lifecycle_schema_validation',
58
+ 'artifact_chain_validation',
59
+ 'review_bundle_verdicts',
60
+ ),
61
+ }
62
+
63
+ ADAPTER_READINESS_GATES = (
64
+ 'scope_ux',
65
+ 'redaction',
66
+ 'command_authority',
67
+ 'lifecycle_artifacts',
68
+ 'rollback',
69
+ 'public_private_boundary',
70
+ )
71
+
72
+ FORBIDDEN_PROFILE_CLAIMS = (
73
+ 'govengine_kernel_ownership',
74
+ 'sclite_schema_authority',
75
+ 'carrier_adapter_implementation',
76
+ 'live_execution_authority',
77
+ 'credential_or_key_store',
78
+ 'production_deployment_readiness',
79
+ )
80
+
81
+
82
+ def security_profile_manifest() -> dict[str, Any]:
83
+ return {
84
+ 'artifact_type': 'ravenclaw_security_profile_manifest',
85
+ 'schema_version': SCHEMA_VERSION,
86
+ 'profile': {
87
+ 'name': PROFILE_NAME,
88
+ 'domain': PROFILE_DOMAIN,
89
+ 'role': 'reference_security_runtime_profile',
90
+ 'runtime_owner': 'ravenclaw',
91
+ },
92
+ 'package_chain': {
93
+ 'ravenclaw': '0.16.1',
94
+ 'ravenclaw_distribution': 'ravenclaw-security',
95
+ 'govengine': '>=0.7.0,<0.8',
96
+ 'sclite-core': '>=0.5.1,<0.6',
97
+ },
98
+ 'required_govengine_surfaces': list(REQUIRED_GOVENGINE_SURFACES),
99
+ 'owned_semantics': list(OWNED_SEMANTICS),
100
+ 'external_authorities': {key: list(value) for key, value in EXTERNAL_AUTHORITIES.items()},
101
+ 'adapter_readiness': {
102
+ 'target_carrier': 'openclaw',
103
+ 'status': 'readiness_packet_only',
104
+ 'packet_path': 'references/openclaw-adapter-readiness-packet-2026-05-20.md',
105
+ 'required_gates': list(ADAPTER_READINESS_GATES),
106
+ 'carrier_order': ['openclaw', 'mcp_later', 'a2a_last_or_example_first'],
107
+ },
108
+ 'required_reference_paths': list(REQUIRED_REFERENCE_PATHS),
109
+ 'forbidden_profile_claims': list(FORBIDDEN_PROFILE_CLAIMS),
110
+ 'non_claims': [
111
+ 'Does not make Ravenclaw own GovEngine kernel APIs.',
112
+ 'Does not make Ravenclaw own SCLite schemas or review-bundle verdict authority.',
113
+ 'Does not implement OpenClaw, MCP, or A2A adapters.',
114
+ 'Does not authorize live target execution.',
115
+ 'Does not claim production deployment readiness.',
116
+ ],
117
+ }
118
+
119
+
120
+ def evaluate_security_profile_manifest(
121
+ manifest: Mapping[str, Any],
122
+ *,
123
+ root: Path | None = None,
124
+ ) -> dict[str, Any]:
125
+ profile = manifest.get('profile') if isinstance(manifest.get('profile'), Mapping) else {}
126
+ adapter = manifest.get('adapter_readiness') if isinstance(manifest.get('adapter_readiness'), Mapping) else {}
127
+ package_chain = manifest.get('package_chain') if isinstance(manifest.get('package_chain'), Mapping) else {}
128
+ required_paths = [str(path) for path in manifest.get('required_reference_paths', [])]
129
+
130
+ checks = {
131
+ 'artifact_type': manifest.get('artifact_type') == 'ravenclaw_security_profile_manifest',
132
+ 'schema_version': manifest.get('schema_version') == SCHEMA_VERSION,
133
+ 'profile_name': profile.get('name') == PROFILE_NAME,
134
+ 'profile_domain': profile.get('domain') == PROFILE_DOMAIN,
135
+ 'package_chain': package_chain.get('govengine') == '>=0.7.0,<0.8'
136
+ and package_chain.get('sclite-core') == '>=0.5.1,<0.6',
137
+ 'govengine_surfaces': list(manifest.get('required_govengine_surfaces', [])) == list(REQUIRED_GOVENGINE_SURFACES),
138
+ 'ravenclaw_owned_semantics': set(OWNED_SEMANTICS).issubset(set(str(item) for item in manifest.get('owned_semantics', []))),
139
+ 'adapter_readiness_packet_only': adapter.get('status') == 'readiness_packet_only',
140
+ 'adapter_readiness_gates': list(adapter.get('required_gates', [])) == list(ADAPTER_READINESS_GATES),
141
+ 'carrier_order': list(adapter.get('carrier_order', [])) == ['openclaw', 'mcp_later', 'a2a_last_or_example_first'],
142
+ 'forbidden_claims': set(FORBIDDEN_PROFILE_CLAIMS).issubset(
143
+ set(str(item) for item in manifest.get('forbidden_profile_claims', []))
144
+ ),
145
+ }
146
+ missing_paths: list[str] = []
147
+ if root is not None:
148
+ missing_paths = [path for path in required_paths if not (root / path).exists()]
149
+ checks['required_reference_paths'] = not missing_paths
150
+ failed = [name for name, passed in checks.items() if not passed]
151
+ return {
152
+ 'status': 'passed' if not failed else 'failed',
153
+ 'profile_name': profile.get('name'),
154
+ 'profile_domain': profile.get('domain'),
155
+ 'checks': checks,
156
+ 'failed_checks': failed,
157
+ 'missing_paths': missing_paths,
158
+ 'non_claims': list(manifest.get('non_claims', [])),
159
+ }
160
+
161
+
162
+ def ravenclaw_security_profile_status(root: Path | None = None) -> dict[str, Any]:
163
+ return evaluate_security_profile_manifest(security_profile_manifest(), root=root)
@@ -0,0 +1,238 @@
1
+ Metadata-Version: 2.4
2
+ Name: ravenclaw-security
3
+ Version: 0.16.1
4
+ Summary: Governance-first security research runtime with policy-gated execution and public-safe proof artifacts
5
+ Author: Krzysztof Probola
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/rozmiarD/ravenclaw
8
+ Project-URL: Repository, https://github.com/rozmiarD/ravenclaw
9
+ Project-URL: Issues, https://github.com/rozmiarD/ravenclaw/issues
10
+ Project-URL: Changelog, https://github.com/rozmiarD/ravenclaw/blob/main/CHANGELOG.md
11
+ Project-URL: Documentation, https://github.com/rozmiarD/ravenclaw#readme
12
+ Keywords: security,governance,runtime,contracts,dry-run,evidence
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Information Technology
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3 :: Only
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Security
22
+ Requires-Python: >=3.11
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: PyYAML<7,>=6
26
+ Requires-Dist: sclite-core<0.6,>=0.5.1
27
+ Requires-Dist: govengine<0.8,>=0.7.0
28
+ Provides-Extra: logdash
29
+ Requires-Dist: Flask<4,>=3; extra == "logdash"
30
+ Provides-Extra: dev
31
+ Requires-Dist: pytest<9,>=8; extra == "dev"
32
+ Requires-Dist: Flask<4,>=3; extra == "dev"
33
+ Requires-Dist: PyYAML<7,>=6; extra == "dev"
34
+ Requires-Dist: build<2,>=1; extra == "dev"
35
+ Requires-Dist: twine<7,>=5; extra == "dev"
36
+ Dynamic: license-file
37
+
38
+ # RAVENCLAW
39
+
40
+ [![CI: pytest](https://github.com/rozmiarD/ravenclaw/actions/workflows/pytest.yml/badge.svg)](https://github.com/rozmiarD/ravenclaw/actions/workflows/pytest.yml)
41
+ [![Source: Ravenclaw 0.16.1](https://img.shields.io/badge/source-Ravenclaw%200.16.1-blueviolet.svg)](pyproject.toml)
42
+ [![Python: 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](pyproject.toml)
43
+ [![Dependency: GovEngine >=0.7.0](https://img.shields.io/badge/dependency-GovEngine%20%3E%3D0.7.0-informational.svg)](https://github.com/rozmiarD/GovEngine)
44
+ [![Dependency: SCLite 0.5.1](https://img.shields.io/badge/dependency-SCLite%200.5.1-informational.svg)](https://github.com/rozmiarD/SCLite)
45
+ [![License: MIT](https://img.shields.io/badge/license-MIT-yellow.svg)](LICENSE)
46
+
47
+ **RAVENCLAW is a governance-first security research runtime for bounded, auditable security operations.**
48
+
49
+
50
+ It is built around a simple idea:
51
+ advanced autonomy is only useful when it remains bounded, observable, and accountable.
52
+
53
+ ## What Ravenclaw does
54
+
55
+ Ravenclaw is a multi-layer runtime for running security workflows under explicit governance.
56
+ It combines:
57
+ - deterministic planning and runtime contracts
58
+ - policy and approval gates before execution
59
+ - constrained execution through a dedicated execution engine
60
+ - artifact analysis and evidence-oriented qualification
61
+ - operator-facing visibility through Logdash
62
+
63
+ The goal is not maximum automation.
64
+ The goal is reliable autonomy under governance.
65
+
66
+ The public repository should be read as a **public core** of that system:
67
+ a publishable runtime/control-plane artifact with explicit governance and validation surfaces, not a claim that every private operator integration is bundled here.
68
+
69
+ ## What makes it different
70
+
71
+ Ravenclaw is not an unconstrained offensive automation system.
72
+ Its core design claim is narrower:
73
+ - planning, authorization, execution, and interpretation are separated
74
+ - policy is enforced in runtime paths, not only described in prompts or docs
75
+ - operator approval remains explicit for sensitive actions
76
+ - evidence quality and replayability matter as much as action generation
77
+
78
+ In short, Ravenclaw optimizes for useful actions that stay within policy, scope, and review boundaries.
79
+
80
+ Ravenclaw now consumes **GovEngine** for reusable governed-runtime kernel mechanics and **SCLite** for contract lifecycle artifacts.
81
+
82
+ The current reusable direction is a small **Security Contract Layer** backed by Ravenclaw Runtime artifacts: scope binding, policy decisions, prepared/approved execution specs, execution receipts, evidence summaries, and runtime truth. The reusable contract core is now the standalone `sclite` package/repo, while Ravenclaw is being shaped as the reference security-research runtime/profile over GovEngine + SCLite. OpenClaw, MCP, and A2A are potential later carriers for these contracts, not new protocols Ravenclaw is trying to own.
83
+
84
+ The first PyPI package line is `ravenclaw-security==0.16.1`. It exposes the public
85
+ Ravenclaw security-profile and OpenClaw readiness contract helpers. The full
86
+ runtime, demo, Logdash, and validation surfaces remain source/reference
87
+ repository workflows in this release.
88
+
89
+ ## Safe quickstart
90
+
91
+ The current official public-safe path is local and dry-run oriented.
92
+
93
+ Shortest reviewer path:
94
+ 1. `INSTALL.md`
95
+ 2. `DEMO.md`
96
+ 3. `REVIEWER_VALIDATION_GUIDE.md`
97
+ 4. `QUALITY_SIGNALS.md`
98
+ 5. `PUBLIC_STATUS.md`
99
+
100
+ Broader navigation lives in `DOCS_MAP.md`; architecture depth starts with `ARCHITECTURE_OVERVIEW.md`.
101
+
102
+ This path is intentionally narrow and honest.
103
+ It shows the governed flow with a small one-command demo entrypoint (`bin/demo`), a shared bootstrap path (`scripts/bootstrap_public_demo.sh`), and an explicit `RAVENCLAW_MODE=demo` delivery profile, without pretending the repo already has a polished one-command public deployment story.
104
+
105
+ ## Architecture at a glance
106
+
107
+ High-level governed flow:
108
+
109
+ `scope/input -> planner -> policy gate / auditor -> approved execution spec -> execution engine -> analysis -> operator visibility`
110
+
111
+ Main runtime layers:
112
+ - **Planner**: turns scope and operator input into structured campaign/runtime intent
113
+ - **Policy gate / Auditor**: enforces scope, tool, auth, and aggression rules before execution
114
+ - **Execution engine**: the only layer allowed to build and run final commands
115
+ - **Analysis / qualification**: turns raw artifacts into bounded findings and summaries
116
+ - **Logdash**: operator-facing control plane for visibility, control, and state truth
117
+
118
+ See `ARCHITECTURE_OVERVIEW.md` for the short version and `ARCHITECTURE.md` for the deeper map.
119
+
120
+ ## Public maturity and status
121
+
122
+ Ravenclaw is not a flat-maturity repository.
123
+ Some parts are stable enough to be treated as strong public reference surfaces, while others remain experimental or local/internal.
124
+
125
+ Use `PUBLIC_STATUS.md` as the canonical public maturity guide.
126
+ For public proof and trust surfaces, use `VALIDATION.md`, `QUALITY_SIGNALS.md`, and `references/public-safe-proof-walkthrough.md`.
127
+ For the public-core/private-overlay split, read `references/public-core-private-overlay-boundary.md`.
128
+ For trusted-core authority boundaries, failure modes, and non-guarantees, read `THREAT_MODEL.md`.
129
+ For the emerging contract layer, read `SECURITY_CONTRACT_LAYER.md` and `references/approved-execution-spec-v0.1.md`.
130
+ For Logdash operator-facing control/recovery semantics, see `references/logdash-operator-truth-contracts.md`.
131
+
132
+ ## Install and run posture
133
+
134
+ Fastest public-safe start:
135
+
136
+ ```bash
137
+ ./scripts/bootstrap_public_demo.sh demo
138
+ ```
139
+
140
+ Reusable public demo bundle:
141
+
142
+ ```bash
143
+ ./scripts/bootstrap_public_demo.sh bundle
144
+ ```
145
+
146
+ Reviewer-facing package-chain scenario:
147
+
148
+ ```bash
149
+ ./scripts/bootstrap_public_demo.sh scenario
150
+ ```
151
+
152
+ That scenario generates a local dry-run summary tying Ravenclaw demo artifacts to the GovEngine `security_profile` boundary and SCLite lifecycle-chain verification. In demo mode, Ravenclaw also records a deterministic GovEngine signing/trust-port example on the execution ticket, binding the ticket evidence to the execution-contract digest without claiming PKI, CA, KMS, key-store, or production identity ownership.
153
+
154
+ For containerized public-demo bring-up, see `.devcontainer/` and `compose.demo.yaml`.
155
+
156
+
157
+ Today, the repo is strongest as:
158
+ - a governance-first runtime architecture
159
+ - a research platform with real control and policy surfaces
160
+ - a codebase that can be inspected seriously
161
+
162
+ It now has an official public-safe local dry-run path, but it is not yet in its final lowest-friction form.
163
+ That remaining gap is real and still an active priority.
164
+
165
+ ## Who this is for
166
+
167
+ Ravenclaw is best suited to technically serious readers who care about:
168
+ - governance-first security automation
169
+ - policy-gated execution
170
+ - operator-visible control and recovery
171
+ - contract-oriented runtime design
172
+ - evidence and replayability
173
+
174
+ If you want a clearer fit/non-fit guide, read `AUDIENCE.md`.
175
+
176
+ ## Limits and non-goals
177
+
178
+ Ravenclaw is **not**:
179
+ - an unconstrained offensive automation platform
180
+ - an opaque autonomous attacker
181
+ - a replacement for operator judgment
182
+ - a guarantee of security outcomes
183
+ - a polished consumer product or hosted service
184
+ - a beginner-first security starter kit
185
+
186
+ It is intended for authorized security research and controlled environments.
187
+ Its value depends on bounded behavior, explicit governance, and operator visibility.
188
+
189
+ ## Why this project exists
190
+
191
+ Many autonomous security systems have a hard tradeoff:
192
+ - rigid systems can be safe but not useful enough;
193
+ - unconstrained systems can act quickly but are hard to trust.
194
+
195
+ Ravenclaw separates proposal, approval, execution, and review so adaptive parts can help without owning final authority.
196
+
197
+ For the short public thesis, read `WHY_RAVENCLAW.md`.
198
+
199
+ ## Repository guide
200
+
201
+ Main areas:
202
+ - `engine/` - planning, runtime orchestration, policy, execution, qualification, evaluation
203
+ - `logdash/` - operator-facing dashboard and control plane
204
+ - `tests/` and `engine/tests/` - regression and contract coverage
205
+ - `references/` - short reference docs for important contracts and boundaries
206
+ - `implementation-plans/` - bounded plans for meaningful repo/runtime improvement waves
207
+
208
+ ## Release and public-release framing
209
+
210
+ Version milestones are tracked in `VERSION_ROADMAP.md`.
211
+ High-level open-source/public-release direction is tracked in `OPEN_SOURCE_1_0_PLAN.md`.
212
+
213
+ Current public truth:
214
+ - the technical core has real governance, contract, and validation surfaces
215
+ - the public repo is best understood as a governance-first public core, not a full private operator environment
216
+ - the public repo shape is improving, but is still being refined
217
+ - public clarity, demo usability, and proof surfaces are better than before, but remain active work
218
+
219
+ ## Documentation map
220
+
221
+ For intent-based navigation, use `DOCS_MAP.md`.
222
+ For final publication workflow, use `PUBLISHING.md`.
223
+
224
+ ## Deeper reading
225
+
226
+ If you want more depth, read in this order:
227
+ 1. `PUBLIC_STATUS.md`
228
+ 2. `AUDIENCE.md`
229
+ 3. `QUALITY_SIGNALS.md`
230
+ 4. `VALIDATION.md`
231
+ 5. `DOCS_MAP.md`
232
+ 6. `ARCHITECTURE_OVERVIEW.md`
233
+ 7. `WHY_RAVENCLAW.md`
234
+ 8. `ARCHITECTURE.md`
235
+ 9. `STATE_FILES.md`
236
+ 10. `OPEN_SOURCE_1_0_PLAN.md`
237
+
238
+ Ravenclaw should be understood as intelligence under governance: adaptive enough to be useful, bounded enough to remain inspectable and trustworthy.
@@ -0,0 +1,12 @@
1
+ LICENSE
2
+ MANIFEST.in
3
+ README.md
4
+ pyproject.toml
5
+ ravenclaw/__init__.py
6
+ ravenclaw/openclaw_readiness.py
7
+ ravenclaw/security_profile.py
8
+ ravenclaw_security.egg-info/PKG-INFO
9
+ ravenclaw_security.egg-info/SOURCES.txt
10
+ ravenclaw_security.egg-info/dependency_links.txt
11
+ ravenclaw_security.egg-info/requires.txt
12
+ ravenclaw_security.egg-info/top_level.txt
@@ -0,0 +1,13 @@
1
+ PyYAML<7,>=6
2
+ sclite-core<0.6,>=0.5.1
3
+ govengine<0.8,>=0.7.0
4
+
5
+ [dev]
6
+ pytest<9,>=8
7
+ Flask<4,>=3
8
+ PyYAML<7,>=6
9
+ build<2,>=1
10
+ twine<7,>=5
11
+
12
+ [logdash]
13
+ Flask<4,>=3
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+