- SDK-CONNECTOR-CONTROL137
- SDK-FINANCE-SOURCES5
- SDK-GOVERNED-WRITEBACK23
- SDK-OBSERVABILITY-FEEDS1
- SDK-QUALITY-RELEASE5
- SDK-REPOSITORY-TRANSPORT5
- SDK-SOURCE-INGEST111
- Requirementsall slices in all specs287
- Requirements not donenot VERIFIED216
- Specs not donewhole specs only6
Each spec shows its requirement count. Panel J lists every record.
Requirements (287)
Specs (7)
Each bar shows one state against all records of the same kind.
Percentages count current rows. Done means VERIFIED.
| State | Definition |
|---|---|
| SPECIFIED | The requirement is written. No code for it is on the default branch. |
| LANDED | A commit that carries its ID in a Spec trailer is on the default branch. |
| VERIFIED | It is LANDED and a test bound to its ID exists. |
A spec state is the lowest state of its rows. Done means VERIFIED.
Invalid state: 0
| Spec / title | Req. | Landed | Done | Spec state | Code references |
|---|---|---|---|---|---|
| SDK-CONNECTOR-CONTROLSDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publication | 137 | 38/137 | 20 | SPECIFIED | agent_connector_sdk/artifacts/annotations.py:94 implementation: file exists; coverage not verified agent_connector_sdk/artifacts/pack.py:127 implementation: file exists; coverage not verified agent_connector_sdk/artifacts/tools.py:25 implementation: file exists; coverage not verified agent_connector_sdk/artifacts/tools.py:34 implementation: file exists; coverage not verified agent_connector_sdk/artifacts/tools.py:64 implementation: file exists; coverage not verified agent_connector_sdk/certify/certification.py:75 implementation: file exists; coverage not verified agent_connector_sdk/certify/cli.py:124 implementation: file exists; coverage not verified agent_connector_sdk/certify/options.py:26 implementation: file exists; coverage not verified agent_connector_sdk/certify/pins.py:111 implementation: file exists; coverage not verified agent_connector_sdk/credentials/provider.py:33 implementation: file exists; coverage not verified agent_connector_sdk/credentials/resolution.py:43 implementation: file exists; coverage not verified agent_connector_sdk/http/client.py:84 implementation: file exists; coverage not verified agent_connector_sdk/mcp/action_dispatch.py:194 implementation: file exists; coverage not verified agent_connector_sdk/mcp/action_dispatch.py:88 implementation: file exists; coverage not verified agent_connector_sdk/mcp/context.py:49 implementation: file exists; coverage not verified agent_connector_sdk/mcp/method_tools.py:133 implementation: file exists; coverage not verified agent_connector_sdk/mcp/server.py:88 implementation: file exists; coverage not verified agent_connector_sdk/mcp/tool_surface.py:121 implementation: file exists; coverage not verified agent_connector_sdk/mcp/tool_surface.py:97 implementation: file exists; coverage not verified agent_connector_sdk/vendor_extractors/a2a.py:34 implementation: file exists; coverage not verified agent_connector_sdk/vendor_extractors/a2a.py:98 implementation: file exists; coverage not verified agent_connector_sdk/vendor_extractors/a2a_helpers.py:79 implementation: file exists; coverage not verified agent_connector_sdk/writeback/connector.py:75 implementation: file exists; coverage not verified agent_connector_sdk/writeback/epistemic_graph.py:43 implementation: file exists; coverage not verified tests/test_mcp_native_primitives.py test: file exists; coverage not verified agent_connector_sdk/config.py implementation: file exists; coverage not verified agent_connector_sdk/ontology/access_contract.ttl implementation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified tests/test_mcp_confirmation_roundtrip.py test: file exists; coverage not verified |
| SDK-FINANCE-SOURCESSDK-FINANCE-SOURCES — Qualified finance source adapters | 5 | 5/5 | 3 | LANDED | requirements.md documentation: file exists; coverage not verified |
| SDK-GOVERNED-WRITEBACKSDK-GOVERNED-WRITEBACK — Governed write-back to attached sources | 23 | 3/23 | 3 | SPECIFIED | agent_connector_sdk/ports/writeback.py implementation: file exists; coverage not verified agent_connector_sdk/ports/writeback_transport.py implementation: file exists; coverage not verified agent_connector_sdk/writeback/connector.py implementation: file exists; coverage not verified agent_connector_sdk/writeback/connector.py:75 implementation: file exists; coverage not verified agent_connector_sdk/writeback/service.py implementation: file exists; coverage not verified agent_connector_sdk/writeback/service.py:74 implementation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified |
| SDK-OBSERVABILITY-FEEDSSDK-OBSERVABILITY-FEEDS — Operational event feeds through the source adapter contract | 1 | 1/1 | 1 | ✓ VERIFIED | Not mapped |
| SDK-QUALITY-RELEASESDK-QUALITY-RELEASE — Portable SDK quality, Pages, and release | 5 | 5/5 | 4 | LANDED | requirements.md documentation: file exists; coverage not verified scripts/epistemic_graph_release.json implementation: file exists; coverage not verified |
| SDK-REPOSITORY-TRANSPORTSDK-REPOSITORY-TRANSPORT — Authenticated immutable repository transport | 5 | 4/5 | 4 | SPECIFIED | requirements.md documentation: file exists; coverage not verified |
| SDK-SOURCE-INGESTSDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migration | 111 | 36/111 | 36 | SPECIFIED | Approved query execution documentation: external declaration; not verified EG-FEDERATED-QUERY-R015 documentation: external declaration; not verified EG-FEDERATED-QUERY-R085 documentation: external declaration; not verified EG-REPO-INGEST-R002 documentation: external declaration; not verified Source ingestion authority documentation: external declaration; not verified ../../agent_connector_sdk/mcp/action_dispatch.py:194 implementation: file exists; coverage not verified ../../agent_connector_sdk/ports/source_adapter.py:21 implementation: file exists; coverage not verified ../../agent_connector_sdk/runner/syncing.py:200 implementation: file exists; coverage not verified ../../agent_connector_sdk/runner/worker.py:150 implementation: file exists; coverage not verified SDK-CONNECTOR-CONTROL-R021 documentation: file exists; coverage not verified SDK-GOVERNED-WRITEBACK-R001 documentation: file exists; coverage not verified agent_connector_sdk/adapters/event_feed.py:133 implementation: file exists; coverage not verified agent_connector_sdk/adapters/mcp_tool.py:107 implementation: file exists; coverage not verified agent_connector_sdk/adapters/mcp_tool.py:118 implementation: file exists; coverage not verified agent_connector_sdk/adapters/web_fetch.py:182 implementation: file exists; coverage not verified agent_connector_sdk/adapters/web_fetch.py:86 implementation: file exists; coverage not verified agent_connector_sdk/http/client.py:97 implementation: file exists; coverage not verified agent_connector_sdk/http/retry.py:71 implementation: file exists; coverage not verified agent_connector_sdk/mcp/tool_surface.py:121 implementation: file exists; coverage not verified agent_connector_sdk/runner/cli.py:153 implementation: file exists; coverage not verified agent_connector_sdk/runner/supervisor.py:62 implementation: file exists; coverage not verified agent_connector_sdk/runner/syncing.py:106 implementation: file exists; coverage not verified agent_connector_sdk/runner/worker.py:180 implementation: file exists; coverage not verified agent_connector_sdk/sinks/epistemic_graph.py:91 implementation: file exists; coverage not verified agent_connector_sdk/vendor_extractors/erpnext.py:91 implementation: file exists; coverage not verified agent_connector_sdk/vendor_extractors/odoo.py:74 implementation: file exists; coverage not verified agent_connector_sdk/vendor_extractors/social.py:160 implementation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified |
Landed counts LANDED and VERIFIED requirements. Done counts VERIFIED requirements only.
The spec state comes from the spec status file only.
Packages group specs by repository and declared component. Unassigned means no component was declared. Code links do not prove coverage. Mermaid source.
Knuckles-Team/agent-connector-sdk / Source ingestion (1)
SDK-SOURCE-INGEST: source plan diagrams (Mermaid)
flowchart LR
Caller[Authenticated caller] --> Registry[Connector tool registration]
Registry --> Dispatch[SDK dispatch_async]
Dispatch --> Source[Connector source method]
Source --> Backend[Database / node / local file / enterprise API]
Runner[connector-sync worker] --> Adapter[Certified SourceAdapter]
Adapter --> Source
Adapter --> Sync[sync_stream receipt validation]
Sync --> EG[Generated SourceIngest]
EG --> Progress[Durable checkpoint]
Progress --> Runner
Knuckles-Team/agent-connector-sdk / Unassigned (6)
SDK-CONNECTOR-CONTROL: no plan diagram declared.
SDK-FINANCE-SOURCES: no plan diagram declared.
SDK-GOVERNED-WRITEBACK: no plan diagram declared.
SDK-OBSERVABILITY-FEEDS: no plan diagram declared.
SDK-QUALITY-RELEASE: no plan diagram declared.
SDK-REPOSITORY-TRANSPORT: no plan diagram declared.
Depends on means a declared prerequisite. Extends and references do not imply prerequisite order. Shared code never creates dependencies. External targets are source declarations, not verified delivery.
Knuckles-Team/agent-connector-sdk / Source ingestion
| Spec | Relationship | Target | Evidence |
|---|---|---|---|
| SDK-SOURCE-INGEST Unparsed reference declaration: no research-paper derivation is claimed for these six contracts.; source: specs/SDK-SOURCE-INGEST/plan.md Unparsed reference declaration: no research-paper derivation is claimed for this contract.; source: specs/SDK-SOURCE-INGEST/plan.md Unparsed reference declaration: the source motivates ordered per-channel backends and observed status; no arXiv derivation is claimed.; source: specs/SDK-SOURCE-INGEST/plan.md | depends on | Approved query execution | Knuckles-Team/epistemic-graph: external declaration; not verified; source: specs/SDK-SOURCE-INGEST/plan.md |
| SDK-SOURCE-INGEST Unparsed reference declaration: no research-paper derivation is claimed for these six contracts.; source: specs/SDK-SOURCE-INGEST/plan.md Unparsed reference declaration: no research-paper derivation is claimed for this contract.; source: specs/SDK-SOURCE-INGEST/plan.md Unparsed reference declaration: the source motivates ordered per-channel backends and observed status; no arXiv derivation is claimed.; source: specs/SDK-SOURCE-INGEST/plan.md | depends on | EG-FEDERATED-QUERY-R085 | Knuckles-Team/epistemic-graph: external declaration; not verified; source: specs/SDK-SOURCE-INGEST/plan.md |
| SDK-SOURCE-INGEST Unparsed reference declaration: no research-paper derivation is claimed for these six contracts.; source: specs/SDK-SOURCE-INGEST/plan.md Unparsed reference declaration: no research-paper derivation is claimed for this contract.; source: specs/SDK-SOURCE-INGEST/plan.md Unparsed reference declaration: the source motivates ordered per-channel backends and observed status; no arXiv derivation is claimed.; source: specs/SDK-SOURCE-INGEST/plan.md | depends on | Source ingestion authority | Knuckles-Team/epistemic-graph: external declaration; not verified; source: specs/SDK-SOURCE-INGEST/plan.md |
| SDK-SOURCE-INGEST Unparsed reference declaration: no research-paper derivation is claimed for these six contracts.; source: specs/SDK-SOURCE-INGEST/plan.md Unparsed reference declaration: no research-paper derivation is claimed for this contract.; source: specs/SDK-SOURCE-INGEST/plan.md Unparsed reference declaration: the source motivates ordered per-channel backends and observed status; no arXiv derivation is claimed.; source: specs/SDK-SOURCE-INGEST/plan.md | depends on | SDK-CONNECTOR-CONTROL-R021 | Knuckles-Team/agent-connector-sdk: local spec declaration; source: specs/SDK-SOURCE-INGEST/plan.md |
| SDK-SOURCE-INGEST Unparsed reference declaration: no research-paper derivation is claimed for these six contracts.; source: specs/SDK-SOURCE-INGEST/plan.md Unparsed reference declaration: no research-paper derivation is claimed for this contract.; source: specs/SDK-SOURCE-INGEST/plan.md Unparsed reference declaration: the source motivates ordered per-channel backends and observed status; no arXiv derivation is claimed.; source: specs/SDK-SOURCE-INGEST/plan.md | depends on | SDK-GOVERNED-WRITEBACK-R001 | Knuckles-Team/agent-connector-sdk: local spec declaration; source: specs/SDK-SOURCE-INGEST/plan.md |
Knuckles-Team/agent-connector-sdk / Unassigned
| Spec | Relationship | Target | Evidence |
|---|---|---|---|
| SDK-CONNECTOR-CONTROL Unparsed reference declaration: this contract derives from connector context and MCP progress needs.; source: specs/SDK-CONNECTOR-CONTROL/plan.md | No relationships declared; dependencies unknown | ||
| SDK-FINANCE-SOURCES | No relationships declared; dependencies unknown | ||
| SDK-GOVERNED-WRITEBACK Unparsed reference declaration: [RFC 8785](https://www.rfc-editor.org/rfc/rfc8785) defines canonical JSON;; source: specs/SDK-GOVERNED-WRITEBACK/plan.md | references | RFC 8785 | Unresolved: unresolved; source: specs/SDK-GOVERNED-WRITEBACK/plan.md |
| SDK-OBSERVABILITY-FEEDS | No relationships declared; dependencies unknown | ||
| SDK-QUALITY-RELEASE | No relationships declared; dependencies unknown | ||
| SDK-REPOSITORY-TRANSPORT | No relationships declared; dependencies unknown | ||
Issues
0 open at capture.
Pull Requests
0 open at capture.
The build reads GitHub one time. This page makes no live API requests.
Each status file gives one spec row. Each requirement gives one more row. A record without a valid state shows INVALID. Expand a Definition to read the canonical requirement and verification text.
All documented records (294 rows)
| ID / source | Kind | Parent | State | Commit / test evidence |
|---|---|---|---|---|
| SDK-CONNECTOR-CONTROL SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publication | spec | None | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R001 Pack retries reuse one key Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Pack retries reuse one key.** The SDK's ConnectorPackClient submits requests through generated ConnectorPack types. It derives the idempotency key from tenant, connector identity, canonical pack digest, and operation. Repeating an identical request returns the same durable result. | Unit tests retry an identical publish request after simulated transport loss and assert reuse of the same import operation key. They use generated wire types for status and import. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | dcc7d285ccc9 tests/test_contracts_and_sink.py:511 |
| SDK-CONNECTOR-CONTROL-R002 Contract pin travels as a claim attribute, not recomputed downstream Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Contract pin travels as a claim attribute, not recomputed downstream.** The SDK computes the contract pin by normalizing tool input and output schemas through manifest/tool_schema.py and passes it to the graph service as a claim attribute; the graph service stores that value without independently recomputing the SDK's schema normalization. | Conformance tests asserting the pin calculation lives in the SDK and that a stored claim attribute matches the SDK-computed value unchanged. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | dcc7d285ccc9 tests/test_artifacts_discovery.py:102 |
| SDK-CONNECTOR-CONTROL-R003 Canonical output-schema digest on every certified tool pin Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Canonical output-schema digest on every certified tool pin.** Certification computes a normalized output-schema digest for every tool pin alongside the input-schema digest. It fingerprints a missing output schema canonically, never as an empty wildcard. | A conformance test certifies a tool without a declared output schema and asserts that it produces a canonical, nonempty digest. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | 0f826d4ca6db 93afc6b075df tests/test_certify_pins.py:109 |
| SDK-CONNECTOR-CONTROL-R004 Contract-pin verification owned by the SDK's own test kit Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Contract-pin verification owned by the SDK's own test kit.** The SDK's own conformance test kit computes and checks the contract pin from its tool schema normalization, because that normalization is SDK-specific logic the graph service cannot reproduce independently. | A conformance suite that recomputes the contract pin from a sample manifest and asserts it matches the certified value. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | dcc7d285ccc9 tests/test_artifacts_discovery.py:111 |
| SDK-CONNECTOR-CONTROL-R005 Pack publisher and source submission use generated graph-client types Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Pack publisher and source submission use generated graph-client types.** The pack publisher uses the graph service's generated ConnectorPack and AgentComponent.Content types. It no longer uses a hand-written placeholder content pack. SQL-backed source record submission also uses the generated SourceIngest request and receipt types through the existing sink. | Integration tests publish a pack and submit a source record through the generated types. They assert that no placeholder or hand-written duplicate type is used. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | 584fb45cdf24 602215e2ddd8 tests/test_contracts_and_sink.py:54 tests/test_mcp_native_primitives.py:47 tests/test_mcp_native_primitives.py:79 |
| SDK-CONNECTOR-CONTROL-R006 Decision-service proposals for tool choice and triage stay observational Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Decision-service proposals for tool choice and triage stay observational.** Connector-internal tool choice and inbound event triage may request a proposal from a decision service, but that proposal is observational only: it never directly authorizes a side effect or bypasses the deterministic write-back rules. | A contract test issues a decision-service proposal. It asserts no side effect is authorized without the deterministic write-back path. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | 077a14c9f3d3 0f826d4ca6db 91801315ccaf daeb199f91c0 fad5328aee62 tests/test_decide_consumers.py:158 |
| SDK-CONNECTOR-CONTROL-R007 Fleet-wide re-certification yields nonempty schema fingerprints Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Fleet-wide re-certification yields nonempty schema fingerprints.** Re-certifying the connector fleet means every package produces current, nonempty fingerprints for each declared tool pin. Each package also passes a current live-contract comparison. A package count alone is not sufficient evidence. | A certification run across the full connector set asserts every pin's fingerprints are nonempty. It also asserts they match a live contract comparison. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | 0f826d4ca6db 93afc6b075df tests/test_fleet_recertification.py:54 |
| SDK-CONNECTOR-CONTROL-R008 Closed, canonical pack annotation map across the connector fleet Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Closed, canonical pack annotation map across the connector fleet.** Every connector pack entry carries a closed, canonical annotation map of capability names, input and output schema digests, modality, and bounded cost and latency estimates with units; a missing estimate is recorded as unknown, never zero. | Conformance tests that validate the annotation map's types and units and assert a semantic annotation change shifts the pack digest. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | 077a14c9f3d3 e444b35a4c21 fad5328aee62 tests/test_artifacts_discovery.py:350 tests/test_artifacts_discovery.py:367 tests/test_artifacts_discovery.py:383 |
| SDK-CONNECTOR-CONTROL-R009 Connector batch A-E migrates fully onto the SDK client Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Connector batch A-E migrates fully onto the SDK client.** Connector packages in the A-E range import agent_connector_sdk modules for server construction, configuration, exceptions, and transport security. These imports replace the prior agent_utilities imports. The packages call the generated EG client instead of a local ingestion helper. | A per-package import scan and test run across the A-E batch confirms no agent_utilities import remains. It also confirms ingestion runs through the EG client. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 5e1bd9257555 7a38ee433346 d3617301012c |
| SDK-CONNECTOR-CONTROL-R010 Connector batch F-J migrates fully onto the SDK client Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Connector batch F-J migrates fully onto the SDK client.** Packages in batch F-J use agent_connector_sdk for server construction, configuration, exceptions, and transport security. They replace prior agent_utilities imports and call the generated EG client for ingestion. | A per-package scan and test run cover batch F-J. They confirm no agent_utilities imports remain and ingestion uses the EG client. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 5e1bd9257555 7a38ee433346 |
| SDK-CONNECTOR-CONTROL-R011 Connector batch K-O migrates fully onto the SDK client Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Connector batch K-O migrates fully onto the SDK client.** Packages in batch K-O use agent_connector_sdk for server construction, configuration, exceptions, and transport security. They replace prior agent_utilities imports and call the generated EG client for ingestion. | A per-package import scan and test run across the K-O batch confirming no agent_utilities import remains and ingestion runs through the EG client. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 5e1bd9257555 7a38ee433346 |
| SDK-CONNECTOR-CONTROL-R012 Connector batch P-S migrates fully onto the SDK client Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Connector batch P-S migrates fully onto the SDK client.** Connector packages in the P-S range, including the repository-manager package's own agent_utilities imports, import agent_connector_sdk modules for server construction, configuration, exceptions, and transport security instead, and call the generated EG client instead of a local ingestion helper. | A per-package import scan and test run across the P-S batch confirming no agent_utilities import remains and ingestion runs through the EG client. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 5e1bd9257555 7a38ee433346 |
| SDK-CONNECTOR-CONTROL-R013 Connector batch T-Z migrates fully onto the SDK client Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Connector batch T-Z migrates fully onto the SDK client.** Connector packages in the T-Z range import agent_connector_sdk modules in place of their prior agent_utilities imports. They call the generated EG client, not a local ingestion helper. The shared package-builder templates that scaffold every batch also move onto the SDK. | A per-package import scan covers the T-Z batch and the scaffolding templates. It confirms no agent_utilities import remains. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 5e1bd9257555 7a38ee433346 |
| SDK-CONNECTOR-CONTROL-R014 SDK fully supersedes the duplicated connector toolkit Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK fully supersedes the duplicated connector toolkit.** Once every connector package imports the SDK's equivalents, the duplicated connector toolkit (server factory, action dispatch, concurrency, transport security, credentials, and related helpers) kept elsewhere becomes safe to delete, with no compatibility alias retained. Rollup: delivered once the fleet-wide census (R014.1) reports every connector migrated. | Tests confirming the SDK modules provide complete replacements for each listed toolkit area, plus a cross-repository import scan showing no connector still depends on the superseded implementation. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | 5e1bd9257555 |
| SDK-CONNECTOR-CONTROL-R014.1 One reusable cross-repository import-scan call site Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**One reusable cross-repository import-scan call site.** `scan_many_packages` accepts several connector roots in one call. It keys results by package name. R014's fleet census and R009-R013 batches reuse this scanner. They do not re-derive loops over `scan_for_agent_utilities_imports`. | Test migrated and unmigrated synthetic roots. Confirm the scan retains each caller package name. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | 077a14c9f3d3 ab73ea5005a0 fad5328aee62 tests/test_fleet_migration_scan.py:90 |
| SDK-CONNECTOR-CONTROL-R015 SDK is sole owner of connector source lifecycle and certification Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK is sole owner of connector source lifecycle and certification.** Connector manifest parsing, live-contract validation, tool-schema normalization, artifact and pack construction, and certification live only in the SDK's manifest and certify packages; equivalent logic kept in a duplicate location is retired, and other consumers import the SDK packages directly instead of maintaining a parallel schema or publisher. Rollup: delivered once the real fleet-wide scan (R015.1) reports no dependent repository defines its own copy. | An import scan across dependent repositories confirming manifest and certification logic is sourced only from the SDK packages, plus certification conformance tests passing unchanged after the cutover. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | 5e1bd9257555 |
| SDK-CONNECTOR-CONTROL-R015.1 A duplicate-definition scan for the manifest/certify surface Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**A duplicate-definition scan for the manifest/certify surface.** `scan_for_duplicate_manifest_or_certify_definitions` flags a connector package that defines `ConnectorManifest`, `CertificationReport` or `certify_connector` locally. It does not flag a plain mention in a string, comment or import. | A test proves an importing package is clean and a locally defined class or function is caught. It proves a string or comment mention is not a false positive. It proves an unparsable file is skipped rather than reported clean. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | 061f9b58abb2 077a14c9f3d3 9cec9cea7d37 fad5328aee62 tests/test_duplicate_symbol_scan.py:21 tests/test_duplicate_symbol_scan.py:29 tests/test_duplicate_symbol_scan.py:43 tests/test_duplicate_symbol_scan.py:56 tests/test_duplicate_symbol_scan.py:69 |
| SDK-CONNECTOR-CONTROL-R016 Connector base settings live in the SDK's own config module Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Connector base settings live in the SDK's own config module.** Connector base settings move from a shared configuration module into the SDK's own config module. Hosting and deployment settings remain with their owning repositories. Agent and model settings also remain with their owners. | Configuration-loading tests confirm connector packages read base settings from the SDK's config module. They confirm no connector depends on the removed shared module. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | 584fb45cdf24 602215e2ddd8 tests/test_foundation.py:139 |
| SDK-CONNECTOR-CONTROL-R017 Every connector uses the shared TLS profile, no bare verify bypass Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Every connector uses the shared TLS profile, no bare verify bypass.** Every connector package performs HTTPS calls through the SDK's shared TLS profile. No connector disables certificate verification with a bare boolean flag. No connector silences the underlying TLS warning library. | A static scan across connector packages looks for bare verify-disabling flags and suppressed TLS warnings. A negative test asserts such a bypass is rejected. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | fad5328aee62 tests/test_tls_profiles.py:200 |
| SDK-CONNECTOR-CONTROL-R018 SDK source and test suite build cleanly from a fresh checkout Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK source and test suite build cleanly from a fresh checkout.** The SDK's full test suite, strict type checking, and documentation build pass cleanly against the connector control implementation from a fresh checkout, with no partial or broken module left in the merged source tree. | A full test run, strict type check, and documentation build executed in continuous integration against the merged source. | requirement | SDK-CONNECTOR-CONTROL | LANDED | b0c376748245 |
| SDK-CONNECTOR-CONTROL-R019 Host servers register ontology resources without duplicate skills or prompts Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Host servers register ontology resources without duplicate skills or prompts.** `ontology_resources` and `register_ontology_resources` build `ontology://<connector>/<file>.ttl` and `shapes://<connector>/<file>.ttl` resources from one ontology directory. `register_connector_content` reuses the same builder. A missing directory yields no resources. | MCP client tests list and read the resources, prove that no prompt registers, and prove the empty result for a missing directory. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | 045ba48df230 077a14c9f3d3 3ddd773fb6dc d9c0db1b19cf fad5328aee62 tests/test_registry_visibility_content.py:276 tests/test_registry_visibility_content.py:293 tests/test_schema_disclosure_provider.py:142 tests/test_schema_disclosure_provider.py:63 |
| SDK-CONNECTOR-CONTROL-R020 One condensed intent contract: `MCP_TOOL_MODE` retired Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**One condensed intent contract: `MCP_TOOL_MODE` retired.** `register_tool_surface` always registers the condensed, action-routed tool surface, each tool tagged `gated`; no `MCP_TOOL_MODE` setting, mode branch, or separate verbose 1:1 tool surface remains in the SDK, matching agent-utilities' one condensed intent contract (agent-utilities#54). | Tests asserting `register_tool_surface` registers and gates condensed tools with no mode parameter, and a repository-wide scan confirming no `tool_mode`/`MCP_TOOL_MODE`/verbose-tool-surface module or reference remains. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | d3617301012c ffb9260d7602 tests/test_tool_surface.py:167 |
| SDK-CONNECTOR-CONTROL-R021 Connector ontologies declare access contracts for virtual reads Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Connector ontologies declare access contracts for virtual reads.** A connector ontology declares one `ac:AccessContract` per class it answers live. The contract names the access kind, the operation, its parameters, pagination and pushdown operations. It also names an auth reference, a rate limit, and freshness and cost hints. `parse_access_contracts` returns typed contracts whose fields match the agent-utilities `VirtualMapping` fields. The parser refuses a literal secret, an unknown pushdown operation and a missing operation. The vocabulary ships as `agent_connector_sdk/ontology/access_contract.ttl`. | CC-11 parses a fake connector ontology into a typed contract. It proves each refusal and proves that no secret text reaches an error. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | 0a10559775ea fad5328aee62 tests/test_access_contract.py:55 |
| SDK-CONNECTOR-CONTROL-R022 The pack builder scopes `owl:imports` to the pack Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**The pack builder scopes `owl:imports` to the pack.** `build_content_pack` removes each ontology `owl:imports` that names no ontology entry of the same pack. It records each removed IRI as `ontology-import:<iri>` in that entry's `requires_capabilities` annotation. It handles Turtle and RDF/XML. A body without external imports stays byte-identical. | CC-12 tests removal, recording, mixed lists, lone statements, RDF/XML, self imports and determinism. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | 077a14c9f3d3 e6b835dcad49 fad5328aee62 tests/test_pack_ontology_imports.py:109 tests/test_pack_ontology_imports.py:34 tests/test_pack_ontology_imports.py:49 tests/test_pack_ontology_imports.py:68 tests/test_pack_ontology_imports.py:82 |
| SDK-CONNECTOR-CONTROL-R023 A prompt with a required argument becomes a template Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**A prompt with a required argument becomes a template.** `PromptArtifactKind` binds every required argument to deterministic `{{name}}` placeholders. It calls `prompts/get` with those bindings. It records `capture.kind` as `template` and `capture.bound_arguments` as the placeholder map. Prompts without required arguments retain `rendered` capture and an empty map. | CC-13 captures one required and one optional argument. It asserts the placeholder reaches `prompts/get`. It asserts the stored capture metadata and successful `validate`. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 713782e7901c b9a9652c0135 |
| SDK-CONNECTOR-CONTROL-R024 A prompt the server rejects for its bound placeholder still captures as a template Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**A prompt the server rejects for its bound placeholder still captures as a template.** A typed required argument (`int`, `float`, `bool`, `list`, or an enum) can refuse the string `{{name}}` placeholder `prompts/get` sends for it. `McpClientSession.get_prompt` raises `McpPromptRejectedError` only for a well-formed MCP protocol error, never for a transport failure. `PromptArtifactKind.list_entries` catches `McpPromptRejectedError` for a prompt with at least one required argument and captures a deterministic template from the listed definition alone, with no rendered server content. A prompt with no required argument, or any failure that is not a protocol-level rejection, still raises. | CC-14 simulates a required typed argument raising `McpPromptRejectedError` from `prompts/get` and asserts the capture still succeeds as a `template` with no server-rendered text; a second case with no required argument asserts the same error still raises; a third case asserts a plain `McpTransportError` (a transport failure) always raises. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 713782e7901c |
| SDK-CONNECTOR-CONTROL-R025 SDK provides identity-scoped resource entitlement resolution Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK provides identity-scoped resource entitlement resolution.** `agent_connector_sdk.entitlements` resolves which backend resources (kube contexts, SSH hosts, database connections, mounts) a caller's roles and groups entitle, generalizing "what may I do" to "what may I reach" over `agent_connector_sdk.identity.ActorContext`, so a connector auto-loads only the resources its caller's identity grants without importing `agent_utilities.security.entitlements`. A caller with no matching capability resolves an empty set; an unauthenticated or tenant-less actor is rejected before any resource catalog is exposed. | Tests prove a namespaced capability, a namespace wildcard, a bare zero-config capability, and a super-capability (`admin`/`system`) each resolve the documented entitled subset against a fake available-resource catalog, that no matching capability resolves empty, and that an unauthenticated or tenant-less actor raises before a catalog is read. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 5a476653a386 |
| SDK-CONNECTOR-CONTROL-R026 SDK provides opt-in per-client-method MCP tool derivation Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK provides opt-in per-client-method MCP tool derivation.** `agent_connector_sdk.mcp.method_tools.register_method_tools` registers one directly invocable, `params_json`-dispatched tool per public method of a connector's API-client class, named `<prefix>_<method>` with no doubled prefix, tagged by a domain derived from the method's defining class, for a connector whose served tool surface genuinely depends on that one-tool-per-method derivation instead of only the condensed intent contract (SDK-CONNECTOR-CONTROL-R020 retired the implicit, env-toggled verbose surface; this is an explicit opt-in primitive, not its return). A method classified destructive is gated behind a live caller's confirmation before it dispatches. A method defined only on a base-infrastructure class (auth, pagination, retry) is excluded. | Tests prove one tool registers per public client-class method across two domain classes with no doubled prefix, that a base-infrastructure method is excluded, that a destructive method is confirmed before it calls the client, that a declined or unattended confirmation never dispatches, and that an asynchronous `get_client` is awaited. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | d3617301012c |
| SDK-CONNECTOR-CONTROL-R027 SDK resolves the selected provider-runtime profile for a multi-backend connector Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK resolves the selected provider-runtime profile for a multi-backend connector.** `resolve_selected_provider_runtime_profile` reads a connector's configured provider identifier and returns the matching runtime profile (base URL, auth mode, capability flags) from its registered profile set, rejecting an unconfigured or unknown provider before any request is attempted, for connectors that support more than one backend implementation (audiobookshelf-mcp, pulselink-mcp, fan-manager, vector-mcp). | Unit tests selecting a known profile by identifier, asserting an unknown identifier raises before any network call, and asserting the returned profile's fields reach the client that constructs requests. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 284fb12a19ed 584fb45cdf24 602215e2ddd8 |
| SDK-CONNECTOR-CONTROL-R028 SDK's governed HTTP client controls egress with named escape hatches, not ad hoc trust Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK's governed HTTP client controls egress with named escape hatches, not ad hoc trust.** `create_http_client` builds an outbound client whose destination is checked against an SSRF policy, with explicit `pin_egress`, `allowed_private_hosts`, and `allow_loopback` parameters, and `pinned_egress_transport` returns a transport pinned to a resolved, policy-checked address so a later DNS change cannot redirect an already-approved request, for connectors that call self-hosted or private-network targets (vaultwarden-mcp, gitlab-api, pulselink-mcp). Rollup: delivered once the governed egress children and API-key cookie isolation (R028.1-R028.3) are specified, wired, and verified. | Unit tests asserting a disallowed private or loopback destination is rejected by default, an explicitly allowed private host or loopback passes, and a pinned transport reuses the originally resolved address rather than re-resolving DNS. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R028.1 A standalone, typed SSRF egress-destination check and pinned-address transport Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**A standalone, typed SSRF egress-destination check and pinned-address transport.** `agent_connector_sdk.http.egress.check_egress_destination` takes the host and one frozen `EgressOptions` policy value (`pin_egress`, `allowed_private_hosts`, `allow_loopback`; strict by default); it rejects a loopback or private-network host unless the policy's `allowed_private_hosts` or `allow_loopback` names it, and is a no-op when the policy sets `pin_egress=False`. `pinned_egress_transport` wraps an inner transport so every request it handles dials the resolved `host`/`port` it was built with, never the request's own host, so DNS is never re-resolved after the policy check. | Unit tests asserting a disallowed private or loopback destination is rejected by default, an explicitly allowed private host or loopback passes, `pin_egress=False` disables the check, and a pinned transport dials the same resolved address across repeated requests. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 284fb12a19ed |
| SDK-CONNECTOR-CONTROL-R028.2 `create_http_client` wires the SSRF egress policy into construction Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**`create_http_client` wires the SSRF egress policy into construction.** `create_http_client` takes `pin_egress`, `allowed_private_hosts`, and `allow_loopback` parameters, builds one `EgressOptions` from them, calls `check_egress_destination` (R028.1) with it before opening a connection, and uses `pinned_egress_transport` to hold the resolved address, for connectors that call self-hosted or private-network targets (vaultwarden-mcp, gitlab-api, pulselink-mcp). | Integration tests building a client against a disallowed private destination and asserting construction is rejected before any request, and a client against an explicitly allowed private host completing a request through the pinned transport. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R028.3 API-key identity remains header-based and stateless Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**API-key identity remains header-based and stateless.** A shared API-key client's HTTPX cookie jar is not an identity source. Do not add cookie-session auth or store a provider session. For sync and async governed clients, strip outbound Cookie after HTTPX injects jar cookies. Strip inbound Set-Cookie before HTTPX receives each response, for all statuses. Preserve configured auth, destination, TLS, redirect, retry, status, body, and Location behavior. Scope the change only to ApiKeyAuth; preserve other auth strategies. | Local MockTransport tests cover explicit and seeded cookies; login, redirect, error, and success responses; concurrent calls through one client; and a Bearer behavior control. Downstream served acceptance pins the immutable SDK revision and checks login/finishOAuth followed by protected calls from two MCP clients. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | 64bcd00be5ef c991698b90bf d791b8cb5ca5 e40ff88a9bbc tests/test_http_client.py:351 tests/test_http_client.py:373 tests/test_http_client.py:395 tests/test_http_client.py:426 |
| SDK-CONNECTOR-CONTROL-R029 SDK exposes a structured configuration singleton, not only a flat `setting()` lookup Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK exposes a structured configuration singleton, not only a flat `setting()` lookup.** An `AgentConfig` object groups related settings into named sections (auth, transport, limits) with typed fields and validation at construction, and is accessible as a process-wide singleton so a connector reads validated structured configuration instead of re-parsing individual `setting()` calls at each use site, for connectors with more than a handful of interrelated settings (vector-mcp, systems-manager, repository-manager). | Unit tests constructing `AgentConfig` from environment input, asserting invalid combinations fail at construction, and asserting the singleton accessor returns the same validated instance across call sites. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 284fb12a19ed |
| SDK-CONNECTOR-CONTROL-R030 SDK provides GraphQL introspection context helpers for connector tools Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK provides GraphQL introspection context helpers for connector tools.** `ctx_graphql_list_types` and `ctx_graphql_get_type_details` resolve a schema's declared types. They also resolve a named type's fields and arguments from the connector's own session context. The tool writes no introspection query. These helpers serve connectors with a GraphQL-native backend (leanix-agent, twenty-mcp). | Unit tests against a fake GraphQL schema assert `ctx_graphql_list_types` lists the declared types. They assert `ctx_graphql_get_type_details` returns a named type's fields and argument shapes. A not-found case covers an unknown type name. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 284fb12a19ed |
| SDK-CONNECTOR-CONTROL-R031 SDK's client-credentials token provider accepts a literal client secret, matching the signature connectors already call Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK's client-credentials token provider accepts a literal client secret, matching the signature connectors already call.** `ClientCredentialsTokenProvider` accepts a literal `client_secret` string argument, in addition to any credential-reference form, so a connector migrating from its prior client-credentials helper keeps the same construction call shape, for connectors using OAuth2 client-credentials against an identity provider (keycloak-agent, gitlab-api). | A signature-compatibility test constructing `ClientCredentialsTokenProvider` with a literal `client_secret` string and asserting a token fetch call is made with that secret, plus a negative test asserting the secret is never logged or serialized. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 284fb12a19ed |
| SDK-CONNECTOR-CONTROL-R032 SDK provides opt-in verbose, one-tool-per-method surface derivation via `register_tool_surface` Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK provides opt-in verbose, one-tool-per-method surface derivation via `register_tool_surface`.** Beyond the condensed intent contract (SDK-CONNECTOR-CONTROL-R020), `register_tool_surface` can derive and register a verbose, per-method tool surface for a connector whose callers depend on individually named tools rather than the condensed action-routed surface, for connectors still migrating their serving surface off a verbose predecessor (data-science-mcp, vector-mcp, twenty-mcp). | Tests asserting `register_tool_surface` in verbose mode registers one tool per targeted method with no doubled prefix, and that the condensed surface remains available and unaffected when verbose derivation is also requested. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 629ef53c29f0 bac65b612ced |
| SDK-CONNECTOR-CONTROL-R033 SDK's governed HTTP layer provides a `safe_post_json` helper with the same private-host allowance as its GET path Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK's governed HTTP layer provides a `safe_post_json` helper with the same private-host allowance as its GET path.** `safe_post_json` performs a JSON POST through the SSRF-checked client, accepting `allowed_private_hosts` so a connector that must POST to an explicitly allowed private or self-hosted endpoint does not have to drop to an unchecked client, for connectors that submit data rather than only read it (audiobookshelf-mcp, pulselink-mcp, data-science-mcp). | Unit tests asserting a disallowed destination is rejected before the POST is sent, an allowed private host succeeds and returns parsed JSON, and a non-JSON response surfaces a typed error rather than a raw parse exception. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 629ef53c29f0 bac65b612ced |
| SDK-CONNECTOR-CONTROL-R034 SDK provides shared library-file-path resolution and cross-process file locking utilities Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK provides shared library-file-path resolution and cross-process file locking utilities.** `get_library_file_path` resolves a connector's on-disk library or state file path from configuration in one place, and `file_lock` provides a cross-process advisory lock around a read-modify-write of that file, for connectors that persist local state or library data outside the graph (systems-manager, fan-manager, repository-manager). | Unit tests asserting `get_library_file_path` resolves a consistent path from configuration, and a concurrency test asserting `file_lock` serializes two simulated writers so neither observes a partially written file. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 629ef53c29f0 bac65b612ced |
| SDK-CONNECTOR-CONTROL-R035 SDK provides a CredentialProvider/SecretsClient abstraction for connectors, not only a credential-reference string Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK provides a CredentialProvider/SecretsClient abstraction for connectors, not only a credential-reference string.** A `CredentialProvider` (or `SecretsClient`) resolves an `env://` or `openbao://` reference to its secret value on demand, scoped to the requesting connector's identity, and never returns or logs the resolved value in a reusable form, for connectors with multiple credential-bearing calls per request (vaultwarden-mcp, keycloak-agent, repository-manager). | Unit tests asserting resolution for both reference schemes, a denial for a reference outside the caller's scope, and a logging-inspection test asserting no resolved secret value appears in any log record. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | 629ef53c29f0 bac65b612ced |
| SDK-CONNECTOR-CONTROL-R035.1 Model Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Model.** CredentialAccessBinding carries verified tenant, owner principal, requesting principal/client, connector, provider, audience, scopes, resource and operation. It includes opaque grant and vault references, expiry and revocation revision. These are injected authority facts, never permissions asserted by request parameters. The binding also pins the declared provider token profile and revision. The existing CredentialProvider remains the resolution boundary. | CC-56 through CC-61 and served credential transport acceptance. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R035.2 Behavior Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Behavior.** Require the exact current grant before every credential resolution or transport injection. Match its connector to trusted connector admission; refuse caller-forged or mismatched connector IDs. Process-wide environment visibility never authorizes another agent. Resolve secrets only into the approved request transport and discard transient values afterward. Reuse and refresh preserve tenant, account, audience and scope ceilings; the host broker owns persistence and refresh coordination. | CC-56 through CC-61 and served credential transport acceptance. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R035.3 Wiring Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Wiring.** Extend `CredentialProvider.get_secret` at `agent_connector_sdk/credentials/provider.py:33` with a qualified injected access-authority port. Reuse `resolve_secret_reference` at `agent_connector_sdk/credentials/resolution.py:43` and existing transport composition. Connector registration through `agent_connector_sdk/mcp/tool_surface.py:121` must bind verified request context. The current provider only checks connector path scope; tenant/client grant verification and the host adapter are missing. | CC-56 through CC-61 and served credential transport acceptance. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R035.4 Refusal Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Refusal.** Typed reasons are `scope_denied`, `binding_mismatch`, `grant_expired`, revoked, `authority_unavailable` and `credential_unavailable`. Refuse before calling the underlying resolver when authority is missing or mismatched. An environment reference is not a fallback around a denied vault reference. Never include secret values in errors, status or reusable outputs. | CC-56 through CC-61 and served credential transport acceptance. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R035.5 Evidence Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Evidence.** Record request binding digest, tenant, requesting client, connector, resource, operation, grant revision and safe credential reference. Join host vault and authorization receipts. Cross-client use must retain the actual requesting principal. Record refusal before resolution; exclude resolved tokens, passwords, codes and credential-bearing URLs. | CC-56 through CC-61 and served credential transport acceptance. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R035.6 Hot-path proof Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Hot-path proof.** `tests/test_scoped_credential_transport.py::test_served_bound_credential_resolution` enters the tools/call wire method through a registered SDK connector. A local provider observes one authorized credential injection. An unrelated co-located client, wrong tenant or mismatched connector produces zero resolver and provider calls. A separate connector grant permits only its own transport. Restart, revocation and unavailable authority preserve refusal without leaking secret material. | CC-56 through CC-61 and served credential transport acceptance. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R036 SDK's identity-scoped resource entitlements cover the backend-resource catalogs these connectors manage Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK's identity-scoped resource entitlements cover the backend-resource catalogs these connectors manage.** Building on SDK-CONNECTOR-CONTROL-R025's entitlement resolution, `agent_connector_sdk.entitlements` resolves identity-scoped resource entitlements against the specific backend-resource catalogs these connectors expose (keycloak-agent realms and clients, systems-manager managed hosts, vaultwarden-mcp vaults and collections), so each connector auto-loads only the resources its caller's identity grants without importing `agent_utilities.security.entitlements`. | Tests proving a caller's resolved entitlement set against each connector's own resource catalog shape, that an unmatched capability resolves empty, and that no connector still imports `agent_utilities.security.entitlements`. | requirement | SDK-CONNECTOR-CONTROL | LANDED | 629ef53c29f0 bac65b612ced |
| SDK-CONNECTOR-CONTROL-R037 erpnext supplier and purchase-order operation contract is typed and recorded (unblocks `EG-CQ-XSRC-R002.7`) Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**erpnext supplier and purchase-order operation contract is typed and recorded (unblocks `EG-CQ-XSRC-R002.7`).** CONFIRMED-exists: `agents/erpnext-agent/erpnext_agent/ontology/access_contracts.ttl` already declares `erp:Supplier` and `erp:PurchaseOrder` on operation `erpnext_agent_resource`, and `kg_ingest.py` reads both doctypes. This is a contract and typing row: pin the field list (supplier name, status, key field) and publish one recorded response fixture in `agents/erpnext-agent/tests/fixtures/`. | `tests/test_access_contracts.py` in erpnext-agent parses the ttl through `parse_access_contracts` and asserts the Supplier and PurchaseOrder fields match the recorded fixture. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R038 uptime service-health operation contract is declared (unblocks `EG-CQ-XSRC-R003.4`) Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**uptime service-health operation contract is declared (unblocks `EG-CQ-XSRC-R003.4`).** Operation exists (CONFIRMED-exists): `uptime_kuma_monitors` action `get_monitors` and `uptime_kuma_status` in `agents/uptime-kuma-agent/uptime_kuma_agent/mcp_server.py`. No `access_contracts.ttl` exists, so add `ontology/access_contracts.ttl` with one contract for the service-health class (name, status, last-check fields) plus a recorded response fixture. | `tests/test_access_contracts.py` in uptime-kuma-agent parses the ttl and asserts the three fields against the recorded fixture. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R039 container-manager deployed-workload operation contract is declared (unblocks `EG-CQ-XSRC-R003.5`) Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**container-manager deployed-workload operation contract is declared (unblocks `EG-CQ-XSRC-R003.5`).** Operation exists (CONFIRMED-exists): `cm_k8s_workloads` actions such as `list_pods` in `agents/container-manager-mcp/container_manager_mcp/mcp/mcp_k8s_workloads.py`; `kg_ingest.py` has `ingest_deployments`. No `access_contracts.ttl` exists, so add one with a contract for the deployed workload class carrying its image reference, plus a recorded response fixture. | `tests/test_access_contracts.py` in container-manager-mcp parses the ttl and asserts the workload name, status and image fields against the recorded fixture. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R040 SDK declares an MCP source's access contract (unblocks `EG-CQ-CONN-R067.1`) Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK declares an MCP source's access contract (unblocks `EG-CQ-CONN-R067.1`).** Exists: access kind `mcp_tool` in `ACCESS_KINDS` (`_contract_fields.py`). The engine fetches at query time (virtual-first, no copying of sources). Remaining work is a conformance case only. | CC-11 parses a fake ontology with an `mcp_tool` contract and returns the typed contract. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R041 SDK declares an A2A source's access contract (unblocks `EG-CQ-CONN-R067.2`) Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK declares an A2A source's access contract (unblocks `EG-CQ-CONN-R067.2`).** Exists: access kind `a2a_skill` in `ACCESS_KINDS`. Virtual-first, no copying of sources. Remaining work is a conformance case only. | CC-11 parses a fake ontology with an `a2a_skill` contract and returns the typed contract. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R042 SDK declares an API (REST) source's access contract (unblocks `EG-CQ-CONN-R067.3`) Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK declares an API (REST) source's access contract (unblocks `EG-CQ-CONN-R067.3`).** Exists: access kind `http_endpoint` in `ACCESS_KINDS`. Virtual-first, no copying of sources. Remaining work is a conformance case only. | CC-11 parses a fake ontology with an `http_endpoint` contract and returns the typed contract. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R043 SDK declares a GraphQL source's access contract (unblocks `EG-CQ-CONN-R067.4`) Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK declares a GraphQL source's access contract (unblocks `EG-CQ-CONN-R067.4`).** Exists: access kind `graphql_query` in `ACCESS_KINDS`, with introspection helpers from SDK-CONNECTOR-CONTROL-R030. Virtual-first, no copying of sources. Remaining work is a conformance case only. | CC-11 parses a fake ontology with a `graphql_query` contract and returns the typed contract. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R044 SDK declares a virtual-graph access contract Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK declares a virtual-graph access contract.** The contract covers relational or document sources and unblocks `EG-CQ-CONN-R067.5`. `ACCESS_KINDS` lacks this kind. Add `virtual_graph` to `_contract_fields.py` and `ontology/access_contract.ttl`. Name the table or collection, key field, and pushdown operations. The engine reads sources at query time. Never place a literal secret in the contract or copy source data. | CC-11 parses a fake ontology with a `virtual_graph` contract. It also proves the parser refuses an unknown kind and literal secret. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R045 Tool contract facts for the run loop and the tool-subset decision Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Tool contract facts for the run loop and the tool-subset decision.** Each tool carries `read_only`, `side_effects`, a typed argument schema and `schema_tokens`. The pack and the manifest publish them. `EG-DECISION-ENGINE` reads them for the tool-subset decision. `AU-HARNESS` reads them to run read-only tools in parallel. | Rows R045.1 to R045.11 bind. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | 3ddd773fb6dc 910c1a8859ca f06d1600bb90 tests/test_schema_disclosure_artifacts.py:22 tests/test_schema_disclosure_provider.py:64 |
| SDK-CONNECTOR-CONTROL-R045.1 Type `ToolContractFacts` Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Type `ToolContractFacts`.** Add frozen model `ToolContractFacts` in `agent_connector_sdk/artifacts/tool_facts.py`. Fields: `read_only: bool`, `side_effects: frozenset[SideEffect]`, `arg_schema: dict`, `schema_tokens: int`, `declared_by`. `declared_by` is `connector`, `mcp_hint` or `default`. | `tests/test_tool_facts.py::test_facts_model_is_frozen_and_typed` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R045.2 Close the `SideEffect` set Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Close the `SideEffect` set.** `SideEffect` in `agent_connector_sdk/artifacts/tool_facts.py` has exactly `none`, `workspace_write`, `external_write` and `network`. `ToolContractFacts` must refuse `read_only = true` with `workspace_write` or `external_write`. It must refuse `none` combined with another value. | `tests/test_tool_facts.py::test_side_effect_set_is_closed_and_read_only_is_consistent` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R045.3 Compute `schema_tokens` from the existing canonical tool body Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Compute `schema_tokens` from the existing canonical tool body.** `schema_tokens(body)` returns the ceiling of the UTF-8 byte length of the canonical tool body divided by 4. The body is the `canonical_json` output built at `agent_connector_sdk/artifacts/tools.py:38`. The divisor 4 is a named default. A measured tokenizer count may replace it. | `tests/test_tool_facts.py::test_schema_tokens_uses_canonical_body_and_named_divisor` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R045.4 Default to the safe value when a connector declares nothing Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Default to the safe value when a connector declares nothing.** `facts_from_declaration(tool)` must return `read_only = false`, `side_effects = {external_write}` and `declared_by = default` when neither `eg.annotations` nor a tool annotation states a value. It must not infer `read_only` from the tool name. | `tests/test_tool_facts.py::test_undeclared_tool_defaults_to_not_read_only` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R045.5 Map MCP annotations as self-declared hints Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Map MCP annotations as self-declared hints.** `_annotations_from_mcp` (`agent_connector_sdk/artifacts/annotations.py:94`) already maps `readOnlyHint` through `_TOOL_HINTS` (`annotations.py:15`). The new facts builder must read that value, set `read_only` from it, and record `declared_by = mcp_hint`. A conflicting `eg.annotations` value keeps the existing `MalformedArtifactError` (`annotations.py:55`). | `tests/test_tool_facts.py::test_mcp_read_only_hint_is_recorded_as_self_declared` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R045.6 Read `side_effects` from `eg.annotations`, and gate on the generated type Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Read `side_effects` from `eg.annotations`, and gate on the generated type.** A connector declares `side_effects` under the `eg.annotations` key of the tool `_meta` (`annotations.py:13`). The generated `PackAnnotations` has `read_only_hint`, `destructive_hint` and `idempotent_hint` only. It lacks `side_effects` and `schema_tokens`. The `EG-TYPED-PACKS` row for the pack annotation fields must land first. The SDK then bumps the locked wheel (R005). | `tests/test_tool_facts.py::test_side_effects_round_trip_through_generated_pack_annotations` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R045.7 Reuse the destructive classification Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Reuse the destructive classification.** `is_destructive_action` (`agent_connector_sdk/mcp/action_dispatch.py:88`) must feed the facts builder. A destructive operation must yield `read_only = false` and include `external_write` or `workspace_write`. An explicit `operation["destructive"]` value wins over the name tokens. | `tests/test_tool_facts.py::test_destructive_action_is_never_read_only` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R045.8 Attach the facts to the captured tool entry Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Attach the facts to the captured tool entry.** `_tool_entry` (`agent_connector_sdk/artifacts/tools.py:34`) must build `ToolContractFacts` and place them in the `PackAnnotations` it passes at `tools.py:47`. `build_content_pack` (`agent_connector_sdk/artifacts/pack.py:127`) already forwards `entry.annotations` (`pack.py:92`) and needs no change. | `tests/test_pack.py::test_tool_entry_pack_carries_contract_facts` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R045.9 Certify that a `read_only` tool wrote nothing in its recorded fixture Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Certify that a `read_only` tool wrote nothing in its recorded fixture.** `certify_connector` (`agent_connector_sdk/certify/certification.py:75`) only compares pins today and holds no fixture. Add `ToolFixture` with the tool name, arguments and the observed effects. Add `check_read_only(facts, fixture)` in `agent_connector_sdk/certify/read_only_check.py`. It must return a `read_only_violation` verdict when the fixture records a write. | `tests/test_certify_read_only.py::test_read_only_tool_with_recorded_write_fails_certification` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R045.10 Refuse an unproven self-declared `read_only` Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Refuse an unproven self-declared `read_only`.** A tool with `declared_by = mcp_hint` and `read_only = true` must have a fixture. Without one, `check_read_only` must return an `unproven` verdict. `_certified` (`agent_connector_sdk/certify/pins.py:84`) must not write a pin for that tool. | `tests/test_certify_read_only.py::test_mcp_hint_without_fixture_is_unproven_and_unpinned` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R045.11 Generate the manifest facts and prove the path end to end Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Generate the manifest facts and prove the path end to end.** `write_certified_pins` (`agent_connector_sdk/certify/pins.py:111`) must write each tool's facts into `connector_manifest.yml`. No person edits the file by hand. A fixture connector run through certification and `build_content_pack` must show equal facts in the manifest and the pack. | `tests/test_certify_read_only.py::test_manifest_and_pack_carry_equal_facts` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R046 Browser authorization-code flow with PKCE as a reusable auth manager Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Browser authorization-code flow with PKCE as a reusable auth manager.** The SDK provides one authorization-code manager with PKCE for every connector whose system supports it. Connectors that use static tokens or keys keep them. | Rows R046.1 to R046.6 bind. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R046.1 Model Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Model.** Frozen PkceAuthConfig carries issuer, `client_id`, scope, `redirect_mode`, `token_ref` and a declared ProviderTokenProfile. The profile specifies JWT/OIDC or opaque representation separately for each token role. PkceChallenge binds the authenticated caller/client, operation digest, broker challenge reference, state, nonce, callback and deadline. Headless input carries the complete bound redirect response. PkceAuthResult exposes safe status and references only; codes, verifier and tokens remain private transport material. | CC-26 through CC-31 plus the served inline authorization cases. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R046.2 Behavior Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Behavior.** PkceAuthManager uses a random 64-character verifier, S256 and a 120-second total deadline. It transports one host-admitted ceremony and persists only through the injected approved broker/vault port. Apply the declared token profile before persistence; opaque values acquire no fabricated JWT claims. Missing credentials may begin inline authorization only under that interaction policy. Headless input is asynchronous, bounded and challenge-bound; no served request waits on blocking stdin or a code file. | CC-26 through CC-31 plus the served inline authorization cases. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R046.3 Wiring Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Wiring.** The actual certify caller is `agent_connector_sdk/certify/cli.py:124`, which invokes _oidc_auth at `agent_connector_sdk/certify/options.py:26`. That function currently constructs client-credentials auth only. Add the selected PKCE branch and connector credential-missing handler through the same manager. The manager, broker adapter, challenge transport and persistence acknowledgement are missing; `build_outbound_auth` is not an existing call site. | CC-26 through CC-31 plus the served inline authorization cases. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R046.4 Refusal Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Refusal.** PkceAuthRefusedError distinguishes `no_credential`, `interaction_required`, `browser_launch_failed`, `callback_unavailable`, `input_timeout`, `state_mismatch`, `insecure_redirect`, `provider_unavailable`, `persistence_failed`, cancelled, expired and revoked. Each phase respects the remaining deadline. Cancellation, expiry or callback replay invalidates the ceremony. No token request follows a bad state or redirect, and no operation resumes without confirmed persistence and fresh authority. | CC-26 through CC-31 plus the served inline authorization cases. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R046.5 Evidence Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Evidence.** Record issuer profile, redirect mode, request/client binding digest, challenge reference, outcome, deadline and safe token reference. Join the host grant and vault receipt. Never expose code, verifier, bearer token, pasted redirect input or resolved credential values. Persisted readiness requires an actual receipt; a successful exchange alone is insufficient. | CC-26 through CC-31 plus the served inline authorization cases. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R046.6 Hot-path proof Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Hot-path proof.** `tests/test_certify_pkce_flow.py::test_certify_run_authenticates_through_pkce` enters the actual certify command and local issuer callback. `tests/test_scoped_credential_transport.py::test_served_inline_pkce_bounds` enters the tools/call wire method on a real connector. Observe S256 exchange, bound callback, host persistence receipt and one authenticated provider request. Exercise positive and negative JWT/OIDC and opaque profiles, including required introspection and connector substitution. Browser failure, input timeout, cross-client replay and failed persistence produce typed errors and no resumed operation. | CC-26 through CC-31 plus the served inline authorization cases. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R047 Agent-card discovery from the standard well-known path Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Agent-card discovery from the standard well-known path.** The SDK reads a remote agent's standard card from its well-known path and records it, so delegation can decide when to invoke that agent. | Rows R047.1 to R047.6 bind. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R047.1 Model Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Model.** Add frozen `DiscoveredAgentCard` in `agent_connector_sdk/vendor_extractors/a2a_discovery.py`. Fields: `base_url`, `card` (the parsed JSON object), `fetched_at`, `etag` and `skills` (a tuple of skill identifiers). | `tests/test_a2a_discovery.py::test_discovered_card_is_frozen_and_typed` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R047.2 Behavior Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Behavior.** `discover_agent_card(base_url)` requests `/.well-known/agent-card.json` through the governed HTTP client. It accepts a body of at most 256 KiB and a response within 10 s. Both limits are named defaults. A repeated fetch sends the stored `etag` and keeps the stored card on a 304. | `tests/test_a2a_discovery.py::test_fetch_uses_well_known_path_and_etag` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R047.3 Wiring Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Wiring.** `_collect_cards` in `agent_connector_sdk/vendor_extractors/a2a_helpers.py:79` accepts only inline cards or file paths today. This row creates the call site for `discover_agent_card` there, for a config entry that holds a base URL. Its production caller is `extract` in `agent_connector_sdk/vendor_extractors/a2a.py:98`. | `tests/test_vendor_extractors_archer_infra_a2a.py::test_base_url_entry_is_fetched_into_cards` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R047.4 Refusal Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Refusal.** The discovery must return `AgentCardRefused` with reason `not_found`, `not_json`, `oversize` or `egress_blocked`. It must not write a partial card to the change set. | `tests/test_a2a_discovery.py::test_refusals_write_nothing` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R047.5 Evidence Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Evidence.** Each discovered card adds `fetched_at`, `etag` and the source URL to its `A2AAgentCard` entity, so a delegation decision can cite the card version it used. | `tests/test_a2a_discovery.py::test_entity_carries_fetch_provenance` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R047.6 Hot-path proof Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Hot-path proof.** The entry point is the `a2a` vendor extractor run, `extract`. The integration test serves a card from a fake host, runs the extractor with a base URL, and observes the card and skill entities in the change set. | `tests/test_vendor_extractors_archer_infra_a2a.py::test_extract_discovers_card_from_base_url` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R048 Agent-readable text form in tool contracts Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Agent-readable text form in tool contracts.** A tool that returns fitted analysis results declares a plain-text form an agent can answer questions from. Graded questions score that form. | Rows R048.1 to R048.6 bind. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R048.1 Model Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Model.** Add frozen `ReadableForm` in `agent_connector_sdk/artifacts/readable_form.py`. Fields: `template_id`, `max_chars`, `question_set_ref` and `score`. `ToolContractFacts` (SDK-CONNECTOR-CONTROL-R045.1) gains an optional `readable_form` field. | `tests/test_readable_form.py::test_model_is_frozen_and_optional_on_facts` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R048.2 Behavior Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Behavior.** `render_readable(result, form)` returns plain text of at most `max_chars`, 4000 by default. It lists fitted terms, their effects and the stated fit quality, one line each. The default is a named, replaceable renderer. | `tests/test_readable_form.py::test_render_is_bounded_plain_text` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R048.3 Wiring Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Wiring.** `_tool_entry` in `agent_connector_sdk/artifacts/tools.py:25` builds the tool body. This row creates the call site there: the function copies the declared `readable_form` into the pack annotations. Its production caller is `ToolArtifactKind.list_entries` at `agent_connector_sdk/artifacts/tools.py:64`. | `tests/test_pack.py::test_tool_entry_carries_readable_form` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R048.4 Refusal Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Refusal.** `certify_connector` must refuse a tool that declares a `readable_form` and has no `question_set_ref`. It must return the verdict `unscored_readable_form`. | `tests/test_certify_readable_form.py::test_unscored_form_is_refused` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R048.5 Evidence Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Evidence.** The certification verdict records `score`, the question count and the answered count per tool. The score is a count ratio, not a model judgment. | `tests/test_certify_readable_form.py::test_verdict_records_question_counts` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R048.6 Hot-path proof Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Hot-path proof.** The entry point is the certify command run loop. The integration test certifies a fixture connector whose tool declares a form with ten graded questions, and observes the score in the verdict and the form in the built pack. | `tests/test_certify_readable_form.py::test_certify_run_scores_form_and_pack_carries_it` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R049 Budget-limited, approval-gated payment challenge handling Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Budget-limited, approval-gated payment challenge handling.** The governed HTTP client handles an HTTP 402 payment challenge only within a budget and only after approval. Each payment leaves a provenance record. | Rows R049.1 to R049.6 bind. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R049.1 Model Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Model.** Add frozen `PaymentChallenge`, `PaymentBudget` and `PaymentRecord` in `agent_connector_sdk/http/payments.py`. The record fields are `transaction_id`, `amount`, `currency`, `payee`, `request_url`, `approver` and `outcome`. | `tests/test_http_payments.py::test_models_are_frozen_and_typed` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R049.2 Behavior Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Behavior.** `PaymentGate.decide(challenge, budget)` allows a payment when the amount fits the remaining per-call and per-day limits. Both limits default to zero, so nothing is paid until a caller sets them. A decision names which limit applied. | `tests/test_http_payments.py::test_decide_applies_named_limits` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R049.3 Wiring Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Wiring.** `create_http_client` in `agent_connector_sdk/http/client.py:84` builds the client but handles no 402. This row creates the call site: a response hook calls `PaymentGate.decide`, then `ctx_confirm_destructive` (`agent_connector_sdk/mcp/context.py:49`) for approval. Production callers are the connectors' served operations that build the client. | `tests/test_http_payments.py::test_client_hook_gates_402_through_approval` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R049.4 Refusal Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Refusal.** The gate must return `PaymentRefused` with reason `over_budget`, `not_approved`, `no_context` or `unsupported_scheme`. It must not send a payment header after a refusal. | `tests/test_http_payments.py::test_refusals_send_no_payment_header` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R049.5 Evidence Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Evidence.** Each attempt, paid or refused, emits one `PaymentRecord` as an entity linked to the requesting actor and request, so the full provenance chain is queryable. | `tests/test_http_payments.py::test_every_attempt_emits_a_record` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R049.6 Hot-path proof Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Hot-path proof.** The entry point is a served operation that calls the governed client against a fake endpoint returning 402. The integration test observes a paid retry within budget, and a refusal with a record when the budget is exceeded. | `tests/test_http_payments_flow.py::test_served_operation_pays_within_budget_and_refuses_over` | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R050 Caller-scoped tool context and ordered progress Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Caller-scoped tool context and ordered progress.** Every registered MCP tool receives a typed context for state, redacted logging and incremental progress. Destructive operations consume EG approval decisions through authenticated GraphOS serving and governed effect contracts. | Served acceptance CC-50 through CC-55 covers both registration paths. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R050.1 Model Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Model.** `ToolExecutionContext` binds verified tenant, actor, session, request, connector and operation IDs to a deadline and optional MCP progress token. `ToolProgress` contains sequence, finite nonnegative completed value, optional total and bounded message. `ToolExecutionResult` contains terminal state, last sequence and effect receipt reference. Terminal states are `succeeded`, `failed`, `cancelled` and `uncertain`. | CC-50 validates typed values, missing identity and unknown terminal states. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R050.2 Behavior Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Behavior.** Named defaults are `request_cache`, `ordered_progress` and `bounded_delivery`. Cache entries live only within one request and expire at its deadline. Concurrent producers serialize notifications with strictly increasing sequence and completed values, even without a total. Suppress equal completion notifications; internal terminal summaries may update separately. A known total is fixed and bounds completed. Without a progress token no progress notification is sent. Push notifications precede the terminal result, which includes the last progress summary. Delivery never polls. | CC-51 checks ordering, equal concurrent updates, bounds, token absence and request cache isolation. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R050.3 Wiring Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Wiring.** The served `tools/call` entry point uses `create_mcp_server` at `agent_connector_sdk/mcp/server.py:88`. Add context binding to tools registered through `tool_surface.py:97` and `method_tools.py:133` in that same package. Forward the bound context through `agent_connector_sdk/mcp/action_dispatch.py:194` before invoking the connector method. Reuse `ctx_log` and `ctx_confirm_destructive` from `mcp/context.py`; add the missing typed progress sender there. | CC-52 exercises both registrars through the served operation and observes the same context identity at dispatch. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R050.4 Refusal Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Refusal.** Return closed reason codes `invalid_context`, `invalid_progress`, `approval_required`, `deadline_exceeded`, `cancelled`, `delivery_failed` or `recovery_unavailable`. Missing or mismatched identity refuses before any backend call. Denied, expired or wrong-operation EG approval refuses every destructive call. Progress failure never retries a source effect. If an effect may have happened, return `uncertain` with its receipt reference for governed reconciliation. Reconnect recovery refuses `recovery_unavailable` without an authenticated producer mapping the original request to its durable result and effect receipts. Never synthesize a recovered result or repeat an effect to recover it. | CC-53 asserts zero effects on refusal and no repeated effect after notification loss or unavailable reconnect recovery. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R050.5 Evidence Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Evidence.** Emit tenant, actor, connector, operation, request and trace IDs; schema digest; event sequence; terminal reason; EG approval reference; and effect receipt reference. Record cache hits and notification loss without cached values, credentials or raw arguments. Bind terminal progress metadata to the same request even without a token. | CC-54 checks provenance, redaction and correlation for success and failure. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R050.6 Hot-path proof Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Hot-path proof.** `tests/test_tool_context_served.py::test_served_context_progress_and_approval` enters the real `tools/call` wire method on a running SDK server. It crosses registration, context binding and dispatch before a controlled connector backend. The client observes ordered progress and terminal metadata. Repeat without a token, with concurrent tenants, denied approval and transport loss; verify backend effects and governed receipt identity. A reconnect retry must refuse when its result producer is unavailable. | CC-55 requires an actual served transport; direct helper tests alone do not satisfy this row. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R007.1 Model Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Model.** Define immutable `MajorVersionTransition` and `PackageInventorySnapshot` types. Bind transition to the distribution, old and target major pins, target artifact digest, transition ID, and inventory digest. Each sorted snapshot entry binds package and repository IDs, source commit, current pin, and dependency-file preimage digest. Hash canonical entries with SHA-256. Define one immutable `PackageCompatibilityReceipt` per package, bound to transition, inventory, source, pins, preimage, artifact, suite, run, completion, and outcome. | Reject missing identities, duplicate packages, non-major transitions, or receipts with mismatched bindings. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R007.2 Behavior Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Behavior.** Evaluate every inventoried package against the exact target artifact in an isolated candidate environment. Leave tracked manifests and lockfiles unchanged. Emit exactly one completed receipt per package. Refuse when inventory completeness is unknown. Import scans alone are not compatibility evidence. | Assert exact receipt membership, target binding, complete results, and unchanged dependency-file bytes. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R007.3 Wiring Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Wiring.** The planned producer is `agent_connector_sdk.testing.fleet_migration.evaluate_major_version_compatibility(inventory, transition)`. The planned fleet gate is `authorize_major_version_pin_changes(transition, inventory, receipts)`. Each package writer calls `require_package_pin_change(gate, package_id, pin_preimage)` before its first pin write. `scan_many_packages` and `PackageScanResult` currently report import scans only. The rollout command and pin writers lack these attachments. Require the same gate in R009-R013. | Enter the real rollout command and every R009-R013 package writer; helper-only tests do not prove wiring. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R007.4 Refusal Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Refusal.** Fleet preflight refuses before its first write if a receipt is missing, duplicate, extra, failed, incomplete, cancelled, stale, or mismatched. It checks transition, artifact, inventory, package, source, current-pin, and preimage bindings. That refusal preserves every pin byte-for-byte. Each writer rechecks its authorization and current preimage before its first write. After admission, package A may write before a check rejects package B. B's writer refuses its write and reports applied/refused package IDs plus a reconciliation-required state. Align this partial outcome with `PIPE-RELEASE-R001.8` through `PIPE-RELEASE-R001.12`. Do not claim an operator restored A's old pin. | Through the rollout path, prove preflight refusal leaves all dependency files byte-identical. Then race B's preimage after A writes. Prove B performs no write. Assert the partial result names A and B and requires reconciliation. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R007.5 Evidence Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Evidence.** Record transition ID, inventory digest and members, package source and preimage, and old and target pins. Record artifact digest, check suite, run, outcome, and gate decision. Bind each consumed authorization to its package. Record each writer's applied/refused outcome and, after a post-admission race, the exact partial package set and reconciliation-required state. Reconstruct decisions from credential-free evidence; reject cross-package and cross-transition reuse. | Rebuild decisions from stored inputs, verify partial-outcome readback, and reject reused package or transition evidence. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R007.6 Hot-path proof Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Hot-path proof.** Exercise the real rollout command and package writers. A complete passing preflight permits only bound pin changes. Missing, stale, or incompatible preflight receipts refuse before writes and preserve all pins. Also race package B's preimage after package A commits. B refuses before its first write. The result identifies A as applied and B as refused. It requires reconciliation without claiming rollback. | `tests/test_major_version_compatibility_served.py::test_fleet_preflight_refusal_preserves_all_pins` exercises preflight and byte-compares every dependency file. `tests/test_major_version_compatibility_served.py::test_writer_b_preimage_race_reports_partial_rollout` proves B did not write and the result requires reconciliation. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R051 Sandbox allocation producer for AU:29 Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Sandbox allocation producer for AU:29.** The SDK provisions and reconciles admitted sandbox requests through one typed port. GraphOS owns host admission and the certified support matrix. Source trace: `AU:29 49df21c60c947240d4f02b1424b1de29183f10a69c76bd885f19d13e7237061c`. | Served producer/consumer acceptance and independent readback; runtime remains unclaimed. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R051.1 Model Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Model.** Define SandboxProvisioner. It consumes GraphOS ProvisionRequest. It returns ProvisionResult with allocation ID, actual instances, observed image/platform, state, timestamps, and provider receipt. | Validate all identity fields and actual instance IDs. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R051.2 Behavior Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Behavior.** Allocate once per stable operation ID. Reconcile uncertain results before retry. Transport loss never proves no allocation. | A replay returns the reconciled allocation without duplication. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R051.3 Wiring Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Wiring.** The SDK does not yet provide the planned `agent_connector_sdk.ports.sandbox.SandboxProvisioner` producer or adapter binding. Existing generic SDK entry points are `agent_connector_sdk/mcp/server.py:88` (`create_mcp_server`), `agent_connector_sdk/mcp/tool_surface.py:121` (`register_tool_surface`), `agent_connector_sdk/mcp/method_tools.py:150` (`register_method_tools`), and `agent_connector_sdk/mcp/action_dispatch.py:194` (`dispatch_async`). Route AU sandbox access through GraphOS `graph_os/api/ops/agents.py:97` (`agents.run`) and `graph_os/control_plane/runs/admission.py:108` (`NativeWorkItemAdmissionProtocol`) / `graph_os/control_plane/runs/capacity.py:53` (`CapacityLedger`); return the SDK adapter receipt to GraphOS. The sandbox-specific producer/wiring remains absent. | Exercise the served route, adapter, and result consumer. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R051.4 Refusal Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Refusal.** Refuse unsupported profiles, missing grants, expired requests, and conflicting replay IDs before provider calls. Reconcile unresolved outcomes before retry. Unsupported combinations allocate nothing. | Negative cases observe zero unsupported or unauthorized allocations. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R051.5 Evidence Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Evidence.** Bind request/result digests, adapter version, matrix revision, operation/allocation IDs, instances, state, timestamps, and reconciliation. Exclude credentials and secret values. | Independent readback matches the bound allocation receipt. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R051.6 Hot-path proof Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Hot-path proof.** Future served tests enter GraphOS agents.run. Use a disposable certified adapter. Observe instances and independent readback. Test unsupported profiles and response loss without duplicates. | The served acceptance proves actual allocation and zero duplicate effects. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R052 Visual observation transport for AU:35 Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Visual observation transport for AU:35.** The SDK transports visual observations and provenance between steps. EG owns durable perception state; AU owns next-step conditioning. SDK request_cache remains request-scoped. Source trace: `AU:35 9da1fe3853d82945989df4194b626b793a37937ff892b483c1583a8d1aae644e`. | Served producer/consumer acceptance and independent readback; runtime remains unclaimed. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R052.1 Model Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Model.** Define VisualObservationEnvelope. Include observation ID, modality, source operation, and frame or sequence. Bind capture time, content digest/reference, tenant/run/request scope, and schema revision. Keep payload behind governed references. | Reject absent or malformed provenance and unbounded payloads. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R052.2 Behavior Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Behavior.** Pass ordered observation references to the next authorized step in the same run. EG owns durable storage and retention. SDK request_cache is not cross-request memory. | The next step reads the committed same-run observation only. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R052.3 Wiring Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Wiring.** Existing generic SDK entry points are `agent_connector_sdk/mcp/server.py:88` (`create_mcp_server`), `agent_connector_sdk/mcp/tool_surface.py:121` (`register_tool_surface`), `agent_connector_sdk/mcp/method_tools.py:150` (`register_method_tools`), and `agent_connector_sdk/mcp/action_dispatch.py:194` (`dispatch_async`). The SDK lacks a visual observation producer; EG has not assigned the state binding, and AU has not assigned the next-step consumer; request-scoped request_cache is not durable state. | A served two-step test observes matching IDs at result, state, and consumer. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R052.4 Refusal Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Refusal.** Refuse expired, invalidated, uncommitted, unauthorized, cross-tenant/run, and wrong-schema references before provider calls. Never substitute another request's cache. | Each refusal produces zero provider effects. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R052.5 Evidence Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Evidence.** Bind the digest, source/frame, producer operation, tenant/run, schema revision, retention decision, and consumer step. Exclude raw visual content and secrets. | EG readback confirms provenance without returning raw content. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R052.6 Hot-path proof Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Hot-path proof.** Future served tests cross MCP tools/call, EG state write/readback, and AU next-step use. Prove same-run reuse, cross-run isolation, and stale-reference refusal. | The observed path proves reuse and zero effects on refusal. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R053 SDK environment declarations for GRAPHOS:9 Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**SDK environment declarations for GRAPHOS:9.** The SDK declares environment inputs used by enabled SDK components, including indirect reads. GraphOS owns startup validation; AU owns AU declarations. Source trace: `GRAPHOS:9 cfd8f1270b5ec1f19d8c78f50e5a833695573763a691584e8c74d8fa5f1cb225`. | Served producer/consumer acceptance and independent readback; runtime remains unclaimed. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R053.1 Model Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Model.** Define versioned EnvironmentDeclaration records. Include component/distribution, schema revision, input name, required state, type constraints, and direct/indirect read source. Store no values. | Reject duplicate declarations, literals, and unknown components. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R053.2 Behavior Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Behavior.** Plan an SDK declaration export for every enabled component and transitive setting; the export is absent. Current readers include `CONNECTOR_CONFIG_FILE` and `XDG_CONFIG_HOME` in `agent_connector_sdk/config.py:112-148`, `CONNECTOR_AUTH_TOKEN_URL`, `CONNECTOR_AUTH_CLIENT_ID`, `CONNECTOR_TRANSPORT_TIMEOUT_SECONDS`, `CONNECTOR_TRANSPORT_ALLOW_PLAINTEXT`, `CONNECTOR_LIMITS_MAX_CONNECTIONS`, and `CONNECTOR_LIMITS_MAX_KEEPALIVE_CONNECTIONS` in `agent_connector_sdk/config.py:258-271`; `MCP_ENABLED_TOOLS`, `MCP_DISABLED_TOOLS`, `MCP_ENABLED_TAGS`, and `MCP_DISABLED_TAGS` are read in `agent_connector_sdk/mcp/visibility_policy.py:71-76`. `agent_connector_sdk/config_git.py:8-20` filters inherited Git selectors and is not a declaration producer. | Undeclared reads and missing required declarations block startup. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R053.3 Wiring Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Wiring.** The SDK owner must assign the declaration export path before implementation; the SDK currently has no declaration producer. Bind that export to the GraphOS `HostEnvironmentManifest` producer `GRAPHOS-HOST-R010.2` and startup consumer `GRAPHOS-HOST-R010.4`. GraphOS owns the schema and validator; do not duplicate them. AU declarations remain AU-owned. | The served launcher consumes the SDK declaration set. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R053.4 Refusal Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Refusal.** Refuse startup before serving on missing, malformed, or undeclared inputs. Name the input where required. Never reveal its value. | A secret canary is absent from every refusal diagnostic. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R053.5 Evidence Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Evidence.** Bind declaration digest, component versions, enabled set, schema revision, validation outcome, and host decision. Persist names and constraints, never values. | Independent readback reproduces the declaration set and decision. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R053.6 Hot-path proof Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Hot-path proof.** Future served tests cover enabled components and indirect reads. Test missing, malformed, and undeclared inputs. Confirm no route admission and redact secret values. | The healthy case serves; each negative case refuses before admission. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R054 JSON tag-loader migration for AU:89 Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**JSON tag-loader migration for AU:89.** Inventory each JSON tag loader and migrate it to Python registration with served parity. Preserve the condensed default and R026/R032 opt-ins. Source trace: `AU:89 3916d50003442e91ad490706e9c9cd0d77211af4998baa3ad98220457e4c7d1a`. | Served producer/consumer acceptance and independent readback; runtime remains unclaimed. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R054.1 Model Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Model.** Bind each entry to package, repository, JSON digest, target, and operation IDs. Also record schemas, tags, mode, authorization reference, and refusal cases. | The inventory covers every loader before migration. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R054.2 Behavior Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Behavior.** Migrate entries through register_tool_surface or register_method_tools. Keep condensed routing as the default. Preserve R026 and R032 opt-ins. R020 retires verbose mode, but R032 permits explicit verbose opt-in. This conflict remains unresolved for AU:89. Obtain the owner's normative decision before implementation or parity closure. | Served operations and schemas remain equivalent. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R054.3 Wiring Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Wiring.** Current Python registration and dispatch paths are `agent_connector_sdk/mcp/tool_surface.py:121` (`register_tool_surface`), `agent_connector_sdk/mcp/method_tools.py:150` (`register_method_tools`), and `agent_connector_sdk/mcp/action_dispatch.py:194` (`dispatch_async`). `agent_connector_sdk/testing/fleet_migration.py:32` (`PackageScanResult`) and `agent_connector_sdk/testing/fleet_migration.py:90` (`scan_many_packages`) currently provide import scanning only. The complete JSON tag-loader census and served parity gate are absent. | Tests reach real registration, dispatch, and backend. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R054.4 Refusal Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Refusal.** Preserve denied, malformed, unknown, unsupported, and schema-mismatch refusals. Any unclassified loader or unexplained difference blocks completion. | Negative calls retain typed refusal and zero backend effects. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R054.5 Evidence Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Evidence.** Record revisions, inventory digest, operation/schema/tag parity, mode, authorization/refusal comparison, and served receipt. Do not claim completion before readback. | Reconstruct the parity decision from recorded digests and results. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R054.6 Hot-path proof Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Hot-path proof.** Future served tests list every package with tools/list. Then call each operation. Include denied and malformed calls. Test condensed default and supported opt-ins. | The acceptance proves dispatch parity and no opt-in regression. | requirement | SDK-CONNECTOR-CONTROL | SPECIFIED | No recorded commit/test evidence |
| SDK-CONNECTOR-CONTROL-R026.1 Require explicit destructive confirmation across both supported MCP eras Definition — SDK-CONNECTOR-CONTROL / SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publicationCanonical requirement and verification source**Require explicit destructive confirmation across both supported MCP eras.** The shared agent_connector_sdk.mcp.context.ctx_confirm_destructive gate uses the request and response schema supported by the live negotiated MCP session. Both generated method tools and action dispatch must pass this gate before a destructive backend invocation. Only explicit acceptance with the declared boolean confirmation value equal to true permits dispatch. A false value, decline, cancel, missing context, unsupported capability, malformed response, transport error, or cancelled request must not dispatch. Truthiness of a container or string is not confirmation. A compatibility path must not turn refusal into approval or repeat a destructive effect. | Served tools/call tests traverse registration, context, confirmation, and each real dispatch path to a controlled backend in both supported eras. Record exact protocol and package versions. For each path and era, explicit acceptance calls the backend exactly once; false, decline, cancel, missing/unsupported context, malformed data, and elicitation failure call it zero times. Include a truthy response object containing false and a nonboolean confirmation value. Verify cancellation does not reach the backend and nondestructive operations do not request confirmation. Helper-only tests do not satisfy acceptance. | requirement | SDK-CONNECTOR-CONTROL | VERIFIED | 851969957034 c529b133556b d76f26e0e5fa tests/test_mcp_confirmation_roundtrip.py:138 tests/test_mcp_confirmation_roundtrip.py:182 tests/test_mcp_confirmation_roundtrip.py:202 tests/test_mcp_confirmation_roundtrip.py:36 |
| SDK-FINANCE-SOURCES SDK-FINANCE-SOURCES — Qualified finance source adapters | spec | None | LANDED | No recorded commit/test evidence |
| SDK-FINANCE-SOURCES-R001 Market-data adapters: exchange history fix, CoinMarketCap, FRED/ALFRED Definition — SDK-FINANCE-SOURCES / SDK-FINANCE-SOURCES — Qualified finance source adaptersCanonical requirement and verification source**Market-data adapters: exchange history fix, CoinMarketCap, FRED/ALFRED.** Market-data source adapters correct historical price retrieval for the exchange market-data connector, add CoinMarketCap market data, and add Federal Reserve FRED/ALFRED series with a central-bank announcement calendar, each preserving data vintage and announcement time per the shared adapter contract. | Offline conformance tests using recorded or synthetic responses for each adapter verifying corrected history retrieval and vintage and announcement-time fields. | requirement | SDK-FINANCE-SOURCES | LANDED | 840bd894c581 |
| SDK-FINANCE-SOURCES-R002 Alpaca stocks adapter: history, quotes, fundamentals, calendars Definition — SDK-FINANCE-SOURCES / SDK-FINANCE-SOURCES — Qualified finance source adaptersCanonical requirement and verification source**Alpaca stocks adapter: history, quotes, fundamentals, calendars.** The Alpaca stocks source adapter supports historical bars, quotes, and streaming data with bounded pagination and explicit adjusted-versus-unadjusted and regular/pre/post-market handling, plus profile and fundamentals data, a licensed logo source, news, and an earnings and dividend calendar. | Offline conformance tests against recorded Alpaca fixtures covering pagination, adjustment mode, extended-hours flags, and each additional data type. | requirement | SDK-FINANCE-SOURCES | VERIFIED | 077a14c9f3d3 823197633ebb fad5328aee62 tests/test_finance_alpaca_stocks.py:56 tests/test_finance_alpaca_stocks.py:69 tests/test_finance_alpaca_stocks.py:75 |
| SDK-FINANCE-SOURCES-R003 FX, commodities, and real-estate adapters with roll and staleness rules Definition — SDK-FINANCE-SOURCES / SDK-FINANCE-SOURCES — Qualified finance source adaptersCanonical requirement and verification source**FX, commodities, and real-estate adapters with roll and staleness rules.** FX source adapters identify base and quote currency and rate direction. Gold and commodities adapters distinguish spot price from a specific futures contract, its expiry, and an explicit roll rule. Real-estate adapters return a dated, potentially stale valuation rather than a live market quote. | Offline conformance tests per asset class asserting correct base/quote identity, spot-versus-futures roll handling, and valuation staleness reporting. | requirement | SDK-FINANCE-SOURCES | LANDED | 6ef04661acc2 |
| SDK-FINANCE-SOURCES-R004 Alpaca account reads and idempotent CSV activity import Definition — SDK-FINANCE-SOURCES / SDK-FINANCE-SOURCES — Qualified finance source adaptersCanonical requirement and verification source**Alpaca account reads and idempotent CSV activity import.** Account import reads Alpaca account and position data and imports CSV activity statements with a column-mapping preview, rejecting ambiguous columns or currencies, and identifies each activity row by a stable provider event ID or source-file digest plus row identity so re-import is idempotent. | Conformance tests that re-import the same CSV file and Alpaca account snapshot and assert no duplicate activity record is created. | requirement | SDK-FINANCE-SOURCES | VERIFIED | 077a14c9f3d3 2ef7ca88d676 6ef04661acc2 fad5328aee62 tests/test_finance_account_read.py:43 tests/test_finance_account_read.py:54 tests/test_finance_account_read.py:60 tests/test_finance_csv_import.py:76 |
| SDK-FINANCE-SOURCES-R005 Macro and liquidity panels: FRED series, ETF flows, sentiment, on-chain Definition — SDK-FINANCE-SOURCES / SDK-FINANCE-SOURCES — Qualified finance source adaptersCanonical requirement and verification source**Macro and liquidity panels: FRED series, ETF flows, sentiment, on-chain.** Macro and liquidity source adapters provide Federal Reserve FRED series with preserved vintage, a versioned liquidity composite and heat-strip panel, ETF fund-flow data, sentiment data, and on-chain position data, each tagged with its source and observation time. | Offline conformance tests against recorded or synthetic fixtures for each panel type asserting vintage preservation and correct source provenance tagging. | requirement | SDK-FINANCE-SOURCES | VERIFIED | 077a14c9f3d3 36f3c76a370c 840bd894c581 887c201cbff5 fad5328aee62 tests/test_finance_etf_flows.py:48 tests/test_finance_etf_flows.py:57 tests/test_finance_etf_flows.py:66 tests/test_finance_fred_series.py:40 |
| SDK-GOVERNED-WRITEBACK SDK-GOVERNED-WRITEBACK — Governed write-back to attached sources | spec | None | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R001 Write-back proposals route through governed authorization, not direct action Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Write-back proposals route through governed authorization, not direct action.** A proposed change to an attached source is evaluated only through the governed write-back protocol's deterministic authorization modes; a decision-service suggestion is never itself an approval and cannot directly authorize applying the change. | A contract test submits a decision-service proposal. It asserts refusal without a separate deterministic authorization and approval record. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | daeb199f91c0 fad5328aee62 tests/test_decide_consumers.py:169 tests/test_decide_consumers.py:176 |
| SDK-GOVERNED-WRITEBACK-R001.1 Model Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Model.** `WalletBusinessIntent` is immutable business input. `WalletExecutionEnvelope` carries its separate proof and confirmation metadata. Neither proof nor plan digest occurs inside intent. The plan defines their exact projection. `WalletProofRequest` binds authenticated tenant and actor, connector, operation, account, wallet, network, key ID, plan digest, change-set digest and idempotency key. It also carries scheme, nonce, issued-at, expires-at and signature bytes. `WalletProofResult` contains `verified` or `refused`, reason, payload digest, signer reference, trust revision and validity interval. It is a verification fact, never an authorization grant. | WB-09 validates the closed request and result models. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R001.2 Behavior Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Behavior.** Prepare and confirm immutable intent before signing. `plan_digest` means `params_digest({"intent": WalletBusinessIntent})`; adding proof cannot alter it. `verify_bound_intent` reconstructs canonical signed bytes from authenticated request and durable change-set fields. Verify the declared scheme against a current trusted wallet/account key binding. Reject expired, revoked or mismatched proofs. `same_effect_only` binds the nonce to the durable change-set ID and existing idempotency key. A valid proof still requires EG authorization, explicit human confirmation and audit reservation before any effect. | WB-10 exercises valid proofs, canonical payloads and independent authorization. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R001.3 Wiring Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Wiring.** Add the SDK-owned `WalletSignatureVerifier.verify` contract at the existing governed effect boundary. `GovernedWriteBack.apply` at `agent_connector_sdk/writeback/service.py:74` must verify wallet proof before transport apply. Reuse `DurableAuthorizationResolver.verify` at `agent_connector_sdk/writeback/authorization.py:78` and `DurableWritableConnector.apply` at `agent_connector_sdk/writeback/connector.py:75`. Connector served operations call this composition. The shared `WalletExecutionEnvelope` transport extension, intent projection, verification and trust resolution are missing; no existing method verifies wallet signatures. | WB-11 traces a served connector call through the verifier and governed apply. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R001.4 Refusal Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Refusal.** Return `missing_signature`, `invalid_payload`, `unsupported_scheme`, `untrusted_key`, `revoked_key`, `expired`, `scope_mismatch`, `invalid_signature`, `replay_conflict` or `verification_unavailable`. Missing trust authority, stale trust state or unavailable proof transport refuses before an external effect. Never accept client-supplied verification flags or derive account ownership solely from a valid signature. | WB-12 proves zero effects for every refusal and unavailable dependency. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R001.5 Evidence Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Evidence.** Record payload digest, plan and change-set digests, tenant, actor, connector, operation, network, signer reference, trust revision and verification time. Join proof outcome to authorization, confirmation, audit and effect receipt references. Never log private keys, raw signatures or reusable proof bodies. An uncertain effect follows existing durable reconciliation rather than a new submission. | WB-13 exercises redaction, provenance and replay after restart. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R001.6 Hot-path proof Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Hot-path proof.** `tests/test_wallet_proof_served.py::test_served_wallet_proof_and_governed_apply` enters the real connector wire method `tools/call`. With synthetic keys and a running durable graph, a correctly bound proof plus confirmation and authorization yields one controlled provider effect. Prepare, confirm, sign and execute through served transports; proof insertion preserves the confirmed digest. Intent tampering, missing confirmation, wrong tenant/network/key, revoked trust, expiry and replay conflict yield none. Restart and repeat the same effect to observe its prior receipt without another mutation. | WB-14 requires served transport and durable read-back; direct verifier tests alone are insufficient. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R002 Source-side WriteBackPort composes a durable graph write-back adapter Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Source-side WriteBackPort composes a durable graph write-back adapter.** The SDK's generated-type WriteBackPort composes a durable operation adapter against the graph service's SourceChangeSet and WriteBackAttempt records, so dry-run, apply, and reconcile calls read and update the canonical change-set state before any source mutation is attempted. | Integration tests exercising dry-run, apply, and reconcile through the durable adapter against a fake backing store, confirming each call reads and writes the canonical change-set record. | requirement | SDK-GOVERNED-WRITEBACK | VERIFIED | 2d39be956d8d tests/test_writeback_durable.py:143 |
| SDK-GOVERNED-WRITEBACK-R003 Full write-back requires an authorization resolver and restart recovery Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Full write-back requires an authorization resolver and restart recovery.** Beyond the source-side WriteBackPort, governed write-back protocol, and generated graph-client types, the implementation must add a production authorization resolver, at least one writable connector wired end to end, and proven recovery after a process restart before the capability is complete. | A restart-fault test that kills the process mid-apply and confirms reconciliation on restart, plus an end-to-end test of one writable connector through a real authorization resolver. | requirement | SDK-GOVERNED-WRITEBACK | VERIFIED | 2d39be956d8d tests/test_writeback_durable.py:254 tests/test_writeback_process_restart.py:105 |
| SDK-GOVERNED-WRITEBACK-R004 Governed write-back: approval, idempotency, and an audit reservation Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Governed write-back: approval, idempotency, and an audit reservation.** Rollup: every child below is required; the original acceptance remains mandatory. Applying a governed change to an attached source requires a recorded approval bound to the same change-set digest, a deterministic idempotency key so a retried request returns the identical durable result, and an audit reservation taken before the source call; when the target application exposes business-rule APIs, the adapter uses that API rather than writing to storage directly. | Tests that replay an identical apply request and assert the same effect and idempotency key are returned, and that a write attempt without an audit reservation is refused. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | 6ef04661acc2 fad5328aee62 tests/test_writeback_audit_reservation.py:13 tests/test_writeback_audit_reservation.py:27 |
| SDK-GOVERNED-WRITEBACK-R004.1 Generic approval residual Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Generic approval residual.** Model: A generated SourceChangeSet and recorded approval share one canonical digest. Behavior: Require independent recorded approval for every governed attached-source effect, including non-repository adapters; proposals confer no approval. Wiring: Retain GovernedWriteBack.apply and the existing authorization resolver. Refusal: Missing, mismatched or expired approval prevents a new effect. Evidence: WB-15 permits one approved generic effect and refuses each invalid approval before transport apply. | Proposed test: `tests/test_repository_source_effect_served.py::test_generic_approval`. WB-15 permits one approved generic effect and refuses each invalid approval before transport apply. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R004.2 Generic deterministic replay residual Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Generic deterministic replay residual.** Model: The existing effect key binds one change-set digest and durable result. Behavior: An identical retry returns the identical durable result and effect key across all governed adapters. Wiring: Retain DurableWritableConnector.apply and WriteBackLedger receipt lookup. Refusal: A changed digest under the same key refuses; an uncertain effect cannot be blindly reapplied. Evidence: WB-16 observes one source effect for concurrent identical requests and restart replay. A conflicting replay causes zero additional effects. | Proposed test: `tests/test_repository_source_effect_served.py::test_generic_replay`. WB-16 observes one source effect for concurrent identical requests and restart replay. A conflicting replay causes zero additional effects. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R004.3 Generic audit reservation residual Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Generic audit reservation residual.** Model: The audit reservation binds the canonical change set and effect key. Behavior: Reserve durably before every new source mutation; a proven-no-effect retry recovers the same reservation. Wiring: Retain AuditReservationPort.reserve before WriteBackTransport.apply. Refusal: Unavailable, missing or wrong-binding reservation prevents transport apply. Evidence: WB-17 records reservation-before-effect ordering and injects each reservation failure with zero provider mutations. | Proposed test: `tests/test_repository_source_effect_served.py::test_audit_before_effect`. WB-17 records reservation-before-effect ordering and injects each reservation failure with zero provider mutations. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R004.4 Business-rule API residual Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Business-rule API residual.** Model: The adapter profile identifies the target application business-rule operation. Behavior: When that API exists, route every governed change through it and preserve its validation. Wiring: Use the admitted WriteBackTransport implementation, including non-repository adapters. Refusal: No direct storage, local checkout or database shortcut may bypass the application API. Evidence: WB-18 exercises an accepted API mutation and an API business-rule rejection, proving the rejected request never reaches a storage bypass. | Proposed test: `tests/test_repository_source_effect_served.py::test_business_api`. WB-18 exercises an accepted API mutation and an API business-rule rejection, proving the rejected request never reaches a storage bypass. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R004.5 Typed repository effect request Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Typed repository effect request.** Model: RepositorySourceEffectRequest binds the closed RepositorySourceEffectIntent in plan.md to one generated canonical change set. Behavior: Validate exact repository, connector, target, relative path, immutable base, complete payload bytes and digest before preview. Wiring: Add the proposed repository_effect.py contract beside existing writeback models; reuse generated canonical_digest and patch_digest. Refusal: Unknown fields, inconsistent digests, unbounded bytes or mismatched identity refuse without mutation. Evidence: WB-19 round-trips the complete request and seeded exact-byte vectors; changing each binding fails validation. | Proposed test: `tests/test_repository_source_effect_served.py::test_request_binding`. WB-19 round-trips the complete request and seeded exact-byte vectors; changing each binding fails validation. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R004.6 Repository path and scope resolution Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Repository path and scope resolution.** Model: Trusted connector configuration defines the provider repository and allowed path scope. Behavior: Resolve the same regular-file path against the immutable tree at preview and effect time without normalization that changes intent. Wiring: The repository transport consumes the canonical intent and trusted connector binding. Refusal: Absolute paths, traversal, aliases, escaping links, unsupported object kinds and out-of-scope targets refuse; ingestion hydration grants no write authority. Evidence: WB-20 serves an allowed nested path and every escape/scope variant, observing only the allowed path change. | Proposed test: `tests/test_repository_source_effect_served.py::test_path_scope`. WB-20 serves an allowed nested path and every escape/scope variant, observing only the allowed path change. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R004.7 Approval binds the complete source effect Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Approval binds the complete source effect.** Model: The durable change-set digest covers every RepositorySourceEffectIntent field and authenticated tenant/actor binding. Behavior: Match exact preview, existing approval, contract pin, source version and audit reservation before executing the repository operation. Wiring: The admitted connector invokes DurableWritableConnector.apply; GovernedWriteBack.apply remains the approval seam. Refusal: Substituting actor, connector, target, path, base, bytes, digest, policy or approval prevents any new mutation. Evidence: WB-21 approves one preview then changes each field independently; only the unchanged approved effect reaches the provider. | Proposed test: `tests/test_repository_source_effect_served.py::test_approved_effect`. WB-21 approves one preview then changes each field independently; only the unchanged approved effect reaches the provider. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R004.8 Conditional provider mutation Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Conditional provider mutation.** Model: The mutation carries the approved immutable base and expected file state as provider preconditions. Behavior: Enforce compare-and-apply atomically at the provider effect boundary, including a change occurring after preview or preflight. Wiring: Implement WriteBackTransport.apply(change_set, expected_version) through the provider business API. Refusal: A stale base, mismatched file state or provider lacking equivalent conditional semantics refuses; no force or unconditional fallback. Evidence: WB-22 races a competing commit after preflight. The approved write refuses without overwriting it. An unchanged base produces one revision. | Proposed test: `tests/test_repository_source_effect_served.py::test_conditional_effect`. WB-22 races a competing commit after preflight. The approved write refuses without overwriting it. An unchanged base produces one revision. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R004.9 Actual immutable effect receipt Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Actual immutable effect receipt.** Model: RepositorySourceEffectReceipt binds the canonical request, approval, audit reservation, actual immutable revision and readback evidence. Behavior: Report success only after the provider effect and independent readback are joined to a durable WriteBackAttempt. Wiring: Map the receipt through existing attempt and ledger fields as specified in plan.md. Refusal: An echoed request key, applied flag, mutable branch name, invented revision or failed receipt persistence cannot establish success. Evidence: WB-23 reads the durable attempt through a fresh ledger client. It matches the actual provider revision and complete receipt projection. | Proposed test: `tests/test_repository_source_effect_served.py::test_effect_receipt`. WB-23 reads the durable attempt through a fresh ledger client. It matches the actual provider revision and complete receipt projection. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R004.10 Independent revision readback Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Independent revision readback.** Model: The readback binds repository, exact path, actual immutable effect revision, bytes digest, size and file mode. Behavior: Fetch the file independently at that revision. Compare exact bytes and mode with approved intent before success. Wiring: Use the repository provider read API after mutation, never the mutation response body or an ingestion cache as readback. Refusal: Unavailable or mismatched readback yields an unresolved outcome, no success and no second mutation. Evidence: WB-24 observes a separate provider read and matching bytes; corrupt, missing and unavailable reads never yield a successful receipt. | Proposed test: `tests/test_repository_source_effect_served.py::test_independent_readback`. WB-24 observes a separate provider read and matching bytes; corrupt, missing and unavailable reads never yield a successful receipt. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R004.11 Repository restart reconciliation Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Repository restart reconciliation.** Model: Durable attempts and provider effect identity retain the original key, request and conditional base. Behavior: Recover a proven prior effect after restart; only authoritative proof of no effect permits another conditional attempt. Wiring: Implement prior_effect and reconcile on the existing transport and use WriteBackLedger receipts through DurableWritableConnector. Refusal: Timeout, lost response, uncertain receipt persistence or ambiguous provider lookup blocks blind reapply. Matching bytes alone cannot prove effect causality. Evidence: WB-25 crashes before effect, after provider commit, after readback and after durable receipt. Restart resolves or remains uncertain without duplication. | Proposed test: `tests/test_repository_source_effect_served.py::test_restart_reconcile`. WB-25 crashes before effect, after provider commit, after readback and after durable receipt. Restart resolves or remains uncertain without duplication. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R004.12 Served repository producer composition Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Served repository producer composition.** Model: An admitted repository connector exposes the typed request and receipt through the existing governed write-back operations. Behavior: Run preview, recorded approval, apply, independent readback and replay through the real connector entrypoint. Wiring: Compose its real provider transport with DurableWritableConnector and the generated graph ledger; GraphOS remains a separate consumer prerequisite. Refusal: Missing production composition, provider capability, durable authority or trusted configuration leaves the operation unavailable. Evidence: WB-26 traces one real served effect and zero-effect negatives at the provider boundary. After restart it reads the identical durable result. | Proposed test: `tests/test_repository_source_effect_served.py::test_served_journey`. WB-26 traces one real served effect and zero-effect negatives at the provider boundary. After restart it reads the identical durable result. | requirement | SDK-GOVERNED-WRITEBACK | SPECIFIED | No recorded commit/test evidence |
| SDK-GOVERNED-WRITEBACK-R005 Write-back implementation passes its full durable test suite together Definition — SDK-GOVERNED-WRITEBACK / SDK-GOVERNED-WRITEBACK — Governed write-back to attached sourcesCanonical requirement and verification source**Write-back implementation passes its full durable test suite together.** The write-back implementation's generated graph-client adapter, durable authorization verification, a writable connector, and restart-safe uncertainty reconciliation pass together as one coherent, tested unit before being considered complete. | A focused test run covering the adapter, authorization, writable connector, and restart reconciliation, executed together in continuous integration. | requirement | SDK-GOVERNED-WRITEBACK | VERIFIED | 2d39be956d8d tests/test_writeback_durable.py:218 tests/test_writeback_durable.py:238 |
| SDK-OBSERVABILITY-FEEDS SDK-OBSERVABILITY-FEEDS — Operational event feeds through the source adapter contract | spec | None | VERIFIED | No recorded commit/test evidence |
| SDK-OBSERVABILITY-FEEDS-R001 RUM, security-audit, and CI/CD events join the durable source pipeline Definition — SDK-OBSERVABILITY-FEEDS / SDK-OBSERVABILITY-FEEDS — Operational event feeds through the source adapter contractCanonical requirement and verification source**RUM, security-audit, and CI/CD events join the durable source pipeline.** RUM, security-audit, and CI/CD events enter the same durable source pipeline as other systems of record, carrying a standard event envelope with stable identity, event, observed, and ingest times, actor and target references, and schema version; the adapter contract does not itself interpret an event as a verified incident, vulnerability, release, or user outcome. | Conformance tests using synthetic RUM, audit, and CI/CD event fixtures asserting correct envelope fields, idempotent event identity, and schema-drift quarantine behavior. | requirement | SDK-OBSERVABILITY-FEEDS | VERIFIED | 077a14c9f3d3 c44284a671b3 tests/test_event_feeds.py:266 tests/test_event_feeds.py:284 tests/test_event_feeds.py:300 |
| SDK-QUALITY-RELEASE SDK-QUALITY-RELEASE — Portable SDK quality, Pages, and release | spec | None | LANDED | No recorded commit/test evidence |
| SDK-QUALITY-RELEASE-R001 SDK release builds against a published compatible graph-client wheel Definition — SDK-QUALITY-RELEASE / SDK-QUALITY-RELEASE — Portable SDK quality, Pages, and releaseCanonical requirement and verification source**SDK release builds against a published compatible graph-client wheel.** The SDK release pipeline builds and publishes an installed wheel verified against a published, version-compatible graph-client wheel, confirming generated-type and native-kernel compatibility in an isolated installed consumer rather than a source overlay. | A release job that installs the published wheel in an isolated environment and verifies generated-type and kernel compatibility against the graph-client release. | requirement | SDK-QUALITY-RELEASE | VERIFIED | 3edcf05bc64a 42b930057c3e 5b53e943e468 tests/gates/test_workflow_contract.py:158 tests/test_release_quality_r001_r005.py:48 tests/test_release_quality_r001_r005.py:55 tests/test_release_quality_r001_r005.py:61 tests/test_release_quality_r001_r005.py:79 |
| SDK-QUALITY-RELEASE-R002 Public-documentation scanner catches private addresses and hosts Definition — SDK-QUALITY-RELEASE / SDK-QUALITY-RELEASE — Portable SDK quality, Pages, and releaseCanonical requirement and verification source**Public-documentation scanner catches private addresses and hosts.** The scanner checks every public Markdown page for private IP ranges, host aliases, and environment-only domains. It applies the graph service's privacy rules and fails builds on violations. | A planted-violation test inserts a private IP and environment-only hostname into a document. It asserts the scanner fails, then confirms a clean tree passes. | requirement | SDK-QUALITY-RELEASE | VERIFIED | fad5328aee62 ffb9260d7602 tests/test_doc_privacy_scanner.py:28 |
| SDK-QUALITY-RELEASE-R003 Release workflow builds with the pinned managed Python, not the system one Definition — SDK-QUALITY-RELEASE / SDK-QUALITY-RELEASE — Portable SDK quality, Pages, and releaseCanonical requirement and verification source**Release workflow builds with the pinned managed Python, not the system one.** The release workflow installs and builds the SDK using the pinned Python toolchain declared in pyproject.toml rather than falling back to the hosting runner's system Python, while generated contracts and configuration, hardened serving, repository transport, and durable write-back remain intact and the public documentation site continues to build successfully. | A continuous-integration run of the release workflow asserting the build executes under the pinned interpreter and that the documentation site publishes successfully. | requirement | SDK-QUALITY-RELEASE | VERIFIED | 42b930057c3e tests/gates/test_workflow_contract.py:133 tests/gates/test_workflow_contract.py:98 |
| SDK-QUALITY-RELEASE-R004 Public documentation follows a task-first README and site structure Definition — SDK-QUALITY-RELEASE / SDK-QUALITY-RELEASE — Portable SDK quality, Pages, and releaseCanonical requirement and verification source**Public documentation follows a task-first README and site structure.** The public README follows a fixed section order leading with a one-file connector quick start, and the published documentation site presents a task-first tutorial and architecture guide. | A documentation build and link check in continuous integration confirming the README section order, that the one-file quick start example runs, and that the tutorial and architecture pages build without broken links. | requirement | SDK-QUALITY-RELEASE | LANDED | cbbf859a5c38 fad5328aee62 |
| SDK-QUALITY-RELEASE-R005 Hosted CI reproduces the pinned dependency graph with source and wheel evidence Definition — SDK-QUALITY-RELEASE / SDK-QUALITY-RELEASE — Portable SDK quality, Pages, and releaseCanonical requirement and verification source**Hosted CI reproduces the pinned dependency graph with source and wheel evidence.** The frozen lock reproduces the hosted graph, including requested extras and transitive dependencies. For `epistemic-graph`, `pyproject.toml`, `uv.lock`, and the bootstrap checkout pin the engine-main commit named in `scripts/epistemic_graph_release.json`. That record binds the official wheel filename, version, and SHA-256 to the same commit. Bootstrap installs the wheel only when its digest matches the record. Installation uses `--no-deps` and cannot change locked dependencies. It performs no native build. Installed PEP 610 origin, metadata, native engine, and package files must match the archive. SDK-consumed contract modules resolve from the exact source checkout. Only the release wheel directory may overlay that checkout on the import path. Source declarations match metadata snapshots and locked package edges. Active dependencies match locked versions and installed metadata. The installer rejects synthetic distribution metadata. Keep source and wheel evidence separate. Reject mismatched source commit, remote, origin, version, metadata, asset digest, package file, dependency, or graph. | Positive and adversarial tests prove source, lock, bootstrap, and release commit alignment. They verify archive and installed-file identity, import origins, Cargo version, declarations, dependency resolution, and extras closure. Negative cases reject wrong commits or wheel digests, unreceipted overlays, wrong origins or versions, missing dependencies, or graph drift. The graph digest binds a provenance sidecar with separate source and wheel evidence. | requirement | SDK-QUALITY-RELEASE | VERIFIED | 0c1f49ced769 42b930057c3e 6856dbff0136 851969957034 bdd3916109d0 tests/gates/test_workflow_contract.py:86 tests/test_release_quality_r001_r005.py:104 tests/test_release_quality_r001_r005.py:123 tests/test_release_quality_r001_r005.py:130 tests/test_release_quality_r001_r005.py:142 |
| SDK-REPOSITORY-TRANSPORT SDK-REPOSITORY-TRANSPORT — Authenticated immutable repository transport | spec | None | SPECIFIED | No recorded commit/test evidence |
| SDK-REPOSITORY-TRANSPORT-R001 Repository transport hydrates code and specification sources from Git Definition — SDK-REPOSITORY-TRANSPORT / SDK-REPOSITORY-TRANSPORT — Authenticated immutable repository transportCanonical requirement and verification source**Repository transport hydrates code and specification sources from Git.** The SDK fetches an authenticated, immutable repository revision and pages its file blobs and tombstones to the graph service's generated IndexRepository operation, letting a contributor hydrate both code and specification sources from their own Git provider without the SDK inventing symbol or semantic identity itself. | Integration tests using a local Git fixture that submit a revision through IndexRepository and confirm the graph service, not the SDK, produces the resulting symbol and specification identities. | requirement | SDK-REPOSITORY-TRANSPORT | VERIFIED | acf470ac4906 tests/test_repository_transport.py:117 |
| SDK-REPOSITORY-TRANSPORT-R002 SDK is the sole path for repository-native codebase hydration Definition — SDK-REPOSITORY-TRANSPORT / SDK-REPOSITORY-TRANSPORT — Authenticated immutable repository transportCanonical requirement and verification source**SDK is the sole path for repository-native codebase hydration.** Every connector performs repository-native codebase hydration through agent-connector-sdk. No separate repository-fetching path outside the SDK is maintained in parallel as an alternative implementation of the same capability. | A dependency and import scan across connector repositories confirming repository hydration calls route only through the SDK's transport package. | requirement | SDK-REPOSITORY-TRANSPORT | SPECIFIED | No recorded commit/test evidence |
| SDK-REPOSITORY-TRANSPORT-R003 Repository ref walk traverses each Git tree once with batched reads Definition — SDK-REPOSITORY-TRANSPORT / SDK-REPOSITORY-TRANSPORT — Authenticated immutable repository transportCanonical requirement and verification source**Repository ref walk traverses each Git tree once with batched reads.** The repository transport's walk phase visits each distinct Git tree only once and reads objects in batches, using a recursive tree listing and a batched object-read call or an equivalent provider batch API, rather than issuing one call per object, since object-tree traversal is a dominant pre-parse cost on a large repository. | A before/after benchmark on public medium and large repository fixtures with cold and warm caches, reporting clone, fetch, walk, and submit timings separately and confirming output and refusal semantics are unchanged. | requirement | SDK-REPOSITORY-TRANSPORT | VERIFIED | 077a14c9f3d3 9a6fe1ddcf26 fad5328aee62 tests/test_repository_refwalk_fastpath.py:39 tests/test_repository_refwalk_fastpath.py:78 |
| SDK-REPOSITORY-TRANSPORT-R004 Repository transport submits bounded, outcome-complete index batches Definition — SDK-REPOSITORY-TRANSPORT / SDK-REPOSITORY-TRANSPORT — Authenticated immutable repository transportCanonical requirement and verification source**Repository transport submits bounded, outcome-complete index batches.** The repository transport authenticates before fetching, pages file blobs and tombstones within the default batch-size bounds, and submits each batch to the graph service's IndexRepository operation with a per-file outcome, so no blob is silently skipped and a batch is accepted only when requested and returned identity, path set, outcomes, and digest all agree. | Tests against synthetic Git fixtures asserting a too-large file or missing per-file outcome is refused and an oversized or misaligned batch cannot produce a complete indexing receipt. | requirement | SDK-REPOSITORY-TRANSPORT | VERIFIED | acf470ac4906 tests/test_repository_transport.py:179 tests/test_repository_transport.py:200 tests/test_repository_transport.py:257 |
| SDK-REPOSITORY-TRANSPORT-R005 Branch-aware transport batches indexing into one call per batch Definition — SDK-REPOSITORY-TRANSPORT / SDK-REPOSITORY-TRANSPORT — Authenticated immutable repository transportCanonical requirement and verification source**Branch-aware transport batches indexing into one call per batch.** Repository ingestion submits one batched IndexRepository call per bounded batch of files rather than issuing a separate round trip for each file, eliminating a per-file request loop as the dominant network cost of a large-repository ingest. | A test asserting the number of IndexRepository calls scales with the number of batches, not the number of files, for a repository fixture exceeding one batch size. | requirement | SDK-REPOSITORY-TRANSPORT | VERIFIED | acf470ac4906 tests/test_repository_transport.py:180 |
| SDK-SOURCE-INGEST SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migration | spec | None | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R001 SDK runner completes on generated ConnectorPack and SourceIngest contracts Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK runner completes on generated ConnectorPack and SourceIngest contracts.** The connector SDK's runner implementation replaces placeholder sink and progress-tracking stubs with the generated ConnectorPack and SourceIngest contracts, tracks progress through SourceCheckpoint, and composes connector configuration from one root structure. | Integration tests run the runner against the generated SourceIngest client and confirm SourceCheckpoint state matches the contract after each page. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R002 SDK drift classifier quarantines incompatible schema changes Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK drift classifier quarantines incompatible schema changes.** The SDK's drift classifier deterministically compares prior and current schema digests. It emits a SchemaDriftReport classifying each change as compatible, needing review, or breaking. Incompatible pages are quarantined without advancing the SourceCheckpoint, per a declared schema evolution policy. | Contract tests feed representative schema changes through the classifier and assert the correct SchemaDriftReport classification and quarantine behavior. | requirement | SDK-SOURCE-INGEST | VERIFIED | ffb9260d7602 tests/test_schema_drift.py:181 |
| SDK-SOURCE-INGEST-R003 SDK records and pauses on proposed schema repairs Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK records and pauses on proposed schema repairs.** When a schema repair mapping is proposed, the connector SDK records the proposal and pauses the affected stream. It never constructs a candidate graph schema, validates instances, performs a shadow ingest, or activates a repair itself. Those steps belong to the graph service. | Integration tests assert that a proposed repair pauses the stream and that the SDK makes no direct schema-activation call. | requirement | SDK-SOURCE-INGEST | VERIFIED | 23f241b07560 ffb9260d7602 tests/test_schema_repair.py:138 |
| SDK-SOURCE-INGEST-R004 SDK runner performs enterprise source synchronization Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK runner performs enterprise source synchronization.** The connector SDK's runner performs enterprise source synchronization through the generated SourceIngest client and manifest presets, and owns connection profiling and data-preparation for enterprise sources that agent-utilities no longer implements directly. | Integration tests exercise full, delta, and reconcile enterprise sync paths through the SDK runner and confirm receipt parity. | requirement | SDK-SOURCE-INGEST | SPECIFIED | 23f241b07560 3735e4434463 4ce2308afe64 55bab2b23000 tests/test_ingest.py:177 tests/test_ingest.py:194 tests/test_ingest.py:222 |
| SDK-SOURCE-INGEST-R005 SDK adapters cover document, conversation, and feed sources Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK adapters cover document, conversation, and feed sources.** The SDK provides typed adapters for web fetch, package-install ingestion, repository transport, and non-model readers. These replace equivalent agent-utilities implementations. Paper-provider search and document retrieval are defined in R005.1 through R005.6. | Adapter parity tests confirm each source type produces typed envelopes and a recoverable SourceCheckpoint through the generated SourceIngest client. | requirement | SDK-SOURCE-INGEST | SPECIFIED | 3735e4434463 45c6c7c1fd37 8e87ef9675f0 db3659c92a3b tests/test_adapters_web_fetch_source_adapter.py:54 tests/test_adapters_web_fetch_source_adapter.py:66 |
| SDK-SOURCE-INGEST-R005.1 Model Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Model.** Frozen `PaperQuery` carries tenant, query, provider IDs, continuation map, page bound and deadline. `PaperRecord` carries canonical ID, revision, title, authors, abstract, publication date, document offers and field provenance. `ProviderReport` carries provider, continuation token, outcome and reason. Outcomes are `ok`, `failed`, `rate_limited` or `refused`. `PaperSearchResult` contains records, reports and completeness (`complete`, `partial`, `failed`). `DocumentReceipt` binds tenant, paper ID, revision, source URL, media type, byte count, SHA-256 and local artifact reference. | SI-09 validates closed fields and malformed identity or limits. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.2 Behavior Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Behavior.** Query each configured independent provider within declared bounds. Merge exact canonical identities and retain every provider reference. Report a failing provider without discarding healthy results. Enforce each provider quota for search and download. Save complete documents atomically under authorized local storage. Fill only missing provider metadata from document content, preserving extraction provenance. Named rules and conflict handling are defined in the plan. | SI-10 covers deduplication, partial failure, quotas, complete downloads and metadata fallback. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.3 Wiring Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Wiring.** Reuse `McpToolSourceAdapter.extract` at `agent_connector_sdk/adapters/mcp_tool.py:118` for certified connector tools. Production sync reaches it from `agent_connector_sdk/runner/worker.py:180`. Add shared paper normalization, provider aggregation and document transfer behind the existing source port. Connector packages register their provider search and document operations through `register_tool_surface` at `agent_connector_sdk/mcp/tool_surface.py:121`. Use `create_async_http_client` at `agent_connector_sdk/http/client.py:97`; provider-specific APIs remain in connector packages. These paper operations and their registration are missing wiring. | SI-11 enters served connector operations, then the existing sync runner and generated SourceIngest boundary. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.4 Refusal Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Refusal.** Closed reasons are `unauthorized`, `unknown_provider`, `invalid_query`, `provider_failed`, `rate_limited`, `deadline_exceeded`, `egress_denied`, `document_unavailable`, `unsupported_media`, `size_exceeded`, `integrity_failed`, `storage_denied` and `parse_failed`. Authentication, tenant and destination checks precede requests or file writes. Report per-provider failures; all-provider failure returns `failed`, never an empty successful search. A failed download exposes no complete artifact. Failed provider pages never advance their accepted checkpoint or imply deletion. | SI-12 checks every refusal class, no unauthorized effects and unchanged failed-stream checkpoints. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.5 Evidence Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Evidence.** Record query digest, tenant, request, provider, canonical paper ID, revision, observed time, schema digest and provider outcome. Every merged field retains its provider or document digest and extraction location. Download evidence includes bytes, digest, quota waits, retry count and final artifact reference. Preserve conflicting values with provenance. Redact credentials, signed URL secrets and local absolute paths. | SI-13 checks provenance, conflict visibility, redaction and deterministic identity across retries. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.6 Hot-path proof Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Hot-path proof.** `tests/test_paper_source_served.py::test_served_search_download_and_sync` starts a real connector using the SDK server factory. Enter the `tools/call` wire method for search and document retrieval against controlled provider HTTP servers. Observe deduplicated metadata, partial failure and complete local bytes. Then run `connector-sync --once` through certified discovery and the generated SourceIngest client. Restart and read the durable checkpoint to prove no duplicate ingestion or skipped failed provider. | SI-14 requires served transport, real provider responses, filesystem bytes and a running graph receipt; helper-only tests are insufficient. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R006 SDK packs own vendor enrichment extraction and write-back Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK packs own vendor enrichment extraction and write-back.** Vendor extractors become SDK manifest presets and adapters. The SDK moves write-back behind a module that calls the graph service's governed contract. The SDK moves repository history and source-adapter enrichment into its repository adapter. | Adapter tests confirm each vendor extractor runs as an SDK preset and that write-back calls route through the governed contract. | requirement | SDK-SOURCE-INGEST | SPECIFIED | b55555566da2 |
| SDK-SOURCE-INGEST-R006.1 SDK ports the Uptime Kuma monitor extractor. Defines the typed vendor-extractor contract Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Uptime Kuma monitor extractor. Defines the typed vendor-extractor contract.** The connector SDK's `vendor_extractors` package defines `VendorExtractor`: a plain `extract(config) -> ChangeSet` function returning `agent_connector_sdk.ingest` `Entity`/`Relationship` records. The `uptime_kuma` extractor is the first ported from `agent_utilities.knowledge_graph.enrichment.extractors.uptime_kuma` onto this contract. | A unit test feeds a fake Uptime client through `extract` and asserts the returned `ChangeSet` carries the expected entities. A contract test registers and looks up the extractor by category. | requirement | SDK-SOURCE-INGEST | VERIFIED | 10376b1e9728 1cbd1de01d83 36d2c92e439c 3735e4434463 9511ab38c04c tests/test_vendor_extractors_contract.py:30 tests/test_vendor_extractors_contract.py:40 tests/test_vendor_extractors_contract.py:51 tests/test_vendor_extractors_uptime_kuma.py:23 tests/test_vendor_extractors_uptime_kuma.py:53 |
| SDK-SOURCE-INGEST-R006.2 SDK ports the Ansible Automation inventory and job extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Ansible Automation inventory and job extractor.** The `ansible` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.ansible` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 9511ab38c04c bd6e0d836c92 tests/test_vendor_extractors_ansible.py:23 tests/test_vendor_extractors_ansible.py:46 tests/test_vendor_extractors_ansible.py:55 tests/test_vendor_extractors_ansible.py:60 tests/test_vendor_extractors_ansible.py:69 |
| SDK-SOURCE-INGEST-R006.3 SDK ports the Caddy reverse-proxy route extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Caddy reverse-proxy route extractor.** The `caddy` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.caddy` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 9511ab38c04c tests/test_vendor_extractors_caddy.py:38 tests/test_vendor_extractors_caddy.py:56 tests/test_vendor_extractors_caddy.py:61 tests/test_vendor_extractors_caddy.py:66 tests/test_vendor_extractors_caddy.py:75 |
| SDK-SOURCE-INGEST-R006.4 SDK ports the Home Assistant entity and scene extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Home Assistant entity and scene extractor.** The `home_assistant` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.home_assistant` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 9511ab38c04c tests/test_vendor_extractors_home_assistant.py:23 tests/test_vendor_extractors_home_assistant.py:53 tests/test_vendor_extractors_home_assistant.py:60 tests/test_vendor_extractors_home_assistant.py:65 tests/test_vendor_extractors_home_assistant.py:74 |
| SDK-SOURCE-INGEST-R006.5 SDK ports the ArchiMate model element extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the ArchiMate model element extractor.** The `archimate` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.archimate` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 36d2c92e439c 3735e4434463 tests/test_vendor_extractors_archimate.py:27 tests/test_vendor_extractors_archimate.py:57 tests/test_vendor_extractors_archimate.py:72 tests/test_vendor_extractors_archimate.py:77 tests/test_vendor_extractors_archimate.py:89 |
| SDK-SOURCE-INGEST-R006.6 SDK ports the Kafka topic and cluster extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Kafka topic and cluster extractor.** The `kafka` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.kafka` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 36d2c92e439c 3735e4434463 tests/test_vendor_extractors_kafka.py:27 tests/test_vendor_extractors_kafka.py:52 tests/test_vendor_extractors_kafka.py:61 tests/test_vendor_extractors_kafka.py:66 tests/test_vendor_extractors_kafka.py:78 |
| SDK-SOURCE-INGEST-R006.7 SDK ports the Salesforce CRM record extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Salesforce CRM record extractor.** The `salesforce` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.salesforce` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 36d2c92e439c 3735e4434463 tests/test_vendor_extractors_salesforce.py:26 tests/test_vendor_extractors_salesforce.py:59 tests/test_vendor_extractors_salesforce.py:64 tests/test_vendor_extractors_salesforce.py:73 |
| SDK-SOURCE-INGEST-R006.8 SDK ports the Grafana LGTM observability-stack extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Grafana LGTM observability-stack extractor.** The `lgtm` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.lgtm` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 bbf11894fed5 tests/test_vendor_extractors_lgtm.py:31 tests/test_vendor_extractors_lgtm.py:57 tests/test_vendor_extractors_lgtm.py:72 tests/test_vendor_extractors_lgtm.py:77 tests/test_vendor_extractors_lgtm.py:92 |
| SDK-SOURCE-INGEST-R006.9 SDK ports the Microsoft 365 mail, calendar, and Teams extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Microsoft 365 mail, calendar, and Teams extractor.** The `microsoft` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.microsoft` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 bbf11894fed5 tests/test_vendor_extractors_microsoft.py:27 tests/test_vendor_extractors_microsoft.py:60 tests/test_vendor_extractors_microsoft.py:65 tests/test_vendor_extractors_microsoft.py:77 |
| SDK-SOURCE-INGEST-R006.10 SDK ports the Technitium DNS zone and record extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Technitium DNS zone and record extractor.** The `technitium_dns` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.technitium_dns` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 bbf11894fed5 tests/test_vendor_extractors_technitium_dns.py:27 tests/test_vendor_extractors_technitium_dns.py:58 tests/test_vendor_extractors_technitium_dns.py:63 tests/test_vendor_extractors_technitium_dns.py:75 |
| SDK-SOURCE-INGEST-R006.11 SDK ports the Portainer container and stack extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Portainer container and stack extractor.** The `portainer` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.portainer` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 e4f6426897ba tests/test_vendor_extractors_portainer.py:36 tests/test_vendor_extractors_portainer.py:76 tests/test_vendor_extractors_portainer.py:81 tests/test_vendor_extractors_portainer.py:93 |
| SDK-SOURCE-INGEST-R006.12 SDK ports the Emerald Exchange market extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Emerald Exchange market extractor.** The `emerald` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.emerald` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 e4f6426897ba tests/test_vendor_extractors_emerald.py:45 tests/test_vendor_extractors_emerald.py:70 tests/test_vendor_extractors_emerald.py:80 tests/test_vendor_extractors_emerald.py:85 |
| SDK-SOURCE-INGEST-R006.13 SDK ports the Mealie recipe and meal-plan extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Mealie recipe and meal-plan extractor.** The `mealie` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.mealie` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 e4f6426897ba tests/test_vendor_extractors_mealie.py:33 tests/test_vendor_extractors_mealie.py:63 tests/test_vendor_extractors_mealie.py:78 tests/test_vendor_extractors_mealie.py:83 tests/test_vendor_extractors_mealie.py:98 |
| SDK-SOURCE-INGEST-R006.14 SDK ports the Keycloak realm, client, and identity extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Keycloak realm, client, and identity extractor.** The `keycloak` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.keycloak` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 bd6e0d836c92 tests/test_vendor_extractors_keycloak.py:31 tests/test_vendor_extractors_keycloak.py:58 tests/test_vendor_extractors_keycloak.py:72 tests/test_vendor_extractors_keycloak.py:77 tests/test_vendor_extractors_keycloak.py:92 |
| SDK-SOURCE-INGEST-R006.15 SDK ports the Odoo ERP record extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Odoo ERP record extractor.** The `odoo` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.odoo` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 bd6e0d836c92 tests/test_vendor_extractors_odoo.py:27 tests/test_vendor_extractors_odoo.py:55 tests/test_vendor_extractors_odoo.py:60 tests/test_vendor_extractors_odoo.py:72 |
| SDK-SOURCE-INGEST-R006.16 SDK ports the Nextcloud file and share extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Nextcloud file and share extractor.** The `nextcloud` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.nextcloud` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 bd6e0d836c92 tests/test_vendor_extractors_nextcloud.py:105 tests/test_vendor_extractors_nextcloud.py:41 tests/test_vendor_extractors_nextcloud.py:69 tests/test_vendor_extractors_nextcloud.py:88 tests/test_vendor_extractors_nextcloud.py:93 |
| SDK-SOURCE-INGEST-R006.17 SDK ports the wger workout and exercise extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the wger workout and exercise extractor.** The `wger` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.wger` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 10376b1e9728 3735e4434463 a41cc47d27d3 tests/test_vendor_extractors_wger_okta_twenty.py:63 tests/test_vendor_extractors_wger_okta_twenty.py:90 |
| SDK-SOURCE-INGEST-R006.18 SDK ports the Okta identity and directory extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Okta identity and directory extractor.** The `okta` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.okta` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 7f190c51f090 a41cc47d27d3 tests/test_vendor_extractors_wger_okta_twenty.py:122 tests/test_vendor_extractors_wger_okta_twenty.py:98 |
| SDK-SOURCE-INGEST-R006.19 SDK ports the Twenty CRM record extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Twenty CRM record extractor.** The `twenty` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.twenty` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 7f190c51f090 a41cc47d27d3 tests/test_vendor_extractors_wger_okta_twenty.py:130 tests/test_vendor_extractors_wger_okta_twenty.py:167 |
| SDK-SOURCE-INGEST-R006.20 SDK ports the RSA Archer GRC record extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the RSA Archer GRC record extractor.** The `archer` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.archer` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 e626b457bb1d tests/test_vendor_extractors_archer_infra_a2a.py:30 tests/test_vendor_extractors_archer_infra_a2a.py:52 |
| SDK-SOURCE-INGEST-R006.21 SDK ports the Infrastructure inventory extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Infrastructure inventory extractor.** The `infra` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.infra` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 e626b457bb1d tests/test_vendor_extractors_archer_infra_a2a.py:60 tests/test_vendor_extractors_archer_infra_a2a.py:84 |
| SDK-SOURCE-INGEST-R006.22 SDK ports the A2A agent-registry extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the A2A agent-registry extractor.** The `a2a` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.a2a` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 e626b457bb1d tests/test_vendor_extractors_archer_infra_a2a.py:118 tests/test_vendor_extractors_archer_infra_a2a.py:92 |
| SDK-SOURCE-INGEST-R006.23 SDK ports the Grafana dashboard extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Grafana dashboard extractor.** The `grafana` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.grafana` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 1cbd1de01d83 3735e4434463 tests/test_vendor_extractors_grafana_leanix_erpnext.py:30 tests/test_vendor_extractors_grafana_leanix_erpnext.py:63 |
| SDK-SOURCE-INGEST-R006.24 SDK ports the LeanIX enterprise-architecture factsheet extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the LeanIX enterprise-architecture factsheet extractor.** The `leanix` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.leanix` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 1cbd1de01d83 3735e4434463 tests/test_vendor_extractors_grafana_leanix_erpnext.py:103 tests/test_vendor_extractors_grafana_leanix_erpnext.py:71 |
| SDK-SOURCE-INGEST-R006.25 SDK ports the ERPNext record extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the ERPNext record extractor.** The `erpnext` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.erpnext` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 1cbd1de01d83 3735e4434463 tests/test_vendor_extractors_grafana_leanix_erpnext.py:111 tests/test_vendor_extractors_grafana_leanix_erpnext.py:152 |
| SDK-SOURCE-INGEST-R006.26 SDK ports the ServiceNow ITSM record extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the ServiceNow ITSM record extractor.** The `servicenow` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.servicenow` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 9d8b3f7f89f1 tests/test_vendor_extractors_servicenow_ciso_social.py:38 tests/test_vendor_extractors_servicenow_ciso_social.py:68 |
| SDK-SOURCE-INGEST-R006.27 SDK ports the CISO Assistant compliance extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the CISO Assistant compliance extractor.** The `ciso_assistant` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.ciso_assistant` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 9d8b3f7f89f1 tests/test_vendor_extractors_servicenow_ciso_social.py:111 tests/test_vendor_extractors_servicenow_ciso_social.py:76 |
| SDK-SOURCE-INGEST-R006.28 SDK ports the social-platform extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the social-platform extractor.** The `social` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.social` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 9d8b3f7f89f1 tests/test_vendor_extractors_servicenow_ciso_social.py:119 tests/test_vendor_extractors_servicenow_ciso_social.py:143 tests/test_vendor_extractors_servicenow_ciso_social.py:152 |
| SDK-SOURCE-INGEST-R006.29 SDK ports the ARIS process-model extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the ARIS process-model extractor.** The `aris` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.aris` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 10376b1e9728 3735e4434463 tests/test_vendor_extractors_aris_egeria_camunda.py:30 tests/test_vendor_extractors_aris_egeria_camunda.py:54 |
| SDK-SOURCE-INGEST-R006.30 SDK ports the Egeria governance and glossary extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Egeria governance and glossary extractor.** The `egeria` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.egeria` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 10376b1e9728 3735e4434463 tests/test_vendor_extractors_aris_egeria_camunda.py:62 tests/test_vendor_extractors_aris_egeria_camunda.py:93 |
| SDK-SOURCE-INGEST-R006.31 SDK ports the Camunda process extractor Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ports the Camunda process extractor.** The `camunda` vendor enrichment extractor moves from `agent_utilities.knowledge_graph.enrichment.extractors.camunda` onto the `VendorExtractor` contract defined in SDK-SOURCE-INGEST-R006.1, emitting a `ChangeSet` of `Entity`/`Relationship` records instead of agent-utilities' `ExtractionBatch`. | A unit test feeds a fake client through the ported `extract` and asserts the returned `ChangeSet` matches the agent-utilities extractor's node/edge shape for representative input. | requirement | SDK-SOURCE-INGEST | VERIFIED | 10376b1e9728 3735e4434463 tests/test_vendor_extractors_aris_egeria_camunda.py:101 tests/test_vendor_extractors_aris_egeria_camunda.py:122 |
| SDK-SOURCE-INGEST-R007 Drift gate runs inside the SDK connector-sync runner Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Drift gate runs inside the SDK connector-sync runner.** The schema-drift gate, covering classification, shaping, and reporting, runs inside the connector SDK's sync runner between draining and applying a page, rather than in agent-utilities. Candidate schema rendering, the contract store, and activation live in epistemic-graph, not the SDK. | Integration tests confirm the drift gate executes within the SDK runner's drain and apply sequence. Tests also confirm that no SHACL rendering or activation call originates from the SDK. | requirement | SDK-SOURCE-INGEST | VERIFIED | ffb9260d7602 tests/test_schema_drift.py:206 |
| SDK-SOURCE-INGEST-R008 Connectors ingest occurrence and weather observations Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Connectors ingest occurrence and weather observations.** The connector SDK includes adapters that ingest GBIF and iNaturalist occurrence records as OrganismObservation, NOAA GHCN/ISD and Open-Meteo data as WeatherObservation, and NOAA storm events as WeatherEvent occurring in a WeatherSystem, with weather stations represented as Place located in a Region. | Adapter tests confirm each source produces the correct typed records and place/region relationships. | requirement | SDK-SOURCE-INGEST | VERIFIED | 289aadb634d8 3735e4434463 83b7dd3f33eb tests/test_earth_observation_records.py:38 tests/test_earth_observation_records.py:54 tests/test_earth_observation_records.py:66 |
| SDK-SOURCE-INGEST-R009 Taxonomy connector ingests NCBI/GBIF taxa as kg:Taxon Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Taxonomy connector ingests NCBI/GBIF taxa as kg:Taxon.** A taxonomy connector ingests NCBI Taxonomy and GBIF backbone taxa as kg:Taxon individuals carrying rank, parent, scientific name, NCBI and GBIF identifiers, and a term CURIE, validated against the world_model-v1 TaxonShape, with bounded delta synchronization. | Contract tests validate ingested taxa against TaxonShape and confirm delta synchronization stays within its configured bound. | requirement | SDK-SOURCE-INGEST | VERIFIED | 3735e4434463 bfe88b9d8521 ff4c1aaafc8a tests/test_taxonomy_records.py:29 tests/test_taxonomy_records.py:40 tests/test_taxonomy_records.py:50 |
| SDK-SOURCE-INGEST-R010 SDK ships the ingest worker runner `run_ingest_worker` (unblocks `EG-INGEST-WORKER-R001.14`) Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ships the ingest worker runner `run_ingest_worker` (unblocks `EG-INGEST-WORKER-R001.14`).** New module `agent_connector_sdk/runner/ingest_worker.py` holds one function `run_ingest_worker`. It asks the engine, through the generated client, for admission, lane floors and routing, claims a job, runs the job body with the existing source-effect runners, acks success or failure, and commits only after the ack (at-least-once). The worker holds no scheduling policy of its own: no priority, lane, concurrency or retry-schedule constants; every such value comes from the engine reply. EG holds no source credentials. | `tests/runner/test_ingest_worker.py` with a fake client asserts ack follows execution, no ack when the body is killed, and that a refused admission or an absent lane floor makes the worker wait or exit rather than choose a value. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R011 SDK ships the `ingest-worker` command (unblocks `EG-INGEST-WORKER-R001.15`) Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**SDK ships the `ingest-worker` command (unblocks `EG-INGEST-WORKER-R001.15`).** `pyproject.toml` gains console script `ingest-worker = agent_connector_sdk.runner.ingest_worker_cli:main` with `--workers` and `--engine-endpoint`. The worker count is the engine's admitted answer (default autosize is requested from the engine, not computed in the SDK). The command exits 2 before claiming anything when the engine is unreachable or lacks the task-queue methods, and drains on SIGTERM. | `tests/runner/test_ingest_worker_cli.py` asserts exit code 2 against an unreachable engine, exit 2 on a missing task-queue method, and a clean drain on SIGTERM. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R012 Platform reads and searches use declared backend fallback chains Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Platform reads and searches use declared backend fallback chains.** Each platform capability exposes its ordered backend policy, selected backend and observed health. SDK applies mechanical fallback within that policy; EG retains semantic planning and decisions. R005 owns source ingestion and independent paper-provider aggregation. This row owns alternative backends for one equivalent read/search request. | SI-15 through SI-20 require typed contracts and served dispatcher acceptance. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R012.1 Model Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Model.** Closed `PlatformCapability` declares platform, channel, operation, schema revision, required scope and ordered `BackendPolicy` entries. `PlatformRequest` binds authenticated tenant, principal, connector, target or query, limits and request identity. `PlatformResult` contains outcome, records, selected backend, ordered attempts and channel status. Each attempt records backend, outcome, typed reason, timing and redacted provenance. The plan defines fields and bounds. | SI-15 validates inventory, request, result and separate read/search status. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R012.2 Behavior Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Behavior.** `ordered_equivalent_fallback` tries only admitted, equivalent backends in declared order. Apply one total deadline and attempt budget across transport retries and fallback. Stop on the first valid response, including an empty successful search. Never convert a failed chain into empty success. Status identifies the actual winning backend and observed failures for that capability. | SI-16 proves bounded order, empty success, cancellation and backend status. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R012.3 Wiring Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Wiring.** Extend the existing adapter package with shared typed fallback composition. Connector registrars use `register_tool_surface` at `agent_connector_sdk/mcp/tool_surface.py:121`. Served read/search handlers call `dispatch_async` at `agent_connector_sdk/mcp/action_dispatch.py:194` against that composition. Reuse governed HTTP and `McpToolSourceAdapter.extract` at `agent_connector_sdk/adapters/mcp_tool.py:118`. The platform inventory, fallback client methods, typed response and connector registration remain missing wiring. | SI-17 traces tools/call through registration, actual dispatcher, backend HTTP and the receiving SDK client. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R012.4 Refusal Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Refusal.** Reasons are `invalid_request`, `unsupported_capability`, `unauthorized`, `no_backend`, `chain_exhausted`, `deadline_exceeded`, `cancelled`, `rate_limited`, `egress_denied`, `trust_failed`, `invalid_response` and `not_found`. No backend call occurs without authenticated scope and connector policy. Authorization or trust failures stop the chain; changing backend must never weaken access. Retain every attempted failure when all eligible backends fail. | SI-18 proves terminal reasons, zero denied dispatch and no failed-page checkpoint advance. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R012.5 Evidence Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Evidence.** Bind each result to request digest, tenant, connector, platform, operation, policy revision and schema digest. Record actual backend, attempt sequence, timestamps, health freshness and content provenance. Status is scoped to the capability and caller authority; it is never evidence that every platform works. Redact credentials, signed URL secrets, raw queries and private destinations. | SI-19 proves provenance, status isolation, freshness and secret redaction. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R012.6 Hot-path proof Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Hot-path proof.** `tests/test_platform_fallback_served.py::test_served_dispatch_fallback_and_status` enters the `tools/call` wire method on an SDK server. Controlled local HTTP backends make the first backend fail and the second succeed. Observe dispatcher traversal, ordered attempts, selected backend and current channel status through the client. All-failed, unsupported and unauthorized cases return typed failures; unauthorized and unsupported requests dispatch nothing. | SI-20 requires real served dispatch and backend request evidence; helper-only tests cannot satisfy acceptance. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R001.1 Model Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Model.** Extend SyncTarget at `agent_connector_sdk/runner/syncing.py:40` with stage descriptors. Bind stage ID, tenant, source, manifest digest, dependencies and admitted concurrency. Keep generated SourceCheckpoint as the only progress token type. | Reject duplicate streams, cycles, missing authority and unbounded concurrency before extraction. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R001.2 Behavior Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Behavior.** Run independent admitted stages concurrently under admitted limits. Fetch strictly after each accepted stage progress token; dependent stages wait for required durable receipts. Only matching receipts advance that stage. Failed stages remain resumable. | Overlap two independent stages; preserve dependency order when one stage fails. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R001.3 Wiring Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Wiring.** Extend the sequential preset loop at `agent_connector_sdk/runner/worker.py:150`, called by ConnectorWorker.run_once. Attach stage execution to _sync at line 180 and sync_stream at `agent_connector_sdk/runner/syncing.py:200`. Concurrent stage composition has no production caller today. | Enter connector-sync --once; observe worker execution, generated status reads and accepted commits. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R001.4 Refusal Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Refusal.** Refuse identity collisions, cycles, absent limits and mismatched receipts before affected extraction or advancement. Cancellation stops new work. Ambiguous commits require durable readback before retry. Failed stages cannot inherit another stage's progress token. | Inject scope mismatch, timeout after commit, cancellation and failed dependencies; require no skipped or duplicate accepted records. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R001.5 Evidence Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Evidence.** Reports bind run, stage, dependency receipts, previous progress token, offered progress token and accepted receipt. Distinguish complete, failed, blocked and cancelled stages. Aggregate success requires all required stages. Logs contain no credentials or private payloads. | Compare reports with durable status after restart and check redaction. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R001.6 Hot-path proof Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Hot-path proof.** The entry point test `tests/test_source_stages_served.py::test_concurrent_stage_restart` enters connector-sync --once with registered source tools and a running graph. Kill one stage after another commits, restart, and read accepted records through the generated client. Helper-only tests cannot establish acceptance. | Prove overlapping requests, exact resume boundaries, no refetch of accepted events and no duplicate durable effects. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R004.1 Model Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Model.** Extend SourceAdapter at `agent_connector_sdk/ports/source_adapter.py:21` with a typed database execution boundary. Bind engine-approved relational operation or SQL, dialect, parameters, authority and snapshot identity. Results expose bounded chunks and mandatory terminal completion or typed failure. | Validate parameter types, dialect, limits, snapshot and authority before database calls. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R004.2 Behavior Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Behavior.** Render approved operations into native parameterized SQL and execute through the driver. Stream under fixed row, byte and queue limits with backpressure. Never infer query semantics or buffer the whole result. Only terminal completion establishes query success. | Run parameterized native SQL; measure memory across increasing row counts under unchanged limits. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R004.3 Wiring Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Wiring.** Create database methods in the existing adapter package behind connector registration. dispatch_async at `agent_connector_sdk/mcp/action_dispatch.py:194` calls them. McpToolSourceAdapter.extract at `agent_connector_sdk/adapters/mcp_tool.py:118` feeds sync_stream at `agent_connector_sdk/runner/syncing.py:200`. Native SQL execution is absent from this path. | Trace tools/call to the real driver and connector-sync to generated receipts without mocking dispatch. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R004.4 Refusal Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Refusal.** Return typed unsupported_dialect, invalid_query, unauthorized, query_failed, limit_exceeded or cancelled outcomes. Failure after chunks remains failure with an incomplete query identity. Emit no successful terminal result or failed-chunk checkpoint. Previously accepted pages retain explicit durable receipts. | Inject failure after three chunks; require visible failure, closed database handle and no silent partial success. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R004.5 Evidence Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Evidence.** Bind evidence to operation and parameter digests, dialect, schema, snapshot, chunk sequence and terminal outcome. Record rows, bytes, queue high-water mark and peak resident memory. Redact SQL literals, parameter values and credentials. | Match chunk bounds and receipts to the query; check redaction on success and failure. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R004.6 Hot-path proof Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Hot-path proof.** The entry point test `tests/test_sql_source_served.py::test_native_sql_stream_and_failure` calls a registered connector through tools/call with an actual local SQL database. Run certified sync and inject driver failure through the same connector. Measure memory in separate fixed-limit processes. | Require correct rows, native parameter binding, bounded memory, terminal failure and durable checkpoint agreement. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.7 Model Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Model.** Reuse deterministic extraction at `agent_connector_sdk/vendor_extractors/social.py:160`. Add typed file requests and bookmark envelopes. Bind authorized file, digest, export revision, bookmark ID, text, hashtags, URLs, tool mentions and local domain category. | Validate identities, supported export shapes and local vocabulary revision. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.8 Behavior Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Behavior.** Read bounded JSON records and extract metadata from stored content and a versioned local mapping. Preserve source offsets and raw values alongside normalization. Unknown tools and domains remain unknown. Identical bytes and bookmark identities produce stable records without external calls. | Import duplicate and unknown-domain fixtures; require stable IDs, deterministic metadata and zero network or model requests. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.9 Wiring Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Wiring.** Create the JSON reader in the adapter package and register it through certified source discovery. Reuse social.extract at `agent_connector_sdk/vendor_extractors/social.py:160`. ConnectorWorker._sync at `agent_connector_sdk/runner/worker.py:180` calls it through sync_stream. The reader and domain categorizer have no production caller today. | Enter connector-sync --once with on-disk JSON; observe discovery, extraction and generated ingestion. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.10 Refusal Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Refusal.** Refuse malformed JSON, unsupported exports, absent IDs, oversized records and unauthorized paths. Never fetch embedded URLs or execute source instructions. Report invalid records explicitly and retain the failed page progress token. An empty ChangeSet must not hide malformed input. | Prove visible failures, zero outbound calls and unchanged checkpoints for malformed input and path escapes. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.11 Evidence Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Evidence.** Records bind file digest, record position, source identity and mapping revision. Each extracted field carries its source location or mapping key. Reports distinguish unknown metadata from rejected input and redact private paths. | Read accepted provenance from the graph and reproduce metadata from identical bytes. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.12 Hot-path proof Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Hot-path proof.** The entry point test `tests/test_bookmark_source_served.py::test_offline_bookmark_import` runs connector-sync --once with the registered file connector and running graph. Use JSON containing hashtags, URLs, tools and domains. Deny all network egress except test graph transport. | Assert exact metadata, zero external-service attempts, stable reimport and no advancement for rejected pages. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.13 Model Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Model.** Extend EventFeedSourceAdapter at `agent_connector_sdk/adapters/event_feed.py:89` with a typed chain-log descriptor. Bind chain ID, contract, decoder revision, block range, transaction hash and log index. Trades carry exact asset identifiers, integer amounts, scales, side and block provenance. | Validate chain, contract, signature, decoder revision and exact numeric representation without float rounding. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.14 Behavior Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Behavior.** Read bounded transaction logs through JSON-RPC and decode only the declared schema. Event identity uses chain, transaction and log index. Preserve block hash and raw-log digest. Source schema fixes field meanings; semantic joins and graph interpretation remain engine-owned. | Decode known logs into exact typed trades; preserve identity across duplicate delivery. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.15 Wiring Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Wiring.** Create a connector-owned JSON-RPC log method behind dispatch_async at `agent_connector_sdk/mcp/action_dispatch.py:194`. Attach results to EventFeedSourceAdapter.extract at `agent_connector_sdk/adapters/event_feed.py:133`, called by ConnectorWorker._sync. The adapter lacks the chain decoder and registered node caller. | Trace registered tools/call through governed HTTP to a controlled JSON-RPC endpoint and generated ingestion. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.16 Refusal Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Refusal.** Reject undecodable logs, unknown signatures, wrong chain or contract, malformed RPC replies and inconsistent block hashes. Report typed reasons and emit no invalid trades. The affected page never advances. Unresolved chain changes require engine reconciliation, never silent progress token rewriting. | Inject malformed logs, RPC errors, wrong identity and changed block hashes; require visible rejection and zero invalid durable trades. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.17 Evidence Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Evidence.** Bind records to chain, contract, block number/hash, transaction, log index, decoder revision and raw-log digest. Rejection evidence retains safe identity and reason. Credentials, raw error bodies and private endpoints never enter receipts or logs. | Compare graph readback with RPC requests and decoder input digests; check redaction. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.18 Hot-path proof Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Hot-path proof.** The entry point test `tests/test_chain_source_served.py::test_rpc_decode_and_refuse` runs connector-sync --once through a registered connector and real local JSON-RPC server. Ingest valid trades into a running graph, then serve undecodable events through the same path. Decoder-only tests cannot establish acceptance. | Observe bounded ranges, exact trades, rejection reports and durable checkpoint refusal. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.19 Model Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Model.** Extend SourceAdapter at `agent_connector_sdk/ports/source_adapter.py:21` with workspace requests and per-file outcomes. Bind authorized root, relative path, digest, format and parser revision. Support PDF, DOCX, XLSX, plain text and declared transcript formats with location-bearing text or cells. | Validate formats and bounds; visibly refuse unsupported legacy or undeclared formats. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.20 Behavior Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Behavior.** Read independent files concurrently under admitted task, byte, page and deadline limits. Preserve deterministic path order independent of completion order. Read bytes without mutation and emit per-file success or failure. Run no macros, embedded instructions or external resource fetches. | Read all five format families from one folder; measure overlap and bounds while preserving bytes and locations. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.21 Wiring Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Wiring.** Create the workspace reader in the adapter package behind a registered connector method. dispatch_async at `agent_connector_sdk/mcp/action_dispatch.py:194` invokes it. McpToolSourceAdapter.extract at `agent_connector_sdk/adapters/mcp_tool.py:118` attaches results to ConnectorWorker._sync. This reader and its caller are absent today. | Trace real tools/call into on-disk parsers and certified sync into generated ingestion. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.22 Refusal Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Refusal.** Return typed unsupported_type, invalid_content, parser_unavailable, access_denied, limit_exceeded or cancelled outcomes per file. Mixed results report partial completion. Refuse traversal and symlink escape before opening. Unsupported files cannot become empty successful content or advance their progress token. | Test unsupported suffix, mismatched magic, broken documents, parser absence, escape and cancellation beside successful files. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.23 Evidence Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Evidence.** Record relative identity, format, parser revision, digest, source locations, bytes and elapsed time per file. Aggregate evidence includes observed concurrency and failure reasons. Exclude private absolute paths and credentials. Content remains source material rather than executable instructions. | Compare before/after hashes; match graph provenance to successful files. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R005.24 Hot-path proof Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Hot-path proof.** The entry point test `tests/test_workspace_read_served.py::test_parallel_formats_and_refusals` calls the registered reader through tools/call with real on-disk fixtures. Run connector-sync with a running graph. Observe parallel reads, one success per format and visible unsupported-type failure through the client. | Require exact locations, bounded peak tasks, immutable inputs and independent checkpoint behavior for failed files. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R006.32 Model Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Model.** Extend vendor extraction with a shared typed enterprise operation contract. Existing readers are `agent_connector_sdk/vendor_extractors/odoo.py:74` and `agent_connector_sdk/vendor_extractors/erpnext.py:91`. Bind operation, contract revision, company scope, parameters and authority. Separate backend connectors advertise exact supported operations and schemas. | Validate common schemas and distinguish unsupported operations from empty successful reads. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R006.33 Behavior Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Behavior.** A workflow keeps the same operation and result contract when its configured backend connector changes. Map operations mechanically; preserve identifiers, amount scales, currencies and timestamps. Never select workflows or backends. Effects retain governed approval, preconditions and idempotency. | Swap two separately registered connectors without changing workflow requests or result handling; compare normalized outcomes. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R006.34 Wiring Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Wiring.** Create the shared operation port beside vendor extractors. Registrars at `agent_connector_sdk/mcp/tool_surface.py:121` expose methods through dispatch_async at `agent_connector_sdk/mcp/action_dispatch.py:194`. Reads feed the existing runner; writes attach to governed write-back. The interchangeable operation caller is absent today. | Enter both connectors through tools/call; trace backend requests and governed effects. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R006.35 Refusal Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Refusal.** Return unsupported_operation before source access when the selected connector lacks an operation. Refuse schema mismatch, missing company scope, denied authority and invalid units. Never silently switch connectors, emulate success or route writes through reads. | Request unsupported operations and denied writes; assert typed reasons and zero effects. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R006.36 Evidence Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Evidence.** Bind responses to contract revision, operation digest, company scope, selected connector and backend receipt. Preserve approval and idempotency evidence for effects. Reports expose capability gaps without credentials or claims of universal backend equivalence. | Compare connector receipts against identical workflow contracts; check redacted failure evidence. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R006.37 Hot-path proof Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Hot-path proof.** The entry point test `tests/test_enterprise_adapters_served.py::test_backend_swap_and_unsupported` serves two distinct connectors through real registration and dispatch. Local backend services record requests and effects. Identical workflow-shaped requests succeed on both; unsupported and unapproved operations refuse before effects. | Require wire calls, stable schema, backend identity evidence and zero refused-operation requests. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R004.7 Model Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Model.** Planned SqlQuerySourceClient.execute_approved_query accepts the generated ApprovedSourceQuery and an optional bound continuation. It returns one SqlQueryPage. Import EG-FEDERATED-QUERY-R085 records unchanged; define only SDK delivery envelopes in `agent_connector_sdk/adapters/sql_source.py`. No copied approval DTO or local lease authority is permitted. | `tests/test_approved_sql_source.py::test_generated_descriptor_and_page_contract` checks exact producer fields, page invariants and continuation bindings. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R004.8 Behavior Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Behavior.** The client calls VerifySourceQueryApproval before opening the native driver, before each published chunk and before completion. Match tenant, owner, actor, source, schema, snapshot and all descriptor digests. Bind approved parameters natively without rewriting SQL. Enforce every approved resource bound with backpressure. | `tests/test_approved_sql_source.py::test_verification_boundaries_and_bounds` checks start/chunk/complete order, immutable parameters, read-only execution and bounded buffers. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R004.9 Wiring Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Wiring.** Register execute_approved_query and cancel_approved_query through `agent_connector_sdk/mcp/tool_surface.py:121`. dispatch_async at `agent_connector_sdk/mcp/action_dispatch.py:194` calls the planned client. McpToolSourceAdapter.extract at `agent_connector_sdk/adapters/mcp_tool.py:118` consumes bounded pages through the existing worker. These receiving methods and generated approval methods are absent today. | `tests/test_approved_sql_source_served.py::test_registered_approval_receiver` traces the tools/call wire method through actual registration, verification and driver access. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R004.10 Refusal Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Refusal.** Preserve EG-FEDERATED-QUERY-R085.7 error reasons after partial output. Expiry, revocation, changed bindings, unavailable verification, cancellation or driver failure closes the handle and forbids further chunks. No completion or failed-page checkpoint follows. Continuations cannot authorize new callers or hide lost execution state. | `tests/test_approved_sql_source_served.py::test_revocation_and_failure_after_chunks` proves explicit terminal failure after three chunks and zero unauthorized effects. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R004.11 Evidence Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Evidence.** Each page binds approval/query identities, query digest, execution identity, sequence, source/schema/snapshot and cumulative rows/bytes. Record fresh verification receipts, queue peaks and resident memory. Preserve accepted SourceCheckpoint receipts. Redact SQL literals, parameter values and credentials; local execution handles establish no durable authority. | `tests/test_approved_sql_source.py::test_page_provenance_and_redaction` compares immutable bindings, verification receipts, terminal totals and redacted failures. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R004.12 Hot-path proof Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Hot-path proof.** `tests/test_approved_sql_source_served.py::test_engine_approval_to_native_driver` uses the real EG approval and verification entry points. It calls the registered SDK receiver against an actual SQL database and generated SourceIngest. Prove native parameters, bounded memory, revocation, cancellation, failure and checkpoint agreement. | Use real authenticated dispatch on both sides. Mocks of approval, driver, dispatcher or durable ingestion cannot close acceptance. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R013 Versioned harness-session sync Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Versioned harness-session sync.** The existing connector-sync --once entry discovers every source in the approved harness manifest. Each generated SourceIngest preserves harness, session, and tenant identity. It preserves source revision, cursor, coverage, and refusal state. Retries deduplicate, restarts resume, and failures remain visible. | HS-13.6 proves full-manifest discovery, SourceIngest receipts, EG readback, and WEBUI-APPS-R006.4 browsing. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R013.1 Model Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Model.** Define a closed, versioned manifest. Each entry names harness, owner repository, registered operation, revision, authority, identity schema, and cursor. Missing or unverified operations cannot run. Owners approve the complete supported list; examples do not establish completeness. | HS-13.1 rejects duplicate entries, unknown versions, missing owners, and unbound operations before source calls. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R013.2 Behavior Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Behavior.** First run visits every manifest entry. Identity binds tenant, harness, and source session. Source revision and cursor make retries idempotent. Restart resumes accepted receipts. One source denial remains visible without hiding healthy sources. | HS-13.2 proves full coverage, deduplication, restart, and per-source progress. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R013.3 Wiring Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Wiring.** Reuse `connector-sync --once` and runner `agent_connector_sdk/runner/worker.py:180` (`_sync`). Route extraction through `agent_connector_sdk/adapters/mcp_tool.py:118` (`McpToolSourceAdapter.extract`) and receipt submission through `agent_connector_sdk/ingest/channel.py:46` (`SourceIngestChannel.submit`), also called by `agent_connector_sdk/sinks/epistemic_graph.py:105`. EG owns indexing; WEBUI-APPS-R006.4 consumes GraphOS browse/search. No session-specific operation is claimed today. | HS-13.3 observes the real runner, adapter, and generated-client calls. Owners must publish exact EG and GraphOS IDs before implementation. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R013.4 Refusal Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Refusal.** Refuse unknown operations, bad identity, stale cursors, missing tenant scope, and denied sources before unauthorized effects. Keep denied sources as typed partial outcomes. Do not advance their cursors or expose cross-tenant sessions. | HS-13.4 proves typed refusals, zero denied calls, no tenant leakage, and unchanged denied-source progress. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R013.5 Evidence Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Evidence.** Bind each receipt to manifest version and digest, source identity, tenant, revision, cursor, coverage, outcome, and graph receipt. Redact credentials and private source content. | HS-13.5 independently reads receipts after restart and compares every manifest entry and outcome. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R013.6 Hot-path proof Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Hot-path proof.** Test first-run discovery and generated SourceIngest calls for every approved harness. Read the durable EG index and exercise WEBUI-APPS-R006.4. Two examples or mocked calls do not prove completeness. | HS-13.6 records served calls, full coverage, generated receipts, and independent index and browser readback. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R014 Meeting transcript and selected summary transport Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Meeting transcript and selected summary transport.** Carry bounded ordered transcript segments and corrections while partial. Finalize the current transcript only when its complete contiguous sequence is present, transitioning it to a finalized receipt. Dispatch summaries only after that exact receipt exists. Bind summaries to the user's admitted local or hosted provider. Preserve single-shot dictation. Refuse denied capture/egress, stale/conflicting input, gaps at finalization/summary dispatch, and unavailable providers. Never silently fall back. The meeting operation remains unresolved. | MT-14.6 proves partial delivery, correction, complete-sequence finalization, both provider classes, and zero premature summary calls. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R014.1 Model Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Model.** Define closed meeting/tenant identity, segment identity/sequence, correction revision, timestamps, and lifecycle fields. Include source/model identity and revision. Bind selected summary-provider identity and execution class to its invocation receipt. An exact replay uses its existing bound receipt. At the same meeting, sequence, and revision, a different payload digest conflicts. | MT-14.1 rejects missing identity, conflicting payload, invalid timestamps, and unsupported lifecycle/provider values. An identical bound replay returns its existing receipt. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R014.2 Behavior Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Behavior.** Accept bounded ordered partial segments. An identical replay for the same bound meeting, sequence, revision, and payload digest returns the existing receipt without another effect. A conflicting payload or invalid revision at that binding refuses. Corrections advance one segment to a newer revision and invalidate summaries for older transcript revisions. Gaps may remain pending during partial ingestion. When the current sequence is complete and contiguous, finalize the transcript and issue its bound receipt. Summary dispatch requires that exact receipt. Honor the user's admitted provider selection. | MT-14.2 proves exact-replay idempotence, conflicting-duplicate refusal, ordered corrections, completion before finalization, receipt-bound summary dispatch, and summary invalidation. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R014.3 Wiring Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Wiring.** The current WebUI route posts to `/api/enhanced/voice/transcribe` after recording stops; it is single-shot dictation. The audio-transcriber repository registers `transcribe_audio` for files or microphone capture, not meeting segments or summary selection. Existing SDK transport entry points are `agent_connector_sdk/mcp/server.py:88` (`create_mcp_server`) and `agent_connector_sdk/mcp/action_dispatch.py:194` (`dispatch_async`). Do not invent a meeting registration. The owners have not assigned its operation or exact counterpart IDs. | MT-14.3 traces the owner-registered operation through SDK dispatch and GraphOS after owners identify the exact operation and counterpart IDs. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R014.4 Refusal Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Refusal.** Refuse denied capture/egress, stale/conflicting updates, tenant denial, and unavailable selected providers. Allow finalization after the current sequence becomes complete and contiguous. The SDK rejects finalization when gaps, missing segments, stale revisions, or conflicting input remain. Refuse summary dispatch until the exact finalized receipt is available. Do not refuse a bounded partial segment solely because finalization is pending. Return distinct typed reasons before prohibited effects. Keep local provider selection from falling through to hosted execution. | MT-14.4 proves the SDK accepts bounded partial ingestion, rejects incomplete finalization, and blocks summary dispatch without the bound finalized receipt. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R014.5 Evidence Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Evidence.** Bind evidence to meeting, tenant, ordered segments, and corrections. Include final transcript, source/model and provider revisions, authorization, and invocation receipt. Redact raw audio, credentials, and private transcript text from diagnostics. | MT-14.5 compares receipts with persisted transcript and summary provenance. Corrections invalidate older summaries. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |
| SDK-SOURCE-INGEST-R014.6 Hot-path proof Definition — SDK-SOURCE-INGEST / SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migrationCanonical requirement and verification source**Hot-path proof.** Use real served operations for partial, corrected, and final segments. Select local and hosted summaries separately. Test exact replay, conflicting duplicates, denied capture/egress, stale input, pending gaps, incomplete finalization, and unavailable providers. Single-shot dictation cannot substitute. | Proposed: `tests/test_meeting_transcript_served.py::test_partial_correction_complete_finalize_receipt_then_summary` proves zero summary calls before complete finalization and reads browser, SDK, EG, and GraphOS receipts. Mocks do not prove acceptance; runtime evidence remains absent. | requirement | SDK-SOURCE-INGEST | SPECIFIED | No recorded commit/test evidence |