Skip to content

Julenmendieta/more adjustments - #21

Merged
julenmendieta merged 8 commits into
mainfrom
julenmendieta/moreAdjustments
Sep 4, 2026
Merged

Julenmendieta/more adjustments#21
julenmendieta merged 8 commits into
mainfrom
julenmendieta/moreAdjustments

Conversation

@julenmendieta

@julenmendieta julenmendieta commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adjusts result-table identity and filtering, enriches the clonotype punchcard with V(D)J columns and voting thresholds, introduces a joinable V(D)J-matched cell-list output, separates undeclared barcodes onto their own axis, and rewrites QC and punchcard explanations.

Important touched terms:

  • Cell list — the sample/cell keys matched by the V(D)J input. The PR emits it as cellInList and inner-joins it into the per-cell display so that view is limited to matched cells.
  • Punchcard — the clonotype-by-antigen verdict table. It now discovers primary-chain V(D)J sequence and gene-hit columns and can show a preferred amino-acid sequence by default.
  • Binding verdict — one of bound, not bound, unreliable, or never asked. Tooltip and legend explanations were rewritten, although the workflow metadata now incorrectly describes the offer condition for never asked.
  • Minimum voters — the minimum number of usable cell readings needed to settle a clonotype verdict. It is now exposed from run metadata in punchcard tooltips.
  • Minimum agreement — the optional fraction of voting cells that must agree. It is now exposed from run metadata and rendered as a percentage in unsettled-verdict explanations.
  • Undeclared barcode — a read-carried barcode sequence absent from the panel. Its table now uses a dedicated undeclaredTagId axis, with a saved-table-state migration.
  • Antigen count distribution — the distribution of total antigen counts across cells. Its measurement detail now shows only the maximum while full deciles remain in a separate result frame.
  • Sample QC — the per-sample read-statistics review page. Its route remains registered, but this PR removes its only normal navigation entry.

The principal merge blocker is the loss of navigation to Sample QC. Two lower-impact metadata inconsistencies should also be corrected.

Confidence Score: 4/5

The PR is not yet safe to merge because it removes the only normal navigation path to the still-supported Sample QC page.

The workflow and result-contract additions are largely coordinated, but users can no longer reach Sample QC through the application navigation, and two changed descriptions no longer match the underlying verdict and distribution contracts.

Files Needing Attention: model/src/index.ts, workflow/src/column-specs.lib.tengo, software/per-cell-metrics/src/emit_verdicts.py

Important Files Changed

Filename Overview
model/src/index.ts Adds cell-list filtering and V(D)J columns to result tables, a v11 table-state migration, and removes the Sample QC navigation entry.
software/per-cell-metrics/src/emit_verdicts.py Emits the joinable cell-list table and simplifies reader-facing QC detail strings, leaving one related metadata description stale.
workflow/src/column-specs.lib.tengo Adds dedicated cell-list and undeclared-barcode axis contracts, but revises the never asked description to an incorrect read-presence definition.
workflow/src/verdict-import.tpl.tengo Imports the new cell-list frame and applies the dedicated undeclared-barcode axis consistently.
workflow/src/verdict-run.tpl.tengo Registers the new cell-list result file in the verdict execution output contract.
ui/src/components/PunchCell.vue Expands unsettled-verdict tooltips with the run’s voting and agreement thresholds and safe fallbacks.
ui/src/pages/PunchcardPage.vue Threads run metadata thresholds into punchcard cell-renderer parameters.

Fix all with Greploop Fix All in Claude Code

Prompt To Fix All With AI
### Issue 1
model/src/index.ts:1836
**Sample QC Becomes Unreachable**

Commenting out this navigation entry removes the only normal link to `/qc`, even though the route and its per-sample QC page remain registered. After a run, users can no longer reach this existing review page unless they manually enter its URL.

```suggestion
            { type: "link" as const, href: "/qc" as const, label: "Sample QC" },
```

### Issue 2
workflow/src/column-specs.lib.tengo:559
**Never Asked Is Misdefined**

This description says `never asked` means the antigen appeared in no reads, but the state is determined by whether the antigen was offered in the sample’s panel. An offered antigen with zero signal is still a measured `not bound` result, so this metadata can cause users to misread a valid zero-count call as untested.

```suggestion
					"pl7.app/description": "One of four states. 'Bound' and 'not bound' read the count against the baseline that served. 'Never asked' means no sample holding these cells offered this antigen in its panel; 'unreliable' means it was measured and the reading cannot tell bound from not bound. Neither is a kind of 'not bound'."
```

### Issue 3
software/per-cell-metrics/src/emit_verdicts.py:1117
**Distribution Description Is Stale**

The measurement detail now contains only the highest value, while the published column description still says all deciles are carried there. The full deciles now use a separate result frame, so the stale description documents a data shape this emitter no longer produces and can mislead consumers.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Reviews (1): Last reviewed commit: "still unstable" | Re-trigger Greptile

Greptile also left 3 inline comments on this PR.

Context used (4)

Comment thread model/src/index.ts
...(hasRun
? [
{ type: "link" as const, href: "/qc" as const, label: "Sample QC" },
//{ type: "link" as const, href: "/qc" as const, label: "Sample QC" },

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Sample QC Becomes Unreachable

Commenting out this navigation entry removes the only normal link to /qc, even though the route and its per-sample QC page remain registered. After a run, users can no longer reach this existing review page unless they manually enter its URL.

Suggested change
//{ type: "link" as const, href: "/qc" as const, label: "Sample QC" },
{ type: "link" as const, href: "/qc" as const, label: "Sample QC" },

Knowledge Base Used:

Prompt To Fix With AI
This is a comment left during a code review.
Path: model/src/index.ts
Line: 1836

Comment:
**Sample QC Becomes Unreachable**

Commenting out this navigation entry removes the only normal link to `/qc`, even though the route and its per-sample QC page remain registered. After a run, users can no longer reach this existing review page unless they manually enter its URL.

```suggestion
            { type: "link" as const, href: "/qc" as const, label: "Sample QC" },
```

**Knowledge Base Used:**
- [Feature integration user interface](https://app.greptile.com/milaboratories/-/custom-context/knowledge-base/platforma-open/feature-integration/-/docs/feature-integration-ui.md)
- [UI application flow](https://app.greptile.com/milaboratories/-/custom-context/knowledge-base/platforma-open/feature-integration/-/docs/ui-application-flow.md)

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Fix in Claude Code

"pl7.app/isDiscreteFilter": "true",
"pl7.app/discreteValues": VERDICT_STATES,
"pl7.app/description": "One of four states. 'Never asked' means the experiment did not put this antigen to these cells; 'unreliable' means it did and the data cannot settle it. Neither is a kind of 'not bound'."
"pl7.app/description": "One of four states. 'Bound' and 'not bound' read the count against the baseline that served. 'Never asked' means the antigen appeared in no read from these cells' samples; 'unreliable' means it was measured and the reading cannot tell bound from not bound. Neither is a kind of 'not bound'."

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Never Asked Is Misdefined

This description says never asked means the antigen appeared in no reads, but the state is determined by whether the antigen was offered in the sample’s panel. An offered antigen with zero signal is still a measured not bound result, so this metadata can cause users to misread a valid zero-count call as untested.

Suggested change
"pl7.app/description": "One of four states. 'Bound' and 'not bound' read the count against the baseline that served. 'Never asked' means the antigen appeared in no read from these cells' samples; 'unreliable' means it was measured and the reading cannot tell bound from not bound. Neither is a kind of 'not bound'."
"pl7.app/description": "One of four states. 'Bound' and 'not bound' read the count against the baseline that served. 'Never asked' means no sample holding these cells offered this antigen in its panel; 'unreliable' means it was measured and the reading cannot tell bound from not bound. Neither is a kind of 'not bound'."

Knowledge Base Used:

Prompt To Fix With AI
This is a comment left during a code review.
Path: workflow/src/column-specs.lib.tengo
Line: 559

Comment:
**Never Asked Is Misdefined**

This description says `never asked` means the antigen appeared in no reads, but the state is determined by whether the antigen was offered in the sample’s panel. An offered antigen with zero signal is still a measured `not bound` result, so this metadata can cause users to misread a valid zero-count call as untested.

```suggestion
					"pl7.app/description": "One of four states. 'Bound' and 'not bound' read the count against the baseline that served. 'Never asked' means no sample holding these cells offered this antigen in its panel; 'unreliable' means it was measured and the reading cannot tell bound from not bound. Neither is a kind of 'not bound'."
```

**Knowledge Base Used:**
- [Verdict analysis workflow stages](https://app.greptile.com/milaboratories/-/custom-context/knowledge-base/platforma-open/feature-integration/-/docs/workflow-verdict-analysis.md)
- [Feature integration user interface](https://app.greptile.com/milaboratories/-/custom-context/knowledge-base/platforma-open/feature-integration/-/docs/feature-integration-ui.md)

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Fix in Claude Code

(v for d, v in zip(deciles["decile"], deciles["value"], strict=True) if d == 100 and v is not None),
None,
)
decile_detail = "" if _top is None else f"highest {_top:,.0f}"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Distribution Description Is Stale

The measurement detail now contains only the highest value, while the published column description still says all deciles are carried there. The full deciles now use a separate result frame, so the stale description documents a data shape this emitter no longer produces and can mislead consumers.

Knowledge Base Used: Verdict analysis workflow stages

Prompt To Fix With AI
This is a comment left during a code review.
Path: software/per-cell-metrics/src/emit_verdicts.py
Line: 1117

Comment:
**Distribution Description Is Stale**

The measurement detail now contains only the highest value, while the published column description still says all deciles are carried there. The full deciles now use a separate result frame, so the stale description documents a data shape this emitter no longer produces and can mislead consumers.

**Knowledge Base Used:** [Verdict analysis workflow stages](https://app.greptile.com/milaboratories/-/custom-context/knowledge-base/platforma-open/feature-integration/-/docs/workflow-verdict-analysis.md)

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Fix in Claude Code

@julenmendieta
julenmendieta added this pull request to the merge queue Sep 4, 2026
Merged via the queue into main with commit d8e4eab Sep 4, 2026
14 checks passed
@julenmendieta
julenmendieta deleted the julenmendieta/moreAdjustments branch September 4, 2026 11:30
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