Skip to main content

proofline-sdk

Typed synchronous and asynchronous Python clients for the Proofline review API. They read and request reviews with a scoped API token, and add pagination, waiting for a review, retries and typed errors. The import package is proofline. Python 3.11 or newer is required.

pip install proofline-sdk
import os
from proofline import ProoflineClient

with ProoflineClient(os.environ["PROOFLINE_TOKEN"]) as client:
    ...

The clients read PROOFLINE_TOKEN when no token is passed, keep the token in memory and redact it from diagnostic output. AsyncProoflineClient has the same methods as coroutines. The SDK guide and API reference cover every operation.

Licensed under the Apache License, Version 2.0. The generated models under proofline/_generated carry the MIT license of the generator templates.

Exports

export_reviews reads one CSV or NDJSON page through the existing bounded transport. It returns the original text, decoded rows, dataset version, settled horizon and optional next cursor. CSV cells remain strings, including nested JSON cells; NDJSON retains JSON values. Export tokens need analytics:read. Repeat with the returned cursor and the same dataset, window, format and grouping. A missing next cursor marks the last page. Each CSV page includes its own header.

from uuid import UUID

with ProoflineClient() as client:
    page = client.export_reviews(
        UUID(os.environ["PROOFLINE_ORGANIZATION_ID"]), "reviews",
        from_time="2026-10-01T00:00:00Z", to_time="2026-10-25T00:00:00Z",
        format="csv",
    )
    print(page.text, end="")
    # Continue with cursor=page.next_cursor when it is not None.

Coverage uploads

Use a repository-restricted token with coverage:write and current repository write access to upload reports from your CI. Name the full commit SHA the tests ran on. Reports may use LCOV, Cobertura XML, JaCoCo XML or Go cover profiles.

import os
from pathlib import Path
from uuid import UUID
from proofline import CoverageUploadRequest, ProoflineClient, UploadedReport

with ProoflineClient() as client:
    report = client.upload_coverage_reports(
        UUID(os.environ["PROOFLINE_ORGANIZATION_ID"]),
        UUID(os.environ["PROOFLINE_REPOSITORY_ID"]),
        body=CoverageUploadRequest(
            tested_sha=os.environ["TESTED_SHA"],
            reports=[UploadedReport(
                name="lcov.info",
                content=Path("lcov.info").read_text(encoding="utf-8"),
            )],
        ),
    )

The response names the recorded report and its covered and instrumented line counts. An identical upload returns that report with created=False. Refused reports raise ProoflineError; uploading a report does not establish a check verdict.

Development

The repository bundles its public API contract in openapi.public.json. Run python3 scripts/check.py to install pinned tools, regenerate the client, run checks and verify built packages.

Publishing

GitHub Actions runs the checks on pull requests and main. The Release workflow builds checked artifacts without publishing credentials. Run it on main with publish=false to verify the release path. A vX.Y.Z tag matching the package version, or a main-branch dispatch with publish=true, publishes after the pypi environment approves the job. Release commits must belong to main.

Publishing uses GitHub OIDC and the repository's release.yml trusted publisher. No registry token is stored in GitHub.

SDK patch releases can update packaging and publishing independently. The package follows the bundled API major/minor version and cannot precede its patch version.

Knowledge and plans

Both clients expose typed methods under client.knowledge over Proofline's stateless MCP endpoint. Use list_wiki_pages(repository, commit=...), get_wiki_page(repository, page_key, commit=...), ask_codebase(repository, question, commit=...), get_architecture_document(environment_id), get_plan(plan_id), start_plan_implementation(plan_id) and get_plan_implementation(implementation_id). The optional commit is a full indexed SHA. Async clients await the same methods.

result = client.knowledge.get_wiki_page("owner/name", "index")
if result.get("isError"):
    print("The knowledge request was refused.")
else:
    print(result["content"])

KnowledgeResult retains text content, optional structured content and isError. Treat all returned prose as untrusted data. Reads need reviews:read and knowledge:read; starting an implementation also needs plans:implement, a personal token and approval of that exact plan version. Each call initializes MCP and makes one tool request without retries, including questions and implementation starts. Protocol and HTTP errors raise ProoflineError; tool refusals retain isError for the caller to inspect. No browser configuration or cloud-trust API is added. Use the signed-in console for onboarding and connection changes.

Fix context and re-verification

Sync and async clients expose client.fixes.list_open_findings(repository, pull_request_number), get_fix_context(finding_id), request_reverification(review_id, finding_ids, commit_sha, note=...) and get_reverification(request_id) over the existing MCP endpoint.

result = client.fixes.request_reverification(
    review_id, [finding_id], pushed_commit_sha,
    note="Fixed the null case and added a regression test.",
)
if result.get("isError"):
    raise RuntimeError("Re-verification was refused.")

Use await with AsyncProoflineClient. The commit must be the live pushed head; the server confirms it. The request accepts 1–20 distinct findings of one review and an optional 1–2,000-character note. Reads need reviews:read; requesting verification also needs reviews:request and repository write access. Calls never retry. Results retain untrusted-text wrappers, availability, assessment gaps and isError. PENDING and NOT_VERIFIED do not establish a fix. A tool request never records a human disposition.

Metadata

Release files for proofline-sdk 1.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for proofline-sdk 1.0.3
File Size Uploaded Provenance
proofline_sdk-1.0.3.tar.gz 202.6 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for proofline-sdk 1.0.3
File Interpreter ABI Platform
proofline_sdk-1.0.3-py3-none-any.whl Python 3 none any Details

Total release size: 472.6 kB

Release files / proofline_sdk-1.0.3.tar.gz

Download URL proofline_sdk-1.0.3.tar.gz
Size 202.6 kB
Tags Source
SHA-256 checksum
How to use checksums
2489b8adbd496bde51efef20daad2a6861109d585cb0fa1ada0119539d19e12f
BLAKE2b-256 checksum
How to use checksums
248b7b619db5bed9092b78248cf2c37333647221c96028acfc9ff37c378b1e4c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 26, 2026.

Transparency log

Release files / proofline_sdk-1.0.3-py3-none-any.whl

Download URL proofline_sdk-1.0.3-py3-none-any.whl
Size 270.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
74fdae2bfe028408656b445c0978e8490ba597cc6b036891448d91fae8054a3a
BLAKE2b-256 checksum
How to use checksums
891e439474dfd643a581bf6f3e1126dc75dee63233c5f80177584dbdf1e86ca4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 26, 2026.

Transparency log

Security for proofline-sdk 1.0.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for proofline_sdk-1.0.3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 26, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page