Skip to content

Retire the vestigial length-penalty in fitness scoring - #144

Merged
jramos merged 1 commit into
mainfrom
chore/retire-vestigial-length-penalty
Jun 28, 2026
Merged

Retire the vestigial length-penalty in fitness scoring#144
jramos merged 1 commit into
mainfrom
chore/retire-vestigial-length-penalty

Conversation

@jramos

@jramos jramos commented Jun 28, 2026

Copy link
Copy Markdown
Owner

Summary

The length_penalty in LLMJudge.score was dead code: no caller ever passed the
artifact_size/max_size it needs, so it was always 0.0 and docked nothing. Length
pressure is handled deliberately elsewhere — the proposer's length budget plus two hard
deploy ceilings (_check_size/max_skill_size and the baseline-scaled
effective_absolute_char_ceiling) — and the tool path already rejects those size kwargs
by design.

This removes the vestige:

  • FitnessScore: drop the length_penalty field; composite is now just the
    profile-weighted sum, floored at 0.
  • LLMJudge.score: drop the unused artifact_size/max_size params and the ratio/penalty
    computation.
  • ToolJudge: drop the length_penalty=0.0 kwarg and refresh the stale comment.
  • Tests: drop the now-invalid length_penalty=0.0 kwarg and the result.length_penalty
    assertion (the ToolJudge-rejects-size-kwargs test is kept — still valid).

Behavior-preserving: the penalty was always 0.0, so composite values are unchanged.

Triage close-out

Closes upstream triage #134 (graduated / class-aware skill-size cap) as
investigated → not applicable. The proposal's premise — a "pre-cap length-penalty cliff"
that docks under-cap skills — doesn't hold on this fork, since that penalty never fires.
Building the graduated cap would only re-introduce a deliberately-removed mechanism.
docs/upstream_pr_triage.md is updated in this PR (row + review log + snapshot).

Test Plan

  • uv run pytest tests/core/test_fitness.py tests/core/test_fitness_closed_loop.py tests/core/test_behavioral_metric.py tests/tools/ -q — 275 passed
  • uv run pytest tests/ -q -m 'not slow' — 1699 passed, 4 deselected
  • grep -rn -E "length_penalty|artifact_size|max_size" — only the intentional ToolJudge-rejects-size-kwargs test remains
  • pre-commit hygiene hooks pass on changed files

The length_penalty in LLMJudge.score was dead code: no caller passes the
artifact_size/max_size it needs, so it was always 0.0 and docked nothing.
Length pressure is handled deliberately by the proposer's length budget and
two hard deploy ceilings (_check_size/max_skill_size and the baseline-scaled
effective_absolute_char_ceiling), and the tool path already rejects those
size kwargs by design.

Remove the field from FitnessScore, the ratio/penalty computation and unused
artifact_size/max_size params from LLMJudge.score, the matching kwarg in
ToolJudge, and the now-invalid kwarg/assertion in the tests. Behavior-
preserving: composite values are unchanged since the penalty was always 0.0.

Closes upstream triage #134 (investigated -> not applicable): the "pre-cap
length-penalty cliff" premise doesn't hold on this fork, so the graduated-cap
build would only re-introduce a deliberately-removed mechanism.
@jramos
jramos enabled auto-merge (squash) June 28, 2026 20:45
@jramos
jramos merged commit f0a1710 into main Jun 28, 2026
4 checks passed
@jramos
jramos deleted the chore/retire-vestigial-length-penalty branch June 28, 2026 20:47
jramos added a commit that referenced this pull request Jul 6, 2026
…ne new item (#150)

Incremental upstream review. Backlog steady at 72 open; six new PRs #142-#147.
Five already covered -> SKIP; one genuinely-new latent bug -> new action item.

- NousResearch#142: 5 of 6 fixes are covered clusters
  (GEPA/DSPy-3.2 compat x3, validate-full). The 6th is real and new here: find_skill
  via Path.rglob('SKILL.md') skips symlinked skill dirs on Python <3.13
  (skill_sources.py:63/67/80). Promoted to a CHERRY-PICK action item (recommended).
- #143: our #102 — state.db read-only importer already shipped; only cross-platform
  discovery extras. SKIP.
- #144/#145: Sunwo0u HSE sanitized evidence packets, report-only, no mechanism. SKIP.
- #146: extraction cluster — our skill_text is a @Property over signature.instructions,
  so its 'dead input field' premise is upstream-only. SKIP.
- #147: compat + material_diff reporting subsumed by our behavioral deploy gate. SKIP.

Review-log entry + new action-item row + 2026-07-06 snapshot delta.
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