Skip to content

Recalibrate audit scorer: de-saturate & discriminate (U1) - #14

Merged
RasputinKaiser merged 1 commit into
mainfrom
worktree-agent-aaed71647241b2cb0
Jul 21, 2026
Merged

Recalibrate audit scorer: de-saturate & discriminate (U1)#14
RasputinKaiser merged 1 commit into
mainfrom
worktree-agent-aaed71647241b2cb0

Conversation

@RasputinKaiser

Copy link
Copy Markdown
Owner

What

Rewrites scripts/score.py (the plugin-audit scorer engine) and skills/plugin-audit/references/deterministic-scoring.md to fix a bottom-compressed, saturated auto-score. Measured over 14 real plugins the auto-score ranged 28–60 (mean 43), skill_quality was 0/25 for every plugin, and hooks_health was 93% saturated (no hooks → free 10).

Changes

  • N/A → redistribute: per-dimension applicable + ceiling. A dimension that doesn't apply (no hooks, no skills) is dropped from both sides of the effective total — no free maximum.
  • skill_quality: flat 0 → graduated per-skill proxies (imperative body ~8, actionable specifics ~5, failure handling ~5; ~7 judgment residue). Good plugin ~16, poor ~0.
  • context_economy: budget-utilization gradient — full at ≤50% of budget, linear decay to 0 at ≥100% — for bodies (600w) and descriptions (400c). Rewards leanness.
  • trigger_precision: NOT-clause credit now requires a redirect to an alternative ("not for X, use Y"), not a bare not token.
  • manifest_integrity: coarse 4/2/0 steps softened into finer gradients (validity, pointers, layout proportional).
  • hooks_health: graduated when present, N/A (redistributed) when absent.
  • Effective total renormalized to /100 with a grade field. Bands: 92+ Exceptional · 82 Strong · 68 Solid · 50 Needs work · <50 Poor.

Schema freeze

total.{auto,max} and dimensions[k].{auto,max,needs_judgment} preserved; only additive keys (applicable, ceiling, grade, total.effective). Nominal maxes stay 15/25/20/20/10/10. CLI/exit contract unchanged. --min-baseline now skips pre-recalibration baselines (scale change) rather than false-failing. Verified portfolio.py's consumption path still works.

Verification

  • python3 scripts/score.py selftest — 4 band fixtures (poor/fair/solid/excellent) + de-saturation invariants (hooks-absent dropped, skill_quality > 0, lean > near-budget context, 92+ achievable, monotonic ordering).
  • python3 scripts/validate.py → PASS 11/11 · curator.py selftest → 83/83 · schema total.max==100.
  • Real plugin-improver now scores 74.4 / Solid (was a 60 floor), skill_quality 14 (was 0), hooks dropped (not free 10).
  • Reviewed by code-reviewer agent; all findings addressed (tautological/duplicate assertions fixed, pathlike over-match tightened, baseline scale guard added).

Note: CI --min floor is intentionally left for the coordinator to reset post-merge (the effective-scale total differs from the old raw sum).

🤖 Generated with Claude Code

Replace the bottom-compressed, saturated auto-scorer with a graduated,
N/A-redistributing engine so scores discriminate across the quality range.

- N/A redistribution: each dimension carries `applicable` + `ceiling`; a
  dimension that doesn't apply (no hooks, no skills) is DROPPED from both the
  numerator and denominator of the effective total. No more free 10 for a
  no-hooks plugin.
- score_skill_quality: flat 0 -> graduated per-skill proxies (imperative body
  ~8, actionable specifics ~5, failure handling ~5; ~7 judgment residue). A good
  plugin now earns ~16; a poor one ~0.
- score_context: budget-utilization gradient (full at <=50% of budget, linear
  decay to 0 at >=100%) for bodies (600w) and descriptions (400c) — a 599w body
  scores far below a 300w one.
- score_trigger: NOT-clause credit now requires a redirect to an alternative
  ("not for X, use Y"), not a bare "not" token.
- score_manifest: coarse 4/2/0 steps softened into finer gradients.
- score_hooks: graduated when present, N/A (redistributed) when absent.
- Effective total renormalized to /100 with a `grade` field (bands:
  92+ Exceptional / 82 Strong / 68 Solid / 50 Needs work / <50 Poor).
- Schema freeze respected: total.{auto,max}, dimensions[k].{auto,max,
  needs_judgment} preserved; only additive keys. --min-baseline now skips
  pre-recalibration baselines (scale change) instead of false-failing.
- Selftest: 4 band fixtures (poor/fair/solid/excellent) + de-saturation
  invariants (hooks-absent dropped, skill_quality>0, lean>near-budget context,
  92+ achievable). deterministic-scoring.md rewritten to match exactly.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@RasputinKaiser
RasputinKaiser merged commit 0211f92 into main Jul 21, 2026
0 of 2 checks passed
RasputinKaiser added a commit that referenced this pull request Jul 21, 2026
Recalibrated both audit scorers to be demanding and discriminating:
- Graduated credit + leanness rewards; skill_quality gains machine signal (floor 60->74.4)
- N/A dimensions redistribute weight instead of a free max (hooks no-hooks free-10 removed)
- Frozen 5-band grade scale (Exceptional/Strong/Solid/Needs work/Poor); 92+ genuinely hard
- NEW scripts/calibrate.py saturation meter + CI guardrail; self-score floor 57->70
- Integration fix: repoint calibrate selftest fixtures to score.py tier builders

Landed via PRs #10-#14. Merged-tree: validate 11/11, curator 87/87, score+calibrate selftests green, calibrate --check passes over the real inventory.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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