ai-capability-framework 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/CONTRIBUTING.md +56 -0
  3. package/LICENSE +21 -0
  4. package/README.md +198 -0
  5. package/SECURITY.md +29 -0
  6. package/conformance/invalid/duplicate/capabilities/conformance.duplicate.one.yaml +55 -0
  7. package/conformance/invalid/duplicate/capabilities/conformance.duplicate.two.yaml +55 -0
  8. package/conformance/invalid/eval-results/conformance.results.failing.json +15 -0
  9. package/conformance/invalid/missing-reference/capabilities/conformance.missing_reference.prepare.yaml +58 -0
  10. package/conformance/invalid/schema/capabilities/conformance.invalid.missing_required.yaml +3 -0
  11. package/conformance/valid/capabilities/conformance.note.get.yaml +82 -0
  12. package/conformance/valid/decisions/conformance.note.get.denied_missing_permission.json +13 -0
  13. package/conformance/valid/entities/Note.yaml +18 -0
  14. package/conformance/valid/eval-results/conformance.results.passing.json +19 -0
  15. package/conformance/valid/evals/conformance.note.get.valid.yaml +33 -0
  16. package/conformance/valid/openai/context.no_permissions.json +6 -0
  17. package/dist/adapter-common.d.ts +62 -0
  18. package/dist/adapter-common.d.ts.map +1 -0
  19. package/dist/adapter-common.js +453 -0
  20. package/dist/ai-sdk.d.ts +5 -0
  21. package/dist/ai-sdk.d.ts.map +1 -0
  22. package/dist/ai-sdk.js +71 -0
  23. package/dist/anthropic-claude.d.ts +5 -0
  24. package/dist/anthropic-claude.d.ts.map +1 -0
  25. package/dist/anthropic-claude.js +62 -0
  26. package/dist/cli.d.ts +11 -0
  27. package/dist/cli.d.ts.map +1 -0
  28. package/dist/cli.js +360 -0
  29. package/dist/decision.d.ts +6 -0
  30. package/dist/decision.d.ts.map +1 -0
  31. package/dist/decision.js +237 -0
  32. package/dist/eval-runner.d.ts +6 -0
  33. package/dist/eval-runner.d.ts.map +1 -0
  34. package/dist/eval-runner.js +372 -0
  35. package/dist/gemini.d.ts +5 -0
  36. package/dist/gemini.d.ts.map +1 -0
  37. package/dist/gemini.js +64 -0
  38. package/dist/generated/manifest-types.d.ts +208 -0
  39. package/dist/generated/manifest-types.d.ts.map +1 -0
  40. package/dist/generated/manifest-types.js +1 -0
  41. package/dist/index.d.ts +15 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +13 -0
  44. package/dist/langchain.d.ts +5 -0
  45. package/dist/langchain.d.ts.map +1 -0
  46. package/dist/langchain.js +65 -0
  47. package/dist/loader.d.ts +4 -0
  48. package/dist/loader.d.ts.map +1 -0
  49. package/dist/loader.js +94 -0
  50. package/dist/mcp.d.ts +5 -0
  51. package/dist/mcp.d.ts.map +1 -0
  52. package/dist/mcp.js +82 -0
  53. package/dist/openai-responses.d.ts +6 -0
  54. package/dist/openai-responses.d.ts.map +1 -0
  55. package/dist/openai-responses.js +65 -0
  56. package/dist/registry.d.ts +6 -0
  57. package/dist/registry.d.ts.map +1 -0
  58. package/dist/registry.js +134 -0
  59. package/dist/semantic-kernel.d.ts +5 -0
  60. package/dist/semantic-kernel.d.ts.map +1 -0
  61. package/dist/semantic-kernel.js +79 -0
  62. package/dist/types.d.ts +400 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +1 -0
  65. package/dist/validator.d.ts +3 -0
  66. package/dist/validator.d.ts.map +1 -0
  67. package/dist/validator.js +105 -0
  68. package/docs/adapter-roadmap.md +179 -0
  69. package/docs/adapters.md +112 -0
  70. package/docs/api.md +115 -0
  71. package/docs/capability-manifests.md +47 -0
  72. package/docs/control-plane.md +59 -0
  73. package/docs/eval-runner.md +80 -0
  74. package/docs/evals.md +34 -0
  75. package/docs/getting-started.md +51 -0
  76. package/docs/host-responsibilities.md +23 -0
  77. package/docs/interoperability.md +32 -0
  78. package/docs/migration-0.1-to-1.0.md +22 -0
  79. package/docs/openai-responses.md +103 -0
  80. package/docs/release.md +75 -0
  81. package/docs/spec.md +194 -0
  82. package/examples/eval-results/public.results.passing.json +128 -0
  83. package/examples/scheduling/capabilities/scheduling.availability.get.yaml +91 -0
  84. package/examples/scheduling/capabilities/scheduling.invite.prepare.yaml +114 -0
  85. package/examples/scheduling/capabilities/scheduling.invite.send.yaml +97 -0
  86. package/examples/scheduling/decisions/scheduling.availability.get.select.json +14 -0
  87. package/examples/scheduling/decisions/scheduling.invite.prepare.allowed.json +20 -0
  88. package/examples/scheduling/decisions/scheduling.invite.send.allowed.json +22 -0
  89. package/examples/scheduling/decisions/scheduling.invite.send.denied_missing_approval.json +18 -0
  90. package/examples/scheduling/entities/AvailabilitySlot.yaml +26 -0
  91. package/examples/scheduling/entities/MeetingInvite.yaml +25 -0
  92. package/examples/scheduling/eval-results/scheduling.results.passing.json +59 -0
  93. package/examples/scheduling/evals/scheduling.availability.get.valid.yaml +38 -0
  94. package/examples/scheduling/evals/scheduling.invite.prepare.valid.yaml +44 -0
  95. package/examples/scheduling/evals/scheduling.invite.send.requires_approval.yaml +43 -0
  96. package/examples/scheduling/openai/context.scheduler.json +6 -0
  97. package/examples/support/capabilities/support.refund.commit_case.yaml +98 -0
  98. package/examples/support/capabilities/support.refund.prepare_case.yaml +116 -0
  99. package/examples/support/capabilities/support.ticket.get.yaml +85 -0
  100. package/examples/support/decisions/support.refund.commit_case.allowed.json +22 -0
  101. package/examples/support/decisions/support.refund.commit_case.denied_missing_approval.json +18 -0
  102. package/examples/support/decisions/support.refund.prepare_case.approval_required.json +19 -0
  103. package/examples/support/decisions/support.ticket.get.select.json +0 -0
  104. package/examples/support/entities/Order.yaml +23 -0
  105. package/examples/support/entities/Ticket.yaml +25 -0
  106. package/examples/support/eval-results/support.results.passing.json +68 -0
  107. package/examples/support/evals/support.refund.commit_case.requires_approval.yaml +42 -0
  108. package/examples/support/evals/support.refund.prepare_case.approval_required.yaml +45 -0
  109. package/examples/support/evals/support.refund.prepare_case.valid.yaml +43 -0
  110. package/examples/support/openai/context.support_agent.json +9 -0
  111. package/package.json +74 -0
  112. package/schemas/capability-manifest.schema.json +250 -0
  113. package/schemas/entity-manifest.schema.json +97 -0
  114. package/schemas/eval-case.schema.json +134 -0
  115. package/schemas/eval-result.schema.json +77 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,37 @@
1
+ # Changelog
2
+
3
+ All notable public changes to AI Capability Framework are documented here.
4
+
5
+ ## 1.0.0-rc.1 - 2026-06-03
6
+
7
+ 1.0 spec-complete release candidate.
8
+
9
+ - Promoted public manifests and eval result fixtures to
10
+ `schema_version: "1.0"`.
11
+ - Made the spec normative and explicit about the no-execution boundary.
12
+ - Added migration, host responsibility, and interoperability guidance.
13
+ - Added a second synthetic domain and conformance fixtures for external review.
14
+ - Added no-model-call adapters for Anthropic Claude, Google Gemini, Vercel AI
15
+ SDK, Model Context Protocol, LangChain/LangGraph, and Semantic Kernel.
16
+ - Enabled public npm release-candidate publishing while keeping the no-execution
17
+ framework boundary.
18
+
19
+ ## 0.1.0 - 2026-06-03
20
+
21
+ Initial public v0.1 release candidate.
22
+
23
+ - Added JSON Schema contracts for capability, entity, eval case, and eval result
24
+ manifests.
25
+ - Added synthetic support examples for read, prepare-only write, commit, policy,
26
+ approval, refusal, and eval boundaries.
27
+ - Added a TypeScript core library and `aicf` CLI for loading, validating,
28
+ inspecting, deciding, OpenAI tool export, and deterministic eval scoring.
29
+ - Added deterministic policy and lifecycle decision APIs without executing
30
+ capabilities or performing side effects.
31
+ - Added a no-model-call OpenAI Responses adapter for exporting function tool
32
+ definitions and parsing tool calls.
33
+ - Added an API-key-free eval runner for scoring candidate result fixtures.
34
+ - Added release-readiness package checks, public API docs, CI validation, and
35
+ public repository boundary guidance.
36
+
37
+ This release was GitHub-release-ready only and was not published to npm.
@@ -0,0 +1,56 @@
1
+ # Contributing
2
+
3
+ Thanks for improving AI Capability Framework. This repository is public, so
4
+ every tracked change must be safe to publish.
5
+
6
+ ## Public-Safe Contributions
7
+
8
+ - Use synthetic examples with fake IDs, fake tenants, fake users, and
9
+ `example.com` addresses.
10
+ - Do not commit credentials, account IDs, customer records, raw prompts, raw
11
+ traces, provider payloads, private source documents, generated exports, or
12
+ local experiments.
13
+ - Keep private notes and drafts in `_private/` or another ignored path.
14
+ - Never copy from `_private/` into tracked files verbatim. Distill public
15
+ guidance in new wording.
16
+
17
+ ## Development Workflow
18
+
19
+ Install dependencies:
20
+
21
+ ```bash
22
+ npm ci
23
+ ```
24
+
25
+ Common commands:
26
+
27
+ ```bash
28
+ npm run generate:types
29
+ npm run check:generated
30
+ npm run build
31
+ npm test
32
+ npm run validate
33
+ npm run check:package
34
+ npm run check
35
+ ```
36
+
37
+ Run `npm run generate:types` whenever schemas change. Generated public manifest
38
+ types under `src/generated/` must stay current.
39
+
40
+ ## Pull Requests
41
+
42
+ Before opening a pull request:
43
+
44
+ - Run `npm run check`.
45
+ - Confirm examples are public-safe and synthetic.
46
+ - Confirm `_private/`, traces, prompts, provider payloads, generated local docs,
47
+ packed tarballs, and local-only files are not tracked.
48
+ - Use `git status --short --ignored` to confirm private material remains
49
+ ignored.
50
+ - Use `git ls-files` to inspect the tracked public surface.
51
+
52
+ ## Scope
53
+
54
+ AICF 1.0 is a no-execution framework. Contributions should not add model calls,
55
+ handler registries, action stores, approval runtimes, or side effects unless a
56
+ future roadmap explicitly changes that boundary.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 AI Capability Framework contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,198 @@
1
+ # AI Capability Framework
2
+
3
+ AI Capability Framework (AICF) is a small public framework for describing what an
4
+ AI-enabled application is allowed to know, decide, and do.
5
+
6
+ The repository contains:
7
+
8
+ - JSON Schema contracts for capability, entity, and eval manifests.
9
+ - Synthetic examples that show how to describe a capability without exposing
10
+ private application internals.
11
+ - A TypeScript core library and `aicf` CLI for loading, validating, and
12
+ inspecting manifests.
13
+ - Provider and runtime adapters that export safe tool descriptors without
14
+ calling models or executing capabilities.
15
+ - A deterministic eval runner for scoring public-safe candidate fixtures
16
+ without API keys or live model calls.
17
+ - A normative `1.0` public spec for capability IDs, tiers, lifecycle, and
18
+ public-safe examples.
19
+
20
+ ## Why This Exists
21
+
22
+ AI products are easier to govern when model-facing behavior is represented as
23
+ explicit application capabilities instead of broad tool lists or hidden prompts.
24
+ AICF separates semantic interpretation from deterministic application control:
25
+
26
+ - Models interpret the user goal and select from a small set of relevant
27
+ capabilities.
28
+ - Application code validates inputs, checks authorization, enforces policy,
29
+ executes side effects, and records audit evidence.
30
+ - Evals verify that capability selection, tool arguments, approval boundaries,
31
+ and safety behavior remain stable.
32
+
33
+ ## Quick Start
34
+
35
+ Install dependencies and validate the public examples:
36
+
37
+ ```bash
38
+ npm install
39
+ npm run validate
40
+ ```
41
+
42
+ Inspect the public example registry:
43
+
44
+ ```bash
45
+ npm run inspect
46
+ ```
47
+
48
+ Evaluate a deterministic capability decision:
49
+
50
+ ```bash
51
+ npm run build
52
+ node dist/cli.js decide examples --request examples/support/decisions/support.refund.prepare_case.approval_required.json
53
+ ```
54
+
55
+ Export OpenAI Responses function tools from a validated registry:
56
+
57
+ ```bash
58
+ npm run build
59
+ node dist/cli.js openai-tools examples --context examples/support/openai/context.support_agent.json
60
+ ```
61
+
62
+ Export another adapter shape:
63
+
64
+ ```bash
65
+ npm run build
66
+ node dist/cli.js anthropic-tools examples --context examples/support/openai/context.support_agent.json
67
+ ```
68
+
69
+ Run deterministic evals against a public-safe candidate fixture:
70
+
71
+ ```bash
72
+ npm run build
73
+ node dist/cli.js eval examples --results examples/eval-results/public.results.passing.json
74
+ ```
75
+
76
+ Start a capability manifest excerpt:
77
+
78
+ ```yaml
79
+ schema_version: "1.0"
80
+ id: support.refund.prepare_case
81
+ version: 1.0.0
82
+ status: active
83
+ name: Prepare refund case
84
+ summary: Prepare a refund case for review without issuing money.
85
+ capability_type: write_prepare_only
86
+ autonomy_tier: A2
87
+ risk_tier: medium
88
+ ```
89
+
90
+ Then add the required input/output schemas, side-effect metadata,
91
+ authorization rules, policy gates, lifecycle flags, observability settings, and
92
+ eval references. Complete copyable examples live under `examples/`.
93
+
94
+ ## Repository Layout
95
+
96
+ ```text
97
+ schemas/ JSON Schema contracts for AICF manifests
98
+ examples/ Synthetic public example capabilities, entities, and evals
99
+ conformance/ Public valid and invalid fixtures for contract review
100
+ docs/ Public usage guidance
101
+ src/ TypeScript core, CLI, generated types, and tests
102
+ scripts/ Local type-generation utilities
103
+ ```
104
+
105
+ Start with [the 1.0 spec](docs/spec.md), read the
106
+ [API guide](docs/api.md), the [control-plane guide](docs/control-plane.md), the
107
+ [OpenAI Responses adapter](docs/openai-responses.md), the
108
+ [adapter guide](docs/adapters.md), the
109
+ [eval runner guide](docs/eval-runner.md), the
110
+ [host responsibilities guide](docs/host-responsibilities.md), and the
111
+ [interoperability guide](docs/interoperability.md). For future provider and
112
+ runtime adapters, see the [adapter roadmap](docs/adapter-roadmap.md), then
113
+ inspect the examples.
114
+
115
+ Release and collaboration docs:
116
+ [CHANGELOG](CHANGELOG.md), [CONTRIBUTING](CONTRIBUTING.md),
117
+ [SECURITY](SECURITY.md), the [migration guide](docs/migration-0.1-to-1.0.md),
118
+ and the [release checklist](docs/release.md).
119
+
120
+ Private drafts and source material are intentionally excluded from this public
121
+ repository. See `AGENTS.md` for the tracking boundary used in this workspace.
122
+
123
+ ## Core Concepts
124
+
125
+ Capability manifest:
126
+ Describes a model-selectable application capability, including its input/output
127
+ contract, risk tier, side effects, authorization requirements, policy gates, and
128
+ observability expectations.
129
+
130
+ Entity manifest:
131
+ Describes an application entity that capabilities may read or act on. It records
132
+ canonical identifiers, data classification, relationships, and model-facing
133
+ guidance.
134
+
135
+ Eval case:
136
+ Describes a regression case for capability selection, argument extraction,
137
+ approval boundaries, refusals, and safety behavior.
138
+
139
+ Action lifecycle:
140
+ Side-effecting capabilities should generally follow a prepare, preview, approve,
141
+ commit, verify, and audit lifecycle. Low-risk read or compute capabilities can
142
+ use simpler flows when policy allows it.
143
+
144
+ ## Validation
145
+
146
+ `npm run validate` parses all schema files, then validates every YAML/JSON
147
+ example under:
148
+
149
+ - `examples/**/capabilities/`
150
+ - `examples/**/entities/`
151
+ - `examples/**/evals/`
152
+
153
+ The script fails on malformed examples or schema violations.
154
+
155
+ GitHub Actions runs type generation, generated-type freshness checks, build,
156
+ tests, and validation on pushes and pull requests.
157
+
158
+ ## TypeScript API
159
+
160
+ AICF exposes a small no-execution TypeScript surface:
161
+
162
+ - `loadManifests(options)`
163
+ - `validateManifests(manifests, options)`
164
+ - `buildRegistry(manifests)`
165
+ - `inspectRegistry(registry)`
166
+ - `decideCapability(registry, request)`
167
+ - `evaluatePolicy(capability, request)`
168
+ - `evaluateLifecycle(capability, request)`
169
+ - `buildOpenAIResponsesTools(registry, options)`
170
+ - `parseOpenAIResponsesToolCall(toolset, call)`
171
+ - `toOpenAIResponsesToolName(capabilityId, options)`
172
+ - `buildAnthropicClaudeTools(registry, options)`
173
+ - `parseAnthropicClaudeToolUse(toolset, toolUse)`
174
+ - `buildGeminiFunctionDeclarations(registry, options)`
175
+ - `parseGeminiFunctionCall(functionSet, functionCall)`
176
+ - `buildAiSdkTools(registry, options)`
177
+ - `parseAiSdkToolCall(toolset, toolCall)`
178
+ - `buildMcpToolDescriptors(registry, options)`
179
+ - `parseMcpToolCall(toolset, toolCall)`
180
+ - `buildLangChainToolDescriptors(registry, options)`
181
+ - `parseLangChainToolCall(toolset, toolCall)`
182
+ - `buildSemanticKernelFunctions(registry, options)`
183
+ - `parseSemanticKernelFunctionCall(functionSet, functionCall)`
184
+ - `loadEvalResults(path)`
185
+ - `scoreEvalCase(evalCase, candidate, registry)`
186
+ - `runEvalSuite(registry, candidates, options)`
187
+
188
+ Generated public types include `CapabilityManifest`, `EntityManifest`, and
189
+ `EvalCase`. Decision types include `DecisionRequest`, `DecisionResult`,
190
+ `DecisionReason`, `DecisionOperation`, and `DecisionStatus`. OpenAI adapter
191
+ types include `OpenAIResponsesToolset`, `OpenAIResponsesFunctionTool`, and
192
+ `OpenAIResponsesToolBinding`. Eval runner types include `EvalResultFixture`,
193
+ `EvalCandidateResult`, `EvalSuiteResult`, `EvalCaseResult`, and
194
+ `EvalScorerResult`.
195
+
196
+ ## License
197
+
198
+ MIT. See [LICENSE](LICENSE).
package/SECURITY.md ADDED
@@ -0,0 +1,29 @@
1
+ # Security Policy
2
+
3
+ AI Capability Framework is public. Please do not disclose secrets, customer
4
+ data, raw prompts, raw traces, provider payloads, internal endpoints, or private
5
+ documents in public issues, pull requests, or comments.
6
+
7
+ ## Reporting A Vulnerability
8
+
9
+ Use GitHub private vulnerability reporting if it is enabled for this repository.
10
+ If private reporting is unavailable, open a minimal public issue that describes
11
+ the affected area at a high level and asks for a private reporting path. Do not
12
+ include exploit details, credentials, real identifiers, or private data in that
13
+ public issue.
14
+
15
+ ## What To Include Privately
16
+
17
+ - Affected schema, API, CLI command, or documentation area.
18
+ - Reproduction steps using synthetic data.
19
+ - Expected and actual behavior.
20
+ - Impact and suggested fix, if known.
21
+
22
+ ## Public Safety
23
+
24
+ Security fixes should preserve the repository boundary:
25
+
26
+ - Keep `_private/` ignored and untracked.
27
+ - Redact or omit raw traces, prompts, and provider payloads.
28
+ - Use synthetic examples only.
29
+ - Run `npm run check` before handoff.
@@ -0,0 +1,55 @@
1
+ schema_version: "1.0"
2
+ id: conformance.duplicate.get
3
+ version: 1.0.0
4
+ status: active
5
+ name: Duplicate conformance note one
6
+ summary: First intentionally duplicated capability ID.
7
+ model_description: Read a synthetic note.
8
+ capability_type: read_data
9
+ autonomy_tier: A1
10
+ risk_tier: low
11
+ input_schema:
12
+ type: object
13
+ additionalProperties: false
14
+ required:
15
+ - note_id
16
+ properties:
17
+ note_id:
18
+ type: string
19
+ output_schema:
20
+ type: object
21
+ additionalProperties: false
22
+ required:
23
+ - note_id
24
+ properties:
25
+ note_id:
26
+ type: string
27
+ side_effects:
28
+ reads_data: true
29
+ writes_data: false
30
+ creates_records: false
31
+ updates_records: false
32
+ deletes_records: false
33
+ sends_external_messages: false
34
+ charges_money: false
35
+ refunds_money: false
36
+ changes_permissions: false
37
+ triggers_external_workflow: false
38
+ irreversible: false
39
+ authorization:
40
+ permissions:
41
+ - note.read
42
+ tenant_scoped: true
43
+ requires_user_context: true
44
+ policy:
45
+ approval_required: false
46
+ lifecycle:
47
+ prepare: false
48
+ preview: false
49
+ approve: false
50
+ commit: false
51
+ verify: false
52
+ audit: true
53
+ observability:
54
+ log_inputs: redacted
55
+ log_outputs: summary
@@ -0,0 +1,55 @@
1
+ schema_version: "1.0"
2
+ id: conformance.duplicate.get
3
+ version: 1.0.0
4
+ status: active
5
+ name: Duplicate conformance note two
6
+ summary: Second intentionally duplicated capability ID.
7
+ model_description: Read a synthetic note.
8
+ capability_type: read_data
9
+ autonomy_tier: A1
10
+ risk_tier: low
11
+ input_schema:
12
+ type: object
13
+ additionalProperties: false
14
+ required:
15
+ - note_id
16
+ properties:
17
+ note_id:
18
+ type: string
19
+ output_schema:
20
+ type: object
21
+ additionalProperties: false
22
+ required:
23
+ - note_id
24
+ properties:
25
+ note_id:
26
+ type: string
27
+ side_effects:
28
+ reads_data: true
29
+ writes_data: false
30
+ creates_records: false
31
+ updates_records: false
32
+ deletes_records: false
33
+ sends_external_messages: false
34
+ charges_money: false
35
+ refunds_money: false
36
+ changes_permissions: false
37
+ triggers_external_workflow: false
38
+ irreversible: false
39
+ authorization:
40
+ permissions:
41
+ - note.read
42
+ tenant_scoped: true
43
+ requires_user_context: true
44
+ policy:
45
+ approval_required: false
46
+ lifecycle:
47
+ prepare: false
48
+ preview: false
49
+ approve: false
50
+ commit: false
51
+ verify: false
52
+ audit: true
53
+ observability:
54
+ log_inputs: redacted
55
+ log_outputs: summary
@@ -0,0 +1,15 @@
1
+ {
2
+ "schema_version": "1.0",
3
+ "results": [
4
+ {
5
+ "eval_id": "conformance.note.get.valid",
6
+ "selected_capabilities": ["conformance.note.publish"],
7
+ "tool_calls": [],
8
+ "action_state": "committed",
9
+ "committed_capabilities": ["conformance.note.publish"],
10
+ "response": {
11
+ "text": "Committed an action that the eval forbids."
12
+ }
13
+ }
14
+ ]
15
+ }
@@ -0,0 +1,58 @@
1
+ schema_version: "1.0"
2
+ id: conformance.missing_reference.prepare
3
+ version: 1.0.0
4
+ status: active
5
+ name: Missing reference fixture
6
+ summary: Intentionally references a missing eval file.
7
+ model_description: Prepare a synthetic conformance action.
8
+ capability_type: write_prepare_only
9
+ autonomy_tier: A2
10
+ risk_tier: medium
11
+ input_schema:
12
+ type: object
13
+ additionalProperties: false
14
+ required:
15
+ - note_id
16
+ properties:
17
+ note_id:
18
+ type: string
19
+ output_schema:
20
+ type: object
21
+ additionalProperties: false
22
+ required:
23
+ - prepared_action_id
24
+ properties:
25
+ prepared_action_id:
26
+ type: string
27
+ side_effects:
28
+ reads_data: true
29
+ writes_data: true
30
+ creates_records: true
31
+ updates_records: false
32
+ deletes_records: false
33
+ sends_external_messages: false
34
+ charges_money: false
35
+ refunds_money: false
36
+ changes_permissions: false
37
+ triggers_external_workflow: false
38
+ irreversible: false
39
+ authorization:
40
+ permissions:
41
+ - note.prepare
42
+ tenant_scoped: true
43
+ requires_user_context: true
44
+ policy:
45
+ approval_required: true
46
+ lifecycle:
47
+ prepare: true
48
+ preview: true
49
+ approve: true
50
+ commit: false
51
+ verify: true
52
+ audit: true
53
+ observability:
54
+ log_inputs: redacted
55
+ log_outputs: summary
56
+ evals:
57
+ golden:
58
+ - ../evals/missing.conformance.eval.yaml
@@ -0,0 +1,3 @@
1
+ schema_version: "1.0"
2
+ id: conformance.invalid.missing_required
3
+ summary: This fixture is intentionally missing required capability fields.
@@ -0,0 +1,82 @@
1
+ schema_version: "1.0"
2
+ id: conformance.note.get
3
+ version: 1.0.0
4
+ status: active
5
+ name: Get conformance note
6
+ summary: Read a synthetic note used by public conformance fixtures.
7
+ domain: conformance
8
+ owner:
9
+ team: example-conformance
10
+ contact: conformance@example.com
11
+ capability_type: read_data
12
+ autonomy_tier: A1
13
+ risk_tier: low
14
+ model_description: >
15
+ Use this capability to retrieve a synthetic conformance note by ID.
16
+ when_to_use:
17
+ - The user asks to read a conformance note.
18
+ when_not_to_use:
19
+ - The user asks to change, delete, or publish a note.
20
+ input_schema:
21
+ type: object
22
+ additionalProperties: false
23
+ required:
24
+ - note_id
25
+ properties:
26
+ note_id:
27
+ type: string
28
+ pattern: "^NOTE-[0-9]+$"
29
+ output_schema:
30
+ type: object
31
+ additionalProperties: false
32
+ required:
33
+ - note
34
+ properties:
35
+ note:
36
+ type: object
37
+ additionalProperties: false
38
+ required:
39
+ - note_id
40
+ - title
41
+ properties:
42
+ note_id:
43
+ type: string
44
+ title:
45
+ type: string
46
+ side_effects:
47
+ reads_data: true
48
+ writes_data: false
49
+ creates_records: false
50
+ updates_records: false
51
+ deletes_records: false
52
+ sends_external_messages: false
53
+ charges_money: false
54
+ refunds_money: false
55
+ changes_permissions: false
56
+ triggers_external_workflow: false
57
+ irreversible: false
58
+ authorization:
59
+ permissions:
60
+ - note.read
61
+ tenant_scoped: true
62
+ requires_user_context: true
63
+ data_scope:
64
+ - current_tenant
65
+ policy:
66
+ approval_required: false
67
+ max_autonomy_tier: A1
68
+ lifecycle:
69
+ prepare: false
70
+ preview: false
71
+ approve: false
72
+ commit: false
73
+ verify: false
74
+ audit: true
75
+ observability:
76
+ log_inputs: redacted
77
+ log_outputs: summary
78
+ trace_attributes:
79
+ domain: conformance
80
+ evals:
81
+ golden:
82
+ - ../evals/conformance.note.get.valid.yaml
@@ -0,0 +1,13 @@
1
+ {
2
+ "capabilityId": "conformance.note.get",
3
+ "operation": "select",
4
+ "args": {
5
+ "note_id": "NOTE-1001"
6
+ },
7
+ "context": {
8
+ "autonomyTier": "A1",
9
+ "permissions": [],
10
+ "tenantId": "tenant_example",
11
+ "userId": "user_example_conformance"
12
+ }
13
+ }
@@ -0,0 +1,18 @@
1
+ schema_version: "1.0"
2
+ id: Note
3
+ version: 1.0.0
4
+ name: Note
5
+ summary: A synthetic note used by public conformance fixtures.
6
+ canonical_id:
7
+ field: note_id
8
+ pattern: "^NOTE-[0-9]+$"
9
+ data_classification:
10
+ default: tenant_confidential
11
+ fields:
12
+ title: synthetic_note_title
13
+ lookup:
14
+ primary_capability: conformance.note.get
15
+ allowed_actions:
16
+ - conformance.note.get
17
+ model_guidance: >
18
+ Notes in conformance fixtures are synthetic and tenant-scoped.
@@ -0,0 +1,19 @@
1
+ {
2
+ "schema_version": "1.0",
3
+ "results": [
4
+ {
5
+ "eval_id": "conformance.note.get.valid",
6
+ "selected_capabilities": ["conformance.note.get"],
7
+ "tool_calls": [
8
+ {
9
+ "capability_id": "conformance.note.get",
10
+ "args": {
11
+ "note_id": "NOTE-1001"
12
+ }
13
+ }
14
+ ],
15
+ "action_state": "none",
16
+ "committed_capabilities": []
17
+ }
18
+ ]
19
+ }