@@ -306,4 +306,110 @@ All 10 tests pass as of v2.34.0.
306306
307307---
308308
309+ ---
310+
311+ ## 11. Skill-Scoped Trust Scores (v2.95)
312+
313+ > ** A2A reference** : Issue #1717 — governance_metadata skill-scoped trust (community convergence 2026-04-09)
314+
315+ The global ` trust_score ` in §4 measures overall peer trustworthiness. As of v2.95, ACP introduces
316+ ** per-skill trust scores** derived from bilateral IR evidence, enabling callers to assess how trustworthy
317+ a specific skill invocation is rather than relying solely on the aggregate peer score.
318+
319+ ### 11.1 Data Model
320+
321+ ` governance_metadata.trust_scores ` :
322+
323+ ``` json
324+ {
325+ "trust_scores" : {
326+ "text.summarize" : 0.525 ,
327+ "code.review" : 0.435
328+ },
329+ "trust_score_method" : " skill_scoped_v1" ,
330+ "trust_score" : 0.75
331+ }
332+ ```
333+
334+ - ` trust_scores ` — dict of ` skill_id → float [0.0, 1.0] ` ; empty ` {} ` = no bilateral IR evidence yet
335+ - ` trust_score_method ` — always ` "skill_scoped_v1" ` as of v2.95
336+ - ` trust_score ` — global scalar retained for backward compatibility (A2A #1717 v1 spec)
337+
338+ ### 11.2 Score Algorithm (` skill_scoped_v1 ` )
339+
340+ ```
341+ score(skill_id) =
342+ clamp(
343+ 0.3
344+ + min(unique_callers(skill_id), 10) * 0.04
345+ + min(bilateral_count(skill_id), 50) * 0.005,
346+ 0.0, 1.0
347+ )
348+ ```
349+
350+ Where:
351+ - ` unique_callers ` — number of distinct ` caller_did ` values in bilateral IR records for this skill
352+ - ` bilateral_count ` — number of bilateral IR records (` bilateral: true ` ) for this skill
353+ - Base score ` 0.3 ` = minimum for any skill with IR evidence
354+ - Caller diversity (max ` +0.40 ` ) rewards broad adoption over narrow usage
355+ - Volume (max ` +0.25 ` ) rewards sustained usage
356+
357+ ### 11.3 API
358+
359+ | Endpoint | Method | Description |
360+ | ----------| --------| -------------|
361+ | ` /trust/skill-scores ` | GET | All per-skill scores from bilateral IR evidence |
362+ | ` /skills/query ` | POST | Returns ` skill_trust_score ` field per queried skill |
363+
364+ ` GET /trust/skill-scores ` response:
365+
366+ ``` json
367+ {
368+ "ok" : true ,
369+ "trust_scores" : { "text.summarize" : 0.525 },
370+ "method" : " skill_scoped_v1" ,
371+ "algorithm" : {
372+ "base" : 0.3 ,
373+ "caller_diversity" : " min(unique_callers, 10) * 0.04" ,
374+ "volume" : " min(bilateral_count, 50) * 0.005" ,
375+ "max" : 1.0
376+ },
377+ "skill_count" : 1 ,
378+ "ir_count" : 5 ,
379+ "version" : " 2.95.0"
380+ }
381+ ```
382+
383+ ### 11.4 Backward Compatibility
384+
385+ - Global ` trust_score ` scalar is preserved in ` governance_metadata `
386+ - When bilateral IR evidence exists, ` trust_score ` is updated to the average of per-skill scores
387+ - When no IR evidence, ` trust_score ` retains the configured/startup value
388+ - Clients that only read ` trust_score ` continue to work without modification
389+
390+ ### 11.5 Test Coverage
391+
392+ | Test ID | Description |
393+ | ---------| -------------|
394+ | SS01 | VERSION == 2.95.0 |
395+ | SS02 | ` capabilities.skill_scoped_trust_scores: true ` declared |
396+ | SS03 | ` endpoints.skill_trust_scores ` declared in AgentCard |
397+ | SS04 | Existing endpoints (bilateral_ir_log/diversity) still declared |
398+ | SS05 | ` /trust/skill-scores ` returns ` {} ` when no IR records |
399+ | SS06 | Response schema contains all required fields |
400+ | SS07 | ` algorithm ` block contains base/caller_diversity/volume/max |
401+ | SS08 | Single skill score computed correctly from IR evidence |
402+ | SS09 | Two skills produce separate independent scores |
403+ | SS10 | All scores clamped to [ 0.0, 1.0] |
404+ | SS11 | ` skill_count ` matches unique skill_ids in IR records |
405+ | SS12 | QuerySkill response contains ` skill_trust_score ` field |
406+ | SS13 | ` skill_trust_score == null ` when no IR evidence |
407+ | SS14 | ` skill_trust_score ` populated after bilateral IR for that skill |
408+ | SS15 | ` /governance-metadata ` includes ` trust_scores ` dict + ` trust_score_method ` |
409+ | SS16 | Global ` trust_score ` backward compat — configured value retained when no IR |
410+
411+ All 16 tests pass as of v2.95.0 (` tests/test_skill_scoped_trust_v295.py ` ).
412+
413+ ---
414+
309415* ACP is built by Kickflip73 + J.A.R.V.I.S. · [ GitHub] ( https://github.com/Kickflip73/agent-communication-protocol ) *
0 commit comments