feat(pid): six P&ID critique focuses join drawing_finalize; plan/preflight flag a P&ID intent on the wrong layer set
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FKFStjEFzpGyLq5bMpWxTd
This commit is contained in:
co-authored by
Claude Opus 5
parent
346eac4ac6
commit
b4c1423c8e
@@ -5,10 +5,27 @@ from __future__ import annotations
|
||||
import hashlib
|
||||
import json
|
||||
import math
|
||||
import re
|
||||
from dataclasses import dataclass, field
|
||||
from numbers import Real
|
||||
from typing import Any
|
||||
|
||||
PID_INTENT_RE = re.compile(
|
||||
r"\b(p&id|pid|piping and instrumentation|process flow|instrument)\b", re.IGNORECASE
|
||||
)
|
||||
|
||||
|
||||
def intent_reads_as_pid(intent: str) -> bool:
|
||||
return bool(PID_INTENT_RE.search(str(intent or "")))
|
||||
|
||||
|
||||
def pid_plan_warnings(intent: str, layer_set_id: str) -> list[str]:
|
||||
if intent_reads_as_pid(intent) and str(layer_set_id).strip().lower() != "pid":
|
||||
return [
|
||||
f"intent reads as a P&ID but the layer set is '{layer_set_id}'; pass layer_set_id='pid'"
|
||||
]
|
||||
return []
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class PreflightQuestion:
|
||||
@@ -201,6 +218,12 @@ def preflight_drawing(
|
||||
for valid, code, field_name, value, message in parameter_rules:
|
||||
if not valid:
|
||||
conflicts.append(PreflightConflict(code, field_name, [value], message))
|
||||
for message in pid_plan_warnings(intent, normalized_layer_set):
|
||||
conflicts.append(
|
||||
PreflightConflict(
|
||||
"LAYER_SET_INTENT_MISMATCH", "layer_set_id", [layer_set_id, "pid"], message
|
||||
)
|
||||
)
|
||||
|
||||
normalized_spec = {
|
||||
"intent": str(intent).strip(),
|
||||
|
||||
Reference in New Issue
Block a user