A

Delivery structure

7 specs, 287 requirements, 3 with no code mapped
Knuckles-Team/agent-connector-sdkSpec delivery
Specs (7)
  • SDK-CONNECTOR-CONTROL137
  • SDK-FINANCE-SOURCES5
  • SDK-GOVERNED-WRITEBACK23
  • SDK-OBSERVABILITY-FEEDS1
  • SDK-QUALITY-RELEASE5
  • SDK-REPOSITORY-TRANSPORT5
  • SDK-SOURCE-INGEST111
Records not done
  • 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.

B

Delivery states

count of total

Requirements (287)

SPECIFIED (specified)195 of 287 requirements
LANDED (landed)21 of 287 requirements
VERIFIED (verified)71 of 287 requirements

Specs (7)

SPECIFIED (specified)4 of 7 specs
LANDED (landed)2 of 7 specs
VERIFIED (verified)1 of 7 specs

Each bar shows one state against all records of the same kind.

Percentages count current rows. Done means VERIFIED.

C

State definitions

delivery_state
StateDefinition
SPECIFIEDThe requirement is written. No code for it is on the default branch.
LANDEDA commit that carries its ID in a Spec trailer is on the default branch.
VERIFIEDIt 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

D

Specifications

specs/*/status.json
Spec / titleReq.LandedDoneSpec stateCode references
SDK-CONNECTOR-CONTROLSDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publication13738/13720SPECIFIEDagent_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 adapters55/53LANDEDrequirements.md documentation: file exists; coverage not verified
SDK-GOVERNED-WRITEBACKSDK-GOVERNED-WRITEBACK — Governed write-back to attached sources233/233SPECIFIEDagent_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 contract11/11✓ VERIFIEDNot mapped
SDK-QUALITY-RELEASESDK-QUALITY-RELEASE — Portable SDK quality, Pages, and release55/54LANDEDrequirements.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 transport54/54SPECIFIEDrequirements.md documentation: file exists; coverage not verified
SDK-SOURCE-INGESTSDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migration11136/11136SPECIFIEDApproved 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.

U

Spec architecture

repository / component packages

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)
Knuckles-Team/agent-connector-sdk / Source ingestion (1)SDK-SOURCE-INGEST
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.

R

Spec relationships

declared dependencies and references

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
SpecRelationshipTargetEvidence
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 onApproved query executionKnuckles-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 onEG-FEDERATED-QUERY-R085Knuckles-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 onSource ingestion authorityKnuckles-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 onSDK-CONNECTOR-CONTROL-R021Knuckles-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 onSDK-GOVERNED-WRITEBACK-R001Knuckles-Team/agent-connector-sdk: local spec declaration; source: specs/SDK-SOURCE-INGEST/plan.md
Knuckles-Team/agent-connector-sdk / Unassigned
SpecRelationshipTargetEvidence
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-SOURCESNo 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

referencesRFC 8785Unresolved: unresolved; source: specs/SDK-GOVERNED-WRITEBACK/plan.md
SDK-OBSERVABILITY-FEEDSNo relationships declared; dependencies unknown
SDK-QUALITY-RELEASENo relationships declared; dependencies unknown
SDK-REPOSITORY-TRANSPORTNo relationships declared; dependencies unknown
G

Open issues and pull requests

open at capture

Issues

0 open at capture.

    Pull Requests

    0 open at capture.

      The build reads GitHub one time. This page makes no live API requests.

      J

      Record inventory

      294 records

      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 / sourceKindParentStateCommit / test evidence
      SDK-CONNECTOR-CONTROL
      SDK-CONNECTOR-CONTROL — SDK connector control, certification, and pack publication
      specNoneSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLVERIFIEDdcc7d285ccc9
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIEDdcc7d285ccc9
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIED0f826d4ca6db
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIEDdcc7d285ccc9
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIED584fb45cdf24
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIED077a14c9f3d3
      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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIED0f826d4ca6db
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIED077a14c9f3d3
      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.
      requirementSDK-CONNECTOR-CONTROLLANDED5e1bd9257555
      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.
      requirementSDK-CONNECTOR-CONTROLLANDED5e1bd9257555
      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.
      requirementSDK-CONNECTOR-CONTROLLANDED5e1bd9257555
      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.
      requirementSDK-CONNECTOR-CONTROLLANDED5e1bd9257555
      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.
      requirementSDK-CONNECTOR-CONTROLLANDED5e1bd9257555
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIED5e1bd9257555
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIED077a14c9f3d3
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIED5e1bd9257555
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIED061f9b58abb2
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIED584fb45cdf24
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIEDfad5328aee62
      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.
      requirementSDK-CONNECTOR-CONTROLLANDEDb0c376748245
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIED045ba48df230
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIEDd3617301012c
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIED0a10559775ea
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIED077a14c9f3d3
      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`.
      requirementSDK-CONNECTOR-CONTROLLANDED713782e7901c
      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.
      requirementSDK-CONNECTOR-CONTROLLANDED713782e7901c
      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.
      requirementSDK-CONNECTOR-CONTROLLANDED5a476653a386
      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.
      requirementSDK-CONNECTOR-CONTROLVERIFIEDd3617301012c
      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.
      requirementSDK-CONNECTOR-CONTROLLANDED284fb12a19ed
      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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLLANDED284fb12a19ed
      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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLVERIFIED64bcd00be5ef
      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.
      requirementSDK-CONNECTOR-CONTROLLANDED284fb12a19ed
      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.
      requirementSDK-CONNECTOR-CONTROLLANDED284fb12a19ed
      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.
      requirementSDK-CONNECTOR-CONTROLLANDED284fb12a19ed
      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.
      requirementSDK-CONNECTOR-CONTROLLANDED629ef53c29f0
      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.
      requirementSDK-CONNECTOR-CONTROLLANDED629ef53c29f0
      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.
      requirementSDK-CONNECTOR-CONTROLLANDED629ef53c29f0
      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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIED629ef53c29f0
      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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`.
      requirementSDK-CONNECTOR-CONTROLLANDED629ef53c29f0
      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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIED3ddd773fb6dc
      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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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`
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLSPECIFIEDNo 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.
      requirementSDK-CONNECTOR-CONTROLVERIFIED851969957034
      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
      specNoneLANDEDNo 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.
      requirementSDK-FINANCE-SOURCESLANDED840bd894c581
      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.
      requirementSDK-FINANCE-SOURCESVERIFIED077a14c9f3d3
      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.
      requirementSDK-FINANCE-SOURCESLANDED6ef04661acc2
      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.
      requirementSDK-FINANCE-SOURCESVERIFIED077a14c9f3d3
      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.
      requirementSDK-FINANCE-SOURCESVERIFIED077a14c9f3d3
      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
      specNoneSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDdaeb199f91c0
      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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKVERIFIED2d39be956d8d
      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.
      requirementSDK-GOVERNED-WRITEBACKVERIFIED2d39be956d8d
      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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIED6ef04661acc2
      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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKSPECIFIEDNo 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.
      requirementSDK-GOVERNED-WRITEBACKVERIFIED2d39be956d8d
      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
      specNoneVERIFIEDNo 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.
      requirementSDK-OBSERVABILITY-FEEDSVERIFIED077a14c9f3d3
      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
      specNoneLANDEDNo 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.
      requirementSDK-QUALITY-RELEASEVERIFIED3edcf05bc64a
      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.
      requirementSDK-QUALITY-RELEASEVERIFIEDfad5328aee62
      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.
      requirementSDK-QUALITY-RELEASEVERIFIED42b930057c3e
      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.
      requirementSDK-QUALITY-RELEASELANDEDcbbf859a5c38
      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.
      requirementSDK-QUALITY-RELEASEVERIFIED0c1f49ced769
      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
      specNoneSPECIFIEDNo 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.
      requirementSDK-REPOSITORY-TRANSPORTVERIFIEDacf470ac4906
      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.
      requirementSDK-REPOSITORY-TRANSPORTSPECIFIEDNo 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.
      requirementSDK-REPOSITORY-TRANSPORTVERIFIED077a14c9f3d3
      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.
      requirementSDK-REPOSITORY-TRANSPORTVERIFIEDacf470ac4906
      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.
      requirementSDK-REPOSITORY-TRANSPORTVERIFIEDacf470ac4906
      tests/test_repository_transport.py:180
      SDK-SOURCE-INGEST
      SDK-SOURCE-INGEST — SDK source sync, drift quarantine, and adapter migration
      specNoneSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTVERIFIEDffb9260d7602
      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.
      requirementSDK-SOURCE-INGESTVERIFIED23f241b07560
      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.
      requirementSDK-SOURCE-INGESTSPECIFIED23f241b07560
      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.
      requirementSDK-SOURCE-INGESTSPECIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDb55555566da2
      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.
      requirementSDK-SOURCE-INGESTVERIFIED10376b1e9728
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED36d2c92e439c
      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.
      requirementSDK-SOURCE-INGESTVERIFIED36d2c92e439c
      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.
      requirementSDK-SOURCE-INGESTVERIFIED36d2c92e439c
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED10376b1e9728
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED1cbd1de01d83
      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.
      requirementSDK-SOURCE-INGESTVERIFIED1cbd1de01d83
      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.
      requirementSDK-SOURCE-INGESTVERIFIED1cbd1de01d83
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTVERIFIED10376b1e9728
      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.
      requirementSDK-SOURCE-INGESTVERIFIED10376b1e9728
      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.
      requirementSDK-SOURCE-INGESTVERIFIED10376b1e9728
      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.
      requirementSDK-SOURCE-INGESTVERIFIEDffb9260d7602
      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.
      requirementSDK-SOURCE-INGESTVERIFIED289aadb634d8
      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.
      requirementSDK-SOURCE-INGESTVERIFIED3735e4434463
      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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo 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.
      requirementSDK-SOURCE-INGESTSPECIFIEDNo recorded commit/test evidence
      TitleSpec delivery: agent-connector-sdk
      RepositoryKnuckles-Team/agent-connector-sdk
      Commitb9ee9ed0a82f
      Captured (UTC)2026-10-13T16:19:36
      Snapshotsnapshot.json (v1)
      Sourcespecs/*/status.json
      Sheet1 of 1