# PD V3 Post-Processing - **Inputs:** Raw/isotonic PD outputs and model T weight from the processing block. - **Outputs:** Final weighted PD and assigned grade. - **Artifacts:** `grade_cutoffs.csv` generated from the Weighted Grades Cutoff workbook tab. - **Tests:** `python -m unittest sequence-3.pd_v3_post_processing.test_block`. - **Signature:** Sequence-3 convention: `__main__` must keep an explicit typed parameter list covering every input (int/float/str) and build the record from those args before weighting/grades; keep aligned with the block schemas. - **UAT tolerance:** Downstream sequence-3 UAT scripts treat post-processing mismatches within `1e-4` as equivalent to expected values. - **PD inputs:** `pd_a`, `pd_b`, and `pd_t` must be provided as non-null numbers (per schema); post-processing raises if any are missing/null. ## Schema notes - The request and response schemas for post-processing are treated as immutable contracts. They already describe flat scalar fields (plus the array `pd_scores`), so keep them as-is and never refactor them into dict-of-dicts/object-of-dicts—arrays of dicts remain acceptable.