diff --git a/README.md b/README.md index 1ccc102..ac04f9c 100644 --- a/README.md +++ b/README.md @@ -36,19 +36,21 @@ Invart is currently a CLI-first **0.9 pre-release**. It is suitable for local ev - Run built-in benchmarks and demos, including real-world-risk-shaped and containerized risk flows. - Keep old `kappaski` imports and CLI as compatibility aliases while the public project name moves to `Invart`. -## What To Inspect First +## Start Here -For a first pass, the most useful public-facing surfaces are: +README is the landing page. The docs are organized as a user journey: -| Surface | Why it matters | +| If you want to... | Start with | | --- | --- | -| [`docs/product.md`](docs/product.md) | One-page product overview for the before / during / after control loop. | -| [`docs/quickstart.md`](docs/quickstart.md) | Minimal local session that writes a ledger and verifies proof. | -| [`docs/runtime-effect-demo.md`](docs/runtime-effect-demo.md) | Shows the demo's before / during / after stages and L1-L5 control effects. | -| [`docs/evaluation.md`](docs/evaluation.md) | Explains what the built-in benchmarks measure and what they do not claim. | -| [`examples/`](examples/) | Small runnable examples before running the larger demos. | +| Understand what Invart is and why it exists | [`docs/product.md`](docs/product.md) | +| Run one local managed session | [`docs/quickstart.md`](docs/quickstart.md) | +| Operate the five runtime layers on a ledger | [`docs/five-layer-operator-guide.md`](docs/five-layer-operator-guide.md) | +| See the before / during / after demo artifacts | [`docs/runtime-effect-demo.md`](docs/runtime-effect-demo.md) | +| Integrate with CLI, artifacts, or Python helpers | [`docs/cli-reference.md`](docs/cli-reference.md) and [`docs/api-sdk.md`](docs/api-sdk.md) | +| Evaluate claims and benchmarks | [`docs/evaluation.md`](docs/evaluation.md) | +| Browse the full documentation map | [`docs/index.md`](docs/index.md) or [`docs/html/index.html`](docs/html/index.html) | -The main demo command below produces a local HTML entrypoint plus audit, replay, path graph, coverage, proof, and ledger artifacts. Those artifacts are the best way to see Invart intervening in and explaining an agent-like run. +The recommended first path is: **Quickstart -> Five-layer operator guide -> Runtime effect demo -> Evaluation**. That path shows the whole loop from a local ledger to proof, replay, path graph, coverage, audit, and evidence review. ## Install For Local Development @@ -141,20 +143,17 @@ Heavy external validation such as full SWE-Bench runs is intentionally separate ## Documentation -Open the local docs: +Open the docs home for the structured journey: -- [Docs README](docs/README.md) - [Markdown docs home](docs/index.md) - [HTML docs home](docs/html/index.html) -- [Product page](docs/product.md) -- [Quickstart](docs/quickstart.md) + +Reference pages: + +- [Docs README](docs/README.md) - [Concepts](docs/concepts.md) -- [CLI reference](docs/cli-reference.md) -- [API and SDK](docs/api-sdk.md) - [Architecture](docs/architecture.md) - [Examples](docs/examples.md) -- [Runtime effect demo](docs/runtime-effect-demo.md) -- [Evaluation](docs/evaluation.md) - [Open-source boundary](docs/open-source-boundary.md) - [Brand assets](assets/brand/README.md) diff --git a/docs/README.md b/docs/README.md index a0bae05..109bd1a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -16,6 +16,7 @@ Public pages: | --- | --- | --- | | Product overview | [`product.md`](product.md) | [`html/product.html`](html/product.html) | | Quickstart | [`quickstart.md`](quickstart.md) | [`html/quickstart.html`](html/quickstart.html) | +| Five-layer operator guide | [`five-layer-operator-guide.md`](five-layer-operator-guide.md) | [`html/five-layer-operator-guide.html`](html/five-layer-operator-guide.html) | | Concepts | [`concepts.md`](concepts.md) | [`html/concepts.html`](html/concepts.html) | | CLI reference | [`cli-reference.md`](cli-reference.md) | [`html/cli-reference.html`](html/cli-reference.html) | | API and SDK | [`api-sdk.md`](api-sdk.md) | [`html/api-sdk.html`](html/api-sdk.html) | diff --git a/docs/api-sdk.md b/docs/api-sdk.md index 7d76d60..5378e5a 100644 --- a/docs/api-sdk.md +++ b/docs/api-sdk.md @@ -5,7 +5,7 @@ Invart 0.9 is CLI-first. The stable integration surface is the CLI plus verifiable artifacts. Python helpers are available for local tooling, but only a small set should be treated as provisional SDK entry points before 1.0. -[Docs Home](index.md) · [Quickstart](quickstart.md) · [CLI](cli-reference.md) · [Architecture](architecture.md) · [Examples](examples.md) +[Docs Home](index.md) · [Quickstart](quickstart.md) · [Operate L1-L5](five-layer-operator-guide.md) · [CLI](cli-reference.md) · [Architecture](architecture.md) · [Examples](examples.md) ## Public Surface @@ -77,6 +77,8 @@ These helpers are suitable for local adapters, experiments, and internal automat | Paper tables JSON/CSV/HTML | invart experiment paper-tables | Research reports, appendix tables, product validation review | Derived summaries. Each row should link back to ledger/proof/replay/path graph/evidence artifacts. | | Research readiness report | invart release-candidate verify --paper | Pre-release research review | Separate from product RC. It checks evidence completeness without claiming external benchmark completion. | +For the operational meaning of proof, replay, path graph, coverage, audit, and evidence workspace, use the [five-layer operator guide](five-layer-operator-guide.md). It explains which artifact answers each L1-L5 review question. + ## Compatibility Names New integrations should import invart and use the canonical subpackages such as invart.core, invart.control, and invart.assurance. The older flat invart.ledger style imports and the former kappaski import path remain compatibility aliases during the rename period, but new documentation and examples use the organized Invart layout. diff --git a/docs/architecture.md b/docs/architecture.md index 454098a..c14ff2e 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -3,10 +3,16 @@ [HTML version](html/architecture.html) -Invart is not a plugin-only wrapper. Plugin and hook integration can improve coverage, but the durable product boundary is the runtime control plane. +Invart is not a plugin-only wrapper. Plugin and hook integration can improve coverage, but the durable product boundary is the runtime control plane. For operational usage of the same model, read the [five-layer operator guide](five-layer-operator-guide.md). ## Lifecycle +| Stage | Architecture role | +| --- | --- | +| Before runtime | Inventory surfaces, bind identity, resolve profile and grants, and establish the claim boundary. | +| During runtime | Normalize actions into ledger facts, evaluate policy, mediate covered surfaces, and record outcomes. | +| After runtime | Derive proof, replay, path graph, coverage, audit, evidence bundles, and gates from the ledger. | + ## Layer Model | Layer | Responsibility | Example modules | @@ -19,7 +25,7 @@ Invart is not a plugin-only wrapper. Plugin and hook integration can improve cov ## Demo Verification -The [runtime effect demo](runtime-effect-demo.md) is the concrete verification surface for this model. It renders a stage × layer matrix in the final demo entrypoint and an action timeline in each container risk case audit page. The timeline connects agent intent/action, Invart observation, policy or mediation decision, outcome, and the artifact that proves the step. +The [runtime effect demo](runtime-effect-demo.md) is the concrete verification surface for this model. It renders a stage × layer matrix in the final demo entrypoint and an action timeline in each container risk case audit page. The [five-layer operator guide](five-layer-operator-guide.md) is the command-level usage surface for the same layers. Coverage terms remain strict: observed, mediated, and enforced are not interchangeable. Unmanaged direct execution is shown as a coverage gap unless it enters a managed launcher, wrapper, hook, broker, or shim. diff --git a/docs/cli-reference.md b/docs/cli-reference.md index eff420e..a879010 100644 --- a/docs/cli-reference.md +++ b/docs/cli-reference.md @@ -3,7 +3,20 @@ [HTML version](html/cli-reference.html) -Run invart --help for the complete parser. These are the entry points most people should start with. +Run `invart --help` for the complete parser. These are the entry points most people should start with. For a guided L1-L5 workflow, use the [five-layer operator guide](five-layer-operator-guide.md). + +## User intent to command + +| I want to... | Start with | +| --- | --- | +| Scan before an agent runs | `invart pre-runtime --target . --save` | +| Run one managed session | `invart run --target . --agent codex --goal "..." -- ` | +| Inspect L1-L5 for a ledger | `invart runtime layers --ledger ledger.jsonl --out-dir .invart/layers` | +| Explain a risky path | `invart policy check-path --ledger ledger.jsonl --out path-policy.json` | +| Inspect mediation state | `invart mediation inspect --ledger ledger.jsonl` | +| Export reviewable evidence | `invart evidence export --ledger ledger.jsonl --out-dir .invart/evidence` | +| Validate real-agent integration | `invart real-agent check --agent claude-code --out-dir .invart/real-agent` | +| Run product benchmarks | `invart eval benchmark --suite full-product-readiness` | ### Pre-runtime @@ -43,6 +56,19 @@ invart replay export --ledger ledger.jsonl --out replay.html invart audit report --ledger ledger.jsonl --out-dir .invart/audit ``` +### Evidence workspace + +```bash +invart evidence export --ledger ledger.jsonl --out-dir .invart/evidence +invart evidence verify --bundle .invart/evidence/manifest.json +invart evidence inspect \ + --manifest .invart/evidence/manifest.json \ + --out-dir .invart/evidence-workspace \ + --require-layer-workflow +``` + +`evidence inspect` treats the bundle as an L5 review workspace. It verifies artifact hashes, checks required bundle contents, and reports whether the run can answer who, what, why, policy, approval, outcome, and coverage. Optional requirements such as `--require-layer-workflow` and `--require-adapter-package` turn missing links into gate failures. + ### Real agent conformance ```bash @@ -78,5 +104,6 @@ invart eval benchmark --suite v0.9.3-agent-adapter-contract invart eval benchmark --suite v0.9.4-claude-reference-adapter invart eval benchmark --suite v0.9.5-priority-agent-tracks invart eval benchmark --suite v0.9.6-layer-runtime-workflow +invart eval benchmark --suite v0.9.7-evidence-workspace-gate invart roadmap status --require-full ``` diff --git a/docs/concepts.md b/docs/concepts.md index 4235157..f63b380 100644 --- a/docs/concepts.md +++ b/docs/concepts.md @@ -1,17 +1,18 @@ -# The nouns that matter. +# Core concepts reference [HTML version](html/concepts.html) +This page is a glossary-style compatibility reference. If you are learning Invart for the first time, start with [Product Overview](product.md), then use the [five-layer operator guide](five-layer-operator-guide.md) for command-level usage. -Invart is easier to understand when you separate facts, decisions, mediation, and portable evidence. +| Concept | Meaning | Where to use it | +| --- | --- | --- | +| Session | A bounded agent run with target, goal, agent identity, principal, and ledger. | [Quickstart](quickstart.md) | +| Invocation | A normalized runtime action such as shell, file, network, MCP, skill, or content activity. | [Five-layer operator guide](five-layer-operator-guide.md) | +| Ledger | The append-only fact source. Proof, replay, graph, audit, and gates derive from it. | [Product Overview](product.md) | +| Proof | A portable summary of the run. It should answer who, what, why, policy, approval, outcome, and coverage. | [API & SDK](api-sdk.md) | +| Mediation | The decision contract for allow, audit, require approval, deny, enforced block, and fail-open alert. | [Five-layer operator guide](five-layer-operator-guide.md) | +| Coverage | The strength of observation or control: declared, observed, mediated, enforced, or fail-open. | [Evaluation](evaluation.md) | +| Path graph | A ledger-derived graph connecting identity, grant, invocation, resource, taint, decision, approval, outcome, and artifact. | [Runtime effect demo](runtime-effect-demo.md) | +| Evidence bundle | A verifiable package containing manifest hashes, proof, replay, graph, coverage, audit JSON/HTML, and policy summary. | [API & SDK](api-sdk.md) | -| Concept | Meaning | -| --- | --- | -| Session | A bounded agent run with target, goal, agent identity, principal, and ledger. | -| Invocation | A normalized runtime action such as shell, file, network, MCP, skill, or content activity. | -| Ledger | The append-only fact source. Proof, replay, graph, audit, and gates derive from it. | -| Proof | A portable summary of the run. It should answer who, what, why, policy, approval, outcome, and coverage. | -| Mediation | The decision contract for allow, audit, require approval, deny, enforced block, and fail-open alert. | -| Coverage | The strength of observation or control: declared, observed, mediated, enforced, or fail-open. | -| Path graph | A ledger-derived graph connecting identity, grant, invocation, resource, taint, decision, approval, outcome, and artifact. | -| Evidence bundle | A verifiable package containing manifest hashes, proof, replay, graph, coverage, audit JSON/HTML, and policy summary. | +For internal module boundaries, use [Architecture](architecture.md). diff --git a/docs/evaluation.md b/docs/evaluation.md index e0b9260..019f450 100644 --- a/docs/evaluation.md +++ b/docs/evaluation.md @@ -5,6 +5,8 @@ Invart separates local product checks from optional heavy external benchmark evidence. +[Operate L1-L5](five-layer-operator-guide.md) · [Runtime Effect Demo](runtime-effect-demo.md) · [CLI](cli-reference.md) + ## Default Local Checks ```bash @@ -24,6 +26,17 @@ PYTHONPATH=src python -m invart.cli roadmap status --require-full | Coverage truthfulness | Observed, mediated, enforced, and fail-open are not the same claim. | | Audit reconstruction | A reviewer should reconstruct the run from durable evidence. | +## Product claim to benchmark + +| Product claim | Local check | Evidence to inspect | +| --- | --- | --- | +| Invart can preserve a closed before / during / after runtime loop. | `invart eval benchmark --suite pre-v1-control-plane` | ledger, proof, replay, path graph, coverage, audit report | +| High-risk agent-like actions are blocked, paused, or escalated without silent pass-through. | `invart eval benchmark --suite real-world-agent-risk-demo` | risk demo HTML, case audit report, mediation decisions | +| Coverage labels remain truthful across observed, mediated, enforced, fail-open, and bypassed paths. | `invart eval benchmark --suite v0.47-coverage-mediation-pilot` | coverage matrix JSON/HTML | +| Auditors can reconstruct who, what, why, policy, approval, outcome, and coverage. | `invart eval benchmark --suite v0.48-audit-reconstruction-study` | audit reconstruction study and evidence bundle | +| Plugin-only or vendor-native visibility is not reported as full runtime mediation. | `invart eval benchmark --suite v0.50-product-control-matrix` | product control matrix | +| Pre-release evidence can be checked separately from external benchmark completion. | `invart eval benchmark --suite v0.51-pre-1.0-research-ready-gate` | research-ready gate report | + ## Research-Ready Validation Loop The pre-1.0 research track validates an LLM/agent workflow end to end: diff --git a/docs/examples.md b/docs/examples.md index df1fd46..7324cb7 100644 --- a/docs/examples.md +++ b/docs/examples.md @@ -1,24 +1,27 @@ -# Small examples before full demos. +# Examples and safe fixtures [HTML version](html/examples.html) +This page is a compatibility index for small examples. For a guided first run, use [Quickstart](quickstart.md). For layer-by-layer operation, use the [five-layer operator guide](five-layer-operator-guide.md). -The examples/ directory contains short runnable or copyable examples for local evaluation. +## Runnable examples -### Basic managed session +| Example | Use it for | +| --- | --- | +| [`../examples/basic-managed-session.sh`](../examples/basic-managed-session.sh) | Create one managed session, ledger, and proof for a low-risk command. | +| [`../examples/policy-profile.toml`](../examples/policy-profile.toml) | Inspect a compact policy-as-code profile with path-aware rules. | +| [`../examples/unsafe-action-event.json`](../examples/unsafe-action-event.json) | Analyze an unsafe shell event without executing it. | -examples/basic-managed-session.sh creates a ledger and proof for one low-risk command. - -### Policy profile - -examples/policy-profile.toml shows a small TOML profile with path-aware risk rules. - -### Unsafe event - -examples/unsafe-action-event.json is a shell event you can analyze without executing it. - -## Analyze The Unsafe Event +## Analyze the unsafe event ```bash invart runtime analyze-event --event "$(cat examples/unsafe-action-event.json)" ``` + +This command analyzes a JSON event payload. It does not execute the unsafe command inside the fixture. + +## Next steps + +- Use [Quickstart](quickstart.md) to create a real local ledger. +- Use [Five-layer Operator Guide](five-layer-operator-guide.md) to inspect L1-L5 on that ledger. +- Use [Runtime Effect Demo](runtime-effect-demo.md) for generated demo artifacts and action timelines. diff --git a/docs/five-layer-operator-guide.md b/docs/five-layer-operator-guide.md new file mode 100644 index 0000000..abe7b1f --- /dev/null +++ b/docs/five-layer-operator-guide.md @@ -0,0 +1,144 @@ +# Operate the five runtime layers. + +[HTML version](html/five-layer-operator-guide.html) + +This guide is the practical path for using Invart's five-layer model. It assumes you have either a managed Invart ledger from `invart run` / `invart runtime shell`, or a demo ledger generated by `invart demo pre-1.0-final`. + +The short version: start with the question you need to answer, run the layer command, open the artifact, then check whether the evidence proves the claim without inflating coverage. + +## Ten-minute path + +```bash +mkdir -p .invart/operator-guide + +invart pre-runtime --target . --save \ + --preflight .invart/operator-guide/preflight.json + +invart session start \ + --target . \ + --agent demo-agent \ + --goal "Inspect the repository without risky changes" \ + --session-id invart_operator_guide \ + --ledger .invart/operator-guide/ledger.jsonl \ + --preflight .invart/operator-guide/preflight.json + +invart runtime shell \ + --session invart_operator_guide \ + --ledger .invart/operator-guide/ledger.jsonl \ + -- python -c "from pathlib import Path; print(len(list(Path('.').iterdir())))" + +invart session close --ledger .invart/operator-guide/ledger.jsonl + +invart runtime layers \ + --ledger .invart/operator-guide/ledger.jsonl \ + --out-dir .invart/operator-guide/layers + +invart evidence inspect \ + --manifest .invart/operator-guide/layers/evidence/manifest.json \ + --out-dir .invart/operator-guide/evidence-workspace \ + --require-layer-workflow +``` + +Open these two files first: + +- `.invart/operator-guide/layers/layer-runtime-workflow.html` +- `.invart/operator-guide/evidence-workspace/evidence-workspace.html` + +## Which layer should I use? + +| User question | Layer | Command | Artifact to open | +| --- | --- | --- | --- | +| What can this agent touch before it runs? | L1 Execution Surface | `invart pre-runtime --target . --save` | preflight JSON or layer workflow L1 rows | +| What actually happened? | L2 Runtime Fact Model | `invart runtime layers --ledger ledger.jsonl --out-dir .invart/layers` | `ledger.jsonl`, `proof.json`, `layer-runtime-workflow.html` | +| Why was an action allowed, paused, denied, or blocked? | L3 Decision Plane | `invart policy check-path --ledger ledger.jsonl --out path-policy.json` | `path-policy.json`, `path-graph.html` | +| Did Invart only observe, mediate, or enforce? | L4 Mediation Plane | `invart mediation inspect --ledger ledger.jsonl` | mediation JSON, `replay.html`, `coverage.html` | +| Can a reviewer verify the run after the fact? | L5 Evidence Plane | `invart evidence inspect --manifest .invart/layers/evidence/manifest.json --out-dir .invart/evidence-workspace --require-layer-workflow` | `evidence-workspace.html`, `audit-report.html` | + +## Layer-by-layer operation + +### L1 Execution Surface + +Use L1 before-runtime to inventory where agent actions can enter the control plane: shell commands, file writes, network intent, skills, MCP servers, native hooks, launchers, wrappers, and unmanaged surfaces. + +```bash +invart pre-runtime --target . --save --preflight .invart/preflight.json +``` + +- Healthy signal: expected repo, skill, MCP, and agent configuration surfaces are visible, and unmanaged surfaces are named instead of hidden. +- Failure signal: an agent, skill, MCP server, launcher, or credential-adjacent surface is missing from inventory. +- Next action: route the agent through a managed launcher, wrapper, hook, or adapter before claiming mediation. + +### L2 Runtime Fact Model + +Use L2 during-runtime and after-runtime to reconstruct facts from the ledger. The ledger is the fact source; proof, replay, graph, audit, and evidence bundles derive from it. + +```bash +invart runtime layers --ledger ledger.jsonl --out-dir .invart/layers +``` + +- Healthy signal: the workflow reports session boundaries, invocations, resources, taint, decisions, approvals, outcomes, and artifact links. +- Failure signal: the ledger only has session start/close entries, or actions lack resource, decision, outcome, or coverage facts. +- Next action: record actions through `invart runtime shell`, an adapter, native bridge, MCP broker, or another managed surface. + +### L3 Decision Plane + +Use L3 to answer why a risky path was allowed, audited, paused, denied, or blocked. Deterministic critical policy cannot be downgraded by LLM review. + +```bash +invart policy check-path --ledger ledger.jsonl --out path-policy.json +``` + +- Healthy signal: secret egress, unsafe deletion, external instruction hijack, and deploy/CI mutation paths have explainable policy outcomes. +- Failure signal: a high-risk path has no policy reason, no taint chain, or only an LLM allow without deterministic policy support. +- Next action: tighten the policy profile, add missing path predicates, or move the surface into managed mediation. + +### L4 Mediation Plane + +Use L4 to inspect whether Invart observed the action, mediated it, enforced a block, or recorded a fail-open alert. These coverage labels are not interchangeable: observed, mediated, enforced, fail-open, and unmanaged mean different things. + +```bash +invart mediation inspect --ledger ledger.jsonl +``` + +- Healthy signal: allow, audit, require approval, deny, enforced block, and fail-open outcomes are visible with approval and outcome state. +- Failure signal: proof or docs claim enforcement while the coverage report only shows observed or fail-open behavior. +- Next action: resolve pending approvals, route through stronger managed surfaces, or keep the report honest about weak coverage. + +### L5 Evidence Plane + +Use L5 after-runtime to give a reviewer a portable, verifiable workspace. L5 should answer who, what, why, policy, approval, outcome, and coverage. + +```bash +invart evidence inspect \ + --manifest .invart/layers/evidence/manifest.json \ + --out-dir .invart/evidence-workspace \ + --require-layer-workflow +``` + +- Healthy signal: the workspace verifies hashes, links proof/replay/path graph/coverage/audit artifacts, and marks review questions complete. +- Failure signal: artifact hashes fail, layer workflow is missing, adapter package evidence is required but absent, or review questions are incomplete. +- Next action: regenerate the evidence bundle from the ledger, attach missing artifacts, or fail the release gate. + +## Before-runtime, during-runtime, after-runtime + +| Layer | before-runtime | during-runtime | after-runtime | +| --- | --- | --- | --- | +| L1 Execution Surface | Inventory agent, skill, MCP, launcher, wrapper, hook, and unmanaged surfaces. | Attribute each action to a runtime surface. | Review coverage gaps and unmanaged execution paths. | +| L2 Runtime Fact Model | Bind session, principal, agent, credential boundary, and grants. | Record invocations, resources, taint, decisions, approvals, and outcomes. | Keep the ledger as the fact source for reconstruction. | +| L3 Decision Plane | Load deterministic policy and path-aware rules. | Explain allow, audit, approval, deny, and critical path decisions. | Reconstruct causal chains with path policy and graph artifacts. | +| L4 Mediation Plane | Decide which surfaces are observed, mediated, enforced, or weakly covered. | Apply mediation outcomes and approval state. | Report unresolved approvals and fail-open conditions truthfully. | +| L5 Evidence Plane | Record the claim boundary and expected artifacts. | Generate replay, coverage, proof, and graph artifacts. | Export audit, evidence bundle, evidence workspace, and release gate inputs. | + +## Reading the result + +Start with `layer-runtime-workflow.html` when you need to understand a single run. It shows the before-runtime, during-runtime, and after-runtime matrix across L1-L5. + +Then open `evidence-workspace.html` when you need a gateable review. It verifies bundle integrity and checks whether evidence can answer the core audit questions. + +Use [Runtime effect demo](runtime-effect-demo.md) when you want a richer demo entrypoint with risk-shaped cases. Use [CLI reference](cli-reference.md) for every command group. Use [Evaluation](evaluation.md) when you need to map product claims to benchmark evidence. + +## Boundaries + +The operator guide does not claim that every vendor plugin or extension is equivalent to Invart mediation. A plugin-only or imported trace can be useful evidence, but it is not the same as a managed, mediated, or enforced runtime surface. + +Local demos use safe equivalent trajectories. They are designed to show how Invart records, mediates, and audits agent-like behavior without installing hostile packages or replaying private incidents. diff --git a/docs/html/api-sdk.html b/docs/html/api-sdk.html index 715219d..76a4629 100644 --- a/docs/html/api-sdk.html +++ b/docs/html/api-sdk.html @@ -14,6 +14,7 @@

Integrate with Invart without guessing the boundary.