feat(skills): add roster-tuner#200
Open
jdjioe5-cpu wants to merge 1 commit into
Open
Conversation
Reads a sealed agency case event stream through the hosted data-store
keyed on the case, folds each member's refusal and completion signals
the same way the agency reducer folds case state, ranks members
against operator-supplied performance norms, and emits a typed
roster-tuning decision naming the bounded member change as plain data.
Includes deterministic run.mjs with two harness cases:
- roster-tuner-escalate-sealed: refusal 0.75 + completion 3x case
mean with editor/blair crossed both norms and devon (editor,
0.10) replaces. decision.underperformer=true, member_to_remove=
blair, replacement_candidate=devon, refusal.reason=null.
- roster-tuner-stop-needs-agent: caller.answers omitted; runner
seals typed refusal because no member crosses both norms before
any decision is appended.
Fixes target.skill resolution in pickReplacement so the bounded swap
search resolves the target's skill from the roster snapshot itself
rather than relying on rankMembers to carry it.
Bounty: Frantic runxhq#72 (runx skill: roster tuner, 0 USD, x402 payout
to canonical Base/EVM address). Live at
https://gofrantic.com/bounties/p-bab1702abb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this PR adds
A new
roster-tunergraph-runner skill that reads a sealed agency caseevent stream through the hosted data-store, folds each member's
refusal rate and completion time, ranks members against
operator-supplied performance norms, and emits a typed roster-tuning
decision naming the bounded member change as plain data. The skill
records the judgment as a case-keyed append and stops; the human
agency operator is the only lane that acts on it, by re-opening the
case with the revised roster.
Skill files
skills/roster-tuner/SKILL.md— name, description, category("ops"), procedure, output contract, evidence requirements.
skills/roster-tuner/X.yaml— graph-runner skill with twoinline harness cases:
roster-tuner-escalate-sealed: refusal 0.75 + completion 3xcase mean with blair (editor) crossing both norms and devon
(editor, 0.10) as the skill-matched replacement. Expects
status: sealed, receipt.state: sealedwithdecision.underperformer=true,member_to_remove=blair,replacement_candidate=devon,refusal.reason=null.roster-tuner-stop-needs-agent: caller.answers omitted; runnerseals a typed refusal because no member crosses both norms
before any decision is appended. Expects
status: needs_agent.skills/roster-tuner/run.mjs— deterministic Node.js runnerthat refuses when
aggregate_id != case_id, schema mismatches,or the roster falls below
min_roster_size, ranks membersagainst the supplied norms, picks a skill-matched replacement
with strictly lower refusal rate, and emits one
decisionplusone
append_event(or a typed refusal).skills/roster-tuner/fixtures/escalate-sealed.jsonandskills/roster-tuner/fixtures/empty-projection-needs-agent.json— runner inputs that drive the local smoke harness via
RUNX_INPUTS_PATH.Bug fix
The previous draft's
pickReplacementcomparedentry.skillagainst
target.skillfromrankMembers, butrankMembersonly returns
{member, refusal, time}— sotarget.skillwasundefinedand every roster entry was filtered out, producing atyped refusal ("no skill-matched peer remains") even when one was
clearly available. This PR resolves the target's skill from the
roster snapshot itself (
targetEntry = roster.find(...)) beforethe skill-match search, so the positive path now correctly
identifies devon as the skill-matched replacement for blair.
Local smoke runs (no signing keys, no hosted gate):
Acceptance alignment (Frantic #72)
The Frantic #72 bounty requires:
runx-cli 0.6.14installed.jdjioe5-cpustars the repo.roster-tuner— package name inX.yamlmatches.x_yaml, skill_md, evidence_json, verification_json, receipt_ref,
and report all describe the same package version and source
revision — registry publish step is gated on Boss-side
runx login --for publishOAuth and will be completed in afollow-up commit on this same branch once the OAuth lands.
Out of scope for this PR
runx registry publish— needs Boss-side browser OAuth atconnect.runx.ai. Cloud cannot complete this autonomously.runx add ... / runx skill ... --jsondogfood run — dependson the published registry listing.
constructed locally once the registry publish step completes.
Risk
no network, subprocess, or filesystem access.
re-opens a case, never pages a human, never mints a token or
executes an attenuation subset proof.
refuses mismatched or unreadable case events with a typed
refusal rather than guessing.