Skip to content

Pr test - #2

Open
hfranklin wants to merge 1694 commits into
trivir:trivirfrom
hfranklin:pr-test
Open

Pr test#2
hfranklin wants to merge 1694 commits into
trivir:trivirfrom
hfranklin:pr-test

Conversation

@hfranklin

Copy link
Copy Markdown

No description provided.

vscheuber and others added 30 commits December 20, 2022 12:37
advancing test migration to polly
@hfranklin
hfranklin force-pushed the trivir branch 5 times, most recently from b9b1cad to 7e9b189 Compare June 26, 2023 02:10
@hfranklin
hfranklin force-pushed the trivir branch 3 times, most recently from 3f4837c to e3791cc Compare August 22, 2023 04:50
phalestrivir pushed a commit that referenced this pull request Sep 19, 2023
phalestrivir pushed a commit that referenced this pull request Sep 19, 2023
@hfranklin
hfranklin force-pushed the trivir branch 2 times, most recently from c794132 to 9fd7d58 Compare November 3, 2023 04:18
@phalestrivir
phalestrivir force-pushed the trivir branch 3 times, most recently from 94375fc to ebf6df8 Compare May 12, 2025 19:05
@hfranklin
hfranklin force-pushed the trivir branch 3 times, most recently from 0d8f73f to dbadbe9 Compare September 15, 2025 21:37
@akynaston

Copy link
Copy Markdown

Can this PR be deleted? These are the files changed after rebasing on main; while letting main files win on merging conflicts:

trivir@trivir-frodo-dev-vm:~/work/frodo-lib$ git diff main..HEAD --name-status
M .github/workflows/pipeline.yml
A jest.config.cjs.json
A jest.config.esm.json
M package-lock.json
A src/test/mock-recordings/AuthenticateOps_3073788200/getTokens_3422903202/1-Authenticate-successfully-as-user_3202812915/recording.har
A testfile.txt
M tsconfig.json

phalestrivir pushed a commit that referenced this pull request Aug 18, 2026
…ility

feat(mcp): semantic skill aliases, config-entity hydration, and executeRecommended auto-dispatch
phalestrivir pushed a commit that referenced this pull request Aug 18, 2026
…metric caller-identity semantic aliases

Two changes, found together while investigating why session.getSessionInfo
still couldn't be found despite the notes-weight and operationType-gate
fixes earlier today. Both of those genuinely worked — verified with a
temporary scoring debug probe that info.getInfo/session.getSessionInfo
scored 32, comfortably ahead of idm.managed.resolveIdentity's 18, for
"authenticated identity info" — yet the real ranked output still buried
them behind ~19 idm.managed.* skills. The scoring fixes were never the
problem; something after scoring was overriding them entirely.

Found it: findSkills' sort checked routing tier
(getRoutingRank(preferred/compatible/unknown/incompatible)) *before*
relevance, with relevance only breaking ties within the same tier.
idm.managed.* skills are "preferred" on cloud/forgeops (their own
preferredDeploymentTypes says so); session.*/info.* skills are merely
"compatible" (generic, not deployment-specific). Since JS's || only
falls through on an exact zero, any routing-rank difference won
outright — no relevance score, however dominant, could ever move a
"compatible" result above so much as one "preferred" result. This
mechanism exists to pick between genuine alternative implementations
of the same operation across deployment types (classic
user.countUsers vs cloud idm.managed.countManagedObjects) — a sound
idea — but applying it as an unconditional global pre-sort key meant
completely unrelated domains got silently tier-locked against each
other on every query.

Converted it from a hard pre-sort tier into a modest additive bonus
folded into relevance itself (+6 for preferred, +0 for compatible/
unknown) — preserves the original intent (break near-ties toward the
deployment-native answer) without letting it categorically override a
much more relevant result from an unrelated domain. Deliberately no
penalty for "incompatible": those are already excluded by default and
only reach scoring at all when a caller explicitly asks to see them
for diagnostics (includeIncompatible), where a large enough penalty
would drop them below the relevance>0 inclusion filter and make them
vanish from that diagnostic view entirely rather than just sort last
— confirmed by a real test failure when this was first tried with a
-100 penalty, now fixed by omitting it and relying on the retained
secondary getRoutingRank tiebreak instead. routingRank is kept as
that secondary tiebreak (after relevance, before id) for genuine ties,
matching the mechanism's original intent.

Separately: added semanticAliases to info.getInfo and
session.getSessionInfo — 'who am i', 'authenticated identity', 'my
identity', 'current session', 'current identity'. "identity" is
overloaded between two meanings — a directory record (idm.managed.*,
~10 skills sharing that bonus) vs the caller's own authenticated
session (these 2 skills) — and without a symmetric signal for the
second meaning, the first always won on sheer numbers regardless of
which one a query actually intended. This uses the existing
semanticAliases mechanism (already weighted at 10, already used
elsewhere in CapabilityMetadata.ts for exactly this kind of
otherwise-unfindable-by-literal-fields concept) rather than inventing
something new.

Verified live against the real packed binary (a real MCP SDK client,
not a hand-rolled harness) for both queries that were unfindable
before either fix: info.getInfo and session.getSessionInfo now rank
#1 and #2 of 65 and 602 real candidates respectively, for both
"authenticated identity info" and "who am i current session user".
1 new regression test, confirmed to genuinely fail without the fix
(not by coincidental tie-break order) by temporarily reverting it.
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.

6 participants