Add required human review gate to the Agent pipeline.
Agent web jobs now stop after Brain consolidation and enter needs_review with a persisted review queue (blocking: high-severity, low-confidence, sensitive-category findings; audit sample of clean clusters). Humans decide confirm/reject/unsure/needs_clarification via new review API and frontend queue; a finalizer applies decisions (rejections suppressed with reason codes), performs bounded targeted reruns for clarifications, drafts RFIs only for kept issues, and only then marks the job done and sends the final email. Two-phase email (review-required, then final report), per-decision feedback labels with redacted aggregate metrics, restart recovery from job artifacts, and CLI --no-review bypass. Classic pipeline unchanged. 65 non-LLM tests.
This commit is contained in:
@@ -38,6 +38,22 @@ def _send(msg: EmailMessage) -> bool:
|
||||
return False
|
||||
|
||||
|
||||
def send_review_required(recipient_email: str, report: dict, review_url: str) -> bool:
|
||||
if not recipient_email or not _smtp_ready():
|
||||
return False
|
||||
msg = EmailMessage()
|
||||
msg["Subject"] = f"Conflict Checker - review required - {report.get('source', 'drawing set')}"
|
||||
msg["From"] = config.SMTP_FROM or config.SMTP_USER
|
||||
msg["To"] = recipient_email
|
||||
review = report.get("summary", {}).get("review", {})
|
||||
msg.set_content(
|
||||
"Agent analysis is complete and waiting for human review.\n\n"
|
||||
f"Required review items: {review.get('required', 0)}\n"
|
||||
f"Review URL: {review_url}\n"
|
||||
)
|
||||
return _send(msg)
|
||||
|
||||
|
||||
def send_conflict_report(
|
||||
recipient_email: str,
|
||||
report: Dict,
|
||||
|
||||
Reference in New Issue
Block a user