Tooling-root, non-umbrella Elixir monorepo for the final V2 integration platform.
The repo root owns workspace tooling, quality gates, and repo-level guides
only. Runtime code, connector code, and proof surfaces live in child packages
and top-level apps. We do not restore root examples/ or reference_apps/.
jido_integration/
mix.exs # tooling/workspace root only
README.md # repo architecture + command index
AGENTS.md # working contract for future agents
lib/ # root Mix tasks and workspace helpers only
test/ # root tooling tests only
docs/ # repo-level architecture and operational guides
core/
platform/ # public facade package (`:jido_integration_v2`)
contracts/ # shared public structs and behaviours
control_plane/ # connector registry + durable run/trigger truth
conformance/ # reusable connector conformance engine
auth/ # install, connection, credential, and lease truth
ingress/ # trigger normalization and durable admission
policy/ # pre-attempt policy and shed decisions
direct_runtime/ # direct capability execution
runtime_asm_bridge/ # integration-owned `asm` Harness driver projection
session_kernel/ # reusable session execution
stream_runtime/ # reusable stream execution
store_local/ # restart-safe local durability tier
store_postgres/ # database-backed durable tier
dispatch_runtime/ # async queue, retry, replay, recovery
webhook_router/ # hosted route lifecycle and ingress bridge
connectors/
github/ # direct GitHub connector + live acceptance runbook
notion/ # direct Notion connector + package-local live proofs
codex_cli/ # Harness-routed session connector via `asm`
market_data/ # Harness-routed stream connector via `asm`
apps/
trading_ops/ # cross-runtime operator proof
devops_incident_response/ # hosted webhook + async recovery proof
core/platformowns the public app identity:jido_integration_v2and the stable facade moduleJido.Integration.V2.Jido.Integration.V2exposes typed invocation, connector discovery, auth lifecycle calls, durable review lookups, and target lookup through a single public surface.- connector packages author rich manifests in
core/contracts; executable capabilities remain available as a derived projection for runtime lookup and invocation. core/conformanceowns reusable connector review logic behind the rootmix jido.conformanceconnector acceptance command.- non-direct runtime ownership stays below the integration layer.
Jido.Harnessis the stable runtime-driver contract seam; the authoredasmdriver is implemented bycore/runtime_asm_bridge, which projects intoagent_session_managerabovecli_subprocess_core. core/dispatch_runtimeandcore/webhook_routerstay as child packages. Hosted async and webhook behavior does not move back into the root or the facade package.- Durability is explicit and package-owned:
core/authandcore/control_planestill ship in-memory defaults.core/store_localis the restart-safe local durability tier.core/store_postgresis the shared database-backed durable tier.
- Child packages depend on each other only through explicit
path:deps. - No child package depends on the repo root.
The stable public entrypoint is Jido.Integration.V2.
Key calls:
- connector discovery:
connectors/0capabilities/0fetch_connector/1fetch_capability/1
- auth lifecycle:
start_install/3complete_install/2fetch_install/1connection_status/1request_lease/2rotate_connection/2revoke_connection/2
- invocation:
InvocationRequest.new!/1invoke/1invoke/3
- durable review truth:
fetch_run/1fetch_attempt/1events/1run_artifacts/1fetch_artifact/1
- target announcement and lookup:
announce_target/1fetch_target/1compatible_targets/1
Hosted webhook routing and async replay are intentionally separate public package APIs:
Jido.Integration.V2.DispatchRuntimeJido.Integration.V2.WebhookRouter
Runtime families proved in-tree:
:directgithub.issue.listgithub.issue.fetchgithub.issue.creategithub.issue.updategithub.issue.labelgithub.issue.closegithub.comment.creategithub.comment.updatenotion.users.get_selfnotion.search.searchnotion.pages.createnotion.pages.retrievenotion.pages.updatenotion.blocks.list_childrennotion.blocks.append_childrennotion.data_sources.querynotion.comments.create
:sessioncodex.exec.session
:streammarket.ticks.pull
Reference apps:
apps/trading_ops- proves one operator-visible workflow across stream, session, and direct runtimes
- keeps trigger admission in
core/ingress - keeps durable review truth in
core/control_plane
apps/devops_incident_response- proves hosted webhook registration, async dispatch, dead-letter, replay, and restart recovery
- keeps webhook behavior app-local instead of widening
connectors/github
The current surface also proves:
- connectors execute through short-lived auth leases, not durable credential truth
- public invocation binds auth through
connection_id;credential_refremains internal execution plumbing - session and stream connector packages depend on
jido_harnessfor the shared seam; they do not take directagent_session_managerorcli_subprocess_corepackage dependencies - Notion OAuth control flows stay in the auth/install lifecycle instead of the normal invoke surface
InvocationRequestis the typed public invoke object- conformance runs from the root while connector evidence stays package-local
- connector READMEs carry runtime/auth posture, package verification, live proof status, and package-boundary notes as part of connector review
- local durability, async queue state, and webhook route state are all explicit opt-in packages
Repo-level guides in docs/:
- Architecture Overview
- Connector Review Baseline
- Connector Authoring And Scaffolding
- Connector Conformance Guide
- Local Durability Guide
- Async Dispatch And Replay Guide
- Webhook Routing Guide
- Reference Apps Guide
- Observability And Pressure Semantics
Package and app runbooks:
core/platform/README.mdcore/conformance/README.mdcore/store_local/README.mdcore/dispatch_runtime/README.mdcore/webhook_router/README.mdconnectors/github/README.mdconnectors/github/docs/live_acceptance.mdconnectors/notion/README.mdconnectors/notion/docs/live_acceptance.mdapps/trading_ops/README.mdapps/devops_incident_response/README.md
The monorepo test and CI surface now includes packages that wire
core/store_postgres in :test.
mix mr.test and mix ci therefore expect a reachable Postgres test store.
Before calling the repo blocked on Postgres reachability, run:
mix mr.pg.preflightThat check validates the canonical core/store_postgres test tier only. The
repo still supports the other two durability tiers in parallel:
- in-memory defaults in
core/authandcore/control_plane core/store_localfor restart-safe local durabilitycore/store_postgresfor the shared database-backed tier
The default test configuration uses:
JIDO_INTEGRATION_V2_DB_HOST=127.0.0.1JIDO_INTEGRATION_V2_DB_PORT=5432JIDO_INTEGRATION_V2_DB_NAME=jido_integration_v2_testJIDO_INTEGRATION_V2_DB_USER=postgresJIDO_INTEGRATION_V2_DB_PASSWORD=postgres
If your local environment exposes Postgres through a socket directory instead
of TCP, set JIDO_INTEGRATION_V2_DB_SOCKET_DIR.
core/store_postgres/README.md is the canonical home for the durable-tier test
configuration.
Run these from the repo root:
mix test
mix monorepo.deps.get
mix monorepo.format
mix monorepo.compile
mix monorepo.test
mix monorepo.credo --strict
mix monorepo.dialyzer
mix monorepo.docs
mix mr.pg.preflight
mix quality
mix docs.all
mix ci
mix jido.conformance Jido.Integration.V2.Connectors.GitHub
mix jido.conformance Jido.Integration.V2.Connectors.MarketData
mix jido.conformance Jido.Integration.V2.Apps.DevopsIncidentResponse.GitHubIssueConnector
mix jido.conformance Jido.Integration.V2.Connectors.Notion
mix jido.integration.new acme_crm --runtime-class direct
mix jido.integration.new analyst_cli --runtime-class session --runtime-driver asmmix ci is the main acceptance gate.
Trigger-capable proof surfaces now include both connector-local common poll
proofs and app-local hosted webhook proofs. Run root conformance against the
module that actually owns the published ingress_definitions/0 evidence.
The root mix.exs also defines mr.* aliases for the same monorepo task
surface:
mix mr.deps.get
mix mr.format
mix mr.compile
mix mr.test
mix mr.pg.preflight
mix mr.credo --strict
mix mr.dialyzer
mix mr.docsThese are shortcuts for the corresponding mix monorepo.* commands above.
The repo no longer carries its own monorepo runner implementation. The
monorepo.* commands are root aliases to the generic mix blitz.workspace <task> runner from the blitz Hex package.
Workspace policy now lives in the root mix.exs under :blitz_workspace:
- project discovery comes from the configured
projectslist - task behavior comes from the configured
taskslist - concurrency weights come from
parallelism.base - the default machine scaler comes from
parallelism.multiplier: :auto - optional per-task overrides still let the repo pin exceptional tasks
--max-concurrency NandJIDO_MONOREPO_MAX_CONCURRENCYstill override the current invocation directly
The intended model is:
- task weight lives in
base - machine size lives in
multiplier - hard per-run overrides still win when you need them
For mix monorepo.test and mix ci, each package test run gets its own
isolated Postgres database name derived from the base
JIDO_INTEGRATION_V2_DB_NAME. That keeps DB-backed package tests parallel
without cross-package resets colliding in the shared store, and the child
mix test processes run with --color so ExUnit ANSI output is preserved.