Skip to content

fix(math): correct comment-extremity sign in pca_project_cmnts (D1b)#2614

Closed
jucor wants to merge 1 commit into
spr/edge/31321c47from
spr/edge/b17cef9c
Closed

fix(math): correct comment-extremity sign in pca_project_cmnts (D1b)#2614
jucor wants to merge 1 commit into
spr/edge/31321c47from
spr/edge/b17cef9c

Conversation

@jucor

@jucor jucor commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator

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 Clojure math.repness: priority-metric meta detection treats 0 as truthy, assigning META_PRIORITY^2 to every comment #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:388, 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:b17cef9c


Stack:


⚠️ Part of a stack created by spr. Do not merge manually using the UI - doing so may have unexpected results.

`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
@jucor
jucor force-pushed the spr/edge/b17cef9c branch from 3925dd4 to c51b742 Compare July 17, 2026 16:32
@jucor

jucor commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator Author

Superseded by #2615 — spr re-created the PR after the commit was amended (provenance line-number fix). Identical change; #2615 is the live one in the stack.

@jucor jucor closed this Jul 17, 2026
@jucor
jucor deleted the spr/edge/b17cef9c branch July 17, 2026 16:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant