Initial prototype#1
Open
danchild wants to merge 3 commits intoforge-sdlc:mainfrom
Open
Conversation
Add obervability API service and worker and pytest suite Signed-off-by: Dan Childers <dchilder@redhat.com> Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Add Containerfiles for API and worker services, devcontainer config, and compose files for ClickHouse datastore and the full forge observability stack Signed-off-by: Dan Childers <dchilder@redhat.com> Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Add README, CLAUDE.md, analytics architecture doc, and proposals template Signed-off-by: Dan Childers <dchilder@redhat.com> Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Forge Observability Plugin — Core Architecture Proposal
This PR establishes the foundational architecture, tooling, and data pipeline design for the Forge
Observability plugin. It is intended as a structural proposal for review and discussion, not a
feature-complete implementation.
The placeholder data models, example API endpoints, and seeded metrics are not recommendations — they exist
solely to exercise the full stack end-to-end and give reviewers something concrete to react to. The specific
metrics, schemas, and API shapes that matter for Forge Observability will be defined in subsequent work
once this foundation is validated.
What this establishes
Plugin structure — The package integrates cleanly into the broader Forge CLI namespace as forge
observability, contributing its own subcommand without requiring changes to the host CLI. The same plugin
pattern can be replicated by future Forge modules.
Data pipeline architecture (medallion) — Four dlt source pipelines (Langfuse, GitHub, JIRA, Prometheus) load
raw data into bronze tables concurrently via asyncio.gather. After each ingestion round, a dbt project
rebuilds silver and gold views on top of the raw data. This bronze → silver → gold separation gives us a
clean contract between raw ingestion and analytics-ready output — each layer can evolve independently.
Datastore-agnostic design — The repository layer (repository/repository.py) is a thin SQLAlchemy Core
abstraction. The API never speaks directly to the external datastore — it only constructs select() statements and hands
them to Repository.query(). Swapping the backing datastore is a one-line DSN change. ClickHouse is the
reference implementation here, but nothing in the application layer is coupled to it.
Modern data stack tooling rationale — dlt and dbt have emerged as reliable, widely-adopted primitives in the
modern data stack. dlt handles schema inference, incremental loading, and connector maintenance so we don't
have to; dbt provides a principled transformation layer with lineage, testing hooks, and a macro system
(see is_source_available()) that lets models degrade gracefully when upstream sources haven't loaded yet.
Adopting both now means we're building on a foundation with strong community support, rather than bespoke
pipeline glue that we'd have to maintain ourselves.
Containerized dev environment — The API and worker services are independently containerized and composed
with ClickHouse in devtools/, making it straightforward to run the full stack locally or adapt the
Dockerfiles for any target deployment environment.
Test harness — The test suite mocks Repository at the FastAPI dependency boundary, so API tests run without
a live datastore. Pipeline helper logic is tested in isolation. This pattern keeps the test suite fast and
reinforces the value of the repository abstraction.
What this is not
is intentional
What comes next
With the piping in place, future work can focus on: defining the metrics that actually matter for SDLC
observability, populating the gold layer with meaningful KPIs, and wiring the API to real Forge workflows —
without revisiting the ingestion architecture.