Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
57f385a
πŸ“Š Baseline: Document current codebase state before cleanup
Oct 8, 2025
f2c2420
♻️ Phase 2 POC: Consolidate SQL operator builders
Oct 8, 2025
43c1a3e
♻️ Complete SQL operator consolidation across 8 types
Oct 8, 2025
1287fbb
πŸ”§ Fix type annotation warnings in query_analyzer
Oct 8, 2025
7c9a983
✨ Add composable HealthCheck utility with pre-built checks
Oct 8, 2025
ff54db8
πŸ”– Release v0.11.0: Composable HealthCheck utility
Oct 8, 2025
d96e6d3
πŸ“š Add comprehensive docs-v2: Enterprise documentation revamp
Oct 9, 2025
c410ccc
πŸ“š Add beginner-friendly tutorials to docs-v2
Oct 9, 2025
5956952
πŸ“š Migrate docs-v2 to primary documentation
Oct 9, 2025
8adafb3
πŸ”— Fix broken internal documentation links
Oct 9, 2025
ecbb7e0
πŸ“ Fix LLM integration docs to use correct Fields: syntax
Oct 9, 2025
00364f5
πŸ“š Document FraiseQL innovative features
Oct 9, 2025
01de197
πŸ“– Add FraiseQL Philosophy & update navigation
Oct 9, 2025
56ee4d1
βœ… Phase 2 Complete: Fix pre-commit YAML validation (TDD)
Oct 10, 2025
a9e35f8
βœ… Phase 1 Complete: Kubernetes readiness endpoint with database healt…
Oct 10, 2025
21c4c48
βœ… Phase 3 Complete: Rust integration verified and production-ready (TDD)
Oct 10, 2025
c2b0d8f
βœ… Phase 4 Progress: Reduce type errors by 38% (29β†’18) (TDD)
Oct 10, 2025
a6c817f
βœ… Perfect 10/10: Zero errors, PostgreSQL-native observability stack
Oct 10, 2025
4d8ad56
♻️ Complete PostgreSQL migration: Token revocation & rate limiting
Oct 10, 2025
1c55ca7
βœ… Complete error notification system and table partitioning
Oct 11, 2025
4def939
✨ Expose complete LTree and DateRange operators in GraphQL filters
Oct 11, 2025
9c5e5ae
πŸ“Š Add production case study documentation
Oct 11, 2025
992b848
πŸ”§ Remove hallucinated example case study
Oct 11, 2025
c3f1d0f
πŸ“š Document error notifications and partitioning systems
Oct 11, 2025
75f5fef
✨ Add production Grafana dashboards with comprehensive test suite
Oct 11, 2025
2fb92d0
feat(caching): Phase 4.2 pg_fraiseql_cache integration
Oct 11, 2025
c538fd7
docs(caching): Add comprehensive caching documentation and LTree support
Oct 11, 2025
dca75f9
✨ Complete Phase 4.2.3-4.4: pg_fraiseql_cache integration
Oct 11, 2025
1393ace
✨ Priority 1 Complete: Documentation & Complete CQRS Example
Oct 11, 2025
712f221
πŸš€ Release v0.11.0: Performance-First Architecture
Oct 12, 2025
9c166ad
fix: Handle tuple rows in _determine_jsonb_column and duplicate limit…
Oct 12, 2025
c8f7ec4
fix: Handle Composed statements with empty params to avoid placeholde…
Oct 12, 2025
3573b8f
test: Update LTreeFilter test to reflect current implementation
Oct 12, 2025
ba99389
fix: Update CamelForge tests for v0.11.0 always-enabled behavior
Oct 12, 2025
766eedd
fix: Update all CamelForge tests for v0.11.0 always-enabled behavior
Oct 12, 2025
e7ad9c6
fix: Replace as_string({}) with as_string(None) in field mapping tests
Oct 12, 2025
ff39462
fix(tests): Handle Composed SQL objects in session variable tests
Oct 12, 2025
8d09bdb
fix(db): Set session variables in production mode paths
Oct 12, 2025
33fd3ef
refactor(v0.11.0): Remove PostgreSQL CamelForge dependency
Oct 12, 2025
bbc612c
test: Update connection JSONB integration tests for Rust-only archite…
Oct 12, 2025
93a0870
test: Remove PostgreSQL CamelForge tests (feature removed in v0.11.0)
Oct 12, 2025
ac9fa09
docs: Update documentation for v0.11.0 CamelForge removal
Oct 12, 2025
3a43f58
fix(deps): Use fraiseql-confiture package instead of confiture
Oct 12, 2025
c038753
fix(ci): Comment out local fraiseql-confiture path for CI/CD
Oct 12, 2025
9dc8e5c
fix(ci): Add Rust toolchain and fraiseql_rs build to publish workflow
Oct 12, 2025
b0752e5
fix(ci): Use maturin build instead of develop for CI
Oct 12, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
39 changes: 39 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,21 @@ jobs:
- name: Install uv
uses: astral-sh/setup-uv@v6

- name: Set up Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable

- name: Install maturin
run: pip install maturin

- name: Build fraiseql_rs extension
run: |
cd fraiseql_rs
maturin build --release
pip install target/wheels/*.whl
cd ..

- name: Install dependencies
run: |
# Use uv for faster and more reliable dependency resolution
Expand Down Expand Up @@ -83,6 +98,18 @@ jobs:
python-version: '3.13'
- name: Install uv
uses: astral-sh/setup-uv@v6
- name: Set up Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
- name: Install maturin
run: pip install maturin
- name: Build fraiseql_rs extension
run: |
cd fraiseql_rs
maturin build --release
pip install target/wheels/*.whl
cd ..
- name: Install dependencies
run: uv pip install --system -e ".[dev]"
- name: Run ruff
Expand All @@ -101,6 +128,18 @@ jobs:
python-version: '3.13'
- name: Install uv
uses: astral-sh/setup-uv@v6
- name: Set up Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
- name: Install maturin
run: pip install maturin
- name: Build fraiseql_rs extension
run: |
cd fraiseql_rs
maturin build --release
pip install target/wheels/*.whl
cd ..
- name: Install dependencies
run: uv pip install --system -e ".[dev]"
- name: Run bandit
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -178,3 +178,6 @@ tests/fixtures/examples/.install_log.txt
.ruff_cache/
.mypy_cache/
security_events.log

# TODO directory (deployment analysis and guides)
TODO/
8 changes: 8 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,21 @@ repos:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
exclude: ^(deploy/kubernetes/.*\.yaml|mkdocs\.yml)$
- id: check-added-large-files
- id: check-json
exclude: ^benchmarks/.*\.json$
- id: check-toml
- id: check-merge-conflict
- id: debug-statements

- repo: https://github.com/adrienverge/yamllint
rev: v1.35.1
hooks:
- id: yamllint
args: [-c=.yamllint.yaml]
files: ^deploy/kubernetes/[^/]+\.yaml$ # Only top-level K8s files, not helm/

- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.12.7
hooks:
Expand Down
35 changes: 35 additions & 0 deletions .yamllint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# yamllint configuration for Kubernetes manifests
# Allows multi-document YAML files (common in K8s)

extends: default

rules:
# Allow multi-document YAML files (---separator)
document-start: disable # Allow --- anywhere or nowhere

# Kubernetes manifests often have long lines
line-length:
max: 120
level: warning

# Allow trailing spaces (sometimes needed in multiline strings)
trailing-spaces: disable

# Indentation rules for Kubernetes (relaxed for auto-generated files)
indentation:
spaces: consistent # Allow any consistent indentation
indent-sequences: consistent

# Allow empty values (common in K8s for optional fields)
empty-values:
forbid-in-block-mappings: false
forbid-in-flow-mappings: false

# Comments are OK
comments:
min-spaces-from-content: 1

# Truthy values - K8s uses true/false/yes/no/on/off
truthy:
allowed-values: ['true', 'false', 'yes', 'no', 'on', 'off']
check-keys: false
110 changes: 110 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,116 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.11.0] - 2025-10-12

### πŸš€ Maximum Performance by Default - Zero Configuration Required

This is a **major performance-focused release** that removes all performance configuration switches and makes FraiseQL deliver maximum speed out of the box. No configuration needed - you automatically get the fastest possible GraphQL API.

#### **Breaking Changes**

**Configuration Simplification**: The following configuration flags have been **removed** as their features are now always enabled:

- `json_passthrough_enabled` / `json_passthrough_in_production` / `json_passthrough_cache_nested`
- `pure_json_passthrough` - Now **always enabled** (25-60x faster queries)
- `pure_passthrough_use_rust` - Now **always enabled** (10-80x faster JSON transformation)
- `enable_query_caching` / `enable_turbo_router` - Now **always enabled**
- `jsonb_extraction_enabled` / `jsonb_auto_detect` / `jsonb_default_columns` - Now **always enabled**
- `unified_executor_enabled` / `turbo_enable_adaptive_caching` - Now **always enabled**
- `passthrough_auto_detect_views` / `passthrough_cache_view_metadata` - Now **always enabled**
- `enable_mode_hints` - Now **always enabled**
- **`camelforge_function` / `camelforge_field_threshold`** - PostgreSQL CamelForge function **removed**, Rust handles all transformation

**Migration Guide**: Simply remove these config flags from your `FraiseQLConfig`. The features they controlled are now always active, delivering maximum performance automatically.

```python
# Before v0.11.0
config = FraiseQLConfig(
database_url="postgresql://...",
pure_json_passthrough=True, # Remove this
pure_passthrough_use_rust=True, # Remove this
enable_turbo_router=True, # Remove this
jsonb_extraction_enabled=True, # Remove this
)

# After v0.11.0 - Clean and simple!
config = FraiseQLConfig(
database_url="postgresql://...",
# All performance features automatically enabled
)
```

#### **Performance Improvements**

1. **Pure JSON Passthrough (25-60x faster)** - Always enabled
- Uses `SELECT data::text` instead of field extraction
- Bypasses Python object creation
- Direct PostgreSQL β†’ HTTP pipeline

2. **Rust Transformation (10-80x faster)** - Always enabled
- Snake_case β†’ camelCase conversion in Rust
- Automatic `__typename` injection
- Zero Python overhead

3. **JSONB Extraction** - Always enabled
- Automatic detection of JSONB columns
- Intelligent column selection
- Optimized queries for hybrid tables

4. **TurboRouter Caching** - Always enabled
- Registered queries execute instantly
- Adaptive caching based on complexity
- Zero overhead for cache hits

5. **Rust-Only Transformation** - PostgreSQL CamelForge removed
- All camelCase transformation now handled by Rust
- No PostgreSQL function dependency required
- Simpler deployment and configuration

#### **What This Means For You**

- **Zero Configuration**: Maximum performance out of the box
- **Simpler Code**: No performance flags to manage
- **Faster APIs**: 25-60x query speedup automatically
- **Better DX**: No need to tune performance settings

#### **Files Changed**

**Core Performance**:
- `src/fraiseql/fastapi/config.py` - Removed 13 performance config flags
- `src/fraiseql/db.py` - Pure passthrough always enabled
- `src/fraiseql/core/raw_json_executor.py` - Rust transformation always enabled
- `src/fraiseql/fastapi/dependencies.py` - Passthrough always enabled in production
- `src/fraiseql/execution/mode_selector.py` - All modes always available
- `src/fraiseql/fastapi/app.py` - TurboRouter always enabled

**Tests Updated**:
- `tests/test_pure_passthrough_sql.py` - Updated for always-on behavior
- `tests/integration/auth/test_json_passthrough_config_fix.py` - Updated tests
- Removed obsolete configuration test files

#### **Backwards Compatibility**

This release maintains API compatibility for:
- All GraphQL query syntax
- All mutation patterns
- Database schema requirements
- Type definitions and decorators
- Authentication and authorization

The only breaking changes are the **removed configuration flags** which are no longer needed since the features they controlled are now always active.

#### **Upgrade Recommendation**

βœ… **Highly Recommended**: All users should upgrade to v0.11.0 to get automatic 25-60x performance improvements with simpler configuration.

#### **Testing**

- βœ… All 19 pure passthrough tests passing
- βœ… All Rust transformation tests passing
- βœ… Integration tests verified
- βœ… Performance benchmarks confirmed

## [0.10.3] - 2025-10-06

### ✨ IpAddressString Scalar CIDR Notation Support
Expand Down
53 changes: 44 additions & 9 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,35 @@
# Contributing to FraiseQL

Thank you for your interest in contributing to FraiseQL! This document provides guidelines for contributing to the project.
## FraiseQL Craft Code

FraiseQL is designed, written, and maintained by a single developer.
In the age of AI, this is a feature β€” not a bug.
It allows FraiseQL to stay coherent, elegant, and deeply considered at every level.

### Principles

- **Clarity.** Code should be readable, predictable, and shaped by intent.
- **Correctness.** Type safety, explicitness, and well-defined behavior are non-negotiable.
- **Care.** Quality emerges from attention, not from scale.
- **Respect.** All collaborators and users deserve consideration, curiosity, and honesty.
- **Frugality.** Simplicity and restraint are virtues β€” unnecessary complexity is not.

### Collaboration

FraiseQL welcomes discussion, feedback, and contributions that uphold these principles.
Contributions that compromise clarity, correctness, or coherence will be declined β€” kindly but firmly.

### The Spirit of FraiseQL

FraiseQL is a work of craft.
It values depth over breadth, signal over noise, and thoughtful architecture over endless abstraction.
The goal is not to build a community of many, but a foundation of quality that endures.

---

*Inspired by the Contributor Covenant, reimagined for the era of individual craft.*

---

## πŸš€ Quick Start

Expand All @@ -26,11 +55,20 @@ Thank you for your interest in contributing to FraiseQL! This document provides

## πŸ“‹ Development Guidelines

### Code Quality
- **Type Hints**: All code must include type hints
- **Documentation**: Document public APIs with docstrings
- **Testing**: Maintain >95% test coverage for new code
- **Style**: Code is automatically formatted with `black` and `ruff`
### Code Quality (AI-Maintainability Standards)

FraiseQL maintains **exceptional code quality** to ensure AI maintainability:

- **Type Safety** (CRITICAL): All code must pass `pyright` with **0 errors**
```bash
uv run pyright # Must show: 0 errors, 0 warnings
```
- **Type Hints**: Full type annotations for all functions (no `Any` without justification)
- **Documentation**: Document public APIs with Google-style docstrings
- **Testing**: Maintain comprehensive test coverage (currently 3,448 tests)
- **Style**: Code is automatically formatted with `ruff`

**Why this matters**: FraiseQL is designed to be AI-maintainable. Perfect type safety means AI assistants (Claude Code, Copilot, Cursor) can understand and maintain the codebase reliably.

### Testing Strategy
- **Unit Tests**: Add unit tests in `tests/unit/` for logic components
Expand Down Expand Up @@ -68,9 +106,6 @@ Thank you for your interest in contributing to FraiseQL! This document provides
- **Chat**: Join our community discussions in GitHub Discussions
- **Email**: Contact maintainer at lionel.hamayon@evolution-digitale.fr

### Code of Conduct
We are committed to providing a welcoming and inclusive community. By participating in this project, you agree to abide by our Code of Conduct (treating everyone with respect and kindness).

## πŸ† Recognition

Contributors are recognized in:
Expand Down
Loading
Loading