AGENTS.md
AI Coding Agent Guide for wepppy
Authorship
This document and all AGENTS.md documents are maintained by GitHub Copilot / Codex which retain full authorship rights for all AGENTS.md content revisions. Agents can author AGENTS.md document when and where they see fit.
Purpose
- This is the global, high-signal onboarding map for agent work in this repository.
- Keep root guidance concise; place deep subsystem details in nested
AGENTS.mdfiles and docs. - Prefer progressive disclosure: read only the docs needed for the task at hand.
Instruction Discovery
- Instruction precedence is nearest-to-workdir: global defaults -> repo root -> nested directories.
- When a nested
AGENTS.mdexists for files you are editing, treat it as the primary local playbook. - Use root
AGENTS.mdfor repository-wide invariants and routing only.
Core Directives
??in prompt means provide critical analysis only; do not implement code.- Ask for human clarification when requirements or debug context are ambiguous.
- Keep docs terse: Codex loads context in bulk and does not compress verbose guidance.
- Do not add fallback wrappers that silently mask missing required dependencies.
- Prefer explicit failures over hidden recovery paths for easier debugging.
- Do not create or switch to a new git branch unless the user explicitly asks for it.
Agent Feedback Loop
- Treat avoidable friction as diagnostic signal about the codebase, docs, tooling, or task framing.
- Surface unprompted feedback when it would materially improve developer ergonomics, architectural clarity, or shared docs, tooling, and agent-facing interfaces.
- Distinguish clearly between:
- confirmed defects/blockers
- local painpoints or ambiguity
- speculative improvement ideas
- Keep unsolicited feedback concise and actionable: name the friction, why it mattered, and the smallest improvement that would reduce recurrence.
- Do not invent speculative redesigns; prefer substrate improvements tied to concrete task experience.
Exception Handling (Required)
- Do not introduce bare
except:or broadexcept Exceptionhandlers in production paths unless the block is a deliberate boundary. - Prefer narrow, expected exception types and preserve canonical error contracts when translating errors.
- Never swallow exceptions silently; log with context and either re-raise or return an explicit, contract-compliant error response.
- If a broad catch is unavoidable (for example, boundary cleanup/telemetry), document why in a short comment and keep the protected block minimal.
ExecPlans (Required)
- For complex features, significant refactors, or multi-hour work, execute against an active ExecPlan.
- Standard location for active ExecPlans is
docs/work-packages/*/prompts/active/. - Ad hoc ExecPlans may live under
docs/mini-work-packages/*.mdwhen explicitly designated by the user. - Current ad hoc active ExecPlan:
none. - Current work-package active ExecPlan:
docs/work-packages/20260403_roads_map_drilldown/prompts/active/roads_map_drilldown_execplan.md - Before authoring or revising an ExecPlan, read
docs/prompt_templates/codex_exec_plans.md. - Active plans are living documents: keep
Progress,Surprises & Discoveries,Decision Log, andOutcomes & Retrospectivecurrent. - When asked to run a plan end-to-end, proceed milestone by milestone without pausing for extra confirmation unless blocked by an external dependency.
- If multiple active ExecPlans exist, explicitly identify which plan you are executing before edits.
- If the active plan is under
docs/work-packages/*/prompts/active/, update both the active ExecPlan anddocs/work-packages/*/tracker.mdbefore handoff.
Change Scope Discipline (Required)
- Do not add speculative abstractions for unsupported or hypothetical cases.
- Match existing data and API contracts first; call out contract changes before implementation.
- Prefer the smallest fix that resolves the confirmed failing path.
- State assumptions explicitly in change notes before broadening behavior.
- Add regression coverage for the exact failure mode.
Dependency and Performance Discipline (Required)
- Before recommending or integrating a new external dependency, run the precedent check and evaluation gates in
docs/standards/dependency-evaluation-standard.md. - For geospatial/raster/hydrology/climate/model execution paths, treat
weppcloud-wbt,wepppyo3,oxidized-rasterstats, andperidotas the performance baseline. - Do not propose pure-Python replacements for those paths without benchmark and parity evidence on WEPPpy-representative workloads.
- Treat marketing claims and institutional endorsements as hypotheses; route unproven proposals to a scoped evaluation work package before integration.
- Preserve "Own the Stack": prefer extending owned components over adding external dependencies that duplicate existing capability.
Repository Contracts
- Canonical RQ response and error payload contract:
docs/schemas/rq-response-contract.md. - Canonical CSRF contract for browser/session boundaries:
docs/schemas/weppcloud-csrf-contract.md. - Canonical WEPP output scope contract (baseline vs roads):
docs/schemas/output-scope-contract.md. - Update
wepppy/rq/job-dependencies-catalog.mdwhenever enqueue sites or dependency edges change in:wepppy/rq/*.pywepppy/microservices/rq_engine/*- rq-initiated route handlers
- Run
wctl check-rq-graphafter queue wiring edits; if drift is reported, regenerate withpython tools/check_rq_dependency_graph.py --write. - After queue wiring changes, manually validate against live job trees via
wepppy/rq/job_info.pyor the job dashboard.
Environment Baseline
- Assume Linux host with Docker, Docker Compose, and
wctlinstalled. - Local virtualenv baseline:
/workdir/wepppy/.venvis built from the samerequirements-uv.txtused bywepppy. - Compose source of truth:
docker/docker-compose.dev.yml. - Use
wctlwrappers for tests, container exec, and local orchestration. - Canonical run root is
/wc1/runs/; check it first when debugging run data.
Validation Entry Points
- Iteration loop:
wctl run-pytest tests/<path or module> - Pre-handoff sanity:
wctl run-pytest tests --maxfail=1 - Frontend changes:
wctl run-npm lintandwctl run-npm test - Stub/API surface changes:
wctl run-stubtest <module>andwctl check-test-stubs - RQ queue wiring changes:
wctl check-rq-graph - Dead-code refactor gate:
.venv/bin/vulture(configured inpyproject.toml, whitelist inwepppy/vulture_whitelist.py) - Code quality observability (non-blocking):
python3 tools/code_quality_observability.py --base-ref origin/master - Broad exception inventory/enforcement:
python3 tools/check_broad_exceptions.py --enforce-changed --base-ref origin/master - Docs changes:
wctl doc-lint --path <file>; preview spelling normalization withdiff -u <file> <(uk2us <file>) - Root onboarding size gate:
tools/check_agents_size.sh AGENTS.md
Code Quality Observability (Observe-Only)
- Treat complexity/LOC bands as triage telemetry, not merge blockers.
- Prefer changed-file deltas first; use hotspot tables to plan opportunistic cleanup.
- When a touched file worsens materially, capture a brief rationale or follow-up note in review artifacts.
Documentation Map
- Architecture overview:
ARCHITECTURE.md - Human-facing project overview:
readme.md - Active initiative board:
PROJECT_TRACKER.md - Full work package process:
docs/work-packages/README.md - Mini packages:
docs/mini-work-packages/ - Prompt/template catalog:
docs/prompt_templates/AGENTS.md - NoDb facade/collaborator implementation standard:
docs/standards/nodb-facade-collaborator-pattern.md - Vulture dead-code gate standard:
docs/standards/vulture-dead-code-gate-standard.md - Docker/local secret conventions:
docker/secrets/README.md
Subsystem Maps (Nearest AGENTS Wins)
- NoDb controllers and module contracts:
wepppy/nodb/AGENTS.md - WEPPcloud app/routes/controllers:
wepppy/weppcloud/AGENTS.md - Controller JS specifics:
wepppy/weppcloud/controllers_js/AGENTS.md - GL dashboard specifics:
wepppy/weppcloud/static/js/gl-dashboard/AGENTS.md - WEPP report templates:
wepppy/weppcloud/templates/reports/wepp/AGENTS.md - Playwright smoke tests and agent auth accounts:
wepppy/weppcloud/static-src/tests/smoke/AGENTS.md - RQ engine microservice:
wepppy/microservices/rq_engine/AGENTS.md - Test fixtures, stubs, markers, isolation:
tests/AGENTS.md - Docker stack conventions:
docker/AGENTS.md - WCTL and tooling wrappers:
wctl/AGENTS.md - Status/preflight/cao services:
services/status2/AGENTS.md,services/preflight2/AGENTS.md,services/cao/AGENTS.md
Security Guardrails
- Never commit secrets or tokens. Keep secrets in gitignored files and runtime env.
- Preserve run-scoped access expectations and auth checks when editing endpoints.
- Do not weaken validation, locking, or serialization safeguards in NoDb/RQ flows.
Root Exclusions
- Do not place long tutorials in this file (NoDb internals, frontend migration guides, route catalogs, or markdown tooling manuals).
- Do not duplicate subsystem instructions already maintained in nested
AGENTS.mdfiles. - Do not embed prompt templates in root onboarding text; keep templates under
docs/prompt_templates/. - Move growing sections to canonical docs and leave a short pointer here.
If Blocked
- Check the nearest subsystem
AGENTS.md, then module README and tests. - Reuse existing patterns from adjacent code before introducing new abstractions.
- Ask a human when requirements are unclear or an external dependency blocks progress.
- When work is possible but unnecessarily difficult, note the friction and recommend the smallest doc/tooling/interface improvement in handoff for human review.
Root Size Policy
- Keep this file within roughly 100-160 lines.
- If a section grows beyond quick onboarding value, move detail to a canonical doc and leave a pointer.
- Prefer stable links over copied prose when updating this file.
- Re-check line count after major edits to avoid onboarding bloat.