python-math #2: fix(math): correct comment-extremity sign in pca_project_cmnts (D1b) - #2615
Open
jucor wants to merge 1 commit into
Open
python-math #2: fix(math): correct comment-extremity sign in pca_project_cmnts (D1b)#2615jucor wants to merge 1 commit into
jucor wants to merge 1 commit into
Conversation
This was referenced Jul 17, 2026
Draft
This was referenced Jul 18, 2026
Closed
Closed
Closed
Closed
Closed
Closed
Closed
Closed
Closed
This was referenced Jul 18, 2026
This was referenced Jul 25, 2026
Draft
Draft
Draft
python-math #43: docs(delphi): s7 goal state + journal — mode collapse executed, battery 20/20
#2672
Draft
Draft
Draft
5 tasks
3 tasks
…ect_cmnts (D1b) ## What was wrong `pca_project_cmnts` — the function that projects each comment into the PCA opinion space to measure its extremity — computed `coefs = -scale * (1.0 + center)`, a literal, untranslated copy of the Clojure engine's synthetic vote value `-1` (`pca.clj:167-178`). Clojure stays in the raw-Postgres vote convention (AGREE = -1) throughout, so `-1` is correct there. Delphi (the Python math engine) flips votes to its own convention at the Postgres ingress (`postgres_vote_to_delphi`) and fits PCA on AGREE = +1 data, so the untranslated `-1` INVERTS comment extremity: the correct magnitude is `scale*|1-center|` but the code produced `scale*|1+center|` (equal only at `center == 0`). A near-unanimous-AGREE comment (`center -> +1`) read as maximally extreme (`2*scale`) instead of ~0; a near-unanimous-DISAGREE comment (`center -> -1`) read as ~0 instead of maximal. ## The fix `coefs = scale * (AGREE - center)` with `AGREE = +1` (from `utils.general`) — the faithful Delphi-convention port of Clojure's synthetic-AGREE projection. The docstring is rewritten to document the convention translation. ## Testing (TDD, RED -> GREEN) - Replaced the tautological `test_pca_project_cmnts_formula` (it re-derived the implementation's own buggy formula) with one that derives expected values independently from the AGREE constant. - Added a behavioral sign test: unanimous-agree -> extremity 0, unanimous-disagree -> maximal. - Added an integration test spying on the extremity `E` reaching `priority_metric` through `_compute_comment_priorities`, pinned to hand-derived values 0 and `2*sqrt(2)`. This works despite the #2571 mirror (`priority_metric` deliberately reproduces a Clojure bug by returning `META_PRIORITY**2`) because the test inspects the argument, not the return value. - Added a provenance comment in `regression/utils.py`: the regression CSVs are pre-flipped to Delphi convention by `server/src/report.ts` (~line 393, `String(-row.vote)`), so the regression path must NOT re-flip. Full delphi suite: 406 passed / 17 skipped / 47 xfailed / 0 failed. ## Impact Output-inert today: `priority_metric` still returns `META_PRIORITY**2` (the #2571 Clojure bug-mirror), so extremity affects no DynamoDB output yet and no golden snapshots move. This is the extremity/PCA-parity groundwork that fix D12 (un-mirroring `priority_metric`) is blocked on. Distinct from fix D1 (`align_pca_signs`, which handles temporal ±eigenvector stability). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> commit-id:a6494735
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What was wrong
pca_project_cmnts— the function that projects each comment into the PCA opinion space to measure its extremity — computedcoefs = -scale * (1.0 + center), a literal, untranslated copy of the Clojure engine's synthetic vote value-1(pca.clj:167-178). Clojure stays in the raw-Postgres vote convention (AGREE = -1) throughout, so-1is correct there. Delphi (the Python math engine) flips votes to its own convention at the Postgres ingress (postgres_vote_to_delphi) and fits PCA on AGREE = +1 data, so the untranslated-1INVERTS comment extremity: the correct magnitude isscale*|1-center|but the code producedscale*|1+center|(equal only atcenter == 0). A near-unanimous-AGREE comment (center -> +1) read as maximally extreme (2*scale) instead of ~0; a near-unanimous-DISAGREE comment (center -> -1) read as ~0 instead of maximal.The fix
coefs = scale * (AGREE - center)withAGREE = +1(fromutils.general) — the faithful Delphi-convention port of Clojure's synthetic-AGREE projection. The docstring is rewritten to document the convention translation.Testing (TDD, RED -> GREEN)
test_pca_project_cmnts_formula(it re-derived the implementation's own buggy formula) with one that derives expected values independently from the AGREE constant.Ereachingpriority_metricthrough_compute_comment_priorities, pinned to hand-derived values 0 and2*sqrt(2). This works despite the Clojure math.repness: priority-metric meta detection treats 0 as truthy, assigning META_PRIORITY^2 to every comment #2571 mirror (priority_metricdeliberately reproduces a Clojure bug by returningMETA_PRIORITY**2) because the test inspects the argument, not the return value.regression/utils.py: the regression CSVs are pre-flipped to Delphi convention byserver/src/report.ts(~line 393,String(-row.vote)), so the regression path must NOT re-flip.Full delphi suite: 406 passed / 17 skipped / 47 xfailed / 0 failed.
Impact
Output-inert today:
priority_metricstill returnsMETA_PRIORITY**2(the #2571 Clojure bug-mirror), so extremity affects no DynamoDB output yet and no golden snapshots move. This is the extremity/PCA-parity groundwork that fix D12 (un-mirroringpriority_metric) is blocked on. Distinct from fix D1 (align_pca_signs, which handles temporal ±eigenvector stability).Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
commit-id:a6494735
Stack: