This document is the compact, repository-facing summary of the attached PipeForge specification. The authoritative execution tracker is the CK plan.
- Foundation and repository conventions
- PostgreSQL, RabbitMQ, MinIO, Prometheus, and Grafana local infrastructure
- Go API runtime, migrations, health, logging, metrics
- Identity, refresh rotation, API keys, scopes, ownership
- Immutable dataset metadata and streamed small uploads
- Presigned multipart upload and expiry cleanup
- Versioned JSON Schema contracts, RabbitMQ topology, outbox publisher
- Job state machine, idempotency, fair scheduling
- Typed Python worker, broker/storage adapters, heartbeats
- CSV/JSONL/Parquet readers and bounded processing pipeline
- Profiling and report artifacts
- Data-quality rules and result artifacts
- IQR/Z-score anomaly detection
- Result consumer, inbox deduplication, artifact APIs
- Leases, renewal, expiry recovery, retries, dead letters
- Throttled progress and cooperative cancellation
pipectlpublic-API client- Upload hardening, quotas, rate limits, audit, threat model
- Cross-service observability, dashboards, and runbooks
- Images, CI, integration/e2e validation, docs audit, release readiness
- PostgreSQL is the control-plane source of truth.
- Python workers process data and publish events; they do not write core job state.
- Long-running work crosses the Go/Python boundary through versioned asynchronous messages.
- At-least-once delivery is expected. Consumers use inbox/idempotency and attempt/lease validation.
- Raw dataset versions are immutable. Artifacts are attempt-scoped until Go accepts a result.
- Dataset metadata is authoritative in PostgreSQL; raw bytes are private MinIO objects addressed only by server-generated keys.
- Retryable failures are bounded and jittered; permanent failures do not loop; dead letters are inspectable and replayable only through authorization.
- Public APIs expose controlled lifecycle commands, not unrestricted status mutation.
Each logical change gets its own Conventional Commit. Before committing:
- Run the narrowest relevant test.
- Run formatter/static checks for changed languages.
- Validate schemas/migrations/infrastructure when touched.
- Scan the staged diff for secrets.
- Record the commit hash, message, changed components, commands, results, and next slice in the task report.
Do not create an empty commit merely to match a numbered list. If a baseline item is not real progress, combine it with the smallest adjacent behavior and explain why.