Skip to content

fix: honor native task names in replacement evidence - #221

Merged
evalstate merged 3 commits into
mainfrom
fix/native-replacement-task-names
Sep 12, 2026
Merged

fix: honor native task names in replacement evidence#221
evalstate merged 3 commits into
mainfrom
fix/native-replacement-task-names

Conversation

@evalstate

Copy link
Copy Markdown
Collaborator

Summary

  • Remove the invented result-name/task-ID-name equality in replacement evidence.
  • Match native lock names with trial.task_id.get_name(); preserve TrialResult.task_name unchanged.
  • Retain native ID/source/configuration, full-source lock coverage, digest/checksum, UUID and multiplicity validation. No prefix stripping, source-specific rules, artifact rewrites, schema/API/UI changes or new resources.
  • Preserve prior authorization/completion history additively and record the separately approved narrow matched release. No replacement launch is included.

Harbor ownership review

Checked Harbor dcd0a7ac74b7bd417780d9cb27cd819c7ec82e4e:

  • src/harbor/models/task/task.py: public Task.name uses explicit task metadata, otherwise the directory name.
  • src/harbor/models/task/id.py: public GitTaskId, LocalTaskId, PackageTaskId.get_name() define task-ID names independently.
  • src/harbor/trial/trial.py: result initialization writes task_name=self.task.name and the separate native task ID.
  • src/harbor/models/job/lock.py: native lock construction uses task_config.get_task_id().get_name().
  • Relevant history: 1d97c20a1 (#1285), metadata-name override; 7f6ae226b (#1552), task-ID-based lock name.

Harbor already owns this distinction: the fix removes a local assumption, not an upstream gap or new wrapper. Existing JobPlan planning/aggregation stays authoritative. No persisted or projected field, configuration alias, parser, scheduler or result format is introduced.

Validation

  • Regression demonstrated before the fix: metadata-name aggregation failed while fallback-name aggregation passed.
  • Native-built fixtures exercise metadata overrides and fallback names throughout review, parent preflight, cross-language fingerprint validation and aggregation. Additional Git/local/package identity tests and unselected-trial ID/source/lock corruption rejections preserve fail-closed coverage.
  • Root Ruff/format/ty: passed; 102 tests, 89.10% coverage; dependency audit passed.
  • Agent Ruff/format/ty: passed; 481 tests. Replacement evidence/preflight/aggregation coverage: 98.02%, each module above 85%.
  • Node 22.22.0 format/lint/typecheck/build/generated checks and audit: passed; 1,523 unit tests; 75 browser tests.
  • Browser runner initially stalled during the unbound-port startup probe; final full suite passed against an explicitly started server from this worktree on an isolated port. No tests changed to bypass this.
  • Both Dockerfiles built successfully for linux/amd64.
  • Public privacy, diff, normal Slophammer and DRY checks passed.
  • Disclosures: required slophammer-py check . --baseline fails because the existing baseline file is absent. Existing agent whole-package coverage gap remains; no threshold was weakened. Native checksum deprecation and existing lint warnings remain.

Full diff and metadata reviewed locally in a separate pass. No independent second reviewer is claimed. No inference, benchmark controls, replacement submission or paid benchmark canary was performed.

@evalstate
evalstate merged commit cfa88df into main Sep 12, 2026
1 check passed
@evalstate
evalstate deleted the fix/native-replacement-task-names branch September 12, 2026 07:37
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