Skip to content

Epic: Configurable Maturity Scoring #199

Description

@hiydavid

Context

Maturity scoring (IQ Scan) logic is currently hardcoded in backend/services/scanner.py. Adjusting weights, disabling a criterion, or shifting stage thresholds requires a code change and redeploy. Different workspaces have different priorities (UC compliance, SQL coverage, etc.).

PR #18 (RFC by @stuart-gano) drafts a config-driven engine: a YAML default, Lakebase admin overrides, and a Scoring Config admin UI. This epic captures the work to land it cleanly for Workbench 0.2.

Goal

Workspace admins can edit point weights, toggle criteria on/off, and shift stage thresholds without a code change — with safe defaults, server-side validation, and version-stamped scan history.

Work

Sub-task issue numbers added once filed.

  • Task 1 — YAML default config & loader
  • Task 2 — Scanner registry refactor
  • Task 3 — Admin API + persistence (with admin auth)
  • Task 4 — Admin UI: Scoring Config tab
  • Task 5 — Config versioning & validation
  • Task 6 — Batch job unification & docs

Acceptance

  • Admin Dashboard exposes a "Scoring Config" tab that loads, edits, saves, and resets config
  • Saving a config change is reflected on the next scan
  • Scan results are tagged with a config_version so historical comparisons remain interpretable
  • Server rejects invalid configs (non-contiguous stage ranges, criteria points > 100)
  • jobs/score_all_spaces.py shares the same scoring engine as the app (no inline duplicate)
  • 60+ unit tests pass; manual E2E checklist completed in the PR
  • docs/genie-space-maturity.md published

Open questions resolved by this epic

(All from PR #18's RFC discussion)

  1. Stage threshold validation → enforce contiguous ranges in API (Task 5)
  2. Custom criterion ID without registered Python fn → surface UI warning (Task 4)
  3. Score history after config change → version-tag scan rows; no auto re-score (Task 5)
  4. Batch job config → import shared engine (Task 6)

Reference

Metadata

Metadata

Assignees

No one assigned

    Labels

    epicTracks a multi-issue epictype:featureNew capability

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions