groundtruth-kb 0.3.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.
- groundtruth_kb-0.3.1/.editorconfig +27 -0
- groundtruth_kb-0.3.1/.github/ISSUE_TEMPLATE/bug_report.yml +69 -0
- groundtruth_kb-0.3.1/.github/ISSUE_TEMPLATE/feature_request.yml +50 -0
- groundtruth_kb-0.3.1/.github/copilot-instructions.md +73 -0
- groundtruth_kb-0.3.1/.github/dependabot.yml +27 -0
- groundtruth_kb-0.3.1/.github/pull_request_template.md +23 -0
- groundtruth_kb-0.3.1/.github/workflows/ci.yml +67 -0
- groundtruth_kb-0.3.1/.github/workflows/codeql.yml +38 -0
- groundtruth_kb-0.3.1/.github/workflows/docs-check.yml +53 -0
- groundtruth_kb-0.3.1/.github/workflows/docs.yml +53 -0
- groundtruth_kb-0.3.1/.github/workflows/docstring-coverage.yml +29 -0
- groundtruth_kb-0.3.1/.github/workflows/publish.yml +88 -0
- groundtruth_kb-0.3.1/.github/workflows/security.yml +76 -0
- groundtruth_kb-0.3.1/.github/workflows/sonarcloud.yml +42 -0
- groundtruth_kb-0.3.1/.gitignore +12 -0
- groundtruth_kb-0.3.1/.pre-commit-config.yaml +23 -0
- groundtruth_kb-0.3.1/CHANGELOG.md +107 -0
- groundtruth_kb-0.3.1/CODE_OF_CONDUCT.md +55 -0
- groundtruth_kb-0.3.1/CONTRIBUTING.md +87 -0
- groundtruth_kb-0.3.1/LICENSE +661 -0
- groundtruth_kb-0.3.1/Makefile +38 -0
- groundtruth_kb-0.3.1/PKG-INFO +184 -0
- groundtruth_kb-0.3.1/README.md +145 -0
- groundtruth_kb-0.3.1/SECURITY.md +54 -0
- groundtruth_kb-0.3.1/docs/architecture/product-split.md +114 -0
- groundtruth_kb-0.3.1/docs/bootstrap.md +226 -0
- groundtruth_kb-0.3.1/docs/changelog.md +107 -0
- groundtruth_kb-0.3.1/docs/contributing.md +56 -0
- groundtruth_kb-0.3.1/docs/desktop-setup.md +161 -0
- groundtruth_kb-0.3.1/docs/examples/task-tracker.md +218 -0
- groundtruth_kb-0.3.1/docs/index.md +47 -0
- groundtruth_kb-0.3.1/docs/method/00-vision.md +32 -0
- groundtruth_kb-0.3.1/docs/method/01-overview.md +144 -0
- groundtruth_kb-0.3.1/docs/method/02-specifications.md +138 -0
- groundtruth_kb-0.3.1/docs/method/03-testing.md +84 -0
- groundtruth_kb-0.3.1/docs/method/04-work-items.md +94 -0
- groundtruth_kb-0.3.1/docs/method/05-governance.md +134 -0
- groundtruth_kb-0.3.1/docs/method/06-dual-agent.md +157 -0
- groundtruth_kb-0.3.1/docs/method/07-sessions.md +89 -0
- groundtruth_kb-0.3.1/docs/method/08-architecture.md +100 -0
- groundtruth_kb-0.3.1/docs/method/09-adoption.md +165 -0
- groundtruth_kb-0.3.1/docs/method/10-tooling.md +237 -0
- groundtruth_kb-0.3.1/docs/method/11-operational-configuration.md +134 -0
- groundtruth_kb-0.3.1/docs/method/12-file-bridge-automation.md +271 -0
- groundtruth_kb-0.3.1/docs/method/13-deliberation-archive.md +231 -0
- groundtruth_kb-0.3.1/docs/method/README.md +39 -0
- groundtruth_kb-0.3.1/docs/reference/assertion-language.md +200 -0
- groundtruth_kb-0.3.1/docs/reference/cli.md +495 -0
- groundtruth_kb-0.3.1/docs/reference/configuration.md +182 -0
- groundtruth_kb-0.3.1/docs/reference/templates.md +108 -0
- groundtruth_kb-0.3.1/docs/start-here.md +230 -0
- groundtruth_kb-0.3.1/examples/task-tracker/.github/workflows/build.yml +46 -0
- groundtruth_kb-0.3.1/examples/task-tracker/.github/workflows/deploy.yml +61 -0
- groundtruth_kb-0.3.1/examples/task-tracker/.github/workflows/test.yml +44 -0
- groundtruth_kb-0.3.1/examples/task-tracker/CLAUDE.md +40 -0
- groundtruth_kb-0.3.1/examples/task-tracker/Dockerfile +15 -0
- groundtruth_kb-0.3.1/examples/task-tracker/MEMORY.md +19 -0
- groundtruth_kb-0.3.1/examples/task-tracker/README.md +60 -0
- groundtruth_kb-0.3.1/examples/task-tracker/REVIEW-EXAMPLE.md +64 -0
- groundtruth_kb-0.3.1/examples/task-tracker/WALKTHROUGH.md +205 -0
- groundtruth_kb-0.3.1/examples/task-tracker/docker-compose.yml +9 -0
- groundtruth_kb-0.3.1/examples/task-tracker/groundtruth.toml +6 -0
- groundtruth_kb-0.3.1/examples/task-tracker/pyproject.toml +26 -0
- groundtruth_kb-0.3.1/examples/task-tracker/seed_kb.py +354 -0
- groundtruth_kb-0.3.1/examples/task-tracker/src/task_tracker/__init__.py +3 -0
- groundtruth_kb-0.3.1/examples/task-tracker/src/task_tracker/app.py +60 -0
- groundtruth_kb-0.3.1/examples/task-tracker/src/task_tracker/models.py +116 -0
- groundtruth_kb-0.3.1/examples/task-tracker/tests/conftest.py +21 -0
- groundtruth_kb-0.3.1/examples/task-tracker/tests/test_api.py +89 -0
- groundtruth_kb-0.3.1/mkdocs.yml +83 -0
- groundtruth_kb-0.3.1/pyproject.toml +92 -0
- groundtruth_kb-0.3.1/scripts/check_docs_cli_coverage.py +360 -0
- groundtruth_kb-0.3.1/sonar-project.properties +15 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/__init__.py +53 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/assertion_schema.py +150 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/assertions.py +732 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/bootstrap.py +260 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/bridge/__init__.py +48 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/bridge/context.py +980 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/bridge/handshake.py +209 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/bridge/launcher.py +359 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/bridge/poller.py +621 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/bridge/runtime.py +1455 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/bridge/worker.py +820 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/cli.py +660 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/config.py +146 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/db.py +3763 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/gates.py +180 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/gates_transport.py +136 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/project/__init__.py +15 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/project/doctor.py +537 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/project/manifest.py +81 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/project/profiles.py +74 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/project/scaffold.py +517 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/project/upgrade.py +203 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/seed.py +273 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/web/__init__.py +4 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/web/app.py +307 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/web/static/style.css +429 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/web/templates/assertions.html +42 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/web/templates/base.html +44 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/web/templates/dashboard.html +75 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/web/templates/env.html +51 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/web/templates/env_detail.html +47 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/web/templates/history.html +57 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/web/templates/op_detail.html +73 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/web/templates/ops.html +39 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/web/templates/pipeline.html +179 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/web/templates/spec_detail.html +114 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/web/templates/specs.html +68 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/web/templates/test_detail.html +48 -0
- groundtruth_kb-0.3.1/src/groundtruth_kb/web/templates/tests.html +47 -0
- groundtruth_kb-0.3.1/templates/BRIDGE-INVENTORY.md +98 -0
- groundtruth_kb-0.3.1/templates/CLAUDE.md +109 -0
- groundtruth_kb-0.3.1/templates/MEMORY.md +33 -0
- groundtruth_kb-0.3.1/templates/README.md +85 -0
- groundtruth_kb-0.3.1/templates/bridge-os-poller-setup-prompt.md +77 -0
- groundtruth_kb-0.3.1/templates/ci/build.yml +46 -0
- groundtruth_kb-0.3.1/templates/ci/deploy.yml +61 -0
- groundtruth_kb-0.3.1/templates/ci/test.yml +44 -0
- groundtruth_kb-0.3.1/templates/hooks/assertion-check.py +76 -0
- groundtruth_kb-0.3.1/templates/hooks/credential-scan.py +114 -0
- groundtruth_kb-0.3.1/templates/hooks/destructive-gate.py +72 -0
- groundtruth_kb-0.3.1/templates/hooks/scheduler.py +54 -0
- groundtruth_kb-0.3.1/templates/hooks/spec-classifier.py +76 -0
- groundtruth_kb-0.3.1/templates/project/.editorconfig +27 -0
- groundtruth_kb-0.3.1/templates/project/.pre-commit-config.yaml +19 -0
- groundtruth_kb-0.3.1/templates/project/AGENTS.md +137 -0
- groundtruth_kb-0.3.1/templates/project/Dockerfile +47 -0
- groundtruth_kb-0.3.1/templates/project/Makefile +26 -0
- groundtruth_kb-0.3.1/templates/project/codex-bootstrap/CODEX-REVIEW-OPERATING-CONTRACT.md +99 -0
- groundtruth_kb-0.3.1/templates/project/codex-bootstrap/CODEX-SESSION-BOOTSTRAP.md +62 -0
- groundtruth_kb-0.3.1/templates/project/codex-bootstrap/CODEX-WAY-OF-WORKING.md +83 -0
- groundtruth_kb-0.3.1/templates/project/codex-bootstrap/LOYAL-OPPOSITION-LOG.md +33 -0
- groundtruth_kb-0.3.1/templates/project/docker-compose.yml +57 -0
- groundtruth_kb-0.3.1/templates/project/env.example +34 -0
- groundtruth_kb-0.3.1/templates/project/settings.local.json +31 -0
- groundtruth_kb-0.3.1/templates/rules/bridge-poller-canonical.md +79 -0
- groundtruth_kb-0.3.1/templates/rules/loyal-opposition.md +38 -0
- groundtruth_kb-0.3.1/templates/rules/prime-bridge-collaboration-protocol.md +98 -0
- groundtruth_kb-0.3.1/templates/rules/prime-builder.md +37 -0
- groundtruth_kb-0.3.1/templates/rules/report-depth.md +67 -0
- groundtruth_kb-0.3.1/tests/conftest.py +53 -0
- groundtruth_kb-0.3.1/tests/test_ar_web_shim.py +117 -0
- groundtruth_kb-0.3.1/tests/test_assertion_schema.py +255 -0
- groundtruth_kb-0.3.1/tests/test_assertions.py +858 -0
- groundtruth_kb-0.3.1/tests/test_cli.py +582 -0
- groundtruth_kb-0.3.1/tests/test_config.py +104 -0
- groundtruth_kb-0.3.1/tests/test_db.py +387 -0
- groundtruth_kb-0.3.1/tests/test_deliberations.py +1226 -0
- groundtruth_kb-0.3.1/tests/test_gates.py +272 -0
- groundtruth_kb-0.3.1/tests/test_gates_transport.py +289 -0
- groundtruth_kb-0.3.1/tests/test_lifecycle_metrics.py +486 -0
- groundtruth_kb-0.3.1/tests/test_pipeline_events.py +597 -0
- groundtruth_kb-0.3.1/tests/test_web.py +402 -0
- groundtruth_kb-0.3.1/tests/test_web_pipeline.py +165 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# EditorConfig — https://editorconfig.org
|
|
2
|
+
# © 2026 Remaker Digital, a DBA of VanDusen & Palmeter, LLC. All rights reserved.
|
|
3
|
+
|
|
4
|
+
root = true
|
|
5
|
+
|
|
6
|
+
[*]
|
|
7
|
+
indent_style = space
|
|
8
|
+
indent_size = 4
|
|
9
|
+
end_of_line = lf
|
|
10
|
+
charset = utf-8
|
|
11
|
+
trim_trailing_whitespace = true
|
|
12
|
+
insert_final_newline = true
|
|
13
|
+
|
|
14
|
+
[*.py]
|
|
15
|
+
indent_size = 4
|
|
16
|
+
|
|
17
|
+
[*.{yml,yaml}]
|
|
18
|
+
indent_size = 2
|
|
19
|
+
|
|
20
|
+
[*.{toml,json}]
|
|
21
|
+
indent_size = 2
|
|
22
|
+
|
|
23
|
+
[*.md]
|
|
24
|
+
trim_trailing_whitespace = false
|
|
25
|
+
|
|
26
|
+
[Makefile]
|
|
27
|
+
indent_style = tab
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
name: Bug Report
|
|
2
|
+
description: Report a bug in the GroundTruth Knowledge DB toolkit
|
|
3
|
+
labels: ["bug"]
|
|
4
|
+
body:
|
|
5
|
+
- type: markdown
|
|
6
|
+
attributes:
|
|
7
|
+
value: |
|
|
8
|
+
Thanks for taking the time to report a bug. Please fill out the fields
|
|
9
|
+
below so we can diagnose and fix the issue.
|
|
10
|
+
|
|
11
|
+
- type: dropdown
|
|
12
|
+
id: component
|
|
13
|
+
attributes:
|
|
14
|
+
label: Component
|
|
15
|
+
description: Which part of the toolkit is affected?
|
|
16
|
+
options:
|
|
17
|
+
- Knowledge DB (db.py)
|
|
18
|
+
- Assertions engine (assertions.py)
|
|
19
|
+
- Web UI (app.py / templates)
|
|
20
|
+
- CLI / seed tooling
|
|
21
|
+
- Documentation
|
|
22
|
+
- Other
|
|
23
|
+
validations:
|
|
24
|
+
required: true
|
|
25
|
+
|
|
26
|
+
- type: textarea
|
|
27
|
+
id: expected
|
|
28
|
+
attributes:
|
|
29
|
+
label: Expected behavior
|
|
30
|
+
description: What did you expect to happen?
|
|
31
|
+
validations:
|
|
32
|
+
required: true
|
|
33
|
+
|
|
34
|
+
- type: textarea
|
|
35
|
+
id: actual
|
|
36
|
+
attributes:
|
|
37
|
+
label: Actual behavior
|
|
38
|
+
description: What actually happened? Include error messages if applicable.
|
|
39
|
+
validations:
|
|
40
|
+
required: true
|
|
41
|
+
|
|
42
|
+
- type: textarea
|
|
43
|
+
id: reproduction
|
|
44
|
+
attributes:
|
|
45
|
+
label: Steps to reproduce
|
|
46
|
+
description: Minimal steps to reproduce the issue.
|
|
47
|
+
placeholder: |
|
|
48
|
+
1. Install groundtruth-kb v0.1.0
|
|
49
|
+
2. Run `groundtruth init`
|
|
50
|
+
3. Insert a spec with ...
|
|
51
|
+
4. See error ...
|
|
52
|
+
validations:
|
|
53
|
+
required: true
|
|
54
|
+
|
|
55
|
+
- type: input
|
|
56
|
+
id: version
|
|
57
|
+
attributes:
|
|
58
|
+
label: Version
|
|
59
|
+
description: "Output of `pip show groundtruth-kb | grep Version`"
|
|
60
|
+
validations:
|
|
61
|
+
required: false
|
|
62
|
+
|
|
63
|
+
- type: textarea
|
|
64
|
+
id: context
|
|
65
|
+
attributes:
|
|
66
|
+
label: Additional context
|
|
67
|
+
description: Any other context (screenshots, logs, environment details).
|
|
68
|
+
validations:
|
|
69
|
+
required: false
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
name: Feature Request
|
|
2
|
+
description: Suggest an improvement or new capability
|
|
3
|
+
labels: ["enhancement"]
|
|
4
|
+
body:
|
|
5
|
+
- type: markdown
|
|
6
|
+
attributes:
|
|
7
|
+
value: |
|
|
8
|
+
We value feedback that helps improve the engineering method behind
|
|
9
|
+
GroundTruth. Please describe the problem you're trying to solve and
|
|
10
|
+
the approach you have in mind.
|
|
11
|
+
|
|
12
|
+
- type: textarea
|
|
13
|
+
id: problem
|
|
14
|
+
attributes:
|
|
15
|
+
label: What problem does this solve?
|
|
16
|
+
description: |
|
|
17
|
+
Describe the problem or limitation you encountered. Focus on the
|
|
18
|
+
"why" — what were you trying to accomplish and what got in the way?
|
|
19
|
+
validations:
|
|
20
|
+
required: true
|
|
21
|
+
|
|
22
|
+
- type: textarea
|
|
23
|
+
id: approach
|
|
24
|
+
attributes:
|
|
25
|
+
label: What approach do you suggest?
|
|
26
|
+
description: |
|
|
27
|
+
How would you solve this? Be as specific as you can. If you have
|
|
28
|
+
multiple approaches, list them with tradeoffs.
|
|
29
|
+
validations:
|
|
30
|
+
required: true
|
|
31
|
+
|
|
32
|
+
- type: textarea
|
|
33
|
+
id: alternatives
|
|
34
|
+
attributes:
|
|
35
|
+
label: What alternatives did you consider?
|
|
36
|
+
description: Other approaches you thought about and why you didn't choose them.
|
|
37
|
+
validations:
|
|
38
|
+
required: false
|
|
39
|
+
|
|
40
|
+
- type: dropdown
|
|
41
|
+
id: scope
|
|
42
|
+
attributes:
|
|
43
|
+
label: Scope
|
|
44
|
+
description: How broad is this change?
|
|
45
|
+
options:
|
|
46
|
+
- Small (single file / function)
|
|
47
|
+
- Medium (multiple files, same module)
|
|
48
|
+
- Large (cross-cutting, architecture-level)
|
|
49
|
+
validations:
|
|
50
|
+
required: true
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Copilot Instructions — GroundTruth KB
|
|
2
|
+
|
|
3
|
+
This project uses specification-driven governance. Every change must trace
|
|
4
|
+
back to a specification or work item in the knowledge database.
|
|
5
|
+
|
|
6
|
+
## Before writing code
|
|
7
|
+
|
|
8
|
+
1. Read `CLAUDE.md` for project rules and workflow.
|
|
9
|
+
2. Read `groundtruth.toml` for project configuration.
|
|
10
|
+
3. If the assigned issue references a spec ID (e.g., SPEC-1234), that spec
|
|
11
|
+
defines the requirements. Do not add features beyond what the spec states.
|
|
12
|
+
4. If no spec is referenced, implement only what the issue title and body
|
|
13
|
+
describe — nothing more.
|
|
14
|
+
|
|
15
|
+
## Code standards
|
|
16
|
+
|
|
17
|
+
- Python 3.11+. Lint with ruff (see `pyproject.toml` for rules).
|
|
18
|
+
- All new files must include this copyright header as the first line:
|
|
19
|
+
```python
|
|
20
|
+
# © 2026 Remaker Digital, a DBA of VanDusen & Palmeter, LLC. All rights reserved.
|
|
21
|
+
```
|
|
22
|
+
For TypeScript/JavaScript files:
|
|
23
|
+
```typescript
|
|
24
|
+
// © 2026 Remaker Digital, a DBA of VanDusen & Palmeter, LLC. All rights reserved.
|
|
25
|
+
```
|
|
26
|
+
- Every new function or class requires a test in `tests/`.
|
|
27
|
+
- Do not add dependencies to `pyproject.toml` without explicit approval in
|
|
28
|
+
the issue body.
|
|
29
|
+
- Do not modify `src/groundtruth_kb/db.py` schema without a spec reference.
|
|
30
|
+
|
|
31
|
+
## What NOT to do
|
|
32
|
+
|
|
33
|
+
- Do not create documentation files (*.md) unless the issue specifically
|
|
34
|
+
requests documentation.
|
|
35
|
+
- Do not refactor code beyond what the issue requires.
|
|
36
|
+
- Do not add type stubs, docstrings, or comments to files you did not change.
|
|
37
|
+
- Do not modify `groundtruth.toml`, `groundtruth.db`, or any file in
|
|
38
|
+
`templates/` unless the issue explicitly targets those files.
|
|
39
|
+
- Do not run `gt seed` or modify governance specs (GOV-*).
|
|
40
|
+
|
|
41
|
+
## Commit messages
|
|
42
|
+
|
|
43
|
+
Use this format:
|
|
44
|
+
```
|
|
45
|
+
<type>(<scope>): <description>
|
|
46
|
+
|
|
47
|
+
Refs: <issue-number>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Types: `feat`, `fix`, `test`, `docs`, `chore`
|
|
51
|
+
|
|
52
|
+
## PR description
|
|
53
|
+
|
|
54
|
+
Include:
|
|
55
|
+
- What changed and why (reference the issue)
|
|
56
|
+
- Which files were modified
|
|
57
|
+
- How to verify the change (test command or manual check)
|
|
58
|
+
|
|
59
|
+
## Testing
|
|
60
|
+
|
|
61
|
+
Run `python -m pytest tests/ -q` before requesting review. All existing
|
|
62
|
+
tests must pass. New code must have new tests.
|
|
63
|
+
|
|
64
|
+
## Architecture
|
|
65
|
+
|
|
66
|
+
- `src/groundtruth_kb/` — core package (KB engine, CLI, assertions, gates)
|
|
67
|
+
- `src/groundtruth_kb/project/` — project scaffold, doctor, upgrade
|
|
68
|
+
- `src/groundtruth_kb/bridge/` — inter-agent bridge runtime
|
|
69
|
+
- `templates/` — scaffold templates (bundled in wheel)
|
|
70
|
+
- `tests/` — pytest test suite
|
|
71
|
+
- `docs/` — method documentation
|
|
72
|
+
|
|
73
|
+
Do not create new top-level directories or packages.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Dependabot dependency update configuration
|
|
2
|
+
# © 2026 Remaker Digital, a DBA of VanDusen & Palmeter, LLC. All rights reserved.
|
|
3
|
+
|
|
4
|
+
version: 2
|
|
5
|
+
updates:
|
|
6
|
+
- package-ecosystem: "pip"
|
|
7
|
+
directory: "/"
|
|
8
|
+
schedule:
|
|
9
|
+
interval: "weekly"
|
|
10
|
+
day: "monday"
|
|
11
|
+
open-pull-requests-limit: 5
|
|
12
|
+
labels:
|
|
13
|
+
- "dependencies"
|
|
14
|
+
commit-message:
|
|
15
|
+
prefix: "chore(deps):"
|
|
16
|
+
|
|
17
|
+
- package-ecosystem: "github-actions"
|
|
18
|
+
directory: "/"
|
|
19
|
+
schedule:
|
|
20
|
+
interval: "weekly"
|
|
21
|
+
day: "monday"
|
|
22
|
+
open-pull-requests-limit: 3
|
|
23
|
+
labels:
|
|
24
|
+
- "dependencies"
|
|
25
|
+
- "ci"
|
|
26
|
+
commit-message:
|
|
27
|
+
prefix: "chore(ci):"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
## Problem
|
|
2
|
+
|
|
3
|
+
<!-- What problem does this PR solve? Link to the issue if applicable. -->
|
|
4
|
+
|
|
5
|
+
## Approach
|
|
6
|
+
|
|
7
|
+
<!-- How does this PR solve the problem? Describe the implementation. -->
|
|
8
|
+
|
|
9
|
+
## Rationale
|
|
10
|
+
|
|
11
|
+
<!-- Why this approach over alternatives? What tradeoffs were considered? -->
|
|
12
|
+
|
|
13
|
+
## Testing
|
|
14
|
+
|
|
15
|
+
- [ ] Existing tests pass (`pytest`)
|
|
16
|
+
- [ ] New tests added for new functionality
|
|
17
|
+
- [ ] Assertions still pass (`groundtruth assert`)
|
|
18
|
+
|
|
19
|
+
## Checklist
|
|
20
|
+
|
|
21
|
+
- [ ] Code follows project conventions
|
|
22
|
+
- [ ] No breaking changes to the public API
|
|
23
|
+
- [ ] Documentation updated if needed
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, develop]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main, develop]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
20
|
+
uses: actions/setup-python@v6
|
|
21
|
+
with:
|
|
22
|
+
python-version: ${{ matrix.python-version }}
|
|
23
|
+
|
|
24
|
+
- name: Install dependencies
|
|
25
|
+
run: |
|
|
26
|
+
python -m pip install --upgrade pip
|
|
27
|
+
pip install -e ".[dev,web]"
|
|
28
|
+
|
|
29
|
+
- name: Lint with ruff
|
|
30
|
+
run: |
|
|
31
|
+
ruff check .
|
|
32
|
+
ruff format --check .
|
|
33
|
+
|
|
34
|
+
- name: Run tests
|
|
35
|
+
run: pytest -v --tb=short
|
|
36
|
+
|
|
37
|
+
- name: Wheel build + install smoke test
|
|
38
|
+
run: |
|
|
39
|
+
pip install build
|
|
40
|
+
python -m build --wheel
|
|
41
|
+
pip install --no-deps dist/*.whl --target /tmp/gt-wheel-smoke
|
|
42
|
+
PYTHONPATH=/tmp/gt-wheel-smoke python -c "
|
|
43
|
+
import groundtruth_kb
|
|
44
|
+
print(f'Version: {groundtruth_kb.__version__}')
|
|
45
|
+
tpl = groundtruth_kb.get_templates_dir()
|
|
46
|
+
print(f'Templates: {tpl}')
|
|
47
|
+
assert tpl.exists(), 'Templates must be packaged in wheel'
|
|
48
|
+
"
|
|
49
|
+
|
|
50
|
+
test-search:
|
|
51
|
+
runs-on: ubuntu-latest
|
|
52
|
+
name: "test (search / 3.12)"
|
|
53
|
+
steps:
|
|
54
|
+
- uses: actions/checkout@v4
|
|
55
|
+
|
|
56
|
+
- name: Set up Python 3.12
|
|
57
|
+
uses: actions/setup-python@v6
|
|
58
|
+
with:
|
|
59
|
+
python-version: "3.12"
|
|
60
|
+
|
|
61
|
+
- name: Install dependencies with search extra
|
|
62
|
+
run: |
|
|
63
|
+
python -m pip install --upgrade pip
|
|
64
|
+
pip install -e ".[dev,web,search]"
|
|
65
|
+
|
|
66
|
+
- name: Run tests (including semantic search)
|
|
67
|
+
run: pytest -v --tb=short -k "deliberation"
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# CodeQL analysis — GitHub's semantic code analysis for security vulnerabilities
|
|
2
|
+
# Free for public repositories. Uploads findings to Security tab.
|
|
3
|
+
#
|
|
4
|
+
# © 2026 Remaker Digital, a DBA of VanDusen & Palmeter, LLC. All rights reserved.
|
|
5
|
+
|
|
6
|
+
name: CodeQL
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
push:
|
|
10
|
+
branches: [main]
|
|
11
|
+
pull_request:
|
|
12
|
+
branches: [main]
|
|
13
|
+
schedule:
|
|
14
|
+
- cron: '17 4 * * 1' # Weekly Monday 4:17 AM UTC
|
|
15
|
+
|
|
16
|
+
permissions:
|
|
17
|
+
contents: read
|
|
18
|
+
security-events: write
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
analyze:
|
|
22
|
+
name: Analyze Python
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v4
|
|
26
|
+
|
|
27
|
+
- name: Initialize CodeQL
|
|
28
|
+
uses: github/codeql-action/init@v4
|
|
29
|
+
with:
|
|
30
|
+
languages: python
|
|
31
|
+
|
|
32
|
+
- name: Autobuild
|
|
33
|
+
uses: github/codeql-action/autobuild@v4
|
|
34
|
+
|
|
35
|
+
- name: Perform CodeQL Analysis
|
|
36
|
+
uses: github/codeql-action/analyze@v4
|
|
37
|
+
with:
|
|
38
|
+
category: "/language:python"
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Documentation drift prevention — verifies CLI coverage, snippet correctness,
|
|
2
|
+
# nav file references, version consistency, Python prereq, install tags,
|
|
3
|
+
# ChromaDB message shape, and mkdocs build integrity.
|
|
4
|
+
#
|
|
5
|
+
# © 2026 Remaker Digital, a DBA of VanDusen & Palmeter, LLC. All rights reserved.
|
|
6
|
+
|
|
7
|
+
name: Docs Check
|
|
8
|
+
|
|
9
|
+
on:
|
|
10
|
+
push:
|
|
11
|
+
branches: [main]
|
|
12
|
+
paths:
|
|
13
|
+
- 'docs/**'
|
|
14
|
+
- 'templates/**'
|
|
15
|
+
- 'examples/**'
|
|
16
|
+
- 'README.md'
|
|
17
|
+
- 'pyproject.toml'
|
|
18
|
+
- 'src/groundtruth_kb/__init__.py'
|
|
19
|
+
- 'src/groundtruth_kb/cli.py'
|
|
20
|
+
- 'mkdocs.yml'
|
|
21
|
+
- 'scripts/check_docs_cli_coverage.py'
|
|
22
|
+
- '.github/workflows/docs-check.yml'
|
|
23
|
+
pull_request:
|
|
24
|
+
paths:
|
|
25
|
+
- 'docs/**'
|
|
26
|
+
- 'templates/**'
|
|
27
|
+
- 'examples/**'
|
|
28
|
+
- 'README.md'
|
|
29
|
+
- 'pyproject.toml'
|
|
30
|
+
- 'src/groundtruth_kb/__init__.py'
|
|
31
|
+
- 'src/groundtruth_kb/cli.py'
|
|
32
|
+
- 'mkdocs.yml'
|
|
33
|
+
- 'scripts/check_docs_cli_coverage.py'
|
|
34
|
+
|
|
35
|
+
jobs:
|
|
36
|
+
docs-check:
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
steps:
|
|
39
|
+
- uses: actions/checkout@v4
|
|
40
|
+
|
|
41
|
+
- name: Set up Python
|
|
42
|
+
uses: actions/setup-python@v6
|
|
43
|
+
with:
|
|
44
|
+
python-version: '3.12'
|
|
45
|
+
|
|
46
|
+
- name: Install dependencies
|
|
47
|
+
run: pip install -e ".[docs]"
|
|
48
|
+
|
|
49
|
+
- name: Check documentation drift
|
|
50
|
+
run: python scripts/check_docs_cli_coverage.py
|
|
51
|
+
|
|
52
|
+
- name: Build docs (strict mode)
|
|
53
|
+
run: mkdocs build --strict
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Deploy documentation to GitHub Pages using mkdocs-material.
|
|
2
|
+
# Requires: Settings > Pages > Source: GitHub Actions
|
|
3
|
+
#
|
|
4
|
+
# © 2026 Remaker Digital, a DBA of VanDusen & Palmeter, LLC. All rights reserved.
|
|
5
|
+
|
|
6
|
+
name: Docs
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
push:
|
|
10
|
+
branches: [main]
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
pages: write
|
|
16
|
+
id-token: write
|
|
17
|
+
|
|
18
|
+
concurrency:
|
|
19
|
+
group: pages
|
|
20
|
+
cancel-in-progress: true
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
build:
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
|
|
28
|
+
- name: Set up Python
|
|
29
|
+
uses: actions/setup-python@v6
|
|
30
|
+
with:
|
|
31
|
+
python-version: '3.12'
|
|
32
|
+
|
|
33
|
+
- name: Install dependencies
|
|
34
|
+
run: pip install -e ".[docs]"
|
|
35
|
+
|
|
36
|
+
- name: Build docs
|
|
37
|
+
run: mkdocs build --strict
|
|
38
|
+
|
|
39
|
+
- name: Upload pages artifact
|
|
40
|
+
uses: actions/upload-pages-artifact@v3
|
|
41
|
+
with:
|
|
42
|
+
path: site/
|
|
43
|
+
|
|
44
|
+
deploy:
|
|
45
|
+
needs: build
|
|
46
|
+
runs-on: ubuntu-latest
|
|
47
|
+
environment:
|
|
48
|
+
name: github-pages
|
|
49
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
50
|
+
steps:
|
|
51
|
+
- name: Deploy to GitHub Pages
|
|
52
|
+
id: deployment
|
|
53
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# © 2026 Remaker Digital, a DBA of VanDusen & Palmeter, LLC. All rights reserved.
|
|
2
|
+
name: Docstring Coverage
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
pull_request:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
docstring-coverage:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- name: Set up Python
|
|
19
|
+
uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: "3.11"
|
|
22
|
+
|
|
23
|
+
- name: Install dependencies
|
|
24
|
+
run: |
|
|
25
|
+
python -m pip install --upgrade pip
|
|
26
|
+
pip install -e ".[dev]"
|
|
27
|
+
|
|
28
|
+
- name: Check docstring coverage
|
|
29
|
+
run: interrogate src/groundtruth_kb/ --fail-under 50 -vv
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Build, verify, and publish groundtruth-kb.
|
|
2
|
+
#
|
|
3
|
+
# Install from PyPI:
|
|
4
|
+
# pip install groundtruth-kb
|
|
5
|
+
#
|
|
6
|
+
# Install from GitHub (pinned version):
|
|
7
|
+
# pip install "groundtruth-kb @ git+https://github.com/Remaker-Digital/groundtruth-kb.git@v0.3.0"
|
|
8
|
+
#
|
|
9
|
+
# This workflow runs on Release creation to:
|
|
10
|
+
# 1. Build and verify the wheel
|
|
11
|
+
# 2. Attach artifacts to the GitHub Release
|
|
12
|
+
# 3. Publish to PyPI via Trusted Publishers (OIDC)
|
|
13
|
+
#
|
|
14
|
+
# Copyright (c) 2026 Remaker Digital. Licensed under AGPL-3.0-or-later.
|
|
15
|
+
|
|
16
|
+
name: Release
|
|
17
|
+
|
|
18
|
+
on:
|
|
19
|
+
release:
|
|
20
|
+
types: [published]
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
build-verify:
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
permissions:
|
|
26
|
+
contents: write
|
|
27
|
+
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@v4
|
|
30
|
+
|
|
31
|
+
- uses: actions/setup-python@v6
|
|
32
|
+
with:
|
|
33
|
+
python-version: "3.12"
|
|
34
|
+
|
|
35
|
+
- name: Install build tools
|
|
36
|
+
run: pip install build twine
|
|
37
|
+
|
|
38
|
+
- name: Build wheel + sdist
|
|
39
|
+
run: python -m build
|
|
40
|
+
|
|
41
|
+
- name: Verify distribution
|
|
42
|
+
run: twine check dist/*
|
|
43
|
+
|
|
44
|
+
- name: Smoke test — install built wheel
|
|
45
|
+
run: |
|
|
46
|
+
pip install --no-deps dist/*.whl --target /tmp/gt-smoke
|
|
47
|
+
PYTHONPATH=/tmp/gt-smoke python -c "
|
|
48
|
+
import groundtruth_kb
|
|
49
|
+
print(f'Version: {groundtruth_kb.__version__}')
|
|
50
|
+
print(f'Templates: {groundtruth_kb.get_templates_dir()}')
|
|
51
|
+
assert groundtruth_kb.__version__, 'Version must be set'
|
|
52
|
+
assert groundtruth_kb.get_templates_dir().exists(), 'Templates must be packaged'
|
|
53
|
+
"
|
|
54
|
+
|
|
55
|
+
- name: Smoke test — install from GitHub ref
|
|
56
|
+
run: |
|
|
57
|
+
pip install --target /tmp/gt-github-smoke "groundtruth-kb @ git+https://github.com/${{ github.repository }}.git@${{ github.ref_name }}"
|
|
58
|
+
PYTHONPATH=/tmp/gt-github-smoke python -c "import groundtruth_kb; print(f'GitHub install OK: {groundtruth_kb.__version__}')"
|
|
59
|
+
|
|
60
|
+
- name: Attach artifacts to release
|
|
61
|
+
env:
|
|
62
|
+
GH_TOKEN: ${{ github.token }}
|
|
63
|
+
run: |
|
|
64
|
+
for f in dist/*; do
|
|
65
|
+
gh release upload "${{ github.event.release.tag_name }}" "$f" --clobber
|
|
66
|
+
done
|
|
67
|
+
|
|
68
|
+
- name: Upload artifacts for publish job
|
|
69
|
+
uses: actions/upload-artifact@v4
|
|
70
|
+
with:
|
|
71
|
+
name: dist
|
|
72
|
+
path: dist/
|
|
73
|
+
|
|
74
|
+
publish-pypi:
|
|
75
|
+
needs: build-verify
|
|
76
|
+
runs-on: ubuntu-latest
|
|
77
|
+
environment: pypi
|
|
78
|
+
permissions:
|
|
79
|
+
id-token: write
|
|
80
|
+
steps:
|
|
81
|
+
- name: Download built artifacts
|
|
82
|
+
uses: actions/download-artifact@v4
|
|
83
|
+
with:
|
|
84
|
+
name: dist
|
|
85
|
+
path: dist/
|
|
86
|
+
|
|
87
|
+
- name: Publish to PyPI
|
|
88
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Security scanning — Semgrep SAST + pip-audit dependency check
|
|
2
|
+
# Runs on every PR and push to main. Uploads SARIF to GitHub Code Scanning.
|
|
3
|
+
#
|
|
4
|
+
# © 2026 Remaker Digital, a DBA of VanDusen & Palmeter, LLC. All rights reserved.
|
|
5
|
+
|
|
6
|
+
name: Security
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
pull_request:
|
|
10
|
+
paths:
|
|
11
|
+
- 'src/**'
|
|
12
|
+
- 'tests/**'
|
|
13
|
+
- 'pyproject.toml'
|
|
14
|
+
- 'requirements*.txt'
|
|
15
|
+
push:
|
|
16
|
+
branches: [main, develop]
|
|
17
|
+
workflow_dispatch:
|
|
18
|
+
|
|
19
|
+
permissions:
|
|
20
|
+
contents: read
|
|
21
|
+
security-events: write
|
|
22
|
+
|
|
23
|
+
jobs:
|
|
24
|
+
semgrep:
|
|
25
|
+
name: Semgrep SAST
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@v4
|
|
29
|
+
|
|
30
|
+
- name: Run Semgrep
|
|
31
|
+
uses: returntocorp/semgrep-action@v1
|
|
32
|
+
with:
|
|
33
|
+
config: >-
|
|
34
|
+
p/python
|
|
35
|
+
p/security-audit
|
|
36
|
+
p/secrets
|
|
37
|
+
generateSarif: "1"
|
|
38
|
+
|
|
39
|
+
- name: Upload SARIF
|
|
40
|
+
if: always()
|
|
41
|
+
uses: github/codeql-action/upload-sarif@v4
|
|
42
|
+
with:
|
|
43
|
+
sarif_file: semgrep.sarif
|
|
44
|
+
category: semgrep
|
|
45
|
+
|
|
46
|
+
pip-audit:
|
|
47
|
+
name: Dependency Audit
|
|
48
|
+
runs-on: ubuntu-latest
|
|
49
|
+
steps:
|
|
50
|
+
- uses: actions/checkout@v4
|
|
51
|
+
|
|
52
|
+
- name: Set up Python
|
|
53
|
+
uses: actions/setup-python@v6
|
|
54
|
+
with:
|
|
55
|
+
python-version: '3.12'
|
|
56
|
+
|
|
57
|
+
- name: Install package
|
|
58
|
+
run: pip install -e ".[dev,web]"
|
|
59
|
+
|
|
60
|
+
- name: Run pip-audit
|
|
61
|
+
run: |
|
|
62
|
+
pip install pip-audit
|
|
63
|
+
mkdir -p .quality
|
|
64
|
+
# PYSEC-2022-42969: py 1.11.0 py.path.svnwc vulnerability — not exploitable
|
|
65
|
+
# in our usage (transitive dep from CI runner, not imported by our code).
|
|
66
|
+
pip-audit --ignore-vuln PYSEC-2022-42969 --format=json --output=.quality/pip-audit.json || true
|
|
67
|
+
pip-audit --ignore-vuln PYSEC-2022-42969 --format=cyclonedx-json --output=.quality/sbom.json || true
|
|
68
|
+
pip-audit --ignore-vuln PYSEC-2022-42969
|
|
69
|
+
continue-on-error: false
|
|
70
|
+
|
|
71
|
+
- name: Upload audit results
|
|
72
|
+
if: always()
|
|
73
|
+
uses: actions/upload-artifact@v7
|
|
74
|
+
with:
|
|
75
|
+
name: pip-audit-results
|
|
76
|
+
path: .quality/
|