Skip to content

vein graph: legacy case-variant labels no longer shadow a type; wfbench survives a failed roster write - #1656

Merged
Evanfeenstra merged 2 commits into
mainfrom
graph-legacy-labels-and-roster-gate
Sep 4, 2026
Merged

vein graph: legacy case-variant labels no longer shadow a type; wfbench survives a failed roster write#1656
Evanfeenstra merged 2 commits into
mainfrom
graph-legacy-labels-and-roster-gate

Conversation

@Evanfeenstra

Copy link
Copy Markdown
Collaborator

Follow-up to #1654 (merged). On swarm38 the strut runs scored and Hive accepted the callback, but the lab marked both runs error and nothing reached the graph. Two causes.

vein resolves types via Schema.type before labels (engine)

Every jarvis-typed write on swarm38 failed UNKNOWN_TYPE: EvalSet: unknown node type (not a Vein type and no such Schema in the graph) — while MATCH (s:Schema {type:'EvalSet'}) returns the schema and Jarvis lists it. That graph also carries legacy labels Evalset, Evaltrigger, Evalrequirement, Evaltriggeroutput (zero nodes; Neo4j keeps the tokens). resolveType matched db.labels() case-insensitively with LIMIT 1, canonicalized to the spelling that has no Schema, and the write died. Now: Schema.type first, labels as fallback, exact case preferred in both. Live test registers the legacy labels and proves an EvalSet write lands under the schema-backed label, never the legacy one.

wfbench: a failed roster write degrades to no-roster, never an errored run (harness)

graph/* steps are fail-soft (error strings), so a missing roster surfaced as an undefined ref_id, the neighbors hop's schema rejected it, and the run errored — after the callback had gone out. roster_ok gate on hop/edge/link; the record chain and result run either way, carrying the write results as diagnostics.

Verification

  • vein: tsc clean; npm test 665/665; live npm run test:graph 141/141 against a throwaway Neo4j (incl. the new legacy-label case).
  • mcp: tsc clean; npx tsx src/lab/wfbench/smoke.ts green (35-step workflow validates).
  • Needs a swarm38 mcp redeploy (vein rebuild). Expected on the next strut run: roster + record land under default, the lab run ends success, and Hive's rubric reader finds the EvalSet.

Not addressed: Hive's own roster upsert also fails on swarm38 (Jarvis has no EvalSet for the slug; rosterUpsertOutcome: ok is the return-null path). Likely the same label pair on the Jarvis side.

…irst

On swarm38 every jarvis-typed write failed UNKNOWN_TYPE ("no such Schema
in the graph") although the EvalSet Schema exists: the graph also
carries legacy labels Evalset / Evaltrigger / Evalrequirement /
Evaltriggeroutput with zero nodes, and resolveType matched labels
case-insensitively with LIMIT 1, canonicalizing to a spelling that has
no Schema. Resolve against Schema.type first, then labels, preferring
an exact-case match in both. Live test registers the legacy labels and
proves an EvalSet write still lands under the schema-backed label.

(cherry picked from commit d1a8377)
…errored run

graph/* steps return error strings (fail-soft), so a roster that did
not land shows up as a missing ref_id; the neighbors hop then rejected
the undefined ref_id and the run errored after the callback had already
gone out (swarm38). Gate hop/edge/link on roster_ok; the record chain
and result run either way and carry the write results as diagnostics.

(cherry picked from commit 153d49d)
@Evanfeenstra
Evanfeenstra merged commit e50ce9d into main Sep 4, 2026
6 checks passed
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