commits
implements full blocks support with:
- block_types: create, filter, get by slug, update
- block_schemas: create, filter, get by checksum/id (server-side sha256 checksum)
- block_documents: create, filter, get, update, delete
uses std.json.Stringify streaming pattern for json serialization.
health endpoint now returns "ok" (text/plain) to match python server.
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- move uuid functions to utilities/uuid.zig
- move timestamp functions to utilities/time.zig
- create api/routing.zig for path extraction and run name generation
- rename extractIdSimple to extractIdAfter (actually describes what it does)
- delete common.zig
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- implement POST /flows/filter and POST /task_runs/filter endpoints
- split db/sqlite.zig into domain modules (flows, flow_runs, task_runs, events)
to respect 500 line limit per file
- move messaging.zig from events/ to utilities/ to match prefect structure
- consolidate test scripts in scripts/ with descriptive names:
- test-flow: SDK integration test
- test-api-sequence: comprehensive HTTP API test
- test-events-subscribe: websocket subscription test
- test-events-sdk: events with SDK test
- test-websocket: websocket ping/pong test
- convert all scripts to uv inline script metadata format
- update CLAUDE.md and ROADMAP.md
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- events/ for event system (messaging)
- orchestration/ for state transition logic
- main.zig as only root module (besides logging.zig utility)
mirrors python prefect server layout
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
was an old std.http implementation, replaced by zap. not imported anywhere.
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
name describes what it does, not the transport
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
main.zig now just composes the server entry point (57 lines).
websocket handlers moved to src/api/websocket.zig where they belong.
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
implements global orchestration transforms from python prefect server:
- SetStartTime: record when first entering RUNNING state
- SetEndTime: record when entering terminal state (COMPLETED/FAILED/etc)
- IncrementRunTime: accumulate time spent in RUNNING state
- IncrementRunCount: increment run_count when entering RUNNING
also fixes timestamp precision from seconds to microseconds.
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
verifies compatibility with prefect.events.clients.PrefectEventSubscriber
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- messaging.zig: subscriber management with filtering support
- main.zig: /events/out handler with auth/filter protocol
- broadcasts events to connected subscribers in real-time
- test_events_out.py: integration test verifying the flow
protocol:
1. client sends {"type": "auth", "token": "..."}
2. server responds {"type": "auth_success"}
3. client sends {"type": "filter", "filter": {...}}
4. server streams {"type": "event", "event": {...}}
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- scripts/benchmark: compare zig vs python prefect servers
- justfile: bench-zig, bench-python, bench-compare commands
- src/main.zig: improved request error logging
- docs: rename prefect-zig to prefect-server throughout
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- fix event_persister to store resource/payload/related correctly
(was storing full raw json as resource, empty as payload)
- fix follows field to be null instead of empty string
- add truncation detection with warning logs
- expand test_flow.py with cache policy and transaction tests
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
concise overview of implemented components:
- web server: route dispatch, resource handlers
- database: sqlite layer, query patterns
- services: background worker registry
- messaging: bounded channel, backpressure
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- remove static buffer pattern in favor of allocator-based approach
- db functions now take Allocator param for cleaner memory management
- add task_run table and full api: create, read, set_state
- task runs support optional flow_run_id with proper NULL handling
- idempotency via task_key+dynamic_key lookup
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- websocket endpoint /api/events/in for receiving client events
- event persistence with batching, deduplication, retention trimming
- messaging layer with bounded channel (50k capacity) for backpressure
- service registry pattern for background workers
- uuid format fix: store/return standard 36-char dashed format
- structured logging with level control via env vars
- GET /api/flows/{id} endpoint
- justfile for dev commands
- test scripts for python client
- CLAUDE.md and ROADMAP.md for project documentation
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- replace raw sqlite3 C bindings with zqlite library
- add mutex-protected global connection for thread safety
- wrap state transitions in atomic transactions
- move SQL out of route handlers into db module
- add concise readme
- add uuid-zig dependency for proper uuid v4 generation
- split routes.zig into flows.zig, flow_runs.zig, admin.zig, logs.zig
- extract shared utilities to common.zig (normalizeUuid, getTimestamp, etc)
- add sqlite pragmas: WAL mode, busy_timeout, foreign_keys
- add test-flow-sequence script for integration testing
- add loq.toml config for line count limits
all flow run tests pass (success and failure cases)
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
uses prek (rust pre-commit replacement) with uvx
- loq: line limit check
- zig fmt: format check
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- http server with thread pool (std.http.Server + std.Thread.Pool)
- sqlite database with flow, flow_run, flow_run_state tables
- endpoints: /health, /flows/, /flow_runs/, /flow_runs/{id}/set_state
- test script using uv shebang to verify python client compatibility
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
implements full blocks support with:
- block_types: create, filter, get by slug, update
- block_schemas: create, filter, get by checksum/id (server-side sha256 checksum)
- block_documents: create, filter, get, update, delete
uses std.json.Stringify streaming pattern for json serialization.
health endpoint now returns "ok" (text/plain) to match python server.
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- move uuid functions to utilities/uuid.zig
- move timestamp functions to utilities/time.zig
- create api/routing.zig for path extraction and run name generation
- rename extractIdSimple to extractIdAfter (actually describes what it does)
- delete common.zig
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- implement POST /flows/filter and POST /task_runs/filter endpoints
- split db/sqlite.zig into domain modules (flows, flow_runs, task_runs, events)
to respect 500 line limit per file
- move messaging.zig from events/ to utilities/ to match prefect structure
- consolidate test scripts in scripts/ with descriptive names:
- test-flow: SDK integration test
- test-api-sequence: comprehensive HTTP API test
- test-events-subscribe: websocket subscription test
- test-events-sdk: events with SDK test
- test-websocket: websocket ping/pong test
- convert all scripts to uv inline script metadata format
- update CLAUDE.md and ROADMAP.md
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
implements global orchestration transforms from python prefect server:
- SetStartTime: record when first entering RUNNING state
- SetEndTime: record when entering terminal state (COMPLETED/FAILED/etc)
- IncrementRunTime: accumulate time spent in RUNNING state
- IncrementRunCount: increment run_count when entering RUNNING
also fixes timestamp precision from seconds to microseconds.
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- messaging.zig: subscriber management with filtering support
- main.zig: /events/out handler with auth/filter protocol
- broadcasts events to connected subscribers in real-time
- test_events_out.py: integration test verifying the flow
protocol:
1. client sends {"type": "auth", "token": "..."}
2. server responds {"type": "auth_success"}
3. client sends {"type": "filter", "filter": {...}}
4. server streams {"type": "event", "event": {...}}
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- scripts/benchmark: compare zig vs python prefect servers
- justfile: bench-zig, bench-python, bench-compare commands
- src/main.zig: improved request error logging
- docs: rename prefect-zig to prefect-server throughout
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- fix event_persister to store resource/payload/related correctly
(was storing full raw json as resource, empty as payload)
- fix follows field to be null instead of empty string
- add truncation detection with warning logs
- expand test_flow.py with cache policy and transaction tests
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
concise overview of implemented components:
- web server: route dispatch, resource handlers
- database: sqlite layer, query patterns
- services: background worker registry
- messaging: bounded channel, backpressure
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- remove static buffer pattern in favor of allocator-based approach
- db functions now take Allocator param for cleaner memory management
- add task_run table and full api: create, read, set_state
- task runs support optional flow_run_id with proper NULL handling
- idempotency via task_key+dynamic_key lookup
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- websocket endpoint /api/events/in for receiving client events
- event persistence with batching, deduplication, retention trimming
- messaging layer with bounded channel (50k capacity) for backpressure
- service registry pattern for background workers
- uuid format fix: store/return standard 36-char dashed format
- structured logging with level control via env vars
- GET /api/flows/{id} endpoint
- justfile for dev commands
- test scripts for python client
- CLAUDE.md and ROADMAP.md for project documentation
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- add uuid-zig dependency for proper uuid v4 generation
- split routes.zig into flows.zig, flow_runs.zig, admin.zig, logs.zig
- extract shared utilities to common.zig (normalizeUuid, getTimestamp, etc)
- add sqlite pragmas: WAL mode, busy_timeout, foreign_keys
- add test-flow-sequence script for integration testing
- add loq.toml config for line count limits
all flow run tests pass (success and failure cases)
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- http server with thread pool (std.http.Server + std.Thread.Pool)
- sqlite database with flow, flow_run, flow_run_state tables
- endpoints: /health, /flows/, /flow_runs/, /flow_runs/{id}/set_state
- test script using uv shebang to verify python client compatibility
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>