Changelog¶
All notable changes to sfmapi are recorded here.
The format follows Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased is auto-populated by
release-drafter
based on merged PR labels (see .github/release-drafter.yml). At
release time, the drafted notes are promoted to a versioned section
below and a new Unreleased block is started.
Unreleased¶
Drafted by release-drafter from merged PRs since the last tag.
Added¶
Added
GET /v1/jobs/{id}/progress, a compact polling snapshot for job status, task counts, latest progress event, active task, and best-effort overall progress.Added an optional backend
ProgressReportercontract. Long-running backend methods may acceptprogress=to emit durableProgressEventtelemetry without breaking existing backend implementations.Added an optional FastMCP adapter,
sfmapi-mcpentrypoint, andSFMAPI_MCP_ENABLEDFastAPI mount for local agent access over stdio or HTTP, including local HTML status pages.Added MCP read-only tool annotations, resource templates, server instructions, and a non-loopback HTTP opt-in guard.
Scoped MCP tenant access with
SFMAPI_MCP_TENANT_IDso API-key deployments cannot use MCP as a cross-tenant read bypass.Added a backend action catalog at
/v1/backend/actionsso backend-native tools can be discovered, validated, and submitted as normal jobs without leaking tool-specific ids into portable capability flags.Added
SFMAPI_MCP_MODEand thesfmapi serve --mcp local/sfmapi mcpcommands for a clearer local agent setup, while keepingSFMAPI_MCP_ENABLED=trueas a compatibility alias.
Changed¶
Reorganized the published documentation homepage and sidebar around user journeys: start, API usage, backend implementation, operations, SDKs, specification, and contribution.
Cleaned up SDK documentation to distinguish generated Python and TypeScript surfaces from the header-only C++ client.
Removed internal design notes, AIP audits, proposals, and legacy Python client API pages from the public site while keeping them in the repository for development history.
Clarified authentication, admin-route, quota, backend-output, and runtime-version documentation to match current implementation behavior.
0.0.1 - 2026-05-02¶
Added¶
Phase 0 skeleton: FastAPI app, tenancy scaffold (
tenant_ideverywhere), blob store, chunked upload, projects/datasets/images CRUD,runtime_versionstable.Phase 1 orchestrator + workers: in-house Job→Task DAG, ARQ executor, per-task lease/heartbeat, sealed-snapshot writer, ProgressEvent v1 schema, SSE streaming for
/v1/jobs/{id}/events. SfM stage endpoints forfeatures,matches,verify.Phase 2 incremental SfM:
IncrementalSpecdiscriminated union,MappingInputcheckpoint primitives, standalonebundle_adjust,triangulate,relocalize,pgo,export, paginated reads, binary points format (application/x-sfm-points-v1).Phase 3 segmentation: SAM lazy adapter,
MaskSetmodel,model_artifactregistry with sha-verified install.Phase 4 recipes:
pipelines/{incremental|global|hierarchical|spherical}sugar endpoint that builds a 4-node DAG.Phase 5 production hardening: S3 source GA + global LRU cache, fair-share scheduler, Prometheus metrics, full resume from
MappingInput, API-key auth, structured logging with per-joblog.jsonl, snapshot/job GC.Deployment:
deploy/docker-compose.yml(web + redis + postgres),deploy/Dockerfile.web,deploy/install-worker.ps1+deploy/bootstrap-worker.ps1(Windows + CUDA),deploy/README.md,worker-installer.zipproduced at release time.CI:
ci.yml(lint, test-sqlite, test-postgres, smoke),release.yml(GHCR + GH release + worker-installer.zip),worker-tests.yml(self-hosted GPU runner, real pycolmap),dependabot.yml,renovate.json(trackscolmap_modref).