Skip to content

fix(evals): name the ARTIFACTS_DIR path + seed remediation when persona.vN.md is missing - #299

Open
4gjnbzb4zf-sudo wants to merge 1 commit into
vibeforge1111:masterfrom
4gjnbzb4zf-sudo:sentinel/ux-friction/evolve-missing-artifact-path
Open

fix(evals): name the ARTIFACTS_DIR path + seed remediation when persona.vN.md is missing#299
4gjnbzb4zf-sudo wants to merge 1 commit into
vibeforge1111:masterfrom
4gjnbzb4zf-sudo:sentinel/ux-friction/evolve-missing-artifact-path

Conversation

@4gjnbzb4zf-sudo

@4gjnbzb4zf-sudo 4gjnbzb4zf-sudo commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

{
"schema": "spark-compete-hotfix-v1",
"event": "spark-compete-first-event",
"submission_mode": "public_repo_pr",
"submission_target_url": "#299",
"team": {
"name": "SparkThisUp",
"members": [
"ValHallaBuilder",
"Baz707",
"DanFireDash"
],
"github_accounts": [
"4gjnbzb4zf-sudo"
],
"llm_device_holder": "ValHallaBuilder",
"device_holder_github": "4gjnbzb4zf-sudo"
},
"target_repo": {
"id": "vibeforge1111/spark-character",
"source": "https://github.com/vibeforge1111/spark-character",
"owner_surface": "spark-character"
},
"issue": {
"type": "usage_friction",
"severity": "low",
"title": "evolve.find_latest_persona / evolve_persona.find_latest_persona raise bare FileNotFoundError without naming the directory or remediation",
"actual_behavior": "evals/evolve.py:80 and evals/evolve_persona.py:118 both raise FileNotFoundError('No persona.vN.md artifacts found.') when ARTIFACTS_DIR.glob('persona.v*.md') returns empty. The message omits the directory the function was looking in and offers no next step. Operators running evolve against a fresh clone, a test runner without artifacts seeded, or after relocating ARTIFACTS_DIR get a bare exception that does not even name the directory it checked.",
"expected_behavior": "The same FileNotFoundError fires under the same condition, but the message interpolates ARTIFACTS_DIR and names the two remediation surfaces (seed persona.v1.md in that directory, or override the location via ARTIFACTS_DIR env). Same exception type preserved; the success path (artifacts present) is unchanged.",
"repro_steps": [
"gh pr checkout ",
"Make sure ARTIFACTS_DIR is empty (no persona.vN.md files).",
"python3 evals/evolve.py -> BEFORE: 'No persona.vN.md artifacts found.' / AFTER: same exception type with '

. Seed persona.v1.md in that directory before running evolve, or override the location via ARTIFACTS_DIR...'",
"python3 evals/evolve_persona.py -> same change applied symmetrically."
],
"affected_workflow": "Operators on first run / fresh clone / test runner / relocated artifacts hit this. The new message tells them which directory was checked and the two surfaces (seed file or env override) that can resolve it without leaving the shell."
},
"evidence": {
"safe_links_only": true,
"before_after_proof": "Two-file change: evals/evolve.py + evals/evolve_persona.py. Same shape in both: the FileNotFoundError raise expanded from a bare string to an f-string that interpolates ARTIFACTS_DIR and names the two remediation surfaces. Pure-success path (artifacts present) unchanged. Exception type preserved (FileNotFoundError).",
"links": [
"https://github.com//pull/299"
],
"forbidden": [
"pdf",
"zip",
"exe",
"unknown downloads",
"shortened links",
"archives",
"binaries",
"tokens",
"browser cookies",
"wallet material",
"raw logs",
"raw conversations",
"raw memory",
"raw patches",
"private repo maps",
"private scoring details"
]
},
"proposed_fix": {
"approach": "Replace the bare FileNotFoundError message with an f-string interpolating ARTIFACTS_DIR + a one-line remediation: 'Seed persona.v1.md in that directory before running evolve_persona, or override the location via ARTIFACTS_DIR before launching.' Apply symmetrically to evolve.py (line 80) and evolve_persona.py (line 118).",
"files_expected": [
"evals/evolve.py",
"evals/evolve_persona.py"
],
"tests_or_smoke": "python3 -m py_compile evals/evolve.py evals/evolve_persona.py -> clean. Manual: run with empty ARTIFACTS_DIR; observe the new message names the directory + the two remediation surfaces."
},
"pr": {
"branch": "sentinel/ux-friction/evolve-missing-artifact-path",
"title_prefix": "[spark-compete]",
"author_github": "4gjnbzb4zf-sudo",
"body_must_include": [
"packet",
"team",
"pr_author",
"repo",
"actual_behavior",
"expected_behavior",
"repro_steps",
"before_after_proof",
"tests_or_smoke",
"duplicate_notes",
"risk_notes",
"review_claim"
],
"url": "#299"
},
"review_claim": {
"impact_claim": "low",
"evidence_types": [
"redacted_terminal_excerpt"
],
"duplicate_notes": "Pre-flight check returned no open PR touching find_latest_persona's FileNotFoundError raise in either evolve.py or evolve_persona.py. Other open PRs on these files (#230, #154, #130, #112) target different defects (timeout/regex/etc).",
"risk_notes": "Local scope: two message-text edits in two files. Same exception type preserved. Success path byte-identical. No new package, no behavior change on the success branch.",
"review_state_requested": "pr_review"
}
}

…na.vN.md is missing

evolve.find_latest_persona and evolve_persona.find_latest_persona both
raise FileNotFoundError('No persona.vN.md artifacts found.') with no path
and no operator next-step. Operators running evolve against a fresh or
moved ARTIFACTS_DIR get a bare exception that doesn't tell them which
directory was checked or what to do.

Interpolate ARTIFACTS_DIR into the message and add the seed-persona /
ARTIFACTS_DIR-override remediation. Same exception type preserved; only
the message text changes.
@4gjnbzb4zf-sudo

Copy link
Copy Markdown
Contributor Author

TL;DR

evals/evolve.py and evals/evolve_persona.py both raise FileNotFoundError("No persona.vN.md artifacts found.") with no path and no operator next-step. Operators running evolve against a fresh checkout, a CI box without artifacts seeded, or after relocating ARTIFACTS_DIR get a bare exception that doesn't even name the directory it was looking in.

What I noticed

First-run evolve against a clean clone — exception said "No persona.vN.md artifacts found" and I had no idea whether the script looks in .spark_evals/, evals/artifacts/, or somewhere overridable. Had to grep the source to confirm ARTIFACTS_DIR was the env var and where it pointed by default.

The fix

Interpolate ARTIFACTS_DIR into the message and add the remediation: seed persona.v1.md in that directory or override the location via ARTIFACTS_DIR. Same exception type preserved (FileNotFoundError); only the message text changes. Applies to both evolve.find_latest_persona (line 80) and evolve_persona.find_latest_persona (line 118).

Reproduction

git clone https://github.com/vibeforge1111/spark-character && cd spark-character
python3 evals/evolve.py    # before: bare "No persona.vN.md artifacts found." / after: path + remediation
python3 evals/evolve_persona.py  # same

Severity

LOW-MEDIUM. Operator-experience friction on first-run / fresh-clone / relocated-artifacts paths. No behavior change for the success case; only the failure message text is more actionable.

ifeoluwaaj pushed a commit to ifeoluwaaj/spark-character that referenced this pull request Jun 27, 2026
…md found

When find_latest_persona has no persona.vN.md to load, the bare 'No
persona.vN.md artifacts found.' gave the operator nowhere to look. Name the
ARTIFACTS_DIR it searched and tell them to seed persona.v1.md there (or
override ARTIFACTS_DIR), in both evolve.py and evolve_persona.py.

PR vibeforge1111#299

Co-authored-by: 4gjnbzb4zf-sudo@users.noreply.github.com
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