Pomona · Specialist Service

Automation Engine

Turns guarded risk labels from the reasoners into human-readable suggestions. It writes nothing to a valve, pump, or doser — every action here waits for a person to approve it.

v0.1 · suggestions only 5 rules loaded

How a suggestion gets made

01

Risk labels arrive

A reasoner posts labels like high_ec or fungal_pressure to /v1/automation/evaluate.

02

Rules are matched

Each label is checked against app/rules.yaml. A match produces one suggestion.

03

A person decides

The suggestion sits pending until someone approves or rejects it. Nothing runs on its own.

Endpoints

MethodPathDescription
GET/healthService status and count of loaded rules.
POST/v1/automation/evaluateSubmit risk labels, receive matching suggestions.
GET/v1/automation/suggestionsList suggestions, optionally filtered by status.
POST/v1/automation/suggestions/{id}/approveRecord a decision to approve.
POST/v1/automation/suggestions/{id}/rejectRecord a decision to reject.

Current rules

high_ph / low_phCheck the water / dosing system
high_ec / low_ecReview nutrient dosing
fungal_pressureConsider ventilation, inspect canopy
water_level_riskCheck the irrigation system

Safety rails

Rejected at startup, no matter what the rules file says:

  • direct_pesticide_dosage
  • autonomous_fertigation_change
  • direct_actuator_control
  • definitive_disease_diagnosis
  • unsafe_chemical_recommendation

A rule whose action matches this vocabulary fails to load and the service refuses to start. Editing the rules file alone can't make this service unsafe.

Part of Pomona

This engine only consumes risk labels — the reasoners that produce them are fine-tuned models published separately.