procurement-ingest/lambdas/wo/email_processor/tests/fixtures/expected
Adam Moussa 0aef18029b
Fix WO parser advisories A1-A3 (PR #99 follow-ups)
A1 — AI-fallback comment_id nondeterminism: parsed comment_time is model
output and not stable across Lambda async retries, so on the ai_fallback
path the comment_id range-key time segment now derives from the email Date
header (deterministic per S3 object) instead of the model's comment_time.
The template path is unchanged (its comment_time is a pure function of the
raw email). Bedrock invoke pins temperature 0 so retries reproduce the same
extraction. Closes the #23 reopening on the AI path.

A2 — EMF record now carries the spec-required _aws.Timestamp (epoch ms) so
CloudWatch reliably extracts the ParseOutcome datapoint that the
fallback-rate alarm depends on.

A3 — T1 New Comment capture no longer truncates at the first blank line;
multi-paragraph comments are captured through internal blanks and terminate
at the next label/separator. 17 golden files regenerated from the real
fixtures accordingly.

Hardening from the sh-security-review pass on this diff:
- _header_date_iso is total: OverflowError/OSError from an extreme Date
  header fall back to 'nocomment' instead of failing the invocation.
- _capture_block trims blanks in O(n) (no pop(0)) — removes a quadratic
  path on a crafted large blank run.
- work_order_id is enforced digits-only on BOTH parse paths before it is
  used as a DynamoDB key, so prompt-injected AI output cannot forge '#'
  range-key segments or land on an arbitrary WO.
2026-07-16 12:35:37 -04:00
..
assign-html-01.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
assign-html-02.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
assign-html-03.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
assign-html-04.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
assign-html-05.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-01.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-02.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-03.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-04.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-05.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-06.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-07.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-08.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-09.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-10.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-11.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-12.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-13.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-14.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-15.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-16.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-17.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-18.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-19.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-20.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-21.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-22.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-23.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-24.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-25.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-26.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-27.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-28.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-29.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-30.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-31.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-32.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-33.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-34.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-35.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-36.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-37.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-38.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-39.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-40.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-41.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-42.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-43.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-44.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-45.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-46.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-47.json Fix WO parser advisories A1-A3 (PR #99 follow-ups) 2026-07-16 12:35:37 -04:00
update-plaintext-48.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-49.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00
update-plaintext-50.json Add offline WO parser test suite 2026-07-15 20:11:04 -04:00