Project Structure¶
Repository Layout¶
gunn/
├── .github/
│ └── workflows/
│ └── ci.yml # CI pipeline (lint, type checks, tests, contracts)
├── .kiro/ # Kiro guidance and specs consumed by the AI agent
│ ├── steering/
│ └── specs/
├── docs/ # Human-facing documentation (kept in sync with steering docs)
│ ├── product.md
│ ├── structure.md
│ └── tech.md
├── schemas/ # Contract definitions checked in CI
│ ├── README.md
│ ├── openapi.yaml
│ └── proto/
│ └── simulation.proto
├── src/gunn/ # Python package (see layout below)
├── tests/ # Repository-level tests (integration, performance, contract)
│ ├── contract/
│ ├── integration/
│ ├── performance/
│ └── test_*.py
├── dist/ # Build artifacts (created by `uv build`, may be absent locally)
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── TEST_STATUS.md
├── pyproject.toml # Project + tool configuration
└── uv.lock # Dependency lock file
Source Code Organization (current implementation)¶
src/gunn/
├── __init__.py # Public exports (Orchestrator, AgentHandle, etc.)
├── __main__.py # Allows `python -m gunn`
├── adapters/ # Adapter namespaces (placeholders until tasks 17–19)
│ ├── __init__.py
│ ├── llm/__init__.py
│ ├── unity/__init__.py
│ └── web/__init__.py
├── cli/
│ ├── __init__.py
│ ├── __main__.py
│ └── replay.py # Deterministic replay CLI (implemented)
├── core/
│ ├── __init__.py
│ ├── event_log.py # Append-only log with hash chain + concurrency tests
│ └── orchestrator.py # Orchestrator, AgentHandle, default validator (stubbed logic)
├── facades/
│ └── __init__.py # Placeholder package for upcoming RL/message facades
├── policies/
│ ├── __init__.py
│ └── observation.py # Partial observation filtering + JSON Patch deltas
├── schemas/
│ ├── __init__.py
│ ├── messages.py # Pydantic models (WorldState, View, etc.)
│ └── types.py # TypedDicts (Intent, Effect, ObservationDelta, CancelToken)
├── storage/
│ ├── __init__.py
│ └── dedup_store.py # SQLite + in-memory deduplication store
└── utils/
├── __init__.py
├── errors.py # Structured error types (StaleContextError, etc.)
├── hashing.py # Hash chain utilities
├── hashing_demo.py # Example usage (dev aid)
├── scheduling.py # Weighted round-robin scheduler
├── telemetry.py # Logging, Prometheus metrics, timers
└── timing.py # TimedQueue / monotonic clock helpers (+ demos/tests)
Unit tests for core utilities live alongside their modules (
test_*.py
insidesrc/gunn/**
).Repository-level integration/performance/contract tests are in
tests/
.Snapshot storage, validation policies, and facade implementations are tracked in
tasks.md
and not yet present in the tree.
Key Design Principles (still applicable)¶
Schema separation: Contract files live in
schemas/
; runtime models live insrc/gunn/schemas/
.Deterministic core:
core/orchestrator.py
andcore/event_log.py
enforce ordering and log integrity.Observation policies:
policies/observation.py
encapsulates filtering/delta logic with configurable limits.Two-phase processing: Orchestrator handles idempotency, quotas, backpressure, fairness, then effect emission.
Telemetry:
utils/telemetry.py
centralises logging + metrics; metrics server start is opt-in viastart_metrics_server
.
Configuration & Tooling Files¶
pyproject.toml
configures Hatchling, uv integration, dependencies, Ruff, MyPy, and Pytest.uv.lock
locks dependency versions..github/workflows/ci.yml
runs formatting, linting, typing, tests, and contract drift checks.CI/formatting assumes
uv
for environment management; local.venv
directories are optional and not checked in.
Development Conventions¶
src/
layout with explicitpy.typed
for type checkers.Strict typing in production code; tests relax some MyPy rules via overrides.
Async-first design: orchestration, queues, and stores expose async APIs.
Docs and steering guides mirror each other—update
docs/
and.kiro/steering/
together.
Import Patterns¶
# Public API imports
from gunn import Orchestrator, AgentHandle, OrchestratorConfig
# Internal usage examples
from gunn.core.orchestrator import Orchestrator
from gunn.policies.observation import ObservationPolicy
from gunn.schemas.types import Intent, Effect
from gunn.storage.dedup_store import DedupStore
from gunn.utils.telemetry import setup_logging, PerformanceTimer
Open Source Metadata¶
Root documents (
LICENSE
,CONTRIBUTING.md
,CODE_OF_CONDUCT.md
,SECURITY.md
) stay in sync with GitHub publishing expectations.