data-olympus 0.3.3__tar.gz → 0.3.4__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.
- {data_olympus-0.3.3 → data_olympus-0.3.4}/CHANGELOG.md +31 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/PKG-INFO +1 -1
- {data_olympus-0.3.3 → data_olympus-0.3.4}/pyproject.toml +1 -1
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/enforce_policy.py +15 -1
- {data_olympus-0.3.3 → data_olympus-0.3.4}/.gitignore +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/LICENSE +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/NOTICE +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/README.md +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/SPEC.md +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/benchmarks/README.md +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/bin/_kb_detect_workspace.sh +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/bin/_kb_enforce.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/bin/_kb_fallback.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/bin/kb +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/bin/kb-enforce-hook +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/bin/opencode/data-olympus-gate.ts +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/deploy/k8s/README.md +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/deploy/k8s/read-replica/README.md +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/docs/releases/README.md +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/example-bundle/projects/acme-app/README.md +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/example-bundle/projects/acme-app/components/api/README.md +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/__init__.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/audit_log.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/audit_trailers.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/auth.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/cli/__init__.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/cli/import_cmd.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/cli/indexgen.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/cli/main.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/cli/report_cmd.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/config.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/cooccurrence.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/dedup.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/durable.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/embeddings.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/format/__init__.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/format/document.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/format/frontmatter.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/format/lint.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/format/validate.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/git_ops.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/health.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/importer/__init__.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/importer/adr.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/importer/flat.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/importer/model.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/importer/okf.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/importer/run.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/importer/stamp.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/index.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/markdown_parse.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/models.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/onboarding.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/onboarding_inflight.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/onboarding_playbook.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/pending.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/principals.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/prompts.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/push_queue.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/query_expansion.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/rate_limit.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/refresh.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/report.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/rest_api.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/safe_id.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/search_gate.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/search_shortcut.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/server.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/session_metrics.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/setup_wizard.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/thin_pointer.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/tools_audit.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/tools_enforce.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/tools_onboarding.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/tools_read.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/tools_write.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/trigram.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/viewer/__init__.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/viewer/generator.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/worktrees.py +0 -0
- {data_olympus-0.3.3 → data_olympus-0.3.4}/src/data_olympus/write_gate.py +0 -0
|
@@ -12,6 +12,37 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.3.4] - 2026-07-05
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- **Enforcement gate false-positives on prose that merely mentions a governed
|
|
20
|
+
keyword, for tool calls with a known file path.** `IntentClassifier.classify`
|
|
21
|
+
scanned `action_diff` (the raw Write/Edit content or Bash command text, up
|
|
22
|
+
to 4000 chars) for free-text keywords like `auth`, `rls`, `tenant`, `secret`
|
|
23
|
+
in addition to `intent`, for every tool call. A scratch write whose text
|
|
24
|
+
simply discussed one of those words as a topic - not an actual governed
|
|
25
|
+
action - tripped the pre-tool gate regardless of the real (ungoverned)
|
|
26
|
+
write target, and a fresh `kb_consult` call did not clear it because the
|
|
27
|
+
consult's own classification (`intent`-only) and the gate's classification
|
|
28
|
+
(`intent + action_diff`) disagreed on whether the action was governed.
|
|
29
|
+
Keyword matching on `action_diff` now only applies when the tool call
|
|
30
|
+
carries no `action_path` (Bash commands and OpenCode's `patch`, whose
|
|
31
|
+
content is the only signal available); when an `action_path` is present
|
|
32
|
+
(Write/Edit/MultiEdit), classification uses the path globs and dependency
|
|
33
|
+
command patterns, unchanged, so this keeps full detection for real governed
|
|
34
|
+
edits (a patch touching `package.json`) without flagging unrelated prose in
|
|
35
|
+
files the path globs don't consider governed. Found via a company-knowledge
|
|
36
|
+
KB audit session that reproduced it live (a scratch `.txt` file containing
|
|
37
|
+
"RLS tenant boundaries auth trust model" was blocked with no governed path
|
|
38
|
+
or command in sight); independently reviewed via `codex exec` before
|
|
39
|
+
release.
|
|
40
|
+
- The audit's other finding (CX1: the pre-tool gate and the pre-commit
|
|
41
|
+
`report --staged` gate resolving two different workspace keys) was
|
|
42
|
+
already fixed in v0.2.0 (#64, worktree-invariant workspace key); no
|
|
43
|
+
further change needed. It was still visible in that audit only because
|
|
44
|
+
it predated the deployed kn-dev redeploy.
|
|
45
|
+
|
|
15
46
|
## [0.3.3] - 2026-07-05
|
|
16
47
|
|
|
17
48
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: data-olympus
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: Governance-grade knowledge-base format (OKF-compatible) plus CLI and single-writer MCP server
|
|
5
5
|
Project-URL: Homepage, https://github.com/knaisoma/data-olympus
|
|
6
6
|
Project-URL: Repository, https://github.com/knaisoma/data-olympus
|
|
@@ -81,7 +81,21 @@ class IntentClassifier:
|
|
|
81
81
|
action_diff: str = "",
|
|
82
82
|
) -> ClassifyResult:
|
|
83
83
|
signals: list[str] = []
|
|
84
|
-
text
|
|
84
|
+
# Free-text keyword signals always scan `intent` (a short, deliberate
|
|
85
|
+
# statement of what the agent is about to do - kb_consult's argument -
|
|
86
|
+
# so a keyword there is a real signal). They scan `action_diff` too,
|
|
87
|
+
# but ONLY when there is no `action_path`: `action_diff` is arbitrary
|
|
88
|
+
# write/command CONTENT up to 4000 chars (Write.content, Edit.new_string,
|
|
89
|
+
# Bash.command, OpenCode patch text), and when a concrete action_path is
|
|
90
|
+
# already given, path-glob matching below is the intended signal for
|
|
91
|
+
# that action - layering the free-text net on top blocked benign writes
|
|
92
|
+
# to ungoverned files that merely discussed a keyword as a topic (a
|
|
93
|
+
# scratch file quoting "RLS"/"auth" from a security standard). Bash
|
|
94
|
+
# commands and OpenCode's `patch` tool carry no action_path at all
|
|
95
|
+
# (their action_diff IS the only content available), so the free-text
|
|
96
|
+
# net still applies there - dropping it entirely would silently lose
|
|
97
|
+
# the only governed-decision signal for those two tool shapes.
|
|
98
|
+
text = intent.lower() if action_path else f"{intent} {action_diff}".lower()
|
|
85
99
|
for kw, rx in self._keyword_res:
|
|
86
100
|
if rx.search(text):
|
|
87
101
|
signals.append(f"keyword:{kw}")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{data_olympus-0.3.3 → data_olympus-0.3.4}/example-bundle/projects/acme-app/components/api/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|