GitHub

Decision boundary

Building on the core idea, human-in-the-loop is a critical step in agentic workflows. Here it is referenced as Operator-in-the-Loop (OITL). The distinction is important because it defines humans equipped with agents at execution gates, becoming operators.

Structural boundaries

OITL is defined at the Data, ML and forward-deployed boundaries via dbt SQL transformations, notebooks-based discovery and product knowledge as the respective surfaces for the operator to maintain execution.

A positive side-effect from such structure and the product intelligence notes (OKF) is organic and evidence-led schema evolution as surfaced knowledge reveals recurring questions, gaps and useful analytical shapes. This helps an operator iterate existing transforms over redesigning from scratch with no context. That means the database structure doesn't prescribe a STAR schema, Constellation schema or Snowflake schema. Adoption ties with a justification for it.

Sketch of the harness boundary showing shared scheduling policies, extraction and loading, transformation surface plus institutional information, and the MCP boundary. The ELT pipeline, with the harness readoption, is packaged as one compute unit. That makes it easier to scale vertically, in contrast to horizontally maintained distributed systems.
harness
extraction.py
load.py
cli.py
transforms/
connectors/
evaluators/
knowledge/
mcp_app/
mcp_server.py
notebooks/ independent exploration

Development Decisions

The development of the harness bears few fundamental principles:

  • Dependency Injection
    The harness is its own stable boundary. External adapters and sources shouldn't alter the harness logic. That keeps it stable. Dependency injection aka composition is a different directon from class inheritance that compounds to unnecessary code bloat and harness maintainability.
  • YAGNI
    You-Aren't-Gonna-Need-It is enforced over development iterations as a guardrail against bloated harness code, enabling efficient readability, maintenance and debugging.
  • Anchoring Bias
    Coding agents and operators share a common failure: the first stated fact, target, or framing can become heavier than the evidence that follows. The development process treats early assumptions as visible assumptions, not implementation truth, so later evidence can revise, contradict, or narrow the direction instead of orbiting the original anchor.

Rabbit holes I didn't scope here

  • MCP apps are a powerful way to have stateless widgets served as BI dashboards and charts. I've kept it for future work to understand scope and requirements before execution. Recommended watch.
  • Cache invalidation and busting. It's partially handled by Claude and ChatGPT, but it's not perfect. Mature cache control strategies are first on the TODO list.
  • Mature RBAC, just doesn't fit this objective.
  • Perfecting backfills into dbt. It is justified only in real deployments for product in services.
  • Self-healing operations. Redirected time to build the everything else 💀.
  • Automatically syncing OKF Knowledge to schema diffs. It's a simple fix with a pre-commit hook for agents. Didn't make skills another topic to address, to maintain brevity.