|
478 | 478 | "idempotent": true |
479 | 479 | } |
480 | 480 | }, |
| 481 | + { |
| 482 | + "id": "decision.option.justify", |
| 483 | + "version": "1.0.0", |
| 484 | + "description": "Select a final recommendation from evaluated options and produce a structured justification. Consumes qualitative analysis (from eval.option.analyze) and quantitative scores (from eval.option.score) to make an explicit, committed choice. Outputs the recommendation, justification narrative, failure modes, uncertainties, confidence assessment, and concrete next steps.\nThis capability is the \"closing\" step — it resolves ambiguity into action. It must never hedge with \"it depends\" or \"consider both\".\n", |
| 485 | + "file": "capabilities/decision.option.justify.yaml", |
| 486 | + "inputs": { |
| 487 | + "scored_options": { |
| 488 | + "type": "array", |
| 489 | + "required": true, |
| 490 | + "description": "Options with quantitative scores from eval.option.score. Each entry includes option_id, overall_score, per_criterion_scores, strengths, weaknesses.\n" |
| 491 | + }, |
| 492 | + "analyzed_options": { |
| 493 | + "type": "array", |
| 494 | + "required": true, |
| 495 | + "description": "Options with qualitative analysis from eval.option.analyze. Each entry includes option_id, pros, cons, risks, assumptions.\n" |
| 496 | + }, |
| 497 | + "tradeoffs": { |
| 498 | + "type": "array", |
| 499 | + "required": false, |
| 500 | + "description": "Explicit trade-offs between top candidates from eval.option.score.\n" |
| 501 | + }, |
| 502 | + "goal": { |
| 503 | + "type": "string", |
| 504 | + "required": true, |
| 505 | + "description": "The original decision goal for contextual grounding.\n" |
| 506 | + }, |
| 507 | + "constraints": { |
| 508 | + "type": "object", |
| 509 | + "required": false, |
| 510 | + "description": "Hard constraints the decision must respect (budget, time, regulation).\n" |
| 511 | + }, |
| 512 | + "risk_tolerance": { |
| 513 | + "type": "string", |
| 514 | + "required": false, |
| 515 | + "description": "Risk appetite: low | medium | high. Modulates how uncertainty and downside scenarios influence the final selection.\n" |
| 516 | + } |
| 517 | + }, |
| 518 | + "outputs": { |
| 519 | + "recommendation": { |
| 520 | + "type": "string", |
| 521 | + "required": true, |
| 522 | + "description": "The final recommendation. Clear, concrete, actionable. Never hedged.\n" |
| 523 | + }, |
| 524 | + "alternatives_considered": { |
| 525 | + "type": "array", |
| 526 | + "required": true, |
| 527 | + "description": "All options that were evaluated, with a brief note on why each was or was not selected.\n" |
| 528 | + }, |
| 529 | + "confidence_score": { |
| 530 | + "type": "number", |
| 531 | + "required": true, |
| 532 | + "description": "Numeric confidence in the recommendation (0.0-1.0). Calibrated: 0.0-0.3 low, 0.3-0.6 medium, 0.6-0.9 high, 0.9-1.0 very high.\n" |
| 533 | + }, |
| 534 | + "confidence_level": { |
| 535 | + "type": "string", |
| 536 | + "required": true, |
| 537 | + "description": "Human-readable confidence: low | medium | high.\n" |
| 538 | + }, |
| 539 | + "uncertainties": { |
| 540 | + "type": "array", |
| 541 | + "required": true, |
| 542 | + "description": "What is unknown or weakly supported that could change the outcome.\n" |
| 543 | + }, |
| 544 | + "failure_modes": { |
| 545 | + "type": "array", |
| 546 | + "required": true, |
| 547 | + "description": "Concrete conditions under which the recommendation could fail. Specific, not generic.\n" |
| 548 | + }, |
| 549 | + "next_steps": { |
| 550 | + "type": "array", |
| 551 | + "required": true, |
| 552 | + "description": "Concrete follow-up actions: validations, pilots, execution steps. Prefers action over \"more analysis\".\n" |
| 553 | + }, |
| 554 | + "human_readable": { |
| 555 | + "type": "string", |
| 556 | + "required": true, |
| 557 | + "description": "3-6 paragraph narrative of the decision suitable for direct human consumption. Includes what was decided, why, key trade-offs, risks, and next steps.\n" |
| 558 | + } |
| 559 | + }, |
| 560 | + "metadata": { |
| 561 | + "tags": [ |
| 562 | + "decision-support", |
| 563 | + "justification", |
| 564 | + "recommendation" |
| 565 | + ], |
| 566 | + "category": null, |
| 567 | + "status": "experimental", |
| 568 | + "examples": [] |
| 569 | + }, |
| 570 | + "properties": { |
| 571 | + "deterministic": false, |
| 572 | + "side_effects": false, |
| 573 | + "idempotent": true |
| 574 | + } |
| 575 | + }, |
481 | 576 | { |
482 | 577 | "id": "doc.chunk", |
483 | 578 | "version": "1.0.0", |
|
591 | 686 | "idempotent": true |
592 | 687 | } |
593 | 688 | }, |
| 689 | + { |
| 690 | + "id": "eval.option.analyze", |
| 691 | + "version": "1.0.0", |
| 692 | + "description": "Perform qualitative analysis of each option in a decision set. For every option, identify pros, cons, risks, and underlying assumptions. Does NOT assign numeric scores — that is the responsibility of eval.option.score. This capability produces the structured qualitative evidence that scoring and justification steps consume downstream.\n", |
| 693 | + "file": "capabilities/eval.option.analyze.yaml", |
| 694 | + "inputs": { |
| 695 | + "options": { |
| 696 | + "type": "array", |
| 697 | + "required": true, |
| 698 | + "description": "List of options to analyze. Each option should have at minimum: id, label, description. May include key_attributes from agent.option.generate.\n" |
| 699 | + }, |
| 700 | + "context": { |
| 701 | + "type": "string", |
| 702 | + "required": false, |
| 703 | + "description": "Background information, prior analysis, or domain knowledge relevant to the analysis. Grounds the pros/cons in evidence rather than speculation.\n" |
| 704 | + }, |
| 705 | + "goal": { |
| 706 | + "type": "string", |
| 707 | + "required": true, |
| 708 | + "description": "The decision goal that frames which pros, cons, and risks matter.\n" |
| 709 | + } |
| 710 | + }, |
| 711 | + "outputs": { |
| 712 | + "analyzed_options": { |
| 713 | + "type": "array", |
| 714 | + "required": true, |
| 715 | + "description": "Options enriched with qualitative analysis. Each entry includes: option_id, pros (array of strings), cons (array of strings), risks (array of objects with description and severity), assumptions (array of strings — premises that must hold for this option to work as expected).\n" |
| 716 | + }, |
| 717 | + "analysis_notes": { |
| 718 | + "type": "string", |
| 719 | + "required": false, |
| 720 | + "description": "Brief note on methodology, gaps in available evidence, or caveats about the analysis.\n" |
| 721 | + } |
| 722 | + }, |
| 723 | + "metadata": { |
| 724 | + "tags": [ |
| 725 | + "decision-support", |
| 726 | + "evaluation", |
| 727 | + "qualitative-analysis" |
| 728 | + ], |
| 729 | + "category": null, |
| 730 | + "status": "experimental", |
| 731 | + "examples": [] |
| 732 | + }, |
| 733 | + "properties": { |
| 734 | + "deterministic": false, |
| 735 | + "side_effects": false, |
| 736 | + "idempotent": true |
| 737 | + } |
| 738 | + }, |
594 | 739 | { |
595 | 740 | "id": "eval.option.score", |
596 | 741 | "version": "1.0.0", |
|
0 commit comments