Skip to main content

doorstop-vscode-server

A small FastAPI server that wraps the Doorstop Python API directly (instead of shelling out to the doorstop CLI). It is designed to serve exactly one client — the Doorstop VS Code extension — and answers requests strictly one at a time; there is no concurrent request handling.

Install (editable, for development)

pip install -e .[dev]

Run

python -m doorstop_server --project <path-to-doorstop-project-root> --host 127.0.0.1 --port 7867

or, after installing:

doorstop-vscode-server --project <path-to-doorstop-project-root> --host 127.0.0.1 --port 7867

API

See src/doorstop_server/routers/ for the endpoint implementations. GET /health is the only route that is not serialized behind the request lock.

Tests

The test suite exercises the real FastAPI app against a temporary Doorstop project (no mocking of Doorstop itself), so it doubles as a pinned-down contract for the HTTP interface — every request/response shape, status code, and error format a test asserts on is something the extension can rely on.

pip install -e .[dev]
pytest
  • tests/conftest.py — shared fixtures (client, project_root, document) and a set_item_text helper for mutating an item directly via the Doorstop API (bypassing the server) to simulate out-of-band edits.
  • tests/test_serialization.py — proves the one-request-at-a-time guarantee black-box: fires concurrent /items calls and checks for zero UID collisions/gaps, rather than inspecting the lock directly.
  • tests/test_errors.py — pins down the structured {"error": {"code", "message"}} shape for both expected (DoorstopError) and unexpected exceptions.

Doorstop version coupling

src/doorstop_server/validation_rules.py recognises Doorstop's validation output by matching its message wording, because Doorstop 3.2 yields issues as bare DoorstopError / DoorstopWarning / DoorstopInfo objects carrying nothing but a string - no check id, no item reference, no field.

CHECK_TABLE in that file is therefore pinned to Doorstop 3.2. On a Doorstop upgrade, re-check it: run the test suite first (several tests assert exact check ids against real Doorstop output and will fail loudly if the wording moved), then compare against contracts/validation-api.md section 2 in the extension repo.

Two things limit the damage of a missed change:

  • An unmatched message is never dropped. It is returned as check: "unknown" with field: null at Doorstop's own severity, so the user still sees the problem - only its placement degrades to the item's first line.
  • The coupling lives in exactly one named file.

GET /validate must also keep running under read_only_validation(). Doorstop's validation rewrites requirement files with its shipped defaults: a plain get_issues() pass over a 9-item project rewrote 7 files and silently stamped away a suspect link instead of reporting it. test_validate_writes_nothing is the regression test for this.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

doorstop_vscode_server-0.1.2.tar.gz (25.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

doorstop_vscode_server-0.1.2-py3-none-any.whl (18.1 kB view details)

Uploaded Python 3

File details

Details for the file doorstop_vscode_server-0.1.2.tar.gz.

File metadata

  • Download URL: doorstop_vscode_server-0.1.2.tar.gz
  • Upload date:
  • Size: 25.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for doorstop_vscode_server-0.1.2.tar.gz
Algorithm Hash digest
SHA256 fb25d824d12ad947d265454debed8ceefef4a1e6818d15f4c0efbaf2b1b5a221
MD5 8cb3cd2031861a265cd8d854fab78a13
BLAKE2b-256 1a4f35f74cbd1ec36f1136f6f43c64f8bae4c8d8cb53bf8083c50badcfcd7586

See more details on using hashes here.

Provenance

The following attestation bundles were made for doorstop_vscode_server-0.1.2.tar.gz:

Publisher: publish.yml on simonwalbrun-lab/doorstop-vscode-server

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file doorstop_vscode_server-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for doorstop_vscode_server-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5d8974b763a9438625e4cb428bbd85fe51c4fa0548abc66ac1c3b4beb8f414c8
MD5 2d167fe415056df2c972d62f75bb856c
BLAKE2b-256 f889cf3ab7b70ba111fb8022154445d7ced5fa82d73a8ca73464fe4e3ba514c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for doorstop_vscode_server-0.1.2-py3-none-any.whl:

Publisher: publish.yml on simonwalbrun-lab/doorstop-vscode-server

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 files

0.1.0

2 files

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