Skip to content

feat(reports): leftover-map singular values on grouping comparison graphic (v2.78.0) - #861

Draft
seonghobae wants to merge 15 commits into
feat/leftover-map-compare-plot-ticks-v2770from
feat/leftover-map-compare-plot-singular-v2780
Draft

seonghobae wants to merge 15 commits into
feat/leftover-map-compare-plot-ticks-v2770from
feat/leftover-map-compare-plot-singular-v2780

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 31, 2026 •

Copy link
Copy Markdown
Contributor

Current exact authority — 2026-09-21

Product delta

Comparison graphic axes expose persisted leftover_singular_value independently of persisted axis share. Finite persisted σ=0 remains visible; missing/non-finite/negative σ omits only σ. No value is inferred from share, rank, geometry, distance, or another psychometric value.

Source repair now present

The earlier exact App σ+share RED and the visible axis-caption clipping finding have source repairs on this ancestry. Commit d572f651... replaces the inherited share-only App expectations with exact persisted σ+share copy, right-bounds both SVG axis captions, and retains desktop/mobile Storybook screenshot evidence. Current convergence 69bdb2fc... also adopts #860's numeric coordinate-tick identity repair so equal formatted labels do not collapse distinct persisted coordinates or React keys.

This is source-repaired, not accepted. Exact-head Tests 35536928685 is still queued and no current protected/browser/security receipt has completed successfully. The unresolved clipping review thread therefore remains open until current-head rendered/bounding acceptance and hosted checks are GREEN; predecessor receipts do not transfer.

All active report descendants through current #876 are descendants of this exact head (merge-base=69bdb2fc..., behind_by=0). Do not duplicate the repaired App expectations downstream, loosen accessible-name assertions, or roll back persisted σ semantics. No force push, destructive rebase, self-approval, gate weakening, blind rerun, merge, or release is claimed.

…aphic (v2.78.0)

Caption persisted leftover-map singular values σ_k on the grouping comparison leftover-map graphic from already-named leftover-map axes (ADR 0321). Share and singular value omit independently. Rank-0 unused axes still name σ 0.00. Do not invent σ from leftover-map axis share. Synthetic fixtures only.
@coderabbitai

coderabbitai Bot commented Aug 31, 2026 •

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copy link
Copy Markdown
Contributor Author

Stacked on #860 @ 40fa5bd. Head 3aac452 (v2.78.0 / ADR 0321). Independent APPROVE required on this exact head before squash-merge. Copilot/Devin COMMENT is not independent APPROVE. Do not self-approve. Do not squash-merge onto the unprotected leftover base. Issues #79 and #87 stay open. Synthetic fixtures only.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 3 potential issues.

Devin Review

Comment on lines +105 to +109
return tf(LEFTOVER_MAP_COMPARE_PLOT_AXIS_SINGULAR_SHARE, {
axis: axisIndex,
value: singular,
share: percent,
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Second-axis singular value is clipped

When axis 2 has a singular value, leftoverMapPlotAxisText expands its fixed-position label beyond the 480-pixel SVG. The value is visibly clipped.

Prompt for agents
The comparison variant now renders a substantially longer axis label, but axis 2 remains positioned at layout.originX + 8 with the default start anchor in frontend/src/components/LeftoverMapPlot.tsx. In the fixed 480px SVG, the English singular-value label already extends beyond the right boundary; translations can be longer. Adjust the axis-label rendering so the full singular value and optional share remain visible for both axes and all supported locales. Consider separate visible SVG text and accessible naming, wrapping, repositioning, or a compact visual format, while preserving the ADR 0321 accessible-name contract and the independent omission behavior.
Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Current-head verification (2026-09-19): this finding is still valid on exact 59ae392c4729c78d31e290902ed290f1dd88b083. LeftoverMapPlot still renders axis 1 at x={layout.width - 8} with textAnchor="end", while axis 2 remains at x={layout.originX + 8} with the default start anchor; the layout width is still fixed at 480. Because comparison-axis copy now intentionally includes independently persisted σ and optional share, the axis-2 visible string can expand beyond the viewport (for the current fixture, σ=0.86 and share=18%), and CJK / translated text expansion has no bounding acceptance yet.

Keep this thread open. The causal RED should be rendered/browser evidence that the visible axis label remains inside the SVG viewport across ordinary and dense/responsive states plus locale/text-expansion cases. The repair must preserve the full accessible σ/share semantics and independent omission behavior; reverting persisted σ, deriving one statistic from the other, or merely loosening App assertions would not resolve this finding.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Current-owner refresh (2026-09-21): exact #861 is now 9f3923c1d66ee56460e2660a3fbc6bfeacc3c2bd. The semantic App mismatch has its own executable RED at this head, but that does not resolve this layout finding. Separate local Storybook inspection preserved in #1041 predecessor 15c14e53... shows the dense plot tick labels still collide at desktop and 390×844, with the fixed 480px SVG requiring horizontal scroll on mobile. That evidence is rendered/local rather than authenticated #861 acceptance, so this BUG thread remains open. The causal layout repair still needs current-owner browser/bounding-box RED across responsive and text-expansion states, preserving the full σ+share accessible name and independent omission semantics.

Comment thread frontend/src/leftoverMapPlotAxisSingular.ts
Comment thread frontend/src/components/LeftoverMapPlot.tsx

Copy link
Copy Markdown
Contributor Author

Exact head 3aac452eef781f3c1a5da258cd1c0c548e4930e6 still lacks independent APPROVE. Copilot/Devin review is not independent approval. Leave this PR open. Do not squash-merge. Do not self-approve. Issues #79 and #87 stay open.

@opencode-agent

opencode-agent Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Scheduled review-feedback autofix for this PR head.

  • Head SHA: 3aac452eef781f3c1a5da258cd1c0c548e4930e6

Adopt exact reconstructed #860 as the current tree while preserving historical #861 as first parent. Retain the v2.78 singular-value product delta as executable RED: comparison axes must name persisted finite non-negative σ values with distinct comparison copy, preserve σ=0, omit invalid σ independently of share, and never infer σ from axis share. Exact #860 is the second parent. No force update or destructive rebase.
seonghobae added a commit that referenced this pull request Sep 10, 2026
Adopt exact reconstructed #861 as the current tree while preserving historical #862 as first parent. Retain the v2.79 report-axis singular-value delta as executable RED: report badges must expose persisted finite non-negative σ independently of axis share, preserve σ=0, and never borrow comparison-graphic copy or infer σ from share. Exact #861 is the second parent. No force update or destructive rebase.
Adopt exact converged #860 head c7793c2 without force-updating or replaying stale historical source. Preserve the existing #861 reconstruction as first parent, retain its singular-value RED unchanged, and take the converged parent tree as the second parent.
seonghobae added a commit that referenced this pull request Sep 11, 2026
Adopt exact converged #861 head 597fa62 without force-updating or replaying stale historical source. Preserve the existing #862 reconstruction as first parent, retain its report-axis singular RED unchanged, and take the converged parent tree as the second parent.
Adopt exact converged #860 head 4692d63 without force-updating or replaying stale source. Preserve the existing #861 convergence as first parent, retain its singular-value RED unchanged, and take the updated parent tree as second parent.
seonghobae added a commit that referenced this pull request Sep 11, 2026
Adopt exact converged #861 head 36f5986 without force-updating or replaying stale source. Preserve the existing #862 convergence as first parent, retain its report-axis singular RED unchanged, and take the updated parent tree as second parent.
chore(stack): converge #861 onto repaired #860 head
seonghobae added a commit that referenced this pull request Sep 11, 2026
chore(stack): converge #862 onto repaired #861 head
Ordinary non-force ancestry adoption. Preserve #861 singular-value contract delta while inheriting the repaired comparison-distance assertions.
seonghobae added a commit that referenced this pull request Sep 15, 2026
Preserve exact persisted sigma and share copy, right-bound both SVG axis captions, and retain desktop and mobile Storybook evidence.

Signed-off-by: Seongho Bae <me@seonghobae.me>
Adopt the parent coordinate-tick identity fix without dropping the current comparison singular-value and responsive evidence changes.

Signed-off-by: Seongho Bae <seonghobae@users.noreply.github.com>
seonghobae added a commit that referenced this pull request Sep 20, 2026
Keep the v2.79 report-axis singular-value delta while inheriting the repaired comparison-axis sigma/share, responsive layout, and coordinate-tick identity contracts from #861.

Signed-off-by: Seongho Bae <seonghobae@users.noreply.github.com>
seonghobae added a commit that referenced this pull request Sep 21, 2026
* docs(gaps): refresh exact-head product evidence

Record protected-main authority, live aggregate inventory, the active Customer Master cycle repair, and remaining acceptance boundaries.

Commit-Message-Assisted-by: Claude (via Claude Code)
Signed-off-by: Seongho Bae <me@seonghobae.me>

* docs(gaps): bind Customer Master evidence to current head

Record the current implementation SHA and the desktop/mobile Storybook audit while leaving authenticated PostgreSQL acceptance unresolved.

Commit-Message-Assisted-by: Claude (via Claude Code)
Signed-off-by: Seongho Bae <me@seonghobae.me>

* docs(gaps): refresh current repair ownership evidence

* docs(gaps): refresh ready-state evidence

* docs(gaps): retract stale Ready evidence

* docs(gaps): refresh exact-head queue evidence

* docs(gaps): record authenticated scope repair evidence

* docs(gaps): refresh protected loop evidence

* docs(gaps): track replay repair head

* docs(gaps): correct replay exact head

* chore(docs): stage exact-head gap baseline refresh

* docs(gaps): refresh live exact-head authority

* chore(docs): refresh live gap overlay

* chore(docs): remove purpose-complete refresh workflow

* chore: stage bounded gap baseline refresh

* fix: make bounded gap refresh workflow parseable

* docs(gaps): refresh terminal Strix security evidence

* chore: stage current gap baseline refresh

* docs(gaps): record fresh security repair lanes

* chore: stage final current gap baseline refresh

* docs(gaps): refresh current security evidence

* ci(docs): stage bounded baseline refresh

* docs(gaps): refresh live exact-head overlay

* chore(gaps): stage current authority overlay

* chore(gaps): apply current authority overlay

* docs(gaps): refresh customer-master exact-head authority

* chore(gaps): stage 10:14 exact-head overlay

* chore(gaps): run 10:14 exact-head overlay

* docs(gaps): refresh exact-head customer-master evidence

* chore(docs): stage bounded gap baseline refresh

* docs(gaps): refresh exact-head security evidence

* chore(docs): stage bounded gap baseline refresh

* docs(gaps): refresh exact-head product evidence

* chore(docs): stage live-authority baseline refresh

* fix(docs): repair bounded live baseline workflow

* docs(gaps): refresh live product authority

* chore(gaps): stage bounded authority refresh

* chore(gaps): remove failed bounded refresh helper

* chore(docs): stage bounded baseline refresh

* docs(gaps): converge release owner authority

* docs(gaps): refresh current product authority

* chore(docs): stage bounded gap baseline refresh

* fix(docs): repair bounded gap baseline refresh runner

* fix(docs): keep refresh payload inside workflow block

* docs(gaps): refresh current Customer Master evidence

* chore(docs): stage 20:05 gap baseline refresh

* chore(docs): remove queued baseline helper

* chore(docs): refresh 20:27 live gap baseline

* docs(gaps): refresh 20:27 live authority

* docs(gaps): make current baseline projection explicit

* docs(gaps): refresh exact-head acceptance evidence

* docs(gaps): record review-sidecar prerequisite RED

* docs(gaps): record prerequisite exact-head GREEN

* docs(gaps): refresh current gate evidence

* docs(gaps): record exact-head security green

* docs(gaps): refresh live review execution evidence

* docs(gaps): record exact-head full-diff review evidence

* docs(gaps): refresh central prerequisite evidence

* docs(gaps): record exact-head review prerequisite approval

* docs(gaps): correct current required-gate inventory

* docs(gaps): record terminal review runtime evidence

* docs(gaps): record current-main ADR occupancy reconstruction

* docs(gaps): refresh central review gate settlement

* docs(gaps): record canonical CodeQL dispatch progress

* docs(gaps): record reconstructed comparison post repair

* docs(gaps): record criterion coordinate stack convergence

* docs(gaps): record current leftover-map stack convergence

* docs(gaps): record non-force leftover-map convergence

* docs(gaps): record comparison-axis repair and stack convergence

* docs(gaps): record graphic badge repair and descendant convergence

* docs(product): refresh live gap authority after owner and stack repairs

* docs(product): refresh owner ADR authority after review repair

* docs(gaps): record owner-boundary descendant convergence

* docs(gaps): include bounded-operator descendant convergence

* docs(gaps): record PostgreSQL timeout compatibility repair

* docs(gaps): record exact-head PostgreSQL validation admission

* docs(gaps): keep PostgreSQL validation admission current

* docs(gaps): record report-axis missingness repair and current stack

* docs(gaps): record live report-axis RED and descendant convergence

* docs(gaps): repair live leftover-map ancestry authority

* docs(gaps): refresh exact-head validation evidence

* docs(gaps): refresh leftover-map convergence and repair RCA

* docs(gaps): record comparison tick i18n RED

* docs(gaps): refresh measurement descendant authority

* docs(gaps): record fail-closed dependency review and queue differential

* docs(gaps): record CodeQL owner repairs and parser finding

* docs(gaps): admit exact-head validation for CodeQL repairs

* docs(gaps): record post-body CodeQL repair and convergence

* docs(gaps): record attributed script-tag parser repair

* docs(gaps): record unresolved embedded-image parser gap

* docs(gaps): refresh parser and leftover-map evidence

* docs(gaps): refresh current product and validation authority

* docs(gaps): record backend embedded-image parser repair

* docs(gaps): advance embedded-image repair authority

* docs(gaps): record current #1115 provenance repair

* docs(gap): align owner-boundary lifecycle and stack heads

* docs(gap): record hosted leftover-map and warning owner evidence

* docs(gaps): record #983 hosted coverage evidence

* docs(gaps): record repaired tick foundation and converged stack

* docs(gaps): record comparison tick repair and convergence

* docs(gaps): refresh live report-stack authority

* docs(gaps): record repaired tick-share stack

* docs(gaps): record terminal CodeQL verdict failure

* docs(gaps): record current #983 coverage evidence

* docs(gaps): record hosted parser RED and repair

* docs(gaps): record scanner edge coverage convergence

* docs(gaps): record ontology extension coverage ancestry

* docs(gaps): correct report-axis exact head

* docs(gaps): record image-ingestion security green

* docs(gaps): record catalog coverage convergence

* docs(gaps): converge report stack and current receipts

* docs(gaps): record current-head cancellation class

* docs(gaps): record comparison post accessibility evidence

* docs(gaps): record current CodeQL producer state

* docs(gaps): record #873 test coverage and descendant convergence

* docs(gaps): refresh #873 exact queue evidence

* docs(gaps): refresh #1115 CodeQL producer progress

* docs(gaps): track Customer Master eight-locale review draft

* docs(gaps): follow translation draft test repair

* docs(gaps): admit translation candidate validation

* docs(gaps): record Customer Master seed ownership repair

* docs(gaps): scope Customer Master seed ownership lifecycle

* docs(gaps): record translation ownership search-path repair

* docs(gaps): track ledger search-path integrity repair

* docs(gaps): track seed ownership replay concurrency

* docs(gaps): refresh canonical scheduler authority

* docs(gaps): record concurrent Customer Master seed replay repair

* docs(gaps): refresh canonical GitHub owner authority

* docs(gaps): track reviewed translation replay preservation

* docs(gaps): refresh canonical owner head

* docs(gaps): record completed-seed retirement lifecycle

* docs(gaps): record non-destructive ownership upgrade

* docs(gaps): track versioned ownership constraint repair

* docs(gaps): follow canonical CodeQL owner movement

* docs(gaps): classify terminal CodeQL owner findings

* docs(gaps): refresh canonical queue owner

* docs(gaps): classify executed image CodeQL producer

* docs(gaps): settle current-head frontend evidence and queue authority

* docs(gaps): record hosted TLS contract RED and repair

* docs(gaps): record current-parent leftover-pair a11y repair

* docs(gaps): record current leftover-pair interaction evidence

* docs: track dense mobile leftover-pair repair

* docs(gaps): archive prior overlay and refresh live authority

* docs(gaps): record hosted Storybook and release inventory gaps

* docs(gaps): record registry README owner-boundary convergence

* docs(gaps): record OIDC smoke dependency repair

* docs(gaps): refresh OIDC smoke operator contract evidence

* docs(gaps): serialize OIDC smoke before registry README

* docs(gaps): compact current owner chain after OIDC stack convergence

* docs(gaps): record #974 exact-head GREEN tests

* docs(gaps): record #974 security GREEN

* docs(gaps): record hosted leftover selector RED

* docs(gaps): separate OIDC smoke from browser auth acceptance

* docs(gaps): record ROPC topology removal owner

* docs(gaps): record #977 selector repair admission

* docs(gaps): correct live translation owner heads

* docs(a11y): align leftover-pair ADR with visible labels

* docs(gaps): record code-current leftover accessibility ADR

* docs(gaps): record executable ROPC security RED

* docs(gaps): require PKCE S256 in public-client auth gap

* docs(gaps): track queued OIDC causal repair

* docs(gaps): make ROPC actor migration precede client shutdown

* docs(gaps): record partial OIDC machine-actor migration

* docs(gaps): converge README onto auth migration

* docs(gaps): refresh auth stack exact-head evidence

* docs(gaps): record OIDC ADR convergence

* docs(gaps): record shared JWKS verifier repair

* docs(gaps): record deterministic machine identity repair

* docs(gaps): record terminal translation validation reds

* docs: record completed #977 selector repair

* docs: record terminal #974 CodeQL settlement RED

* docs(gaps): record report-axis contract repair and convergence

* docs(gaps): correct exact Customer Master authority

* docs(gaps): record duplicate-kid auth hardening

* docs(gaps): record current auth verifier evidence

* docs(gaps): record RFC 7518 JWKS key floor

* docs(gaps): record canonical JWK Base64urlUInt repair

* docs(gaps): refresh RSA exponent auth evidence

* docs(gaps): record minimal JWK integer hardening

* docs(gaps): refresh live auth and delivery authority

* docs(gaps): record local PU-scope authorization repair

* docs(gaps): add mixed-scope fail-closed repair

* docs(gaps): record RSA exponent bound and auth heads

* docs(gaps): record odd-modulus auth boundary

* docs(gaps): record RFC 7517 key-operations repair

* docs(gaps): record null-valued JWK metadata repair

* docs(gaps): record canonical Base64url pad-bit repair

* docs(gaps): record comparison tick root repair and converged stack

* docs(gaps): record #861 App acceptance root and telemetry owner

* docs(gaps): record #861 axis-label clipping acceptance

* docs(gaps): record report contract RCA and current owner head

* docs(gaps): record public-only JWKS boundary

* docs(gaps): record JWK x5c consistency repair

* docs(gaps): record full x5c chain validation

* docs(gaps): record x5c key-usage repair and descendant convergence

* docs(gaps): record JWK certificate thumbprint invariant

* docs(gaps): attach thumbprint exact-head receipts

* docs(gaps): record realm-owned service subject boundary

* docs(gaps): record disjoint machine and user principals

* docs(gaps): record service-client boundary repair

* docs(gaps): record usable machine-auth prerequisite

* docs(gaps): refresh auth audiences and report receipt

* docs(gaps): record x5u verifier boundary and auth heads

* docs(gaps): record implicit-flow auth boundary

* docs(gaps): record exact OIDC redirect boundary

* docs(gaps): record executable seed auth RED

* docs(gaps): refresh auth repair runner authority

* docs(gaps): remove stale auth repair lane authority

* docs(gaps): record seed auth repair and remaining ROPC

* docs(gaps): record backend ROPC executable RED

* docs(gaps): record exact report-stack failures

* docs(gaps): record auth helper endpoint repair

* docs(gaps): record PyJWT floor and auth convergence

* docs(gaps): add PyJWT advisory traceability authority

* docs(gaps): refresh Voice runtime authority

Record the live PR and issue inventory, keep exact-head workflow states non-accepting, and mark Voice-of-X runtime acceptance unverified.

Signed-off-by: Seongho Bae <me@seonghobae.me>

* docs(gaps): keep baseline head claim immutable

Label the observed PR head as the parent of this update so a new commit cannot make its own evidence statement stale.

Signed-off-by: Seongho Bae <me@seonghobae.me>

* docs(gap): record exact report RED and Voice authority repair

* fix(a11y): align leftover pair accessible names

* fix(ui): wrap leftover evidence on narrow screens

* docs(gaps): refresh exact-head ecosystem authority

Signed-off-by: Seongho Bae <me@seonghobae.me>

* docs(gaps): converge report stack after merged intermediate

* docs(gaps): correct current OIDC smoke authority

* test(ui): align leftover pair accessible names

* docs(gaps): track auth helper repair and convergence

* docs(gaps): refresh auth helper boundary

* docs(gaps): record remote OAuth TLS repair

* docs(gaps): repair acceptance wording and catalog auth owner

* codex: refresh exact-head gap evidence (#1041)

* docs(gaps): keep #1041 authority self-reference safe

* docs(gaps): record comparison axis repair candidate

Separate current local rendering and regression evidence from protected delivery, authenticated acceptance, and the remaining stacked-parent gate.

Signed-off-by: Seongho Bae <me@seonghobae.me>

* docs(gaps): record coordinate tick repair

Record the exact #860 candidate, local verification, queued hosted checks, stack ordering, and remaining authenticated acceptance boundary.

Signed-off-by: Seongho Bae <seonghobae@users.noreply.github.com>

* docs(gaps): refresh auth exact-head evidence

* docs(gaps): refresh exact-head authority

Signed-off-by: Seongho Bae <me@seonghobae.me>

* docs(gaps): adopt source-repaired report and auth heads

* fix(reports): omit unavailable leftover distance

Signed-off-by: Seongho Bae <me@seonghobae.me>

* test(reports): reject non-finite residual accessibility evidence

* fix(reports): omit non-finite residual from accessible evidence

* test(a11y): reject duplicate leftover evidence announcements

* fix(a11y): announce leftover evidence once

* test(a11y): preserve leftover action guidance while deduplicating evidence

* fix(a11y): deduplicate leftover evidence without dropping guidance

* test(a11y): cover all leftover action evidence branches

* test(a11y): type leftover evidence branch cases explicitly

---------

Signed-off-by: Seongho Bae <me@seonghobae.me>
Signed-off-by: Seongho Bae <seonghobae@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant