chore(plating): de-dash shipped code + intake-neutral customer emails

Replace em-dashes and en-dashes with hyphens across 789 shipped source
files (py/xml/js/scss) so the delivered module reads as human-written;
em-dashes had become a recognizable AI-generated tell. Internal .md dev
notes are excluded. The WO-sticker mojibake strippers keep their dash
search targets (now written — / –). No logic changes: comments
and display strings only; validated with py_compile + lxml parse.

Rewrite the 7 customer notification emails to be intake-neutral
(ship-in / drop-off / pickup) and repair-aware, and fix the Shipped
email documents line (packing slip vs bill of lading; certificate only
when issued). Subjects use a hyphen separator.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsinghpal
2026-06-05 00:16:19 -04:00
parent c9eb61ee0c
commit 8c76a16366
789 changed files with 4692 additions and 4692 deletions

View File

@@ -20,7 +20,7 @@ _logger = logging.getLogger(__name__)
# ---------------------------------------------------------------------------
# Regexes derived from the real Fischerscope XDAL 600 export layout.
# Regexes - derived from the real Fischerscope XDAL 600 export layout.
# Sample line:
# n= 1 NiP 1= 0.6885 mils Ni 1 = 91.323 % P 1 = 8.6771 %
# Spaces vary; allow flexible whitespace + optional channel digit after NiP/Ni/P.
@@ -37,7 +37,7 @@ _READING_RE = re.compile(
re.VERBOSE,
)
# Equipment model first non-blank line that contains "Fischerscope" or
# Equipment model - first non-blank line that contains "Fischerscope" or
# similar gauge identifier. Captures everything up to end of line.
_EQUIPMENT_RE = re.compile(
r'(Fischerscope[^\n\r]*)',
@@ -113,7 +113,7 @@ def parse_fischerscope_file(filename, content_bytes):
'errors': [str], # non-fatal warnings encountered
}
Never raises on parse failure returns success=False with readings=[].
Never raises on parse failure - returns success=False with readings=[].
Raises only on unrecoverable I/O (e.g. corrupted file bytes).
"""
name = (filename or '').lower()
@@ -125,7 +125,7 @@ def parse_fischerscope_file(filename, content_bytes):
return _failed_result(
raw_text='',
error=(
'Legacy .doc format not supported re-export from the '
'Legacy .doc format not supported - re-export from the '
'gauge as .docx or .pdf. (python-docx reads .docx only; '
'old binary .doc needs LibreOffice conversion which '
"isn't installed.)"
@@ -149,7 +149,7 @@ def _parse_docx(content_bytes):
except ImportError:
return _failed_result(
raw_text='',
error='python-docx not installed cannot parse .docx files.',
error='python-docx not installed - cannot parse .docx files.',
)
try:
doc = docx.Document(io.BytesIO(content_bytes))
@@ -157,7 +157,7 @@ def _parse_docx(content_bytes):
return _failed_result(raw_text='', error='Could not open .docx: %s' % e)
# Build the raw text by walking paragraphs AND tables. Fischerscope
# exports vary sometimes the readings are in a table, sometimes
# exports vary - sometimes the readings are in a table, sometimes
# in justified paragraphs. Joining everything gives the regex a
# stable target.
parts = []
@@ -197,7 +197,7 @@ def _parse_pdf(content_bytes):
except ImportError:
return _failed_result(
raw_text='',
error='PyPDF2 not installed cannot parse .pdf files.',
error='PyPDF2 not installed - cannot parse .pdf files.',
)
try:
reader = PdfReader(io.BytesIO(content_bytes))
@@ -214,7 +214,7 @@ def _parse_pdf(content_bytes):
# PDF image extraction is unreliable across PDF producers. Best-
# effort: walk page resources looking for /XObject /Image entries.
# If anything fails, drop image silently the operator still has
# If anything fails, drop image silently - the operator still has
# the original file attached.
image_bytes = None
image_mime = None