fix(math): correct comment-extremity sign in pca_project_cmnts (D1b)#2614
Closed
jucor wants to merge 1 commit into
Closed
fix(math): correct comment-extremity sign in pca_project_cmnts (D1b)#2614jucor wants to merge 1 commit into
jucor wants to merge 1 commit into
Conversation
This was referenced Jul 17, 2026
`pca_project_cmnts` computed `coefs = -scale * (1.0 + center)`, a literal, untranslated copy of Clojure's synthetic vote value `-1` (pca.clj:167-178). Clojure stays in raw-Postgres convention (AGREE=-1) throughout, so `-1` is correct there. Delphi flips votes to its own convention at the Postgres ingress (`postgres_vote_to_delphi`), fitting PCA on AGREE=+1 data, so the untranslated `-1` INVERTS comment extremity: `|correct| = scale*|1-center|` vs `|actual| = 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. Fix: `coefs = scale * (AGREE - center)` (AGREE=+1, from utils.general) — the faithful Delphi-convention port of Clojure's synthetic-AGREE projection. Docstring rewritten to document the convention translation. Tests (TDD, RED->GREEN): - Replace the tautological `test_pca_project_cmnts_formula` (it re-derived the implementation's own buggy formula) with one deriving expected values independently from the AGREE constant. - Add a behavioral sign test: unanimous-agree -> extremity 0, unanimous-disagree -> maximal. - Add an integration test spying on the extremity `E` reaching `priority_metric` through `_compute_comment_priorities` (works despite the #2571 mirror — it inspects the argument, not the return), pinned to hand-derived 0 and 2*sqrt(2). - 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. 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 the D12 `priority_metric` un-mirror is blocked on. Distinct from D1 (align_pca_signs, temporal ±eigenvector stability). Full delphi suite: 406 passed / 17 skipped / 47 xfailed / 0 failed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> commit-id:a6494735
Collaborator
Author
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.
pca_project_cmntscomputedcoefs = -scale * (1.0 + center), a literal,untranslated copy of Clojure's synthetic vote value
-1(pca.clj:167-178).Clojure stays in raw-Postgres convention (AGREE=-1) throughout, so
-1iscorrect there. Delphi flips votes to its own convention at the Postgres ingress
(
postgres_vote_to_delphi), fitting PCA on AGREE=+1 data, so the untranslated-1INVERTS comment extremity:|correct| = scale*|1-center|vs|actual| = scale*|1+center|(equal only at center==0). A near-unanimous-AGREEcomment (center -> +1) read as maximally extreme (2*scale) instead of ~0; a
near-unanimous-DISAGREE comment (center -> -1) read as ~0 instead of maximal.
Fix:
coefs = scale * (AGREE - center)(AGREE=+1, from utils.general) — thefaithful Delphi-convention port of Clojure's synthetic-AGREE projection.
Docstring rewritten to document the convention translation.
Tests (TDD, RED->GREEN):
test_pca_project_cmnts_formula(it re-derived theimplementation's own buggy formula) with one deriving expected values
independently from the AGREE constant.
unanimous-disagree -> maximal.
Ereachingpriority_metricthrough
_compute_comment_priorities(works despite the Clojure math.repness: priority-metric meta detection treats 0 as truthy, assigning META_PRIORITY^2 to every comment #2571 mirror — itinspects the argument, not the return), pinned to hand-derived 0 and 2*sqrt(2).
to Delphi convention by server/src/report.ts:388, so the regression path must
NOT re-flip.
Output-inert today:
priority_metricstill returns META_PRIORITY**2 (the #2571Clojure bug-mirror), so extremity affects no DynamoDB output yet and no golden
snapshots move. This is the extremity/PCA-parity groundwork the D12
priority_metricun-mirror is blocked on. Distinct from D1 (align_pca_signs,temporal ±eigenvector stability).
Full delphi suite: 406 passed / 17 skipped / 47 xfailed / 0 failed.
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
commit-id:b17cef9c
Stack: