Skip to content

feat(desktop): add candidates and shortlist v1 to QuantLab shell #196

@Whiteks1

Description

@Whiteks1

Summary

Add a first native candidates and shortlist surface to QuantLab Desktop so the shell can turn observation into decision.

Why

The shell already supports launch, run inspection, compare, artifacts, and launch failure review.
What is still missing is the minimal decision layer that lets an operator decide which runs deserve to stay alive.

Scope

This issue is intentionally small.
It should cover only:

  • Candidate
  • Shortlist
  • Baseline

Minimal behaviors

  • mark or unmark a run as candidate
  • add or remove a run from shortlist
  • mark one run as baseline
  • store a short optional note
  • keep explicit linkage to run_id
  • open compare from selected candidates
  • open artifacts from a candidate

Persistence

Start with a simple local, versionable store.
No complex sync or shared state yet.

UI expectations

Desktop shell only.
A small native surface with:

  • candidate list
  • shortlist view
  • baseline badge
  • quick actions to compare and open artifacts

Non-goals

Do not add:

  • AI scoring or ranking
  • recommendation engines
  • Stepbit sync
  • broad workflow states
  • portfolio manager behavior
  • knowledge-base style tagging systems

Implementation Notes

Data sources:

  • current run registry from outputs/runs/runs_index.json
  • desktop local state only; do not depend on Stepbit or research_ui backend changes for v1

Reusable state and UI:

  • extend the existing desktop renderer state in desktop/renderer/app.js
  • reuse current compare and artifacts actions already present in the shell

Expected files to touch:

  • desktop/main.js only if a tiny local-store IPC helper is needed
  • desktop/preload.js if a store helper must be exposed
  • desktop/renderer/app.js
  • desktop/renderer/index.html
  • desktop/renderer/styles.css
  • desktop/README.md only if shell behavior changes materially

Store proposal:

  • outputs/desktop/candidates_shortlist.json
  • local JSON, versioned, keyed by run_id

Minimal UI contract:

  • one native Candidates surface
  • summary strip for total candidates / shortlist count / current baseline
  • candidate rows with shortlist toggle, baseline toggle, note, open run, open artifacts, open compare

Notes

This slice should remain plan-first and small.
The purpose is to add the minimum decision layer that turns launch -> inspect -> compare into launch -> inspect -> compare -> decide.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions