groundcrew 0.1.0__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.
Files changed (81) hide show
  1. groundcrew-0.1.0/.aider.conf.yml +18 -0
  2. groundcrew-0.1.0/.claude/commands/domain.md +11 -0
  3. groundcrew-0.1.0/.claude/commands/pr-prep.md +18 -0
  4. groundcrew-0.1.0/.claude/commands/release.md +21 -0
  5. groundcrew-0.1.0/.claude/commands/test.md +14 -0
  6. groundcrew-0.1.0/.coderabbit.yaml +17 -0
  7. groundcrew-0.1.0/.continue/config.json +29 -0
  8. groundcrew-0.1.0/.cursor/rules/project.mdc +32 -0
  9. groundcrew-0.1.0/.editorconfig +24 -0
  10. groundcrew-0.1.0/.github/CODEOWNERS +1 -0
  11. groundcrew-0.1.0/.github/FUNDING.yml +1 -0
  12. groundcrew-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +42 -0
  13. groundcrew-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +28 -0
  14. groundcrew-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +31 -0
  15. groundcrew-0.1.0/.github/copilot-instructions.md +34 -0
  16. groundcrew-0.1.0/.github/dependabot.yml +15 -0
  17. groundcrew-0.1.0/.github/labels.yml +98 -0
  18. groundcrew-0.1.0/.github/release-drafter.yml +58 -0
  19. groundcrew-0.1.0/.github/workflows/ci.yml +81 -0
  20. groundcrew-0.1.0/.github/workflows/codeql.yml +32 -0
  21. groundcrew-0.1.0/.github/workflows/docs.yml +53 -0
  22. groundcrew-0.1.0/.github/workflows/release-drafter.yml +24 -0
  23. groundcrew-0.1.0/.github/workflows/release.yml +75 -0
  24. groundcrew-0.1.0/.github/workflows/stale.yml +25 -0
  25. groundcrew-0.1.0/.gitignore +27 -0
  26. groundcrew-0.1.0/.pre-commit-config.yaml +25 -0
  27. groundcrew-0.1.0/.windsurfrules +21 -0
  28. groundcrew-0.1.0/AGENTS.md +30 -0
  29. groundcrew-0.1.0/ARCHITECTURE.md +136 -0
  30. groundcrew-0.1.0/CHANGELOG.md +24 -0
  31. groundcrew-0.1.0/CITATION.cff +20 -0
  32. groundcrew-0.1.0/CLAUDE.md +20 -0
  33. groundcrew-0.1.0/CODEX.md +41 -0
  34. groundcrew-0.1.0/CODE_OF_CONDUCT.md +40 -0
  35. groundcrew-0.1.0/CONTRIBUTING.md +80 -0
  36. groundcrew-0.1.0/LICENSE +21 -0
  37. groundcrew-0.1.0/Makefile +39 -0
  38. groundcrew-0.1.0/PKG-INFO +327 -0
  39. groundcrew-0.1.0/README.md +267 -0
  40. groundcrew-0.1.0/SECURITY.md +19 -0
  41. groundcrew-0.1.0/action.yml +26 -0
  42. groundcrew-0.1.0/assets/demo.tape +19 -0
  43. groundcrew-0.1.0/assets/hero.png +0 -0
  44. groundcrew-0.1.0/assets/logo.png +0 -0
  45. groundcrew-0.1.0/codecov.yml +19 -0
  46. groundcrew-0.1.0/docs/api-reference.md +16 -0
  47. groundcrew-0.1.0/docs/architecture.md +18 -0
  48. groundcrew-0.1.0/docs/changelog.md +3 -0
  49. groundcrew-0.1.0/docs/cli-reference.md +18 -0
  50. groundcrew-0.1.0/docs/contributing.md +30 -0
  51. groundcrew-0.1.0/docs/github-action.md +21 -0
  52. groundcrew-0.1.0/docs/how-it-works.md +17 -0
  53. groundcrew-0.1.0/docs/index.md +36 -0
  54. groundcrew-0.1.0/docs/mcp.md +38 -0
  55. groundcrew-0.1.0/docs/openai.md +27 -0
  56. groundcrew-0.1.0/docs/quickstart.md +23 -0
  57. groundcrew-0.1.0/examples/demo.py +81 -0
  58. groundcrew-0.1.0/mkdocs.yml +93 -0
  59. groundcrew-0.1.0/openapi.yaml +38 -0
  60. groundcrew-0.1.0/pyproject.toml +105 -0
  61. groundcrew-0.1.0/smoke_test.py +602 -0
  62. groundcrew-0.1.0/src/groundcrew/__init__.py +22 -0
  63. groundcrew-0.1.0/src/groundcrew/api.py +110 -0
  64. groundcrew-0.1.0/src/groundcrew/cli.py +113 -0
  65. groundcrew-0.1.0/src/groundcrew/codec.py +85 -0
  66. groundcrew-0.1.0/src/groundcrew/mcp_server.py +154 -0
  67. groundcrew-0.1.0/src/groundcrew/oracle.py +92 -0
  68. groundcrew-0.1.0/src/groundcrew/py.typed +0 -0
  69. groundcrew-0.1.0/src/groundcrew/report.py +67 -0
  70. groundcrew-0.1.0/src/groundcrew/snapshot.py +131 -0
  71. groundcrew-0.1.0/tests/__init__.py +0 -0
  72. groundcrew-0.1.0/tests/conftest.py +1 -0
  73. groundcrew-0.1.0/tests/test_api.py +94 -0
  74. groundcrew-0.1.0/tests/test_cli.py +26 -0
  75. groundcrew-0.1.0/tests/test_cli_runner.py +106 -0
  76. groundcrew-0.1.0/tests/test_codec.py +74 -0
  77. groundcrew-0.1.0/tests/test_mcp.py +72 -0
  78. groundcrew-0.1.0/tests/test_oracle.py +126 -0
  79. groundcrew-0.1.0/tests/test_report.py +125 -0
  80. groundcrew-0.1.0/tests/test_snapshot.py +161 -0
  81. groundcrew-0.1.0/tools/openai-tools.json +21 -0
@@ -0,0 +1,18 @@
1
+ # aider configuration for groundcrew
2
+ # https://aider.chat/docs/config/aider_conf.html
3
+
4
+ read:
5
+ - ARCHITECTURE.md
6
+ - CLAUDE.md
7
+ - src/groundcrew/__init__.py
8
+
9
+ lint: true
10
+ lint-cmd: "ruff check {files} && ruff format --check {files}"
11
+
12
+ auto-test: false
13
+ test-cmd: "pytest tests/ -x -q"
14
+
15
+ model: claude-sonnet-4-5
16
+
17
+ attribute-author: false
18
+ attribute-co-author: true
@@ -0,0 +1,11 @@
1
+ Domain-specific slash commands for groundcrew.
2
+
3
+ Replace this file with commands that match the tool's core operations.
4
+ See agentdelta's .claude/commands/ for reference examples:
5
+ - diff.md — runs the primary comparison operation
6
+ - inspect.md — inspects a single artifact
7
+ - record.md — generates recording boilerplate
8
+ - add-adapter.md — scaffolds a new framework adapter
9
+
10
+ Naming convention: /project:<verb> where verb describes what it does,
11
+ not what it is. "diff" not "agentdelta", "record" not "trace".
@@ -0,0 +1,18 @@
1
+ Run the full pre-PR checklist and report what's ready and what needs fixing.
2
+
3
+ Steps:
4
+ 1. Run lint: `make lint` (ruff check + ruff format --check)
5
+ 2. Run type check: `make typecheck` (mypy)
6
+ 3. Run tests: `make test` (pytest with coverage)
7
+ 4. Check CHANGELOG.md has an entry under [Unreleased] for this change
8
+ 5. Check that no debug print() statements or TODO comments were left in modified files
9
+
10
+ Report in this format:
11
+ ✅ Lint — clean
12
+ ✅ Types — clean
13
+ ✅ Tests — 43 passed, 87% coverage
14
+ ⚠️ CHANGELOG — no [Unreleased] entry found
15
+ ✅ No debug artifacts
16
+
17
+ If anything fails, show the exact error and the file:line to fix.
18
+ Do not mark the PR ready until all 5 checks pass.
@@ -0,0 +1,21 @@
1
+ Prepare a release: bump version, finalize CHANGELOG, and show the git tag command.
2
+
3
+ Usage: /project:release <version> (e.g. /project:release 0.2.0)
4
+
5
+ Steps:
6
+ 1. Verify all checks pass: lint, typecheck, tests (run make all)
7
+ 2. In CHANGELOG.md:
8
+ - Rename [Unreleased] to [<version>] - <today's date in YYYY-MM-DD>
9
+ - Add a new empty [Unreleased] section at the top
10
+ - Update the comparison links at the bottom
11
+ 3. In pyproject.toml: set version = "<version>"
12
+ 4. Show the git commands needed (do NOT run them):
13
+ ```
14
+ git add CHANGELOG.md pyproject.toml
15
+ git commit -m "chore: release v<version>"
16
+ git tag v<version>
17
+ git push origin main --tags
18
+ ```
19
+ 5. Note: the GitHub Actions release.yml will auto-publish to PyPI on tag push.
20
+
21
+ Do NOT push or tag without explicit user confirmation.
@@ -0,0 +1,14 @@
1
+ Run the full test suite with coverage and report results.
2
+
3
+ Steps:
4
+ 1. Run: `make test`
5
+ (equivalent to: `pytest tests/ --cov=<name> --cov-report=term-missing`)
6
+ 2. Report:
7
+ - Total tests, passed, failed, skipped
8
+ - Coverage percentage — flag if below 85%
9
+ - Any failing tests: show the test name, error message, and the relevant source line
10
+ 3. If any tests fail, diagnose the root cause before suggesting a fix:
11
+ - Is it a logic error in the implementation?
12
+ - Is it a test that needs updating due to an intentional behavior change?
13
+ - Is it a missing edge case?
14
+ 4. Do NOT suggest disabling or skipping tests to make the suite pass.
@@ -0,0 +1,17 @@
1
+ language: en
2
+ early_access: false
3
+ reviews:
4
+ profile: chill
5
+ request_changes_workflow: false
6
+ high_level_summary: true
7
+ poem: false
8
+ review_status: true
9
+ collapse_walkthrough: false
10
+ auto_review:
11
+ enabled: true
12
+ drafts: false
13
+ path_filters:
14
+ - "!assets/**"
15
+ - "!*.md"
16
+ chat:
17
+ auto_reply: true
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "groundcrew",
3
+ "version": "0.1.0",
4
+ "schema": "v1",
5
+ "context": [
6
+ {"provider": "file", "params": {"nRetrieve": 20, "nFinal": 5}},
7
+ {"provider": "code"}
8
+ ],
9
+ "docs": [
10
+ {
11
+ "title": "groundcrew Architecture",
12
+ "startUrl": "file://./ARCHITECTURE.md",
13
+ "faviconUrl": ""
14
+ }
15
+ ],
16
+ "customCommands": [
17
+ {
18
+ "name": "explain",
19
+ "prompt": "Explain how this part of groundcrew works: {input}. Use the module map in AGENTS.md as context.",
20
+ "description": "Explain a part of the codebase"
21
+ }
22
+ ],
23
+ "rules": [
24
+ "This is groundcrew — Deterministic state oracle and semantic action codec for computer-use agents.",
25
+ "Library code must not use print() — use rich.console.Console.",
26
+ "All public API must have type annotations and docstrings.",
27
+ "Tests use pytest. CLI tests use click.testing.CliRunner."
28
+ ]
29
+ }
@@ -0,0 +1,32 @@
1
+ ---
2
+ description: groundcrew coding rules and architecture context
3
+ globs: ["src/**/*.py", "tests/**/*.py"]
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # groundcrew — Cursor Rules
8
+
9
+ ## What this project does
10
+ Deterministic state oracle and semantic action codec for computer-use agents
11
+
12
+ ## Module map
13
+ ```
14
+ src/groundcrew/
15
+ ├── # TODO: fill in after implementation
16
+ ```
17
+
18
+ ## Invariants — never break these
19
+ - TODO: list invariants
20
+
21
+ ## Code style
22
+ - Python 3.10+, fully type-annotated, mypy strict mode
23
+ - Ruff lint rules: E W F I UP B S N SIM RUF PT
24
+ - No print() in library code — use rich.console.Console
25
+ - All public functions and classes must have docstrings
26
+ - Tests: pytest, CliRunner for CLI tests
27
+
28
+ ## When adding a new feature
29
+ 1. Implement in the appropriate module
30
+ 2. Export from __init__.py, add to __all__ alphabetically
31
+ 3. Add tests in tests/test_<module>.py
32
+ 4. Update CHANGELOG.md under [Unreleased]
@@ -0,0 +1,24 @@
1
+ root = true
2
+
3
+ [*]
4
+ indent_style = space
5
+ indent_size = 4
6
+ end_of_line = lf
7
+ charset = utf-8
8
+ trim_trailing_whitespace = true
9
+ insert_final_newline = true
10
+
11
+ [*.yml]
12
+ indent_size = 2
13
+
14
+ [*.yaml]
15
+ indent_size = 2
16
+
17
+ [*.toml]
18
+ indent_size = 4
19
+
20
+ [*.md]
21
+ trim_trailing_whitespace = false
22
+
23
+ [Makefile]
24
+ indent_style = tab
@@ -0,0 +1 @@
1
+ * @sandeep-alluru
@@ -0,0 +1 @@
1
+ github: sandeep-alluru
@@ -0,0 +1,42 @@
1
+ name: Bug Report
2
+ description: Something is broken
3
+ labels: ["bug"]
4
+ body:
5
+ - type: input
6
+ id: version
7
+ attributes:
8
+ label: groundcrew version
9
+ placeholder: "0.1.0"
10
+ validations:
11
+ required: true
12
+
13
+ - type: input
14
+ id: python
15
+ attributes:
16
+ label: Python version
17
+ placeholder: "3.11.5"
18
+ validations:
19
+ required: true
20
+
21
+ - type: textarea
22
+ id: command
23
+ attributes:
24
+ label: Command / code that triggered the bug
25
+ render: bash
26
+ validations:
27
+ required: true
28
+
29
+ - type: textarea
30
+ id: expected
31
+ attributes:
32
+ label: Expected behavior
33
+ validations:
34
+ required: true
35
+
36
+ - type: textarea
37
+ id: actual
38
+ attributes:
39
+ label: Actual behavior (include full traceback)
40
+ render: text
41
+ validations:
42
+ required: true
@@ -0,0 +1,28 @@
1
+ name: Feature Request
2
+ description: Propose a new feature
3
+ labels: ["enhancement"]
4
+ body:
5
+ - type: textarea
6
+ id: problem
7
+ attributes:
8
+ label: Problem
9
+ validations:
10
+ required: true
11
+
12
+ - type: textarea
13
+ id: solution
14
+ attributes:
15
+ label: Proposed solution
16
+ validations:
17
+ required: true
18
+
19
+ - type: dropdown
20
+ id: contribution
21
+ attributes:
22
+ label: Are you willing to implement this?
23
+ options:
24
+ - "Yes — I'll open a PR"
25
+ - "Maybe — if someone helps"
26
+ - "No — just requesting"
27
+ validations:
28
+ required: true
@@ -0,0 +1,31 @@
1
+ ## What changed
2
+
3
+ <!-- One paragraph summary -->
4
+
5
+ ## Why
6
+
7
+ Closes #
8
+
9
+ ## Type of change
10
+
11
+ - [ ] `fix:` Bug fix
12
+ - [ ] `feat:` New feature
13
+ - [ ] `refactor:` No behavior change
14
+ - [ ] `docs:` Documentation only
15
+ - [ ] `test:` Tests only
16
+ - [ ] `chore:` Deps, CI, tooling
17
+ - [ ] `perf:` Performance
18
+
19
+ ## Testing done
20
+
21
+ - [ ] `make test` passes
22
+ - [ ] `make lint` passes
23
+ - [ ] `make typecheck` passes
24
+ - [ ] New tests added
25
+
26
+ ## Checklist
27
+
28
+ - [ ] `CHANGELOG.md` updated under `[Unreleased]`
29
+ - [ ] Public API changes have docstrings
30
+ - [ ] No secrets committed
31
+ - [ ] README updated if CLI/behavior changed
@@ -0,0 +1,34 @@
1
+ # GitHub Copilot Instructions — groundcrew
2
+
3
+ groundcrew: Deterministic state oracle and semantic action codec for computer-use agents
4
+
5
+ ## Module map
6
+
7
+ ```
8
+ src/groundcrew/
9
+ ├── # TODO: fill in after implementation
10
+ ```
11
+
12
+ ## Key invariants
13
+
14
+ - TODO: document invariants
15
+
16
+ ## Code style
17
+
18
+ - Python 3.10+, type-annotated, mypy strict mode
19
+ - Ruff lint rules: E W F I UP B S N SIM RUF PT; ignore S101 (assert in tests), N806
20
+ - No `print()` in library code — use `rich.console.Console`
21
+ - All public classes and functions must have docstrings
22
+ - Tests use `pytest`; CLI tests use `click.testing.CliRunner`
23
+
24
+ ## Adding a new output format
25
+
26
+ 1. Add `to_<format>(result) -> str` in `report.py`
27
+ 2. Add format name to `--format` choices in `cli.py`
28
+ 3. Add tests
29
+
30
+ ## Adding a new adapter / integration
31
+
32
+ 1. Create `src/groundcrew/instrument_<framework>.py`
33
+ 2. Export from `__init__.py`, add to `__all__` alphabetically
34
+ 3. Add tests
@@ -0,0 +1,15 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: pip
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
7
+ open-pull-requests-limit: 5
8
+ labels: [dependencies]
9
+
10
+ - package-ecosystem: github-actions
11
+ directory: /
12
+ schedule:
13
+ interval: weekly
14
+ open-pull-requests-limit: 5
15
+ labels: [dependencies, ci]
@@ -0,0 +1,98 @@
1
+ # Bug reports
2
+ - name: bug
3
+ color: "d73a4a"
4
+ description: "Something isn't working"
5
+
6
+ - name: fix
7
+ color: "d73a4a"
8
+ description: "A bug fix"
9
+
10
+ # Features
11
+ - name: enhancement
12
+ color: "a2eeef"
13
+ description: "New feature or request"
14
+
15
+ - name: feature
16
+ color: "a2eeef"
17
+ description: "New feature"
18
+
19
+ - name: feat
20
+ color: "a2eeef"
21
+ description: "New feature (conventional commit)"
22
+
23
+ # Documentation
24
+ - name: documentation
25
+ color: "0075ca"
26
+ description: "Improvements or additions to documentation"
27
+
28
+ - name: docs
29
+ color: "0075ca"
30
+ description: "Documentation update"
31
+
32
+ # Maintenance
33
+ - name: chore
34
+ color: "e4e669"
35
+ description: "Build process, dependencies, or tooling"
36
+
37
+ - name: dependencies
38
+ color: "0366d6"
39
+ description: "Pull requests that update a dependency"
40
+
41
+ - name: ci
42
+ color: "e4e669"
43
+ description: "CI/CD changes"
44
+
45
+ - name: refactor
46
+ color: "fef2c0"
47
+ description: "Code refactoring without behavior change"
48
+
49
+ # Tests
50
+ - name: test
51
+ color: "bfd4f2"
52
+ description: "Adding missing tests or correcting existing tests"
53
+
54
+ # Version bumps
55
+ - name: major
56
+ color: "ee0701"
57
+ description: "Breaking change — bumps major version"
58
+
59
+ - name: minor
60
+ color: "fbca04"
61
+ description: "Non-breaking new feature — bumps minor version"
62
+
63
+ - name: patch
64
+ color: "0075ca"
65
+ description: "Backwards compatible bug fix — bumps patch version"
66
+
67
+ # Meta
68
+ - name: good first issue
69
+ color: "7057ff"
70
+ description: "Good for newcomers"
71
+
72
+ - name: help wanted
73
+ color: "008672"
74
+ description: "Extra attention is needed"
75
+
76
+ - name: security
77
+ color: "ee0701"
78
+ description: "Security vulnerability"
79
+
80
+ - name: pinned
81
+ color: "e11d48"
82
+ description: "Pinned issue — do not close"
83
+
84
+ - name: duplicate
85
+ color: "cfd3d7"
86
+ description: "This issue or pull request already exists"
87
+
88
+ - name: invalid
89
+ color: "e4e4e7"
90
+ description: "This doesn't seem right"
91
+
92
+ - name: wontfix
93
+ color: "e4e4e7"
94
+ description: "This will not be worked on"
95
+
96
+ - name: question
97
+ color: "d876e3"
98
+ description: "Further information is requested"
@@ -0,0 +1,58 @@
1
+ name-template: "v$RESOLVED_VERSION"
2
+ tag-template: "v$RESOLVED_VERSION"
3
+ categories:
4
+ - title: "🚀 New Features"
5
+ labels:
6
+ - "feature"
7
+ - "enhancement"
8
+ - "feat"
9
+ - title: "🐛 Bug Fixes"
10
+ labels:
11
+ - "fix"
12
+ - "bugfix"
13
+ - "bug"
14
+ - title: "🧰 Maintenance"
15
+ labels:
16
+ - "chore"
17
+ - "dependencies"
18
+ - "ci"
19
+ - "refactor"
20
+ - title: "📖 Documentation"
21
+ labels:
22
+ - "documentation"
23
+ - "docs"
24
+ - title: "🧪 Tests"
25
+ labels:
26
+ - "test"
27
+ - "tests"
28
+ change-template: "- $TITLE @$AUTHOR (#$NUMBER)"
29
+ change-prefix: ""
30
+ no-changes-template: "No changes."
31
+ version-resolver:
32
+ major:
33
+ labels:
34
+ - "major"
35
+ - "breaking"
36
+ minor:
37
+ labels:
38
+ - "minor"
39
+ - "feature"
40
+ - "enhancement"
41
+ - "feat"
42
+ patch:
43
+ labels:
44
+ - "patch"
45
+ - "fix"
46
+ - "bugfix"
47
+ - "documentation"
48
+ - "chore"
49
+ - "dependencies"
50
+ - "ci"
51
+ - "refactor"
52
+ default: patch
53
+ template: |
54
+ ## What's Changed
55
+
56
+ $CHANGES
57
+
58
+ **Full Changelog**: https://github.com/sandeep-alluru/groundcrew/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION
@@ -0,0 +1,81 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ name: Test (${{ matrix.os }} / Python ${{ matrix.python-version }})
12
+ runs-on: ${{ matrix.os }}
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ os: [ubuntu-latest, macos-latest]
17
+ python-version: ["3.10", "3.11", "3.12"]
18
+
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+
22
+ - name: Set up Python ${{ matrix.python-version }}
23
+ uses: actions/setup-python@v5
24
+ with:
25
+ python-version: ${{ matrix.python-version }}
26
+
27
+ - name: Cache pip
28
+ uses: actions/cache@v4
29
+ with:
30
+ path: ~/.cache/pip
31
+ key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('pyproject.toml') }}
32
+ restore-keys: ${{ runner.os }}-pip-${{ matrix.python-version }}-
33
+
34
+ - name: Install dependencies
35
+ run: pip install -e ".[dev]"
36
+
37
+ - name: Lint
38
+ run: ruff check src/ tests/
39
+
40
+ - name: Format check
41
+ run: ruff format --check src/ tests/
42
+
43
+ - name: Type check
44
+ run: mypy src/groundcrew/ --ignore-missing-imports
45
+
46
+ - name: Test
47
+ run: pytest tests/ -v --tb=short
48
+
49
+ - name: Upload coverage
50
+ if: matrix.python-version == '3.11' && matrix.os == 'ubuntu-latest'
51
+ uses: codecov/codecov-action@v5
52
+ with:
53
+ files: coverage.xml
54
+ fail_ci_if_error: false
55
+
56
+ receipt-audit:
57
+ name: Receipt Audit
58
+ runs-on: ubuntu-latest
59
+ if: github.event_name == 'pull_request'
60
+ needs: test
61
+ steps:
62
+ - uses: actions/checkout@v4
63
+ - uses: actions/setup-python@v5
64
+ with:
65
+ python-version: "3.11"
66
+ - name: Cache pip
67
+ uses: actions/cache@v4
68
+ with:
69
+ path: ~/.cache/pip
70
+ key: ${{ runner.os }}-pip-3.11-${{ hashFiles('pyproject.toml') }}
71
+ - name: Install groundcrew
72
+ run: pip install -e .
73
+ - name: Audit receipt store (if DB exists)
74
+ run: |
75
+ if [ -f .groundcrew/receipts.db ]; then
76
+ groundcrew log
77
+ groundcrew status
78
+ else
79
+ echo "No receipt store — skipping audit."
80
+ fi
81
+ continue-on-error: true
@@ -0,0 +1,32 @@
1
+ name: CodeQL Security Scan
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ schedule:
9
+ - cron: "0 18 * * 5" # every Friday at 18:00 UTC
10
+
11
+ jobs:
12
+ analyze:
13
+ name: Analyze (Python)
14
+ runs-on: ubuntu-latest
15
+ permissions:
16
+ actions: read
17
+ contents: read
18
+ security-events: write
19
+
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+
23
+ - name: Initialize CodeQL
24
+ uses: github/codeql-action/init@v3
25
+ with:
26
+ languages: python
27
+ queries: security-extended
28
+
29
+ - name: Perform CodeQL Analysis
30
+ uses: github/codeql-action/analyze@v3
31
+ with:
32
+ category: "/language:python"
@@ -0,0 +1,53 @@
1
+ name: Docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - "docs/**"
8
+ - "mkdocs.yml"
9
+ - "src/**"
10
+ - "ARCHITECTURE.md"
11
+ - "CHANGELOG.md"
12
+ - "CONTRIBUTING.md"
13
+ workflow_dispatch:
14
+
15
+ permissions:
16
+ contents: read
17
+ pages: write
18
+ id-token: write
19
+
20
+ concurrency:
21
+ group: pages
22
+ cancel-in-progress: true
23
+
24
+ jobs:
25
+ build:
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+
30
+ - uses: actions/setup-python@v5
31
+ with:
32
+ python-version: "3.11"
33
+ cache: pip
34
+
35
+ - name: Install docs dependencies
36
+ run: pip install -e ".[docs]"
37
+
38
+ - name: Build docs
39
+ run: mkdocs build --strict
40
+
41
+ - uses: actions/upload-pages-artifact@v3
42
+ with:
43
+ path: site/
44
+
45
+ deploy:
46
+ needs: build
47
+ runs-on: ubuntu-latest
48
+ environment:
49
+ name: github-pages
50
+ url: ${{ steps.deployment.outputs.page_url }}
51
+ steps:
52
+ - uses: actions/deploy-pages@v4
53
+ id: deployment