Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ jobs:
with:
components: rustfmt

- name: Install protobuf compiler
run: sudo apt-get update && sudo apt-get install -y protobuf-compiler

- name: Set up Python
uses: actions/setup-python@v5
with:
Expand All @@ -46,6 +49,9 @@ jobs:
with:
components: clippy

- name: Install protobuf compiler
run: sudo apt-get update && sudo apt-get install -y protobuf-compiler

- name: Set up Python
uses: actions/setup-python@v5
with:
Expand All @@ -70,6 +76,9 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4

- name: Install protobuf compiler
run: sudo apt-get update && sudo apt-get install -y protobuf-compiler

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

Expand All @@ -89,6 +98,9 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4

- name: Install protobuf compiler
run: sudo apt-get update && sudo apt-get install -y protobuf-compiler

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

Expand Down
37 changes: 35 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,37 @@ Record all work in `_workdir/progress-YYYY-MM-DD-NNN.md` (see [Recording Work Pr

Follow the specification hierarchy (see [Specification Hierarchy](#specification-hierarchy) section).

### 4. RFC History Maintenance

**When modifying any RFC file (`specs/rfc-*.md`)**, AI agents MUST also update `specs/rfc-history.md` and `specs/rfc-index.md`:

- Add an entry under the current date
- Document: RFC number, type of change, brief description, author, rationale
- Follow the template format in rfc-history.md

This ensures all RFC changes are tracked chronologically for audit and reference.

### 5. Test Utilities Feature Gating

**Test-only code MUST be feature-gated, not in standalone crates:**

- Use `#[cfg(feature = "test-utils")]` for builders, fixtures, and test helpers
- Add `test-utils` feature to `Cargo.toml` features section
- Enable in `dev-dependencies` for tests: `crate-name = { path = ".", features = ["test-utils"] }`
- This follows industry standard (DataFusion, Polars) for:
- Clean production binaries (zero test code in release builds)
- Integration test access (works in `/tests` folder)
- Downstream extensibility (users can enable for their tests)
- Benchmark support (use in `/benches` folder)

**Do NOT use:**
- `#[cfg(test)]` - breaks integration tests
- Standalone `test-utils` crate - unnecessary workspace complexity

**Do NOT feature-gate:**
- Public API builders (e.g., `PlanBuilder` in grism-logical is user-facing)
- Production convenience utilities

---

## Quick Reference
Expand Down Expand Up @@ -65,7 +96,7 @@ Each RFC defines specific system aspects. Index: `specs/rfc-index.md`

### Priority 4: Planning Documents

- **`specs/3_dev_schedule.md`** - Development schedule and milestones
- **`_milestones/`** - Development schedule and milestone documents

---

Expand Down Expand Up @@ -165,6 +196,7 @@ Before ending a session, AI agents MUST:
4. [ ] Document all files changed
5. [ ] Record test and lint results
6. [ ] Note next steps (even if "none")
7. [ ] If RFC files were modified, update `specs/rfc-history.md`

**Template:** `_workdir/_template.md`

Expand All @@ -191,6 +223,7 @@ grism/
│ ├── grism-distributed/ # Ray distributed execution
│ └── grism-storage/ # Storage layer (Lance backend)
├── specs/ # Specifications and RFCs
├── _milestones/ # Development milestones and schedules
├── tests/ # Python integration tests
└── _workdir/ # AI agent progress files
```
Expand Down Expand Up @@ -245,5 +278,5 @@ grism/
| All RFCs | `specs/rfc-*.md` |
| RFC Index | `specs/rfc-index.md` |
| Python API | `specs/rfc-0101.md` |
| Schedule | `specs/3_dev_schedule.md` |
| Milestones | `_milestones/` |
| Progress template | `_workdir/_template.md` |
39 changes: 24 additions & 15 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ grism-core = { path = "src/grism-core", default-features = false }
grism-logical = { path = "src/grism-logical", default-features = false }
grism-optimizer = { path = "src/grism-optimizer", default-features = false }
grism-engine = { path = "src/grism-engine", default-features = false }
grism-distributed = { path = "src/grism-distributed", default-features = false }
grism-ray = { path = "src/grism-ray", default-features = false }
grism-storage = { path = "src/grism-storage", default-features = false }

# External dependencies
Expand All @@ -40,10 +40,18 @@ python = [
"grism-core/python",
"grism-logical/python",
"grism-engine/python",
"grism-distributed/python",
"grism-ray/python",
"grism-storage/python",
]

# Allow these lints for the main Python binding package for now
[lints.clippy]
uninlined_format_args = "allow"
doc_markdown = "allow"
redundant_closure = "allow"
redundant_closure_for_method_calls = "allow"
format_push_string = "allow"

[workspace]
members = [
"src/common/error",
Expand All @@ -54,8 +62,9 @@ members = [
"src/grism-logical",
"src/grism-optimizer",
"src/grism-engine",
"src/grism-distributed",
"src/grism-ray",
"src/grism-storage",
"src/grism-playground",
]

[workspace.package]
Expand All @@ -72,11 +81,11 @@ serde_json = "1.0"
bincode = { version = "2.0", features = ["derive", "serde"] }

# Arrow ecosystem
arrow = "53.0"
arrow-array = { version = "53.0", features = ["chrono-tz"] }
arrow-buffer = "53.0"
arrow-schema = "53.0"
arrow-ipc = "53.0"
arrow = "56.0"
arrow-array = { version = "56.0", features = ["chrono-tz"] }
arrow-buffer = "56.0"
arrow-schema = "56.0"
arrow-ipc = "56.0"

# Async runtime
tokio = { version = "1.40", features = ["rt", "rt-multi-thread", "macros", "sync"] }
Expand Down Expand Up @@ -106,16 +115,16 @@ grism-core = { path = "src/grism-core" }
grism-logical = { path = "src/grism-logical" }
grism-optimizer = { path = "src/grism-optimizer" }
grism-engine = { path = "src/grism-engine" }
grism-distributed = { path = "src/grism-distributed" }
grism-ray = { path = "src/grism-ray" }
grism-storage = { path = "src/grism-storage" }

[workspace.lints.clippy]
pedantic = { level = "warn", priority = -1 }
nursery = { level = "warn", priority = -1 }
module_name_repetitions = "allow"
must_use_candidate = "allow"
missing_errors_doc = "allow"
missing_panics_doc = "allow"
# Only deny the specific lints we want to enforce across all crates
uninlined_format_args = "deny"
doc_markdown = "deny"
redundant_closure = "deny"
redundant_closure_for_method_calls = "deny"
format_push_string = "deny"

[profile.dev]
debug = "line-tables-only"
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading