mirror of
https://github.com/Sea-Haven-Industries/procurement-ingest.git
synced 2026-10-07 16:08:54 +00:00
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. |
||
|---|---|---|
| .. | ||
| assign-html-01.json | ||
| assign-html-02.json | ||
| assign-html-03.json | ||
| assign-html-04.json | ||
| assign-html-05.json | ||
| update-plaintext-01.json | ||
| update-plaintext-02.json | ||
| update-plaintext-03.json | ||
| update-plaintext-04.json | ||
| update-plaintext-05.json | ||
| update-plaintext-06.json | ||
| update-plaintext-07.json | ||
| update-plaintext-08.json | ||
| update-plaintext-09.json | ||
| update-plaintext-10.json | ||
| update-plaintext-11.json | ||
| update-plaintext-12.json | ||
| update-plaintext-13.json | ||
| update-plaintext-14.json | ||
| update-plaintext-15.json | ||
| update-plaintext-16.json | ||
| update-plaintext-17.json | ||
| update-plaintext-18.json | ||
| update-plaintext-19.json | ||
| update-plaintext-20.json | ||
| update-plaintext-21.json | ||
| update-plaintext-22.json | ||
| update-plaintext-23.json | ||
| update-plaintext-24.json | ||
| update-plaintext-25.json | ||
| update-plaintext-26.json | ||
| update-plaintext-27.json | ||
| update-plaintext-28.json | ||
| update-plaintext-29.json | ||
| update-plaintext-30.json | ||
| update-plaintext-31.json | ||
| update-plaintext-32.json | ||
| update-plaintext-33.json | ||
| update-plaintext-34.json | ||
| update-plaintext-35.json | ||
| update-plaintext-36.json | ||
| update-plaintext-37.json | ||
| update-plaintext-38.json | ||
| update-plaintext-39.json | ||
| update-plaintext-40.json | ||
| update-plaintext-41.json | ||
| update-plaintext-42.json | ||
| update-plaintext-43.json | ||
| update-plaintext-44.json | ||
| update-plaintext-45.json | ||
| update-plaintext-46.json | ||
| update-plaintext-47.json | ||
| update-plaintext-48.json | ||
| update-plaintext-49.json | ||
| update-plaintext-50.json | ||